@openhands/agent-canvas 1.14.0 → 1.15.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 (1590) hide show
  1. package/README.md +1 -1
  2. package/README.windows.md +2 -2
  3. package/build/assets/acp-providers-BKvmTf82.js +1 -0
  4. package/build/assets/active-backend-context-DKFSMbn3.js +2 -0
  5. package/build/assets/agent-context-settings-D3PjSTU1.js +1 -0
  6. package/build/assets/agent-profiles-settings-D4cY5U2T.js +1 -0
  7. package/build/assets/agent-server-conversation-service.api-DozDKIW_.js +86 -0
  8. package/build/assets/agent-settings-351vXWc9.js +2 -0
  9. package/build/assets/agent-settings-Ce7BDZ6I.js +1 -0
  10. package/build/assets/alert-banner-Kyy1YWZU.js +1 -0
  11. package/build/assets/api-error-message-BJyfWp6p.js +1 -0
  12. package/build/assets/api-key-entry-screen-INIxqAMs.js +1 -0
  13. package/build/assets/app-settings-CbHqzQus.js +1 -0
  14. package/build/assets/automation-detail-DXDhUwPq.js +3 -0
  15. package/build/assets/automation-export-BRopEHMu.js +2 -0
  16. package/build/assets/automation-git-sync-CzyS4cn1.js +1 -0
  17. package/build/assets/automation-setup-route-FRr05f_g.js +1 -0
  18. package/build/assets/automation-templates-C_0FZgLG.js +1 -0
  19. package/build/assets/automations-list-CERuQWE6.js +1 -0
  20. package/build/assets/back-nav-button-Dm9tIjVf.js +1 -0
  21. package/build/assets/backend-form-modal-DK78-jn1.js +1 -0
  22. package/build/assets/backend-synced-settings-badge-3fOwg6Bd.js +1 -0
  23. package/build/assets/badge-D4SqUCsR.js +1 -0
  24. package/build/assets/base-modal-C7_BDl_U.js +1 -0
  25. package/build/assets/bot-C-0Wu7vQ.js +1 -0
  26. package/build/assets/brand-button-Dxv6PDeN.js +1 -0
  27. package/build/assets/browser-11etCQ04.js +7 -0
  28. package/build/assets/browser-tab-BAl4ckJE.js +1 -0
  29. package/build/assets/chat-send-button-DWwR2cgI.js +1 -0
  30. package/build/assets/check-Cf2YoT90.js +1 -0
  31. package/build/assets/chevron-down-C3OQ-ehx.js +1 -0
  32. package/build/assets/chevron-right-CN1uUiJ1.js +1 -0
  33. package/build/assets/circle-check-g5yeGMd-.js +1 -0
  34. package/build/assets/circle-plus-check-toggle-CBh_qomE.js +1 -0
  35. package/build/assets/cloud-funnel-analytics-287iIERo.js +1 -0
  36. package/build/assets/cog-C4rrw-ZK.js +1 -0
  37. package/build/assets/command-menu-BZQ8S3Ke.js +1 -0
  38. package/build/assets/commits-tab-DZtJgaDM.js +1 -0
  39. package/build/assets/condenser-settings-BcNmYR4s.js +1 -0
  40. package/build/assets/confirmation-modal-Bk4JRcCM.js +1 -0
  41. package/build/assets/context-menu-list-item-lVYETtY5.js +1 -0
  42. package/build/assets/conversation-CchMzpGl.js +1 -0
  43. package/build/assets/conversation-Dpzftz57.js +93 -0
  44. package/build/assets/conversation-panel-CchMzpGl.js +1 -0
  45. package/build/assets/conversation-state-store-a9d2fxRc.js +1 -0
  46. package/build/assets/conversation-store-Ca3ghXap.js +6 -0
  47. package/build/assets/conversation-tab-empty-state-HJtkmHZj.js +1 -0
  48. package/build/assets/copy-to-clipboard-button-Cjkswvnj.js +1 -0
  49. package/build/assets/device-verify-EZhHhBT7.js +1 -0
  50. package/build/assets/dropdown-classes-DJe-E6MC.js +1 -0
  51. package/build/assets/edit-automation-modal-D-urtv8n.js +1 -0
  52. package/build/assets/empty-state-CvaVahVr.js +1 -0
  53. package/build/assets/entry.client-C7Bi2tkU.js +2 -0
  54. package/build/assets/enum-filter-dropdown-DliX_Lo0.js +1 -0
  55. package/build/assets/environment-switch-overlay-CEKrFiMw.js +1 -0
  56. package/build/assets/error-state-BALXiBNy.js +1 -0
  57. package/build/assets/extension-module-card-classes-DpeaYhYo.js +1 -0
  58. package/build/assets/extensions-hub-CFduxBnk.js +1 -0
  59. package/build/assets/extensions-navigation-BeC224yX.js +1 -0
  60. package/build/assets/external-link-DFpYunfj.js +1 -0
  61. package/build/assets/files-tab-CL3J9b3p.js +1 -0
  62. package/build/assets/form-control-classes-CGw40z5h.js +1 -0
  63. package/build/assets/get-git-path-DlAJa_i6.js +1 -0
  64. package/build/assets/git-repo-dropdown-DGMEhz7d.js +1 -0
  65. package/build/assets/git-repo-dropdown-ai8qaNkD.js +1 -0
  66. package/build/assets/highlighted-source-view-C3sxykQi.js +1 -0
  67. package/build/assets/home-BCGlNJCA.js +1 -0
  68. package/build/assets/home-DB1pRqTC.js +1 -0
  69. package/build/assets/home-automation-run-tooltip-CooFQRIG.js +1 -0
  70. package/build/assets/home-store-Dl1dPE58.js +1 -0
  71. package/build/assets/index-home-DB1pRqTC.js +1 -0
  72. package/build/assets/info-uYSVzX86.js +1 -0
  73. package/build/assets/install-server-modal-BbJdhzet.js +1 -0
  74. package/build/assets/kebab-menu-item-content-BYokkRHi.js +1 -0
  75. package/build/assets/key-Cn5za3rg.js +1 -0
  76. package/build/assets/launch-C1ieiOGe.js +1 -0
  77. package/build/assets/list-filter-OFkpRrmi.js +1 -0
  78. package/build/assets/list-todo-Cuu-STFc.js +1 -0
  79. package/build/assets/llm-not-configured-banner-BqqYnJ1t.js +27 -0
  80. package/build/assets/llm-settings-CnDbbmVW.js +1 -0
  81. package/build/assets/llm-settings-S8Yjg__1.js +1 -0
  82. package/build/assets/llm-subscription-service-BpPfzW4x.js +1 -0
  83. package/build/assets/loader-circle-nvrwthvj.js +1 -0
  84. package/build/assets/loading-spinner-0L3ZTToZ.js +1 -0
  85. package/build/assets/manage-backends-modal-BCUPswyl.js +1 -0
  86. package/build/assets/manifest-58597dde.js +1 -0
  87. package/build/assets/manifest-subpage-layout-BGhiUQbA.js +1 -0
  88. package/build/assets/map-provider-B9LTm23I.js +1 -0
  89. package/build/assets/markdown-renderer-Cb2sBWtV.js +8 -0
  90. package/build/assets/mcp-CKbR4Vft.js +1 -0
  91. package/build/assets/mcp-marketplace-utils-C13fFccR.js +1 -0
  92. package/build/assets/mcp-page-Bm4K2NQq.js +9 -0
  93. package/build/assets/messages-BTN5thLe.js +40 -0
  94. package/build/assets/modal-body-CMOc2tLl.js +1 -0
  95. package/build/assets/modal-classes-BAb4Y_BG.js +1 -0
  96. package/build/assets/modal-close-button-CkJ0Ktjj.js +1 -0
  97. package/build/assets/mouse-pointer-click-CsgRs_-r.js +1 -0
  98. package/build/assets/onboarding-Cx_kaiD1.js +1 -0
  99. package/build/assets/onboarding-modal-vMwn7ihv.js +1 -0
  100. package/build/assets/organization-service.api-C8XpQ0pM.js +1 -0
  101. package/build/assets/parse-git-remote-url-DpDM9bK6.js +1 -0
  102. package/build/assets/pencil-Clh1Wjvh.js +1 -0
  103. package/build/assets/planner-tab-DQvDU3ap.js +1 -0
  104. package/build/assets/plug-BuQhHSSG.js +1 -0
  105. package/build/assets/plugins-management-service-BjYeF0b0.js +1 -0
  106. package/build/assets/plus-CEKne-Yp.js +1 -0
  107. package/build/assets/profiles-service.api-QB-T_u-g.js +1 -0
  108. package/build/assets/providers-FfSZ5TXP.js +1 -0
  109. package/build/assets/proxy-tcFL2yTQ.js +1 -0
  110. package/build/assets/puzzle-A9pGxxai.js +1 -0
  111. package/build/assets/recommended-automations-launcher-Bw8uC4V6.js +1 -0
  112. package/build/assets/refresh-cw-Bh69DyYO.js +1 -0
  113. package/build/assets/root-BLeQfBEq.css +1 -0
  114. package/build/assets/root-ZKKYPR1Z.js +2 -0
  115. package/build/assets/root-layout-luJoE9IG.js +2 -0
  116. package/build/assets/schema-field-Csw5fhtN.js +1 -0
  117. package/build/assets/scroll-fade-state-Dw-i4SGq.js +1 -0
  118. package/build/assets/sdk-section-page-HTffvm7Q.js +1 -0
  119. package/build/assets/secret-form-HTUbYw5o.js +1 -0
  120. package/build/assets/secrets-service-BTor9uAU.js +1 -0
  121. package/build/assets/secrets-settings-BizaTEr1.js +1 -0
  122. package/build/assets/server-process-C9RKzd1x.js +1 -0
  123. package/build/assets/settings-BlmrkwRi.js +1 -0
  124. package/build/assets/settings-dropdown-input-tM0A0ipy.js +1 -0
  125. package/build/assets/settings-index-CKq0b0Vg.js +1 -0
  126. package/build/assets/settings-input-C03KUoSC.js +1 -0
  127. package/build/assets/settings-list-classes-BJ0g8rWj.js +1 -0
  128. package/build/assets/settings-modal-AzEF1QPP.js +1 -0
  129. package/build/assets/settings-service.api-B2agVfjL.js +1 -0
  130. package/build/assets/settings-switch-CQE0EGC-.js +1 -0
  131. package/build/assets/settings-utils-ClYOkbbI.js +1 -0
  132. package/build/assets/shared-conversation-B55pCyBG.js +1 -0
  133. package/build/assets/shield-check-CFDViW82.js +1 -0
  134. package/build/assets/sidebar-layout-D3hE08wK.js +1 -0
  135. package/build/assets/sidebar-mobile-menu-toggle-BOtyJHwE.js +1 -0
  136. package/build/assets/sidebar-nav-link-CPzhyHQg.js +1 -0
  137. package/build/assets/sidebar-onboarding-checklist-storage-3qYflszY.js +1 -0
  138. package/build/assets/sidebar-store-DtpU7zaI.js +1 -0
  139. package/build/assets/skill-card-pill-row-CFxjoqxn.js +1 -0
  140. package/build/assets/skill-filter-CWZ5kjcg.js +2 -0
  141. package/build/assets/skill-icon-badge-CPQJ6A-I.js +1 -0
  142. package/build/assets/skill-scope-CV1dkAbW.js +1 -0
  143. package/build/assets/skills-plugins-DGHULTq6.js +1 -0
  144. package/build/assets/skills-settings-CM1lFv3e.js +1 -0
  145. package/build/assets/styled-tooltip-Dl06rkpY.js +1 -0
  146. package/build/assets/task-list-tab-04GNQuii.js +1 -0
  147. package/build/assets/terminal-Cj0iHIW7.js +3 -0
  148. package/build/assets/toggle-switch-Fd_QGz0r.js +1 -0
  149. package/build/assets/trash-2-Dl8_RGz0.js +1 -0
  150. package/build/assets/trash-_RMt7Ayc.js +1 -0
  151. package/build/assets/triangle-alert-SM-q4NU_.js +1 -0
  152. package/build/assets/typography-SgFy466J.js +1 -0
  153. package/build/assets/usage-tab-BcfWV6db.js +1 -0
  154. package/build/assets/use-acp-credential-form-BsSW5NHG.js +1 -0
  155. package/build/assets/use-activate-agent-profile-B2NS8nA5.js +1 -0
  156. package/build/assets/use-agent-profiles-DWBPC0Si.js +1 -0
  157. package/build/assets/use-automation-health-BxXdzZMP.js +1 -0
  158. package/build/assets/use-automations-zYb0dUny.js +1 -0
  159. package/build/assets/use-can-manage-org-profiles-BWMahtUh.js +1 -0
  160. package/build/assets/use-cloud-current-user-id-CPHMDG-C.js +1 -0
  161. package/build/assets/use-config-Bft35DOK.js +1 -0
  162. package/build/assets/use-create-conversation-DwN5vv2f.js +1 -0
  163. package/build/assets/use-create-secret-BSxJMxHp.js +1 -0
  164. package/build/assets/use-get-secrets-BT4ihRwj.js +1 -0
  165. package/build/assets/use-has-permission-B3C8rQmR.js +1 -0
  166. package/build/assets/use-is-authed-CFGkY3-Z.js +1 -0
  167. package/build/assets/use-launch-skill-in-chat-BYjYihBP.js +1 -0
  168. package/build/assets/use-llm-configured-BI6obxsc.js +1 -0
  169. package/build/assets/use-llm-profiles-djGAhTWL.js +1 -0
  170. package/build/assets/use-manifest-capabilities-3z0-1G59.js +1 -0
  171. package/build/assets/use-onboarding-completion-BXpyUSsJ.js +1 -0
  172. package/build/assets/use-plugins-marketplace-DI4_pK56.js +1 -0
  173. package/build/assets/use-save-agent-profile-DdBSTdpN.js +1 -0
  174. package/build/assets/use-save-settings-CUZW6yXP.js +1 -0
  175. package/build/assets/use-settings-C5VhGpqd.js +1 -0
  176. package/build/assets/use-settings-nav-items-DHaUu1Dg.js +16 -0
  177. package/build/assets/use-tracking-D5t9otIF.js +3 -0
  178. package/build/assets/use-user-conversation-DT0_QCnL.js +1 -0
  179. package/build/assets/useInfiniteQuery-CgeUQPfs.js +1 -0
  180. package/build/assets/useMutation-DFnzkf6f.js +1 -0
  181. package/build/assets/useQueries-BhbrGEf1.js +1 -0
  182. package/build/assets/useQuery-BXWbZBZl.js +1 -0
  183. package/build/assets/utils-DaCIEEQP.js +1 -0
  184. package/build/assets/vendor~browser-hbU4u2Ag.js +47 -0
  185. package/build/assets/vendor~commits-tab-BaO2Ce3e.js +11 -0
  186. package/build/assets/vendor~conversation-panel~conversation-CTvDDiXg.js +1 -0
  187. package/build/assets/vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~kepq2zme-ZixYGy6E.js +186 -0
  188. package/build/assets/vendor~index-home~home~conversation-panel~conversation-BTyukeM-.js +13 -0
  189. package/build/assets/vendor~root-layout-BlUaZ18v.js +1 -0
  190. package/build/assets/vendor~root-layout~conversation-panel~conversation-BYAWJwQX.js +1 -0
  191. package/build/assets/vendor~root-layout~conversation-panel~conversation~skills-settings~automations-list~shared-~bovqqk8e-CHaLEBVR.js +1 -0
  192. package/build/assets/vendor~root-layout~index-home~home~conversation-panel~conversation~mcp~automations-list~aut~ibfbmr9f-B2OLKL7N.js +1 -0
  193. package/build/assets/vendor~root-layout~index-home~home~conversation-panel~conversation~shared-conversation-DXqM7vqB.js +1 -0
  194. package/build/assets/vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~hjcjabwg-Dtu7BpYk.js +48 -0
  195. package/build/assets/vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~iw7io29p-Dz-MAyNb.js +1 -0
  196. package/build/assets/vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~skills-setti~eo2nf80n-DonTKfQD.js +4949 -0
  197. package/build/assets/vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~skills-setti~jz4f6vo2-BgxDvUcf.js +8420 -0
  198. package/build/assets/verification-settings-Bj6bo097.js +1 -0
  199. package/build/assets/wrench-hi7Q13dF.js +1 -0
  200. package/build/assets/x-DkgltWa0.js +1 -0
  201. package/build/index.html +4 -4
  202. package/build/locales/ar/openhands.json +124 -43
  203. package/build/locales/ca/openhands.json +124 -43
  204. package/build/locales/de/openhands.json +124 -43
  205. package/build/locales/en/openhands.json +124 -43
  206. package/build/locales/es/openhands.json +124 -43
  207. package/build/locales/fr/openhands.json +124 -43
  208. package/build/locales/it/openhands.json +124 -43
  209. package/build/locales/ja/openhands.json +124 -43
  210. package/build/locales/ko-KR/openhands.json +124 -43
  211. package/build/locales/no/openhands.json +124 -43
  212. package/build/locales/pt/openhands.json +124 -43
  213. package/build/locales/tr/openhands.json +124 -43
  214. package/build/locales/uk/openhands.json +124 -43
  215. package/build/locales/zh-CN/openhands.json +124 -43
  216. package/build/locales/zh-TW/openhands.json +124 -43
  217. package/config/defaults.json +2 -2
  218. package/dist/api/agent-server-adapter.cjs +3 -3
  219. package/dist/api/agent-server-adapter.cjs.map +1 -1
  220. package/dist/api/agent-server-adapter.d.ts +10 -1
  221. package/dist/api/agent-server-adapter.js +115 -110
  222. package/dist/api/agent-server-adapter.js.map +1 -1
  223. package/dist/api/automation-service/automation-service.api.cjs +1 -1
  224. package/dist/api/automation-service/automation-service.api.cjs.map +1 -1
  225. package/dist/api/automation-service/automation-service.api.d.ts +13 -2
  226. package/dist/api/automation-service/automation-service.api.js +99 -84
  227. package/dist/api/automation-service/automation-service.api.js.map +1 -1
  228. package/dist/api/backend-registry/url-selection.cjs +1 -1
  229. package/dist/api/backend-registry/url-selection.cjs.map +1 -1
  230. package/dist/api/backend-registry/url-selection.d.ts +2 -1
  231. package/dist/api/backend-registry/url-selection.js +2 -2
  232. package/dist/api/backend-registry/url-selection.js.map +1 -1
  233. package/dist/api/conversation-service/agent-server-conversation-service.api.cjs +1 -1
  234. package/dist/api/conversation-service/agent-server-conversation-service.api.cjs.map +1 -1
  235. package/dist/api/conversation-service/agent-server-conversation-service.api.js +29 -24
  236. package/dist/api/conversation-service/agent-server-conversation-service.api.js.map +1 -1
  237. package/dist/api/git-provider-items-service.cjs +2 -0
  238. package/dist/api/git-provider-items-service.cjs.map +1 -0
  239. package/dist/api/git-provider-items-service.d.ts +25 -0
  240. package/dist/api/git-provider-items-service.js +127 -0
  241. package/dist/api/git-provider-items-service.js.map +1 -0
  242. package/dist/api/mcp-health/probe-mcp-server-health.cjs +1 -1
  243. package/dist/api/mcp-health/probe-mcp-server-health.js +31 -31
  244. package/dist/api/open-hands.types.d.ts +0 -19
  245. package/dist/api/profiles-service/profiles-service.api.cjs.map +1 -1
  246. package/dist/api/profiles-service/profiles-service.api.d.ts +16 -2
  247. package/dist/api/profiles-service/profiles-service.api.js.map +1 -1
  248. package/dist/api/provider-connections-service/provider-connections-service.api.cjs +2 -0
  249. package/dist/api/provider-connections-service/provider-connections-service.api.cjs.map +1 -0
  250. package/dist/api/provider-connections-service/provider-connections-service.api.d.ts +34 -0
  251. package/dist/api/provider-connections-service/provider-connections-service.api.js +50 -0
  252. package/dist/api/provider-connections-service/provider-connections-service.api.js.map +1 -0
  253. package/dist/components/conversation-events/chat/event-content-helpers/create-skill-ready-event.cjs +1 -1
  254. package/dist/components/conversation-events/chat/event-content-helpers/create-skill-ready-event.cjs.map +1 -1
  255. package/dist/components/conversation-events/chat/event-content-helpers/create-skill-ready-event.js +1 -1
  256. package/dist/components/conversation-events/chat/event-content-helpers/create-skill-ready-event.js.map +1 -1
  257. package/dist/components/conversation-events/chat/event-message.cjs +1 -1
  258. package/dist/components/conversation-events/chat/event-message.cjs.map +1 -1
  259. package/dist/components/conversation-events/chat/event-message.js +1 -1
  260. package/dist/components/conversation-events/chat/event-message.js.map +1 -1
  261. package/dist/components/conversation-events/chat/messages.cjs.map +1 -1
  262. package/dist/components/conversation-events/chat/messages.js.map +1 -1
  263. package/dist/components/features/automations/add-automation-menu.d.ts +7 -0
  264. package/dist/components/features/automations/add-automation-modal.cjs +2 -0
  265. package/dist/components/features/automations/add-automation-modal.cjs.map +1 -0
  266. package/dist/components/features/automations/add-automation-modal.js +42 -0
  267. package/dist/components/features/automations/add-automation-modal.js.map +1 -0
  268. package/dist/components/features/automations/automation-action-button-classes.cjs +2 -0
  269. package/dist/components/features/automations/automation-action-button-classes.cjs.map +1 -0
  270. package/dist/components/features/automations/automation-action-button-classes.d.ts +0 -2
  271. package/dist/components/features/automations/automation-action-button-classes.js +8 -0
  272. package/dist/components/features/automations/automation-action-button-classes.js.map +1 -0
  273. package/dist/components/features/automations/automation-card-skeleton.cjs +2 -0
  274. package/dist/components/features/automations/automation-card-skeleton.cjs.map +1 -0
  275. package/dist/components/features/automations/automation-card-skeleton.js +33 -0
  276. package/dist/components/features/automations/automation-card-skeleton.js.map +1 -0
  277. package/dist/components/features/automations/automation-card.cjs +2 -0
  278. package/dist/components/features/automations/automation-card.cjs.map +1 -0
  279. package/dist/components/features/automations/automation-card.d.ts +1 -1
  280. package/dist/components/features/automations/automation-card.js +160 -0
  281. package/dist/components/features/automations/automation-card.js.map +1 -0
  282. package/dist/components/features/automations/automation-group.cjs +2 -0
  283. package/dist/components/features/automations/automation-group.cjs.map +1 -0
  284. package/dist/components/features/automations/automation-group.js +54 -0
  285. package/dist/components/features/automations/automation-group.js.map +1 -0
  286. package/dist/components/features/automations/automation-list-row.cjs +2 -0
  287. package/dist/components/features/automations/automation-list-row.cjs.map +1 -0
  288. package/dist/components/features/automations/automation-list-row.js +152 -0
  289. package/dist/components/features/automations/automation-list-row.js.map +1 -0
  290. package/dist/components/features/automations/automation-run-insights.cjs +2 -0
  291. package/dist/components/features/automations/automation-run-insights.cjs.map +1 -0
  292. package/dist/components/features/automations/automation-run-insights.js +46 -0
  293. package/dist/components/features/automations/automation-run-insights.js.map +1 -0
  294. package/dist/components/features/automations/automation-view-mode.cjs +2 -0
  295. package/dist/components/features/automations/automation-view-mode.cjs.map +1 -0
  296. package/dist/components/features/automations/automation-view-mode.d.ts +5 -1
  297. package/dist/components/features/automations/automation-view-mode.js +6 -0
  298. package/dist/components/features/automations/automation-view-mode.js.map +1 -0
  299. package/dist/components/features/automations/backend-not-configured.cjs +2 -0
  300. package/dist/components/features/automations/backend-not-configured.cjs.map +1 -0
  301. package/dist/components/features/automations/backend-not-configured.js +34 -0
  302. package/dist/components/features/automations/backend-not-configured.js.map +1 -0
  303. package/dist/components/features/automations/build-automation-menu-items.cjs +2 -0
  304. package/dist/components/features/automations/build-automation-menu-items.cjs.map +1 -0
  305. package/dist/components/features/automations/build-automation-menu-items.js +53 -0
  306. package/dist/components/features/automations/build-automation-menu-items.js.map +1 -0
  307. package/dist/components/features/automations/build-automation-pills.cjs +2 -0
  308. package/dist/components/features/automations/build-automation-pills.cjs.map +1 -0
  309. package/dist/components/features/automations/build-automation-pills.js +71 -0
  310. package/dist/components/features/automations/build-automation-pills.js.map +1 -0
  311. package/dist/components/features/automations/create-instructions.cjs +2 -0
  312. package/dist/components/features/automations/create-instructions.cjs.map +1 -0
  313. package/dist/components/features/automations/create-instructions.js +102 -0
  314. package/dist/components/features/automations/create-instructions.js.map +1 -0
  315. package/dist/components/features/automations/dashboard/automations-dashboard-controls.d.ts +4 -3
  316. package/dist/components/features/automations/detail/run-status-badge.cjs +2 -0
  317. package/dist/components/features/automations/detail/run-status-badge.cjs.map +1 -0
  318. package/dist/components/features/automations/detail/run-status-badge.js +102 -0
  319. package/dist/components/features/automations/detail/run-status-badge.js.map +1 -0
  320. package/dist/components/features/automations/empty-state.cjs +2 -0
  321. package/dist/components/features/automations/empty-state.cjs.map +1 -0
  322. package/dist/components/features/automations/empty-state.js +35 -0
  323. package/dist/components/features/automations/empty-state.js.map +1 -0
  324. package/dist/components/features/automations/error-state.cjs +2 -0
  325. package/dist/components/features/automations/error-state.cjs.map +1 -0
  326. package/dist/components/features/automations/error-state.js +28 -0
  327. package/dist/components/features/automations/error-state.js.map +1 -0
  328. package/dist/components/features/automations/import-automation-modal.d.ts +2 -1
  329. package/dist/components/features/automations/kebab-menu-item-content.cjs +2 -0
  330. package/dist/components/features/automations/kebab-menu-item-content.cjs.map +1 -0
  331. package/dist/components/features/automations/kebab-menu-item-content.js +21 -0
  332. package/dist/components/features/automations/kebab-menu-item-content.js.map +1 -0
  333. package/dist/components/features/automations/kebab-menu.cjs +2 -0
  334. package/dist/components/features/automations/kebab-menu.cjs.map +1 -0
  335. package/dist/components/features/automations/kebab-menu.d.ts +2 -1
  336. package/dist/components/features/automations/kebab-menu.js +76 -0
  337. package/dist/components/features/automations/kebab-menu.js.map +1 -0
  338. package/dist/components/features/automations/recommended-automations-launcher.cjs +2 -0
  339. package/dist/components/features/automations/recommended-automations-launcher.cjs.map +1 -0
  340. package/dist/components/features/automations/recommended-automations-launcher.d.ts +7 -1
  341. package/dist/components/features/automations/recommended-automations-launcher.js +134 -0
  342. package/dist/components/features/automations/recommended-automations-launcher.js.map +1 -0
  343. package/dist/components/features/automations/recommended-automations-rail.cjs +2 -0
  344. package/dist/components/features/automations/recommended-automations-rail.cjs.map +1 -0
  345. package/dist/components/features/automations/recommended-automations-rail.d.ts +9 -0
  346. package/dist/components/features/automations/recommended-automations-rail.js +127 -0
  347. package/dist/components/features/automations/recommended-automations-rail.js.map +1 -0
  348. package/dist/components/features/automations/recommended-automations-section.cjs +2 -0
  349. package/dist/components/features/automations/recommended-automations-section.cjs.map +1 -0
  350. package/dist/components/features/automations/recommended-automations-section.d.ts +2 -2
  351. package/dist/components/features/automations/recommended-automations-section.js +198 -0
  352. package/dist/components/features/automations/recommended-automations-section.js.map +1 -0
  353. package/dist/components/features/automations/responder-deployment-modal.cjs +2 -0
  354. package/dist/components/features/automations/responder-deployment-modal.cjs.map +1 -0
  355. package/dist/components/features/automations/responder-deployment-modal.js +75 -0
  356. package/dist/components/features/automations/responder-deployment-modal.js.map +1 -0
  357. package/dist/components/features/automations/status-badge.cjs +2 -0
  358. package/dist/components/features/automations/status-badge.cjs.map +1 -0
  359. package/dist/components/features/automations/status-badge.js +12 -0
  360. package/dist/components/features/automations/status-badge.js.map +1 -0
  361. package/dist/components/features/automations/to-latest-run-state.cjs +2 -0
  362. package/dist/components/features/automations/to-latest-run-state.cjs.map +1 -0
  363. package/dist/components/features/automations/to-latest-run-state.d.ts +6 -0
  364. package/dist/components/features/automations/to-latest-run-state.js +21 -0
  365. package/dist/components/features/automations/to-latest-run-state.js.map +1 -0
  366. package/dist/components/features/backends/backend-form-modal.cjs +1 -1
  367. package/dist/components/features/backends/backend-form-modal.js +10 -10
  368. package/dist/components/features/backends/manage-backends-modal.cjs +1 -1
  369. package/dist/components/features/backends/manage-backends-modal.js +5 -5
  370. package/dist/components/features/chat/chat-interface.cjs +2 -2
  371. package/dist/components/features/chat/chat-interface.cjs.map +1 -1
  372. package/dist/components/features/chat/chat-interface.js +179 -177
  373. package/dist/components/features/chat/chat-interface.js.map +1 -1
  374. package/dist/components/features/command-menu/command-menu-items.d.ts +10 -4
  375. package/dist/components/features/conversation/conversation-git-actions-menu.cjs +2 -0
  376. package/dist/components/features/conversation/conversation-git-actions-menu.cjs.map +1 -0
  377. package/dist/components/features/conversation/conversation-git-actions-menu.d.ts +15 -0
  378. package/dist/components/features/conversation/conversation-git-actions-menu.js +123 -0
  379. package/dist/components/features/conversation/conversation-git-actions-menu.js.map +1 -0
  380. package/dist/components/features/conversation/conversation-git-actions-toggle.cjs +2 -0
  381. package/dist/components/features/conversation/conversation-git-actions-toggle.cjs.map +1 -0
  382. package/dist/components/features/conversation/conversation-git-actions-toggle.d.ts +10 -0
  383. package/dist/components/features/conversation/conversation-git-actions-toggle.js +60 -0
  384. package/dist/components/features/conversation/conversation-git-actions-toggle.js.map +1 -0
  385. package/dist/components/features/conversation/conversation-main/chat-interface-wrapper.cjs +1 -1
  386. package/dist/components/features/conversation/conversation-main/chat-interface-wrapper.cjs.map +1 -1
  387. package/dist/components/features/conversation/conversation-main/chat-interface-wrapper.js +46 -10
  388. package/dist/components/features/conversation/conversation-main/chat-interface-wrapper.js.map +1 -1
  389. package/dist/components/features/conversation/conversation-main/conversation-main.cjs +1 -1
  390. package/dist/components/features/conversation/conversation-main/conversation-main.cjs.map +1 -1
  391. package/dist/components/features/conversation/conversation-main/conversation-main.js +49 -43
  392. package/dist/components/features/conversation/conversation-main/conversation-main.js.map +1 -1
  393. package/dist/components/features/conversation/conversation-name-with-status.cjs +1 -1
  394. package/dist/components/features/conversation/conversation-name-with-status.cjs.map +1 -1
  395. package/dist/components/features/conversation/conversation-name-with-status.js +49 -40
  396. package/dist/components/features/conversation/conversation-name-with-status.js.map +1 -1
  397. package/dist/components/features/conversation/conversation-name.cjs +1 -1
  398. package/dist/components/features/conversation/conversation-name.js +4 -4
  399. package/dist/components/features/conversation/conversation-overview-automations-panel.cjs +2 -0
  400. package/dist/components/features/conversation/conversation-overview-automations-panel.cjs.map +1 -0
  401. package/dist/components/features/conversation/conversation-overview-automations-panel.d.ts +6 -0
  402. package/dist/components/features/conversation/conversation-overview-automations-panel.js +48 -0
  403. package/dist/components/features/conversation/conversation-overview-automations-panel.js.map +1 -0
  404. package/dist/components/features/conversation/conversation-overview-context-menu.cjs +2 -0
  405. package/dist/components/features/conversation/conversation-overview-context-menu.cjs.map +1 -0
  406. package/dist/components/features/conversation/conversation-overview-context-menu.d.ts +10 -0
  407. package/dist/components/features/conversation/conversation-overview-context-menu.js +221 -0
  408. package/dist/components/features/conversation/conversation-overview-context-menu.js.map +1 -0
  409. package/dist/components/features/conversation/conversation-overview-diffs-row.cjs +2 -0
  410. package/dist/components/features/conversation/conversation-overview-diffs-row.cjs.map +1 -0
  411. package/dist/components/features/conversation/conversation-overview-diffs-row.d.ts +2 -0
  412. package/dist/components/features/conversation/conversation-overview-diffs-row.js +88 -0
  413. package/dist/components/features/conversation/conversation-overview-diffs-row.js.map +1 -0
  414. package/dist/components/features/conversation/conversation-overview-drawer-content.cjs +2 -0
  415. package/dist/components/features/conversation/conversation-overview-drawer-content.cjs.map +1 -0
  416. package/dist/components/features/conversation/conversation-overview-drawer-content.d.ts +6 -0
  417. package/dist/components/features/conversation/conversation-overview-drawer-content.js +138 -0
  418. package/dist/components/features/conversation/conversation-overview-drawer-content.js.map +1 -0
  419. package/dist/components/features/conversation/conversation-overview-drawer-context.cjs +2 -0
  420. package/dist/components/features/conversation/conversation-overview-drawer-context.cjs.map +1 -0
  421. package/dist/components/features/conversation/conversation-overview-drawer-context.d.ts +17 -0
  422. package/dist/components/features/conversation/conversation-overview-drawer-context.js +43 -0
  423. package/dist/components/features/conversation/conversation-overview-drawer-context.js.map +1 -0
  424. package/dist/components/features/conversation/conversation-overview-drawer.cjs +2 -0
  425. package/dist/components/features/conversation/conversation-overview-drawer.cjs.map +1 -0
  426. package/dist/components/features/conversation/conversation-overview-drawer.constants.cjs +2 -0
  427. package/dist/components/features/conversation/conversation-overview-drawer.constants.cjs.map +1 -0
  428. package/dist/components/features/conversation/conversation-overview-drawer.constants.d.ts +6 -0
  429. package/dist/components/features/conversation/conversation-overview-drawer.constants.js +6 -0
  430. package/dist/components/features/conversation/conversation-overview-drawer.constants.js.map +1 -0
  431. package/dist/components/features/conversation/conversation-overview-drawer.d.ts +7 -0
  432. package/dist/components/features/conversation/conversation-overview-drawer.js +45 -0
  433. package/dist/components/features/conversation/conversation-overview-drawer.js.map +1 -0
  434. package/dist/components/features/conversation/conversation-overview-drawer.types.cjs +2 -0
  435. package/dist/components/features/conversation/conversation-overview-drawer.types.cjs.map +1 -0
  436. package/dist/components/features/conversation/conversation-overview-drawer.types.d.ts +12 -0
  437. package/dist/components/features/conversation/conversation-overview-drawer.types.js +13 -0
  438. package/dist/components/features/conversation/conversation-overview-drawer.types.js.map +1 -0
  439. package/dist/components/features/conversation/conversation-overview-git-items-panel.cjs +2 -0
  440. package/dist/components/features/conversation/conversation-overview-git-items-panel.cjs.map +1 -0
  441. package/dist/components/features/conversation/conversation-overview-git-items-panel.d.ts +7 -0
  442. package/dist/components/features/conversation/conversation-overview-git-items-panel.js +81 -0
  443. package/dist/components/features/conversation/conversation-overview-git-items-panel.js.map +1 -0
  444. package/dist/components/features/conversation/conversation-overview-git-section.cjs +2 -0
  445. package/dist/components/features/conversation/conversation-overview-git-section.cjs.map +1 -0
  446. package/dist/components/features/conversation/conversation-overview-git-section.d.ts +6 -0
  447. package/dist/components/features/conversation/conversation-overview-git-section.js +143 -0
  448. package/dist/components/features/conversation/conversation-overview-git-section.js.map +1 -0
  449. package/dist/components/features/conversation/conversation-overview-mcp-panel.cjs +2 -0
  450. package/dist/components/features/conversation/conversation-overview-mcp-panel.cjs.map +1 -0
  451. package/dist/components/features/conversation/conversation-overview-mcp-panel.d.ts +6 -0
  452. package/dist/components/features/conversation/conversation-overview-mcp-panel.js +108 -0
  453. package/dist/components/features/conversation/conversation-overview-mcp-panel.js.map +1 -0
  454. package/dist/components/features/conversation/conversation-overview-panel.cjs +2 -0
  455. package/dist/components/features/conversation/conversation-overview-panel.cjs.map +1 -0
  456. package/dist/components/features/conversation/conversation-overview-panel.constants.cjs +2 -0
  457. package/dist/components/features/conversation/conversation-overview-panel.constants.cjs.map +1 -0
  458. package/dist/components/features/conversation/conversation-overview-panel.constants.d.ts +24 -0
  459. package/dist/components/features/conversation/conversation-overview-panel.constants.js +12 -0
  460. package/dist/components/features/conversation/conversation-overview-panel.constants.js.map +1 -0
  461. package/dist/components/features/conversation/conversation-overview-panel.d.ts +2 -0
  462. package/dist/components/features/conversation/conversation-overview-panel.js +102 -0
  463. package/dist/components/features/conversation/conversation-overview-panel.js.map +1 -0
  464. package/dist/components/features/conversation/conversation-overview-project-scope-toggle.cjs +2 -0
  465. package/dist/components/features/conversation/conversation-overview-project-scope-toggle.cjs.map +1 -0
  466. package/dist/components/features/conversation/conversation-overview-project-scope-toggle.d.ts +8 -0
  467. package/dist/components/features/conversation/conversation-overview-project-scope-toggle.js +29 -0
  468. package/dist/components/features/conversation/conversation-overview-project-scope-toggle.js.map +1 -0
  469. package/dist/components/features/conversation/conversation-overview-secrets-panel.cjs +2 -0
  470. package/dist/components/features/conversation/conversation-overview-secrets-panel.cjs.map +1 -0
  471. package/dist/components/features/conversation/conversation-overview-secrets-panel.d.ts +6 -0
  472. package/dist/components/features/conversation/conversation-overview-secrets-panel.js +89 -0
  473. package/dist/components/features/conversation/conversation-overview-secrets-panel.js.map +1 -0
  474. package/dist/components/features/conversation/conversation-overview-sections.cjs +2 -0
  475. package/dist/components/features/conversation/conversation-overview-sections.cjs.map +1 -0
  476. package/dist/components/features/conversation/conversation-overview-sections.d.ts +43 -0
  477. package/dist/components/features/conversation/conversation-overview-sections.js +27 -0
  478. package/dist/components/features/conversation/conversation-overview-sections.js.map +1 -0
  479. package/dist/components/features/conversation/conversation-overview-skills-panel.cjs +2 -0
  480. package/dist/components/features/conversation/conversation-overview-skills-panel.cjs.map +1 -0
  481. package/dist/components/features/conversation/conversation-overview-skills-panel.d.ts +6 -0
  482. package/dist/components/features/conversation/conversation-overview-skills-panel.js +138 -0
  483. package/dist/components/features/conversation/conversation-overview-skills-panel.js.map +1 -0
  484. package/dist/components/features/conversation/conversation-overview-toggle.cjs +2 -0
  485. package/dist/components/features/conversation/conversation-overview-toggle.cjs.map +1 -0
  486. package/dist/components/features/conversation/conversation-overview-toggle.d.ts +11 -0
  487. package/dist/components/features/conversation/conversation-overview-toggle.js +99 -0
  488. package/dist/components/features/conversation/conversation-overview-toggle.js.map +1 -0
  489. package/dist/components/features/conversation/conversation-secondary-drawer.classes.cjs +2 -0
  490. package/dist/components/features/conversation/conversation-secondary-drawer.classes.cjs.map +1 -0
  491. package/dist/components/features/conversation/conversation-secondary-drawer.classes.d.ts +4 -0
  492. package/dist/components/features/conversation/conversation-secondary-drawer.classes.js +7 -0
  493. package/dist/components/features/conversation/conversation-secondary-drawer.classes.js.map +1 -0
  494. package/dist/components/features/conversation/conversation-tabs/conversation-tab-content/conversation-tab-content.cjs +1 -1
  495. package/dist/components/features/conversation/conversation-tabs/conversation-tab-content/conversation-tab-content.cjs.map +1 -1
  496. package/dist/components/features/conversation/conversation-tabs/conversation-tab-content/conversation-tab-content.js +10 -9
  497. package/dist/components/features/conversation/conversation-tabs/conversation-tab-content/conversation-tab-content.js.map +1 -1
  498. package/dist/components/features/conversation/conversation-tabs/conversation-tabs-context-menu.cjs +1 -1
  499. package/dist/components/features/conversation/conversation-tabs/conversation-tabs-context-menu.cjs.map +1 -1
  500. package/dist/components/features/conversation/conversation-tabs/conversation-tabs-context-menu.js +68 -62
  501. package/dist/components/features/conversation/conversation-tabs/conversation-tabs-context-menu.js.map +1 -1
  502. package/dist/components/features/conversation/conversation-tabs/conversation-tabs.cjs +1 -1
  503. package/dist/components/features/conversation/conversation-tabs/conversation-tabs.cjs.map +1 -1
  504. package/dist/components/features/conversation/conversation-tabs/conversation-tabs.js +98 -88
  505. package/dist/components/features/conversation/conversation-tabs/conversation-tabs.js.map +1 -1
  506. package/dist/components/features/conversation/right-panel-toggle.cjs +1 -1
  507. package/dist/components/features/conversation/right-panel-toggle.cjs.map +1 -1
  508. package/dist/components/features/conversation/right-panel-toggle.d.ts +3 -2
  509. package/dist/components/features/conversation/right-panel-toggle.js +34 -33
  510. package/dist/components/features/conversation/right-panel-toggle.js.map +1 -1
  511. package/dist/components/features/conversation-panel/conversation-panel-list-helpers.cjs +1 -1
  512. package/dist/components/features/conversation-panel/conversation-panel-list-helpers.cjs.map +1 -1
  513. package/dist/components/features/conversation-panel/conversation-panel-list-helpers.d.ts +2 -1
  514. package/dist/components/features/conversation-panel/conversation-panel-list-helpers.js +14 -7
  515. package/dist/components/features/conversation-panel/conversation-panel-list-helpers.js.map +1 -1
  516. package/dist/components/features/conversation-panel/conversation-panel.cjs +1 -1
  517. package/dist/components/features/conversation-panel/conversation-panel.cjs.map +1 -1
  518. package/dist/components/features/conversation-panel/conversation-panel.js +252 -225
  519. package/dist/components/features/conversation-panel/conversation-panel.js.map +1 -1
  520. package/dist/components/features/conversation-panel/local-new-conversation-menu.cjs +1 -1
  521. package/dist/components/features/conversation-panel/local-new-conversation-menu.cjs.map +1 -1
  522. package/dist/components/features/conversation-panel/local-new-conversation-menu.js +4 -4
  523. package/dist/components/features/conversation-panel/local-new-conversation-menu.js.map +1 -1
  524. package/dist/components/features/diff-viewer/accordion-panel.cjs +2 -0
  525. package/dist/components/features/diff-viewer/accordion-panel.cjs.map +1 -0
  526. package/dist/components/features/diff-viewer/accordion-panel.d.ts +13 -0
  527. package/dist/components/features/diff-viewer/accordion-panel.js +41 -0
  528. package/dist/components/features/diff-viewer/accordion-panel.js.map +1 -0
  529. package/dist/components/features/diff-viewer/commit-list.cjs +1 -1
  530. package/dist/components/features/diff-viewer/commit-list.cjs.map +1 -1
  531. package/dist/components/features/diff-viewer/commit-list.d.ts +5 -1
  532. package/dist/components/features/diff-viewer/commit-list.js +30 -16
  533. package/dist/components/features/diff-viewer/commit-list.js.map +1 -1
  534. package/dist/components/features/diff-viewer/commit-row.cjs +1 -1
  535. package/dist/components/features/diff-viewer/commit-row.cjs.map +1 -1
  536. package/dist/components/features/diff-viewer/commit-row.d.ts +1 -2
  537. package/dist/components/features/diff-viewer/commit-row.js +38 -34
  538. package/dist/components/features/diff-viewer/commit-row.js.map +1 -1
  539. package/dist/components/features/diff-viewer/diff-change-list.cjs +2 -0
  540. package/dist/components/features/diff-viewer/diff-change-list.cjs.map +1 -0
  541. package/dist/components/features/diff-viewer/diff-change-list.d.ts +18 -0
  542. package/dist/components/features/diff-viewer/diff-change-list.js +22 -0
  543. package/dist/components/features/diff-viewer/diff-change-list.js.map +1 -0
  544. package/dist/components/features/diff-viewer/editor-container.cjs +1 -1
  545. package/dist/components/features/diff-viewer/editor-container.cjs.map +1 -1
  546. package/dist/components/features/diff-viewer/editor-container.d.ts +2 -1
  547. package/dist/components/features/diff-viewer/editor-container.js +8 -7
  548. package/dist/components/features/diff-viewer/editor-container.js.map +1 -1
  549. package/dist/components/features/diff-viewer/file-diff-viewer.cjs +1 -1
  550. package/dist/components/features/diff-viewer/file-diff-viewer.cjs.map +1 -1
  551. package/dist/components/features/diff-viewer/file-diff-viewer.d.ts +10 -1
  552. package/dist/components/features/diff-viewer/file-diff-viewer.js +138 -112
  553. package/dist/components/features/diff-viewer/file-diff-viewer.js.map +1 -1
  554. package/dist/components/features/diff-viewer/uncommitted-changes-row.cjs +2 -0
  555. package/dist/components/features/diff-viewer/uncommitted-changes-row.cjs.map +1 -0
  556. package/dist/components/features/diff-viewer/uncommitted-changes-row.d.ts +12 -0
  557. package/dist/components/features/diff-viewer/uncommitted-changes-row.js +51 -0
  558. package/dist/components/features/diff-viewer/uncommitted-changes-row.js.map +1 -0
  559. package/dist/components/features/files-tab/file-content-viewer.cjs +1 -1
  560. package/dist/components/features/files-tab/file-content-viewer.cjs.map +1 -1
  561. package/dist/components/features/files-tab/file-content-viewer.js +0 -1
  562. package/dist/components/features/files-tab/file-content-viewer.js.map +1 -1
  563. package/dist/components/features/files-tab/file-quick-row.cjs +1 -1
  564. package/dist/components/features/files-tab/file-quick-row.cjs.map +1 -1
  565. package/dist/components/features/files-tab/file-quick-row.d.ts +9 -7
  566. package/dist/components/features/files-tab/file-quick-row.js +63 -34
  567. package/dist/components/features/files-tab/file-quick-row.js.map +1 -1
  568. package/dist/components/features/files-tab/files-tab-tree.constants.cjs +2 -0
  569. package/dist/components/features/files-tab/files-tab-tree.constants.cjs.map +1 -0
  570. package/dist/components/features/files-tab/files-tab-tree.constants.d.ts +7 -0
  571. package/dist/components/features/files-tab/files-tab-tree.constants.js +6 -0
  572. package/dist/components/features/files-tab/files-tab-tree.constants.js.map +1 -0
  573. package/dist/components/features/files-tab/segmented-toggle.cjs +1 -1
  574. package/dist/components/features/files-tab/segmented-toggle.cjs.map +1 -1
  575. package/dist/components/features/files-tab/segmented-toggle.d.ts +5 -3
  576. package/dist/components/features/files-tab/segmented-toggle.js +10 -13
  577. package/dist/components/features/files-tab/segmented-toggle.js.map +1 -1
  578. package/dist/components/features/files-tab/tree-node.cjs +1 -1
  579. package/dist/components/features/files-tab/tree-node.cjs.map +1 -1
  580. package/dist/components/features/files-tab/tree-node.js +34 -32
  581. package/dist/components/features/files-tab/tree-node.js.map +1 -1
  582. package/dist/components/features/files-tab/workspace-path.cjs +2 -0
  583. package/dist/components/features/files-tab/workspace-path.cjs.map +1 -0
  584. package/dist/components/features/files-tab/workspace-path.d.ts +6 -0
  585. package/dist/components/features/files-tab/workspace-path.js +41 -0
  586. package/dist/components/features/files-tab/workspace-path.js.map +1 -0
  587. package/dist/components/features/home/featured-automations/automation-health-indicator.cjs +2 -0
  588. package/dist/components/features/home/featured-automations/automation-health-indicator.cjs.map +1 -0
  589. package/dist/components/features/home/featured-automations/automation-health-indicator.js +22 -0
  590. package/dist/components/features/home/featured-automations/automation-health-indicator.js.map +1 -0
  591. package/dist/components/features/home/featured-automations/automation-run-activity-metrics.cjs +2 -0
  592. package/dist/components/features/home/featured-automations/automation-run-activity-metrics.cjs.map +1 -0
  593. package/dist/components/features/home/featured-automations/automation-run-activity-metrics.js +45 -0
  594. package/dist/components/features/home/featured-automations/automation-run-activity-metrics.js.map +1 -0
  595. package/dist/components/features/home/featured-automations/automation-run-activity-sparkline.cjs +2 -0
  596. package/dist/components/features/home/featured-automations/automation-run-activity-sparkline.cjs.map +1 -0
  597. package/dist/components/features/home/featured-automations/automation-run-activity-sparkline.js +108 -0
  598. package/dist/components/features/home/featured-automations/automation-run-activity-sparkline.js.map +1 -0
  599. package/dist/components/features/home/featured-automations/automation-run-health.cjs +2 -0
  600. package/dist/components/features/home/featured-automations/automation-run-health.cjs.map +1 -0
  601. package/dist/components/features/home/featured-automations/automation-run-health.js +75 -0
  602. package/dist/components/features/home/featured-automations/automation-run-health.js.map +1 -0
  603. package/dist/components/features/home/featured-automations/home-automation-run-tooltip.cjs +2 -0
  604. package/dist/components/features/home/featured-automations/home-automation-run-tooltip.cjs.map +1 -0
  605. package/dist/components/features/home/featured-automations/home-automation-run-tooltip.js +74 -0
  606. package/dist/components/features/home/featured-automations/home-automation-run-tooltip.js.map +1 -0
  607. package/dist/components/features/home/featured-automations/pinned-automation-card.d.ts +3 -3
  608. package/dist/components/features/home/git-repo-dropdown/use-url-search.cjs +1 -1
  609. package/dist/components/features/home/git-repo-dropdown/use-url-search.cjs.map +1 -1
  610. package/dist/components/features/home/git-repo-dropdown/use-url-search.js +1 -1
  611. package/dist/components/features/home/git-repo-dropdown/use-url-search.js.map +1 -1
  612. package/dist/components/features/home/workspace-dropdown/folder-browser-modal.cjs +1 -1
  613. package/dist/components/features/home/workspace-dropdown/folder-browser-modal.js +6 -6
  614. package/dist/components/features/home/workspace-dropdown/manage-workspaces-modal.cjs +1 -1
  615. package/dist/components/features/home/workspace-dropdown/manage-workspaces-modal.js +6 -6
  616. package/dist/components/features/manifest/manifest-form-field.d.ts +4 -3
  617. package/dist/components/features/manifest/manifest-icons.cjs +2 -0
  618. package/dist/components/features/manifest/manifest-icons.cjs.map +1 -0
  619. package/dist/components/features/manifest/manifest-icons.d.ts +1 -0
  620. package/dist/components/features/manifest/manifest-icons.js +21 -0
  621. package/dist/components/features/manifest/manifest-icons.js.map +1 -0
  622. package/dist/components/features/manifest/manifest-repository-list.d.ts +25 -0
  623. package/dist/components/features/markdown/markdown-table-scroll.cjs +1 -1
  624. package/dist/components/features/markdown/markdown-table-scroll.cjs.map +1 -1
  625. package/dist/components/features/markdown/markdown-table-scroll.d.ts +2 -6
  626. package/dist/components/features/markdown/markdown-table-scroll.js +15 -21
  627. package/dist/components/features/markdown/markdown-table-scroll.js.map +1 -1
  628. package/dist/components/features/mcp-logo-badge.cjs +1 -1
  629. package/dist/components/features/mcp-logo-badge.cjs.map +1 -1
  630. package/dist/components/features/mcp-logo-badge.d.ts +1 -1
  631. package/dist/components/features/mcp-logo-badge.js +1 -0
  632. package/dist/components/features/mcp-logo-badge.js.map +1 -1
  633. package/dist/components/features/mcp-page/custom-server-editor.cjs +1 -1
  634. package/dist/components/features/mcp-page/custom-server-editor.js +16 -16
  635. package/dist/components/features/mcp-page/index.cjs +1 -1
  636. package/dist/components/features/mcp-page/index.js +2 -2
  637. package/dist/components/features/mcp-page/install-server-modal.cjs +1 -1
  638. package/dist/components/features/mcp-page/install-server-modal.cjs.map +1 -1
  639. package/dist/components/features/mcp-page/install-server-modal.js +25 -25
  640. package/dist/components/features/mcp-page/install-server-modal.js.map +1 -1
  641. package/dist/components/features/mcp-page/installed-server-card.cjs +1 -1
  642. package/dist/components/features/mcp-page/installed-server-card.js +5 -5
  643. package/dist/components/features/mcp-page/marketplace-card.cjs +1 -1
  644. package/dist/components/features/mcp-page/marketplace-card.js +4 -4
  645. package/dist/components/features/mcp-page/marketplace-section.cjs +1 -1
  646. package/dist/components/features/mcp-page/marketplace-section.js +3 -3
  647. package/dist/components/features/mcp-page/mcp-logo-stack-badge.cjs +2 -0
  648. package/dist/components/features/mcp-page/mcp-logo-stack-badge.cjs.map +1 -0
  649. package/dist/components/features/mcp-page/mcp-logo-stack-badge.js +60 -0
  650. package/dist/components/features/mcp-page/mcp-logo-stack-badge.js.map +1 -0
  651. package/dist/components/features/mcp-page/mcp-server-health.cjs +1 -1
  652. package/dist/components/features/mcp-page/mcp-server-health.js +18 -18
  653. package/dist/components/features/onboarding/use-onboarding-completion.cjs +2 -0
  654. package/dist/components/features/onboarding/use-onboarding-completion.cjs.map +1 -0
  655. package/dist/components/features/onboarding/use-onboarding-completion.js +32 -0
  656. package/dist/components/features/onboarding/use-onboarding-completion.js.map +1 -0
  657. package/dist/components/features/settings/app-settings/getting-started-checklist-switch.cjs +2 -0
  658. package/dist/components/features/settings/app-settings/getting-started-checklist-switch.cjs.map +1 -0
  659. package/dist/components/features/settings/app-settings/getting-started-checklist-switch.d.ts +1 -0
  660. package/dist/components/features/settings/app-settings/getting-started-checklist-switch.js +22 -0
  661. package/dist/components/features/settings/app-settings/getting-started-checklist-switch.js.map +1 -0
  662. package/dist/components/features/settings/brand-button.cjs +1 -1
  663. package/dist/components/features/settings/brand-button.cjs.map +1 -1
  664. package/dist/components/features/settings/brand-button.d.ts +2 -0
  665. package/dist/components/features/settings/brand-button.js +4 -2
  666. package/dist/components/features/settings/brand-button.js.map +1 -1
  667. package/dist/components/features/settings/llm-profiles/delete-provider-connection-modal.cjs +1 -0
  668. package/dist/components/features/settings/llm-profiles/delete-provider-connection-modal.d.ts +7 -0
  669. package/dist/components/features/settings/llm-profiles/delete-provider-connection-modal.js +7 -0
  670. package/dist/components/features/settings/llm-profiles/llm-profiles-manager.cjs +1 -1
  671. package/dist/components/features/settings/llm-profiles/llm-profiles-manager.js +3 -0
  672. package/dist/components/features/settings/llm-profiles/llm-settings-local-view.cjs +1 -1
  673. package/dist/components/features/settings/llm-profiles/llm-settings-local-view.js +1 -0
  674. package/dist/components/features/settings/llm-profiles/profiles-body.d.ts +20 -1
  675. package/dist/components/features/settings/llm-profiles/provider-connection-modal.cjs +1 -0
  676. package/dist/components/features/settings/llm-profiles/provider-connection-modal.d.ts +19 -0
  677. package/dist/components/features/settings/llm-profiles/provider-connection-modal.js +10 -0
  678. package/dist/components/features/settings/llm-profiles/provider-connection-row.cjs +1 -0
  679. package/dist/components/features/settings/llm-profiles/provider-connection-row.d.ts +10 -0
  680. package/dist/components/features/settings/llm-profiles/provider-connection-row.js +6 -0
  681. package/dist/components/features/settings/llm-profiles/provider-connections-manager.cjs +1 -0
  682. package/dist/components/features/settings/llm-profiles/provider-connections-manager.d.ts +15 -0
  683. package/dist/components/features/settings/llm-profiles/provider-connections-manager.js +8 -0
  684. package/dist/components/features/settings/sdk-settings/schema-field.cjs +1 -1
  685. package/dist/components/features/settings/sdk-settings/schema-field.js +6 -6
  686. package/dist/components/features/settings/sdk-settings/sdk-section-page.cjs +1 -1
  687. package/dist/components/features/settings/sdk-settings/sdk-section-page.js +7 -7
  688. package/dist/components/features/settings/sdk-settings/sdk-section-page.js.map +1 -1
  689. package/dist/components/features/settings/secrets-settings/secret-form.cjs +1 -1
  690. package/dist/components/features/settings/secrets-settings/secret-form.js +7 -7
  691. package/dist/components/features/settings/settings-input.cjs +1 -1
  692. package/dist/components/features/settings/settings-input.cjs.map +1 -1
  693. package/dist/components/features/settings/settings-input.d.ts +6 -0
  694. package/dist/components/features/settings/settings-input.js +14 -13
  695. package/dist/components/features/settings/settings-input.js.map +1 -1
  696. package/dist/components/features/sidebar/sidebar-onboarding-checklist-item-icon.cjs +2 -0
  697. package/dist/components/features/sidebar/sidebar-onboarding-checklist-item-icon.cjs.map +1 -0
  698. package/dist/components/features/sidebar/sidebar-onboarding-checklist-item-icon.d.ts +7 -0
  699. package/dist/components/features/sidebar/sidebar-onboarding-checklist-item-icon.js +102 -0
  700. package/dist/components/features/sidebar/sidebar-onboarding-checklist-item-icon.js.map +1 -0
  701. package/dist/components/features/sidebar/sidebar-onboarding-checklist-item-preview.cjs +2 -0
  702. package/dist/components/features/sidebar/sidebar-onboarding-checklist-item-preview.cjs.map +1 -0
  703. package/dist/components/features/sidebar/sidebar-onboarding-checklist-item-preview.d.ts +8 -0
  704. package/dist/components/features/sidebar/sidebar-onboarding-checklist-item-preview.js +66 -0
  705. package/dist/components/features/sidebar/sidebar-onboarding-checklist-item-preview.js.map +1 -0
  706. package/dist/components/features/sidebar/sidebar-onboarding-checklist-llm-complete.cjs +2 -0
  707. package/dist/components/features/sidebar/sidebar-onboarding-checklist-llm-complete.cjs.map +1 -0
  708. package/dist/components/features/sidebar/sidebar-onboarding-checklist-llm-complete.d.ts +3 -0
  709. package/dist/components/features/sidebar/sidebar-onboarding-checklist-llm-complete.js +15 -0
  710. package/dist/components/features/sidebar/sidebar-onboarding-checklist-llm-complete.js.map +1 -0
  711. package/dist/components/features/sidebar/sidebar-onboarding-checklist-storage.cjs +2 -0
  712. package/dist/components/features/sidebar/sidebar-onboarding-checklist-storage.cjs.map +1 -0
  713. package/dist/components/features/sidebar/sidebar-onboarding-checklist-storage.d.ts +10 -0
  714. package/dist/components/features/sidebar/sidebar-onboarding-checklist-storage.js +39 -0
  715. package/dist/components/features/sidebar/sidebar-onboarding-checklist-storage.js.map +1 -0
  716. package/dist/components/features/sidebar/sidebar-onboarding-checklist.cjs +2 -0
  717. package/dist/components/features/sidebar/sidebar-onboarding-checklist.cjs.map +1 -0
  718. package/dist/components/features/sidebar/sidebar-onboarding-checklist.constants.cjs +2 -0
  719. package/dist/components/features/sidebar/sidebar-onboarding-checklist.constants.cjs.map +1 -0
  720. package/dist/components/features/sidebar/sidebar-onboarding-checklist.constants.d.ts +26 -0
  721. package/dist/components/features/sidebar/sidebar-onboarding-checklist.constants.js +78 -0
  722. package/dist/components/features/sidebar/sidebar-onboarding-checklist.constants.js.map +1 -0
  723. package/dist/components/features/sidebar/sidebar-onboarding-checklist.d.ts +5 -0
  724. package/dist/components/features/sidebar/sidebar-onboarding-checklist.js +127 -0
  725. package/dist/components/features/sidebar/sidebar-onboarding-checklist.js.map +1 -0
  726. package/dist/components/features/sidebar/sidebar-rail-body.cjs +1 -1
  727. package/dist/components/features/sidebar/sidebar-rail-body.cjs.map +1 -1
  728. package/dist/components/features/sidebar/sidebar-rail-body.js +115 -111
  729. package/dist/components/features/sidebar/sidebar-rail-body.js.map +1 -1
  730. package/dist/components/features/sidebar/use-sidebar-onboarding-checklist-dismissed.cjs +2 -0
  731. package/dist/components/features/sidebar/use-sidebar-onboarding-checklist-dismissed.cjs.map +1 -0
  732. package/dist/components/features/sidebar/use-sidebar-onboarding-checklist-dismissed.d.ts +1 -0
  733. package/dist/components/features/sidebar/use-sidebar-onboarding-checklist-dismissed.js +10 -0
  734. package/dist/components/features/sidebar/use-sidebar-onboarding-checklist-dismissed.js.map +1 -0
  735. package/dist/components/features/sidebar/use-sidebar-onboarding-checklist.cjs +2 -0
  736. package/dist/components/features/sidebar/use-sidebar-onboarding-checklist.cjs.map +1 -0
  737. package/dist/components/features/sidebar/use-sidebar-onboarding-checklist.d.ts +15 -0
  738. package/dist/components/features/sidebar/use-sidebar-onboarding-checklist.js +75 -0
  739. package/dist/components/features/sidebar/use-sidebar-onboarding-checklist.js.map +1 -0
  740. package/dist/components/features/skills/add-skill-modal.cjs +2 -0
  741. package/dist/components/features/skills/add-skill-modal.cjs.map +1 -0
  742. package/dist/components/features/skills/add-skill-modal.js +164 -0
  743. package/dist/components/features/skills/add-skill-modal.js.map +1 -0
  744. package/dist/components/features/skills/build-skill-pills.cjs +2 -0
  745. package/dist/components/features/skills/build-skill-pills.cjs.map +1 -0
  746. package/dist/components/features/skills/build-skill-pills.js +88 -0
  747. package/dist/components/features/skills/build-skill-pills.js.map +1 -0
  748. package/dist/components/features/skills/get-skill-card-description.cjs +2 -0
  749. package/dist/components/features/skills/get-skill-card-description.cjs.map +1 -0
  750. package/dist/components/features/skills/get-skill-card-description.js +34 -0
  751. package/dist/components/features/skills/get-skill-card-description.js.map +1 -0
  752. package/dist/components/features/skills/get-skill-chat-launch-message.cjs +2 -0
  753. package/dist/components/features/skills/get-skill-chat-launch-message.cjs.map +1 -0
  754. package/dist/components/features/skills/get-skill-chat-launch-message.js +9 -0
  755. package/dist/components/features/skills/get-skill-chat-launch-message.js.map +1 -0
  756. package/dist/components/features/skills/is-copyable-skill-source.cjs +2 -0
  757. package/dist/components/features/skills/is-copyable-skill-source.cjs.map +1 -0
  758. package/dist/components/features/skills/is-copyable-skill-source.js +9 -0
  759. package/dist/components/features/skills/is-copyable-skill-source.js.map +1 -0
  760. package/dist/components/features/skills/skill-card-pill-row.cjs +2 -0
  761. package/dist/components/features/skills/skill-card-pill-row.cjs.map +1 -0
  762. package/dist/components/features/skills/skill-card-pill-row.d.ts +1 -1
  763. package/dist/components/features/skills/skill-card-pill-row.js +137 -0
  764. package/dist/components/features/skills/skill-card-pill-row.js.map +1 -0
  765. package/dist/components/features/skills/skill-card.cjs +2 -0
  766. package/dist/components/features/skills/skill-card.cjs.map +1 -0
  767. package/dist/components/features/skills/skill-card.js +93 -0
  768. package/dist/components/features/skills/skill-card.js.map +1 -0
  769. package/dist/components/features/skills/skill-detail-modal.cjs +3 -0
  770. package/dist/components/features/skills/skill-detail-modal.cjs.map +1 -0
  771. package/dist/components/features/skills/skill-detail-modal.js +150 -0
  772. package/dist/components/features/skills/skill-detail-modal.js.map +1 -0
  773. package/dist/components/features/skills/skill-facet-rail.cjs +2 -0
  774. package/dist/components/features/skills/skill-facet-rail.cjs.map +1 -0
  775. package/dist/components/features/skills/skill-facet-rail.js +42 -0
  776. package/dist/components/features/skills/skill-facet-rail.js.map +1 -0
  777. package/dist/components/features/skills/skill-facet-row.cjs +2 -0
  778. package/dist/components/features/skills/skill-facet-row.cjs.map +1 -0
  779. package/dist/components/features/skills/skill-facet-row.js +44 -0
  780. package/dist/components/features/skills/skill-facet-row.js.map +1 -0
  781. package/dist/components/features/skills/skill-filter.cjs +2 -0
  782. package/dist/components/features/skills/skill-filter.cjs.map +1 -0
  783. package/dist/components/features/skills/skill-filter.js +166 -0
  784. package/dist/components/features/skills/skill-filter.js.map +1 -0
  785. package/dist/components/features/skills/skill-filters-modal.cjs +2 -0
  786. package/dist/components/features/skills/skill-filters-modal.cjs.map +1 -0
  787. package/dist/components/features/skills/skill-filters-modal.js +53 -0
  788. package/dist/components/features/skills/skill-filters-modal.js.map +1 -0
  789. package/dist/components/features/skills/skill-icon-badge.cjs +2 -0
  790. package/dist/components/features/skills/skill-icon-badge.cjs.map +1 -0
  791. package/dist/components/features/skills/skill-icon-badge.js +17 -0
  792. package/dist/components/features/skills/skill-icon-badge.js.map +1 -0
  793. package/dist/components/features/skills/skill-type-badge.cjs +2 -0
  794. package/dist/components/features/skills/skill-type-badge.cjs.map +1 -0
  795. package/dist/components/features/skills/skill-type-badge.js +21 -0
  796. package/dist/components/features/skills/skill-type-badge.js.map +1 -0
  797. package/dist/components/features/skills/skills-toolbar.cjs +2 -0
  798. package/dist/components/features/skills/skills-toolbar.cjs.map +1 -0
  799. package/dist/components/features/skills/skills-toolbar.js +63 -0
  800. package/dist/components/features/skills/skills-toolbar.js.map +1 -0
  801. package/dist/components/shared/buttons/circle-plus-check-toggle.cjs +1 -1
  802. package/dist/components/shared/buttons/circle-plus-check-toggle.cjs.map +1 -1
  803. package/dist/components/shared/buttons/circle-plus-check-toggle.js +19 -6
  804. package/dist/components/shared/buttons/circle-plus-check-toggle.js.map +1 -1
  805. package/dist/components/shared/filters/enum-filter-dropdown.cjs +1 -1
  806. package/dist/components/shared/filters/enum-filter-dropdown.cjs.map +1 -1
  807. package/dist/components/shared/filters/enum-filter-dropdown.d.ts +4 -1
  808. package/dist/components/shared/filters/enum-filter-dropdown.js +14 -14
  809. package/dist/components/shared/filters/enum-filter-dropdown.js.map +1 -1
  810. package/dist/components/shared/modals/settings/settings-form.cjs +1 -1
  811. package/dist/components/shared/modals/settings/settings-form.js +4 -4
  812. package/dist/components/ui/resize-handle.cjs +1 -1
  813. package/dist/components/ui/resize-handle.cjs.map +1 -1
  814. package/dist/components/ui/resize-handle.d.ts +2 -1
  815. package/dist/components/ui/resize-handle.js +6 -5
  816. package/dist/components/ui/resize-handle.js.map +1 -1
  817. package/dist/config/defaults.cjs +1 -1
  818. package/dist/config/defaults.cjs.map +1 -1
  819. package/dist/config/defaults.js +2 -2
  820. package/dist/config/defaults.js.map +1 -1
  821. package/dist/constants/skills-docs.cjs +2 -0
  822. package/dist/constants/skills-docs.cjs.map +1 -0
  823. package/dist/constants/skills-docs.js +6 -0
  824. package/dist/constants/skills-docs.js.map +1 -0
  825. package/dist/contexts/conversation-websocket-context.cjs +3 -3
  826. package/dist/contexts/conversation-websocket-context.cjs.map +1 -1
  827. package/dist/contexts/conversation-websocket-context.js +174 -149
  828. package/dist/contexts/conversation-websocket-context.js.map +1 -1
  829. package/dist/fixtures/home-automations-demo.cjs +2 -0
  830. package/dist/fixtures/home-automations-demo.cjs.map +1 -0
  831. package/dist/fixtures/home-automations-demo.d.ts +1 -3
  832. package/dist/fixtures/home-automations-demo.js +384 -0
  833. package/dist/fixtures/home-automations-demo.js.map +1 -0
  834. package/dist/hooks/chat/use-slash-command.cjs +1 -1
  835. package/dist/hooks/chat/use-slash-command.cjs.map +1 -1
  836. package/dist/hooks/chat/use-slash-command.d.ts +1 -2
  837. package/dist/hooks/chat/use-slash-command.js +1 -0
  838. package/dist/hooks/chat/use-slash-command.js.map +1 -1
  839. package/dist/hooks/mutation/use-create-conversation.cjs +1 -1
  840. package/dist/hooks/mutation/use-create-conversation.cjs.map +1 -1
  841. package/dist/hooks/mutation/use-create-conversation.js +27 -30
  842. package/dist/hooks/mutation/use-create-conversation.js.map +1 -1
  843. package/dist/hooks/mutation/use-create-provider-connection.cjs +1 -0
  844. package/dist/hooks/mutation/use-create-provider-connection.d.ts +2 -0
  845. package/dist/hooks/mutation/use-create-provider-connection.js +1 -0
  846. package/dist/hooks/mutation/use-delete-mcp-server.cjs +1 -1
  847. package/dist/hooks/mutation/use-delete-mcp-server.js +3 -3
  848. package/dist/hooks/mutation/use-delete-provider-connection.cjs +1 -0
  849. package/dist/hooks/mutation/use-delete-provider-connection.d.ts +1 -0
  850. package/dist/hooks/mutation/use-delete-provider-connection.js +1 -0
  851. package/dist/hooks/mutation/use-switch-acp-model.cjs +1 -1
  852. package/dist/hooks/mutation/use-switch-acp-model.cjs.map +1 -1
  853. package/dist/hooks/mutation/use-switch-acp-model.d.ts +5 -3
  854. package/dist/hooks/mutation/use-switch-acp-model.js +9 -13
  855. package/dist/hooks/mutation/use-switch-acp-model.js.map +1 -1
  856. package/dist/hooks/mutation/use-update-mcp-server.cjs +1 -1
  857. package/dist/hooks/mutation/use-update-mcp-server.js +6 -6
  858. package/dist/hooks/mutation/use-update-provider-connection.cjs +1 -0
  859. package/dist/hooks/mutation/use-update-provider-connection.d.ts +7 -0
  860. package/dist/hooks/mutation/use-update-provider-connection.js +1 -0
  861. package/dist/hooks/query/query-keys.cjs +1 -1
  862. package/dist/hooks/query/query-keys.cjs.map +1 -1
  863. package/dist/hooks/query/query-keys.d.ts +3 -0
  864. package/dist/hooks/query/query-keys.js +4 -4
  865. package/dist/hooks/query/query-keys.js.map +1 -1
  866. package/dist/hooks/query/use-automation-detail.cjs +1 -0
  867. package/dist/hooks/query/use-automation-detail.js +2 -0
  868. package/dist/hooks/query/use-automation-health.cjs +2 -0
  869. package/dist/hooks/query/use-automation-health.cjs.map +1 -0
  870. package/dist/hooks/query/use-automation-health.js +22 -0
  871. package/dist/hooks/query/use-automation-health.js.map +1 -0
  872. package/dist/hooks/query/use-automations.cjs +2 -0
  873. package/dist/hooks/query/use-automations.cjs.map +1 -0
  874. package/dist/hooks/query/use-automations.js +28 -0
  875. package/dist/hooks/query/use-automations.js.map +1 -0
  876. package/dist/hooks/query/use-backends-health.cjs +1 -1
  877. package/dist/hooks/query/use-backends-health.cjs.map +1 -1
  878. package/dist/hooks/query/use-backends-health.js +1 -1
  879. package/dist/hooks/query/use-backends-health.js.map +1 -1
  880. package/dist/hooks/query/use-commit-changes.cjs +1 -1
  881. package/dist/hooks/query/use-commit-changes.js +4 -4
  882. package/dist/hooks/query/use-conversation-history.cjs +1 -1
  883. package/dist/hooks/query/use-conversation-history.cjs.map +1 -1
  884. package/dist/hooks/query/use-conversation-history.js +3 -1
  885. package/dist/hooks/query/use-conversation-history.js.map +1 -1
  886. package/dist/hooks/query/use-conversation-metrics.cjs +1 -1
  887. package/dist/hooks/query/use-conversation-metrics.js +3 -3
  888. package/dist/hooks/query/use-latest-automation-runs.cjs +1 -0
  889. package/dist/hooks/query/use-latest-automation-runs.d.ts +2 -0
  890. package/dist/hooks/query/use-latest-automation-runs.js +3 -0
  891. package/dist/hooks/query/use-llm-profiles.d.ts +1 -1
  892. package/dist/hooks/query/use-paginated-conversations.cjs +1 -1
  893. package/dist/hooks/query/use-paginated-conversations.cjs.map +1 -1
  894. package/dist/hooks/query/use-paginated-conversations.js +1 -1
  895. package/dist/hooks/query/use-paginated-conversations.js.map +1 -1
  896. package/dist/hooks/query/use-provider-connections.cjs +2 -0
  897. package/dist/hooks/query/use-provider-connections.cjs.map +1 -0
  898. package/dist/hooks/query/use-provider-connections.d.ts +8 -0
  899. package/dist/hooks/query/use-provider-connections.js +19 -0
  900. package/dist/hooks/query/use-provider-connections.js.map +1 -0
  901. package/dist/hooks/query/use-repository-git-items.cjs +2 -0
  902. package/dist/hooks/query/use-repository-git-items.cjs.map +1 -0
  903. package/dist/hooks/query/use-repository-git-items.d.ts +3 -0
  904. package/dist/hooks/query/use-repository-git-items.js +33 -0
  905. package/dist/hooks/query/use-repository-git-items.js.map +1 -0
  906. package/dist/hooks/query/use-unified-get-git-changes.cjs +1 -1
  907. package/dist/hooks/query/use-unified-get-git-changes.js +4 -4
  908. package/dist/hooks/query/use-unified-git-commits.cjs +1 -1
  909. package/dist/hooks/query/use-unified-git-commits.js +4 -4
  910. package/dist/hooks/query/use-unified-git-diff.cjs +1 -1
  911. package/dist/hooks/query/use-unified-git-diff.js +4 -4
  912. package/dist/hooks/query/use-workspace-files.cjs +1 -1
  913. package/dist/hooks/query/use-workspace-files.js +6 -6
  914. package/dist/hooks/use-bash-command-runner.cjs +1 -1
  915. package/dist/hooks/use-bash-command-runner.cjs.map +1 -1
  916. package/dist/hooks/use-bash-command-runner.js +45 -42
  917. package/dist/hooks/use-bash-command-runner.js.map +1 -1
  918. package/dist/hooks/use-conversation-overview-column-space.cjs +2 -0
  919. package/dist/hooks/use-conversation-overview-column-space.cjs.map +1 -0
  920. package/dist/hooks/use-conversation-overview-column-space.d.ts +2 -0
  921. package/dist/hooks/use-conversation-overview-column-space.js +25 -0
  922. package/dist/hooks/use-conversation-overview-column-space.js.map +1 -0
  923. package/dist/hooks/use-conversation-overview-git-diff-stats.cjs +2 -0
  924. package/dist/hooks/use-conversation-overview-git-diff-stats.cjs.map +1 -0
  925. package/dist/hooks/use-conversation-overview-git-diff-stats.d.ts +7 -0
  926. package/dist/hooks/use-conversation-overview-git-diff-stats.js +37 -0
  927. package/dist/hooks/use-conversation-overview-git-diff-stats.js.map +1 -0
  928. package/dist/hooks/use-conversation-overview-panel-peek.cjs +2 -0
  929. package/dist/hooks/use-conversation-overview-panel-peek.cjs.map +1 -0
  930. package/dist/hooks/use-conversation-overview-panel-peek.d.ts +9 -0
  931. package/dist/hooks/use-conversation-overview-panel-peek.js +32 -0
  932. package/dist/hooks/use-conversation-overview-panel-peek.js.map +1 -0
  933. package/dist/hooks/use-conversation-overview-stats.cjs +2 -0
  934. package/dist/hooks/use-conversation-overview-stats.cjs.map +1 -0
  935. package/dist/hooks/use-conversation-overview-stats.d.ts +4 -0
  936. package/dist/hooks/use-conversation-overview-stats.js +15 -0
  937. package/dist/hooks/use-conversation-overview-stats.js.map +1 -0
  938. package/dist/hooks/use-conversation-primary-repository.cjs +2 -0
  939. package/dist/hooks/use-conversation-primary-repository.cjs.map +1 -0
  940. package/dist/hooks/use-conversation-primary-repository.d.ts +11 -0
  941. package/dist/hooks/use-conversation-primary-repository.js +17 -0
  942. package/dist/hooks/use-conversation-primary-repository.js.map +1 -0
  943. package/dist/hooks/use-drag-scroll.cjs +2 -0
  944. package/dist/hooks/use-drag-scroll.cjs.map +1 -0
  945. package/dist/hooks/use-drag-scroll.d.ts +12 -0
  946. package/dist/hooks/use-drag-scroll.js +41 -0
  947. package/dist/hooks/use-drag-scroll.js.map +1 -0
  948. package/dist/hooks/use-has-permission.cjs +2 -0
  949. package/dist/hooks/use-has-permission.cjs.map +1 -0
  950. package/dist/hooks/use-has-permission.js +8 -0
  951. package/dist/hooks/use-has-permission.js.map +1 -0
  952. package/dist/hooks/use-home-automation-actions.cjs +2 -0
  953. package/dist/hooks/use-home-automation-actions.cjs.map +1 -0
  954. package/dist/hooks/use-home-automation-actions.js +15 -0
  955. package/dist/hooks/use-home-automation-actions.js.map +1 -0
  956. package/dist/hooks/use-launch-skill-in-chat.cjs +2 -0
  957. package/dist/hooks/use-launch-skill-in-chat.cjs.map +1 -0
  958. package/dist/hooks/use-launch-skill-in-chat.js +16 -0
  959. package/dist/hooks/use-launch-skill-in-chat.js.map +1 -0
  960. package/dist/hooks/use-mcp-server-health.cjs +1 -1
  961. package/dist/hooks/use-mcp-server-health.js +3 -3
  962. package/dist/hooks/use-resizable-drawer-width.cjs +2 -0
  963. package/dist/hooks/use-resizable-drawer-width.cjs.map +1 -0
  964. package/dist/hooks/use-resizable-drawer-width.d.ts +22 -0
  965. package/dist/hooks/use-resizable-drawer-width.js +46 -0
  966. package/dist/hooks/use-resizable-drawer-width.js.map +1 -0
  967. package/dist/hooks/use-responder-url-secret.cjs +2 -0
  968. package/dist/hooks/use-responder-url-secret.cjs.map +1 -0
  969. package/dist/hooks/use-responder-url-secret.js +51 -0
  970. package/dist/hooks/use-responder-url-secret.js.map +1 -0
  971. package/dist/hooks/use-select-conversation-tab.cjs +1 -1
  972. package/dist/hooks/use-select-conversation-tab.cjs.map +1 -1
  973. package/dist/hooks/use-select-conversation-tab.d.ts +2 -0
  974. package/dist/hooks/use-select-conversation-tab.js +15 -7
  975. package/dist/hooks/use-select-conversation-tab.js.map +1 -1
  976. package/dist/hooks/use-tracking.cjs +1 -1
  977. package/dist/hooks/use-tracking.cjs.map +1 -1
  978. package/dist/hooks/use-tracking.d.ts +17 -0
  979. package/dist/hooks/use-tracking.js +10 -0
  980. package/dist/hooks/use-tracking.js.map +1 -1
  981. package/dist/hooks/use-websocket.cjs +1 -1
  982. package/dist/hooks/use-websocket.cjs.map +1 -1
  983. package/dist/hooks/use-websocket.d.ts +1 -2
  984. package/dist/hooks/use-websocket.js +58 -51
  985. package/dist/hooks/use-websocket.js.map +1 -1
  986. package/dist/i18n/declaration.cjs +1 -1
  987. package/dist/i18n/declaration.cjs.map +1 -1
  988. package/dist/i18n/declaration.d.ts +124 -43
  989. package/dist/i18n/declaration.js +1 -1
  990. package/dist/i18n/declaration.js.map +1 -1
  991. package/dist/i18n/translation.cjs +3 -3
  992. package/dist/i18n/translation.cjs.map +1 -1
  993. package/dist/i18n/translation.js +2091 -714
  994. package/dist/i18n/translation.js.map +1 -1
  995. package/dist/icons/check-circle.cjs +2 -0
  996. package/dist/icons/check-circle.cjs.map +1 -0
  997. package/dist/icons/check-circle.js +20 -0
  998. package/dist/icons/check-circle.js.map +1 -0
  999. package/dist/icons/chevron-down.cjs +2 -0
  1000. package/dist/icons/chevron-down.cjs.map +1 -0
  1001. package/dist/icons/chevron-down.js +20 -0
  1002. package/dist/icons/chevron-down.js.map +1 -0
  1003. package/dist/icons/clock.cjs +2 -0
  1004. package/dist/icons/clock.cjs.map +1 -0
  1005. package/dist/icons/clock.js +20 -0
  1006. package/dist/icons/clock.js.map +1 -0
  1007. package/dist/icons/exclamation-circle.cjs +2 -0
  1008. package/dist/icons/exclamation-circle.cjs.map +1 -0
  1009. package/dist/icons/exclamation-circle.js +20 -0
  1010. package/dist/icons/exclamation-circle.js.map +1 -0
  1011. package/dist/icons/kebab-vertical.cjs +2 -0
  1012. package/dist/icons/kebab-vertical.cjs.map +1 -0
  1013. package/dist/icons/kebab-vertical.js +14 -0
  1014. package/dist/icons/kebab-vertical.js.map +1 -0
  1015. package/dist/icons/key.cjs +2 -0
  1016. package/dist/icons/key.cjs.map +1 -0
  1017. package/dist/icons/key.js +21 -0
  1018. package/dist/icons/key.js.map +1 -0
  1019. package/dist/icons/message-square-share.cjs +2 -0
  1020. package/dist/icons/message-square-share.cjs.map +1 -0
  1021. package/dist/icons/message-square-share.js +22 -0
  1022. package/dist/icons/message-square-share.js.map +1 -0
  1023. package/dist/icons/play.cjs +2 -0
  1024. package/dist/icons/play.cjs.map +1 -0
  1025. package/dist/icons/play.js +19 -0
  1026. package/dist/icons/play.js.map +1 -0
  1027. package/dist/icons/power.cjs +2 -0
  1028. package/dist/icons/power.cjs.map +1 -0
  1029. package/dist/icons/power.js +20 -0
  1030. package/dist/icons/power.js.map +1 -0
  1031. package/dist/icons/sparkle.cjs +2 -0
  1032. package/dist/icons/sparkle.cjs.map +1 -0
  1033. package/dist/icons/sparkle.js +20 -0
  1034. package/dist/icons/sparkle.js.map +1 -0
  1035. package/dist/icons/trash.cjs +2 -0
  1036. package/dist/icons/trash.cjs.map +1 -0
  1037. package/dist/icons/trash.js +20 -0
  1038. package/dist/icons/trash.js.map +1 -0
  1039. package/dist/icons/x-circle.cjs +2 -0
  1040. package/dist/icons/x-circle.cjs.map +1 -0
  1041. package/dist/icons/x-circle.js +20 -0
  1042. package/dist/icons/x-circle.js.map +1 -0
  1043. package/dist/locales/ar/openhands.json +124 -43
  1044. package/dist/locales/ca/openhands.json +124 -43
  1045. package/dist/locales/de/openhands.json +124 -43
  1046. package/dist/locales/en/openhands.json +124 -43
  1047. package/dist/locales/es/openhands.json +124 -43
  1048. package/dist/locales/fr/openhands.json +124 -43
  1049. package/dist/locales/it/openhands.json +124 -43
  1050. package/dist/locales/ja/openhands.json +124 -43
  1051. package/dist/locales/ko-KR/openhands.json +124 -43
  1052. package/dist/locales/no/openhands.json +124 -43
  1053. package/dist/locales/pt/openhands.json +124 -43
  1054. package/dist/locales/tr/openhands.json +124 -43
  1055. package/dist/locales/uk/openhands.json +124 -43
  1056. package/dist/locales/zh-CN/openhands.json +124 -43
  1057. package/dist/locales/zh-TW/openhands.json +124 -43
  1058. package/dist/manifests/automation-insights.cjs +2 -0
  1059. package/dist/manifests/automation-insights.cjs.map +1 -0
  1060. package/dist/manifests/automation-insights.d.ts +2 -0
  1061. package/dist/manifests/automation-insights.js +9 -0
  1062. package/dist/manifests/automation-insights.js.map +1 -0
  1063. package/dist/manifests/automation-interface.cjs +1 -1
  1064. package/dist/manifests/automation-interface.cjs.map +1 -1
  1065. package/dist/manifests/automation-interface.d.ts +47 -31
  1066. package/dist/manifests/automation-interface.js +48 -54
  1067. package/dist/manifests/automation-interface.js.map +1 -1
  1068. package/dist/manifests/automation-setup.cjs +1 -1
  1069. package/dist/manifests/automation-setup.cjs.map +1 -1
  1070. package/dist/manifests/automation-setup.d.ts +37 -3
  1071. package/dist/manifests/automation-setup.js +16 -2
  1072. package/dist/manifests/automation-setup.js.map +1 -1
  1073. package/dist/manifests/interface-validation.cjs +1 -1
  1074. package/dist/manifests/interface-validation.cjs.map +1 -1
  1075. package/dist/manifests/interface-validation.js +56 -52
  1076. package/dist/manifests/interface-validation.js.map +1 -1
  1077. package/dist/manifests/manifest-actions.d.ts +5 -0
  1078. package/dist/manifests/manifest-bundle.d.ts +30 -0
  1079. package/dist/manifests/manifest-local-validation.d.ts +10 -1
  1080. package/dist/manifests/manifest-sources.cjs +1 -1
  1081. package/dist/manifests/manifest-sources.cjs.map +1 -1
  1082. package/dist/manifests/manifest-sources.js +3 -3
  1083. package/dist/manifests/manifest-sources.js.map +1 -1
  1084. package/dist/manifests/manifest-template.d.ts +14 -0
  1085. package/dist/manifests/manifest-validation.cjs +1 -1
  1086. package/dist/manifests/manifest-validation.cjs.map +1 -1
  1087. package/dist/manifests/manifest-validation.js +78 -45
  1088. package/dist/manifests/manifest-validation.js.map +1 -1
  1089. package/dist/manifests/types.cjs +1 -1
  1090. package/dist/manifests/types.cjs.map +1 -1
  1091. package/dist/manifests/types.d.ts +64 -3
  1092. package/dist/manifests/types.js +7 -6
  1093. package/dist/manifests/types.js.map +1 -1
  1094. package/dist/node_modules/@heroui/popover/dist/chunk-NW7HJLND.cjs +1 -1
  1095. package/dist/node_modules/@heroui/popover/dist/chunk-NW7HJLND.js +10 -10
  1096. package/dist/node_modules/@heroui/ripple/dist/chunk-UIQI3AYJ.cjs +1 -1
  1097. package/dist/node_modules/@heroui/ripple/dist/chunk-UIQI3AYJ.js +8 -8
  1098. package/dist/node_modules/@heroui/tooltip/dist/chunk-AUA5GDXN.cjs +1 -1
  1099. package/dist/node_modules/@heroui/tooltip/dist/chunk-AUA5GDXN.js +9 -9
  1100. package/dist/node_modules/@openhands/extensions/automations/bundle-index.cjs +4843 -0
  1101. package/dist/node_modules/@openhands/extensions/automations/bundle-index.cjs.map +1 -0
  1102. package/dist/node_modules/@openhands/extensions/automations/bundle-index.js +11 -0
  1103. package/dist/node_modules/@openhands/extensions/automations/bundle-index.js.map +1 -0
  1104. package/dist/node_modules/@openhands/extensions/automations/catalog/github-agents-md-maintainer/manifest.cjs +13 -0
  1105. package/dist/node_modules/@openhands/extensions/automations/catalog/github-agents-md-maintainer/manifest.cjs.map +1 -0
  1106. package/dist/node_modules/@openhands/extensions/automations/catalog/github-agents-md-maintainer/manifest.js +87 -0
  1107. package/dist/node_modules/@openhands/extensions/automations/catalog/github-agents-md-maintainer/manifest.js.map +1 -0
  1108. package/dist/node_modules/@openhands/extensions/automations/catalog/github-issue-to-pr/manifest.cjs +12 -0
  1109. package/dist/node_modules/@openhands/extensions/automations/catalog/github-issue-to-pr/manifest.cjs.map +1 -0
  1110. package/dist/node_modules/@openhands/extensions/automations/catalog/github-issue-to-pr/manifest.js +98 -0
  1111. package/dist/node_modules/@openhands/extensions/automations/catalog/github-issue-to-pr/manifest.js.map +1 -0
  1112. package/dist/node_modules/@openhands/extensions/automations/catalog/github-pr-reviewer/manifest.cjs +9 -7
  1113. package/dist/node_modules/@openhands/extensions/automations/catalog/github-pr-reviewer/manifest.cjs.map +1 -1
  1114. package/dist/node_modules/@openhands/extensions/automations/catalog/github-pr-reviewer/manifest.js +32 -13
  1115. package/dist/node_modules/@openhands/extensions/automations/catalog/github-pr-reviewer/manifest.js.map +1 -1
  1116. package/dist/node_modules/@openhands/extensions/automations/catalog/github-repo-monitor/manifest.cjs +2 -2
  1117. package/dist/node_modules/@openhands/extensions/automations/catalog/github-repo-monitor/manifest.cjs.map +1 -1
  1118. package/dist/node_modules/@openhands/extensions/automations/catalog/github-repo-monitor/manifest.js +29 -34
  1119. package/dist/node_modules/@openhands/extensions/automations/catalog/github-repo-monitor/manifest.js.map +1 -1
  1120. package/dist/node_modules/@openhands/extensions/automations/catalog/jira-issue-to-pr/manifest.cjs +3 -3
  1121. package/dist/node_modules/@openhands/extensions/automations/catalog/jira-issue-to-pr/manifest.cjs.map +1 -1
  1122. package/dist/node_modules/@openhands/extensions/automations/catalog/jira-issue-to-pr/manifest.js +2 -2
  1123. package/dist/node_modules/@openhands/extensions/automations/catalog/jira-issue-to-pr/manifest.js.map +1 -1
  1124. package/dist/node_modules/@openhands/extensions/automations/catalog/news-digest/manifest.cjs +14 -0
  1125. package/dist/node_modules/@openhands/extensions/automations/catalog/news-digest/manifest.cjs.map +1 -0
  1126. package/dist/node_modules/@openhands/extensions/automations/catalog/news-digest/manifest.js +72 -0
  1127. package/dist/node_modules/@openhands/extensions/automations/catalog/news-digest/manifest.js.map +1 -0
  1128. package/dist/node_modules/@openhands/extensions/automations/catalog-index.cjs +1 -1
  1129. package/dist/node_modules/@openhands/extensions/automations/catalog-index.cjs.map +1 -1
  1130. package/dist/node_modules/@openhands/extensions/automations/catalog-index.js +16 -10
  1131. package/dist/node_modules/@openhands/extensions/automations/catalog-index.js.map +1 -1
  1132. package/dist/node_modules/@openhands/extensions/automations/index.cjs +1 -1
  1133. package/dist/node_modules/@openhands/extensions/automations/index.cjs.map +1 -1
  1134. package/dist/node_modules/@openhands/extensions/automations/index.js +18 -13
  1135. package/dist/node_modules/@openhands/extensions/automations/index.js.map +1 -1
  1136. package/dist/node_modules/@openhands/extensions/automations/interface.cjs +1 -1
  1137. package/dist/node_modules/@openhands/extensions/automations/interface.cjs.map +1 -1
  1138. package/dist/node_modules/@openhands/extensions/automations/interface.js +6 -2
  1139. package/dist/node_modules/@openhands/extensions/automations/interface.js.map +1 -1
  1140. package/dist/node_modules/@openhands/extensions/integrations/catalog/posthog.cjs +1 -1
  1141. package/dist/node_modules/@openhands/extensions/integrations/catalog/posthog.cjs.map +1 -1
  1142. package/dist/node_modules/@openhands/extensions/integrations/catalog/posthog.js +36 -3
  1143. package/dist/node_modules/@openhands/extensions/integrations/catalog/posthog.js.map +1 -1
  1144. package/dist/node_modules/@openhands/extensions/integrations/catalog/sonarqube.cjs +2 -0
  1145. package/dist/node_modules/@openhands/extensions/integrations/catalog/sonarqube.cjs.map +1 -0
  1146. package/dist/node_modules/@openhands/extensions/integrations/catalog/sonarqube.js +75 -0
  1147. package/dist/node_modules/@openhands/extensions/integrations/catalog/sonarqube.js.map +1 -0
  1148. package/dist/node_modules/@openhands/extensions/integrations/catalog-index.cjs +1 -1
  1149. package/dist/node_modules/@openhands/extensions/integrations/catalog-index.cjs.map +1 -1
  1150. package/dist/node_modules/@openhands/extensions/integrations/catalog-index.js +68 -66
  1151. package/dist/node_modules/@openhands/extensions/integrations/catalog-index.js.map +1 -1
  1152. package/dist/node_modules/@openhands/extensions/skills/index.cjs +1002 -47
  1153. package/dist/node_modules/@openhands/extensions/skills/index.cjs.map +1 -1
  1154. package/dist/node_modules/@openhands/extensions/skills/index.js +59 -17
  1155. package/dist/node_modules/@openhands/extensions/skills/index.js.map +1 -1
  1156. package/dist/node_modules/lucide-react/dist/esm/icons/activity.cjs +2 -0
  1157. package/dist/node_modules/lucide-react/dist/esm/icons/activity.cjs.map +1 -0
  1158. package/dist/node_modules/lucide-react/dist/esm/icons/activity.js +9 -0
  1159. package/dist/node_modules/lucide-react/dist/esm/icons/activity.js.map +1 -0
  1160. package/dist/node_modules/lucide-react/dist/esm/icons/book-open.cjs +2 -0
  1161. package/dist/node_modules/lucide-react/dist/esm/icons/book-open.cjs.map +1 -0
  1162. package/dist/node_modules/lucide-react/dist/esm/icons/book-open.js +12 -0
  1163. package/dist/node_modules/lucide-react/dist/esm/icons/book-open.js.map +1 -0
  1164. package/dist/node_modules/lucide-react/dist/esm/icons/download.cjs +2 -0
  1165. package/dist/node_modules/lucide-react/dist/esm/icons/download.cjs.map +1 -0
  1166. package/dist/node_modules/lucide-react/dist/esm/icons/download.js +19 -0
  1167. package/dist/node_modules/lucide-react/dist/esm/icons/download.js.map +1 -0
  1168. package/dist/node_modules/lucide-react/dist/esm/icons/file-text.cjs +2 -0
  1169. package/dist/node_modules/lucide-react/dist/esm/icons/file-text.cjs.map +1 -0
  1170. package/dist/node_modules/lucide-react/dist/esm/icons/file-text.js +27 -0
  1171. package/dist/node_modules/lucide-react/dist/esm/icons/file-text.js.map +1 -0
  1172. package/dist/node_modules/lucide-react/dist/esm/icons/git-commit-horizontal.cjs +2 -0
  1173. package/dist/node_modules/lucide-react/dist/esm/icons/git-commit-horizontal.cjs.map +1 -0
  1174. package/dist/node_modules/lucide-react/dist/esm/icons/git-commit-horizontal.js +27 -0
  1175. package/dist/node_modules/lucide-react/dist/esm/icons/git-commit-horizontal.js.map +1 -0
  1176. package/dist/node_modules/lucide-react/dist/esm/icons/laptop.cjs +2 -0
  1177. package/dist/node_modules/lucide-react/dist/esm/icons/laptop.cjs.map +1 -0
  1178. package/dist/node_modules/lucide-react/dist/esm/icons/laptop.js +12 -0
  1179. package/dist/node_modules/lucide-react/dist/esm/icons/laptop.js.map +1 -0
  1180. package/dist/node_modules/lucide-react/dist/esm/icons/layout-dashboard.cjs +2 -0
  1181. package/dist/node_modules/lucide-react/dist/esm/icons/layout-dashboard.cjs.map +1 -0
  1182. package/dist/node_modules/lucide-react/dist/esm/icons/layout-dashboard.js +39 -0
  1183. package/dist/node_modules/lucide-react/dist/esm/icons/layout-dashboard.js.map +1 -0
  1184. package/dist/node_modules/lucide-react/dist/esm/icons/library.cjs +2 -0
  1185. package/dist/node_modules/lucide-react/dist/esm/icons/library.cjs.map +1 -0
  1186. package/dist/node_modules/lucide-react/dist/esm/icons/library.js +23 -0
  1187. package/dist/node_modules/lucide-react/dist/esm/icons/library.js.map +1 -0
  1188. package/dist/node_modules/lucide-react/dist/esm/icons/package.cjs +2 -0
  1189. package/dist/node_modules/lucide-react/dist/esm/icons/package.cjs.map +1 -0
  1190. package/dist/node_modules/lucide-react/dist/esm/icons/package.js +23 -0
  1191. package/dist/node_modules/lucide-react/dist/esm/icons/package.js.map +1 -0
  1192. package/dist/node_modules/lucide-react/dist/esm/icons/palette.cjs +2 -0
  1193. package/dist/node_modules/lucide-react/dist/esm/icons/palette.cjs.map +1 -0
  1194. package/dist/node_modules/lucide-react/dist/esm/icons/palette.js +39 -0
  1195. package/dist/node_modules/lucide-react/dist/esm/icons/palette.js.map +1 -0
  1196. package/dist/node_modules/lucide-react/dist/esm/icons/pen-line.cjs +2 -0
  1197. package/dist/node_modules/lucide-react/dist/esm/icons/pen-line.cjs.map +1 -0
  1198. package/dist/node_modules/lucide-react/dist/esm/icons/pen-line.js +12 -0
  1199. package/dist/node_modules/lucide-react/dist/esm/icons/pen-line.js.map +1 -0
  1200. package/dist/node_modules/lucide-react/dist/esm/icons/shield-check.cjs +2 -0
  1201. package/dist/node_modules/lucide-react/dist/esm/icons/shield-check.cjs.map +1 -0
  1202. package/dist/node_modules/lucide-react/dist/esm/icons/shield-check.js +12 -0
  1203. package/dist/node_modules/lucide-react/dist/esm/icons/shield-check.js.map +1 -0
  1204. package/dist/node_modules/lucide-react/dist/esm/icons/sparkles.cjs +2 -0
  1205. package/dist/node_modules/lucide-react/dist/esm/icons/sparkles.cjs.map +1 -0
  1206. package/dist/node_modules/lucide-react/dist/esm/icons/sparkles.js +25 -0
  1207. package/dist/node_modules/lucide-react/dist/esm/icons/sparkles.js.map +1 -0
  1208. package/dist/node_modules/lucide-react/dist/esm/icons/timer.cjs +2 -0
  1209. package/dist/node_modules/lucide-react/dist/esm/icons/timer.cjs.map +1 -0
  1210. package/dist/node_modules/lucide-react/dist/esm/icons/timer.js +27 -0
  1211. package/dist/node_modules/lucide-react/dist/esm/icons/timer.js.map +1 -0
  1212. package/dist/package.cjs +1 -1
  1213. package/dist/package.cjs.map +1 -1
  1214. package/dist/package.js +3 -3
  1215. package/dist/package.js.map +1 -1
  1216. package/dist/routes/app-settings.cjs +1 -1
  1217. package/dist/routes/app-settings.cjs.map +1 -1
  1218. package/dist/routes/app-settings.js +87 -85
  1219. package/dist/routes/app-settings.js.map +1 -1
  1220. package/dist/routes/commits-tab.cjs +1 -1
  1221. package/dist/routes/commits-tab.cjs.map +1 -1
  1222. package/dist/routes/commits-tab.js +27 -21
  1223. package/dist/routes/commits-tab.js.map +1 -1
  1224. package/dist/routes/conversation.cjs +1 -1
  1225. package/dist/routes/conversation.cjs.map +1 -1
  1226. package/dist/routes/conversation.js +56 -55
  1227. package/dist/routes/conversation.js.map +1 -1
  1228. package/dist/routes/files-tab.cjs +1 -1
  1229. package/dist/routes/files-tab.cjs.map +1 -1
  1230. package/dist/routes/files-tab.d.ts +4 -0
  1231. package/dist/routes/files-tab.js +121 -151
  1232. package/dist/routes/files-tab.js.map +1 -1
  1233. package/dist/routes/llm-settings.cjs +1 -1
  1234. package/dist/routes/llm-settings.cjs.map +1 -1
  1235. package/dist/routes/llm-settings.d.ts +9 -1
  1236. package/dist/routes/llm-settings.js +137 -107
  1237. package/dist/routes/llm-settings.js.map +1 -1
  1238. package/dist/routes/mcp.cjs +1 -1
  1239. package/dist/routes/mcp.cjs.map +1 -1
  1240. package/dist/routes/mcp.js +20 -20
  1241. package/dist/routes/secrets-settings.cjs +1 -1
  1242. package/dist/routes/secrets-settings.js +15 -15
  1243. package/dist/stores/conversation-store.cjs +1 -1
  1244. package/dist/stores/conversation-store.cjs.map +1 -1
  1245. package/dist/stores/conversation-store.d.ts +8 -1
  1246. package/dist/stores/conversation-store.js +9 -0
  1247. package/dist/stores/conversation-store.js.map +1 -1
  1248. package/dist/stores/files-tab-store.cjs +1 -1
  1249. package/dist/stores/files-tab-store.cjs.map +1 -1
  1250. package/dist/stores/files-tab-store.d.ts +13 -0
  1251. package/dist/stores/files-tab-store.js +49 -5
  1252. package/dist/stores/files-tab-store.js.map +1 -1
  1253. package/dist/stores/use-event-store.cjs +1 -1
  1254. package/dist/stores/use-event-store.cjs.map +1 -1
  1255. package/dist/stores/use-event-store.js +11 -11
  1256. package/dist/stores/use-event-store.js.map +1 -1
  1257. package/dist/types/agent-server/core/events/message-event.d.ts +2 -2
  1258. package/dist/types/automation.cjs +2 -0
  1259. package/dist/types/automation.cjs.map +1 -0
  1260. package/dist/types/automation.js +8 -0
  1261. package/dist/types/automation.js.map +1 -0
  1262. package/dist/utils/automation-catalog.cjs +1 -1
  1263. package/dist/utils/automation-catalog.cjs.map +1 -1
  1264. package/dist/utils/automation-catalog.d.ts +12 -0
  1265. package/dist/utils/automation-catalog.js +20 -1
  1266. package/dist/utils/automation-catalog.js.map +1 -1
  1267. package/dist/utils/automation-schedule.cjs +2 -0
  1268. package/dist/utils/automation-schedule.cjs.map +1 -0
  1269. package/dist/utils/automation-schedule.js +8 -0
  1270. package/dist/utils/automation-schedule.js.map +1 -0
  1271. package/dist/utils/automation-stack-section.cjs +2 -0
  1272. package/dist/utils/automation-stack-section.cjs.map +1 -0
  1273. package/dist/utils/automation-stack-section.d.ts +2 -0
  1274. package/dist/utils/automation-stack-section.js +6 -0
  1275. package/dist/utils/automation-stack-section.js.map +1 -0
  1276. package/dist/utils/constants.cjs +1 -1
  1277. package/dist/utils/constants.cjs.map +1 -1
  1278. package/dist/utils/constants.js +4 -0
  1279. package/dist/utils/constants.js.map +1 -1
  1280. package/dist/utils/conversation-local-storage.cjs +1 -1
  1281. package/dist/utils/conversation-local-storage.cjs.map +1 -1
  1282. package/dist/utils/conversation-local-storage.d.ts +17 -4
  1283. package/dist/utils/conversation-local-storage.js +111 -63
  1284. package/dist/utils/conversation-local-storage.js.map +1 -1
  1285. package/dist/utils/conversation-metrics.cjs +1 -1
  1286. package/dist/utils/conversation-metrics.cjs.map +1 -1
  1287. package/dist/utils/conversation-metrics.d.ts +3 -2
  1288. package/dist/utils/conversation-metrics.js +16 -14
  1289. package/dist/utils/conversation-metrics.js.map +1 -1
  1290. package/dist/utils/conversation-overview-project-scope.cjs +2 -0
  1291. package/dist/utils/conversation-overview-project-scope.cjs.map +1 -0
  1292. package/dist/utils/conversation-overview-project-scope.d.ts +16 -0
  1293. package/dist/utils/conversation-overview-project-scope.js +22 -0
  1294. package/dist/utils/conversation-overview-project-scope.js.map +1 -0
  1295. package/dist/utils/extension-module-card-classes.cjs +1 -1
  1296. package/dist/utils/extension-module-card-classes.cjs.map +1 -1
  1297. package/dist/utils/extension-module-card-classes.d.ts +1 -1
  1298. package/dist/utils/extension-module-card-classes.js +2 -2
  1299. package/dist/utils/extension-module-card-classes.js.map +1 -1
  1300. package/dist/utils/format-relative-time.cjs +2 -0
  1301. package/dist/utils/format-relative-time.cjs.map +1 -0
  1302. package/dist/utils/format-relative-time.js +17 -0
  1303. package/dist/utils/format-relative-time.js.map +1 -0
  1304. package/dist/utils/git-diff-stats.cjs +5 -0
  1305. package/dist/utils/git-diff-stats.cjs.map +1 -0
  1306. package/dist/utils/git-diff-stats.d.ts +9 -0
  1307. package/dist/utils/git-diff-stats.js +53 -0
  1308. package/dist/utils/git-diff-stats.js.map +1 -0
  1309. package/dist/utils/handle-event-for-ui.cjs +1 -1
  1310. package/dist/utils/handle-event-for-ui.cjs.map +1 -1
  1311. package/dist/utils/handle-event-for-ui.js +13 -11
  1312. package/dist/utils/handle-event-for-ui.js.map +1 -1
  1313. package/dist/utils/mcp-credential-validation.cjs +1 -1
  1314. package/dist/utils/mcp-credential-validation.js +3 -3
  1315. package/dist/utils/mcp-marketplace-utils.cjs +1 -1
  1316. package/dist/utils/mcp-marketplace-utils.cjs.map +1 -1
  1317. package/dist/utils/mcp-marketplace-utils.js +22 -9
  1318. package/dist/utils/mcp-marketplace-utils.js.map +1 -1
  1319. package/dist/utils/parse-git-remote-url.cjs +1 -1
  1320. package/dist/utils/parse-git-remote-url.cjs.map +1 -1
  1321. package/dist/utils/parse-git-remote-url.js +6 -7
  1322. package/dist/utils/parse-git-remote-url.js.map +1 -1
  1323. package/dist/utils/recommended-automation-rail.cjs +2 -0
  1324. package/dist/utils/recommended-automation-rail.cjs.map +1 -0
  1325. package/dist/utils/recommended-automation-rail.d.ts +22 -0
  1326. package/dist/utils/recommended-automation-rail.js +44 -0
  1327. package/dist/utils/recommended-automation-rail.js.map +1 -0
  1328. package/dist/utils/responder-deployment.cjs +2 -0
  1329. package/dist/utils/responder-deployment.cjs.map +1 -0
  1330. package/dist/utils/responder-deployment.js +42 -0
  1331. package/dist/utils/responder-deployment.js.map +1 -0
  1332. package/dist/utils/scroll-fade-state.cjs +2 -0
  1333. package/dist/utils/scroll-fade-state.cjs.map +1 -0
  1334. package/dist/utils/scroll-fade-state.d.ts +6 -0
  1335. package/dist/utils/scroll-fade-state.js +13 -0
  1336. package/dist/utils/scroll-fade-state.js.map +1 -0
  1337. package/dist/utils/skill-category.cjs +2 -0
  1338. package/dist/utils/skill-category.cjs.map +1 -0
  1339. package/dist/utils/skill-category.js +51 -0
  1340. package/dist/utils/skill-category.js.map +1 -0
  1341. package/dist/utils/skill-scope.cjs +1 -1
  1342. package/dist/utils/skill-scope.cjs.map +1 -1
  1343. package/dist/utils/skill-scope.js +1 -1
  1344. package/dist/utils/skill-scope.js.map +1 -1
  1345. package/dist/utils/streaming-delta-batcher.cjs +2 -0
  1346. package/dist/utils/streaming-delta-batcher.cjs.map +1 -0
  1347. package/dist/utils/streaming-delta-batcher.d.ts +21 -0
  1348. package/dist/utils/streaming-delta-batcher.js +31 -0
  1349. package/dist/utils/streaming-delta-batcher.js.map +1 -0
  1350. package/dist/utils/tar-gzip.d.ts +26 -0
  1351. package/dist/utils/utils.cjs +1 -1
  1352. package/dist/utils/utils.cjs.map +1 -1
  1353. package/dist/utils/utils.d.ts +1 -41
  1354. package/dist/utils/utils.js +27 -6
  1355. package/dist/utils/utils.js.map +1 -1
  1356. package/dist/utils/websocket-handshake.cjs +2 -0
  1357. package/dist/utils/websocket-handshake.cjs.map +1 -0
  1358. package/dist/utils/websocket-handshake.d.ts +11 -0
  1359. package/dist/utils/websocket-handshake.js +12 -0
  1360. package/dist/utils/websocket-handshake.js.map +1 -0
  1361. package/package.json +3 -3
  1362. package/scripts/check-translation-completeness.cjs +4 -0
  1363. package/scripts/dev-static.mjs +49 -43
  1364. package/scripts/dev-with-automation.mjs +13 -5
  1365. package/scripts/seed-automation-ux-data.mjs +810 -0
  1366. package/build/assets/acp-providers-CYy8qA2z.js +0 -1
  1367. package/build/assets/active-backend-context-BZDG15C0.js +0 -2
  1368. package/build/assets/agent-context-settings-DGWBBbcp.js +0 -1
  1369. package/build/assets/agent-profiles-settings-DrkGdf4_.js +0 -1
  1370. package/build/assets/agent-server-conversation-service.api-DK56YPTs.js +0 -86
  1371. package/build/assets/agent-settings-DfcSgkLD.js +0 -2
  1372. package/build/assets/agent-settings-Lrc5-twS.js +0 -1
  1373. package/build/assets/alert-banner-BgDHhL7b.js +0 -1
  1374. package/build/assets/api-error-message-BEIE_yD1.js +0 -1
  1375. package/build/assets/api-key-entry-screen-DaZnOlVo.js +0 -1
  1376. package/build/assets/app-settings-BG5NAUbC.js +0 -1
  1377. package/build/assets/automation-detail-D4Hs831Z.js +0 -3
  1378. package/build/assets/automation-export-n0X6FB0C.js +0 -2
  1379. package/build/assets/automation-git-sync-CDrm8WV7.js +0 -1
  1380. package/build/assets/automation-setup-route-CZCl4ONs.js +0 -1
  1381. package/build/assets/automation-templates-DFF96AdL.js +0 -1
  1382. package/build/assets/automations-list-Bl-oGOrV.js +0 -1
  1383. package/build/assets/back-nav-button-H_ThtDA0.js +0 -1
  1384. package/build/assets/backend-form-modal-CbCemvHt.js +0 -1
  1385. package/build/assets/backend-not-configured-DP8KLNq_.js +0 -1
  1386. package/build/assets/backend-synced-settings-badge-BBASWqsb.js +0 -1
  1387. package/build/assets/badge-B-51h-SW.js +0 -1
  1388. package/build/assets/base-modal-BbjycA8X.js +0 -1
  1389. package/build/assets/bot-CGPCg03p.js +0 -1
  1390. package/build/assets/brand-button-Blxv5nww.js +0 -1
  1391. package/build/assets/browser-CuW0nWvh.js +0 -7
  1392. package/build/assets/browser-tab-D5G0ORwt.js +0 -1
  1393. package/build/assets/chat-send-button-BD2tii1r.js +0 -1
  1394. package/build/assets/check-DSuS-lyr.js +0 -1
  1395. package/build/assets/chevron-down-CgGcmtE2.js +0 -1
  1396. package/build/assets/circle-check-CG5-NPw7.js +0 -1
  1397. package/build/assets/circle-plus-check-toggle-ASbpB8vN.js +0 -1
  1398. package/build/assets/cloud-funnel-analytics-GlCUG0gk.js +0 -1
  1399. package/build/assets/cog-CZiR80uT.js +0 -1
  1400. package/build/assets/combobox-caret-DvpEsh2O.js +0 -1
  1401. package/build/assets/command-menu-DwUQzjYP.js +0 -1
  1402. package/build/assets/condenser-settings-BptcoiLA.js +0 -1
  1403. package/build/assets/confirmation-modal-CiEwxZAA.js +0 -1
  1404. package/build/assets/context-menu-list-item-CdcamfM1.js +0 -1
  1405. package/build/assets/conversation-DREHj4nT.js +0 -1
  1406. package/build/assets/conversation-DotRfiDz.js +0 -90
  1407. package/build/assets/conversation-panel-DREHj4nT.js +0 -1
  1408. package/build/assets/conversation-state-store-DMLtlHbE.js +0 -1
  1409. package/build/assets/conversation-store-Blc5xysY.js +0 -6
  1410. package/build/assets/conversation-tab-empty-state-D-puECpY.js +0 -1
  1411. package/build/assets/copy-to-clipboard-button-BGxcUbgy.js +0 -1
  1412. package/build/assets/device-verify-CZJfWaJf.js +0 -1
  1413. package/build/assets/dropdown-classes-tLhpwtxS.js +0 -1
  1414. package/build/assets/entry.client-D8GnI6GZ.js +0 -2
  1415. package/build/assets/enum-filter-dropdown-Fk8k60nk.js +0 -1
  1416. package/build/assets/environment-switch-overlay-DeztVYuL.js +0 -1
  1417. package/build/assets/extension-module-card-classes-Bo43vY5V.js +0 -1
  1418. package/build/assets/extensions-hub-Cd6GCYzq.js +0 -1
  1419. package/build/assets/extensions-navigation-C4sgZg-y.js +0 -1
  1420. package/build/assets/external-link-C0UpBgsE.js +0 -1
  1421. package/build/assets/file-text-C6WYtNdV.js +0 -1
  1422. package/build/assets/files-tab-BW_qzyAm.js +0 -1
  1423. package/build/assets/form-control-classes-CGXBLcn1.js +0 -1
  1424. package/build/assets/format-relative-time-ZhQD4rsl.js +0 -1
  1425. package/build/assets/git-provider-icon-CaQ1yLPi.js +0 -1
  1426. package/build/assets/git-repo-dropdown-CgXR6M_E.js +0 -1
  1427. package/build/assets/git-repo-dropdown-D2Uei3CO.js +0 -1
  1428. package/build/assets/highlighted-source-view-C_YOp8Fo.js +0 -1
  1429. package/build/assets/home-DNzzJcMP.js +0 -1
  1430. package/build/assets/home-aCos-5vc.js +0 -1
  1431. package/build/assets/home-store-DgzViC3f.js +0 -1
  1432. package/build/assets/index-home-DNzzJcMP.js +0 -1
  1433. package/build/assets/info-CLoC1LRo.js +0 -1
  1434. package/build/assets/install-server-modal-D7zIqNKz.js +0 -1
  1435. package/build/assets/kebab-menu-item-content-DERMdnDv.js +0 -1
  1436. package/build/assets/launch-5PjKeLak.js +0 -1
  1437. package/build/assets/list-todo-BF049YaY.js +0 -1
  1438. package/build/assets/llm-not-configured-banner-BK9z5eS0.js +0 -27
  1439. package/build/assets/llm-settings-BLAMK2tR.js +0 -1
  1440. package/build/assets/llm-settings-BWsbarGM.js +0 -1
  1441. package/build/assets/llm-subscription-service-SfnEV9Uc.js +0 -1
  1442. package/build/assets/loader-circle-D7IagAyF.js +0 -1
  1443. package/build/assets/loading-spinner-DBgXgra0.js +0 -1
  1444. package/build/assets/manage-backends-modal-BTqNPhzc.js +0 -1
  1445. package/build/assets/manifest-abebca3c.js +0 -1
  1446. package/build/assets/manifest-subpage-layout-Rn-glaxV.js +0 -1
  1447. package/build/assets/map-provider-BK4HnqYz.js +0 -1
  1448. package/build/assets/markdown-renderer-Cp6DlHQN.js +0 -8
  1449. package/build/assets/mcp-BC-Ixn4T.js +0 -9
  1450. package/build/assets/mcp-marketplace-utils-BJWJgbB6.js +0 -1
  1451. package/build/assets/messages-CzFKrzPG.js +0 -40
  1452. package/build/assets/modal-body-BdKfD3Hl.js +0 -1
  1453. package/build/assets/modal-classes-D5_b5vMi.js +0 -1
  1454. package/build/assets/modal-close-button-objukxk_.js +0 -1
  1455. package/build/assets/mouse-pointer-click-C_gXyLyD.js +0 -1
  1456. package/build/assets/npm-CHVHV1MC.js +0 -1
  1457. package/build/assets/onboarding-Diw0V51A.js +0 -1
  1458. package/build/assets/onboarding-modal-Da4yHzsA.js +0 -1
  1459. package/build/assets/organization-service.api-BztSy69u.js +0 -1
  1460. package/build/assets/parse-git-remote-url-BkXN9jzl.js +0 -1
  1461. package/build/assets/pencil-49avMHlD.js +0 -1
  1462. package/build/assets/planner-tab-CJiSpNax.js +0 -1
  1463. package/build/assets/plugins-management-service-lHdNKWNU.js +0 -1
  1464. package/build/assets/plus-C0BagBpV.js +0 -1
  1465. package/build/assets/profiles-service.api-BLr7FXec.js +0 -1
  1466. package/build/assets/providers-CWXnb7S3.js +0 -1
  1467. package/build/assets/proxy-DYDXxtje.js +0 -1
  1468. package/build/assets/puzzle-Bt2B1rzf.js +0 -1
  1469. package/build/assets/recommended-automations-launcher-CcFMfJRR.js +0 -1
  1470. package/build/assets/refresh-cw-nmcesifB.js +0 -1
  1471. package/build/assets/root-CT4t7apy.css +0 -1
  1472. package/build/assets/root-DnRgLKpU.js +0 -2
  1473. package/build/assets/root-layout-2L9tr-BN.js +0 -2
  1474. package/build/assets/schema-field-C59lVZTA.js +0 -1
  1475. package/build/assets/sdk-section-page-BbBEQQjq.js +0 -1
  1476. package/build/assets/search-CYSDBczG.js +0 -1
  1477. package/build/assets/secrets-service-BtsgYSlj.js +0 -1
  1478. package/build/assets/secrets-settings-DJ0OKa4_.js +0 -1
  1479. package/build/assets/segmented-toggle-DiVfTZuN.js +0 -1
  1480. package/build/assets/settings-CDqL_Uqh.js +0 -1
  1481. package/build/assets/settings-dropdown-input-Ba1UN5Du.js +0 -1
  1482. package/build/assets/settings-index-Cz2cKt2K.js +0 -1
  1483. package/build/assets/settings-input-CWUEHHvS.js +0 -1
  1484. package/build/assets/settings-list-classes-DdcLXDGn.js +0 -1
  1485. package/build/assets/settings-modal-nEEK1Kh1.js +0 -1
  1486. package/build/assets/settings-service.api-3yAUFcaP.js +0 -1
  1487. package/build/assets/settings-switch-Dk9hChx1.js +0 -1
  1488. package/build/assets/settings-utils-CxjtCSB3.js +0 -1
  1489. package/build/assets/shared-conversation-DbAcrx3s.js +0 -1
  1490. package/build/assets/shield-check-CiOTXxV2.js +0 -1
  1491. package/build/assets/sidebar-layout-lrfPooIB.js +0 -1
  1492. package/build/assets/sidebar-mobile-menu-toggle-KERXfNu1.js +0 -1
  1493. package/build/assets/sidebar-nav-link-B8lFD6Cb.js +0 -1
  1494. package/build/assets/sidebar-store-u6pUpxJ7.js +0 -1
  1495. package/build/assets/skill-card-pill-row-dGIUzr_b.js +0 -1
  1496. package/build/assets/skill-icon-badge-kkOWZ89w.js +0 -1
  1497. package/build/assets/skill-scope-DWN1PBPH.js +0 -1
  1498. package/build/assets/skills-plugins-DFjH2Nq6.js +0 -1
  1499. package/build/assets/skills-settings-DIHpl3ol.js +0 -2
  1500. package/build/assets/sparkles-ntyMLnbj.js +0 -1
  1501. package/build/assets/styled-tooltip-B6JXcsmL.js +0 -1
  1502. package/build/assets/task-list-tab-aEJzEcHD.js +0 -1
  1503. package/build/assets/terminal-Dch7Ty5K.js +0 -3
  1504. package/build/assets/toggle-switch-B2MLKsgt.js +0 -1
  1505. package/build/assets/trash-2-yZnDM4Ji.js +0 -1
  1506. package/build/assets/typography-DB5HoCk0.js +0 -1
  1507. package/build/assets/usage-tab-DrEtBmBT.js +0 -1
  1508. package/build/assets/use-acp-credential-form-c8KXAa8A.js +0 -1
  1509. package/build/assets/use-activate-agent-profile-B0p34N3q.js +0 -1
  1510. package/build/assets/use-agent-profiles-CPIc6wLH.js +0 -1
  1511. package/build/assets/use-can-manage-org-profiles-Dz_8Eqkv.js +0 -1
  1512. package/build/assets/use-cloud-current-user-id-DvUVqCle.js +0 -1
  1513. package/build/assets/use-config-C3PO4TBw.js +0 -1
  1514. package/build/assets/use-create-conversation-DVrA_uLD.js +0 -1
  1515. package/build/assets/use-create-secret-DbBIpaCR.js +0 -1
  1516. package/build/assets/use-get-secrets-6PBitf54.js +0 -1
  1517. package/build/assets/use-has-permission-CQ31Cl8j.js +0 -1
  1518. package/build/assets/use-is-authed-2UrDIziV.js +0 -1
  1519. package/build/assets/use-is-creating-conversation-BvYpmb3v.js +0 -1
  1520. package/build/assets/use-launch-skill-in-chat-COnDpxCQ.js +0 -1
  1521. package/build/assets/use-llm-profiles-diZS4FiN.js +0 -1
  1522. package/build/assets/use-manifest-capabilities-HIWCtIUm.js +0 -1
  1523. package/build/assets/use-onboarding-completion-Bs8PcXik.js +0 -1
  1524. package/build/assets/use-plugins-marketplace-BCuNLFsr.js +0 -1
  1525. package/build/assets/use-save-agent-profile-BaMNSpBV.js +0 -1
  1526. package/build/assets/use-save-settings-BahvC2Gw.js +0 -1
  1527. package/build/assets/use-settings-C6ZxpBDX.js +0 -1
  1528. package/build/assets/use-settings-nav-items-Bqn69Ggw.js +0 -16
  1529. package/build/assets/use-tracking-Bhu7gk2y.js +0 -3
  1530. package/build/assets/use-user-conversation-BkNXpXrd.js +0 -1
  1531. package/build/assets/useInfiniteQuery-c_OmS3lK.js +0 -1
  1532. package/build/assets/useMutation-6ZsQCqAn.js +0 -1
  1533. package/build/assets/useQueries-xDrGlTO_.js +0 -1
  1534. package/build/assets/useQuery-Bs5NFz2s.js +0 -1
  1535. package/build/assets/utils-DUD5ScdA.js +0 -1
  1536. package/build/assets/vendor~browser-B-fae1JU.js +0 -47
  1537. package/build/assets/vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~kepq2zme-D87mAf6K.js +0 -186
  1538. package/build/assets/vendor~files-tab-B6POTS66.js +0 -11
  1539. package/build/assets/vendor~index-home~home~conversation-panel~conversation-53Q_U6uP.js +0 -13
  1540. package/build/assets/vendor~root-layout-DeQACFVA.js +0 -1
  1541. package/build/assets/vendor~root-layout~conversation-panel~conversation-bv7ooVgH.js +0 -1
  1542. package/build/assets/vendor~root-layout~conversation-panel~conversation~skills-settings~automations-list~shared-~bovqqk8e-e8pX05xf.js +0 -1
  1543. package/build/assets/vendor~root-layout~index-home~home~conversation-panel~conversation~shared-conversation-BvS6PCK2.js +0 -1
  1544. package/build/assets/vendor~root-layout~index-home~home~mcp~automations-list~automation-templates~automation-set~bxsimjx0-D7IDevqN.js +0 -1
  1545. package/build/assets/vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~hjcjabwg-DOPLJMH9.js +0 -48
  1546. package/build/assets/vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~iw7io29p-Dz8NQve5.js +0 -1
  1547. package/build/assets/vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~skills-setti~eo2nf80n-BOVIFA_g.js +0 -73
  1548. package/build/assets/vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~skills-setti~jz4f6vo2-C0JXQb_q.js +0 -7465
  1549. package/build/assets/verification-settings-COueVXmM.js +0 -1
  1550. package/build/assets/wrench-C95ujnYo.js +0 -1
  1551. package/build/assets/x-86ZCfxKY.js +0 -1
  1552. package/build/assets/zap-DRa-r-Tf.js +0 -1
  1553. package/dist/components/features/diff-viewer/empty-changes-message.cjs +0 -2
  1554. package/dist/components/features/diff-viewer/empty-changes-message.cjs.map +0 -1
  1555. package/dist/components/features/diff-viewer/empty-changes-message.js +0 -17
  1556. package/dist/components/features/diff-viewer/empty-changes-message.js.map +0 -1
  1557. package/dist/components/features/tips/random-tip.cjs +0 -2
  1558. package/dist/components/features/tips/random-tip.cjs.map +0 -1
  1559. package/dist/components/features/tips/random-tip.js +0 -41
  1560. package/dist/components/features/tips/random-tip.js.map +0 -1
  1561. package/dist/hooks/query/use-has-git-commits.cjs +0 -2
  1562. package/dist/hooks/query/use-has-git-commits.cjs.map +0 -1
  1563. package/dist/hooks/query/use-has-git-commits.d.ts +0 -25
  1564. package/dist/hooks/query/use-has-git-commits.js +0 -31
  1565. package/dist/hooks/query/use-has-git-commits.js.map +0 -1
  1566. package/dist/hooks/use-has-attached-source.cjs +0 -2
  1567. package/dist/hooks/use-has-attached-source.cjs.map +0 -1
  1568. package/dist/hooks/use-has-attached-source.d.ts +0 -18
  1569. package/dist/hooks/use-has-attached-source.js +0 -14
  1570. package/dist/hooks/use-has-attached-source.js.map +0 -1
  1571. package/dist/icons/chveron-up.cjs +0 -2
  1572. package/dist/icons/chveron-up.cjs.map +0 -1
  1573. package/dist/icons/chveron-up.js +0 -21
  1574. package/dist/icons/chveron-up.js.map +0 -1
  1575. package/dist/routes/changes-tab.cjs +0 -2
  1576. package/dist/routes/changes-tab.cjs.map +0 -1
  1577. package/dist/routes/changes-tab.d.ts +0 -3
  1578. package/dist/routes/changes-tab.js +0 -64
  1579. package/dist/routes/changes-tab.js.map +0 -1
  1580. package/dist/utils/file-priority.cjs +0 -2
  1581. package/dist/utils/file-priority.cjs.map +0 -1
  1582. package/dist/utils/file-priority.d.ts +0 -27
  1583. package/dist/utils/file-priority.js +0 -61
  1584. package/dist/utils/file-priority.js.map +0 -1
  1585. package/dist/utils/table-row-classes.d.ts +0 -9
  1586. package/dist/utils/tips.cjs +0 -2
  1587. package/dist/utils/tips.cjs.map +0 -1
  1588. package/dist/utils/tips.js +0 -45
  1589. package/dist/utils/tips.js.map +0 -1
  1590. /package/build/assets/{vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~dcc51rps-rfV8mQ9m.js → vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~ew3u153i-rfV8mQ9m.js} +0 -0
@@ -5,10 +5,10 @@ import { AGENT_CANVAS_CLIENT_HEADERS as i, OPENHANDS_TELEMETRY_DISTINCT_ID_HEADE
5
5
  import { clearPendingLocalTelemetryRevocation as o, getTelemetryConsent as s, getTelemetryDistinctId as c, getTelemetryDistinctIdForConsentSync as l } from "../../services/telemetry.js";
6
6
  import { callCloudProxy as u } from "../cloud/proxy.js";
7
7
  import { getAutomationEndpoint as d, getAutomationIdEndpoint as f, getImportExportSpec as p } from "../../manifests/automation-interface.js";
8
- import { AUTOMATION_CREATE_ENDPOINT as m } from "../../manifests/automation-setup.js";
8
+ import { automationCreateEndpoint as m, automationUploadEndpoint as h } from "../../manifests/automation-setup.js";
9
9
  //#region src/api/automation-service/automation-service.api.ts
10
- var h = "/api/automation", g = r.create();
11
- async function _(e = {}) {
10
+ var g = "/api/automation", _ = r.create();
11
+ async function v(e = {}) {
12
12
  let t = await c();
13
13
  return {
14
14
  ...i,
@@ -16,8 +16,8 @@ async function _(e = {}) {
16
16
  ...e
17
17
  };
18
18
  }
19
- g.interceptors.request.use(async (e) => {
20
- let r = await _();
19
+ _.interceptors.request.use(async (e) => {
20
+ let r = await v();
21
21
  if (Object.entries(r).forEach(([t, n]) => {
22
22
  e.headers.set(t, n);
23
23
  }), e.baseURL) return e;
@@ -27,17 +27,17 @@ g.interceptors.request.use(async (e) => {
27
27
  let a = i.apiKey?.trim();
28
28
  return a && e.headers.set("X-Session-API-Key", a), e;
29
29
  });
30
- function v(e) {
30
+ function y(e) {
31
31
  return typeof e == "string" && e.trim() || null;
32
32
  }
33
- function y(e) {
34
- return typeof e == "string" ? v(e) : v(e.sdk_version) ?? v(e.version);
33
+ function b(e) {
34
+ return typeof e == "string" ? y(e) : y(e.sdk_version) ?? y(e.version);
35
35
  }
36
- function b(e, t) {
36
+ function x(e, t) {
37
37
  let n = new URLSearchParams();
38
38
  return n.set("limit", String(e)), n.set("offset", String(t)), n.toString();
39
39
  }
40
- function x(e) {
40
+ function S(e) {
41
41
  return e.trigger.type === "event" ? {
42
42
  type: "event",
43
43
  source: e.trigger.source,
@@ -49,10 +49,10 @@ function x(e) {
49
49
  timezone: e.timezone ?? e.trigger.timezone ?? "UTC"
50
50
  };
51
51
  }
52
- function S() {
52
+ function C() {
53
53
  return typeof crypto < "u" && typeof crypto.randomUUID == "function" ? `pending.${crypto.randomUUID()}` : `pending.${Date.now()}.${Math.random().toString(36).slice(2, 10)}`;
54
54
  }
55
- function C(e) {
55
+ function w(e) {
56
56
  if (!e.prompt) throw Error("An automation prompt is required for import.");
57
57
  let { importDefaults: t } = p(), n = e.repository ? [{
58
58
  url: e.repository,
@@ -60,14 +60,14 @@ function C(e) {
60
60
  ...!e.repository.includes("://") && !e.repository.startsWith("git@") && { provider: t.repoProvider }
61
61
  }] : void 0;
62
62
  return {
63
- path: `${h}${d(e.plugins?.length ? "createPlugin" : "createPrompt")}`,
63
+ path: `${g}${d(e.plugins?.length ? "createPlugin" : "createPrompt")}`,
64
64
  body: {
65
65
  name: e.name,
66
66
  prompt: e.prompt,
67
67
  trigger: {
68
68
  type: "event",
69
69
  source: t.placeholderEventSource,
70
- on: S()
70
+ on: C()
71
71
  },
72
72
  ...e.model && { model: e.model },
73
73
  ...n && { repos: n },
@@ -76,41 +76,41 @@ function C(e) {
76
76
  }
77
77
  };
78
78
  }
79
- async function w(e) {
79
+ async function T(e) {
80
80
  let t = e.apiKey.trim();
81
81
  return {
82
82
  baseURL: e.host,
83
- headers: await _(t ? { "X-Session-API-Key": t } : {})
83
+ headers: await v(t ? { "X-Session-API-Key": t } : {})
84
84
  };
85
85
  }
86
- async function T(e) {
87
- return _(e.orgId ? { "X-Org-Id": e.orgId } : {});
86
+ async function E(e) {
87
+ return v(e.orgId ? { "X-Org-Id": e.orgId } : {});
88
88
  }
89
- var E = class t {
89
+ var D = class t {
90
90
  static async syncTelemetryConsent(t = s()) {
91
91
  if (e().backend.kind !== "local") return;
92
92
  let n = await l();
93
- await g.post(`${h}/v1/telemetry/consent`, {
93
+ await _.post(`${g}/v1/telemetry/consent`, {
94
94
  consent_granted: t === "granted",
95
95
  frontend_distinct_id: n
96
96
  }, { timeout: 5e3 }), t !== "granted" && n && o(n);
97
97
  }
98
98
  static async getSdkVersion() {
99
- let t = e(), n = `${h}/sdk-version`;
99
+ let t = e(), n = `${g}/sdk-version`;
100
100
  try {
101
101
  let e;
102
102
  if (t.backend.kind === "cloud") e = await u({
103
103
  backend: t.backend,
104
104
  method: "GET",
105
105
  path: n,
106
- headers: await T(t),
106
+ headers: await E(t),
107
107
  timeoutSeconds: 5
108
108
  });
109
109
  else {
110
- let { data: t } = await g.get(n, { timeout: 5e3 });
110
+ let { data: t } = await _.get(n, { timeout: 5e3 });
111
111
  e = t;
112
112
  }
113
- return y(e);
113
+ return b(e);
114
114
  } catch {
115
115
  return null;
116
116
  }
@@ -120,10 +120,10 @@ var E = class t {
120
120
  if (i.kind === "cloud") return u({
121
121
  backend: i,
122
122
  method: "GET",
123
- path: `${h}${d("list")}?${b(n, r)}`,
124
- headers: await _()
123
+ path: `${g}${d("list")}?${x(n, r)}`,
124
+ headers: await v()
125
125
  });
126
- let { data: a } = await g.get(`${h}${d("list")}`, { params: {
126
+ let { data: a } = await _.get(`${g}${d("list")}`, { params: {
127
127
  limit: n,
128
128
  offset: r
129
129
  } });
@@ -136,31 +136,31 @@ var E = class t {
136
136
  });
137
137
  }
138
138
  static async getAutomation(t) {
139
- let n = e().backend, r = `${h}${f("detail", t)}`;
139
+ let n = e().backend, r = `${g}${f("detail", t)}`;
140
140
  if (n.kind === "cloud") return u({
141
141
  backend: n,
142
142
  method: "GET",
143
143
  path: r,
144
- headers: await _()
144
+ headers: await v()
145
145
  });
146
- let { data: i } = await g.get(r);
146
+ let { data: i } = await _.get(r);
147
147
  return i;
148
148
  }
149
149
  static async createAutomation(t) {
150
- let n = e(), { path: r, body: i } = C(t), a;
150
+ let n = e(), { path: r, body: i } = w(t), a;
151
151
  if (n.backend.kind === "cloud") a = await u({
152
152
  backend: n.backend,
153
153
  method: "POST",
154
154
  path: r,
155
155
  body: i,
156
- headers: await T(n)
156
+ headers: await E(n)
157
157
  });
158
158
  else {
159
- let { data: e } = await g.post(r, i, await w(n.backend));
159
+ let { data: e } = await _.post(r, i, await T(n.backend));
160
160
  a = e;
161
161
  }
162
- let o = `${h}${f("detail", a.id)}`, s = {
163
- trigger: x(t),
162
+ let o = `${g}${f("detail", a.id)}`, s = {
163
+ trigger: S(t),
164
164
  enabled: !1
165
165
  };
166
166
  try {
@@ -169,9 +169,9 @@ var E = class t {
169
169
  method: "PATCH",
170
170
  path: o,
171
171
  body: s,
172
- headers: await T(n)
172
+ headers: await E(n)
173
173
  });
174
- let { data: e } = await g.patch(o, s, await w(n.backend));
174
+ let { data: e } = await _.patch(o, s, await T(n.backend));
175
175
  return e;
176
176
  } catch (e) {
177
177
  try {
@@ -179,8 +179,8 @@ var E = class t {
179
179
  backend: n.backend,
180
180
  method: "DELETE",
181
181
  path: o,
182
- headers: await T(n)
183
- }) : await g.delete(o, await w(n.backend));
182
+ headers: await E(n)
183
+ }) : await _.delete(o, await T(n.backend));
184
184
  } catch (t) {
185
185
  throw AggregateError([e, t], "Failed to disable the imported automation and clean it up.");
186
186
  }
@@ -188,61 +188,61 @@ var E = class t {
188
188
  }
189
189
  }
190
190
  static async updateAutomation(t, n) {
191
- let r = e().backend, i = `${h}${f("detail", t)}`;
191
+ let r = e().backend, i = `${g}${f("detail", t)}`;
192
192
  if (r.kind === "cloud") return u({
193
193
  backend: r,
194
194
  method: "PATCH",
195
195
  path: i,
196
196
  body: n,
197
- headers: await _()
197
+ headers: await v()
198
198
  });
199
- let { data: a } = await g.patch(i, n);
199
+ let { data: a } = await _.patch(i, n);
200
200
  return a;
201
201
  }
202
202
  static async deleteAutomation(t) {
203
- let n = e().backend, r = `${h}${f("detail", t)}`;
203
+ let n = e().backend, r = `${g}${f("detail", t)}`;
204
204
  if (n.kind === "cloud") {
205
205
  await u({
206
206
  backend: n,
207
207
  method: "DELETE",
208
208
  path: r,
209
- headers: await _()
209
+ headers: await v()
210
210
  });
211
211
  return;
212
212
  }
213
- await g.delete(r);
213
+ await _.delete(r);
214
214
  }
215
215
  static async dispatchAutomation(t) {
216
- let n = e().backend, r = `${h}${f("dispatch", t)}`;
216
+ let n = e().backend, r = `${g}${f("dispatch", t)}`;
217
217
  if (n.kind === "cloud") return u({
218
218
  backend: n,
219
219
  method: "POST",
220
220
  path: r,
221
- headers: await _()
221
+ headers: await v()
222
222
  });
223
- let { data: i } = await g.post(r);
223
+ let { data: i } = await _.post(r);
224
224
  return i;
225
225
  }
226
226
  static async cancelAutomationRun(t) {
227
- let n = e().backend, r = `${h}/v1/runs/${encodeURIComponent(t)}/cancel`;
227
+ let n = e().backend, r = `${g}/v1/runs/${encodeURIComponent(t)}/cancel`;
228
228
  if (n.kind === "cloud") return u({
229
229
  backend: n,
230
230
  method: "POST",
231
231
  path: r,
232
- headers: await _()
232
+ headers: await v()
233
233
  });
234
- let { data: i } = await g.post(r);
234
+ let { data: i } = await _.post(r);
235
235
  return i;
236
236
  }
237
237
  static async listAutomationRuns(t, n = {}) {
238
- let { limit: r = 50, offset: i = 0 } = n, a = e().backend, o = `${h}${f("runs", t)}`;
238
+ let { limit: r = 50, offset: i = 0 } = n, a = e().backend, o = `${g}${f("runs", t)}`;
239
239
  if (a.kind === "cloud") return u({
240
240
  backend: a,
241
241
  method: "GET",
242
- path: `${o}?${b(r, i)}`,
243
- headers: await _()
242
+ path: `${o}?${x(r, i)}`,
243
+ headers: await v()
244
244
  });
245
- let { data: s } = await g.get(o, { params: {
245
+ let { data: s } = await _.get(o, { params: {
246
246
  limit: r,
247
247
  offset: i
248
248
  } });
@@ -258,109 +258,124 @@ var E = class t {
258
258
  return t.updateAutomation(e, { enabled: n });
259
259
  }
260
260
  static async downloadTarball(t, n) {
261
- let r = e().backend, i = `${h}${f("tarball", t)}`, a;
261
+ let r = e().backend, i = `${g}${f("tarball", t)}`, a;
262
262
  if (r.kind === "cloud") a = await u({
263
263
  backend: r,
264
264
  method: "GET",
265
265
  path: i,
266
266
  responseType: "blob",
267
- headers: await _()
267
+ headers: await v()
268
268
  });
269
269
  else {
270
- let { data: e } = await g.get(i, { responseType: "blob" });
270
+ let { data: e } = await _.get(i, { responseType: "blob" });
271
271
  a = e;
272
272
  }
273
273
  let o = URL.createObjectURL(a), s = document.createElement("a");
274
274
  s.href = o, s.download = `${n}.tar`, s.click(), URL.revokeObjectURL(o);
275
275
  }
276
276
  static async getCapabilities() {
277
- let t = e().backend, n = `${h}${d("capabilities")}`;
277
+ let t = e().backend, n = `${g}${d("capabilities")}`;
278
278
  if (t.kind === "cloud") return u({
279
279
  backend: t,
280
280
  method: "GET",
281
281
  path: n,
282
- headers: await _()
282
+ headers: await v()
283
283
  });
284
- let { data: r } = await g.get(n);
284
+ let { data: r } = await _.get(n);
285
285
  return r;
286
286
  }
287
287
  static async validateDraft(t) {
288
- let n = e().backend, r = `${h}${d("validate")}`;
288
+ let n = e().backend, r = `${g}${d("validate")}`;
289
289
  if (n.kind === "cloud") return u({
290
290
  backend: n,
291
291
  method: "POST",
292
292
  path: r,
293
293
  body: t,
294
- headers: await _()
294
+ headers: await v()
295
295
  });
296
- let { data: i } = await g.post(r, t);
296
+ let { data: i } = await _.post(r, t);
297
297
  return i;
298
298
  }
299
- static async createAutomationDraft(t) {
300
- let n = e().backend, r = `${h}${m}`;
301
- if (n.kind === "cloud") return u({
302
- backend: n,
299
+ static async createAutomationDraft(t, n) {
300
+ let r = e().backend, i = `${g}${m(n)}`;
301
+ if (r.kind === "cloud") return u({
302
+ backend: r,
303
303
  method: "POST",
304
- path: r,
304
+ path: i,
305
305
  body: t,
306
- headers: await _()
306
+ headers: await v()
307
307
  });
308
- let { data: i } = await g.post(r, t);
309
- return i;
308
+ let { data: a } = await _.post(i, t);
309
+ return a;
310
+ }
311
+ static async uploadAutomationTarball(t, n) {
312
+ let i = e().backend, a = `${g}${h()}?name=${encodeURIComponent(t)}`, o = { "Content-Type": "application/gzip" }, s;
313
+ if (i.kind === "cloud") {
314
+ let { orgId: t } = e();
315
+ s = (await r.post(`${i.host.replace(/\/+$/, "")}${a}`, n, { headers: {
316
+ ...await v(),
317
+ ...o,
318
+ ...i.apiKey ? { Authorization: `Bearer ${i.apiKey}` } : {},
319
+ ...t ? { "X-Org-Id": t } : {}
320
+ } })).data;
321
+ } else s = (await _.post(a, n, { headers: o })).data;
322
+ let c = s.tarball_path;
323
+ if (typeof c != "string" || !c) throw Error("The upload returned no tarball path.");
324
+ return c;
310
325
  }
311
326
  static async getGitSyncStatus() {
312
- let t = e().backend, n = `${h}/v1/git-sync/status`;
327
+ let t = e().backend, n = `${g}/v1/git-sync/status`;
313
328
  if (t.kind === "cloud") return u({
314
329
  backend: t,
315
330
  method: "GET",
316
331
  path: n
317
332
  });
318
- let { data: r } = await g.get(n);
333
+ let { data: r } = await _.get(n);
319
334
  return r;
320
335
  }
321
336
  static async updateGitSyncConfig(t) {
322
- let n = e().backend, r = `${h}/v1/git-sync/config`;
337
+ let n = e().backend, r = `${g}/v1/git-sync/config`;
323
338
  if (n.kind === "cloud") return u({
324
339
  backend: n,
325
340
  method: "PUT",
326
341
  path: r,
327
342
  body: t
328
343
  });
329
- let { data: i } = await g.put(r, t);
344
+ let { data: i } = await _.put(r, t);
330
345
  return i;
331
346
  }
332
347
  static async checkGitSyncConfig(t) {
333
- let n = e().backend, r = `${h}/v1/git-sync/check`;
348
+ let n = e().backend, r = `${g}/v1/git-sync/check`;
334
349
  if (n.kind === "cloud") return u({
335
350
  backend: n,
336
351
  method: "POST",
337
352
  path: r,
338
353
  body: t
339
354
  });
340
- let { data: i } = await g.post(r, t);
355
+ let { data: i } = await _.post(r, t);
341
356
  return i;
342
357
  }
343
358
  static async triggerGitSync() {
344
- let t = e().backend, n = `${h}/v1/git-sync/sync`;
359
+ let t = e().backend, n = `${g}/v1/git-sync/sync`;
345
360
  if (t.kind === "cloud") return u({
346
361
  backend: t,
347
362
  method: "POST",
348
363
  path: n
349
364
  });
350
- let { data: r } = await g.post(n);
365
+ let { data: r } = await _.post(n);
351
366
  return r;
352
367
  }
353
368
  static async checkHealth() {
354
- let t = e().backend, n = `${h}${d("health")}`;
369
+ let t = e().backend, n = `${g}${d("health")}`;
355
370
  try {
356
371
  if (t.kind === "cloud") return await u({
357
372
  backend: t,
358
373
  method: "GET",
359
374
  path: n,
360
375
  timeoutSeconds: 5,
361
- headers: await _()
376
+ headers: await v()
362
377
  });
363
- let { data: e } = await g.get(n, { timeout: 5e3 });
378
+ let { data: e } = await _.get(n, { timeout: 5e3 });
364
379
  return e;
365
380
  } catch {
366
381
  return { status: "error" };
@@ -368,6 +383,6 @@ var E = class t {
368
383
  }
369
384
  };
370
385
  //#endregion
371
- export { E as default };
386
+ export { D as default };
372
387
 
373
388
  //# sourceMappingURL=automation-service.api.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"automation-service.api.js","names":[],"sources":["../../../src/api/automation-service/automation-service.api.ts"],"sourcesContent":["import axios from \"axios\";\nimport {\n clearPendingLocalTelemetryRevocation,\n getTelemetryConsent,\n getTelemetryDistinctId,\n getTelemetryDistinctIdForConsentSync,\n type TelemetryConsent,\n} from \"#/services/telemetry\";\nimport type {\n Automation,\n AutomationRun,\n AutomationSpec,\n AutomationTrigger,\n AutomationsResponse,\n AutomationRunsResponse,\n} from \"#/types/automation\";\nimport type {\n GitSyncCheckResponse,\n GitSyncConfigUpdateRequest,\n GitSyncStatus,\n GitSyncTriggerResponse,\n} from \"#/types/git-sync\";\nimport { AUTOMATION_CREATE_ENDPOINT } from \"#/manifests/automation-setup\";\nimport {\n getAutomationEndpoint,\n getAutomationIdEndpoint,\n getImportExportSpec,\n} from \"#/manifests/automation-interface\";\nimport type {\n DeploymentCapabilities,\n SetupRequestBody,\n ValidateDraftResponse,\n} from \"#/manifests/types\";\nimport type { Backend, ResolvedActiveBackend } from \"../backend-registry/types\";\nimport {\n getActiveBackend,\n getEffectiveLocalBackend,\n} from \"../backend-registry/active-store\";\nimport { NoBackendAvailableError } from \"../agent-server-client-options\";\nimport { callCloudProxy } from \"../cloud/proxy\";\nimport {\n AGENT_CANVAS_CLIENT_HEADERS,\n OPENHANDS_TELEMETRY_DISTINCT_ID_HEADER,\n} from \"../client-source\";\n\nconst AUTOMATION_BASE_PATH = \"/api/automation\";\n\nexport interface AutomationHealthResponse {\n status: \"ok\" | \"error\";\n message?: string;\n}\n\ntype AutomationSdkVersionResponse =\n | string\n | {\n sdk_version?: unknown;\n version?: unknown;\n };\n\n// Local automation calls go to the automation sidecar that\n// `scripts/dev-with-automation.mjs` mounts behind the local agent-server.\n// Both backends use the same session API key and the same `X-Session-API-Key`\n// header for consistency.\nconst localAutomationAxios = axios.create();\n\nasync function buildAutomationRequestHeaders(\n extraHeaders: Record<string, string> = {},\n): Promise<Record<string, string>> {\n const telemetryDistinctId = await getTelemetryDistinctId();\n return {\n ...AGENT_CANVAS_CLIENT_HEADERS,\n ...(telemetryDistinctId\n ? { [OPENHANDS_TELEMETRY_DISTINCT_ID_HEADER]: telemetryDistinctId }\n : {}),\n ...extraHeaders,\n };\n}\n\nlocalAutomationAxios.interceptors.request.use(async (config) => {\n const requestHeaders = await buildAutomationRequestHeaders();\n Object.entries(requestHeaders).forEach(([name, value]) => {\n config.headers.set(name, value);\n });\n\n // Import uses an explicit baseURL/header pair so its POST, PATCH, and\n // cleanup stay pinned to the backend selected when the mutation started.\n if (config.baseURL) return config;\n\n // Resolve the local backend on every call so it tracks the\n // currently-active local backend (and any host/key edits made via the\n // manage-backends UI), rather than freezing whatever value the\n // agent-server-config produced at module load time.\n // Using the backend registry (rather than the build-time VITE_SESSION_API_KEY\n // env var) ensures the published npm package picks up the runtime-injected\n // session key that scripts/static-server.mjs seeds into localStorage, fixing\n // the 401 errors reported in issue #829.\n const backend = getEffectiveLocalBackend();\n if (!backend) throw new NoBackendAvailableError();\n // eslint-disable-next-line no-param-reassign\n config.baseURL = backend.host;\n\n const apiKey = backend.apiKey?.trim();\n if (apiKey) {\n config.headers.set(\"X-Session-API-Key\", apiKey);\n }\n return config;\n});\n\nfunction normalizeAutomationSdkVersion(version: unknown): string | null {\n if (typeof version !== \"string\") return null;\n const trimmed = version.trim();\n return trimmed || null;\n}\n\nfunction getAutomationSdkVersionFromResponse(\n response: AutomationSdkVersionResponse,\n): string | null {\n if (typeof response === \"string\") {\n return normalizeAutomationSdkVersion(response);\n }\n return (\n normalizeAutomationSdkVersion(response.sdk_version) ??\n normalizeAutomationSdkVersion(response.version)\n );\n}\n\nfunction buildPaginationQuery(limit: number, offset: number): string {\n const params = new URLSearchParams();\n params.set(\"limit\", String(limit));\n params.set(\"offset\", String(offset));\n return params.toString();\n}\n\nfunction buildImportedTrigger(spec: AutomationSpec): AutomationTrigger {\n if (spec.trigger.type === \"event\") {\n return {\n type: \"event\",\n source: spec.trigger.source,\n on: spec.trigger.on,\n ...(spec.trigger.filter && { filter: spec.trigger.filter }),\n };\n }\n\n return {\n type: \"cron\",\n schedule: spec.trigger.schedule,\n timezone: spec.timezone ?? spec.trigger.timezone ?? \"UTC\",\n };\n}\n\nfunction generatePendingImportEvent(): string {\n if (\n typeof crypto !== \"undefined\" &&\n typeof crypto.randomUUID === \"function\"\n ) {\n return `pending.${crypto.randomUUID()}`;\n }\n return `pending.${Date.now()}.${Math.random().toString(36).slice(2, 10)}`;\n}\n\nfunction buildCreateAutomationRequest(spec: AutomationSpec) {\n if (!spec.prompt) {\n throw new Error(\"An automation prompt is required for import.\");\n }\n\n const { importDefaults } = getImportExportSpec();\n const repos = spec.repository\n ? [\n {\n url: spec.repository,\n ...(spec.branch && { ref: spec.branch }),\n ...(!spec.repository.includes(\"://\") &&\n !spec.repository.startsWith(\"git@\") && {\n provider: importDefaults.repoProvider,\n }),\n },\n ]\n : undefined;\n\n return {\n path: `${AUTOMATION_BASE_PATH}${getAutomationEndpoint(\n spec.plugins?.length ? \"createPlugin\" : \"createPrompt\",\n )}`,\n body: {\n name: spec.name,\n prompt: spec.prompt,\n // Preset creation defaults to enabled. A unique event trigger keeps the\n // new record inert until the real trigger and disabled state are applied\n // together in the follow-up PATCH.\n trigger: {\n type: \"event\",\n source: importDefaults.placeholderEventSource,\n on: generatePendingImportEvent(),\n },\n ...(spec.model && { model: spec.model }),\n ...(repos && { repos }),\n ...(spec.plugins?.length && {\n plugins: spec.plugins.map((source) => ({ source })),\n }),\n ...(spec.timeout != null && { timeout: spec.timeout }),\n },\n };\n}\n\nasync function buildPinnedLocalConfig(backend: Backend) {\n const apiKey = backend.apiKey.trim();\n return {\n baseURL: backend.host,\n headers: await buildAutomationRequestHeaders(\n apiKey ? { \"X-Session-API-Key\": apiKey } : {},\n ),\n };\n}\n\nasync function buildPinnedCloudHeaders(active: ResolvedActiveBackend) {\n return buildAutomationRequestHeaders(\n active.orgId ? { \"X-Org-Id\": active.orgId } : {},\n );\n}\n\nclass AutomationService {\n static async syncTelemetryConsent(\n consent: TelemetryConsent = getTelemetryConsent(),\n ): Promise<void> {\n const active = getActiveBackend();\n if (active.backend.kind !== \"local\") return;\n\n const frontendDistinctId = await getTelemetryDistinctIdForConsentSync();\n await localAutomationAxios.post(\n `${AUTOMATION_BASE_PATH}/v1/telemetry/consent`,\n {\n consent_granted: consent === \"granted\",\n frontend_distinct_id: frontendDistinctId,\n },\n { timeout: 5000 },\n );\n if (consent !== \"granted\" && frontendDistinctId) {\n clearPendingLocalTelemetryRevocation(frontendDistinctId);\n }\n }\n\n static async getSdkVersion(): Promise<string | null> {\n const active = getActiveBackend();\n const path = `${AUTOMATION_BASE_PATH}/sdk-version`;\n\n try {\n let response: AutomationSdkVersionResponse;\n if (active.backend.kind === \"cloud\") {\n response = await callCloudProxy<AutomationSdkVersionResponse>({\n backend: active.backend,\n method: \"GET\",\n path,\n headers: await buildPinnedCloudHeaders(active),\n timeoutSeconds: 5,\n });\n } else {\n const { data } =\n await localAutomationAxios.get<AutomationSdkVersionResponse>(path, {\n timeout: 5000,\n });\n response = data;\n }\n\n return getAutomationSdkVersionFromResponse(response);\n } catch {\n return null;\n }\n }\n\n static async listAutomations(\n params: { limit?: number; offset?: number } = {},\n ): Promise<AutomationsResponse> {\n const { limit = 50, offset = 0 } = params;\n const active = getActiveBackend().backend;\n\n if (active.kind === \"cloud\") {\n return callCloudProxy<AutomationsResponse>({\n backend: active,\n method: \"GET\",\n path: `${AUTOMATION_BASE_PATH}${getAutomationEndpoint(\"list\")}?${buildPaginationQuery(limit, offset)}`,\n headers: await buildAutomationRequestHeaders(),\n });\n }\n\n const { data } = await localAutomationAxios.get<AutomationsResponse>(\n `${AUTOMATION_BASE_PATH}${getAutomationEndpoint(\"list\")}`,\n { params: { limit, offset } },\n );\n return data;\n }\n\n static async getAutomations(\n limit = 50,\n offset = 0,\n ): Promise<AutomationsResponse> {\n return AutomationService.listAutomations({ limit, offset });\n }\n\n static async getAutomation(id: string): Promise<Automation> {\n const active = getActiveBackend().backend;\n const path = `${AUTOMATION_BASE_PATH}${getAutomationIdEndpoint(\"detail\", id)}`;\n\n if (active.kind === \"cloud\") {\n return callCloudProxy<Automation>({\n backend: active,\n method: \"GET\",\n path,\n headers: await buildAutomationRequestHeaders(),\n });\n }\n\n const { data } = await localAutomationAxios.get<Automation>(path);\n return data;\n }\n\n static async createAutomation(spec: AutomationSpec): Promise<Automation> {\n const active = getActiveBackend();\n const { path, body } = buildCreateAutomationRequest(spec);\n\n let created: Automation;\n if (active.backend.kind === \"cloud\") {\n created = await callCloudProxy<Automation>({\n backend: active.backend,\n method: \"POST\",\n path,\n body,\n headers: await buildPinnedCloudHeaders(active),\n });\n } else {\n const { data } = await localAutomationAxios.post<Automation>(\n path,\n body,\n await buildPinnedLocalConfig(active.backend),\n );\n created = data;\n }\n\n const updatePath = `${AUTOMATION_BASE_PATH}${getAutomationIdEndpoint(\"detail\", created.id)}`;\n const updateBody: Partial<Automation> = {\n trigger: buildImportedTrigger(spec),\n enabled: false,\n };\n\n try {\n if (active.backend.kind === \"cloud\") {\n return await callCloudProxy<Automation>({\n backend: active.backend,\n method: \"PATCH\",\n path: updatePath,\n body: updateBody,\n headers: await buildPinnedCloudHeaders(active),\n });\n }\n\n const { data } = await localAutomationAxios.patch<Automation>(\n updatePath,\n updateBody,\n await buildPinnedLocalConfig(active.backend),\n );\n return data;\n } catch (updateError) {\n try {\n if (active.backend.kind === \"cloud\") {\n await callCloudProxy<unknown>({\n backend: active.backend,\n method: \"DELETE\",\n path: updatePath,\n headers: await buildPinnedCloudHeaders(active),\n });\n } else {\n await localAutomationAxios.delete(\n updatePath,\n await buildPinnedLocalConfig(active.backend),\n );\n }\n } catch (cleanupError) {\n throw new AggregateError(\n [updateError, cleanupError],\n \"Failed to disable the imported automation and clean it up.\",\n );\n }\n throw updateError;\n }\n }\n\n static async updateAutomation(\n id: string,\n body: Partial<Automation>,\n ): Promise<Automation> {\n const active = getActiveBackend().backend;\n const path = `${AUTOMATION_BASE_PATH}${getAutomationIdEndpoint(\"detail\", id)}`;\n\n if (active.kind === \"cloud\") {\n return callCloudProxy<Automation>({\n backend: active,\n method: \"PATCH\",\n path,\n body: body as Record<string, unknown>,\n headers: await buildAutomationRequestHeaders(),\n });\n }\n\n const { data } = await localAutomationAxios.patch<Automation>(path, body);\n return data;\n }\n\n static async deleteAutomation(id: string): Promise<void> {\n const active = getActiveBackend().backend;\n const path = `${AUTOMATION_BASE_PATH}${getAutomationIdEndpoint(\"detail\", id)}`;\n\n if (active.kind === \"cloud\") {\n await callCloudProxy<unknown>({\n backend: active,\n method: \"DELETE\",\n path,\n headers: await buildAutomationRequestHeaders(),\n });\n return;\n }\n\n await localAutomationAxios.delete(path);\n }\n\n static async dispatchAutomation(id: string): Promise<AutomationRun> {\n const active = getActiveBackend().backend;\n const path = `${AUTOMATION_BASE_PATH}${getAutomationIdEndpoint(\"dispatch\", id)}`;\n\n if (active.kind === \"cloud\") {\n return callCloudProxy<AutomationRun>({\n backend: active,\n method: \"POST\",\n path,\n headers: await buildAutomationRequestHeaders(),\n });\n }\n\n const { data } = await localAutomationAxios.post<AutomationRun>(path);\n return data;\n }\n\n /**\n * Cancel a pending or running automation run.\n * Backend: POST /api/automation/v1/runs/{run_id}/cancel\n */\n static async cancelAutomationRun(runId: string): Promise<AutomationRun> {\n const active = getActiveBackend().backend;\n const path = `${AUTOMATION_BASE_PATH}/v1/runs/${encodeURIComponent(runId)}/cancel`;\n\n if (active.kind === \"cloud\") {\n return callCloudProxy<AutomationRun>({\n backend: active,\n method: \"POST\",\n path,\n headers: await buildAutomationRequestHeaders(),\n });\n }\n\n const { data } = await localAutomationAxios.post<AutomationRun>(path);\n return data;\n }\n\n static async listAutomationRuns(\n id: string,\n params: { limit?: number; offset?: number } = {},\n ): Promise<AutomationRunsResponse> {\n const { limit = 50, offset = 0 } = params;\n const active = getActiveBackend().backend;\n const basePath = `${AUTOMATION_BASE_PATH}${getAutomationIdEndpoint(\"runs\", id)}`;\n\n if (active.kind === \"cloud\") {\n return callCloudProxy<AutomationRunsResponse>({\n backend: active,\n method: \"GET\",\n path: `${basePath}?${buildPaginationQuery(limit, offset)}`,\n headers: await buildAutomationRequestHeaders(),\n });\n }\n\n const { data } = await localAutomationAxios.get<AutomationRunsResponse>(\n basePath,\n { params: { limit, offset } },\n );\n return data;\n }\n\n static async getAutomationRuns(\n id: string,\n limit = 50,\n offset = 0,\n ): Promise<AutomationRunsResponse> {\n return AutomationService.listAutomationRuns(id, { limit, offset });\n }\n\n static async toggleAutomation(\n id: string,\n enabled: boolean,\n ): Promise<Automation> {\n return AutomationService.updateAutomation(id, { enabled });\n }\n\n static async downloadTarball(id: string, name: string): Promise<void> {\n const active = getActiveBackend().backend;\n const path = `${AUTOMATION_BASE_PATH}${getAutomationIdEndpoint(\"tarball\", id)}`;\n\n let blob: Blob;\n if (active.kind === \"cloud\") {\n blob = await callCloudProxy<Blob>({\n backend: active,\n method: \"GET\",\n path,\n responseType: \"blob\",\n headers: await buildAutomationRequestHeaders(),\n });\n } else {\n const { data } = await localAutomationAxios.get<Blob>(path, {\n responseType: \"blob\",\n });\n blob = data;\n }\n\n const url = URL.createObjectURL(blob);\n const a = document.createElement(\"a\");\n a.href = url;\n a.download = `${name}.tar`;\n a.click();\n URL.revokeObjectURL(url);\n }\n\n /**\n * Ask what this deployment supports, before a setup form renders.\n *\n * The setup endpoints answer a contract authored in `OpenHands/extensions`,\n * so their bodies are camelCase where the rest of this service is snake_case.\n */\n static async getCapabilities(): Promise<DeploymentCapabilities> {\n const active = getActiveBackend().backend;\n const path = `${AUTOMATION_BASE_PATH}${getAutomationEndpoint(\"capabilities\")}`;\n\n if (active.kind === \"cloud\") {\n return callCloudProxy<DeploymentCapabilities>({\n backend: active,\n method: \"GET\",\n path,\n headers: await buildAutomationRequestHeaders(),\n });\n }\n\n const { data } =\n await localAutomationAxios.get<DeploymentCapabilities>(path);\n return data;\n }\n\n /**\n * Validate a draft without creating it. An invalid draft is a 200 carrying\n * field-addressed errors; only a malformed envelope is a 4xx.\n */\n static async validateDraft(\n body: SetupRequestBody,\n ): Promise<ValidateDraftResponse> {\n const active = getActiveBackend().backend;\n const path = `${AUTOMATION_BASE_PATH}${getAutomationEndpoint(\"validate\")}`;\n\n if (active.kind === \"cloud\") {\n return callCloudProxy<ValidateDraftResponse>({\n backend: active,\n method: \"POST\",\n path,\n body,\n headers: await buildAutomationRequestHeaders(),\n });\n }\n\n const { data } = await localAutomationAxios.post<ValidateDraftResponse>(\n path,\n body,\n );\n return data;\n }\n\n /**\n * Create from a draft a setup form derived. Unlike {@link\n * AutomationService.createAutomation}, which exists for import and has to\n * park the record on a placeholder trigger, this sends the finished record in\n * one request.\n */\n static async createAutomationDraft(\n body: SetupRequestBody,\n ): Promise<Record<string, unknown>> {\n const active = getActiveBackend().backend;\n const path = `${AUTOMATION_BASE_PATH}${AUTOMATION_CREATE_ENDPOINT}`;\n\n if (active.kind === \"cloud\") {\n return callCloudProxy<Record<string, unknown>>({\n backend: active,\n method: \"POST\",\n path,\n body,\n headers: await buildAutomationRequestHeaders(),\n });\n }\n\n const { data } = await localAutomationAxios.post<Record<string, unknown>>(\n path,\n body,\n );\n return data;\n }\n\n // Git sync paths are literal rather than routed through\n // `getAutomationEndpoint`. That manifest describes the automation surface a\n // host may remap, and `InterfaceEndpoints` requires every key it declares --\n // adding these would break existing manifests. Git sync is a local-mode\n // operator feature outside that surface.\n static async getGitSyncStatus(): Promise<GitSyncStatus> {\n const active = getActiveBackend().backend;\n const path = `${AUTOMATION_BASE_PATH}/v1/git-sync/status`;\n\n if (active.kind === \"cloud\") {\n return callCloudProxy<GitSyncStatus>({\n backend: active,\n method: \"GET\",\n path,\n });\n }\n\n const { data } = await localAutomationAxios.get<GitSyncStatus>(path);\n return data;\n }\n\n static async updateGitSyncConfig(\n body: GitSyncConfigUpdateRequest,\n ): Promise<GitSyncStatus> {\n const active = getActiveBackend().backend;\n const path = `${AUTOMATION_BASE_PATH}/v1/git-sync/config`;\n\n if (active.kind === \"cloud\") {\n return callCloudProxy<GitSyncStatus>({\n backend: active,\n method: \"PUT\",\n path,\n body: body as Record<string, unknown>,\n });\n }\n\n const { data } = await localAutomationAxios.put<GitSyncStatus>(path, body);\n return data;\n }\n\n /**\n * Ask whether a configuration can reach its repo, without saving it. Takes\n * the same body as `updateGitSyncConfig` and answers for the settings that\n * body would leave in place.\n */\n static async checkGitSyncConfig(\n body: GitSyncConfigUpdateRequest,\n ): Promise<GitSyncCheckResponse> {\n const active = getActiveBackend().backend;\n const path = `${AUTOMATION_BASE_PATH}/v1/git-sync/check`;\n\n if (active.kind === \"cloud\") {\n return callCloudProxy<GitSyncCheckResponse>({\n backend: active,\n method: \"POST\",\n path,\n body: body as Record<string, unknown>,\n });\n }\n\n const { data } = await localAutomationAxios.post<GitSyncCheckResponse>(\n path,\n body,\n );\n return data;\n }\n\n static async triggerGitSync(): Promise<GitSyncTriggerResponse> {\n const active = getActiveBackend().backend;\n const path = `${AUTOMATION_BASE_PATH}/v1/git-sync/sync`;\n\n if (active.kind === \"cloud\") {\n return callCloudProxy<GitSyncTriggerResponse>({\n backend: active,\n method: \"POST\",\n path,\n });\n }\n\n const { data } =\n await localAutomationAxios.post<GitSyncTriggerResponse>(path);\n return data;\n }\n\n static async checkHealth(): Promise<AutomationHealthResponse> {\n const active = getActiveBackend().backend;\n const path = `${AUTOMATION_BASE_PATH}${getAutomationEndpoint(\"health\")}`;\n\n try {\n if (active.kind === \"cloud\") {\n const response = await callCloudProxy<AutomationHealthResponse>({\n backend: active,\n method: \"GET\",\n path,\n // Fail fast, matching the local branch's 5s timeout below.\n timeoutSeconds: 5,\n headers: await buildAutomationRequestHeaders(),\n });\n return response;\n }\n\n const { data } = await localAutomationAxios.get<AutomationHealthResponse>(\n path,\n { timeout: 5000 },\n );\n return data;\n } catch {\n return { status: \"error\" };\n }\n }\n}\n\nexport default AutomationService;\n"],"mappings":"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"}
1
+ {"version":3,"file":"automation-service.api.js","names":[],"sources":["../../../src/api/automation-service/automation-service.api.ts"],"sourcesContent":["import axios from \"axios\";\nimport {\n clearPendingLocalTelemetryRevocation,\n getTelemetryConsent,\n getTelemetryDistinctId,\n getTelemetryDistinctIdForConsentSync,\n type TelemetryConsent,\n} from \"#/services/telemetry\";\nimport type {\n Automation,\n AutomationRun,\n AutomationSpec,\n AutomationTrigger,\n AutomationsResponse,\n AutomationRunsResponse,\n} from \"#/types/automation\";\nimport type {\n GitSyncCheckResponse,\n GitSyncConfigUpdateRequest,\n GitSyncStatus,\n GitSyncTriggerResponse,\n} from \"#/types/git-sync\";\nimport {\n automationCreateEndpoint,\n automationUploadEndpoint,\n} from \"#/manifests/automation-setup\";\nimport {\n getAutomationEndpoint,\n getAutomationIdEndpoint,\n getImportExportSpec,\n} from \"#/manifests/automation-interface\";\nimport type {\n DeploymentCapabilities,\n SetupEntry,\n SetupRequestBody,\n ValidateDraftResponse,\n} from \"#/manifests/types\";\nimport type { Backend, ResolvedActiveBackend } from \"../backend-registry/types\";\nimport {\n getActiveBackend,\n getEffectiveLocalBackend,\n} from \"../backend-registry/active-store\";\nimport { NoBackendAvailableError } from \"../agent-server-client-options\";\nimport { callCloudProxy } from \"../cloud/proxy\";\nimport {\n AGENT_CANVAS_CLIENT_HEADERS,\n OPENHANDS_TELEMETRY_DISTINCT_ID_HEADER,\n} from \"../client-source\";\n\nconst AUTOMATION_BASE_PATH = \"/api/automation\";\n\nexport interface AutomationHealthResponse {\n status: \"ok\" | \"error\";\n message?: string;\n}\n\ntype AutomationSdkVersionResponse =\n | string\n | {\n sdk_version?: unknown;\n version?: unknown;\n };\n\n// Local automation calls go to the automation sidecar that\n// `scripts/dev-with-automation.mjs` mounts behind the local agent-server.\n// Both backends use the same session API key and the same `X-Session-API-Key`\n// header for consistency.\nconst localAutomationAxios = axios.create();\n\nasync function buildAutomationRequestHeaders(\n extraHeaders: Record<string, string> = {},\n): Promise<Record<string, string>> {\n const telemetryDistinctId = await getTelemetryDistinctId();\n return {\n ...AGENT_CANVAS_CLIENT_HEADERS,\n ...(telemetryDistinctId\n ? { [OPENHANDS_TELEMETRY_DISTINCT_ID_HEADER]: telemetryDistinctId }\n : {}),\n ...extraHeaders,\n };\n}\n\nlocalAutomationAxios.interceptors.request.use(async (config) => {\n const requestHeaders = await buildAutomationRequestHeaders();\n Object.entries(requestHeaders).forEach(([name, value]) => {\n config.headers.set(name, value);\n });\n\n // Import uses an explicit baseURL/header pair so its POST, PATCH, and\n // cleanup stay pinned to the backend selected when the mutation started.\n if (config.baseURL) return config;\n\n // Resolve the local backend on every call so it tracks the\n // currently-active local backend (and any host/key edits made via the\n // manage-backends UI), rather than freezing whatever value the\n // agent-server-config produced at module load time.\n // Using the backend registry (rather than the build-time VITE_SESSION_API_KEY\n // env var) ensures the published npm package picks up the runtime-injected\n // session key that scripts/static-server.mjs seeds into localStorage, fixing\n // the 401 errors reported in issue #829.\n const backend = getEffectiveLocalBackend();\n if (!backend) throw new NoBackendAvailableError();\n // eslint-disable-next-line no-param-reassign\n config.baseURL = backend.host;\n\n const apiKey = backend.apiKey?.trim();\n if (apiKey) {\n config.headers.set(\"X-Session-API-Key\", apiKey);\n }\n return config;\n});\n\nfunction normalizeAutomationSdkVersion(version: unknown): string | null {\n if (typeof version !== \"string\") return null;\n const trimmed = version.trim();\n return trimmed || null;\n}\n\nfunction getAutomationSdkVersionFromResponse(\n response: AutomationSdkVersionResponse,\n): string | null {\n if (typeof response === \"string\") {\n return normalizeAutomationSdkVersion(response);\n }\n return (\n normalizeAutomationSdkVersion(response.sdk_version) ??\n normalizeAutomationSdkVersion(response.version)\n );\n}\n\nfunction buildPaginationQuery(limit: number, offset: number): string {\n const params = new URLSearchParams();\n params.set(\"limit\", String(limit));\n params.set(\"offset\", String(offset));\n return params.toString();\n}\n\nfunction buildImportedTrigger(spec: AutomationSpec): AutomationTrigger {\n if (spec.trigger.type === \"event\") {\n return {\n type: \"event\",\n source: spec.trigger.source,\n on: spec.trigger.on,\n ...(spec.trigger.filter && { filter: spec.trigger.filter }),\n };\n }\n\n return {\n type: \"cron\",\n schedule: spec.trigger.schedule,\n timezone: spec.timezone ?? spec.trigger.timezone ?? \"UTC\",\n };\n}\n\nfunction generatePendingImportEvent(): string {\n if (\n typeof crypto !== \"undefined\" &&\n typeof crypto.randomUUID === \"function\"\n ) {\n return `pending.${crypto.randomUUID()}`;\n }\n return `pending.${Date.now()}.${Math.random().toString(36).slice(2, 10)}`;\n}\n\nfunction buildCreateAutomationRequest(spec: AutomationSpec) {\n if (!spec.prompt) {\n throw new Error(\"An automation prompt is required for import.\");\n }\n\n const { importDefaults } = getImportExportSpec();\n const repos = spec.repository\n ? [\n {\n url: spec.repository,\n ...(spec.branch && { ref: spec.branch }),\n ...(!spec.repository.includes(\"://\") &&\n !spec.repository.startsWith(\"git@\") && {\n provider: importDefaults.repoProvider,\n }),\n },\n ]\n : undefined;\n\n return {\n path: `${AUTOMATION_BASE_PATH}${getAutomationEndpoint(\n spec.plugins?.length ? \"createPlugin\" : \"createPrompt\",\n )}`,\n body: {\n name: spec.name,\n prompt: spec.prompt,\n // Preset creation defaults to enabled. A unique event trigger keeps the\n // new record inert until the real trigger and disabled state are applied\n // together in the follow-up PATCH.\n trigger: {\n type: \"event\",\n source: importDefaults.placeholderEventSource,\n on: generatePendingImportEvent(),\n },\n ...(spec.model && { model: spec.model }),\n ...(repos && { repos }),\n ...(spec.plugins?.length && {\n plugins: spec.plugins.map((source) => ({ source })),\n }),\n ...(spec.timeout != null && { timeout: spec.timeout }),\n },\n };\n}\n\nasync function buildPinnedLocalConfig(backend: Backend) {\n const apiKey = backend.apiKey.trim();\n return {\n baseURL: backend.host,\n headers: await buildAutomationRequestHeaders(\n apiKey ? { \"X-Session-API-Key\": apiKey } : {},\n ),\n };\n}\n\nasync function buildPinnedCloudHeaders(active: ResolvedActiveBackend) {\n return buildAutomationRequestHeaders(\n active.orgId ? { \"X-Org-Id\": active.orgId } : {},\n );\n}\n\nclass AutomationService {\n static async syncTelemetryConsent(\n consent: TelemetryConsent = getTelemetryConsent(),\n ): Promise<void> {\n const active = getActiveBackend();\n if (active.backend.kind !== \"local\") return;\n\n const frontendDistinctId = await getTelemetryDistinctIdForConsentSync();\n await localAutomationAxios.post(\n `${AUTOMATION_BASE_PATH}/v1/telemetry/consent`,\n {\n consent_granted: consent === \"granted\",\n frontend_distinct_id: frontendDistinctId,\n },\n { timeout: 5000 },\n );\n if (consent !== \"granted\" && frontendDistinctId) {\n clearPendingLocalTelemetryRevocation(frontendDistinctId);\n }\n }\n\n static async getSdkVersion(): Promise<string | null> {\n const active = getActiveBackend();\n const path = `${AUTOMATION_BASE_PATH}/sdk-version`;\n\n try {\n let response: AutomationSdkVersionResponse;\n if (active.backend.kind === \"cloud\") {\n response = await callCloudProxy<AutomationSdkVersionResponse>({\n backend: active.backend,\n method: \"GET\",\n path,\n headers: await buildPinnedCloudHeaders(active),\n timeoutSeconds: 5,\n });\n } else {\n const { data } =\n await localAutomationAxios.get<AutomationSdkVersionResponse>(path, {\n timeout: 5000,\n });\n response = data;\n }\n\n return getAutomationSdkVersionFromResponse(response);\n } catch {\n return null;\n }\n }\n\n static async listAutomations(\n params: { limit?: number; offset?: number } = {},\n ): Promise<AutomationsResponse> {\n const { limit = 50, offset = 0 } = params;\n const active = getActiveBackend().backend;\n\n if (active.kind === \"cloud\") {\n return callCloudProxy<AutomationsResponse>({\n backend: active,\n method: \"GET\",\n path: `${AUTOMATION_BASE_PATH}${getAutomationEndpoint(\"list\")}?${buildPaginationQuery(limit, offset)}`,\n headers: await buildAutomationRequestHeaders(),\n });\n }\n\n const { data } = await localAutomationAxios.get<AutomationsResponse>(\n `${AUTOMATION_BASE_PATH}${getAutomationEndpoint(\"list\")}`,\n { params: { limit, offset } },\n );\n return data;\n }\n\n static async getAutomations(\n limit = 50,\n offset = 0,\n ): Promise<AutomationsResponse> {\n return AutomationService.listAutomations({ limit, offset });\n }\n\n static async getAutomation(id: string): Promise<Automation> {\n const active = getActiveBackend().backend;\n const path = `${AUTOMATION_BASE_PATH}${getAutomationIdEndpoint(\"detail\", id)}`;\n\n if (active.kind === \"cloud\") {\n return callCloudProxy<Automation>({\n backend: active,\n method: \"GET\",\n path,\n headers: await buildAutomationRequestHeaders(),\n });\n }\n\n const { data } = await localAutomationAxios.get<Automation>(path);\n return data;\n }\n\n static async createAutomation(spec: AutomationSpec): Promise<Automation> {\n const active = getActiveBackend();\n const { path, body } = buildCreateAutomationRequest(spec);\n\n let created: Automation;\n if (active.backend.kind === \"cloud\") {\n created = await callCloudProxy<Automation>({\n backend: active.backend,\n method: \"POST\",\n path,\n body,\n headers: await buildPinnedCloudHeaders(active),\n });\n } else {\n const { data } = await localAutomationAxios.post<Automation>(\n path,\n body,\n await buildPinnedLocalConfig(active.backend),\n );\n created = data;\n }\n\n const updatePath = `${AUTOMATION_BASE_PATH}${getAutomationIdEndpoint(\"detail\", created.id)}`;\n const updateBody: Partial<Automation> = {\n trigger: buildImportedTrigger(spec),\n enabled: false,\n };\n\n try {\n if (active.backend.kind === \"cloud\") {\n return await callCloudProxy<Automation>({\n backend: active.backend,\n method: \"PATCH\",\n path: updatePath,\n body: updateBody,\n headers: await buildPinnedCloudHeaders(active),\n });\n }\n\n const { data } = await localAutomationAxios.patch<Automation>(\n updatePath,\n updateBody,\n await buildPinnedLocalConfig(active.backend),\n );\n return data;\n } catch (updateError) {\n try {\n if (active.backend.kind === \"cloud\") {\n await callCloudProxy<unknown>({\n backend: active.backend,\n method: \"DELETE\",\n path: updatePath,\n headers: await buildPinnedCloudHeaders(active),\n });\n } else {\n await localAutomationAxios.delete(\n updatePath,\n await buildPinnedLocalConfig(active.backend),\n );\n }\n } catch (cleanupError) {\n throw new AggregateError(\n [updateError, cleanupError],\n \"Failed to disable the imported automation and clean it up.\",\n );\n }\n throw updateError;\n }\n }\n\n static async updateAutomation(\n id: string,\n body: Partial<Automation>,\n ): Promise<Automation> {\n const active = getActiveBackend().backend;\n const path = `${AUTOMATION_BASE_PATH}${getAutomationIdEndpoint(\"detail\", id)}`;\n\n if (active.kind === \"cloud\") {\n return callCloudProxy<Automation>({\n backend: active,\n method: \"PATCH\",\n path,\n body: body as Record<string, unknown>,\n headers: await buildAutomationRequestHeaders(),\n });\n }\n\n const { data } = await localAutomationAxios.patch<Automation>(path, body);\n return data;\n }\n\n static async deleteAutomation(id: string): Promise<void> {\n const active = getActiveBackend().backend;\n const path = `${AUTOMATION_BASE_PATH}${getAutomationIdEndpoint(\"detail\", id)}`;\n\n if (active.kind === \"cloud\") {\n await callCloudProxy<unknown>({\n backend: active,\n method: \"DELETE\",\n path,\n headers: await buildAutomationRequestHeaders(),\n });\n return;\n }\n\n await localAutomationAxios.delete(path);\n }\n\n static async dispatchAutomation(id: string): Promise<AutomationRun> {\n const active = getActiveBackend().backend;\n const path = `${AUTOMATION_BASE_PATH}${getAutomationIdEndpoint(\"dispatch\", id)}`;\n\n if (active.kind === \"cloud\") {\n return callCloudProxy<AutomationRun>({\n backend: active,\n method: \"POST\",\n path,\n headers: await buildAutomationRequestHeaders(),\n });\n }\n\n const { data } = await localAutomationAxios.post<AutomationRun>(path);\n return data;\n }\n\n /**\n * Cancel a pending or running automation run.\n * Backend: POST /api/automation/v1/runs/{run_id}/cancel\n */\n static async cancelAutomationRun(runId: string): Promise<AutomationRun> {\n const active = getActiveBackend().backend;\n const path = `${AUTOMATION_BASE_PATH}/v1/runs/${encodeURIComponent(runId)}/cancel`;\n\n if (active.kind === \"cloud\") {\n return callCloudProxy<AutomationRun>({\n backend: active,\n method: \"POST\",\n path,\n headers: await buildAutomationRequestHeaders(),\n });\n }\n\n const { data } = await localAutomationAxios.post<AutomationRun>(path);\n return data;\n }\n\n static async listAutomationRuns(\n id: string,\n params: { limit?: number; offset?: number } = {},\n ): Promise<AutomationRunsResponse> {\n const { limit = 50, offset = 0 } = params;\n const active = getActiveBackend().backend;\n const basePath = `${AUTOMATION_BASE_PATH}${getAutomationIdEndpoint(\"runs\", id)}`;\n\n if (active.kind === \"cloud\") {\n return callCloudProxy<AutomationRunsResponse>({\n backend: active,\n method: \"GET\",\n path: `${basePath}?${buildPaginationQuery(limit, offset)}`,\n headers: await buildAutomationRequestHeaders(),\n });\n }\n\n const { data } = await localAutomationAxios.get<AutomationRunsResponse>(\n basePath,\n { params: { limit, offset } },\n );\n return data;\n }\n\n static async getAutomationRuns(\n id: string,\n limit = 50,\n offset = 0,\n ): Promise<AutomationRunsResponse> {\n return AutomationService.listAutomationRuns(id, { limit, offset });\n }\n\n static async toggleAutomation(\n id: string,\n enabled: boolean,\n ): Promise<Automation> {\n return AutomationService.updateAutomation(id, { enabled });\n }\n\n static async downloadTarball(id: string, name: string): Promise<void> {\n const active = getActiveBackend().backend;\n const path = `${AUTOMATION_BASE_PATH}${getAutomationIdEndpoint(\"tarball\", id)}`;\n\n let blob: Blob;\n if (active.kind === \"cloud\") {\n blob = await callCloudProxy<Blob>({\n backend: active,\n method: \"GET\",\n path,\n responseType: \"blob\",\n headers: await buildAutomationRequestHeaders(),\n });\n } else {\n const { data } = await localAutomationAxios.get<Blob>(path, {\n responseType: \"blob\",\n });\n blob = data;\n }\n\n const url = URL.createObjectURL(blob);\n const a = document.createElement(\"a\");\n a.href = url;\n a.download = `${name}.tar`;\n a.click();\n URL.revokeObjectURL(url);\n }\n\n /**\n * Ask what this deployment supports, before a setup form renders.\n *\n * The setup endpoints answer a contract authored in `OpenHands/extensions`,\n * so their bodies are camelCase where the rest of this service is snake_case.\n */\n static async getCapabilities(): Promise<DeploymentCapabilities> {\n const active = getActiveBackend().backend;\n const path = `${AUTOMATION_BASE_PATH}${getAutomationEndpoint(\"capabilities\")}`;\n\n if (active.kind === \"cloud\") {\n return callCloudProxy<DeploymentCapabilities>({\n backend: active,\n method: \"GET\",\n path,\n headers: await buildAutomationRequestHeaders(),\n });\n }\n\n const { data } =\n await localAutomationAxios.get<DeploymentCapabilities>(path);\n return data;\n }\n\n /**\n * Validate a draft without creating it. An invalid draft is a 200 carrying\n * field-addressed errors; only a malformed envelope is a 4xx.\n */\n static async validateDraft(\n body: SetupRequestBody,\n ): Promise<ValidateDraftResponse> {\n const active = getActiveBackend().backend;\n const path = `${AUTOMATION_BASE_PATH}${getAutomationEndpoint(\"validate\")}`;\n\n if (active.kind === \"cloud\") {\n return callCloudProxy<ValidateDraftResponse>({\n backend: active,\n method: \"POST\",\n path,\n body,\n headers: await buildAutomationRequestHeaders(),\n });\n }\n\n const { data } = await localAutomationAxios.post<ValidateDraftResponse>(\n path,\n body,\n );\n return data;\n }\n\n /**\n * Create from a draft a setup form derived. Unlike {@link\n * AutomationService.createAutomation}, which exists for import and has to\n * park the record on a placeholder trigger, this sends the finished record in\n * one request.\n */\n static async createAutomationDraft(\n body: SetupRequestBody,\n /** The entry the draft came from, which decides the create endpoint. */\n entry?: SetupEntry,\n ): Promise<Record<string, unknown>> {\n const active = getActiveBackend().backend;\n const path = `${AUTOMATION_BASE_PATH}${automationCreateEndpoint(entry)}`;\n\n if (active.kind === \"cloud\") {\n return callCloudProxy<Record<string, unknown>>({\n backend: active,\n method: \"POST\",\n path,\n body,\n headers: await buildAutomationRequestHeaders(),\n });\n }\n\n const { data } = await localAutomationAxios.post<Record<string, unknown>>(\n path,\n body,\n );\n return data;\n }\n\n /**\n * Upload a packed bundle, and return the `oh-internal://` path the create\n * call references.\n *\n * The body is the archive itself rather than a multipart form - the service\n * streams it and takes its metadata from the query string, so it never has\n * to buffer the whole file to start writing.\n */\n static async uploadAutomationTarball(\n name: string,\n archive: Uint8Array,\n ): Promise<string> {\n const active = getActiveBackend().backend;\n const path =\n `${AUTOMATION_BASE_PATH}${automationUploadEndpoint()}` +\n `?name=${encodeURIComponent(name)}`;\n const headers = { \"Content-Type\": \"application/gzip\" };\n\n let upload: Record<string, unknown>;\n if (active.kind === \"cloud\") {\n // Post the archive straight to the cloud host rather than through the\n // cloud client: that client JSON-serializes any non-FormData body, which\n // would turn the gzip `Uint8Array` into `{\"0\":31,...}` even though the\n // header says `application/gzip`. Axios preserves the raw bytes (its\n // `transformRequest` sends the underlying buffer), so the service still\n // receives the archive as the stream it expects, with metadata in the\n // query string. This upload sets no host override, so a direct call\n // matches the cloud client's own direct-to-host path -- we just add the\n // two headers that path would (`Bearer` auth and `X-Org-Id`).\n const { orgId } = getActiveBackend();\n upload = (\n await axios.post<Record<string, unknown>>(\n `${active.host.replace(/\\/+$/, \"\")}${path}`,\n archive,\n {\n headers: {\n ...(await buildAutomationRequestHeaders()),\n ...headers,\n ...(active.apiKey\n ? { Authorization: `Bearer ${active.apiKey}` }\n : {}),\n ...(orgId ? { \"X-Org-Id\": orgId } : {}),\n },\n },\n )\n ).data;\n } else {\n upload = (\n await localAutomationAxios.post<Record<string, unknown>>(\n path,\n archive,\n { headers },\n )\n ).data;\n }\n\n const tarballPath = upload.tarball_path;\n if (typeof tarballPath !== \"string\" || !tarballPath) {\n throw new Error(\"The upload returned no tarball path.\");\n }\n return tarballPath;\n }\n\n // Git sync paths are literal rather than routed through\n // `getAutomationEndpoint`. That manifest describes the automation surface a\n // host may remap, and `InterfaceEndpoints` requires every key it declares --\n // adding these would break existing manifests. Git sync is a local-mode\n // operator feature outside that surface.\n static async getGitSyncStatus(): Promise<GitSyncStatus> {\n const active = getActiveBackend().backend;\n const path = `${AUTOMATION_BASE_PATH}/v1/git-sync/status`;\n\n if (active.kind === \"cloud\") {\n return callCloudProxy<GitSyncStatus>({\n backend: active,\n method: \"GET\",\n path,\n });\n }\n\n const { data } = await localAutomationAxios.get<GitSyncStatus>(path);\n return data;\n }\n\n static async updateGitSyncConfig(\n body: GitSyncConfigUpdateRequest,\n ): Promise<GitSyncStatus> {\n const active = getActiveBackend().backend;\n const path = `${AUTOMATION_BASE_PATH}/v1/git-sync/config`;\n\n if (active.kind === \"cloud\") {\n return callCloudProxy<GitSyncStatus>({\n backend: active,\n method: \"PUT\",\n path,\n body: body as Record<string, unknown>,\n });\n }\n\n const { data } = await localAutomationAxios.put<GitSyncStatus>(path, body);\n return data;\n }\n\n /**\n * Ask whether a configuration can reach its repo, without saving it. Takes\n * the same body as `updateGitSyncConfig` and answers for the settings that\n * body would leave in place.\n */\n static async checkGitSyncConfig(\n body: GitSyncConfigUpdateRequest,\n ): Promise<GitSyncCheckResponse> {\n const active = getActiveBackend().backend;\n const path = `${AUTOMATION_BASE_PATH}/v1/git-sync/check`;\n\n if (active.kind === \"cloud\") {\n return callCloudProxy<GitSyncCheckResponse>({\n backend: active,\n method: \"POST\",\n path,\n body: body as Record<string, unknown>,\n });\n }\n\n const { data } = await localAutomationAxios.post<GitSyncCheckResponse>(\n path,\n body,\n );\n return data;\n }\n\n static async triggerGitSync(): Promise<GitSyncTriggerResponse> {\n const active = getActiveBackend().backend;\n const path = `${AUTOMATION_BASE_PATH}/v1/git-sync/sync`;\n\n if (active.kind === \"cloud\") {\n return callCloudProxy<GitSyncTriggerResponse>({\n backend: active,\n method: \"POST\",\n path,\n });\n }\n\n const { data } =\n await localAutomationAxios.post<GitSyncTriggerResponse>(path);\n return data;\n }\n\n static async checkHealth(): Promise<AutomationHealthResponse> {\n const active = getActiveBackend().backend;\n const path = `${AUTOMATION_BASE_PATH}${getAutomationEndpoint(\"health\")}`;\n\n try {\n if (active.kind === \"cloud\") {\n const response = await callCloudProxy<AutomationHealthResponse>({\n backend: active,\n method: \"GET\",\n path,\n // Fail fast, matching the local branch's 5s timeout below.\n timeoutSeconds: 5,\n headers: await buildAutomationRequestHeaders(),\n });\n return response;\n }\n\n const { data } = await localAutomationAxios.get<AutomationHealthResponse>(\n path,\n { timeout: 5000 },\n );\n return data;\n } catch {\n return { status: \"error\" };\n }\n }\n}\n\nexport default AutomationService;\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- require("../../_virtual/_rolldown/runtime.cjs");var e=`backend`;function t(t,n){let{backend:r,orgId:i}=n;if(!r.id)return t;let[a,o=``]=t.split(`?`),s=new URLSearchParams(o);return s.set(e,r.id),i&&s.set(`org`,i),`${a}?${s.toString()}`}function n(t,n){if(!n)return null;let r;try{r=new URLSearchParams(n)}catch{return null}let i=r.get(e);return!i||!t.some(e=>e.id===i)?null:{backendId:i,orgId:r.get(`org`)||null}}function r(){return typeof window>`u`?``:window.location.search}exports.currentLocationSearch=r,exports.readBackendSelectionFromUrl=n,exports.withBackendSelectionParams=t;
1
+ require("../../_virtual/_rolldown/runtime.cjs");var e=`backend`;function t(t,n){let{backend:r,orgId:i}=n;if(!r.id)return t;let a=t.indexOf(`#`),o=a===-1?``:t.slice(a),s=a===-1?t:t.slice(0,a),c=s.indexOf(`?`),l=c===-1?s:s.slice(0,c),u=c===-1?``:s.slice(c+1),d=new URLSearchParams(u);return d.set(e,r.id),i&&d.set(`org`,i),`${l}?${d.toString()}${o}`}function n(t,n){if(!n)return null;let r;try{r=new URLSearchParams(n)}catch{return null}let i=r.get(e);return!i||!t.some(e=>e.id===i)?null:{backendId:i,orgId:r.get(`org`)||null}}function r(){return typeof window>`u`?``:window.location.search}exports.currentLocationSearch=r,exports.readBackendSelectionFromUrl=n,exports.withBackendSelectionParams=t;
2
2
  //# sourceMappingURL=url-selection.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"url-selection.cjs","names":[],"sources":["../../../src/api/backend-registry/url-selection.ts"],"sourcesContent":["import type { Backend, BackendSelection, ResolvedActiveBackend } from \"./types\";\n\n/**\n * Query parameters that pin a link to the backend (and cloud org) that owns\n * the linked resource.\n *\n * The active backend is tab-scoped: `readStoredActiveBackend()` prefers\n * `sessionStorage` and only falls back to `localStorage`. A tab opened with\n * cmd/ctrl-click or middle-click does not reliably inherit the opener's\n * `sessionStorage`, so it can boot from the `localStorage` fallback — which\n * holds whichever backend was selected *last in any tab*, not the one the\n * sidebar we were just looking at belongs to. The new tab then resolves the\n * conversation id against the wrong backend and shows \"conversation not\n * found\". Carrying the identity in the URL makes the link self-describing so\n * the new tab pins to the right backend regardless of what storage holds.\n */\nexport const BACKEND_QUERY_PARAM = \"backend\";\nexport const ORG_QUERY_PARAM = \"org\";\n\n/**\n * Append the active backend identity to an in-app path so opening it in a new\n * browsing context resolves against the same backend.\n */\nexport function withBackendSelectionParams(\n path: string,\n active: ResolvedActiveBackend,\n): string {\n const { backend, orgId } = active;\n if (!backend.id) return path;\n\n const [pathname, existingSearch = \"\"] = path.split(\"?\");\n const params = new URLSearchParams(existingSearch);\n params.set(BACKEND_QUERY_PARAM, backend.id);\n if (orgId) params.set(ORG_QUERY_PARAM, orgId);\n\n return `${pathname}?${params.toString()}`;\n}\n\n/**\n * Read a backend selection off the current URL, keeping it only when it names\n * a registered backend. An unknown id (a link from another machine, or a\n * backend that has since been removed) is ignored so the caller falls back to\n * the stored selection.\n */\nexport function readBackendSelectionFromUrl(\n backends: Backend[],\n search: string,\n): BackendSelection | null {\n if (!search) return null;\n\n let params: URLSearchParams;\n try {\n params = new URLSearchParams(search);\n } catch {\n return null;\n }\n\n const backendId = params.get(BACKEND_QUERY_PARAM);\n if (!backendId) return null;\n if (!backends.some((backend) => backend.id === backendId)) return null;\n\n const orgId = params.get(ORG_QUERY_PARAM);\n return { backendId, orgId: orgId || null };\n}\n\n/** The current tab's query string, or \"\" outside a browser. */\nexport function currentLocationSearch(): string {\n if (typeof window === \"undefined\") return \"\";\n return window.location.search;\n}\n"],"mappings":"gDAgBA,IAAa,EAAsB,UAOnC,SAAgB,EACd,EACA,EACQ,CACR,GAAM,CAAE,UAAS,SAAU,EAC3B,GAAI,CAAC,EAAQ,GAAI,OAAO,EAExB,GAAM,CAAC,EAAU,EAAiB,IAAM,EAAK,MAAM,GAAG,EAChD,EAAS,IAAI,gBAAgB,CAAc,EAIjD,OAHA,EAAO,IAAI,EAAqB,EAAQ,EAAE,EACtC,GAAO,EAAO,IAAA,MAAqB,CAAK,EAErC,GAAG,EAAS,GAAG,EAAO,SAAS,GACxC,CAQA,SAAgB,EACd,EACA,EACyB,CACzB,GAAI,CAAC,EAAQ,OAAO,KAEpB,IAAI,EACJ,GAAI,CACF,EAAS,IAAI,gBAAgB,CAAM,CACrC,MAAQ,CACN,OAAO,IACT,CAEA,IAAM,EAAY,EAAO,IAAI,CAAmB,EAKhD,MAJI,CAAC,GACD,CAAC,EAAS,KAAM,GAAY,EAAQ,KAAO,CAAS,EAAU,KAG3D,CAAE,YAAW,MADN,EAAO,IAAA,KACM,GAAS,IAAK,CAC3C,CAGA,SAAgB,GAAgC,CAE9C,OADI,OAAO,OAAW,IAAoB,GACnC,OAAO,SAAS,MACzB"}
1
+ {"version":3,"file":"url-selection.cjs","names":[],"sources":["../../../src/api/backend-registry/url-selection.ts"],"sourcesContent":["import type { Backend, BackendSelection, ResolvedActiveBackend } from \"./types\";\n\n/**\n * Query parameters that pin a link to the backend (and cloud org) that owns\n * the linked resource.\n *\n * The active backend is tab-scoped: `readStoredActiveBackend()` prefers\n * `sessionStorage` and only falls back to `localStorage`. A tab opened with\n * cmd/ctrl-click or middle-click does not reliably inherit the opener's\n * `sessionStorage`, so it can boot from the `localStorage` fallback — which\n * holds whichever backend was selected *last in any tab*, not the one the\n * sidebar we were just looking at belongs to. The new tab then resolves the\n * conversation id against the wrong backend and shows \"conversation not\n * found\". Carrying the identity in the URL makes the link self-describing so\n * the new tab pins to the right backend regardless of what storage holds.\n */\nexport const BACKEND_QUERY_PARAM = \"backend\";\nexport const ORG_QUERY_PARAM = \"org\";\n\n/**\n * Append the active backend identity to an in-app path so opening it in a new\n * browsing context resolves against the same backend. Any fragment on the\n * path is preserved verbatim and kept after the query string.\n */\nexport function withBackendSelectionParams(\n path: string,\n active: ResolvedActiveBackend,\n): string {\n const { backend, orgId } = active;\n if (!backend.id) return path;\n\n const hashIndex = path.indexOf(\"#\");\n const fragment = hashIndex === -1 ? \"\" : path.slice(hashIndex);\n const withoutFragment = hashIndex === -1 ? path : path.slice(0, hashIndex);\n\n // Split at the *first* `?` only. A later `?` is ordinary query data (a\n // `next=` redirect carrying its own query, say), and `split(\"?\")` would\n // silently drop everything past it.\n const queryIndex = withoutFragment.indexOf(\"?\");\n const pathname =\n queryIndex === -1 ? withoutFragment : withoutFragment.slice(0, queryIndex);\n const existingSearch =\n queryIndex === -1 ? \"\" : withoutFragment.slice(queryIndex + 1);\n\n const params = new URLSearchParams(existingSearch);\n params.set(BACKEND_QUERY_PARAM, backend.id);\n if (orgId) params.set(ORG_QUERY_PARAM, orgId);\n\n return `${pathname}?${params.toString()}${fragment}`;\n}\n\n/**\n * Read a backend selection off the current URL, keeping it only when it names\n * a registered backend. An unknown id (a link from another machine, or a\n * backend that has since been removed) is ignored so the caller falls back to\n * the stored selection.\n */\nexport function readBackendSelectionFromUrl(\n backends: Backend[],\n search: string,\n): BackendSelection | null {\n if (!search) return null;\n\n let params: URLSearchParams;\n try {\n params = new URLSearchParams(search);\n } catch {\n return null;\n }\n\n const backendId = params.get(BACKEND_QUERY_PARAM);\n if (!backendId) return null;\n if (!backends.some((backend) => backend.id === backendId)) return null;\n\n const orgId = params.get(ORG_QUERY_PARAM);\n return { backendId, orgId: orgId || null };\n}\n\n/** The current tab's query string, or \"\" outside a browser. */\nexport function currentLocationSearch(): string {\n if (typeof window === \"undefined\") return \"\";\n return window.location.search;\n}\n"],"mappings":"gDAgBA,IAAa,EAAsB,UAQnC,SAAgB,EACd,EACA,EACQ,CACR,GAAM,CAAE,UAAS,SAAU,EAC3B,GAAI,CAAC,EAAQ,GAAI,OAAO,EAExB,IAAM,EAAY,EAAK,QAAQ,GAAG,EAC5B,EAAW,IAAc,GAAK,GAAK,EAAK,MAAM,CAAS,EACvD,EAAkB,IAAc,GAAK,EAAO,EAAK,MAAM,EAAG,CAAS,EAKnE,EAAa,EAAgB,QAAQ,GAAG,EACxC,EACJ,IAAe,GAAK,EAAkB,EAAgB,MAAM,EAAG,CAAU,EACrE,EACJ,IAAe,GAAK,GAAK,EAAgB,MAAM,EAAa,CAAC,EAEzD,EAAS,IAAI,gBAAgB,CAAc,EAIjD,OAHA,EAAO,IAAI,EAAqB,EAAQ,EAAE,EACtC,GAAO,EAAO,IAAA,MAAqB,CAAK,EAErC,GAAG,EAAS,GAAG,EAAO,SAAS,IAAI,GAC5C,CAQA,SAAgB,EACd,EACA,EACyB,CACzB,GAAI,CAAC,EAAQ,OAAO,KAEpB,IAAI,EACJ,GAAI,CACF,EAAS,IAAI,gBAAgB,CAAM,CACrC,MAAQ,CACN,OAAO,IACT,CAEA,IAAM,EAAY,EAAO,IAAI,CAAmB,EAKhD,MAJI,CAAC,GACD,CAAC,EAAS,KAAM,GAAY,EAAQ,KAAO,CAAS,EAAU,KAG3D,CAAE,YAAW,MADN,EAAO,IAAA,KACM,GAAS,IAAK,CAC3C,CAGA,SAAgB,GAAgC,CAE9C,OADI,OAAO,OAAW,IAAoB,GACnC,OAAO,SAAS,MACzB"}
@@ -17,7 +17,8 @@ export declare const BACKEND_QUERY_PARAM = "backend";
17
17
  export declare const ORG_QUERY_PARAM = "org";
18
18
  /**
19
19
  * Append the active backend identity to an in-app path so opening it in a new
20
- * browsing context resolves against the same backend.
20
+ * browsing context resolves against the same backend. Any fragment on the
21
+ * path is preserved verbatim and kept after the query string.
21
22
  */
22
23
  export declare function withBackendSelectionParams(path: string, active: ResolvedActiveBackend): string;
23
24
  /**