@openhands/agent-canvas 1.13.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 (1688) 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/format-model-name-BNPKVsIq.js +1 -0
  64. package/build/assets/get-git-path-DlAJa_i6.js +1 -0
  65. package/build/assets/git-repo-dropdown-DGMEhz7d.js +1 -0
  66. package/build/assets/git-repo-dropdown-ai8qaNkD.js +1 -0
  67. package/build/assets/highlighted-source-view-C3sxykQi.js +1 -0
  68. package/build/assets/home-BCGlNJCA.js +1 -0
  69. package/build/assets/home-DB1pRqTC.js +1 -0
  70. package/build/assets/home-automation-run-tooltip-CooFQRIG.js +1 -0
  71. package/build/assets/home-store-Dl1dPE58.js +1 -0
  72. package/build/assets/index-home-DB1pRqTC.js +1 -0
  73. package/build/assets/info-uYSVzX86.js +1 -0
  74. package/build/assets/install-server-modal-BbJdhzet.js +1 -0
  75. package/build/assets/kebab-menu-item-content-BYokkRHi.js +1 -0
  76. package/build/assets/key-Cn5za3rg.js +1 -0
  77. package/build/assets/launch-C1ieiOGe.js +1 -0
  78. package/build/assets/list-filter-OFkpRrmi.js +1 -0
  79. package/build/assets/list-todo-Cuu-STFc.js +1 -0
  80. package/build/assets/llm-not-configured-banner-BqqYnJ1t.js +27 -0
  81. package/build/assets/llm-settings-CnDbbmVW.js +1 -0
  82. package/build/assets/llm-settings-S8Yjg__1.js +1 -0
  83. package/build/assets/llm-subscription-service-BpPfzW4x.js +1 -0
  84. package/build/assets/loader-circle-nvrwthvj.js +1 -0
  85. package/build/assets/loading-spinner-0L3ZTToZ.js +1 -0
  86. package/build/assets/manage-backends-modal-BCUPswyl.js +1 -0
  87. package/build/assets/manifest-58597dde.js +1 -0
  88. package/build/assets/manifest-subpage-layout-BGhiUQbA.js +1 -0
  89. package/build/assets/map-provider-B9LTm23I.js +1 -0
  90. package/build/assets/markdown-renderer-Cb2sBWtV.js +8 -0
  91. package/build/assets/mcp-CKbR4Vft.js +1 -0
  92. package/build/assets/mcp-marketplace-utils-C13fFccR.js +1 -0
  93. package/build/assets/mcp-page-Bm4K2NQq.js +9 -0
  94. package/build/assets/messages-BTN5thLe.js +40 -0
  95. package/build/assets/modal-body-CMOc2tLl.js +1 -0
  96. package/build/assets/modal-classes-BAb4Y_BG.js +1 -0
  97. package/build/assets/modal-close-button-CkJ0Ktjj.js +1 -0
  98. package/build/assets/mouse-pointer-click-CsgRs_-r.js +1 -0
  99. package/build/assets/onboarding-Cx_kaiD1.js +1 -0
  100. package/build/assets/onboarding-modal-vMwn7ihv.js +1 -0
  101. package/build/assets/organization-service.api-C8XpQ0pM.js +1 -0
  102. package/build/assets/parse-git-remote-url-DpDM9bK6.js +1 -0
  103. package/build/assets/pencil-Clh1Wjvh.js +1 -0
  104. package/build/assets/planner-tab-DQvDU3ap.js +1 -0
  105. package/build/assets/plug-BuQhHSSG.js +1 -0
  106. package/build/assets/plugins-management-service-BjYeF0b0.js +1 -0
  107. package/build/assets/plus-CEKne-Yp.js +1 -0
  108. package/build/assets/profiles-service.api-QB-T_u-g.js +1 -0
  109. package/build/assets/providers-FfSZ5TXP.js +1 -0
  110. package/build/assets/proxy-tcFL2yTQ.js +1 -0
  111. package/build/assets/puzzle-A9pGxxai.js +1 -0
  112. package/build/assets/recommended-automations-launcher-Bw8uC4V6.js +1 -0
  113. package/build/assets/refresh-cw-Bh69DyYO.js +1 -0
  114. package/build/assets/root-BLeQfBEq.css +1 -0
  115. package/build/assets/root-ZKKYPR1Z.js +2 -0
  116. package/build/assets/root-layout-luJoE9IG.js +2 -0
  117. package/build/assets/schema-field-Csw5fhtN.js +1 -0
  118. package/build/assets/scroll-fade-state-Dw-i4SGq.js +1 -0
  119. package/build/assets/sdk-section-page-HTffvm7Q.js +1 -0
  120. package/build/assets/secret-form-HTUbYw5o.js +1 -0
  121. package/build/assets/secrets-service-BTor9uAU.js +1 -0
  122. package/build/assets/secrets-settings-BizaTEr1.js +1 -0
  123. package/build/assets/server-process-C9RKzd1x.js +1 -0
  124. package/build/assets/settings-BlmrkwRi.js +1 -0
  125. package/build/assets/settings-DcNPxz0v.js +1 -0
  126. package/build/assets/settings-dropdown-input-tM0A0ipy.js +1 -0
  127. package/build/assets/settings-index-CKq0b0Vg.js +1 -0
  128. package/build/assets/settings-input-C03KUoSC.js +1 -0
  129. package/build/assets/settings-list-classes-BJ0g8rWj.js +1 -0
  130. package/build/assets/settings-modal-AzEF1QPP.js +1 -0
  131. package/build/assets/settings-service.api-B2agVfjL.js +1 -0
  132. package/build/assets/settings-switch-CQE0EGC-.js +1 -0
  133. package/build/assets/settings-utils-ClYOkbbI.js +1 -0
  134. package/build/assets/shared-conversation-B55pCyBG.js +1 -0
  135. package/build/assets/shield-check-CFDViW82.js +1 -0
  136. package/build/assets/sidebar-layout-D3hE08wK.js +1 -0
  137. package/build/assets/sidebar-mobile-menu-toggle-BOtyJHwE.js +1 -0
  138. package/build/assets/sidebar-nav-link-CPzhyHQg.js +1 -0
  139. package/build/assets/sidebar-onboarding-checklist-storage-3qYflszY.js +1 -0
  140. package/build/assets/sidebar-store-DtpU7zaI.js +1 -0
  141. package/build/assets/skill-card-pill-row-CFxjoqxn.js +1 -0
  142. package/build/assets/skill-filter-CWZ5kjcg.js +2 -0
  143. package/build/assets/skill-icon-badge-CPQJ6A-I.js +1 -0
  144. package/build/assets/skill-scope-CV1dkAbW.js +1 -0
  145. package/build/assets/skills-plugins-DGHULTq6.js +1 -0
  146. package/build/assets/skills-settings-CM1lFv3e.js +1 -0
  147. package/build/assets/styled-tooltip-Dl06rkpY.js +1 -0
  148. package/build/assets/task-list-tab-04GNQuii.js +1 -0
  149. package/build/assets/terminal-Cj0iHIW7.js +3 -0
  150. package/build/assets/toggle-switch-Fd_QGz0r.js +1 -0
  151. package/build/assets/trash-2-Dl8_RGz0.js +1 -0
  152. package/build/assets/trash-_RMt7Ayc.js +1 -0
  153. package/build/assets/triangle-alert-SM-q4NU_.js +1 -0
  154. package/build/assets/typography-SgFy466J.js +1 -0
  155. package/build/assets/usage-tab-BcfWV6db.js +1 -0
  156. package/build/assets/use-acp-credential-form-BsSW5NHG.js +1 -0
  157. package/build/assets/use-activate-agent-profile-B2NS8nA5.js +1 -0
  158. package/build/assets/use-agent-profiles-DWBPC0Si.js +1 -0
  159. package/build/assets/use-automation-health-BxXdzZMP.js +1 -0
  160. package/build/assets/use-automations-zYb0dUny.js +1 -0
  161. package/build/assets/use-can-manage-org-profiles-BWMahtUh.js +1 -0
  162. package/build/assets/use-cloud-current-user-id-CPHMDG-C.js +1 -0
  163. package/build/assets/use-config-Bft35DOK.js +1 -0
  164. package/build/assets/use-create-conversation-DwN5vv2f.js +1 -0
  165. package/build/assets/use-create-secret-BSxJMxHp.js +1 -0
  166. package/build/assets/use-get-secrets-BT4ihRwj.js +1 -0
  167. package/build/assets/use-has-permission-B3C8rQmR.js +1 -0
  168. package/build/assets/use-is-authed-CFGkY3-Z.js +1 -0
  169. package/build/assets/use-launch-skill-in-chat-BYjYihBP.js +1 -0
  170. package/build/assets/use-llm-configured-BI6obxsc.js +1 -0
  171. package/build/assets/use-llm-profiles-djGAhTWL.js +1 -0
  172. package/build/assets/use-manifest-capabilities-3z0-1G59.js +1 -0
  173. package/build/assets/use-onboarding-completion-BXpyUSsJ.js +1 -0
  174. package/build/assets/use-plugins-marketplace-DI4_pK56.js +1 -0
  175. package/build/assets/use-save-agent-profile-DdBSTdpN.js +1 -0
  176. package/build/assets/use-save-settings-CUZW6yXP.js +1 -0
  177. package/build/assets/use-settings-C5VhGpqd.js +1 -0
  178. package/build/assets/use-settings-nav-items-DHaUu1Dg.js +16 -0
  179. package/build/assets/use-tracking-D5t9otIF.js +3 -0
  180. package/build/assets/use-user-conversation-DT0_QCnL.js +1 -0
  181. package/build/assets/useInfiniteQuery-CgeUQPfs.js +1 -0
  182. package/build/assets/useMutation-DFnzkf6f.js +1 -0
  183. package/build/assets/useQueries-BhbrGEf1.js +1 -0
  184. package/build/assets/useQuery-BXWbZBZl.js +1 -0
  185. package/build/assets/utils-DaCIEEQP.js +1 -0
  186. package/build/assets/vendor~browser-hbU4u2Ag.js +47 -0
  187. package/build/assets/vendor~commits-tab-BaO2Ce3e.js +11 -0
  188. package/build/assets/vendor~conversation-panel~conversation-CTvDDiXg.js +1 -0
  189. package/build/assets/vendor~entry.client-BFE7Llz9.js +1 -0
  190. package/build/assets/vendor~entry.client-BaKt_PIp.js +9 -0
  191. package/build/assets/vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~kepq2zme-ZixYGy6E.js +186 -0
  192. package/build/assets/vendor~index-home~home~conversation-panel~conversation-BTyukeM-.js +13 -0
  193. package/build/assets/vendor~root-layout-BlUaZ18v.js +1 -0
  194. package/build/assets/vendor~root-layout~conversation-panel~conversation-BYAWJwQX.js +1 -0
  195. package/build/assets/vendor~root-layout~conversation-panel~conversation~skills-settings~automations-list~shared-~bovqqk8e-CHaLEBVR.js +1 -0
  196. package/build/assets/vendor~root-layout~index-home~home~conversation-panel~conversation~mcp~automations-list~aut~ibfbmr9f-B2OLKL7N.js +1 -0
  197. package/build/assets/vendor~root-layout~index-home~home~conversation-panel~conversation~shared-conversation-DXqM7vqB.js +1 -0
  198. package/build/assets/vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~hjcjabwg-Dtu7BpYk.js +48 -0
  199. package/build/assets/vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~iw7io29p-Dz-MAyNb.js +1 -0
  200. package/build/assets/vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~skills-setti~eo2nf80n-DonTKfQD.js +4949 -0
  201. package/build/assets/vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~skills-setti~jz4f6vo2-BgxDvUcf.js +8420 -0
  202. package/build/assets/verification-settings-Bj6bo097.js +1 -0
  203. package/build/assets/wrench-hi7Q13dF.js +1 -0
  204. package/build/assets/x-DkgltWa0.js +1 -0
  205. package/build/index.html +4 -4
  206. package/build/locales/ar/openhands.json +183 -44
  207. package/build/locales/ca/openhands.json +183 -44
  208. package/build/locales/de/openhands.json +183 -44
  209. package/build/locales/en/openhands.json +183 -44
  210. package/build/locales/es/openhands.json +183 -44
  211. package/build/locales/fr/openhands.json +183 -44
  212. package/build/locales/it/openhands.json +183 -44
  213. package/build/locales/ja/openhands.json +183 -44
  214. package/build/locales/ko-KR/openhands.json +183 -44
  215. package/build/locales/no/openhands.json +183 -44
  216. package/build/locales/pt/openhands.json +183 -44
  217. package/build/locales/tr/openhands.json +183 -44
  218. package/build/locales/uk/openhands.json +183 -44
  219. package/build/locales/zh-CN/openhands.json +183 -44
  220. package/build/locales/zh-TW/openhands.json +183 -44
  221. package/config/defaults.json +2 -2
  222. package/dist/api/agent-server-adapter.cjs +3 -3
  223. package/dist/api/agent-server-adapter.cjs.map +1 -1
  224. package/dist/api/agent-server-adapter.d.ts +10 -1
  225. package/dist/api/agent-server-adapter.js +115 -110
  226. package/dist/api/agent-server-adapter.js.map +1 -1
  227. package/dist/api/automation-service/automation-service.api.cjs +1 -1
  228. package/dist/api/automation-service/automation-service.api.cjs.map +1 -1
  229. package/dist/api/automation-service/automation-service.api.d.ts +23 -2
  230. package/dist/api/automation-service/automation-service.api.js +130 -73
  231. package/dist/api/automation-service/automation-service.api.js.map +1 -1
  232. package/dist/api/backend-registry/url-selection.cjs +1 -1
  233. package/dist/api/backend-registry/url-selection.cjs.map +1 -1
  234. package/dist/api/backend-registry/url-selection.d.ts +2 -1
  235. package/dist/api/backend-registry/url-selection.js +2 -2
  236. package/dist/api/backend-registry/url-selection.js.map +1 -1
  237. package/dist/api/cloud/conversation-service.api.cjs +1 -1
  238. package/dist/api/cloud/conversation-service.api.cjs.map +1 -1
  239. package/dist/api/cloud/conversation-service.api.d.ts +9 -0
  240. package/dist/api/cloud/conversation-service.api.js +11 -1
  241. package/dist/api/cloud/conversation-service.api.js.map +1 -1
  242. package/dist/api/conversation-service/agent-server-conversation-service.api.cjs +1 -1
  243. package/dist/api/conversation-service/agent-server-conversation-service.api.cjs.map +1 -1
  244. package/dist/api/conversation-service/agent-server-conversation-service.api.js +29 -24
  245. package/dist/api/conversation-service/agent-server-conversation-service.api.js.map +1 -1
  246. package/dist/api/git-provider-items-service.cjs +2 -0
  247. package/dist/api/git-provider-items-service.cjs.map +1 -0
  248. package/dist/api/git-provider-items-service.d.ts +25 -0
  249. package/dist/api/git-provider-items-service.js +127 -0
  250. package/dist/api/git-provider-items-service.js.map +1 -0
  251. package/dist/api/mcp-health/probe-mcp-server-health.cjs +1 -1
  252. package/dist/api/mcp-health/probe-mcp-server-health.js +31 -31
  253. package/dist/api/open-hands.types.d.ts +0 -19
  254. package/dist/api/profiles-service/profiles-service.api.cjs +1 -1
  255. package/dist/api/profiles-service/profiles-service.api.cjs.map +1 -1
  256. package/dist/api/profiles-service/profiles-service.api.d.ts +29 -2
  257. package/dist/api/profiles-service/profiles-service.api.js +25 -2
  258. package/dist/api/profiles-service/profiles-service.api.js.map +1 -1
  259. package/dist/api/provider-connections-service/provider-connections-service.api.cjs +2 -0
  260. package/dist/api/provider-connections-service/provider-connections-service.api.cjs.map +1 -0
  261. package/dist/api/provider-connections-service/provider-connections-service.api.d.ts +34 -0
  262. package/dist/api/provider-connections-service/provider-connections-service.api.js +50 -0
  263. package/dist/api/provider-connections-service/provider-connections-service.api.js.map +1 -0
  264. package/dist/api/secrets-service.cjs +1 -1
  265. package/dist/api/secrets-service.cjs.map +1 -1
  266. package/dist/api/secrets-service.d.ts +5 -0
  267. package/dist/api/secrets-service.js +12 -6
  268. package/dist/api/secrets-service.js.map +1 -1
  269. package/dist/components/conversation-events/chat/event-content-helpers/create-skill-ready-event.cjs +1 -1
  270. package/dist/components/conversation-events/chat/event-content-helpers/create-skill-ready-event.cjs.map +1 -1
  271. package/dist/components/conversation-events/chat/event-content-helpers/create-skill-ready-event.js +1 -1
  272. package/dist/components/conversation-events/chat/event-content-helpers/create-skill-ready-event.js.map +1 -1
  273. package/dist/components/conversation-events/chat/event-message-components/index.d.ts +0 -1
  274. package/dist/components/conversation-events/chat/event-message.cjs +1 -1
  275. package/dist/components/conversation-events/chat/event-message.cjs.map +1 -1
  276. package/dist/components/conversation-events/chat/event-message.js +1 -1
  277. package/dist/components/conversation-events/chat/event-message.js.map +1 -1
  278. package/dist/components/conversation-events/chat/messages.cjs.map +1 -1
  279. package/dist/components/conversation-events/chat/messages.js.map +1 -1
  280. package/dist/components/features/automations/add-automation-menu.d.ts +7 -0
  281. package/dist/components/features/automations/add-automation-modal.cjs +2 -0
  282. package/dist/components/features/automations/add-automation-modal.cjs.map +1 -0
  283. package/dist/components/features/automations/add-automation-modal.js +42 -0
  284. package/dist/components/features/automations/add-automation-modal.js.map +1 -0
  285. package/dist/components/features/automations/automation-action-button-classes.cjs +2 -0
  286. package/dist/components/features/automations/automation-action-button-classes.cjs.map +1 -0
  287. package/dist/components/features/automations/automation-action-button-classes.d.ts +0 -2
  288. package/dist/components/features/automations/automation-action-button-classes.js +8 -0
  289. package/dist/components/features/automations/automation-action-button-classes.js.map +1 -0
  290. package/dist/components/features/automations/automation-card-skeleton.cjs +2 -0
  291. package/dist/components/features/automations/automation-card-skeleton.cjs.map +1 -0
  292. package/dist/components/features/automations/automation-card-skeleton.js +33 -0
  293. package/dist/components/features/automations/automation-card-skeleton.js.map +1 -0
  294. package/dist/components/features/automations/automation-card.cjs +2 -0
  295. package/dist/components/features/automations/automation-card.cjs.map +1 -0
  296. package/dist/components/features/automations/automation-card.d.ts +1 -1
  297. package/dist/components/features/automations/automation-card.js +160 -0
  298. package/dist/components/features/automations/automation-card.js.map +1 -0
  299. package/dist/components/features/automations/automation-group.cjs +2 -0
  300. package/dist/components/features/automations/automation-group.cjs.map +1 -0
  301. package/dist/components/features/automations/automation-group.js +54 -0
  302. package/dist/components/features/automations/automation-group.js.map +1 -0
  303. package/dist/components/features/automations/automation-list-row.cjs +2 -0
  304. package/dist/components/features/automations/automation-list-row.cjs.map +1 -0
  305. package/dist/components/features/automations/automation-list-row.js +152 -0
  306. package/dist/components/features/automations/automation-list-row.js.map +1 -0
  307. package/dist/components/features/automations/automation-run-insights.cjs +2 -0
  308. package/dist/components/features/automations/automation-run-insights.cjs.map +1 -0
  309. package/dist/components/features/automations/automation-run-insights.js +46 -0
  310. package/dist/components/features/automations/automation-run-insights.js.map +1 -0
  311. package/dist/components/features/automations/automation-view-mode.cjs +2 -0
  312. package/dist/components/features/automations/automation-view-mode.cjs.map +1 -0
  313. package/dist/components/features/automations/automation-view-mode.d.ts +5 -1
  314. package/dist/components/features/automations/automation-view-mode.js +6 -0
  315. package/dist/components/features/automations/automation-view-mode.js.map +1 -0
  316. package/dist/components/features/automations/backend-not-configured.cjs +2 -0
  317. package/dist/components/features/automations/backend-not-configured.cjs.map +1 -0
  318. package/dist/components/features/automations/backend-not-configured.js +34 -0
  319. package/dist/components/features/automations/backend-not-configured.js.map +1 -0
  320. package/dist/components/features/automations/build-automation-menu-items.cjs +2 -0
  321. package/dist/components/features/automations/build-automation-menu-items.cjs.map +1 -0
  322. package/dist/components/features/automations/build-automation-menu-items.js +53 -0
  323. package/dist/components/features/automations/build-automation-menu-items.js.map +1 -0
  324. package/dist/components/features/automations/build-automation-pills.cjs +2 -0
  325. package/dist/components/features/automations/build-automation-pills.cjs.map +1 -0
  326. package/dist/components/features/automations/build-automation-pills.js +71 -0
  327. package/dist/components/features/automations/build-automation-pills.js.map +1 -0
  328. package/dist/components/features/automations/create-instructions.cjs +2 -0
  329. package/dist/components/features/automations/create-instructions.cjs.map +1 -0
  330. package/dist/components/features/automations/create-instructions.js +102 -0
  331. package/dist/components/features/automations/create-instructions.js.map +1 -0
  332. package/dist/components/features/automations/dashboard/automations-dashboard-controls.d.ts +4 -3
  333. package/dist/components/features/automations/detail/run-status-badge.cjs +2 -0
  334. package/dist/components/features/automations/detail/run-status-badge.cjs.map +1 -0
  335. package/dist/components/features/automations/detail/run-status-badge.js +102 -0
  336. package/dist/components/features/automations/detail/run-status-badge.js.map +1 -0
  337. package/dist/components/features/automations/empty-state.cjs +2 -0
  338. package/dist/components/features/automations/empty-state.cjs.map +1 -0
  339. package/dist/components/features/automations/empty-state.js +35 -0
  340. package/dist/components/features/automations/empty-state.js.map +1 -0
  341. package/dist/components/features/automations/error-state.cjs +2 -0
  342. package/dist/components/features/automations/error-state.cjs.map +1 -0
  343. package/dist/components/features/automations/error-state.js +28 -0
  344. package/dist/components/features/automations/error-state.js.map +1 -0
  345. package/dist/components/features/automations/git-sync/git-sync-activity-row.d.ts +15 -0
  346. package/dist/components/features/automations/git-sync/git-sync-config-form.d.ts +13 -0
  347. package/dist/components/features/automations/git-sync/git-sync-error-banner.d.ts +6 -0
  348. package/dist/components/features/automations/git-sync/git-sync-not-local-state.d.ts +1 -0
  349. package/dist/components/features/automations/git-sync/git-sync-overview-section.d.ts +12 -0
  350. package/dist/components/features/automations/git-sync/git-sync-skeleton.d.ts +1 -0
  351. package/dist/components/features/automations/git-sync/git-sync-status-pill.d.ts +7 -0
  352. package/dist/components/features/automations/git-sync/git-sync-unsupported-state.d.ts +7 -0
  353. package/dist/components/features/automations/import-automation-modal.d.ts +2 -1
  354. package/dist/components/features/automations/kebab-menu-item-content.cjs +2 -0
  355. package/dist/components/features/automations/kebab-menu-item-content.cjs.map +1 -0
  356. package/dist/components/features/automations/kebab-menu-item-content.js +21 -0
  357. package/dist/components/features/automations/kebab-menu-item-content.js.map +1 -0
  358. package/dist/components/features/automations/kebab-menu.cjs +2 -0
  359. package/dist/components/features/automations/kebab-menu.cjs.map +1 -0
  360. package/dist/components/features/automations/kebab-menu.d.ts +2 -1
  361. package/dist/components/features/automations/kebab-menu.js +76 -0
  362. package/dist/components/features/automations/kebab-menu.js.map +1 -0
  363. package/dist/components/features/automations/recommended-automations-launcher.cjs +2 -0
  364. package/dist/components/features/automations/recommended-automations-launcher.cjs.map +1 -0
  365. package/dist/components/features/automations/recommended-automations-launcher.d.ts +7 -1
  366. package/dist/components/features/automations/recommended-automations-launcher.js +134 -0
  367. package/dist/components/features/automations/recommended-automations-launcher.js.map +1 -0
  368. package/dist/components/features/automations/recommended-automations-rail.cjs +2 -0
  369. package/dist/components/features/automations/recommended-automations-rail.cjs.map +1 -0
  370. package/dist/components/features/automations/recommended-automations-rail.d.ts +9 -0
  371. package/dist/components/features/automations/recommended-automations-rail.js +127 -0
  372. package/dist/components/features/automations/recommended-automations-rail.js.map +1 -0
  373. package/dist/components/features/automations/recommended-automations-section.cjs +2 -0
  374. package/dist/components/features/automations/recommended-automations-section.cjs.map +1 -0
  375. package/dist/components/features/automations/recommended-automations-section.d.ts +2 -2
  376. package/dist/components/features/automations/recommended-automations-section.js +198 -0
  377. package/dist/components/features/automations/recommended-automations-section.js.map +1 -0
  378. package/dist/components/features/automations/responder-deployment-modal.cjs +2 -0
  379. package/dist/components/features/automations/responder-deployment-modal.cjs.map +1 -0
  380. package/dist/components/features/automations/responder-deployment-modal.d.ts +2 -1
  381. package/dist/components/features/automations/responder-deployment-modal.js +75 -0
  382. package/dist/components/features/automations/responder-deployment-modal.js.map +1 -0
  383. package/dist/components/features/automations/status-badge.cjs +2 -0
  384. package/dist/components/features/automations/status-badge.cjs.map +1 -0
  385. package/dist/components/features/automations/status-badge.js +12 -0
  386. package/dist/components/features/automations/status-badge.js.map +1 -0
  387. package/dist/components/features/automations/to-latest-run-state.cjs +2 -0
  388. package/dist/components/features/automations/to-latest-run-state.cjs.map +1 -0
  389. package/dist/components/features/automations/to-latest-run-state.d.ts +6 -0
  390. package/dist/components/features/automations/to-latest-run-state.js +21 -0
  391. package/dist/components/features/automations/to-latest-run-state.js.map +1 -0
  392. package/dist/components/features/backends/backend-form-modal.cjs +1 -1
  393. package/dist/components/features/backends/backend-form-modal.js +10 -10
  394. package/dist/components/features/backends/manage-backends-modal.cjs +1 -1
  395. package/dist/components/features/backends/manage-backends-modal.js +5 -5
  396. package/dist/components/features/chat/chat-interface.cjs +2 -2
  397. package/dist/components/features/chat/chat-interface.cjs.map +1 -1
  398. package/dist/components/features/chat/chat-interface.js +151 -148
  399. package/dist/components/features/chat/chat-interface.js.map +1 -1
  400. package/dist/components/features/chat/error-message-banner.cjs +1 -1
  401. package/dist/components/features/chat/error-message-banner.cjs.map +1 -1
  402. package/dist/components/features/chat/error-message-banner.d.ts +3 -1
  403. package/dist/components/features/chat/error-message-banner.js +64 -58
  404. package/dist/components/features/chat/error-message-banner.js.map +1 -1
  405. package/dist/components/features/command-menu/command-menu-items.d.ts +10 -4
  406. package/dist/components/features/conversation/conversation-git-actions-menu.cjs +2 -0
  407. package/dist/components/features/conversation/conversation-git-actions-menu.cjs.map +1 -0
  408. package/dist/components/features/conversation/conversation-git-actions-menu.d.ts +15 -0
  409. package/dist/components/features/conversation/conversation-git-actions-menu.js +123 -0
  410. package/dist/components/features/conversation/conversation-git-actions-menu.js.map +1 -0
  411. package/dist/components/features/conversation/conversation-git-actions-toggle.cjs +2 -0
  412. package/dist/components/features/conversation/conversation-git-actions-toggle.cjs.map +1 -0
  413. package/dist/components/features/conversation/conversation-git-actions-toggle.d.ts +10 -0
  414. package/dist/components/features/conversation/conversation-git-actions-toggle.js +60 -0
  415. package/dist/components/features/conversation/conversation-git-actions-toggle.js.map +1 -0
  416. package/dist/components/features/conversation/conversation-main/chat-interface-wrapper.cjs +1 -1
  417. package/dist/components/features/conversation/conversation-main/chat-interface-wrapper.cjs.map +1 -1
  418. package/dist/components/features/conversation/conversation-main/chat-interface-wrapper.js +46 -10
  419. package/dist/components/features/conversation/conversation-main/chat-interface-wrapper.js.map +1 -1
  420. package/dist/components/features/conversation/conversation-main/conversation-main.cjs +1 -1
  421. package/dist/components/features/conversation/conversation-main/conversation-main.cjs.map +1 -1
  422. package/dist/components/features/conversation/conversation-main/conversation-main.js +49 -43
  423. package/dist/components/features/conversation/conversation-main/conversation-main.js.map +1 -1
  424. package/dist/components/features/conversation/conversation-name-with-status.cjs +1 -1
  425. package/dist/components/features/conversation/conversation-name-with-status.cjs.map +1 -1
  426. package/dist/components/features/conversation/conversation-name-with-status.js +49 -40
  427. package/dist/components/features/conversation/conversation-name-with-status.js.map +1 -1
  428. package/dist/components/features/conversation/conversation-name.cjs +1 -1
  429. package/dist/components/features/conversation/conversation-name.js +4 -4
  430. package/dist/components/features/conversation/conversation-overview-automations-panel.cjs +2 -0
  431. package/dist/components/features/conversation/conversation-overview-automations-panel.cjs.map +1 -0
  432. package/dist/components/features/conversation/conversation-overview-automations-panel.d.ts +6 -0
  433. package/dist/components/features/conversation/conversation-overview-automations-panel.js +48 -0
  434. package/dist/components/features/conversation/conversation-overview-automations-panel.js.map +1 -0
  435. package/dist/components/features/conversation/conversation-overview-context-menu.cjs +2 -0
  436. package/dist/components/features/conversation/conversation-overview-context-menu.cjs.map +1 -0
  437. package/dist/components/features/conversation/conversation-overview-context-menu.d.ts +10 -0
  438. package/dist/components/features/conversation/conversation-overview-context-menu.js +221 -0
  439. package/dist/components/features/conversation/conversation-overview-context-menu.js.map +1 -0
  440. package/dist/components/features/conversation/conversation-overview-diffs-row.cjs +2 -0
  441. package/dist/components/features/conversation/conversation-overview-diffs-row.cjs.map +1 -0
  442. package/dist/components/features/conversation/conversation-overview-diffs-row.d.ts +2 -0
  443. package/dist/components/features/conversation/conversation-overview-diffs-row.js +88 -0
  444. package/dist/components/features/conversation/conversation-overview-diffs-row.js.map +1 -0
  445. package/dist/components/features/conversation/conversation-overview-drawer-content.cjs +2 -0
  446. package/dist/components/features/conversation/conversation-overview-drawer-content.cjs.map +1 -0
  447. package/dist/components/features/conversation/conversation-overview-drawer-content.d.ts +6 -0
  448. package/dist/components/features/conversation/conversation-overview-drawer-content.js +138 -0
  449. package/dist/components/features/conversation/conversation-overview-drawer-content.js.map +1 -0
  450. package/dist/components/features/conversation/conversation-overview-drawer-context.cjs +2 -0
  451. package/dist/components/features/conversation/conversation-overview-drawer-context.cjs.map +1 -0
  452. package/dist/components/features/conversation/conversation-overview-drawer-context.d.ts +17 -0
  453. package/dist/components/features/conversation/conversation-overview-drawer-context.js +43 -0
  454. package/dist/components/features/conversation/conversation-overview-drawer-context.js.map +1 -0
  455. package/dist/components/features/conversation/conversation-overview-drawer.cjs +2 -0
  456. package/dist/components/features/conversation/conversation-overview-drawer.cjs.map +1 -0
  457. package/dist/components/features/conversation/conversation-overview-drawer.constants.cjs +2 -0
  458. package/dist/components/features/conversation/conversation-overview-drawer.constants.cjs.map +1 -0
  459. package/dist/components/features/conversation/conversation-overview-drawer.constants.d.ts +6 -0
  460. package/dist/components/features/conversation/conversation-overview-drawer.constants.js +6 -0
  461. package/dist/components/features/conversation/conversation-overview-drawer.constants.js.map +1 -0
  462. package/dist/components/features/conversation/conversation-overview-drawer.d.ts +7 -0
  463. package/dist/components/features/conversation/conversation-overview-drawer.js +45 -0
  464. package/dist/components/features/conversation/conversation-overview-drawer.js.map +1 -0
  465. package/dist/components/features/conversation/conversation-overview-drawer.types.cjs +2 -0
  466. package/dist/components/features/conversation/conversation-overview-drawer.types.cjs.map +1 -0
  467. package/dist/components/features/conversation/conversation-overview-drawer.types.d.ts +12 -0
  468. package/dist/components/features/conversation/conversation-overview-drawer.types.js +13 -0
  469. package/dist/components/features/conversation/conversation-overview-drawer.types.js.map +1 -0
  470. package/dist/components/features/conversation/conversation-overview-git-items-panel.cjs +2 -0
  471. package/dist/components/features/conversation/conversation-overview-git-items-panel.cjs.map +1 -0
  472. package/dist/components/features/conversation/conversation-overview-git-items-panel.d.ts +7 -0
  473. package/dist/components/features/conversation/conversation-overview-git-items-panel.js +81 -0
  474. package/dist/components/features/conversation/conversation-overview-git-items-panel.js.map +1 -0
  475. package/dist/components/features/conversation/conversation-overview-git-section.cjs +2 -0
  476. package/dist/components/features/conversation/conversation-overview-git-section.cjs.map +1 -0
  477. package/dist/components/features/conversation/conversation-overview-git-section.d.ts +6 -0
  478. package/dist/components/features/conversation/conversation-overview-git-section.js +143 -0
  479. package/dist/components/features/conversation/conversation-overview-git-section.js.map +1 -0
  480. package/dist/components/features/conversation/conversation-overview-mcp-panel.cjs +2 -0
  481. package/dist/components/features/conversation/conversation-overview-mcp-panel.cjs.map +1 -0
  482. package/dist/components/features/conversation/conversation-overview-mcp-panel.d.ts +6 -0
  483. package/dist/components/features/conversation/conversation-overview-mcp-panel.js +108 -0
  484. package/dist/components/features/conversation/conversation-overview-mcp-panel.js.map +1 -0
  485. package/dist/components/features/conversation/conversation-overview-panel.cjs +2 -0
  486. package/dist/components/features/conversation/conversation-overview-panel.cjs.map +1 -0
  487. package/dist/components/features/conversation/conversation-overview-panel.constants.cjs +2 -0
  488. package/dist/components/features/conversation/conversation-overview-panel.constants.cjs.map +1 -0
  489. package/dist/components/features/conversation/conversation-overview-panel.constants.d.ts +24 -0
  490. package/dist/components/features/conversation/conversation-overview-panel.constants.js +12 -0
  491. package/dist/components/features/conversation/conversation-overview-panel.constants.js.map +1 -0
  492. package/dist/components/features/conversation/conversation-overview-panel.d.ts +2 -0
  493. package/dist/components/features/conversation/conversation-overview-panel.js +102 -0
  494. package/dist/components/features/conversation/conversation-overview-panel.js.map +1 -0
  495. package/dist/components/features/conversation/conversation-overview-project-scope-toggle.cjs +2 -0
  496. package/dist/components/features/conversation/conversation-overview-project-scope-toggle.cjs.map +1 -0
  497. package/dist/components/features/conversation/conversation-overview-project-scope-toggle.d.ts +8 -0
  498. package/dist/components/features/conversation/conversation-overview-project-scope-toggle.js +29 -0
  499. package/dist/components/features/conversation/conversation-overview-project-scope-toggle.js.map +1 -0
  500. package/dist/components/features/conversation/conversation-overview-secrets-panel.cjs +2 -0
  501. package/dist/components/features/conversation/conversation-overview-secrets-panel.cjs.map +1 -0
  502. package/dist/components/features/conversation/conversation-overview-secrets-panel.d.ts +6 -0
  503. package/dist/components/features/conversation/conversation-overview-secrets-panel.js +89 -0
  504. package/dist/components/features/conversation/conversation-overview-secrets-panel.js.map +1 -0
  505. package/dist/components/features/conversation/conversation-overview-sections.cjs +2 -0
  506. package/dist/components/features/conversation/conversation-overview-sections.cjs.map +1 -0
  507. package/dist/components/features/conversation/conversation-overview-sections.d.ts +43 -0
  508. package/dist/components/features/conversation/conversation-overview-sections.js +27 -0
  509. package/dist/components/features/conversation/conversation-overview-sections.js.map +1 -0
  510. package/dist/components/features/conversation/conversation-overview-skills-panel.cjs +2 -0
  511. package/dist/components/features/conversation/conversation-overview-skills-panel.cjs.map +1 -0
  512. package/dist/components/features/conversation/conversation-overview-skills-panel.d.ts +6 -0
  513. package/dist/components/features/conversation/conversation-overview-skills-panel.js +138 -0
  514. package/dist/components/features/conversation/conversation-overview-skills-panel.js.map +1 -0
  515. package/dist/components/features/conversation/conversation-overview-toggle.cjs +2 -0
  516. package/dist/components/features/conversation/conversation-overview-toggle.cjs.map +1 -0
  517. package/dist/components/features/conversation/conversation-overview-toggle.d.ts +11 -0
  518. package/dist/components/features/conversation/conversation-overview-toggle.js +99 -0
  519. package/dist/components/features/conversation/conversation-overview-toggle.js.map +1 -0
  520. package/dist/components/features/conversation/conversation-secondary-drawer.classes.cjs +2 -0
  521. package/dist/components/features/conversation/conversation-secondary-drawer.classes.cjs.map +1 -0
  522. package/dist/components/features/conversation/conversation-secondary-drawer.classes.d.ts +4 -0
  523. package/dist/components/features/conversation/conversation-secondary-drawer.classes.js +7 -0
  524. package/dist/components/features/conversation/conversation-secondary-drawer.classes.js.map +1 -0
  525. package/dist/components/features/conversation/conversation-tabs/conversation-tab-content/conversation-tab-content.cjs +1 -1
  526. package/dist/components/features/conversation/conversation-tabs/conversation-tab-content/conversation-tab-content.cjs.map +1 -1
  527. package/dist/components/features/conversation/conversation-tabs/conversation-tab-content/conversation-tab-content.js +10 -9
  528. package/dist/components/features/conversation/conversation-tabs/conversation-tab-content/conversation-tab-content.js.map +1 -1
  529. package/dist/components/features/conversation/conversation-tabs/conversation-tabs-context-menu.cjs +1 -1
  530. package/dist/components/features/conversation/conversation-tabs/conversation-tabs-context-menu.cjs.map +1 -1
  531. package/dist/components/features/conversation/conversation-tabs/conversation-tabs-context-menu.js +68 -62
  532. package/dist/components/features/conversation/conversation-tabs/conversation-tabs-context-menu.js.map +1 -1
  533. package/dist/components/features/conversation/conversation-tabs/conversation-tabs.cjs +1 -1
  534. package/dist/components/features/conversation/conversation-tabs/conversation-tabs.cjs.map +1 -1
  535. package/dist/components/features/conversation/conversation-tabs/conversation-tabs.js +98 -88
  536. package/dist/components/features/conversation/conversation-tabs/conversation-tabs.js.map +1 -1
  537. package/dist/components/features/conversation/right-panel-toggle.cjs +1 -1
  538. package/dist/components/features/conversation/right-panel-toggle.cjs.map +1 -1
  539. package/dist/components/features/conversation/right-panel-toggle.d.ts +3 -2
  540. package/dist/components/features/conversation/right-panel-toggle.js +34 -33
  541. package/dist/components/features/conversation/right-panel-toggle.js.map +1 -1
  542. package/dist/components/features/conversation-panel/compact-conversation-row.cjs +1 -1
  543. package/dist/components/features/conversation-panel/compact-conversation-row.js +6 -6
  544. package/dist/components/features/conversation-panel/conversation-panel-list-helpers.cjs +1 -1
  545. package/dist/components/features/conversation-panel/conversation-panel-list-helpers.cjs.map +1 -1
  546. package/dist/components/features/conversation-panel/conversation-panel-list-helpers.d.ts +2 -1
  547. package/dist/components/features/conversation-panel/conversation-panel-list-helpers.js +14 -7
  548. package/dist/components/features/conversation-panel/conversation-panel-list-helpers.js.map +1 -1
  549. package/dist/components/features/conversation-panel/conversation-panel.cjs +1 -1
  550. package/dist/components/features/conversation-panel/conversation-panel.cjs.map +1 -1
  551. package/dist/components/features/conversation-panel/conversation-panel.js +263 -236
  552. package/dist/components/features/conversation-panel/conversation-panel.js.map +1 -1
  553. package/dist/components/features/conversation-panel/local-new-conversation-menu.cjs +1 -1
  554. package/dist/components/features/conversation-panel/local-new-conversation-menu.cjs.map +1 -1
  555. package/dist/components/features/conversation-panel/local-new-conversation-menu.js +4 -4
  556. package/dist/components/features/conversation-panel/local-new-conversation-menu.js.map +1 -1
  557. package/dist/components/features/diff-viewer/accordion-panel.cjs +2 -0
  558. package/dist/components/features/diff-viewer/accordion-panel.cjs.map +1 -0
  559. package/dist/components/features/diff-viewer/accordion-panel.d.ts +13 -0
  560. package/dist/components/features/diff-viewer/accordion-panel.js +41 -0
  561. package/dist/components/features/diff-viewer/accordion-panel.js.map +1 -0
  562. package/dist/components/features/diff-viewer/commit-list.cjs +1 -1
  563. package/dist/components/features/diff-viewer/commit-list.cjs.map +1 -1
  564. package/dist/components/features/diff-viewer/commit-list.d.ts +5 -1
  565. package/dist/components/features/diff-viewer/commit-list.js +30 -16
  566. package/dist/components/features/diff-viewer/commit-list.js.map +1 -1
  567. package/dist/components/features/diff-viewer/commit-row.cjs +1 -1
  568. package/dist/components/features/diff-viewer/commit-row.cjs.map +1 -1
  569. package/dist/components/features/diff-viewer/commit-row.d.ts +1 -2
  570. package/dist/components/features/diff-viewer/commit-row.js +38 -34
  571. package/dist/components/features/diff-viewer/commit-row.js.map +1 -1
  572. package/dist/components/features/diff-viewer/diff-change-list.cjs +2 -0
  573. package/dist/components/features/diff-viewer/diff-change-list.cjs.map +1 -0
  574. package/dist/components/features/diff-viewer/diff-change-list.d.ts +18 -0
  575. package/dist/components/features/diff-viewer/diff-change-list.js +22 -0
  576. package/dist/components/features/diff-viewer/diff-change-list.js.map +1 -0
  577. package/dist/components/features/diff-viewer/editor-container.cjs +1 -1
  578. package/dist/components/features/diff-viewer/editor-container.cjs.map +1 -1
  579. package/dist/components/features/diff-viewer/editor-container.d.ts +2 -1
  580. package/dist/components/features/diff-viewer/editor-container.js +8 -7
  581. package/dist/components/features/diff-viewer/editor-container.js.map +1 -1
  582. package/dist/components/features/diff-viewer/file-diff-viewer.cjs +1 -1
  583. package/dist/components/features/diff-viewer/file-diff-viewer.cjs.map +1 -1
  584. package/dist/components/features/diff-viewer/file-diff-viewer.d.ts +10 -1
  585. package/dist/components/features/diff-viewer/file-diff-viewer.js +138 -112
  586. package/dist/components/features/diff-viewer/file-diff-viewer.js.map +1 -1
  587. package/dist/components/features/diff-viewer/uncommitted-changes-row.cjs +2 -0
  588. package/dist/components/features/diff-viewer/uncommitted-changes-row.cjs.map +1 -0
  589. package/dist/components/features/diff-viewer/uncommitted-changes-row.d.ts +12 -0
  590. package/dist/components/features/diff-viewer/uncommitted-changes-row.js +51 -0
  591. package/dist/components/features/diff-viewer/uncommitted-changes-row.js.map +1 -0
  592. package/dist/components/features/files-tab/file-content-viewer.cjs +1 -1
  593. package/dist/components/features/files-tab/file-content-viewer.cjs.map +1 -1
  594. package/dist/components/features/files-tab/file-content-viewer.js +0 -1
  595. package/dist/components/features/files-tab/file-content-viewer.js.map +1 -1
  596. package/dist/components/features/files-tab/file-quick-row.cjs +1 -1
  597. package/dist/components/features/files-tab/file-quick-row.cjs.map +1 -1
  598. package/dist/components/features/files-tab/file-quick-row.d.ts +9 -7
  599. package/dist/components/features/files-tab/file-quick-row.js +63 -34
  600. package/dist/components/features/files-tab/file-quick-row.js.map +1 -1
  601. package/dist/components/features/files-tab/files-tab-tree.constants.cjs +2 -0
  602. package/dist/components/features/files-tab/files-tab-tree.constants.cjs.map +1 -0
  603. package/dist/components/features/files-tab/files-tab-tree.constants.d.ts +7 -0
  604. package/dist/components/features/files-tab/files-tab-tree.constants.js +6 -0
  605. package/dist/components/features/files-tab/files-tab-tree.constants.js.map +1 -0
  606. package/dist/components/features/files-tab/segmented-toggle.cjs +1 -1
  607. package/dist/components/features/files-tab/segmented-toggle.cjs.map +1 -1
  608. package/dist/components/features/files-tab/segmented-toggle.d.ts +5 -3
  609. package/dist/components/features/files-tab/segmented-toggle.js +10 -13
  610. package/dist/components/features/files-tab/segmented-toggle.js.map +1 -1
  611. package/dist/components/features/files-tab/tree-node.cjs +1 -1
  612. package/dist/components/features/files-tab/tree-node.cjs.map +1 -1
  613. package/dist/components/features/files-tab/tree-node.js +34 -32
  614. package/dist/components/features/files-tab/tree-node.js.map +1 -1
  615. package/dist/components/features/files-tab/workspace-path.cjs +2 -0
  616. package/dist/components/features/files-tab/workspace-path.cjs.map +1 -0
  617. package/dist/components/features/files-tab/workspace-path.d.ts +6 -0
  618. package/dist/components/features/files-tab/workspace-path.js +41 -0
  619. package/dist/components/features/files-tab/workspace-path.js.map +1 -0
  620. package/dist/components/features/home/featured-automations/automation-health-indicator.cjs +2 -0
  621. package/dist/components/features/home/featured-automations/automation-health-indicator.cjs.map +1 -0
  622. package/dist/components/features/home/featured-automations/automation-health-indicator.js +22 -0
  623. package/dist/components/features/home/featured-automations/automation-health-indicator.js.map +1 -0
  624. package/dist/components/features/home/featured-automations/automation-run-activity-metrics.cjs +2 -0
  625. package/dist/components/features/home/featured-automations/automation-run-activity-metrics.cjs.map +1 -0
  626. package/dist/components/features/home/featured-automations/automation-run-activity-metrics.js +45 -0
  627. package/dist/components/features/home/featured-automations/automation-run-activity-metrics.js.map +1 -0
  628. package/dist/components/features/home/featured-automations/automation-run-activity-sparkline.cjs +2 -0
  629. package/dist/components/features/home/featured-automations/automation-run-activity-sparkline.cjs.map +1 -0
  630. package/dist/components/features/home/featured-automations/automation-run-activity-sparkline.js +108 -0
  631. package/dist/components/features/home/featured-automations/automation-run-activity-sparkline.js.map +1 -0
  632. package/dist/components/features/home/featured-automations/automation-run-health.cjs +2 -0
  633. package/dist/components/features/home/featured-automations/automation-run-health.cjs.map +1 -0
  634. package/dist/components/features/home/featured-automations/automation-run-health.js +75 -0
  635. package/dist/components/features/home/featured-automations/automation-run-health.js.map +1 -0
  636. package/dist/components/features/home/featured-automations/home-automation-run-tooltip.cjs +2 -0
  637. package/dist/components/features/home/featured-automations/home-automation-run-tooltip.cjs.map +1 -0
  638. package/dist/components/features/home/featured-automations/home-automation-run-tooltip.js +74 -0
  639. package/dist/components/features/home/featured-automations/home-automation-run-tooltip.js.map +1 -0
  640. package/dist/components/features/home/featured-automations/pinned-automation-card.d.ts +3 -3
  641. package/dist/components/features/home/git-repo-dropdown/use-url-search.cjs +1 -1
  642. package/dist/components/features/home/git-repo-dropdown/use-url-search.cjs.map +1 -1
  643. package/dist/components/features/home/git-repo-dropdown/use-url-search.js +1 -1
  644. package/dist/components/features/home/git-repo-dropdown/use-url-search.js.map +1 -1
  645. package/dist/components/features/home/workspace-dropdown/folder-browser-modal.cjs +1 -1
  646. package/dist/components/features/home/workspace-dropdown/folder-browser-modal.js +6 -6
  647. package/dist/components/features/home/workspace-dropdown/manage-workspaces-modal.cjs +1 -1
  648. package/dist/components/features/home/workspace-dropdown/manage-workspaces-modal.js +6 -6
  649. package/dist/components/features/manifest/manifest-form-field.d.ts +4 -3
  650. package/dist/components/features/manifest/manifest-icons.cjs +2 -0
  651. package/dist/components/features/manifest/manifest-icons.cjs.map +1 -0
  652. package/dist/components/features/manifest/manifest-icons.d.ts +1 -0
  653. package/dist/components/features/manifest/manifest-icons.js +21 -0
  654. package/dist/components/features/manifest/manifest-icons.js.map +1 -0
  655. package/dist/components/features/manifest/manifest-repository-list.d.ts +25 -0
  656. package/dist/components/features/markdown/markdown-table-scroll.cjs +1 -1
  657. package/dist/components/features/markdown/markdown-table-scroll.cjs.map +1 -1
  658. package/dist/components/features/markdown/markdown-table-scroll.d.ts +2 -6
  659. package/dist/components/features/markdown/markdown-table-scroll.js +15 -21
  660. package/dist/components/features/markdown/markdown-table-scroll.js.map +1 -1
  661. package/dist/components/features/mcp-logo-badge.cjs +1 -1
  662. package/dist/components/features/mcp-logo-badge.cjs.map +1 -1
  663. package/dist/components/features/mcp-logo-badge.d.ts +1 -1
  664. package/dist/components/features/mcp-logo-badge.js +1 -0
  665. package/dist/components/features/mcp-logo-badge.js.map +1 -1
  666. package/dist/components/features/mcp-page/custom-server-editor.cjs +1 -1
  667. package/dist/components/features/mcp-page/custom-server-editor.js +16 -16
  668. package/dist/components/features/mcp-page/index.cjs +1 -1
  669. package/dist/components/features/mcp-page/index.js +2 -2
  670. package/dist/components/features/mcp-page/install-server-modal.cjs +1 -1
  671. package/dist/components/features/mcp-page/install-server-modal.cjs.map +1 -1
  672. package/dist/components/features/mcp-page/install-server-modal.js +25 -25
  673. package/dist/components/features/mcp-page/install-server-modal.js.map +1 -1
  674. package/dist/components/features/mcp-page/installed-server-card.cjs +1 -1
  675. package/dist/components/features/mcp-page/installed-server-card.js +5 -5
  676. package/dist/components/features/mcp-page/marketplace-card.cjs +1 -1
  677. package/dist/components/features/mcp-page/marketplace-card.js +4 -4
  678. package/dist/components/features/mcp-page/marketplace-section.cjs +1 -1
  679. package/dist/components/features/mcp-page/marketplace-section.js +3 -3
  680. package/dist/components/features/mcp-page/mcp-logo-stack-badge.cjs +2 -0
  681. package/dist/components/features/mcp-page/mcp-logo-stack-badge.cjs.map +1 -0
  682. package/dist/components/features/mcp-page/mcp-logo-stack-badge.js +60 -0
  683. package/dist/components/features/mcp-page/mcp-logo-stack-badge.js.map +1 -0
  684. package/dist/components/features/mcp-page/mcp-server-health.cjs +1 -1
  685. package/dist/components/features/mcp-page/mcp-server-health.js +18 -18
  686. package/dist/components/features/onboarding/steps/setup-llm-step.d.ts +10 -7
  687. package/dist/components/features/onboarding/use-onboarding-completion.cjs +2 -0
  688. package/dist/components/features/onboarding/use-onboarding-completion.cjs.map +1 -0
  689. package/dist/components/features/onboarding/use-onboarding-completion.js +32 -0
  690. package/dist/components/features/onboarding/use-onboarding-completion.js.map +1 -0
  691. package/dist/components/features/settings/app-settings/getting-started-checklist-switch.cjs +2 -0
  692. package/dist/components/features/settings/app-settings/getting-started-checklist-switch.cjs.map +1 -0
  693. package/dist/components/features/settings/app-settings/getting-started-checklist-switch.d.ts +1 -0
  694. package/dist/components/features/settings/app-settings/getting-started-checklist-switch.js +22 -0
  695. package/dist/components/features/settings/app-settings/getting-started-checklist-switch.js.map +1 -0
  696. package/dist/components/features/settings/brand-button.cjs +1 -1
  697. package/dist/components/features/settings/brand-button.cjs.map +1 -1
  698. package/dist/components/features/settings/brand-button.d.ts +2 -0
  699. package/dist/components/features/settings/brand-button.js +4 -2
  700. package/dist/components/features/settings/brand-button.js.map +1 -1
  701. package/dist/components/features/settings/llm-profiles/delete-provider-connection-modal.cjs +1 -0
  702. package/dist/components/features/settings/llm-profiles/delete-provider-connection-modal.d.ts +7 -0
  703. package/dist/components/features/settings/llm-profiles/delete-provider-connection-modal.js +7 -0
  704. package/dist/components/features/settings/llm-profiles/llm-profiles-manager.cjs +1 -1
  705. package/dist/components/features/settings/llm-profiles/llm-profiles-manager.js +3 -0
  706. package/dist/components/features/settings/llm-profiles/llm-settings-local-view.cjs +1 -1
  707. package/dist/components/features/settings/llm-profiles/llm-settings-local-view.js +1 -0
  708. package/dist/components/features/settings/llm-profiles/profiles-body.d.ts +20 -1
  709. package/dist/components/features/settings/llm-profiles/provider-connection-modal.cjs +1 -0
  710. package/dist/components/features/settings/llm-profiles/provider-connection-modal.d.ts +19 -0
  711. package/dist/components/features/settings/llm-profiles/provider-connection-modal.js +10 -0
  712. package/dist/components/features/settings/llm-profiles/provider-connection-row.cjs +1 -0
  713. package/dist/components/features/settings/llm-profiles/provider-connection-row.d.ts +10 -0
  714. package/dist/components/features/settings/llm-profiles/provider-connection-row.js +6 -0
  715. package/dist/components/features/settings/llm-profiles/provider-connections-manager.cjs +1 -0
  716. package/dist/components/features/settings/llm-profiles/provider-connections-manager.d.ts +15 -0
  717. package/dist/components/features/settings/llm-profiles/provider-connections-manager.js +8 -0
  718. package/dist/components/features/settings/sdk-settings/schema-field.cjs +1 -1
  719. package/dist/components/features/settings/sdk-settings/schema-field.js +6 -6
  720. package/dist/components/features/settings/sdk-settings/sdk-section-page.cjs +1 -1
  721. package/dist/components/features/settings/sdk-settings/sdk-section-page.js +7 -7
  722. package/dist/components/features/settings/sdk-settings/sdk-section-page.js.map +1 -1
  723. package/dist/components/features/settings/secrets-settings/secret-form.cjs +1 -1
  724. package/dist/components/features/settings/secrets-settings/secret-form.js +7 -7
  725. package/dist/components/features/settings/settings-input.cjs +1 -1
  726. package/dist/components/features/settings/settings-input.cjs.map +1 -1
  727. package/dist/components/features/settings/settings-input.d.ts +6 -0
  728. package/dist/components/features/settings/settings-input.js +14 -13
  729. package/dist/components/features/settings/settings-input.js.map +1 -1
  730. package/dist/components/features/sidebar/sidebar-onboarding-checklist-item-icon.cjs +2 -0
  731. package/dist/components/features/sidebar/sidebar-onboarding-checklist-item-icon.cjs.map +1 -0
  732. package/dist/components/features/sidebar/sidebar-onboarding-checklist-item-icon.d.ts +7 -0
  733. package/dist/components/features/sidebar/sidebar-onboarding-checklist-item-icon.js +102 -0
  734. package/dist/components/features/sidebar/sidebar-onboarding-checklist-item-icon.js.map +1 -0
  735. package/dist/components/features/sidebar/sidebar-onboarding-checklist-item-preview.cjs +2 -0
  736. package/dist/components/features/sidebar/sidebar-onboarding-checklist-item-preview.cjs.map +1 -0
  737. package/dist/components/features/sidebar/sidebar-onboarding-checklist-item-preview.d.ts +8 -0
  738. package/dist/components/features/sidebar/sidebar-onboarding-checklist-item-preview.js +66 -0
  739. package/dist/components/features/sidebar/sidebar-onboarding-checklist-item-preview.js.map +1 -0
  740. package/dist/components/features/sidebar/sidebar-onboarding-checklist-llm-complete.cjs +2 -0
  741. package/dist/components/features/sidebar/sidebar-onboarding-checklist-llm-complete.cjs.map +1 -0
  742. package/dist/components/features/sidebar/sidebar-onboarding-checklist-llm-complete.d.ts +3 -0
  743. package/dist/components/features/sidebar/sidebar-onboarding-checklist-llm-complete.js +15 -0
  744. package/dist/components/features/sidebar/sidebar-onboarding-checklist-llm-complete.js.map +1 -0
  745. package/dist/components/features/sidebar/sidebar-onboarding-checklist-storage.cjs +2 -0
  746. package/dist/components/features/sidebar/sidebar-onboarding-checklist-storage.cjs.map +1 -0
  747. package/dist/components/features/sidebar/sidebar-onboarding-checklist-storage.d.ts +10 -0
  748. package/dist/components/features/sidebar/sidebar-onboarding-checklist-storage.js +39 -0
  749. package/dist/components/features/sidebar/sidebar-onboarding-checklist-storage.js.map +1 -0
  750. package/dist/components/features/sidebar/sidebar-onboarding-checklist.cjs +2 -0
  751. package/dist/components/features/sidebar/sidebar-onboarding-checklist.cjs.map +1 -0
  752. package/dist/components/features/sidebar/sidebar-onboarding-checklist.constants.cjs +2 -0
  753. package/dist/components/features/sidebar/sidebar-onboarding-checklist.constants.cjs.map +1 -0
  754. package/dist/components/features/sidebar/sidebar-onboarding-checklist.constants.d.ts +26 -0
  755. package/dist/components/features/sidebar/sidebar-onboarding-checklist.constants.js +78 -0
  756. package/dist/components/features/sidebar/sidebar-onboarding-checklist.constants.js.map +1 -0
  757. package/dist/components/features/sidebar/sidebar-onboarding-checklist.d.ts +5 -0
  758. package/dist/components/features/sidebar/sidebar-onboarding-checklist.js +127 -0
  759. package/dist/components/features/sidebar/sidebar-onboarding-checklist.js.map +1 -0
  760. package/dist/components/features/sidebar/sidebar-rail-body.cjs +1 -1
  761. package/dist/components/features/sidebar/sidebar-rail-body.cjs.map +1 -1
  762. package/dist/components/features/sidebar/sidebar-rail-body.js +115 -111
  763. package/dist/components/features/sidebar/sidebar-rail-body.js.map +1 -1
  764. package/dist/components/features/sidebar/use-sidebar-onboarding-checklist-dismissed.cjs +2 -0
  765. package/dist/components/features/sidebar/use-sidebar-onboarding-checklist-dismissed.cjs.map +1 -0
  766. package/dist/components/features/sidebar/use-sidebar-onboarding-checklist-dismissed.d.ts +1 -0
  767. package/dist/components/features/sidebar/use-sidebar-onboarding-checklist-dismissed.js +10 -0
  768. package/dist/components/features/sidebar/use-sidebar-onboarding-checklist-dismissed.js.map +1 -0
  769. package/dist/components/features/sidebar/use-sidebar-onboarding-checklist.cjs +2 -0
  770. package/dist/components/features/sidebar/use-sidebar-onboarding-checklist.cjs.map +1 -0
  771. package/dist/components/features/sidebar/use-sidebar-onboarding-checklist.d.ts +15 -0
  772. package/dist/components/features/sidebar/use-sidebar-onboarding-checklist.js +75 -0
  773. package/dist/components/features/sidebar/use-sidebar-onboarding-checklist.js.map +1 -0
  774. package/dist/components/features/skills/add-skill-modal.cjs +2 -0
  775. package/dist/components/features/skills/add-skill-modal.cjs.map +1 -0
  776. package/dist/components/features/skills/add-skill-modal.js +164 -0
  777. package/dist/components/features/skills/add-skill-modal.js.map +1 -0
  778. package/dist/components/features/skills/build-skill-pills.cjs +2 -0
  779. package/dist/components/features/skills/build-skill-pills.cjs.map +1 -0
  780. package/dist/components/features/skills/build-skill-pills.js +88 -0
  781. package/dist/components/features/skills/build-skill-pills.js.map +1 -0
  782. package/dist/components/features/skills/get-skill-card-description.cjs +2 -0
  783. package/dist/components/features/skills/get-skill-card-description.cjs.map +1 -0
  784. package/dist/components/features/skills/get-skill-card-description.js +34 -0
  785. package/dist/components/features/skills/get-skill-card-description.js.map +1 -0
  786. package/dist/components/features/skills/get-skill-chat-launch-message.cjs +2 -0
  787. package/dist/components/features/skills/get-skill-chat-launch-message.cjs.map +1 -0
  788. package/dist/components/features/skills/get-skill-chat-launch-message.js +9 -0
  789. package/dist/components/features/skills/get-skill-chat-launch-message.js.map +1 -0
  790. package/dist/components/features/skills/is-copyable-skill-source.cjs +2 -0
  791. package/dist/components/features/skills/is-copyable-skill-source.cjs.map +1 -0
  792. package/dist/components/features/skills/is-copyable-skill-source.js +9 -0
  793. package/dist/components/features/skills/is-copyable-skill-source.js.map +1 -0
  794. package/dist/components/features/skills/skill-card-pill-row.cjs +2 -0
  795. package/dist/components/features/skills/skill-card-pill-row.cjs.map +1 -0
  796. package/dist/components/features/skills/skill-card-pill-row.d.ts +1 -1
  797. package/dist/components/features/skills/skill-card-pill-row.js +137 -0
  798. package/dist/components/features/skills/skill-card-pill-row.js.map +1 -0
  799. package/dist/components/features/skills/skill-card.cjs +2 -0
  800. package/dist/components/features/skills/skill-card.cjs.map +1 -0
  801. package/dist/components/features/skills/skill-card.js +93 -0
  802. package/dist/components/features/skills/skill-card.js.map +1 -0
  803. package/dist/components/features/skills/skill-detail-modal.cjs +3 -0
  804. package/dist/components/features/skills/skill-detail-modal.cjs.map +1 -0
  805. package/dist/components/features/skills/skill-detail-modal.js +150 -0
  806. package/dist/components/features/skills/skill-detail-modal.js.map +1 -0
  807. package/dist/components/features/skills/skill-facet-rail.cjs +2 -0
  808. package/dist/components/features/skills/skill-facet-rail.cjs.map +1 -0
  809. package/dist/components/features/skills/skill-facet-rail.js +42 -0
  810. package/dist/components/features/skills/skill-facet-rail.js.map +1 -0
  811. package/dist/components/features/skills/skill-facet-row.cjs +2 -0
  812. package/dist/components/features/skills/skill-facet-row.cjs.map +1 -0
  813. package/dist/components/features/skills/skill-facet-row.js +44 -0
  814. package/dist/components/features/skills/skill-facet-row.js.map +1 -0
  815. package/dist/components/features/skills/skill-filter.cjs +2 -0
  816. package/dist/components/features/skills/skill-filter.cjs.map +1 -0
  817. package/dist/components/features/skills/skill-filter.js +166 -0
  818. package/dist/components/features/skills/skill-filter.js.map +1 -0
  819. package/dist/components/features/skills/skill-filters-modal.cjs +2 -0
  820. package/dist/components/features/skills/skill-filters-modal.cjs.map +1 -0
  821. package/dist/components/features/skills/skill-filters-modal.js +53 -0
  822. package/dist/components/features/skills/skill-filters-modal.js.map +1 -0
  823. package/dist/components/features/skills/skill-icon-badge.cjs +2 -0
  824. package/dist/components/features/skills/skill-icon-badge.cjs.map +1 -0
  825. package/dist/components/features/skills/skill-icon-badge.js +17 -0
  826. package/dist/components/features/skills/skill-icon-badge.js.map +1 -0
  827. package/dist/components/features/skills/skill-type-badge.cjs +2 -0
  828. package/dist/components/features/skills/skill-type-badge.cjs.map +1 -0
  829. package/dist/components/features/skills/skill-type-badge.js +21 -0
  830. package/dist/components/features/skills/skill-type-badge.js.map +1 -0
  831. package/dist/components/features/skills/skills-toolbar.cjs +2 -0
  832. package/dist/components/features/skills/skills-toolbar.cjs.map +1 -0
  833. package/dist/components/features/skills/skills-toolbar.js +63 -0
  834. package/dist/components/features/skills/skills-toolbar.js.map +1 -0
  835. package/dist/components/shared/buttons/circle-plus-check-toggle.cjs +1 -1
  836. package/dist/components/shared/buttons/circle-plus-check-toggle.cjs.map +1 -1
  837. package/dist/components/shared/buttons/circle-plus-check-toggle.js +19 -6
  838. package/dist/components/shared/buttons/circle-plus-check-toggle.js.map +1 -1
  839. package/dist/components/shared/buttons/conversation-confirmation-buttons.cjs +1 -1
  840. package/dist/components/shared/buttons/conversation-confirmation-buttons.cjs.map +1 -1
  841. package/dist/components/shared/buttons/conversation-confirmation-buttons.js +1 -1
  842. package/dist/components/shared/buttons/conversation-confirmation-buttons.js.map +1 -1
  843. package/dist/components/shared/filters/enum-filter-dropdown.cjs +1 -1
  844. package/dist/components/shared/filters/enum-filter-dropdown.cjs.map +1 -1
  845. package/dist/components/shared/filters/enum-filter-dropdown.d.ts +4 -1
  846. package/dist/components/shared/filters/enum-filter-dropdown.js +14 -14
  847. package/dist/components/shared/filters/enum-filter-dropdown.js.map +1 -1
  848. package/dist/components/shared/modals/settings/settings-form.cjs +1 -1
  849. package/dist/components/shared/modals/settings/settings-form.js +4 -4
  850. package/dist/components/ui/resize-handle.cjs +1 -1
  851. package/dist/components/ui/resize-handle.cjs.map +1 -1
  852. package/dist/components/ui/resize-handle.d.ts +2 -1
  853. package/dist/components/ui/resize-handle.js +6 -5
  854. package/dist/components/ui/resize-handle.js.map +1 -1
  855. package/dist/config/defaults.cjs +1 -1
  856. package/dist/config/defaults.cjs.map +1 -1
  857. package/dist/config/defaults.js +2 -2
  858. package/dist/config/defaults.js.map +1 -1
  859. package/dist/constants/skills-docs.cjs +2 -0
  860. package/dist/constants/skills-docs.cjs.map +1 -0
  861. package/dist/constants/skills-docs.js +6 -0
  862. package/dist/constants/skills-docs.js.map +1 -0
  863. package/dist/contexts/conversation-websocket-context.cjs +3 -3
  864. package/dist/contexts/conversation-websocket-context.cjs.map +1 -1
  865. package/dist/contexts/conversation-websocket-context.js +184 -159
  866. package/dist/contexts/conversation-websocket-context.js.map +1 -1
  867. package/dist/fixtures/home-automations-demo.cjs +2 -0
  868. package/dist/fixtures/home-automations-demo.cjs.map +1 -0
  869. package/dist/fixtures/home-automations-demo.d.ts +1 -3
  870. package/dist/fixtures/home-automations-demo.js +384 -0
  871. package/dist/fixtures/home-automations-demo.js.map +1 -0
  872. package/dist/hooks/chat/use-slash-command.cjs +1 -1
  873. package/dist/hooks/chat/use-slash-command.cjs.map +1 -1
  874. package/dist/hooks/chat/use-slash-command.d.ts +1 -2
  875. package/dist/hooks/chat/use-slash-command.js +1 -0
  876. package/dist/hooks/chat/use-slash-command.js.map +1 -1
  877. package/dist/hooks/mutation/use-create-conversation.cjs +1 -1
  878. package/dist/hooks/mutation/use-create-conversation.cjs.map +1 -1
  879. package/dist/hooks/mutation/use-create-conversation.js +27 -30
  880. package/dist/hooks/mutation/use-create-conversation.js.map +1 -1
  881. package/dist/hooks/mutation/use-create-provider-connection.cjs +1 -0
  882. package/dist/hooks/mutation/use-create-provider-connection.d.ts +2 -0
  883. package/dist/hooks/mutation/use-create-provider-connection.js +1 -0
  884. package/dist/hooks/mutation/use-delete-mcp-server.cjs +1 -1
  885. package/dist/hooks/mutation/use-delete-mcp-server.js +3 -3
  886. package/dist/hooks/mutation/use-delete-provider-connection.cjs +1 -0
  887. package/dist/hooks/mutation/use-delete-provider-connection.d.ts +1 -0
  888. package/dist/hooks/mutation/use-delete-provider-connection.js +1 -0
  889. package/dist/hooks/mutation/use-switch-acp-model.cjs +1 -1
  890. package/dist/hooks/mutation/use-switch-acp-model.cjs.map +1 -1
  891. package/dist/hooks/mutation/use-switch-acp-model.d.ts +5 -3
  892. package/dist/hooks/mutation/use-switch-acp-model.js +9 -13
  893. package/dist/hooks/mutation/use-switch-acp-model.js.map +1 -1
  894. package/dist/hooks/mutation/use-update-mcp-server.cjs +1 -1
  895. package/dist/hooks/mutation/use-update-mcp-server.js +6 -6
  896. package/dist/hooks/mutation/use-update-provider-connection.cjs +1 -0
  897. package/dist/hooks/mutation/use-update-provider-connection.d.ts +7 -0
  898. package/dist/hooks/mutation/use-update-provider-connection.js +1 -0
  899. package/dist/hooks/query/query-keys.cjs +1 -1
  900. package/dist/hooks/query/query-keys.cjs.map +1 -1
  901. package/dist/hooks/query/query-keys.d.ts +3 -0
  902. package/dist/hooks/query/query-keys.js +4 -4
  903. package/dist/hooks/query/query-keys.js.map +1 -1
  904. package/dist/hooks/query/use-automation-detail.cjs +1 -0
  905. package/dist/hooks/query/use-automation-detail.js +2 -0
  906. package/dist/hooks/query/use-automation-health.cjs +2 -0
  907. package/dist/hooks/query/use-automation-health.cjs.map +1 -0
  908. package/dist/hooks/query/use-automation-health.js +22 -0
  909. package/dist/hooks/query/use-automation-health.js.map +1 -0
  910. package/dist/hooks/query/use-automations.cjs +2 -0
  911. package/dist/hooks/query/use-automations.cjs.map +1 -0
  912. package/dist/hooks/query/use-automations.js +28 -0
  913. package/dist/hooks/query/use-automations.js.map +1 -0
  914. package/dist/hooks/query/use-backends-health.cjs +1 -1
  915. package/dist/hooks/query/use-backends-health.cjs.map +1 -1
  916. package/dist/hooks/query/use-backends-health.js +1 -1
  917. package/dist/hooks/query/use-backends-health.js.map +1 -1
  918. package/dist/hooks/query/use-conversation-history.cjs +1 -1
  919. package/dist/hooks/query/use-conversation-history.cjs.map +1 -1
  920. package/dist/hooks/query/use-conversation-history.js +3 -1
  921. package/dist/hooks/query/use-conversation-history.js.map +1 -1
  922. package/dist/hooks/query/use-conversation-metrics.cjs +1 -1
  923. package/dist/hooks/query/use-conversation-metrics.js +3 -3
  924. package/dist/hooks/query/use-git-sync.d.ts +19 -0
  925. package/dist/hooks/query/use-latest-automation-runs.cjs +1 -0
  926. package/dist/hooks/query/use-latest-automation-runs.d.ts +2 -0
  927. package/dist/hooks/query/use-latest-automation-runs.js +3 -0
  928. package/dist/hooks/query/use-llm-profiles.d.ts +1 -1
  929. package/dist/hooks/query/use-paginated-conversations.cjs +1 -1
  930. package/dist/hooks/query/use-paginated-conversations.cjs.map +1 -1
  931. package/dist/hooks/query/use-paginated-conversations.js +1 -1
  932. package/dist/hooks/query/use-paginated-conversations.js.map +1 -1
  933. package/dist/hooks/query/use-provider-connections.cjs +2 -0
  934. package/dist/hooks/query/use-provider-connections.cjs.map +1 -0
  935. package/dist/hooks/query/use-provider-connections.d.ts +8 -0
  936. package/dist/hooks/query/use-provider-connections.js +19 -0
  937. package/dist/hooks/query/use-provider-connections.js.map +1 -0
  938. package/dist/hooks/query/use-repository-git-items.cjs +2 -0
  939. package/dist/hooks/query/use-repository-git-items.cjs.map +1 -0
  940. package/dist/hooks/query/use-repository-git-items.d.ts +3 -0
  941. package/dist/hooks/query/use-repository-git-items.js +33 -0
  942. package/dist/hooks/query/use-repository-git-items.js.map +1 -0
  943. package/dist/hooks/query/use-task-polling.cjs +1 -1
  944. package/dist/hooks/query/use-task-polling.cjs.map +1 -1
  945. package/dist/hooks/query/use-task-polling.js +12 -10
  946. package/dist/hooks/query/use-task-polling.js.map +1 -1
  947. package/dist/hooks/query/use-workspace-files.cjs +1 -1
  948. package/dist/hooks/query/use-workspace-files.cjs.map +1 -1
  949. package/dist/hooks/query/use-workspace-files.d.ts +14 -4
  950. package/dist/hooks/query/use-workspace-files.js +46 -33
  951. package/dist/hooks/query/use-workspace-files.js.map +1 -1
  952. package/dist/hooks/use-bash-command-runner.cjs +1 -1
  953. package/dist/hooks/use-bash-command-runner.cjs.map +1 -1
  954. package/dist/hooks/use-bash-command-runner.js +45 -42
  955. package/dist/hooks/use-bash-command-runner.js.map +1 -1
  956. package/dist/hooks/use-conversation-overview-column-space.cjs +2 -0
  957. package/dist/hooks/use-conversation-overview-column-space.cjs.map +1 -0
  958. package/dist/hooks/use-conversation-overview-column-space.d.ts +2 -0
  959. package/dist/hooks/use-conversation-overview-column-space.js +25 -0
  960. package/dist/hooks/use-conversation-overview-column-space.js.map +1 -0
  961. package/dist/hooks/use-conversation-overview-git-diff-stats.cjs +2 -0
  962. package/dist/hooks/use-conversation-overview-git-diff-stats.cjs.map +1 -0
  963. package/dist/hooks/use-conversation-overview-git-diff-stats.d.ts +7 -0
  964. package/dist/hooks/use-conversation-overview-git-diff-stats.js +37 -0
  965. package/dist/hooks/use-conversation-overview-git-diff-stats.js.map +1 -0
  966. package/dist/hooks/use-conversation-overview-panel-peek.cjs +2 -0
  967. package/dist/hooks/use-conversation-overview-panel-peek.cjs.map +1 -0
  968. package/dist/hooks/use-conversation-overview-panel-peek.d.ts +9 -0
  969. package/dist/hooks/use-conversation-overview-panel-peek.js +32 -0
  970. package/dist/hooks/use-conversation-overview-panel-peek.js.map +1 -0
  971. package/dist/hooks/use-conversation-overview-stats.cjs +2 -0
  972. package/dist/hooks/use-conversation-overview-stats.cjs.map +1 -0
  973. package/dist/hooks/use-conversation-overview-stats.d.ts +4 -0
  974. package/dist/hooks/use-conversation-overview-stats.js +15 -0
  975. package/dist/hooks/use-conversation-overview-stats.js.map +1 -0
  976. package/dist/hooks/use-conversation-primary-repository.cjs +2 -0
  977. package/dist/hooks/use-conversation-primary-repository.cjs.map +1 -0
  978. package/dist/hooks/use-conversation-primary-repository.d.ts +11 -0
  979. package/dist/hooks/use-conversation-primary-repository.js +17 -0
  980. package/dist/hooks/use-conversation-primary-repository.js.map +1 -0
  981. package/dist/hooks/use-drag-scroll.cjs +2 -0
  982. package/dist/hooks/use-drag-scroll.cjs.map +1 -0
  983. package/dist/hooks/use-drag-scroll.d.ts +12 -0
  984. package/dist/hooks/use-drag-scroll.js +41 -0
  985. package/dist/hooks/use-drag-scroll.js.map +1 -0
  986. package/dist/hooks/use-has-permission.cjs +2 -0
  987. package/dist/hooks/use-has-permission.cjs.map +1 -0
  988. package/dist/hooks/use-has-permission.js +8 -0
  989. package/dist/hooks/use-has-permission.js.map +1 -0
  990. package/dist/hooks/use-home-automation-actions.cjs +2 -0
  991. package/dist/hooks/use-home-automation-actions.cjs.map +1 -0
  992. package/dist/hooks/use-home-automation-actions.js +15 -0
  993. package/dist/hooks/use-home-automation-actions.js.map +1 -0
  994. package/dist/hooks/use-launch-skill-in-chat.cjs +2 -0
  995. package/dist/hooks/use-launch-skill-in-chat.cjs.map +1 -0
  996. package/dist/hooks/use-launch-skill-in-chat.js +16 -0
  997. package/dist/hooks/use-launch-skill-in-chat.js.map +1 -0
  998. package/dist/hooks/use-mcp-server-health.cjs +1 -1
  999. package/dist/hooks/use-mcp-server-health.js +3 -3
  1000. package/dist/hooks/use-resizable-drawer-width.cjs +2 -0
  1001. package/dist/hooks/use-resizable-drawer-width.cjs.map +1 -0
  1002. package/dist/hooks/use-resizable-drawer-width.d.ts +22 -0
  1003. package/dist/hooks/use-resizable-drawer-width.js +46 -0
  1004. package/dist/hooks/use-resizable-drawer-width.js.map +1 -0
  1005. package/dist/hooks/use-responder-url-secret.cjs +2 -0
  1006. package/dist/hooks/use-responder-url-secret.cjs.map +1 -0
  1007. package/dist/hooks/use-responder-url-secret.d.ts +5 -0
  1008. package/dist/hooks/use-responder-url-secret.js +51 -0
  1009. package/dist/hooks/use-responder-url-secret.js.map +1 -0
  1010. package/dist/hooks/use-select-conversation-tab.cjs +1 -1
  1011. package/dist/hooks/use-select-conversation-tab.cjs.map +1 -1
  1012. package/dist/hooks/use-select-conversation-tab.d.ts +2 -0
  1013. package/dist/hooks/use-select-conversation-tab.js +15 -7
  1014. package/dist/hooks/use-select-conversation-tab.js.map +1 -1
  1015. package/dist/hooks/use-tracking.cjs +1 -1
  1016. package/dist/hooks/use-tracking.cjs.map +1 -1
  1017. package/dist/hooks/use-tracking.d.ts +23 -0
  1018. package/dist/hooks/use-tracking.js +16 -0
  1019. package/dist/hooks/use-tracking.js.map +1 -1
  1020. package/dist/hooks/use-websocket.cjs +1 -1
  1021. package/dist/hooks/use-websocket.cjs.map +1 -1
  1022. package/dist/hooks/use-websocket.d.ts +1 -2
  1023. package/dist/hooks/use-websocket.js +58 -51
  1024. package/dist/hooks/use-websocket.js.map +1 -1
  1025. package/dist/i18n/declaration.cjs +1 -1
  1026. package/dist/i18n/declaration.cjs.map +1 -1
  1027. package/dist/i18n/declaration.d.ts +182 -43
  1028. package/dist/i18n/declaration.js +1 -1
  1029. package/dist/i18n/declaration.js.map +1 -1
  1030. package/dist/i18n/translation.cjs +3 -3
  1031. package/dist/i18n/translation.cjs.map +1 -1
  1032. package/dist/i18n/translation.js +3092 -729
  1033. package/dist/i18n/translation.js.map +1 -1
  1034. package/dist/icons/check-circle.cjs +2 -0
  1035. package/dist/icons/check-circle.cjs.map +1 -0
  1036. package/dist/icons/check-circle.js +20 -0
  1037. package/dist/icons/check-circle.js.map +1 -0
  1038. package/dist/icons/chevron-down.cjs +2 -0
  1039. package/dist/icons/chevron-down.cjs.map +1 -0
  1040. package/dist/icons/chevron-down.js +20 -0
  1041. package/dist/icons/chevron-down.js.map +1 -0
  1042. package/dist/icons/clock.cjs +2 -0
  1043. package/dist/icons/clock.cjs.map +1 -0
  1044. package/dist/icons/clock.js +20 -0
  1045. package/dist/icons/clock.js.map +1 -0
  1046. package/dist/icons/exclamation-circle.cjs +2 -0
  1047. package/dist/icons/exclamation-circle.cjs.map +1 -0
  1048. package/dist/icons/exclamation-circle.js +20 -0
  1049. package/dist/icons/exclamation-circle.js.map +1 -0
  1050. package/dist/icons/kebab-vertical.cjs +2 -0
  1051. package/dist/icons/kebab-vertical.cjs.map +1 -0
  1052. package/dist/icons/kebab-vertical.js +14 -0
  1053. package/dist/icons/kebab-vertical.js.map +1 -0
  1054. package/dist/icons/key.cjs +2 -0
  1055. package/dist/icons/key.cjs.map +1 -0
  1056. package/dist/icons/key.js +21 -0
  1057. package/dist/icons/key.js.map +1 -0
  1058. package/dist/icons/message-square-share.cjs +2 -0
  1059. package/dist/icons/message-square-share.cjs.map +1 -0
  1060. package/dist/icons/message-square-share.js +22 -0
  1061. package/dist/icons/message-square-share.js.map +1 -0
  1062. package/dist/icons/play.cjs +2 -0
  1063. package/dist/icons/play.cjs.map +1 -0
  1064. package/dist/icons/play.js +19 -0
  1065. package/dist/icons/play.js.map +1 -0
  1066. package/dist/icons/power.cjs +2 -0
  1067. package/dist/icons/power.cjs.map +1 -0
  1068. package/dist/icons/power.js +20 -0
  1069. package/dist/icons/power.js.map +1 -0
  1070. package/dist/icons/sparkle.cjs +2 -0
  1071. package/dist/icons/sparkle.cjs.map +1 -0
  1072. package/dist/icons/sparkle.js +20 -0
  1073. package/dist/icons/sparkle.js.map +1 -0
  1074. package/dist/icons/trash.cjs +2 -0
  1075. package/dist/icons/trash.cjs.map +1 -0
  1076. package/dist/icons/trash.js +20 -0
  1077. package/dist/icons/trash.js.map +1 -0
  1078. package/dist/icons/x-circle.cjs +2 -0
  1079. package/dist/icons/x-circle.cjs.map +1 -0
  1080. package/dist/icons/x-circle.js +20 -0
  1081. package/dist/icons/x-circle.js.map +1 -0
  1082. package/dist/locales/ar/openhands.json +183 -44
  1083. package/dist/locales/ca/openhands.json +183 -44
  1084. package/dist/locales/de/openhands.json +183 -44
  1085. package/dist/locales/en/openhands.json +183 -44
  1086. package/dist/locales/es/openhands.json +183 -44
  1087. package/dist/locales/fr/openhands.json +183 -44
  1088. package/dist/locales/it/openhands.json +183 -44
  1089. package/dist/locales/ja/openhands.json +183 -44
  1090. package/dist/locales/ko-KR/openhands.json +183 -44
  1091. package/dist/locales/no/openhands.json +183 -44
  1092. package/dist/locales/pt/openhands.json +183 -44
  1093. package/dist/locales/tr/openhands.json +183 -44
  1094. package/dist/locales/uk/openhands.json +183 -44
  1095. package/dist/locales/zh-CN/openhands.json +183 -44
  1096. package/dist/locales/zh-TW/openhands.json +183 -44
  1097. package/dist/manifests/automation-insights.cjs +2 -0
  1098. package/dist/manifests/automation-insights.cjs.map +1 -0
  1099. package/dist/manifests/automation-insights.d.ts +2 -0
  1100. package/dist/manifests/automation-insights.js +9 -0
  1101. package/dist/manifests/automation-insights.js.map +1 -0
  1102. package/dist/manifests/automation-interface.cjs +1 -1
  1103. package/dist/manifests/automation-interface.cjs.map +1 -1
  1104. package/dist/manifests/automation-interface.d.ts +47 -31
  1105. package/dist/manifests/automation-interface.js +48 -54
  1106. package/dist/manifests/automation-interface.js.map +1 -1
  1107. package/dist/manifests/automation-setup.cjs +1 -1
  1108. package/dist/manifests/automation-setup.cjs.map +1 -1
  1109. package/dist/manifests/automation-setup.d.ts +37 -3
  1110. package/dist/manifests/automation-setup.js +16 -2
  1111. package/dist/manifests/automation-setup.js.map +1 -1
  1112. package/dist/manifests/interface-validation.cjs +1 -1
  1113. package/dist/manifests/interface-validation.cjs.map +1 -1
  1114. package/dist/manifests/interface-validation.js +56 -52
  1115. package/dist/manifests/interface-validation.js.map +1 -1
  1116. package/dist/manifests/manifest-actions.d.ts +5 -0
  1117. package/dist/manifests/manifest-bundle.d.ts +30 -0
  1118. package/dist/manifests/manifest-local-validation.d.ts +10 -1
  1119. package/dist/manifests/manifest-sources.cjs +1 -1
  1120. package/dist/manifests/manifest-sources.cjs.map +1 -1
  1121. package/dist/manifests/manifest-sources.js +3 -3
  1122. package/dist/manifests/manifest-sources.js.map +1 -1
  1123. package/dist/manifests/manifest-template.d.ts +14 -0
  1124. package/dist/manifests/manifest-validation.cjs +1 -1
  1125. package/dist/manifests/manifest-validation.cjs.map +1 -1
  1126. package/dist/manifests/manifest-validation.js +78 -45
  1127. package/dist/manifests/manifest-validation.js.map +1 -1
  1128. package/dist/manifests/types.cjs +1 -1
  1129. package/dist/manifests/types.cjs.map +1 -1
  1130. package/dist/manifests/types.d.ts +64 -3
  1131. package/dist/manifests/types.js +7 -6
  1132. package/dist/manifests/types.js.map +1 -1
  1133. package/dist/node_modules/@heroui/popover/dist/chunk-NW7HJLND.cjs +1 -1
  1134. package/dist/node_modules/@heroui/popover/dist/chunk-NW7HJLND.js +10 -10
  1135. package/dist/node_modules/@heroui/ripple/dist/chunk-UIQI3AYJ.cjs +1 -1
  1136. package/dist/node_modules/@heroui/ripple/dist/chunk-UIQI3AYJ.js +8 -8
  1137. package/dist/node_modules/@heroui/tooltip/dist/chunk-AUA5GDXN.cjs +1 -1
  1138. package/dist/node_modules/@heroui/tooltip/dist/chunk-AUA5GDXN.js +9 -9
  1139. package/dist/node_modules/@openhands/extensions/automations/bundle-index.cjs +4843 -0
  1140. package/dist/node_modules/@openhands/extensions/automations/bundle-index.cjs.map +1 -0
  1141. package/dist/node_modules/@openhands/extensions/automations/bundle-index.js +11 -0
  1142. package/dist/node_modules/@openhands/extensions/automations/bundle-index.js.map +1 -0
  1143. package/dist/node_modules/@openhands/extensions/automations/catalog/github-agents-md-maintainer/manifest.cjs +13 -0
  1144. package/dist/node_modules/@openhands/extensions/automations/catalog/github-agents-md-maintainer/manifest.cjs.map +1 -0
  1145. package/dist/node_modules/@openhands/extensions/automations/catalog/github-agents-md-maintainer/manifest.js +87 -0
  1146. package/dist/node_modules/@openhands/extensions/automations/catalog/github-agents-md-maintainer/manifest.js.map +1 -0
  1147. package/dist/node_modules/@openhands/extensions/automations/catalog/github-issue-to-pr/manifest.cjs +12 -0
  1148. package/dist/node_modules/@openhands/extensions/automations/catalog/github-issue-to-pr/manifest.cjs.map +1 -0
  1149. package/dist/node_modules/@openhands/extensions/automations/catalog/github-issue-to-pr/manifest.js +98 -0
  1150. package/dist/node_modules/@openhands/extensions/automations/catalog/github-issue-to-pr/manifest.js.map +1 -0
  1151. package/dist/node_modules/@openhands/extensions/automations/catalog/github-pr-reviewer/manifest.cjs +9 -7
  1152. package/dist/node_modules/@openhands/extensions/automations/catalog/github-pr-reviewer/manifest.cjs.map +1 -1
  1153. package/dist/node_modules/@openhands/extensions/automations/catalog/github-pr-reviewer/manifest.js +32 -13
  1154. package/dist/node_modules/@openhands/extensions/automations/catalog/github-pr-reviewer/manifest.js.map +1 -1
  1155. package/dist/node_modules/@openhands/extensions/automations/catalog/github-repo-monitor/manifest.cjs +2 -2
  1156. package/dist/node_modules/@openhands/extensions/automations/catalog/github-repo-monitor/manifest.cjs.map +1 -1
  1157. package/dist/node_modules/@openhands/extensions/automations/catalog/github-repo-monitor/manifest.js +29 -34
  1158. package/dist/node_modules/@openhands/extensions/automations/catalog/github-repo-monitor/manifest.js.map +1 -1
  1159. package/dist/node_modules/@openhands/extensions/automations/catalog/jira-issue-to-pr/manifest.cjs +3 -3
  1160. package/dist/node_modules/@openhands/extensions/automations/catalog/jira-issue-to-pr/manifest.cjs.map +1 -1
  1161. package/dist/node_modules/@openhands/extensions/automations/catalog/jira-issue-to-pr/manifest.js +2 -2
  1162. package/dist/node_modules/@openhands/extensions/automations/catalog/jira-issue-to-pr/manifest.js.map +1 -1
  1163. package/dist/node_modules/@openhands/extensions/automations/catalog/news-digest/manifest.cjs +14 -0
  1164. package/dist/node_modules/@openhands/extensions/automations/catalog/news-digest/manifest.cjs.map +1 -0
  1165. package/dist/node_modules/@openhands/extensions/automations/catalog/news-digest/manifest.js +72 -0
  1166. package/dist/node_modules/@openhands/extensions/automations/catalog/news-digest/manifest.js.map +1 -0
  1167. package/dist/node_modules/@openhands/extensions/automations/catalog-index.cjs +1 -1
  1168. package/dist/node_modules/@openhands/extensions/automations/catalog-index.cjs.map +1 -1
  1169. package/dist/node_modules/@openhands/extensions/automations/catalog-index.js +16 -10
  1170. package/dist/node_modules/@openhands/extensions/automations/catalog-index.js.map +1 -1
  1171. package/dist/node_modules/@openhands/extensions/automations/index.cjs +1 -1
  1172. package/dist/node_modules/@openhands/extensions/automations/index.cjs.map +1 -1
  1173. package/dist/node_modules/@openhands/extensions/automations/index.js +18 -13
  1174. package/dist/node_modules/@openhands/extensions/automations/index.js.map +1 -1
  1175. package/dist/node_modules/@openhands/extensions/automations/interface.cjs +1 -1
  1176. package/dist/node_modules/@openhands/extensions/automations/interface.cjs.map +1 -1
  1177. package/dist/node_modules/@openhands/extensions/automations/interface.js +6 -2
  1178. package/dist/node_modules/@openhands/extensions/automations/interface.js.map +1 -1
  1179. package/dist/node_modules/@openhands/extensions/integrations/catalog/posthog.cjs +1 -1
  1180. package/dist/node_modules/@openhands/extensions/integrations/catalog/posthog.cjs.map +1 -1
  1181. package/dist/node_modules/@openhands/extensions/integrations/catalog/posthog.js +36 -3
  1182. package/dist/node_modules/@openhands/extensions/integrations/catalog/posthog.js.map +1 -1
  1183. package/dist/node_modules/@openhands/extensions/integrations/catalog/sonarqube.cjs +2 -0
  1184. package/dist/node_modules/@openhands/extensions/integrations/catalog/sonarqube.cjs.map +1 -0
  1185. package/dist/node_modules/@openhands/extensions/integrations/catalog/sonarqube.js +75 -0
  1186. package/dist/node_modules/@openhands/extensions/integrations/catalog/sonarqube.js.map +1 -0
  1187. package/dist/node_modules/@openhands/extensions/integrations/catalog-index.cjs +1 -1
  1188. package/dist/node_modules/@openhands/extensions/integrations/catalog-index.cjs.map +1 -1
  1189. package/dist/node_modules/@openhands/extensions/integrations/catalog-index.js +68 -66
  1190. package/dist/node_modules/@openhands/extensions/integrations/catalog-index.js.map +1 -1
  1191. package/dist/node_modules/@openhands/extensions/skills/index.cjs +1002 -47
  1192. package/dist/node_modules/@openhands/extensions/skills/index.cjs.map +1 -1
  1193. package/dist/node_modules/@openhands/extensions/skills/index.js +59 -17
  1194. package/dist/node_modules/@openhands/extensions/skills/index.js.map +1 -1
  1195. package/dist/node_modules/lucide-react/dist/esm/icons/activity.cjs +2 -0
  1196. package/dist/node_modules/lucide-react/dist/esm/icons/activity.cjs.map +1 -0
  1197. package/dist/node_modules/lucide-react/dist/esm/icons/activity.js +9 -0
  1198. package/dist/node_modules/lucide-react/dist/esm/icons/activity.js.map +1 -0
  1199. package/dist/node_modules/lucide-react/dist/esm/icons/book-open.cjs +2 -0
  1200. package/dist/node_modules/lucide-react/dist/esm/icons/book-open.cjs.map +1 -0
  1201. package/dist/node_modules/lucide-react/dist/esm/icons/book-open.js +12 -0
  1202. package/dist/node_modules/lucide-react/dist/esm/icons/book-open.js.map +1 -0
  1203. package/dist/node_modules/lucide-react/dist/esm/icons/circle-alert.cjs +2 -0
  1204. package/dist/node_modules/lucide-react/dist/esm/icons/circle-alert.cjs.map +1 -0
  1205. package/dist/node_modules/lucide-react/dist/esm/icons/circle-alert.js +27 -0
  1206. package/dist/node_modules/lucide-react/dist/esm/icons/circle-alert.js.map +1 -0
  1207. package/dist/node_modules/lucide-react/dist/esm/icons/download.cjs +2 -0
  1208. package/dist/node_modules/lucide-react/dist/esm/icons/download.cjs.map +1 -0
  1209. package/dist/node_modules/lucide-react/dist/esm/icons/download.js +19 -0
  1210. package/dist/node_modules/lucide-react/dist/esm/icons/download.js.map +1 -0
  1211. package/dist/node_modules/lucide-react/dist/esm/icons/file-text.cjs +2 -0
  1212. package/dist/node_modules/lucide-react/dist/esm/icons/file-text.cjs.map +1 -0
  1213. package/dist/node_modules/lucide-react/dist/esm/icons/file-text.js +27 -0
  1214. package/dist/node_modules/lucide-react/dist/esm/icons/file-text.js.map +1 -0
  1215. package/dist/node_modules/lucide-react/dist/esm/icons/git-commit-horizontal.cjs +2 -0
  1216. package/dist/node_modules/lucide-react/dist/esm/icons/git-commit-horizontal.cjs.map +1 -0
  1217. package/dist/node_modules/lucide-react/dist/esm/icons/git-commit-horizontal.js +27 -0
  1218. package/dist/node_modules/lucide-react/dist/esm/icons/git-commit-horizontal.js.map +1 -0
  1219. package/dist/node_modules/lucide-react/dist/esm/icons/laptop.cjs +2 -0
  1220. package/dist/node_modules/lucide-react/dist/esm/icons/laptop.cjs.map +1 -0
  1221. package/dist/node_modules/lucide-react/dist/esm/icons/laptop.js +12 -0
  1222. package/dist/node_modules/lucide-react/dist/esm/icons/laptop.js.map +1 -0
  1223. package/dist/node_modules/lucide-react/dist/esm/icons/layout-dashboard.cjs +2 -0
  1224. package/dist/node_modules/lucide-react/dist/esm/icons/layout-dashboard.cjs.map +1 -0
  1225. package/dist/node_modules/lucide-react/dist/esm/icons/layout-dashboard.js +39 -0
  1226. package/dist/node_modules/lucide-react/dist/esm/icons/layout-dashboard.js.map +1 -0
  1227. package/dist/node_modules/lucide-react/dist/esm/icons/library.cjs +2 -0
  1228. package/dist/node_modules/lucide-react/dist/esm/icons/library.cjs.map +1 -0
  1229. package/dist/node_modules/lucide-react/dist/esm/icons/library.js +23 -0
  1230. package/dist/node_modules/lucide-react/dist/esm/icons/library.js.map +1 -0
  1231. package/dist/node_modules/lucide-react/dist/esm/icons/package.cjs +2 -0
  1232. package/dist/node_modules/lucide-react/dist/esm/icons/package.cjs.map +1 -0
  1233. package/dist/node_modules/lucide-react/dist/esm/icons/package.js +23 -0
  1234. package/dist/node_modules/lucide-react/dist/esm/icons/package.js.map +1 -0
  1235. package/dist/node_modules/lucide-react/dist/esm/icons/palette.cjs +2 -0
  1236. package/dist/node_modules/lucide-react/dist/esm/icons/palette.cjs.map +1 -0
  1237. package/dist/node_modules/lucide-react/dist/esm/icons/palette.js +39 -0
  1238. package/dist/node_modules/lucide-react/dist/esm/icons/palette.js.map +1 -0
  1239. package/dist/node_modules/lucide-react/dist/esm/icons/pen-line.cjs +2 -0
  1240. package/dist/node_modules/lucide-react/dist/esm/icons/pen-line.cjs.map +1 -0
  1241. package/dist/node_modules/lucide-react/dist/esm/icons/pen-line.js +12 -0
  1242. package/dist/node_modules/lucide-react/dist/esm/icons/pen-line.js.map +1 -0
  1243. package/dist/node_modules/lucide-react/dist/esm/icons/shield-check.cjs +2 -0
  1244. package/dist/node_modules/lucide-react/dist/esm/icons/shield-check.cjs.map +1 -0
  1245. package/dist/node_modules/lucide-react/dist/esm/icons/shield-check.js +12 -0
  1246. package/dist/node_modules/lucide-react/dist/esm/icons/shield-check.js.map +1 -0
  1247. package/dist/node_modules/lucide-react/dist/esm/icons/sparkles.cjs +2 -0
  1248. package/dist/node_modules/lucide-react/dist/esm/icons/sparkles.cjs.map +1 -0
  1249. package/dist/node_modules/lucide-react/dist/esm/icons/sparkles.js +25 -0
  1250. package/dist/node_modules/lucide-react/dist/esm/icons/sparkles.js.map +1 -0
  1251. package/dist/node_modules/lucide-react/dist/esm/icons/timer.cjs +2 -0
  1252. package/dist/node_modules/lucide-react/dist/esm/icons/timer.cjs.map +1 -0
  1253. package/dist/node_modules/lucide-react/dist/esm/icons/timer.js +27 -0
  1254. package/dist/node_modules/lucide-react/dist/esm/icons/timer.js.map +1 -0
  1255. package/dist/package.cjs +1 -1
  1256. package/dist/package.cjs.map +1 -1
  1257. package/dist/package.js +3 -3
  1258. package/dist/package.js.map +1 -1
  1259. package/dist/routes/app-settings.cjs +1 -1
  1260. package/dist/routes/app-settings.cjs.map +1 -1
  1261. package/dist/routes/app-settings.js +87 -85
  1262. package/dist/routes/app-settings.js.map +1 -1
  1263. package/dist/routes/commits-tab.cjs +1 -1
  1264. package/dist/routes/commits-tab.cjs.map +1 -1
  1265. package/dist/routes/commits-tab.js +27 -21
  1266. package/dist/routes/commits-tab.js.map +1 -1
  1267. package/dist/routes/conversation.cjs +1 -1
  1268. package/dist/routes/conversation.cjs.map +1 -1
  1269. package/dist/routes/conversation.js +56 -55
  1270. package/dist/routes/conversation.js.map +1 -1
  1271. package/dist/routes/files-tab.cjs +1 -1
  1272. package/dist/routes/files-tab.cjs.map +1 -1
  1273. package/dist/routes/files-tab.d.ts +4 -0
  1274. package/dist/routes/files-tab.js +121 -151
  1275. package/dist/routes/files-tab.js.map +1 -1
  1276. package/dist/routes/llm-settings.cjs +1 -1
  1277. package/dist/routes/llm-settings.cjs.map +1 -1
  1278. package/dist/routes/llm-settings.d.ts +9 -1
  1279. package/dist/routes/llm-settings.js +137 -107
  1280. package/dist/routes/llm-settings.js.map +1 -1
  1281. package/dist/routes/mcp.cjs +1 -1
  1282. package/dist/routes/mcp.cjs.map +1 -1
  1283. package/dist/routes/mcp.js +20 -20
  1284. package/dist/routes/secrets-settings.cjs +1 -1
  1285. package/dist/routes/secrets-settings.js +15 -15
  1286. package/dist/services/settings.cjs +1 -1
  1287. package/dist/services/settings.cjs.map +1 -1
  1288. package/dist/services/settings.js +2 -2
  1289. package/dist/services/settings.js.map +1 -1
  1290. package/dist/services/telemetry.cjs +1 -1
  1291. package/dist/services/telemetry.cjs.map +1 -1
  1292. package/dist/services/telemetry.js +47 -51
  1293. package/dist/services/telemetry.js.map +1 -1
  1294. package/dist/stores/conversation-store.cjs +1 -1
  1295. package/dist/stores/conversation-store.cjs.map +1 -1
  1296. package/dist/stores/conversation-store.d.ts +8 -1
  1297. package/dist/stores/conversation-store.js +9 -0
  1298. package/dist/stores/conversation-store.js.map +1 -1
  1299. package/dist/stores/error-message-store.cjs +1 -1
  1300. package/dist/stores/error-message-store.cjs.map +1 -1
  1301. package/dist/stores/error-message-store.d.ts +3 -1
  1302. package/dist/stores/error-message-store.js +5 -3
  1303. package/dist/stores/error-message-store.js.map +1 -1
  1304. package/dist/stores/files-tab-store.cjs +1 -1
  1305. package/dist/stores/files-tab-store.cjs.map +1 -1
  1306. package/dist/stores/files-tab-store.d.ts +13 -0
  1307. package/dist/stores/files-tab-store.js +49 -5
  1308. package/dist/stores/files-tab-store.js.map +1 -1
  1309. package/dist/stores/use-event-store.cjs +1 -1
  1310. package/dist/stores/use-event-store.cjs.map +1 -1
  1311. package/dist/stores/use-event-store.js +11 -11
  1312. package/dist/stores/use-event-store.js.map +1 -1
  1313. package/dist/types/agent-server/core/events/message-event.d.ts +2 -2
  1314. package/dist/types/automation.cjs +2 -0
  1315. package/dist/types/automation.cjs.map +1 -0
  1316. package/dist/types/automation.js +8 -0
  1317. package/dist/types/automation.js.map +1 -0
  1318. package/dist/types/git-sync.d.ts +51 -0
  1319. package/dist/utils/automation-catalog.cjs +1 -1
  1320. package/dist/utils/automation-catalog.cjs.map +1 -1
  1321. package/dist/utils/automation-catalog.d.ts +12 -0
  1322. package/dist/utils/automation-catalog.js +20 -1
  1323. package/dist/utils/automation-catalog.js.map +1 -1
  1324. package/dist/utils/automation-schedule.cjs +2 -0
  1325. package/dist/utils/automation-schedule.cjs.map +1 -0
  1326. package/dist/utils/automation-schedule.js +8 -0
  1327. package/dist/utils/automation-schedule.js.map +1 -0
  1328. package/dist/utils/automation-stack-section.cjs +2 -0
  1329. package/dist/utils/automation-stack-section.cjs.map +1 -0
  1330. package/dist/utils/automation-stack-section.d.ts +2 -0
  1331. package/dist/utils/automation-stack-section.js +6 -0
  1332. package/dist/utils/automation-stack-section.js.map +1 -0
  1333. package/dist/utils/constants.cjs +1 -1
  1334. package/dist/utils/constants.cjs.map +1 -1
  1335. package/dist/utils/constants.js +4 -0
  1336. package/dist/utils/constants.js.map +1 -1
  1337. package/dist/utils/conversation-local-storage.cjs +1 -1
  1338. package/dist/utils/conversation-local-storage.cjs.map +1 -1
  1339. package/dist/utils/conversation-local-storage.d.ts +17 -4
  1340. package/dist/utils/conversation-local-storage.js +111 -63
  1341. package/dist/utils/conversation-local-storage.js.map +1 -1
  1342. package/dist/utils/conversation-metrics.cjs +1 -1
  1343. package/dist/utils/conversation-metrics.cjs.map +1 -1
  1344. package/dist/utils/conversation-metrics.d.ts +3 -2
  1345. package/dist/utils/conversation-metrics.js +16 -14
  1346. package/dist/utils/conversation-metrics.js.map +1 -1
  1347. package/dist/utils/conversation-overview-project-scope.cjs +2 -0
  1348. package/dist/utils/conversation-overview-project-scope.cjs.map +1 -0
  1349. package/dist/utils/conversation-overview-project-scope.d.ts +16 -0
  1350. package/dist/utils/conversation-overview-project-scope.js +22 -0
  1351. package/dist/utils/conversation-overview-project-scope.js.map +1 -0
  1352. package/dist/utils/error-handler.cjs +1 -1
  1353. package/dist/utils/error-handler.cjs.map +1 -1
  1354. package/dist/utils/error-handler.d.ts +3 -2
  1355. package/dist/utils/error-handler.js +18 -5
  1356. package/dist/utils/error-handler.js.map +1 -1
  1357. package/dist/utils/extension-module-card-classes.cjs +1 -1
  1358. package/dist/utils/extension-module-card-classes.cjs.map +1 -1
  1359. package/dist/utils/extension-module-card-classes.d.ts +1 -1
  1360. package/dist/utils/extension-module-card-classes.js +2 -2
  1361. package/dist/utils/extension-module-card-classes.js.map +1 -1
  1362. package/dist/utils/format-model-name.cjs +1 -1
  1363. package/dist/utils/format-model-name.cjs.map +1 -1
  1364. package/dist/utils/format-model-name.d.ts +1 -0
  1365. package/dist/utils/format-model-name.js +1 -0
  1366. package/dist/utils/format-model-name.js.map +1 -1
  1367. package/dist/utils/format-relative-time.cjs +2 -0
  1368. package/dist/utils/format-relative-time.cjs.map +1 -0
  1369. package/dist/utils/format-relative-time.js +17 -0
  1370. package/dist/utils/format-relative-time.js.map +1 -0
  1371. package/dist/utils/git-diff-stats.cjs +5 -0
  1372. package/dist/utils/git-diff-stats.cjs.map +1 -0
  1373. package/dist/utils/git-diff-stats.d.ts +9 -0
  1374. package/dist/utils/git-diff-stats.js +53 -0
  1375. package/dist/utils/git-diff-stats.js.map +1 -0
  1376. package/dist/utils/handle-event-for-ui.cjs +1 -1
  1377. package/dist/utils/handle-event-for-ui.cjs.map +1 -1
  1378. package/dist/utils/handle-event-for-ui.js +13 -11
  1379. package/dist/utils/handle-event-for-ui.js.map +1 -1
  1380. package/dist/utils/mcp-credential-validation.cjs +1 -1
  1381. package/dist/utils/mcp-credential-validation.js +3 -3
  1382. package/dist/utils/mcp-marketplace-utils.cjs +1 -1
  1383. package/dist/utils/mcp-marketplace-utils.cjs.map +1 -1
  1384. package/dist/utils/mcp-marketplace-utils.js +22 -9
  1385. package/dist/utils/mcp-marketplace-utils.js.map +1 -1
  1386. package/dist/utils/parse-git-remote-url.cjs +1 -1
  1387. package/dist/utils/parse-git-remote-url.cjs.map +1 -1
  1388. package/dist/utils/parse-git-remote-url.js +6 -7
  1389. package/dist/utils/parse-git-remote-url.js.map +1 -1
  1390. package/dist/utils/recommended-automation-rail.cjs +2 -0
  1391. package/dist/utils/recommended-automation-rail.cjs.map +1 -0
  1392. package/dist/utils/recommended-automation-rail.d.ts +22 -0
  1393. package/dist/utils/recommended-automation-rail.js +44 -0
  1394. package/dist/utils/recommended-automation-rail.js.map +1 -0
  1395. package/dist/utils/responder-deployment.cjs +2 -0
  1396. package/dist/utils/responder-deployment.cjs.map +1 -0
  1397. package/dist/utils/responder-deployment.js +42 -0
  1398. package/dist/utils/responder-deployment.js.map +1 -0
  1399. package/dist/utils/scroll-fade-state.cjs +2 -0
  1400. package/dist/utils/scroll-fade-state.cjs.map +1 -0
  1401. package/dist/utils/scroll-fade-state.d.ts +6 -0
  1402. package/dist/utils/scroll-fade-state.js +13 -0
  1403. package/dist/utils/scroll-fade-state.js.map +1 -0
  1404. package/dist/utils/skill-category.cjs +2 -0
  1405. package/dist/utils/skill-category.cjs.map +1 -0
  1406. package/dist/utils/skill-category.js +51 -0
  1407. package/dist/utils/skill-category.js.map +1 -0
  1408. package/dist/utils/skill-scope.cjs +1 -1
  1409. package/dist/utils/skill-scope.cjs.map +1 -1
  1410. package/dist/utils/skill-scope.js +1 -1
  1411. package/dist/utils/skill-scope.js.map +1 -1
  1412. package/dist/utils/streaming-delta-batcher.cjs +2 -0
  1413. package/dist/utils/streaming-delta-batcher.cjs.map +1 -0
  1414. package/dist/utils/streaming-delta-batcher.d.ts +21 -0
  1415. package/dist/utils/streaming-delta-batcher.js +31 -0
  1416. package/dist/utils/streaming-delta-batcher.js.map +1 -0
  1417. package/dist/utils/tar-gzip.d.ts +26 -0
  1418. package/dist/utils/transcript-export/load-complete-events.cjs +1 -1
  1419. package/dist/utils/transcript-export/load-complete-events.cjs.map +1 -1
  1420. package/dist/utils/transcript-export/load-complete-events.js +24 -16
  1421. package/dist/utils/transcript-export/load-complete-events.js.map +1 -1
  1422. package/dist/utils/utils.cjs +1 -1
  1423. package/dist/utils/utils.cjs.map +1 -1
  1424. package/dist/utils/utils.d.ts +1 -41
  1425. package/dist/utils/utils.js +27 -6
  1426. package/dist/utils/utils.js.map +1 -1
  1427. package/dist/utils/websocket-handshake.cjs +2 -0
  1428. package/dist/utils/websocket-handshake.cjs.map +1 -0
  1429. package/dist/utils/websocket-handshake.d.ts +11 -0
  1430. package/dist/utils/websocket-handshake.js +12 -0
  1431. package/dist/utils/websocket-handshake.js.map +1 -0
  1432. package/package.json +3 -3
  1433. package/scripts/check-translation-completeness.cjs +7 -0
  1434. package/scripts/dev-static.mjs +49 -43
  1435. package/scripts/dev-with-automation.mjs +111 -14
  1436. package/scripts/seed-automation-ux-data.mjs +810 -0
  1437. package/build/assets/acp-providers-D1PORKc0.js +0 -1
  1438. package/build/assets/active-backend-context-IqOjobNK.js +0 -2
  1439. package/build/assets/agent-context-settings-DMrObcIS.js +0 -1
  1440. package/build/assets/agent-profiles-settings-DororXN5.js +0 -1
  1441. package/build/assets/agent-server-conversation-service.api-DWBe0rbX.js +0 -86
  1442. package/build/assets/agent-settings-BJVk92PU.js +0 -2
  1443. package/build/assets/agent-settings-COfJsQ1d.js +0 -1
  1444. package/build/assets/alert-banner-CzZsm7ms.js +0 -1
  1445. package/build/assets/api-key-entry-screen-D8Fade_-.js +0 -1
  1446. package/build/assets/app-settings-CpyGB3AT.js +0 -1
  1447. package/build/assets/automation-detail-B-jQ39Mm.js +0 -3
  1448. package/build/assets/automation-export-B1dywoqk.js +0 -2
  1449. package/build/assets/automation-setup-route-C-bWUZBi.js +0 -1
  1450. package/build/assets/automation-templates-DgpCGOJV.js +0 -1
  1451. package/build/assets/automations-list-DnMxlxsL.js +0 -1
  1452. package/build/assets/back-nav-button-HHEneWMw.js +0 -1
  1453. package/build/assets/backend-form-modal-DiVrD4Cm.js +0 -1
  1454. package/build/assets/backend-synced-settings-badge-7MIjpr8M.js +0 -1
  1455. package/build/assets/badge-CpYmcVZV.js +0 -1
  1456. package/build/assets/base-modal-Fnh6Uln9.js +0 -1
  1457. package/build/assets/bot-BQZx8e2i.js +0 -1
  1458. package/build/assets/brand-button-swT1RyO0.js +0 -1
  1459. package/build/assets/browser-B9AbV6kG.js +0 -7
  1460. package/build/assets/browser-tab-zAY12m_i.js +0 -1
  1461. package/build/assets/chat-send-button-DsJtivmL.js +0 -1
  1462. package/build/assets/check-WAFXrrs_.js +0 -1
  1463. package/build/assets/chevron-down-CifNWzme.js +0 -1
  1464. package/build/assets/circle-check-CtnimJa8.js +0 -1
  1465. package/build/assets/circle-plus-check-toggle-Cuzx55bo.js +0 -1
  1466. package/build/assets/cloud-funnel-analytics-86CwNdSh.js +0 -1
  1467. package/build/assets/combobox-caret-D0fRotFi.js +0 -1
  1468. package/build/assets/command-menu-BXy03FBl.js +0 -1
  1469. package/build/assets/condenser-settings-BmZa0ui_.js +0 -1
  1470. package/build/assets/confirmation-modal-BgoN6lbN.js +0 -1
  1471. package/build/assets/context-menu-list-item-Bq02tc-P.js +0 -1
  1472. package/build/assets/conversation-BPo8SvLN.js +0 -1
  1473. package/build/assets/conversation-CPCVsCUY.js +0 -90
  1474. package/build/assets/conversation-panel-BPo8SvLN.js +0 -1
  1475. package/build/assets/conversation-state-store-C5YpjMNy.js +0 -1
  1476. package/build/assets/conversation-store-Blc5xysY.js +0 -6
  1477. package/build/assets/conversation-tab-empty-state-CMqo_0Bd.js +0 -1
  1478. package/build/assets/copy-to-clipboard-button-Cg1pF0xn.js +0 -1
  1479. package/build/assets/device-verify-BfQLgNyq.js +0 -1
  1480. package/build/assets/dropdown-classes-BIqQr5mx.js +0 -1
  1481. package/build/assets/entry.client-CxFjRYqH.js +0 -2
  1482. package/build/assets/enum-filter-dropdown-C_yV4_bo.js +0 -1
  1483. package/build/assets/environment-switch-overlay-Bi4qbh2g.js +0 -1
  1484. package/build/assets/extension-module-card-classes-Bo43vY5V.js +0 -1
  1485. package/build/assets/extensions-hub-BqUINAhp.js +0 -1
  1486. package/build/assets/extensions-navigation-lraj88Wk.js +0 -1
  1487. package/build/assets/external-link-CgtpA_a1.js +0 -1
  1488. package/build/assets/file-text-DEK4LSVw.js +0 -1
  1489. package/build/assets/files-tab-DV0L-lFE.js +0 -1
  1490. package/build/assets/form-control-classes-7yFSQJq_.js +0 -1
  1491. package/build/assets/format-model-name-BN_rx1Y3.js +0 -1
  1492. package/build/assets/format-relative-time-DSErAuVr.js +0 -1
  1493. package/build/assets/git-provider-icon-BvlLAche.js +0 -1
  1494. package/build/assets/git-repo-dropdown-ByMzpNko.js +0 -1
  1495. package/build/assets/git-repo-dropdown-C6R7hgM8.js +0 -1
  1496. package/build/assets/highlighted-source-view-C_sfncLZ.js +0 -1
  1497. package/build/assets/home-BOrlwLqG.js +0 -1
  1498. package/build/assets/home-BvMNC6E-.js +0 -1
  1499. package/build/assets/home-store-CxqsY9Fi.js +0 -1
  1500. package/build/assets/index-home-BvMNC6E-.js +0 -1
  1501. package/build/assets/info-BRVcJAUg.js +0 -1
  1502. package/build/assets/install-server-modal-Bl4G1zF4.js +0 -1
  1503. package/build/assets/kebab-menu-item-content-BGoGFEAg.js +0 -1
  1504. package/build/assets/launch-CkqiSCqi.js +0 -1
  1505. package/build/assets/list-todo-DNWlzfaM.js +0 -1
  1506. package/build/assets/llm-not-configured-banner-DLw_tu-G.js +0 -27
  1507. package/build/assets/llm-settings-B-pkVCrt.js +0 -1
  1508. package/build/assets/llm-settings-DSC0-IQ7.js +0 -1
  1509. package/build/assets/llm-subscription-service-BAdOl5Xx.js +0 -1
  1510. package/build/assets/loader-circle-B47W9XqT.js +0 -1
  1511. package/build/assets/loading-spinner-xhnrGP4Y.js +0 -1
  1512. package/build/assets/manage-backends-modal-DhGk5mJt.js +0 -1
  1513. package/build/assets/manifest-653b89aa.js +0 -1
  1514. package/build/assets/manifest-subpage-layout-CKWvL2ig.js +0 -1
  1515. package/build/assets/map-provider-Mx8mZuE-.js +0 -1
  1516. package/build/assets/markdown-renderer-DUmk7pFc.js +0 -8
  1517. package/build/assets/mcp-DCkvl6K0.js +0 -9
  1518. package/build/assets/mcp-marketplace-utils-DEbMXlQr.js +0 -1
  1519. package/build/assets/messages-DSXvyc21.js +0 -40
  1520. package/build/assets/modal-body-gIe21fDv.js +0 -1
  1521. package/build/assets/modal-classes-D66dlgZ7.js +0 -1
  1522. package/build/assets/modal-close-button-B6iOGYpI.js +0 -1
  1523. package/build/assets/mouse-pointer-click-BYX1Pw5W.js +0 -1
  1524. package/build/assets/npm-DLckoeJc.js +0 -1
  1525. package/build/assets/onboarding-D7WDG66N.js +0 -1
  1526. package/build/assets/onboarding-modal-C_xVrFNv.js +0 -1
  1527. package/build/assets/organization-service.api-D-s9z18a.js +0 -1
  1528. package/build/assets/pencil-BGOCPRyu.js +0 -1
  1529. package/build/assets/planner-tab-AKaXIIfg.js +0 -1
  1530. package/build/assets/plugins-management-service-wtmY4QQw.js +0 -1
  1531. package/build/assets/plus-zNEL8rcX.js +0 -1
  1532. package/build/assets/profiles-service.api-DCMYxHMi.js +0 -1
  1533. package/build/assets/providers-BjrtjX4L.js +0 -1
  1534. package/build/assets/proxy-9Z_WZggZ.js +0 -1
  1535. package/build/assets/puzzle-BWLmN8z4.js +0 -1
  1536. package/build/assets/recommended-automations-launcher-CFlzhu1o.js +0 -1
  1537. package/build/assets/refresh-cw-CXtFWpwv.js +0 -1
  1538. package/build/assets/root-CanxKlNV.css +0 -1
  1539. package/build/assets/root-DkfG_UWR.js +0 -2
  1540. package/build/assets/root-layout-D75LHYhh.js +0 -2
  1541. package/build/assets/schema-field-OnM5Uob_.js +0 -1
  1542. package/build/assets/sdk-section-page-m5WQm2sy.js +0 -1
  1543. package/build/assets/search-CycosyjN.js +0 -1
  1544. package/build/assets/secrets-service-B26R61C1.js +0 -1
  1545. package/build/assets/secrets-settings-CbLYCKOX.js +0 -1
  1546. package/build/assets/segmented-toggle-DCspm2U5.js +0 -1
  1547. package/build/assets/settings-BJQI_iBM.js +0 -1
  1548. package/build/assets/settings-CWFxymAf.js +0 -1
  1549. package/build/assets/settings-dropdown-input-BI8V_Nov.js +0 -1
  1550. package/build/assets/settings-index-BiTqJoH7.js +0 -1
  1551. package/build/assets/settings-input-Cz62hWVW.js +0 -1
  1552. package/build/assets/settings-list-classes-z_3FW5H3.js +0 -1
  1553. package/build/assets/settings-modal-BIrIVn97.js +0 -1
  1554. package/build/assets/settings-service.api--rJmnuLa.js +0 -1
  1555. package/build/assets/settings-switch-BRsSI8Vs.js +0 -1
  1556. package/build/assets/settings-utils-Ba7vel6T.js +0 -1
  1557. package/build/assets/shared-conversation-CQK_PqHx.js +0 -1
  1558. package/build/assets/shield-check-T3JsDJiM.js +0 -1
  1559. package/build/assets/sidebar-layout-Bhi3hVcu.js +0 -1
  1560. package/build/assets/sidebar-mobile-menu-toggle-YWJNRN4p.js +0 -1
  1561. package/build/assets/sidebar-nav-link-BSUlY5Ml.js +0 -1
  1562. package/build/assets/sidebar-store-Cl1cUv_F.js +0 -1
  1563. package/build/assets/skill-card-pill-row-BXz8L8Rn.js +0 -1
  1564. package/build/assets/skill-icon-badge-QgfKv31M.js +0 -1
  1565. package/build/assets/skill-scope-Dc3JPW-8.js +0 -1
  1566. package/build/assets/skills-plugins-CpTV27n3.js +0 -1
  1567. package/build/assets/skills-settings-CSW__IW4.js +0 -2
  1568. package/build/assets/sparkles-TJ0mdECe.js +0 -1
  1569. package/build/assets/styled-tooltip-BUMSbgrF.js +0 -1
  1570. package/build/assets/task-list-tab-mAHMOkUz.js +0 -1
  1571. package/build/assets/terminal-BzxBaHx2.js +0 -3
  1572. package/build/assets/toggle-switch-O5v1FgxW.js +0 -1
  1573. package/build/assets/trash-2-C0xNVp9c.js +0 -1
  1574. package/build/assets/typography-NOKSk9_R.js +0 -1
  1575. package/build/assets/usage-tab-tEmVN0KD.js +0 -1
  1576. package/build/assets/use-acp-credential-form-BPNi0Zbm.js +0 -1
  1577. package/build/assets/use-activate-agent-profile-D9YRQPTF.js +0 -1
  1578. package/build/assets/use-agent-profiles-Cb2zUW3l.js +0 -1
  1579. package/build/assets/use-can-manage-org-profiles-Dxzq2AEd.js +0 -1
  1580. package/build/assets/use-cloud-current-user-id-Co2eJk2A.js +0 -1
  1581. package/build/assets/use-config-DKAMiI5R.js +0 -1
  1582. package/build/assets/use-create-conversation-CoHTiCbI.js +0 -1
  1583. package/build/assets/use-create-secret-2zBlCDsF.js +0 -1
  1584. package/build/assets/use-is-authed-C52-ivnB.js +0 -1
  1585. package/build/assets/use-is-creating-conversation-DdaAE6jV.js +0 -1
  1586. package/build/assets/use-launch-skill-in-chat-COnDpxCQ.js +0 -1
  1587. package/build/assets/use-llm-profiles-C_BHue65.js +0 -1
  1588. package/build/assets/use-manifest-capabilities-DPrQsaPP.js +0 -1
  1589. package/build/assets/use-onboarding-completion-CCE8OQgV.js +0 -1
  1590. package/build/assets/use-plugins-marketplace-CEiak69h.js +0 -1
  1591. package/build/assets/use-save-agent-profile-DK9idD6a.js +0 -1
  1592. package/build/assets/use-save-settings-DNmnbG6f.js +0 -1
  1593. package/build/assets/use-settings-nav-items-BlFL7YhM.js +0 -16
  1594. package/build/assets/use-settings-wCwPaSIv.js +0 -1
  1595. package/build/assets/use-tracking-CVwPmhlX.js +0 -3
  1596. package/build/assets/use-user-conversation-DVtfg0B_.js +0 -1
  1597. package/build/assets/useInfiniteQuery-p1xq35r2.js +0 -1
  1598. package/build/assets/useMutation-BFDQmgk9.js +0 -1
  1599. package/build/assets/useQueries-DF1NAAeC.js +0 -1
  1600. package/build/assets/useQuery-DRv--6bK.js +0 -1
  1601. package/build/assets/utils-zxEjKE70.js +0 -1
  1602. package/build/assets/vendor~browser-B-fae1JU.js +0 -47
  1603. package/build/assets/vendor~entry.client-CgNUwtQL.js +0 -1
  1604. package/build/assets/vendor~entry.client-zSIea5EO.js +0 -9
  1605. package/build/assets/vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~kv3pap4j-B8i84bh4.js +0 -186
  1606. package/build/assets/vendor~files-tab-D9wR9yM2.js +0 -11
  1607. package/build/assets/vendor~index-home~home~conversation-panel~conversation-Ipoe6hvY.js +0 -13
  1608. package/build/assets/vendor~root-layout-C-IgVx6e.js +0 -1
  1609. package/build/assets/vendor~root-layout~conversation-panel~conversation-Dhd_I4H4.js +0 -1
  1610. package/build/assets/vendor~root-layout~conversation-panel~conversation~skills-settings~automations-list~shared-~bovqqk8e-Cc0f9kPP.js +0 -1
  1611. package/build/assets/vendor~root-layout~index-home~home~conversation-panel~conversation~shared-conversation-d7svw-BB.js +0 -1
  1612. package/build/assets/vendor~root-layout~index-home~home~mcp~automations-list~automation-templates~automation-set~bxsimjx0-D7IDevqN.js +0 -1
  1613. package/build/assets/vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~gxu4j2ea-D5DWZVc7.js +0 -1
  1614. package/build/assets/vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~hjcjabwg-4WsUP-tz.js +0 -48
  1615. package/build/assets/vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~skills-setti~9pstowjp-BOVIFA_g.js +0 -73
  1616. package/build/assets/vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~skills-setti~ht43enc2-C0JXQb_q.js +0 -7465
  1617. package/build/assets/verification-settings-B8UMQ7MG.js +0 -1
  1618. package/build/assets/wrench-DIka3hCq.js +0 -1
  1619. package/build/assets/x-BWKA2Ver.js +0 -1
  1620. package/build/assets/zap-DHddTPc0.js +0 -1
  1621. package/dist/api/cloud/suggestions-service.api.d.ts +0 -8
  1622. package/dist/api/suggestions-service/suggestions-service.api.d.ts +0 -11
  1623. package/dist/components/conversation-events/chat/event-message-components/observation-pair-event-message.d.ts +0 -7
  1624. package/dist/components/conversation-events/index.d.ts +0 -1
  1625. package/dist/components/features/automations/metadata-chip.d.ts +0 -6
  1626. package/dist/components/features/chat/task-tracking/status-badge.d.ts +0 -5
  1627. package/dist/components/features/chat/task-tracking/status-icon.d.ts +0 -5
  1628. package/dist/components/features/chat/task-tracking/task-list-section.d.ts +0 -10
  1629. package/dist/components/features/controls/tools.d.ts +0 -2
  1630. package/dist/components/features/conversation-panel/new-conversation-button.d.ts +0 -23
  1631. package/dist/components/features/diff-viewer/empty-changes-message.cjs +0 -2
  1632. package/dist/components/features/diff-viewer/empty-changes-message.cjs.map +0 -1
  1633. package/dist/components/features/diff-viewer/empty-changes-message.js +0 -17
  1634. package/dist/components/features/diff-viewer/empty-changes-message.js.map +0 -1
  1635. package/dist/components/features/home/home-header/guide-message.d.ts +0 -1
  1636. package/dist/components/features/home/home-header/home-header.d.ts +0 -1
  1637. package/dist/components/features/home/new-conversation/create-conversation-button.d.ts +0 -1
  1638. package/dist/components/features/home/new-conversation/new-conversation.d.ts +0 -1
  1639. package/dist/components/features/home/new-conversation.d.ts +0 -1
  1640. package/dist/components/features/home/tasks/task-card.d.ts +0 -6
  1641. package/dist/components/features/home/tasks/task-group.d.ts +0 -7
  1642. package/dist/components/features/home/tasks/task-issue-number.d.ts +0 -6
  1643. package/dist/components/features/home/tasks/task-item-title.d.ts +0 -1
  1644. package/dist/components/features/home/tasks/task-suggestions-skeleton.d.ts +0 -1
  1645. package/dist/components/features/home/tasks/task-suggestions.d.ts +0 -6
  1646. package/dist/components/features/settings/agent-server-onboarding.d.ts +0 -10
  1647. package/dist/components/features/settings/mcp-settings/mcp-server-list-item.d.ts +0 -6
  1648. package/dist/components/features/settings/mcp-settings/mcp-server-list.d.ts +0 -8
  1649. package/dist/components/features/tips/random-tip.cjs +0 -2
  1650. package/dist/components/features/tips/random-tip.cjs.map +0 -1
  1651. package/dist/components/features/tips/random-tip.js +0 -41
  1652. package/dist/components/features/tips/random-tip.js.map +0 -1
  1653. package/dist/hooks/query/use-has-git-commits.cjs +0 -2
  1654. package/dist/hooks/query/use-has-git-commits.cjs.map +0 -1
  1655. package/dist/hooks/query/use-has-git-commits.d.ts +0 -25
  1656. package/dist/hooks/query/use-has-git-commits.js +0 -31
  1657. package/dist/hooks/query/use-has-git-commits.js.map +0 -1
  1658. package/dist/hooks/query/use-suggested-tasks.d.ts +0 -1
  1659. package/dist/hooks/use-has-attached-source.cjs +0 -2
  1660. package/dist/hooks/use-has-attached-source.cjs.map +0 -1
  1661. package/dist/hooks/use-has-attached-source.d.ts +0 -18
  1662. package/dist/hooks/use-has-attached-source.js +0 -14
  1663. package/dist/hooks/use-has-attached-source.js.map +0 -1
  1664. package/dist/hooks/use-should-show-user-features.d.ts +0 -1
  1665. package/dist/icons/chveron-up.cjs +0 -2
  1666. package/dist/icons/chveron-up.cjs.map +0 -1
  1667. package/dist/icons/chveron-up.js +0 -21
  1668. package/dist/icons/chveron-up.js.map +0 -1
  1669. package/dist/routes/changes-tab.cjs +0 -2
  1670. package/dist/routes/changes-tab.cjs.map +0 -1
  1671. package/dist/routes/changes-tab.d.ts +0 -3
  1672. package/dist/routes/changes-tab.js +0 -64
  1673. package/dist/routes/changes-tab.js.map +0 -1
  1674. package/dist/ui/card-title.d.ts +0 -16
  1675. package/dist/ui/card.d.ts +0 -14
  1676. package/dist/utils/file-priority.cjs +0 -2
  1677. package/dist/utils/file-priority.cjs.map +0 -1
  1678. package/dist/utils/file-priority.d.ts +0 -27
  1679. package/dist/utils/file-priority.js +0 -61
  1680. package/dist/utils/file-priority.js.map +0 -1
  1681. package/dist/utils/group-suggested-tasks.d.ts +0 -7
  1682. package/dist/utils/table-row-classes.d.ts +0 -9
  1683. package/dist/utils/tips.cjs +0 -2
  1684. package/dist/utils/tips.cjs.map +0 -1
  1685. package/dist/utils/tips.js +0 -45
  1686. package/dist/utils/tips.js.map +0 -1
  1687. /package/build/assets/{vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~dh9v73sa-rfV8mQ9m.js → vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~ew3u153i-rfV8mQ9m.js} +0 -0
  1688. /package/build/assets/{vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~lq5hicxx-cHFhpUBq.js → vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~ox0jfsa0-cHFhpUBq.js} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-marketplace-utils.cjs","names":[],"sources":["../../src/utils/mcp-marketplace-utils.ts"],"sourcesContent":["import { MCPServerConfig } from \"#/types/mcp-server\";\nimport type {\n MCPAuthenticationConfig,\n MCPOAuthClientAuthMethod,\n} from \"#/types/mcp-auth\";\nimport type {\n IntegrationAuthConfig,\n IntegrationCatalogEntry as MarketplaceEntry,\n IntegrationConnectionOption,\n IntegrationOAuthConfig,\n IntegrationTransport,\n} from \"@openhands/extensions/integrations\";\n\nexport type { MarketplaceEntry };\n\ntype McpIntegrationAuthConfig = IntegrationAuthConfig & {\n credentialSecretName?: string;\n saveCredentialAsSecretByDefault?: boolean;\n};\n\nexport type McpMarketplaceConnectionOption = Omit<\n IntegrationConnectionOption,\n \"auth\" | \"provider\" | \"transport\"\n> & {\n provider: \"mcp\";\n transport: IntegrationTransport;\n auth: McpIntegrationAuthConfig;\n};\n\nexport function getMcpConnectionOptions(\n entry: MarketplaceEntry,\n): McpMarketplaceConnectionOption[] {\n return entry.connectionOptions.filter(\n (option): option is McpMarketplaceConnectionOption =>\n option.provider === \"mcp\" && !!option.transport,\n );\n}\n\nexport function getDefaultMcpConnectionOption(\n entry: MarketplaceEntry,\n): McpMarketplaceConnectionOption | undefined {\n return getMcpConnectionOptions(entry)[0];\n}\n\nfunction isLocallyInstallableMcpOption(\n option: McpMarketplaceConnectionOption,\n): boolean {\n if (option.auth.strategy !== \"oauth2\") return true;\n\n const oauth = option.auth.oauth;\n if (!oauth) return false;\n\n // Local agent-server installs only support OAuth flows initiated by the MCP\n // server itself through fastmcp. Catalog entries that specify provider OAuth\n // endpoints still need the hosted integration-auth flow and should not be\n // exposed as locally installable static MCP configs.\n return (\n !oauth.authorizationUrl &&\n !oauth.tokenUrl &&\n !oauth.registrationUrl &&\n !oauth.additionalAuthorizationParams &&\n !oauth.additionalTokenParams\n );\n}\n\nexport function getInstallableMcpConnectionOption(\n entry: MarketplaceEntry,\n): McpMarketplaceConnectionOption | undefined {\n return getMcpConnectionOptions(entry).find(isLocallyInstallableMcpOption);\n}\n\nexport function getDefaultMcpTransport(\n entry: MarketplaceEntry,\n): IntegrationTransport | undefined {\n return getDefaultMcpConnectionOption(entry)?.transport;\n}\n\nfunction toMcpOAuthClientAuthMethod(\n value: IntegrationOAuthConfig[\"clientAuthentication\"] | undefined,\n): MCPOAuthClientAuthMethod | undefined {\n switch (value) {\n case \"none\":\n return \"none\";\n case \"body\":\n return \"client_secret_post\";\n case \"basic\":\n return \"client_secret_basic\";\n default:\n return undefined;\n }\n}\n\nexport function getMcpOAuthAuthenticationConfig(\n option: McpMarketplaceConnectionOption,\n): MCPAuthenticationConfig | undefined {\n if (option.auth.strategy !== \"oauth2\") return undefined;\n const authentication: MCPAuthenticationConfig = { type: \"oauth\" };\n const clientAuthMethod = toMcpOAuthClientAuthMethod(\n option.auth.oauth?.clientAuthentication,\n );\n if (clientAuthMethod) {\n authentication.client_auth_method = clientAuthMethod;\n }\n if (option.auth.oauth?.scopes?.length) {\n authentication.scopes = option.auth.oauth.scopes;\n }\n return Object.keys(authentication).length > 1 ? authentication : undefined;\n}\n\nexport function getMcpMarketplaceCatalog(\n catalog: MarketplaceEntry[],\n): MarketplaceEntry[] {\n return catalog.filter(isMcpInstallableEntry);\n}\n\n/**\n * Whether this backend can install/configure the entry as an MCP server.\n * Entries whose only connection options use another provider or transport\n * (e.g. Jira's HTTP/OpenAPI option) exist in the catalog but cannot go\n * through the local MCP install flow.\n */\nexport function isMcpInstallableEntry(entry: MarketplaceEntry): boolean {\n return !!getDefaultMcpConnectionOption(entry);\n}\n\nconst tryUrl = (raw: string): URL | null => {\n try {\n return new URL(raw);\n } catch {\n return null;\n }\n};\n\n/**\n * Loose URL match that ignores query strings, trailing slashes, and\n * default ports. We want clicking \"Linear\" to flag the entry as\n * installed even if the user pasted the URL with extra trailing slash\n * or a different port-equivalent variant.\n *\n * Defensive against runtime data that doesn't match the static type:\n * if either input is not a string (e.g. parsed from an older settings\n * blob), we fall through the URL parsing path and the safe trim\n * fallback below, never calling `.replace` on undefined.\n */\nexport function urlsMatch(a: unknown, b: unknown): boolean {\n const aStr = typeof a === \"string\" ? a : \"\";\n const bStr = typeof b === \"string\" ? b : \"\";\n if (!aStr || !bStr) return false;\n const left = tryUrl(aStr);\n const right = tryUrl(bStr);\n if (!left || !right) {\n return aStr.replace(/\\/+$/, \"\") === bStr.replace(/\\/+$/, \"\");\n }\n return (\n left.protocol === right.protocol &&\n left.host === right.host &&\n left.pathname.replace(/\\/+$/, \"\") === right.pathname.replace(/\\/+$/, \"\")\n );\n}\n\n/**\n * Decide whether a marketplace template is already represented by one\n * of the installed MCP servers. Used to render an \"Installed\" badge on\n * the marketplace tile. Returns the first matching server, or null.\n */\nexport function findInstalledMatch(\n transport: IntegrationTransport,\n servers: MCPServerConfig[],\n): MCPServerConfig | null {\n return (\n servers.find((server) => transportMatchesServer(transport, server)) ?? null\n );\n}\n\nexport function findInstalledEntryMatch(\n entry: MarketplaceEntry,\n servers: MCPServerConfig[],\n): MCPServerConfig | null {\n for (const option of getMcpConnectionOptions(entry)) {\n const match = findInstalledMatch(option.transport, servers);\n if (match) return match;\n }\n return null;\n}\n\nfunction transportMatchesServer(\n transport: IntegrationTransport,\n server: MCPServerConfig,\n): boolean {\n if (transport.kind === \"shttp\") {\n const tplUrl = transport.url;\n return (\n server.type === \"shttp\" && !!server.url && urlsMatch(server.url, tplUrl)\n );\n }\n\n if (transport.kind === \"sse\") {\n const tplUrl = transport.url;\n return (\n server.type === \"sse\" && !!server.url && urlsMatch(server.url, tplUrl)\n );\n }\n\n // stdio: match on the registered server name.\n return server.type === \"stdio\" && server.name === transport.serverName;\n}\n\nfunction normalize(query: string): string {\n return query.trim().toLowerCase();\n}\n\n/**\n * Case-insensitive substring match against the catalog entry's\n * user-visible identity (name, description, id, keywords). Empty\n * queries always match.\n */\nexport function getMarketplaceEntriesByPopularity(\n catalog: MarketplaceEntry[],\n): MarketplaceEntry[] {\n return catalog\n .map((entry, index) => ({ entry, index }))\n .sort((a, b) => {\n const byPopularity =\n (b.entry.popularityRank ?? 0) - (a.entry.popularityRank ?? 0);\n return byPopularity || a.index - b.index;\n })\n .map(({ entry }) => entry);\n}\n\nexport function getMarketplaceEntryById(\n id: string,\n catalog: MarketplaceEntry[],\n): MarketplaceEntry | undefined {\n return catalog.find((entry) => entry.id === id);\n}\n\nexport function marketplaceEntryMatchesQuery(\n entry: MarketplaceEntry,\n rawQuery: string,\n): boolean {\n const q = normalize(rawQuery);\n if (!q) return true;\n const haystack = [\n entry.name,\n entry.description,\n entry.id,\n ...(entry.keywords ?? []),\n ]\n .join(\" \")\n .toLowerCase();\n return haystack.includes(q);\n}\n\n/**\n * Search match for an installed (already-configured) server. We\n * search the server's own identifying fields and — if it's a catalog\n * entry — its catalog name/keywords too, so typing \"Slack\" matches\n * the installed Slack tile even though the persisted server is just\n * `{ type: \"stdio\", name: \"slack\", ... }`.\n */\nexport function installedServerMatchesQuery(\n server: MCPServerConfig,\n catalogEntry: MarketplaceEntry | undefined,\n rawQuery: string,\n): boolean {\n const q = normalize(rawQuery);\n if (!q) return true;\n const haystack = [\n server.type,\n \"name\" in server ? server.name : undefined,\n \"command\" in server ? server.command : undefined,\n \"args\" in server ? server.args?.join(\" \") : undefined,\n \"url\" in server ? server.url : undefined,\n catalogEntry?.name,\n catalogEntry?.description,\n catalogEntry?.id,\n ...(catalogEntry?.keywords ?? []),\n ]\n .filter(Boolean)\n .join(\" \")\n .toLowerCase();\n return haystack.includes(q);\n}\n\n/**\n * Look up the catalog entry that best matches an installed server.\n * Mirrors the lookup used in `installed-server-card.tsx` for\n * rendering the friendly icon.\n */\nexport function findCatalogEntryForServer(\n server: MCPServerConfig,\n catalog: MarketplaceEntry[],\n): MarketplaceEntry | undefined {\n return catalog.find((entry) => {\n // Check every MCP option rather than only the default. Some unified\n // integration entries default to OAuth-hosted MCP while still exposing\n // an API/stdio option; existing installed servers should match either.\n return getMcpConnectionOptions(entry).some((option) =>\n transportMatchesServer(option.transport, server),\n );\n });\n}\n"],"mappings":"6CA6BA,SAAgB,EACd,EACkC,CAClC,OAAO,EAAM,kBAAkB,OAC5B,GACC,EAAO,WAAa,OAAS,CAAC,CAAC,EAAO,SAC1C,CACF,CAEA,SAAgB,EACd,EAC4C,CAC5C,OAAO,EAAwB,CAAK,EAAE,EACxC,CAEA,SAAS,EACP,EACS,CACT,GAAI,EAAO,KAAK,WAAa,SAAU,MAAO,GAE9C,IAAM,EAAQ,EAAO,KAAK,MAO1B,OANK,EAOH,CAAC,EAAM,kBACP,CAAC,EAAM,UACP,CAAC,EAAM,iBACP,CAAC,EAAM,+BACP,CAAC,EAAM,sBAXU,EAarB,CAEA,SAAgB,EACd,EAC4C,CAC5C,OAAO,EAAwB,CAAK,EAAE,KAAK,CAA6B,CAC1E,CAEA,SAAgB,EACd,EACkC,CAClC,OAAO,EAA8B,CAAK,GAAG,SAC/C,CAEA,SAAS,EACP,EACsC,CACtC,OAAQ,EAAR,CACE,IAAK,OACH,MAAO,OACT,IAAK,OACH,MAAO,qBACT,IAAK,QACH,MAAO,sBACT,QACE,MACJ,CACF,CAEA,SAAgB,EACd,EACqC,CACrC,GAAI,EAAO,KAAK,WAAa,SAAU,OACvC,IAAM,EAA0C,CAAE,KAAM,OAAQ,EAC1D,EAAmB,EACvB,EAAO,KAAK,OAAO,oBACrB,EAOA,OANI,IACF,EAAe,mBAAqB,GAElC,EAAO,KAAK,OAAO,QAAQ,SAC7B,EAAe,OAAS,EAAO,KAAK,MAAM,QAErC,OAAO,KAAK,CAAc,EAAE,OAAS,EAAI,EAAiB,IAAA,EACnE,CAEA,SAAgB,EACd,EACoB,CACpB,OAAO,EAAQ,OAAO,CAAqB,CAC7C,CAQA,SAAgB,EAAsB,EAAkC,CACtE,MAAO,CAAC,CAAC,EAA8B,CAAK,CAC9C,CAEA,IAAM,EAAU,GAA4B,CAC1C,GAAI,CACF,OAAO,IAAI,IAAI,CAAG,CACpB,MAAQ,CACN,OAAO,IACT,CACF,EAaA,SAAgB,EAAU,EAAY,EAAqB,CACzD,IAAM,EAAO,OAAO,GAAM,SAAW,EAAI,GACnC,EAAO,OAAO,GAAM,SAAW,EAAI,GACzC,GAAI,CAAC,GAAQ,CAAC,EAAM,MAAO,GAC3B,IAAM,EAAO,EAAO,CAAI,EAClB,EAAQ,EAAO,CAAI,EAIzB,MAHI,CAAC,GAAQ,CAAC,EACL,EAAK,QAAQ,OAAQ,EAAE,IAAM,EAAK,QAAQ,OAAQ,EAAE,EAG3D,EAAK,WAAa,EAAM,UACxB,EAAK,OAAS,EAAM,MACpB,EAAK,SAAS,QAAQ,OAAQ,EAAE,IAAM,EAAM,SAAS,QAAQ,OAAQ,EAAE,CAE3E,CA2BA,SAAS,EACP,EACA,EACS,CACT,GAAI,EAAU,OAAS,QAAS,CAC9B,IAAM,EAAS,EAAU,IACzB,OACE,EAAO,OAAS,SAAW,CAAC,CAAC,EAAO,KAAO,EAAU,EAAO,IAAK,CAAM,CAE3E,CAEA,GAAI,EAAU,OAAS,MAAO,CAC5B,IAAM,EAAS,EAAU,IACzB,OACE,EAAO,OAAS,OAAS,CAAC,CAAC,EAAO,KAAO,EAAU,EAAO,IAAK,CAAM,CAEzE,CAGA,OAAO,EAAO,OAAS,SAAW,EAAO,OAAS,EAAU,UAC9D,CAEA,SAAS,EAAU,EAAuB,CACxC,OAAO,EAAM,KAAK,EAAE,YAAY,CAClC,CAOA,SAAgB,EACd,EACoB,CACpB,OAAO,EACJ,KAAK,EAAO,KAAW,CAAE,QAAO,OAAM,EAAE,EACxC,MAAM,EAAG,KAEL,EAAE,MAAM,gBAAkB,IAAM,EAAE,MAAM,gBAAkB,IACtC,EAAE,MAAQ,EAAE,KACpC,EACA,KAAK,CAAE,WAAY,CAAK,CAC7B,CASA,SAAgB,EACd,EACA,EACS,CACT,IAAM,EAAI,EAAU,CAAQ,EAU5B,OATK,EACY,CACf,EAAM,KACN,EAAM,YACN,EAAM,GACN,GAAI,EAAM,UAAY,CAAC,CACzB,EACG,KAAK,GAAG,EACR,YACI,EAAS,SAAS,CAAC,EATX,EAUjB,CASA,SAAgB,EACd,EACA,EACA,EACS,CACT,IAAM,EAAI,EAAU,CAAQ,EAgB5B,OAfK,EACY,CACf,EAAO,KACP,SAAU,EAAS,EAAO,KAAO,IAAA,GACjC,YAAa,EAAS,EAAO,QAAU,IAAA,GACvC,SAAU,EAAS,EAAO,MAAM,KAAK,GAAG,EAAI,IAAA,GAC5C,QAAS,EAAS,EAAO,IAAM,IAAA,GAC/B,GAAc,KACd,GAAc,YACd,GAAc,GACd,GAAI,GAAc,UAAY,CAAC,CACjC,EACG,OAAO,OAAO,EACd,KAAK,GAAG,EACR,YACI,EAAS,SAAS,CAAC,EAfX,EAgBjB,CAOA,SAAgB,EACd,EACA,EAC8B,CAC9B,OAAO,EAAQ,KAAM,GAIZ,EAAwB,CAAK,EAAE,KAAM,GAC1C,EAAuB,EAAO,UAAW,CAAM,CACjD,CACD,CACH"}
1
+ {"version":3,"file":"mcp-marketplace-utils.cjs","names":[],"sources":["../../src/utils/mcp-marketplace-utils.ts"],"sourcesContent":["import { MCPServerConfig } from \"#/types/mcp-server\";\nimport type {\n MCPAuthenticationConfig,\n MCPOAuthClientAuthMethod,\n} from \"#/types/mcp-auth\";\nimport type {\n IntegrationAuthConfig,\n IntegrationCatalogEntry as MarketplaceEntry,\n IntegrationConnectionOption,\n IntegrationOAuthConfig,\n IntegrationTransport,\n} from \"@openhands/extensions/integrations\";\n\nexport type { MarketplaceEntry };\n\ntype McpIntegrationAuthConfig = IntegrationAuthConfig & {\n credentialSecretName?: string;\n saveCredentialAsSecretByDefault?: boolean;\n};\n\nexport type McpMarketplaceConnectionOption = Omit<\n IntegrationConnectionOption,\n \"auth\" | \"provider\" | \"transport\"\n> & {\n provider: \"mcp\";\n transport: IntegrationTransport;\n auth: McpIntegrationAuthConfig;\n};\n\nexport function getMcpConnectionOptions(\n entry: MarketplaceEntry,\n): McpMarketplaceConnectionOption[] {\n return entry.connectionOptions.filter(\n (option): option is McpMarketplaceConnectionOption =>\n option.provider === \"mcp\" && !!option.transport,\n );\n}\n\nexport function getDefaultMcpConnectionOption(\n entry: MarketplaceEntry,\n): McpMarketplaceConnectionOption | undefined {\n return getMcpConnectionOptions(entry)[0];\n}\n\nfunction isLocallyInstallableMcpOption(\n option: McpMarketplaceConnectionOption,\n): boolean {\n if (option.auth.strategy !== \"oauth2\") return true;\n\n const oauth = option.auth.oauth;\n if (!oauth) return false;\n\n // Local agent-server installs only support OAuth flows initiated by the MCP\n // server itself through fastmcp. Catalog entries that specify provider OAuth\n // endpoints still need the hosted integration-auth flow and should not be\n // exposed as locally installable static MCP configs.\n return (\n !oauth.authorizationUrl &&\n !oauth.tokenUrl &&\n !oauth.registrationUrl &&\n !oauth.additionalAuthorizationParams &&\n !oauth.additionalTokenParams\n );\n}\n\nexport function getInstallableMcpConnectionOption(\n entry: MarketplaceEntry,\n): McpMarketplaceConnectionOption | undefined {\n return getMcpConnectionOptions(entry).find(isLocallyInstallableMcpOption);\n}\n\nexport function getDefaultMcpTransport(\n entry: MarketplaceEntry,\n): IntegrationTransport | undefined {\n return getDefaultMcpConnectionOption(entry)?.transport;\n}\n\nfunction toMcpOAuthClientAuthMethod(\n value: IntegrationOAuthConfig[\"clientAuthentication\"] | undefined,\n): MCPOAuthClientAuthMethod | undefined {\n switch (value) {\n case \"none\":\n return \"none\";\n case \"body\":\n return \"client_secret_post\";\n case \"basic\":\n return \"client_secret_basic\";\n default:\n return undefined;\n }\n}\n\nexport function getMcpOAuthAuthenticationConfig(\n option: McpMarketplaceConnectionOption,\n): MCPAuthenticationConfig | undefined {\n if (option.auth.strategy !== \"oauth2\") return undefined;\n const authentication: MCPAuthenticationConfig = { type: \"oauth\" };\n const clientAuthMethod = toMcpOAuthClientAuthMethod(\n option.auth.oauth?.clientAuthentication,\n );\n if (clientAuthMethod) {\n authentication.client_auth_method = clientAuthMethod;\n }\n if (option.auth.oauth?.scopes?.length) {\n authentication.scopes = option.auth.oauth.scopes;\n }\n return Object.keys(authentication).length > 1 ? authentication : undefined;\n}\n\nexport function getMcpMarketplaceCatalog(\n catalog: MarketplaceEntry[],\n): MarketplaceEntry[] {\n return catalog.filter(isMcpInstallableEntry);\n}\n\n/**\n * Whether this backend can install/configure the entry as an MCP server.\n * Entries whose only connection options use another provider or transport\n * (e.g. Jira's HTTP/OpenAPI option) exist in the catalog but cannot go\n * through the local MCP install flow.\n */\nexport function isMcpInstallableEntry(entry: MarketplaceEntry): boolean {\n return !!getDefaultMcpConnectionOption(entry);\n}\n\nconst tryUrl = (raw: string): URL | null => {\n try {\n return new URL(raw);\n } catch {\n return null;\n }\n};\n\n/**\n * Loose URL match that ignores query strings, trailing slashes, and\n * default ports. We want clicking \"Linear\" to flag the entry as\n * installed even if the user pasted the URL with extra trailing slash\n * or a different port-equivalent variant.\n *\n * Defensive against runtime data that doesn't match the static type:\n * if either input is not a string (e.g. parsed from an older settings\n * blob), we fall through the URL parsing path and the safe trim\n * fallback below, never calling `.replace` on undefined.\n */\nexport function urlsMatch(a: unknown, b: unknown): boolean {\n const aStr = typeof a === \"string\" ? a : \"\";\n const bStr = typeof b === \"string\" ? b : \"\";\n if (!aStr || !bStr) return false;\n const left = tryUrl(aStr);\n const right = tryUrl(bStr);\n if (!left || !right) {\n return aStr.replace(/\\/+$/, \"\") === bStr.replace(/\\/+$/, \"\");\n }\n return (\n left.protocol === right.protocol &&\n left.host === right.host &&\n left.pathname.replace(/\\/+$/, \"\") === right.pathname.replace(/\\/+$/, \"\")\n );\n}\n\n/**\n * Decide whether a marketplace template is already represented by one\n * of the installed MCP servers. Used to render an \"Installed\" badge on\n * the marketplace tile. Returns the first matching server, or null.\n */\nexport function findInstalledMatch(\n transport: IntegrationTransport,\n servers: MCPServerConfig[],\n): MCPServerConfig | null {\n return (\n servers.find((server) => transportMatchesServer(transport, server)) ?? null\n );\n}\n\nexport function findInstalledEntryMatch(\n entry: MarketplaceEntry,\n servers: MCPServerConfig[],\n): MCPServerConfig | null {\n for (const option of getMcpConnectionOptions(entry)) {\n const match = findInstalledMatch(option.transport, servers);\n if (match) return match;\n }\n return null;\n}\n\nfunction transportMatchesServer(\n transport: IntegrationTransport,\n server: MCPServerConfig,\n): boolean {\n if (transport.kind === \"shttp\") {\n const tplUrl = transport.url;\n return (\n server.type === \"shttp\" && !!server.url && urlsMatch(server.url, tplUrl)\n );\n }\n\n if (transport.kind === \"sse\") {\n const tplUrl = transport.url;\n return (\n server.type === \"sse\" && !!server.url && urlsMatch(server.url, tplUrl)\n );\n }\n\n // stdio: match on the registered server name.\n return server.type === \"stdio\" && server.name === transport.serverName;\n}\n\nfunction normalize(query: string): string {\n return query.trim().toLowerCase();\n}\n\n/**\n * Case-insensitive substring match against the catalog entry's\n * user-visible identity (name, description, id, keywords). Empty\n * queries always match.\n */\nexport function getMarketplaceEntriesByPopularity(\n catalog: MarketplaceEntry[],\n): MarketplaceEntry[] {\n return catalog\n .map((entry, index) => ({ entry, index }))\n .sort((a, b) => {\n const byPopularity =\n (b.entry.popularityRank ?? 0) - (a.entry.popularityRank ?? 0);\n return byPopularity || a.index - b.index;\n })\n .map(({ entry }) => entry);\n}\n\nexport function getMarketplaceEntryById(\n id: string,\n catalog: MarketplaceEntry[],\n): MarketplaceEntry | undefined {\n return catalog.find((entry) => entry.id === id);\n}\n\nexport function marketplaceEntryMatchesQuery(\n entry: MarketplaceEntry,\n rawQuery: string,\n): boolean {\n const q = normalize(rawQuery);\n if (!q) return true;\n const haystack = [\n entry.name,\n entry.description,\n entry.id,\n ...(entry.keywords ?? []),\n ]\n .join(\" \")\n .toLowerCase();\n return haystack.includes(q);\n}\n\n/**\n * Search match for an installed (already-configured) server. We\n * search the server's own identifying fields and — if it's a catalog\n * entry — its catalog name/keywords too, so typing \"Slack\" matches\n * the installed Slack tile even though the persisted server is just\n * `{ type: \"stdio\", name: \"slack\", ... }`.\n */\nexport function installedServerMatchesQuery(\n server: MCPServerConfig,\n catalogEntry: MarketplaceEntry | undefined,\n rawQuery: string,\n): boolean {\n const q = normalize(rawQuery);\n if (!q) return true;\n const haystack = [\n server.type,\n \"name\" in server ? server.name : undefined,\n \"command\" in server ? server.command : undefined,\n \"args\" in server ? server.args?.join(\" \") : undefined,\n \"url\" in server ? server.url : undefined,\n catalogEntry?.name,\n catalogEntry?.description,\n catalogEntry?.id,\n ...(catalogEntry?.keywords ?? []),\n ]\n .filter(Boolean)\n .join(\" \")\n .toLowerCase();\n return haystack.includes(q);\n}\n\n/**\n * Look up the catalog entry that best matches an installed server.\n * Mirrors the lookup used in `installed-server-card.tsx` for\n * rendering the friendly icon.\n */\nexport function findCatalogEntryForServer(\n server: MCPServerConfig,\n catalog: MarketplaceEntry[],\n): MarketplaceEntry | undefined {\n return catalog.find((entry) => {\n // Check every MCP option rather than only the default. Some unified\n // integration entries default to OAuth-hosted MCP while still exposing\n // an API/stdio option; existing installed servers should match either.\n return getMcpConnectionOptions(entry).some((option) =>\n transportMatchesServer(option.transport, server),\n );\n });\n}\n"],"mappings":"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"}
@@ -49,6 +49,16 @@ function u(e, t) {
49
49
  return !i || !a ? n.replace(/\/+$/, "") === r.replace(/\/+$/, "") : i.protocol === a.protocol && i.host === a.host && i.pathname.replace(/\/+$/, "") === a.pathname.replace(/\/+$/, "");
50
50
  }
51
51
  function d(e, t) {
52
+ return t.find((t) => p(e, t)) ?? null;
53
+ }
54
+ function f(t, n) {
55
+ for (let r of e(t)) {
56
+ let e = d(r.transport, n);
57
+ if (e) return e;
58
+ }
59
+ return null;
60
+ }
61
+ function p(e, t) {
52
62
  if (e.kind === "shttp") {
53
63
  let n = e.url;
54
64
  return t.type === "shttp" && !!t.url && u(t.url, n);
@@ -59,17 +69,20 @@ function d(e, t) {
59
69
  }
60
70
  return t.type === "stdio" && t.name === e.serverName;
61
71
  }
62
- function f(e) {
72
+ function m(e) {
63
73
  return e.trim().toLowerCase();
64
74
  }
65
- function p(e) {
75
+ function h(e) {
66
76
  return e.map((e, t) => ({
67
77
  entry: e,
68
78
  index: t
69
79
  })).sort((e, t) => (t.entry.popularityRank ?? 0) - (e.entry.popularityRank ?? 0) || e.index - t.index).map(({ entry: e }) => e);
70
80
  }
71
- function m(e, t) {
72
- let n = f(t);
81
+ function g(e, t) {
82
+ return t.find((t) => t.id === e);
83
+ }
84
+ function _(e, t) {
85
+ let n = m(t);
73
86
  return n ? [
74
87
  e.name,
75
88
  e.description,
@@ -77,8 +90,8 @@ function m(e, t) {
77
90
  ...e.keywords ?? []
78
91
  ].join(" ").toLowerCase().includes(n) : !0;
79
92
  }
80
- function h(e, t, n) {
81
- let r = f(n);
93
+ function v(e, t, n) {
94
+ let r = m(n);
82
95
  return r ? [
83
96
  e.type,
84
97
  "name" in e ? e.name : void 0,
@@ -91,10 +104,10 @@ function h(e, t, n) {
91
104
  ...t?.keywords ?? []
92
105
  ].filter(Boolean).join(" ").toLowerCase().includes(r) : !0;
93
106
  }
94
- function g(t, n) {
95
- return n.find((n) => e(n).some((e) => d(e.transport, t)));
107
+ function y(t, n) {
108
+ return n.find((n) => e(n).some((e) => p(e.transport, t)));
96
109
  }
97
110
  //#endregion
98
- export { g as findCatalogEntryForServer, i as getDefaultMcpTransport, r as getInstallableMcpConnectionOption, p as getMarketplaceEntriesByPopularity, s as getMcpMarketplaceCatalog, o as getMcpOAuthAuthenticationConfig, h as installedServerMatchesQuery, m as marketplaceEntryMatchesQuery };
111
+ export { y as findCatalogEntryForServer, f as findInstalledEntryMatch, i as getDefaultMcpTransport, r as getInstallableMcpConnectionOption, h as getMarketplaceEntriesByPopularity, g as getMarketplaceEntryById, s as getMcpMarketplaceCatalog, o as getMcpOAuthAuthenticationConfig, v as installedServerMatchesQuery, c as isMcpInstallableEntry, _ as marketplaceEntryMatchesQuery };
99
112
 
100
113
  //# sourceMappingURL=mcp-marketplace-utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-marketplace-utils.js","names":[],"sources":["../../src/utils/mcp-marketplace-utils.ts"],"sourcesContent":["import { MCPServerConfig } from \"#/types/mcp-server\";\nimport type {\n MCPAuthenticationConfig,\n MCPOAuthClientAuthMethod,\n} from \"#/types/mcp-auth\";\nimport type {\n IntegrationAuthConfig,\n IntegrationCatalogEntry as MarketplaceEntry,\n IntegrationConnectionOption,\n IntegrationOAuthConfig,\n IntegrationTransport,\n} from \"@openhands/extensions/integrations\";\n\nexport type { MarketplaceEntry };\n\ntype McpIntegrationAuthConfig = IntegrationAuthConfig & {\n credentialSecretName?: string;\n saveCredentialAsSecretByDefault?: boolean;\n};\n\nexport type McpMarketplaceConnectionOption = Omit<\n IntegrationConnectionOption,\n \"auth\" | \"provider\" | \"transport\"\n> & {\n provider: \"mcp\";\n transport: IntegrationTransport;\n auth: McpIntegrationAuthConfig;\n};\n\nexport function getMcpConnectionOptions(\n entry: MarketplaceEntry,\n): McpMarketplaceConnectionOption[] {\n return entry.connectionOptions.filter(\n (option): option is McpMarketplaceConnectionOption =>\n option.provider === \"mcp\" && !!option.transport,\n );\n}\n\nexport function getDefaultMcpConnectionOption(\n entry: MarketplaceEntry,\n): McpMarketplaceConnectionOption | undefined {\n return getMcpConnectionOptions(entry)[0];\n}\n\nfunction isLocallyInstallableMcpOption(\n option: McpMarketplaceConnectionOption,\n): boolean {\n if (option.auth.strategy !== \"oauth2\") return true;\n\n const oauth = option.auth.oauth;\n if (!oauth) return false;\n\n // Local agent-server installs only support OAuth flows initiated by the MCP\n // server itself through fastmcp. Catalog entries that specify provider OAuth\n // endpoints still need the hosted integration-auth flow and should not be\n // exposed as locally installable static MCP configs.\n return (\n !oauth.authorizationUrl &&\n !oauth.tokenUrl &&\n !oauth.registrationUrl &&\n !oauth.additionalAuthorizationParams &&\n !oauth.additionalTokenParams\n );\n}\n\nexport function getInstallableMcpConnectionOption(\n entry: MarketplaceEntry,\n): McpMarketplaceConnectionOption | undefined {\n return getMcpConnectionOptions(entry).find(isLocallyInstallableMcpOption);\n}\n\nexport function getDefaultMcpTransport(\n entry: MarketplaceEntry,\n): IntegrationTransport | undefined {\n return getDefaultMcpConnectionOption(entry)?.transport;\n}\n\nfunction toMcpOAuthClientAuthMethod(\n value: IntegrationOAuthConfig[\"clientAuthentication\"] | undefined,\n): MCPOAuthClientAuthMethod | undefined {\n switch (value) {\n case \"none\":\n return \"none\";\n case \"body\":\n return \"client_secret_post\";\n case \"basic\":\n return \"client_secret_basic\";\n default:\n return undefined;\n }\n}\n\nexport function getMcpOAuthAuthenticationConfig(\n option: McpMarketplaceConnectionOption,\n): MCPAuthenticationConfig | undefined {\n if (option.auth.strategy !== \"oauth2\") return undefined;\n const authentication: MCPAuthenticationConfig = { type: \"oauth\" };\n const clientAuthMethod = toMcpOAuthClientAuthMethod(\n option.auth.oauth?.clientAuthentication,\n );\n if (clientAuthMethod) {\n authentication.client_auth_method = clientAuthMethod;\n }\n if (option.auth.oauth?.scopes?.length) {\n authentication.scopes = option.auth.oauth.scopes;\n }\n return Object.keys(authentication).length > 1 ? authentication : undefined;\n}\n\nexport function getMcpMarketplaceCatalog(\n catalog: MarketplaceEntry[],\n): MarketplaceEntry[] {\n return catalog.filter(isMcpInstallableEntry);\n}\n\n/**\n * Whether this backend can install/configure the entry as an MCP server.\n * Entries whose only connection options use another provider or transport\n * (e.g. Jira's HTTP/OpenAPI option) exist in the catalog but cannot go\n * through the local MCP install flow.\n */\nexport function isMcpInstallableEntry(entry: MarketplaceEntry): boolean {\n return !!getDefaultMcpConnectionOption(entry);\n}\n\nconst tryUrl = (raw: string): URL | null => {\n try {\n return new URL(raw);\n } catch {\n return null;\n }\n};\n\n/**\n * Loose URL match that ignores query strings, trailing slashes, and\n * default ports. We want clicking \"Linear\" to flag the entry as\n * installed even if the user pasted the URL with extra trailing slash\n * or a different port-equivalent variant.\n *\n * Defensive against runtime data that doesn't match the static type:\n * if either input is not a string (e.g. parsed from an older settings\n * blob), we fall through the URL parsing path and the safe trim\n * fallback below, never calling `.replace` on undefined.\n */\nexport function urlsMatch(a: unknown, b: unknown): boolean {\n const aStr = typeof a === \"string\" ? a : \"\";\n const bStr = typeof b === \"string\" ? b : \"\";\n if (!aStr || !bStr) return false;\n const left = tryUrl(aStr);\n const right = tryUrl(bStr);\n if (!left || !right) {\n return aStr.replace(/\\/+$/, \"\") === bStr.replace(/\\/+$/, \"\");\n }\n return (\n left.protocol === right.protocol &&\n left.host === right.host &&\n left.pathname.replace(/\\/+$/, \"\") === right.pathname.replace(/\\/+$/, \"\")\n );\n}\n\n/**\n * Decide whether a marketplace template is already represented by one\n * of the installed MCP servers. Used to render an \"Installed\" badge on\n * the marketplace tile. Returns the first matching server, or null.\n */\nexport function findInstalledMatch(\n transport: IntegrationTransport,\n servers: MCPServerConfig[],\n): MCPServerConfig | null {\n return (\n servers.find((server) => transportMatchesServer(transport, server)) ?? null\n );\n}\n\nexport function findInstalledEntryMatch(\n entry: MarketplaceEntry,\n servers: MCPServerConfig[],\n): MCPServerConfig | null {\n for (const option of getMcpConnectionOptions(entry)) {\n const match = findInstalledMatch(option.transport, servers);\n if (match) return match;\n }\n return null;\n}\n\nfunction transportMatchesServer(\n transport: IntegrationTransport,\n server: MCPServerConfig,\n): boolean {\n if (transport.kind === \"shttp\") {\n const tplUrl = transport.url;\n return (\n server.type === \"shttp\" && !!server.url && urlsMatch(server.url, tplUrl)\n );\n }\n\n if (transport.kind === \"sse\") {\n const tplUrl = transport.url;\n return (\n server.type === \"sse\" && !!server.url && urlsMatch(server.url, tplUrl)\n );\n }\n\n // stdio: match on the registered server name.\n return server.type === \"stdio\" && server.name === transport.serverName;\n}\n\nfunction normalize(query: string): string {\n return query.trim().toLowerCase();\n}\n\n/**\n * Case-insensitive substring match against the catalog entry's\n * user-visible identity (name, description, id, keywords). Empty\n * queries always match.\n */\nexport function getMarketplaceEntriesByPopularity(\n catalog: MarketplaceEntry[],\n): MarketplaceEntry[] {\n return catalog\n .map((entry, index) => ({ entry, index }))\n .sort((a, b) => {\n const byPopularity =\n (b.entry.popularityRank ?? 0) - (a.entry.popularityRank ?? 0);\n return byPopularity || a.index - b.index;\n })\n .map(({ entry }) => entry);\n}\n\nexport function getMarketplaceEntryById(\n id: string,\n catalog: MarketplaceEntry[],\n): MarketplaceEntry | undefined {\n return catalog.find((entry) => entry.id === id);\n}\n\nexport function marketplaceEntryMatchesQuery(\n entry: MarketplaceEntry,\n rawQuery: string,\n): boolean {\n const q = normalize(rawQuery);\n if (!q) return true;\n const haystack = [\n entry.name,\n entry.description,\n entry.id,\n ...(entry.keywords ?? []),\n ]\n .join(\" \")\n .toLowerCase();\n return haystack.includes(q);\n}\n\n/**\n * Search match for an installed (already-configured) server. We\n * search the server's own identifying fields and — if it's a catalog\n * entry — its catalog name/keywords too, so typing \"Slack\" matches\n * the installed Slack tile even though the persisted server is just\n * `{ type: \"stdio\", name: \"slack\", ... }`.\n */\nexport function installedServerMatchesQuery(\n server: MCPServerConfig,\n catalogEntry: MarketplaceEntry | undefined,\n rawQuery: string,\n): boolean {\n const q = normalize(rawQuery);\n if (!q) return true;\n const haystack = [\n server.type,\n \"name\" in server ? server.name : undefined,\n \"command\" in server ? server.command : undefined,\n \"args\" in server ? server.args?.join(\" \") : undefined,\n \"url\" in server ? server.url : undefined,\n catalogEntry?.name,\n catalogEntry?.description,\n catalogEntry?.id,\n ...(catalogEntry?.keywords ?? []),\n ]\n .filter(Boolean)\n .join(\" \")\n .toLowerCase();\n return haystack.includes(q);\n}\n\n/**\n * Look up the catalog entry that best matches an installed server.\n * Mirrors the lookup used in `installed-server-card.tsx` for\n * rendering the friendly icon.\n */\nexport function findCatalogEntryForServer(\n server: MCPServerConfig,\n catalog: MarketplaceEntry[],\n): MarketplaceEntry | undefined {\n return catalog.find((entry) => {\n // Check every MCP option rather than only the default. Some unified\n // integration entries default to OAuth-hosted MCP while still exposing\n // an API/stdio option; existing installed servers should match either.\n return getMcpConnectionOptions(entry).some((option) =>\n transportMatchesServer(option.transport, server),\n );\n });\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"mcp-marketplace-utils.js","names":[],"sources":["../../src/utils/mcp-marketplace-utils.ts"],"sourcesContent":["import { MCPServerConfig } from \"#/types/mcp-server\";\nimport type {\n MCPAuthenticationConfig,\n MCPOAuthClientAuthMethod,\n} from \"#/types/mcp-auth\";\nimport type {\n IntegrationAuthConfig,\n IntegrationCatalogEntry as MarketplaceEntry,\n IntegrationConnectionOption,\n IntegrationOAuthConfig,\n IntegrationTransport,\n} from \"@openhands/extensions/integrations\";\n\nexport type { MarketplaceEntry };\n\ntype McpIntegrationAuthConfig = IntegrationAuthConfig & {\n credentialSecretName?: string;\n saveCredentialAsSecretByDefault?: boolean;\n};\n\nexport type McpMarketplaceConnectionOption = Omit<\n IntegrationConnectionOption,\n \"auth\" | \"provider\" | \"transport\"\n> & {\n provider: \"mcp\";\n transport: IntegrationTransport;\n auth: McpIntegrationAuthConfig;\n};\n\nexport function getMcpConnectionOptions(\n entry: MarketplaceEntry,\n): McpMarketplaceConnectionOption[] {\n return entry.connectionOptions.filter(\n (option): option is McpMarketplaceConnectionOption =>\n option.provider === \"mcp\" && !!option.transport,\n );\n}\n\nexport function getDefaultMcpConnectionOption(\n entry: MarketplaceEntry,\n): McpMarketplaceConnectionOption | undefined {\n return getMcpConnectionOptions(entry)[0];\n}\n\nfunction isLocallyInstallableMcpOption(\n option: McpMarketplaceConnectionOption,\n): boolean {\n if (option.auth.strategy !== \"oauth2\") return true;\n\n const oauth = option.auth.oauth;\n if (!oauth) return false;\n\n // Local agent-server installs only support OAuth flows initiated by the MCP\n // server itself through fastmcp. Catalog entries that specify provider OAuth\n // endpoints still need the hosted integration-auth flow and should not be\n // exposed as locally installable static MCP configs.\n return (\n !oauth.authorizationUrl &&\n !oauth.tokenUrl &&\n !oauth.registrationUrl &&\n !oauth.additionalAuthorizationParams &&\n !oauth.additionalTokenParams\n );\n}\n\nexport function getInstallableMcpConnectionOption(\n entry: MarketplaceEntry,\n): McpMarketplaceConnectionOption | undefined {\n return getMcpConnectionOptions(entry).find(isLocallyInstallableMcpOption);\n}\n\nexport function getDefaultMcpTransport(\n entry: MarketplaceEntry,\n): IntegrationTransport | undefined {\n return getDefaultMcpConnectionOption(entry)?.transport;\n}\n\nfunction toMcpOAuthClientAuthMethod(\n value: IntegrationOAuthConfig[\"clientAuthentication\"] | undefined,\n): MCPOAuthClientAuthMethod | undefined {\n switch (value) {\n case \"none\":\n return \"none\";\n case \"body\":\n return \"client_secret_post\";\n case \"basic\":\n return \"client_secret_basic\";\n default:\n return undefined;\n }\n}\n\nexport function getMcpOAuthAuthenticationConfig(\n option: McpMarketplaceConnectionOption,\n): MCPAuthenticationConfig | undefined {\n if (option.auth.strategy !== \"oauth2\") return undefined;\n const authentication: MCPAuthenticationConfig = { type: \"oauth\" };\n const clientAuthMethod = toMcpOAuthClientAuthMethod(\n option.auth.oauth?.clientAuthentication,\n );\n if (clientAuthMethod) {\n authentication.client_auth_method = clientAuthMethod;\n }\n if (option.auth.oauth?.scopes?.length) {\n authentication.scopes = option.auth.oauth.scopes;\n }\n return Object.keys(authentication).length > 1 ? authentication : undefined;\n}\n\nexport function getMcpMarketplaceCatalog(\n catalog: MarketplaceEntry[],\n): MarketplaceEntry[] {\n return catalog.filter(isMcpInstallableEntry);\n}\n\n/**\n * Whether this backend can install/configure the entry as an MCP server.\n * Entries whose only connection options use another provider or transport\n * (e.g. Jira's HTTP/OpenAPI option) exist in the catalog but cannot go\n * through the local MCP install flow.\n */\nexport function isMcpInstallableEntry(entry: MarketplaceEntry): boolean {\n return !!getDefaultMcpConnectionOption(entry);\n}\n\nconst tryUrl = (raw: string): URL | null => {\n try {\n return new URL(raw);\n } catch {\n return null;\n }\n};\n\n/**\n * Loose URL match that ignores query strings, trailing slashes, and\n * default ports. We want clicking \"Linear\" to flag the entry as\n * installed even if the user pasted the URL with extra trailing slash\n * or a different port-equivalent variant.\n *\n * Defensive against runtime data that doesn't match the static type:\n * if either input is not a string (e.g. parsed from an older settings\n * blob), we fall through the URL parsing path and the safe trim\n * fallback below, never calling `.replace` on undefined.\n */\nexport function urlsMatch(a: unknown, b: unknown): boolean {\n const aStr = typeof a === \"string\" ? a : \"\";\n const bStr = typeof b === \"string\" ? b : \"\";\n if (!aStr || !bStr) return false;\n const left = tryUrl(aStr);\n const right = tryUrl(bStr);\n if (!left || !right) {\n return aStr.replace(/\\/+$/, \"\") === bStr.replace(/\\/+$/, \"\");\n }\n return (\n left.protocol === right.protocol &&\n left.host === right.host &&\n left.pathname.replace(/\\/+$/, \"\") === right.pathname.replace(/\\/+$/, \"\")\n );\n}\n\n/**\n * Decide whether a marketplace template is already represented by one\n * of the installed MCP servers. Used to render an \"Installed\" badge on\n * the marketplace tile. Returns the first matching server, or null.\n */\nexport function findInstalledMatch(\n transport: IntegrationTransport,\n servers: MCPServerConfig[],\n): MCPServerConfig | null {\n return (\n servers.find((server) => transportMatchesServer(transport, server)) ?? null\n );\n}\n\nexport function findInstalledEntryMatch(\n entry: MarketplaceEntry,\n servers: MCPServerConfig[],\n): MCPServerConfig | null {\n for (const option of getMcpConnectionOptions(entry)) {\n const match = findInstalledMatch(option.transport, servers);\n if (match) return match;\n }\n return null;\n}\n\nfunction transportMatchesServer(\n transport: IntegrationTransport,\n server: MCPServerConfig,\n): boolean {\n if (transport.kind === \"shttp\") {\n const tplUrl = transport.url;\n return (\n server.type === \"shttp\" && !!server.url && urlsMatch(server.url, tplUrl)\n );\n }\n\n if (transport.kind === \"sse\") {\n const tplUrl = transport.url;\n return (\n server.type === \"sse\" && !!server.url && urlsMatch(server.url, tplUrl)\n );\n }\n\n // stdio: match on the registered server name.\n return server.type === \"stdio\" && server.name === transport.serverName;\n}\n\nfunction normalize(query: string): string {\n return query.trim().toLowerCase();\n}\n\n/**\n * Case-insensitive substring match against the catalog entry's\n * user-visible identity (name, description, id, keywords). Empty\n * queries always match.\n */\nexport function getMarketplaceEntriesByPopularity(\n catalog: MarketplaceEntry[],\n): MarketplaceEntry[] {\n return catalog\n .map((entry, index) => ({ entry, index }))\n .sort((a, b) => {\n const byPopularity =\n (b.entry.popularityRank ?? 0) - (a.entry.popularityRank ?? 0);\n return byPopularity || a.index - b.index;\n })\n .map(({ entry }) => entry);\n}\n\nexport function getMarketplaceEntryById(\n id: string,\n catalog: MarketplaceEntry[],\n): MarketplaceEntry | undefined {\n return catalog.find((entry) => entry.id === id);\n}\n\nexport function marketplaceEntryMatchesQuery(\n entry: MarketplaceEntry,\n rawQuery: string,\n): boolean {\n const q = normalize(rawQuery);\n if (!q) return true;\n const haystack = [\n entry.name,\n entry.description,\n entry.id,\n ...(entry.keywords ?? []),\n ]\n .join(\" \")\n .toLowerCase();\n return haystack.includes(q);\n}\n\n/**\n * Search match for an installed (already-configured) server. We\n * search the server's own identifying fields and — if it's a catalog\n * entry — its catalog name/keywords too, so typing \"Slack\" matches\n * the installed Slack tile even though the persisted server is just\n * `{ type: \"stdio\", name: \"slack\", ... }`.\n */\nexport function installedServerMatchesQuery(\n server: MCPServerConfig,\n catalogEntry: MarketplaceEntry | undefined,\n rawQuery: string,\n): boolean {\n const q = normalize(rawQuery);\n if (!q) return true;\n const haystack = [\n server.type,\n \"name\" in server ? server.name : undefined,\n \"command\" in server ? server.command : undefined,\n \"args\" in server ? server.args?.join(\" \") : undefined,\n \"url\" in server ? server.url : undefined,\n catalogEntry?.name,\n catalogEntry?.description,\n catalogEntry?.id,\n ...(catalogEntry?.keywords ?? []),\n ]\n .filter(Boolean)\n .join(\" \")\n .toLowerCase();\n return haystack.includes(q);\n}\n\n/**\n * Look up the catalog entry that best matches an installed server.\n * Mirrors the lookup used in `installed-server-card.tsx` for\n * rendering the friendly icon.\n */\nexport function findCatalogEntryForServer(\n server: MCPServerConfig,\n catalog: MarketplaceEntry[],\n): MarketplaceEntry | undefined {\n return catalog.find((entry) => {\n // Check every MCP option rather than only the default. Some unified\n // integration entries default to OAuth-hosted MCP while still exposing\n // an API/stdio option; existing installed servers should match either.\n return getMcpConnectionOptions(entry).some((option) =>\n transportMatchesServer(option.transport, server),\n );\n });\n}\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- require("../_virtual/_rolldown/runtime.cjs");var e={"github.com":`github`,"gitlab.com":`gitlab`,"bitbucket.org":`bitbucket`,"dev.azure.com":`azure_devops`};function t(e){return e.replace(/\.git$/,``)}function n(t){return t?e[t.toLowerCase()]??null:null}function r(e){let t=e.split(`/`).filter(Boolean),n=t.indexOf(`_git`);return n===-1?t.join(`/`):[...t.slice(0,n),...t.slice(n+1)].join(`/`)}function i(e,i,a){let o=t(a.replace(/^\/+/,``)),s=n(i);return{url:e,host:i,repository:(s===`azure_devops`?r(o):o)||null,provider:s}}function a(e){let t=e?.trim();if(!t)return null;let n=t.match(/^[^@\s]+@([^:\s]+):(.+)$/);if(n){let e=n[1];return i(t,e,n[2])}try{let e=new URL(t);return i(t,e.hostname||null,e.pathname)}catch{return null}}exports.parseGitRemoteUrl=a;
1
+ require("../_virtual/_rolldown/runtime.cjs");var e={"github.com":`github`,"gitlab.com":`gitlab`,"bitbucket.org":`bitbucket`,"dev.azure.com":`azure_devops`};function t(e){return e.replace(/\.git$/,``)}function n(t){return t?e[t.toLowerCase()]??null:null}function r(e){let t=e.split(`/`).filter(Boolean),n=t.indexOf(`_git`);return n===-1?t.join(`/`):[...t.slice(0,n),...t.slice(n+1)].join(`/`)}function i(e,i,a){let o=t(a.replace(/^\/+|\/+$/g,``)),s=n(i);return{url:e,host:i,repository:(s===`azure_devops`?r(o):o)||null,provider:s}}function a(e){let t=e?.trim();if(!t)return null;try{let e=new URL(t);if(e.hostname)return i(t,e.hostname,e.pathname)}catch{}let n=t.match(/^[^@\s]+@([^:\s]+):(.+)$/);if(n){let e=n[1];return i(t,e,n[2])}return null}exports.parseGitRemoteUrl=a;
2
2
  //# sourceMappingURL=parse-git-remote-url.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"parse-git-remote-url.cjs","names":[],"sources":["../../src/utils/parse-git-remote-url.ts"],"sourcesContent":["import { Provider } from \"#/types/settings\";\n\nexport interface ParsedGitRemoteUrl {\n /** Original URL, trimmed. */\n url: string;\n /** Hostname of the remote (e.g. `github.com`, `git.example.com`). */\n host: string | null;\n /** Path-style identifier, normalized to `owner/repo` (no leading slash, no `.git` suffix). */\n repository: string | null;\n /** Best-effort provider detection from the host. `null` for unrecognized/self-hosted hosts. */\n provider: Provider | null;\n}\n\nconst KNOWN_HOSTS: Record<string, Provider> = {\n \"github.com\": \"github\",\n \"gitlab.com\": \"gitlab\",\n \"bitbucket.org\": \"bitbucket\",\n \"dev.azure.com\": \"azure_devops\",\n};\n\nfunction stripGitSuffix(path: string): string {\n return path.replace(/\\.git$/, \"\");\n}\n\nfunction detectProvider(host: string | null): Provider | null {\n if (!host) return null;\n return KNOWN_HOSTS[host.toLowerCase()] ?? null;\n}\n\nfunction normalizeAzureDevOpsPath(path: string): string {\n // Azure paths look like `org/project/_git/repo` or `org/_git/repo`.\n // Normalize to `org/project/repo` (or `org/repo`) so it lines up with\n // constructBranchUrl's expectations.\n const segments = path.split(\"/\").filter(Boolean);\n const gitIndex = segments.indexOf(\"_git\");\n if (gitIndex === -1) return segments.join(\"/\");\n return [...segments.slice(0, gitIndex), ...segments.slice(gitIndex + 1)].join(\n \"/\",\n );\n}\n\nfunction buildParsedGitRemoteUrl(\n url: string,\n host: string | null,\n rawPath: string,\n): ParsedGitRemoteUrl {\n const path = stripGitSuffix(rawPath.replace(/^\\/+/, \"\"));\n const provider = detectProvider(host);\n const repository =\n provider === \"azure_devops\" ? normalizeAzureDevOpsPath(path) : path;\n\n return {\n url,\n host,\n repository: repository || null,\n provider,\n };\n}\n\n/**\n * Parse a git remote URL (HTTPS, SSH, or `git@host:path` shorthand) into its\n * host, repository (`owner/repo`), and best-effort provider.\n *\n * Returns `null` if the URL is empty or unparseable. Unknown hosts still\n * resolve `host` and `repository`; only `provider` is left `null`.\n */\nexport function parseGitRemoteUrl(\n remoteUrl: string | null | undefined,\n): ParsedGitRemoteUrl | null {\n const url = remoteUrl?.trim();\n if (!url) return null;\n\n // git@host:owner/repo(.git)\n const scpMatch = url.match(/^[^@\\s]+@([^:\\s]+):(.+)$/);\n if (scpMatch) {\n const host = scpMatch[1];\n return buildParsedGitRemoteUrl(url, host, scpMatch[2]);\n }\n\n // ssh://, https://, http://, git://\n try {\n const parsed = new URL(url);\n return buildParsedGitRemoteUrl(\n url,\n parsed.hostname || null,\n parsed.pathname,\n );\n } catch {\n return null;\n }\n}\n"],"mappings":"6CAaA,IAAM,EAAwC,CAC5C,aAAc,SACd,aAAc,SACd,gBAAiB,YACjB,gBAAiB,cACnB,EAEA,SAAS,EAAe,EAAsB,CAC5C,OAAO,EAAK,QAAQ,SAAU,EAAE,CAClC,CAEA,SAAS,EAAe,EAAsC,CAE5D,OADK,EACE,EAAY,EAAK,YAAY,IAAM,KADxB,IAEpB,CAEA,SAAS,EAAyB,EAAsB,CAItD,IAAM,EAAW,EAAK,MAAM,GAAG,EAAE,OAAO,OAAO,EACzC,EAAW,EAAS,QAAQ,MAAM,EAExC,OADI,IAAa,GAAW,EAAS,KAAK,GAAG,EACtC,CAAC,GAAG,EAAS,MAAM,EAAG,CAAQ,EAAG,GAAG,EAAS,MAAM,EAAW,CAAC,CAAC,EAAE,KACvE,GACF,CACF,CAEA,SAAS,EACP,EACA,EACA,EACoB,CACpB,IAAM,EAAO,EAAe,EAAQ,QAAQ,OAAQ,EAAE,CAAC,EACjD,EAAW,EAAe,CAAI,EAIpC,MAAO,CACL,MACA,OACA,YALA,IAAa,eAAiB,EAAyB,CAAI,EAAI,IAKrC,KAC1B,UACF,CACF,CASA,SAAgB,EACd,EAC2B,CAC3B,IAAM,EAAM,GAAW,KAAK,EAC5B,GAAI,CAAC,EAAK,OAAO,KAGjB,IAAM,EAAW,EAAI,MAAM,0BAA0B,EACrD,GAAI,EAAU,CACZ,IAAM,EAAO,EAAS,GACtB,OAAO,EAAwB,EAAK,EAAM,EAAS,EAAE,CACvD,CAGA,GAAI,CACF,IAAM,EAAS,IAAI,IAAI,CAAG,EAC1B,OAAO,EACL,EACA,EAAO,UAAY,KACnB,EAAO,QACT,CACF,MAAQ,CACN,OAAO,IACT,CACF"}
1
+ {"version":3,"file":"parse-git-remote-url.cjs","names":[],"sources":["../../src/utils/parse-git-remote-url.ts"],"sourcesContent":["import { Provider } from \"#/types/settings\";\n\nexport interface ParsedGitRemoteUrl {\n /** Original URL, trimmed. */\n url: string;\n /** Hostname of the remote (e.g. `github.com`, `git.example.com`). */\n host: string | null;\n /** Path-style identifier, normalized to `owner/repo` (no leading slash, no `.git` suffix). */\n repository: string | null;\n /** Best-effort provider detection from the host. `null` for unrecognized/self-hosted hosts. */\n provider: Provider | null;\n}\n\nconst KNOWN_HOSTS: Record<string, Provider> = {\n \"github.com\": \"github\",\n \"gitlab.com\": \"gitlab\",\n \"bitbucket.org\": \"bitbucket\",\n \"dev.azure.com\": \"azure_devops\",\n};\n\nfunction stripGitSuffix(path: string): string {\n return path.replace(/\\.git$/, \"\");\n}\n\nfunction detectProvider(host: string | null): Provider | null {\n if (!host) return null;\n return KNOWN_HOSTS[host.toLowerCase()] ?? null;\n}\n\nfunction normalizeAzureDevOpsPath(path: string): string {\n // Azure paths look like `org/project/_git/repo` or `org/_git/repo`.\n // Normalize to `org/project/repo` (or `org/repo`) so it lines up with\n // constructBranchUrl's expectations.\n const segments = path.split(\"/\").filter(Boolean);\n const gitIndex = segments.indexOf(\"_git\");\n if (gitIndex === -1) return segments.join(\"/\");\n return [...segments.slice(0, gitIndex), ...segments.slice(gitIndex + 1)].join(\n \"/\",\n );\n}\n\nfunction buildParsedGitRemoteUrl(\n url: string,\n host: string | null,\n rawPath: string,\n): ParsedGitRemoteUrl {\n const path = stripGitSuffix(rawPath.replace(/^\\/+|\\/+$/g, \"\"));\n const provider = detectProvider(host);\n const repository =\n provider === \"azure_devops\" ? normalizeAzureDevOpsPath(path) : path;\n\n return {\n url,\n host,\n repository: repository || null,\n provider,\n };\n}\n\n/**\n * Parse a git remote URL (HTTPS, SSH, or `git@host:path` shorthand) into its\n * host, repository (`owner/repo`), and best-effort provider.\n *\n * Returns `null` if the URL is empty or unparseable. Unknown hosts still\n * resolve `host` and `repository`; only `provider` is left `null`.\n */\nexport function parseGitRemoteUrl(\n remoteUrl: string | null | undefined,\n): ParsedGitRemoteUrl | null {\n const url = remoteUrl?.trim();\n if (!url) return null;\n\n // ssh://, https://, http://, git://. Tried before the shorthand match\n // below, whose `[^@\\s]+` would otherwise swallow `ssh://git` and read the\n // port in `ssh://git@host:2222/owner/repo` as the first path segment.\n try {\n const parsed = new URL(url);\n // A bare Windows path (`C:/src/repo`) parses as a `c:` scheme with an\n // empty host, so it is left to the shorthand match below.\n if (parsed.hostname) {\n return buildParsedGitRemoteUrl(url, parsed.hostname, parsed.pathname);\n }\n } catch {\n // Not a URL the WHATWG parser accepts, so try the shorthand form.\n }\n\n // git@host:owner/repo(.git)\n const scpMatch = url.match(/^[^@\\s]+@([^:\\s]+):(.+)$/);\n if (scpMatch) {\n const host = scpMatch[1];\n return buildParsedGitRemoteUrl(url, host, scpMatch[2]);\n }\n\n return null;\n}\n"],"mappings":"6CAaA,IAAM,EAAwC,CAC5C,aAAc,SACd,aAAc,SACd,gBAAiB,YACjB,gBAAiB,cACnB,EAEA,SAAS,EAAe,EAAsB,CAC5C,OAAO,EAAK,QAAQ,SAAU,EAAE,CAClC,CAEA,SAAS,EAAe,EAAsC,CAE5D,OADK,EACE,EAAY,EAAK,YAAY,IAAM,KADxB,IAEpB,CAEA,SAAS,EAAyB,EAAsB,CAItD,IAAM,EAAW,EAAK,MAAM,GAAG,EAAE,OAAO,OAAO,EACzC,EAAW,EAAS,QAAQ,MAAM,EAExC,OADI,IAAa,GAAW,EAAS,KAAK,GAAG,EACtC,CAAC,GAAG,EAAS,MAAM,EAAG,CAAQ,EAAG,GAAG,EAAS,MAAM,EAAW,CAAC,CAAC,EAAE,KACvE,GACF,CACF,CAEA,SAAS,EACP,EACA,EACA,EACoB,CACpB,IAAM,EAAO,EAAe,EAAQ,QAAQ,aAAc,EAAE,CAAC,EACvD,EAAW,EAAe,CAAI,EAIpC,MAAO,CACL,MACA,OACA,YALA,IAAa,eAAiB,EAAyB,CAAI,EAAI,IAKrC,KAC1B,UACF,CACF,CASA,SAAgB,EACd,EAC2B,CAC3B,IAAM,EAAM,GAAW,KAAK,EAC5B,GAAI,CAAC,EAAK,OAAO,KAKjB,GAAI,CACF,IAAM,EAAS,IAAI,IAAI,CAAG,EAG1B,GAAI,EAAO,SACT,OAAO,EAAwB,EAAK,EAAO,SAAU,EAAO,QAAQ,CAExE,MAAQ,CAER,CAGA,IAAM,EAAW,EAAI,MAAM,0BAA0B,EACrD,GAAI,EAAU,CACZ,IAAM,EAAO,EAAS,GACtB,OAAO,EAAwB,EAAK,EAAM,EAAS,EAAE,CACvD,CAEA,OAAO,IACT"}
@@ -16,7 +16,7 @@ function r(e) {
16
16
  return n === -1 ? t.join("/") : [...t.slice(0, n), ...t.slice(n + 1)].join("/");
17
17
  }
18
18
  function i(e, i, a) {
19
- let o = t(a.replace(/^\/+/, "")), s = n(i);
19
+ let o = t(a.replace(/^\/+|\/+$/g, "")), s = n(i);
20
20
  return {
21
21
  url: e,
22
22
  host: i,
@@ -27,17 +27,16 @@ function i(e, i, a) {
27
27
  function a(e) {
28
28
  let t = e?.trim();
29
29
  if (!t) return null;
30
+ try {
31
+ let e = new URL(t);
32
+ if (e.hostname) return i(t, e.hostname, e.pathname);
33
+ } catch {}
30
34
  let n = t.match(/^[^@\s]+@([^:\s]+):(.+)$/);
31
35
  if (n) {
32
36
  let e = n[1];
33
37
  return i(t, e, n[2]);
34
38
  }
35
- try {
36
- let e = new URL(t);
37
- return i(t, e.hostname || null, e.pathname);
38
- } catch {
39
- return null;
40
- }
39
+ return null;
41
40
  }
42
41
  //#endregion
43
42
  export { a as parseGitRemoteUrl };
@@ -1 +1 @@
1
- {"version":3,"file":"parse-git-remote-url.js","names":[],"sources":["../../src/utils/parse-git-remote-url.ts"],"sourcesContent":["import { Provider } from \"#/types/settings\";\n\nexport interface ParsedGitRemoteUrl {\n /** Original URL, trimmed. */\n url: string;\n /** Hostname of the remote (e.g. `github.com`, `git.example.com`). */\n host: string | null;\n /** Path-style identifier, normalized to `owner/repo` (no leading slash, no `.git` suffix). */\n repository: string | null;\n /** Best-effort provider detection from the host. `null` for unrecognized/self-hosted hosts. */\n provider: Provider | null;\n}\n\nconst KNOWN_HOSTS: Record<string, Provider> = {\n \"github.com\": \"github\",\n \"gitlab.com\": \"gitlab\",\n \"bitbucket.org\": \"bitbucket\",\n \"dev.azure.com\": \"azure_devops\",\n};\n\nfunction stripGitSuffix(path: string): string {\n return path.replace(/\\.git$/, \"\");\n}\n\nfunction detectProvider(host: string | null): Provider | null {\n if (!host) return null;\n return KNOWN_HOSTS[host.toLowerCase()] ?? null;\n}\n\nfunction normalizeAzureDevOpsPath(path: string): string {\n // Azure paths look like `org/project/_git/repo` or `org/_git/repo`.\n // Normalize to `org/project/repo` (or `org/repo`) so it lines up with\n // constructBranchUrl's expectations.\n const segments = path.split(\"/\").filter(Boolean);\n const gitIndex = segments.indexOf(\"_git\");\n if (gitIndex === -1) return segments.join(\"/\");\n return [...segments.slice(0, gitIndex), ...segments.slice(gitIndex + 1)].join(\n \"/\",\n );\n}\n\nfunction buildParsedGitRemoteUrl(\n url: string,\n host: string | null,\n rawPath: string,\n): ParsedGitRemoteUrl {\n const path = stripGitSuffix(rawPath.replace(/^\\/+/, \"\"));\n const provider = detectProvider(host);\n const repository =\n provider === \"azure_devops\" ? normalizeAzureDevOpsPath(path) : path;\n\n return {\n url,\n host,\n repository: repository || null,\n provider,\n };\n}\n\n/**\n * Parse a git remote URL (HTTPS, SSH, or `git@host:path` shorthand) into its\n * host, repository (`owner/repo`), and best-effort provider.\n *\n * Returns `null` if the URL is empty or unparseable. Unknown hosts still\n * resolve `host` and `repository`; only `provider` is left `null`.\n */\nexport function parseGitRemoteUrl(\n remoteUrl: string | null | undefined,\n): ParsedGitRemoteUrl | null {\n const url = remoteUrl?.trim();\n if (!url) return null;\n\n // git@host:owner/repo(.git)\n const scpMatch = url.match(/^[^@\\s]+@([^:\\s]+):(.+)$/);\n if (scpMatch) {\n const host = scpMatch[1];\n return buildParsedGitRemoteUrl(url, host, scpMatch[2]);\n }\n\n // ssh://, https://, http://, git://\n try {\n const parsed = new URL(url);\n return buildParsedGitRemoteUrl(\n url,\n parsed.hostname || null,\n parsed.pathname,\n );\n } catch {\n return null;\n }\n}\n"],"mappings":";AAaA,IAAM,IAAwC;CAC5C,cAAc;CACd,cAAc;CACd,iBAAiB;CACjB,iBAAiB;AACnB;AAEA,SAAS,EAAe,GAAsB;CAC5C,OAAO,EAAK,QAAQ,UAAU,EAAE;AAClC;AAEA,SAAS,EAAe,GAAsC;CAE5D,OADK,IACE,EAAY,EAAK,YAAY,MAAM,OADxB;AAEpB;AAEA,SAAS,EAAyB,GAAsB;CAItD,IAAM,IAAW,EAAK,MAAM,GAAG,EAAE,OAAO,OAAO,GACzC,IAAW,EAAS,QAAQ,MAAM;CAExC,OADI,MAAa,KAAW,EAAS,KAAK,GAAG,IACtC,CAAC,GAAG,EAAS,MAAM,GAAG,CAAQ,GAAG,GAAG,EAAS,MAAM,IAAW,CAAC,CAAC,EAAE,KACvE,GACF;AACF;AAEA,SAAS,EACP,GACA,GACA,GACoB;CACpB,IAAM,IAAO,EAAe,EAAQ,QAAQ,QAAQ,EAAE,CAAC,GACjD,IAAW,EAAe,CAAI;CAIpC,OAAO;EACL;EACA;EACA,aALA,MAAa,iBAAiB,EAAyB,CAAI,IAAI,MAKrC;EAC1B;CACF;AACF;AASA,SAAgB,EACd,GAC2B;CAC3B,IAAM,IAAM,GAAW,KAAK;CAC5B,IAAI,CAAC,GAAK,OAAO;CAGjB,IAAM,IAAW,EAAI,MAAM,0BAA0B;CACrD,IAAI,GAAU;EACZ,IAAM,IAAO,EAAS;EACtB,OAAO,EAAwB,GAAK,GAAM,EAAS,EAAE;CACvD;CAGA,IAAI;EACF,IAAM,IAAS,IAAI,IAAI,CAAG;EAC1B,OAAO,EACL,GACA,EAAO,YAAY,MACnB,EAAO,QACT;CACF,QAAQ;EACN,OAAO;CACT;AACF"}
1
+ {"version":3,"file":"parse-git-remote-url.js","names":[],"sources":["../../src/utils/parse-git-remote-url.ts"],"sourcesContent":["import { Provider } from \"#/types/settings\";\n\nexport interface ParsedGitRemoteUrl {\n /** Original URL, trimmed. */\n url: string;\n /** Hostname of the remote (e.g. `github.com`, `git.example.com`). */\n host: string | null;\n /** Path-style identifier, normalized to `owner/repo` (no leading slash, no `.git` suffix). */\n repository: string | null;\n /** Best-effort provider detection from the host. `null` for unrecognized/self-hosted hosts. */\n provider: Provider | null;\n}\n\nconst KNOWN_HOSTS: Record<string, Provider> = {\n \"github.com\": \"github\",\n \"gitlab.com\": \"gitlab\",\n \"bitbucket.org\": \"bitbucket\",\n \"dev.azure.com\": \"azure_devops\",\n};\n\nfunction stripGitSuffix(path: string): string {\n return path.replace(/\\.git$/, \"\");\n}\n\nfunction detectProvider(host: string | null): Provider | null {\n if (!host) return null;\n return KNOWN_HOSTS[host.toLowerCase()] ?? null;\n}\n\nfunction normalizeAzureDevOpsPath(path: string): string {\n // Azure paths look like `org/project/_git/repo` or `org/_git/repo`.\n // Normalize to `org/project/repo` (or `org/repo`) so it lines up with\n // constructBranchUrl's expectations.\n const segments = path.split(\"/\").filter(Boolean);\n const gitIndex = segments.indexOf(\"_git\");\n if (gitIndex === -1) return segments.join(\"/\");\n return [...segments.slice(0, gitIndex), ...segments.slice(gitIndex + 1)].join(\n \"/\",\n );\n}\n\nfunction buildParsedGitRemoteUrl(\n url: string,\n host: string | null,\n rawPath: string,\n): ParsedGitRemoteUrl {\n const path = stripGitSuffix(rawPath.replace(/^\\/+|\\/+$/g, \"\"));\n const provider = detectProvider(host);\n const repository =\n provider === \"azure_devops\" ? normalizeAzureDevOpsPath(path) : path;\n\n return {\n url,\n host,\n repository: repository || null,\n provider,\n };\n}\n\n/**\n * Parse a git remote URL (HTTPS, SSH, or `git@host:path` shorthand) into its\n * host, repository (`owner/repo`), and best-effort provider.\n *\n * Returns `null` if the URL is empty or unparseable. Unknown hosts still\n * resolve `host` and `repository`; only `provider` is left `null`.\n */\nexport function parseGitRemoteUrl(\n remoteUrl: string | null | undefined,\n): ParsedGitRemoteUrl | null {\n const url = remoteUrl?.trim();\n if (!url) return null;\n\n // ssh://, https://, http://, git://. Tried before the shorthand match\n // below, whose `[^@\\s]+` would otherwise swallow `ssh://git` and read the\n // port in `ssh://git@host:2222/owner/repo` as the first path segment.\n try {\n const parsed = new URL(url);\n // A bare Windows path (`C:/src/repo`) parses as a `c:` scheme with an\n // empty host, so it is left to the shorthand match below.\n if (parsed.hostname) {\n return buildParsedGitRemoteUrl(url, parsed.hostname, parsed.pathname);\n }\n } catch {\n // Not a URL the WHATWG parser accepts, so try the shorthand form.\n }\n\n // git@host:owner/repo(.git)\n const scpMatch = url.match(/^[^@\\s]+@([^:\\s]+):(.+)$/);\n if (scpMatch) {\n const host = scpMatch[1];\n return buildParsedGitRemoteUrl(url, host, scpMatch[2]);\n }\n\n return null;\n}\n"],"mappings":";AAaA,IAAM,IAAwC;CAC5C,cAAc;CACd,cAAc;CACd,iBAAiB;CACjB,iBAAiB;AACnB;AAEA,SAAS,EAAe,GAAsB;CAC5C,OAAO,EAAK,QAAQ,UAAU,EAAE;AAClC;AAEA,SAAS,EAAe,GAAsC;CAE5D,OADK,IACE,EAAY,EAAK,YAAY,MAAM,OADxB;AAEpB;AAEA,SAAS,EAAyB,GAAsB;CAItD,IAAM,IAAW,EAAK,MAAM,GAAG,EAAE,OAAO,OAAO,GACzC,IAAW,EAAS,QAAQ,MAAM;CAExC,OADI,MAAa,KAAW,EAAS,KAAK,GAAG,IACtC,CAAC,GAAG,EAAS,MAAM,GAAG,CAAQ,GAAG,GAAG,EAAS,MAAM,IAAW,CAAC,CAAC,EAAE,KACvE,GACF;AACF;AAEA,SAAS,EACP,GACA,GACA,GACoB;CACpB,IAAM,IAAO,EAAe,EAAQ,QAAQ,cAAc,EAAE,CAAC,GACvD,IAAW,EAAe,CAAI;CAIpC,OAAO;EACL;EACA;EACA,aALA,MAAa,iBAAiB,EAAyB,CAAI,IAAI,MAKrC;EAC1B;CACF;AACF;AASA,SAAgB,EACd,GAC2B;CAC3B,IAAM,IAAM,GAAW,KAAK;CAC5B,IAAI,CAAC,GAAK,OAAO;CAKjB,IAAI;EACF,IAAM,IAAS,IAAI,IAAI,CAAG;EAG1B,IAAI,EAAO,UACT,OAAO,EAAwB,GAAK,EAAO,UAAU,EAAO,QAAQ;CAExE,QAAQ,CAER;CAGA,IAAM,IAAW,EAAI,MAAM,0BAA0B;CACrD,IAAI,GAAU;EACZ,IAAM,IAAO,EAAS;EACtB,OAAO,EAAwB,GAAK,GAAM,EAAS,EAAE;CACvD;CAEA,OAAO;AACT"}
@@ -0,0 +1,2 @@
1
+ require("../_virtual/_rolldown/runtime.cjs");const e=require("../node_modules/@openhands/extensions/automations/index.cjs"),t=require("../manifests/manifest-sources.cjs"),n=require("../manifests/automation-interface.cjs");function r(e){return e.map((e,t)=>({automation:e,index:t})).sort((e,t)=>(t.automation.popularityRank??0)-(e.automation.popularityRank??0)||e.index-t.index).map(({automation:e})=>e)}function i(e){return e.trim().toLowerCase().replace(/&/g,`and`).replace(/[^a-z0-9]+/g,`-`).replace(/^-+|-+$/g,``)}function a(e){return[e.id,e.name,e.skill].filter(e=>!!e).map(i)}function o(e,t){let n=new Set(t.map(e=>i(e.name)));return a(e).some(e=>n.has(e))}function s(e){return n.getFeaturedAutomationIds().includes(e.id)}function c(e){return t.SETUP_REGISTRY.findById(e.id)==null}function l(t){let n=r(e.default).filter(e=>!o(e,t));return{proven:n.filter(s),conversation:n.filter(e=>!s(e)&&c(e))}}function u(e){return[...e.proven,...e.conversation]}exports.flattenRecommendedRailGroups=u,exports.getAutomationsByPopularity=r,exports.getRecommendedRailGroups=l;
2
+ //# sourceMappingURL=recommended-automation-rail.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recommended-automation-rail.cjs","names":[],"sources":["../../src/utils/recommended-automation-rail.ts"],"sourcesContent":["import {\n AUTOMATION_CATALOG,\n type RecommendedAutomation,\n} from \"@openhands/extensions/automations\";\nimport { getFeaturedAutomationIds } from \"#/manifests/automation-interface\";\nimport { SETUP_REGISTRY } from \"#/manifests/manifest-sources\";\nimport type { Automation } from \"#/types/automation\";\n\nexport function getAutomationsByPopularity(\n catalog: RecommendedAutomation[],\n): RecommendedAutomation[] {\n return catalog\n .map((automation, index) => ({ automation, index }))\n .sort((a, b) => {\n const byPopularity =\n (b.automation.popularityRank ?? 0) - (a.automation.popularityRank ?? 0);\n return byPopularity || a.index - b.index;\n })\n .map(({ automation }) => automation);\n}\n\n/**\n * Slug used to match a catalog entry against an installed automation name.\n * Catalog ids are already kebab-case; installed names are human titles.\n */\nexport function normalizeAutomationKey(value: string): string {\n return value\n .trim()\n .toLowerCase()\n .replace(/&/g, \"and\")\n .replace(/[^a-z0-9]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\");\n}\n\nfunction catalogMatchKeys(entry: RecommendedAutomation): string[] {\n return [entry.id, entry.name, entry.skill]\n .filter((value): value is string => Boolean(value))\n .map(normalizeAutomationKey);\n}\n\nexport function isCatalogAutomationAdded(\n entry: RecommendedAutomation,\n installed: readonly Pick<Automation, \"name\">[],\n): boolean {\n const installedKeys = new Set(\n installed.map((automation) => normalizeAutomationKey(automation.name)),\n );\n return catalogMatchKeys(entry).some((key) => installedKeys.has(key));\n}\n\nfunction isProvenAutomation(entry: RecommendedAutomation): boolean {\n return getFeaturedAutomationIds().includes(entry.id);\n}\n\n/** Catalog cards that launch a conversation instead of a host setup form. */\nexport function isConversationLaunchAutomation(\n entry: RecommendedAutomation,\n): boolean {\n return SETUP_REGISTRY.findById(entry.id) == null;\n}\n\nexport interface RecommendedRailGroups {\n proven: RecommendedAutomation[];\n conversation: RecommendedAutomation[];\n}\n\n/**\n * Home / dashboard rail: remaining proven workflows, then other useful\n * automations that open in a new conversation. Already-created automations\n * are dropped from both groups.\n */\nexport function getRecommendedRailGroups(\n installed: readonly Pick<Automation, \"name\">[],\n): RecommendedRailGroups {\n // Every catalog entry is offerable: one that declares no integration needs\n // nothing connected, and one that names an integration this host cannot\n // resolve stays visible so the drift is actionable rather than hidden.\n const available = getAutomationsByPopularity(AUTOMATION_CATALOG).filter(\n (entry) => !isCatalogAutomationAdded(entry, installed),\n );\n\n return {\n proven: available.filter(isProvenAutomation),\n conversation: available.filter(\n (entry) =>\n !isProvenAutomation(entry) && isConversationLaunchAutomation(entry),\n ),\n };\n}\n\nexport function flattenRecommendedRailGroups(\n groups: RecommendedRailGroups,\n): RecommendedAutomation[] {\n return [...groups.proven, ...groups.conversation];\n}\n"],"mappings":"8NAQA,SAAgB,EACd,EACyB,CACzB,OAAO,EACJ,KAAK,EAAY,KAAW,CAAE,aAAY,OAAM,EAAE,EAClD,MAAM,EAAG,KAEL,EAAE,WAAW,gBAAkB,IAAM,EAAE,WAAW,gBAAkB,IAChD,EAAE,MAAQ,EAAE,KACpC,EACA,KAAK,CAAE,gBAAiB,CAAU,CACvC,CAMA,SAAgB,EAAuB,EAAuB,CAC5D,OAAO,EACJ,KAAK,EACL,YAAY,EACZ,QAAQ,KAAM,KAAK,EACnB,QAAQ,cAAe,GAAG,EAC1B,QAAQ,WAAY,EAAE,CAC3B,CAEA,SAAS,EAAiB,EAAwC,CAChE,MAAO,CAAC,EAAM,GAAI,EAAM,KAAM,EAAM,KAAK,EACtC,OAAQ,GAA2B,EAAQ,CAAM,EACjD,IAAI,CAAsB,CAC/B,CAEA,SAAgB,EACd,EACA,EACS,CACT,IAAM,EAAgB,IAAI,IACxB,EAAU,IAAK,GAAe,EAAuB,EAAW,IAAI,CAAC,CACvE,EACA,OAAO,EAAiB,CAAK,EAAE,KAAM,GAAQ,EAAc,IAAI,CAAG,CAAC,CACrE,CAEA,SAAS,EAAmB,EAAuC,CACjE,OAAO,EAAA,yBAAyB,EAAE,SAAS,EAAM,EAAE,CACrD,CAGA,SAAgB,EACd,EACS,CACT,OAAO,EAAA,eAAe,SAAS,EAAM,EAAE,GAAK,IAC9C,CAYA,SAAgB,EACd,EACuB,CAIvB,IAAM,EAAY,EAA2B,EAAA,OAAkB,EAAE,OAC9D,GAAU,CAAC,EAAyB,EAAO,CAAS,CACvD,EAEA,MAAO,CACL,OAAQ,EAAU,OAAO,CAAkB,EAC3C,aAAc,EAAU,OACrB,GACC,CAAC,EAAmB,CAAK,GAAK,EAA+B,CAAK,CACtE,CACF,CACF,CAEA,SAAgB,EACd,EACyB,CACzB,MAAO,CAAC,GAAG,EAAO,OAAQ,GAAG,EAAO,YAAY,CAClD"}
@@ -0,0 +1,22 @@
1
+ import { type RecommendedAutomation } from "@openhands/extensions/automations";
2
+ import type { Automation } from "#/types/automation";
3
+ export declare function getAutomationsByPopularity(catalog: RecommendedAutomation[]): RecommendedAutomation[];
4
+ /**
5
+ * Slug used to match a catalog entry against an installed automation name.
6
+ * Catalog ids are already kebab-case; installed names are human titles.
7
+ */
8
+ export declare function normalizeAutomationKey(value: string): string;
9
+ export declare function isCatalogAutomationAdded(entry: RecommendedAutomation, installed: readonly Pick<Automation, "name">[]): boolean;
10
+ /** Catalog cards that launch a conversation instead of a host setup form. */
11
+ export declare function isConversationLaunchAutomation(entry: RecommendedAutomation): boolean;
12
+ export interface RecommendedRailGroups {
13
+ proven: RecommendedAutomation[];
14
+ conversation: RecommendedAutomation[];
15
+ }
16
+ /**
17
+ * Home / dashboard rail: remaining proven workflows, then other useful
18
+ * automations that open in a new conversation. Already-created automations
19
+ * are dropped from both groups.
20
+ */
21
+ export declare function getRecommendedRailGroups(installed: readonly Pick<Automation, "name">[]): RecommendedRailGroups;
22
+ export declare function flattenRecommendedRailGroups(groups: RecommendedRailGroups): RecommendedAutomation[];
@@ -0,0 +1,44 @@
1
+ import e from "../node_modules/@openhands/extensions/automations/index.js";
2
+ import { SETUP_REGISTRY as t } from "../manifests/manifest-sources.js";
3
+ import { getFeaturedAutomationIds as n } from "../manifests/automation-interface.js";
4
+ //#region src/utils/recommended-automation-rail.ts
5
+ function r(e) {
6
+ return e.map((e, t) => ({
7
+ automation: e,
8
+ index: t
9
+ })).sort((e, t) => (t.automation.popularityRank ?? 0) - (e.automation.popularityRank ?? 0) || e.index - t.index).map(({ automation: e }) => e);
10
+ }
11
+ function i(e) {
12
+ return e.trim().toLowerCase().replace(/&/g, "and").replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "");
13
+ }
14
+ function a(e) {
15
+ return [
16
+ e.id,
17
+ e.name,
18
+ e.skill
19
+ ].filter((e) => !!e).map(i);
20
+ }
21
+ function o(e, t) {
22
+ let n = new Set(t.map((e) => i(e.name)));
23
+ return a(e).some((e) => n.has(e));
24
+ }
25
+ function s(e) {
26
+ return n().includes(e.id);
27
+ }
28
+ function c(e) {
29
+ return t.findById(e.id) == null;
30
+ }
31
+ function l(t) {
32
+ let n = r(e).filter((e) => !o(e, t));
33
+ return {
34
+ proven: n.filter(s),
35
+ conversation: n.filter((e) => !s(e) && c(e))
36
+ };
37
+ }
38
+ function u(e) {
39
+ return [...e.proven, ...e.conversation];
40
+ }
41
+ //#endregion
42
+ export { u as flattenRecommendedRailGroups, r as getAutomationsByPopularity, l as getRecommendedRailGroups };
43
+
44
+ //# sourceMappingURL=recommended-automation-rail.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recommended-automation-rail.js","names":[],"sources":["../../src/utils/recommended-automation-rail.ts"],"sourcesContent":["import {\n AUTOMATION_CATALOG,\n type RecommendedAutomation,\n} from \"@openhands/extensions/automations\";\nimport { getFeaturedAutomationIds } from \"#/manifests/automation-interface\";\nimport { SETUP_REGISTRY } from \"#/manifests/manifest-sources\";\nimport type { Automation } from \"#/types/automation\";\n\nexport function getAutomationsByPopularity(\n catalog: RecommendedAutomation[],\n): RecommendedAutomation[] {\n return catalog\n .map((automation, index) => ({ automation, index }))\n .sort((a, b) => {\n const byPopularity =\n (b.automation.popularityRank ?? 0) - (a.automation.popularityRank ?? 0);\n return byPopularity || a.index - b.index;\n })\n .map(({ automation }) => automation);\n}\n\n/**\n * Slug used to match a catalog entry against an installed automation name.\n * Catalog ids are already kebab-case; installed names are human titles.\n */\nexport function normalizeAutomationKey(value: string): string {\n return value\n .trim()\n .toLowerCase()\n .replace(/&/g, \"and\")\n .replace(/[^a-z0-9]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\");\n}\n\nfunction catalogMatchKeys(entry: RecommendedAutomation): string[] {\n return [entry.id, entry.name, entry.skill]\n .filter((value): value is string => Boolean(value))\n .map(normalizeAutomationKey);\n}\n\nexport function isCatalogAutomationAdded(\n entry: RecommendedAutomation,\n installed: readonly Pick<Automation, \"name\">[],\n): boolean {\n const installedKeys = new Set(\n installed.map((automation) => normalizeAutomationKey(automation.name)),\n );\n return catalogMatchKeys(entry).some((key) => installedKeys.has(key));\n}\n\nfunction isProvenAutomation(entry: RecommendedAutomation): boolean {\n return getFeaturedAutomationIds().includes(entry.id);\n}\n\n/** Catalog cards that launch a conversation instead of a host setup form. */\nexport function isConversationLaunchAutomation(\n entry: RecommendedAutomation,\n): boolean {\n return SETUP_REGISTRY.findById(entry.id) == null;\n}\n\nexport interface RecommendedRailGroups {\n proven: RecommendedAutomation[];\n conversation: RecommendedAutomation[];\n}\n\n/**\n * Home / dashboard rail: remaining proven workflows, then other useful\n * automations that open in a new conversation. Already-created automations\n * are dropped from both groups.\n */\nexport function getRecommendedRailGroups(\n installed: readonly Pick<Automation, \"name\">[],\n): RecommendedRailGroups {\n // Every catalog entry is offerable: one that declares no integration needs\n // nothing connected, and one that names an integration this host cannot\n // resolve stays visible so the drift is actionable rather than hidden.\n const available = getAutomationsByPopularity(AUTOMATION_CATALOG).filter(\n (entry) => !isCatalogAutomationAdded(entry, installed),\n );\n\n return {\n proven: available.filter(isProvenAutomation),\n conversation: available.filter(\n (entry) =>\n !isProvenAutomation(entry) && isConversationLaunchAutomation(entry),\n ),\n };\n}\n\nexport function flattenRecommendedRailGroups(\n groups: RecommendedRailGroups,\n): RecommendedAutomation[] {\n return [...groups.proven, ...groups.conversation];\n}\n"],"mappings":";;;;AAQA,SAAgB,EACd,GACyB;CACzB,OAAO,EACJ,KAAK,GAAY,OAAW;EAAE;EAAY;CAAM,EAAE,EAClD,MAAM,GAAG,OAEL,EAAE,WAAW,kBAAkB,MAAM,EAAE,WAAW,kBAAkB,MAChD,EAAE,QAAQ,EAAE,KACpC,EACA,KAAK,EAAE,oBAAiB,CAAU;AACvC;AAMA,SAAgB,EAAuB,GAAuB;CAC5D,OAAO,EACJ,KAAK,EACL,YAAY,EACZ,QAAQ,MAAM,KAAK,EACnB,QAAQ,eAAe,GAAG,EAC1B,QAAQ,YAAY,EAAE;AAC3B;AAEA,SAAS,EAAiB,GAAwC;CAChE,OAAO;EAAC,EAAM;EAAI,EAAM;EAAM,EAAM;CAAK,EACtC,QAAQ,MAA2B,EAAQ,CAAM,EACjD,IAAI,CAAsB;AAC/B;AAEA,SAAgB,EACd,GACA,GACS;CACT,IAAM,IAAgB,IAAI,IACxB,EAAU,KAAK,MAAe,EAAuB,EAAW,IAAI,CAAC,CACvE;CACA,OAAO,EAAiB,CAAK,EAAE,MAAM,MAAQ,EAAc,IAAI,CAAG,CAAC;AACrE;AAEA,SAAS,EAAmB,GAAuC;CACjE,OAAO,EAAyB,EAAE,SAAS,EAAM,EAAE;AACrD;AAGA,SAAgB,EACd,GACS;CACT,OAAO,EAAe,SAAS,EAAM,EAAE,KAAK;AAC9C;AAYA,SAAgB,EACd,GACuB;CAIvB,IAAM,IAAY,EAA2B,CAAkB,EAAE,QAC9D,MAAU,CAAC,EAAyB,GAAO,CAAS,CACvD;CAEA,OAAO;EACL,QAAQ,EAAU,OAAO,CAAkB;EAC3C,cAAc,EAAU,QACrB,MACC,CAAC,EAAmB,CAAK,KAAK,EAA+B,CAAK,CACtE;CACF;AACF;AAEA,SAAgB,EACd,GACyB;CACzB,OAAO,CAAC,GAAG,EAAO,QAAQ,GAAG,EAAO,YAAY;AAClD"}
@@ -0,0 +1,2 @@
1
+ require("../_virtual/_rolldown/runtime.cjs");const e=require("../i18n/declaration.cjs"),t=require("./constants.cjs"),n=require("./automation-catalog.cjs"),r=require("../manifests/automation-interface.cjs");var i=`${t.PRODUCT_URL.PRODUCTION}/settings/integrations`;function a(e){let t=r.getResponderIntegrationIds(),i=n.getRequiredIntegrationIds(e);return i.length>0&&i.every(e=>t.includes(e))}function o(t){switch(t){case`local`:return{target:t,testId:`responder-deployment-option-local`,titleKey:e.I18nKey.RESPONDER_DEPLOYMENT$LOCAL_TITLE,descriptionKey:e.I18nKey.RESPONDER_DEPLOYMENT$LOCAL_DESCRIPTION,primaryActionKey:e.I18nKey.RESPONDER_DEPLOYMENT$LOCAL_ACTION,primaryActionTestId:`responder-deployment-continue-local`,action:{kind:`launch-local`}};case`openhands-cloud`:return{target:t,testId:`responder-deployment-option-openhands-cloud`,titleKey:e.I18nKey.RESPONDER_DEPLOYMENT$OPENHANDS_CLOUD_TITLE,descriptionKey:e.I18nKey.RESPONDER_DEPLOYMENT$OPENHANDS_CLOUD_DESCRIPTION,primaryActionKey:e.I18nKey.RESPONDER_DEPLOYMENT$OPENHANDS_CLOUD_ACTION,primaryActionTestId:`responder-deployment-open-openhands-cloud`,action:{kind:`open-url`,url:i}};case`user-cloud`:throw Error(`User Cloud responder deployment is not yet supported`);default:return t}}var s=[`local`,`openhands-cloud`];exports.VISIBLE_RESPONDER_DEPLOYMENT_TARGETS=s,exports.isResponderAutomation=a,exports.resolveResponderDeploymentOption=o;
2
+ //# sourceMappingURL=responder-deployment.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"responder-deployment.cjs","names":[],"sources":["../../src/utils/responder-deployment.ts"],"sourcesContent":["import type { RecommendedAutomation } from \"@openhands/extensions/automations\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport { getResponderIntegrationIds } from \"#/manifests/automation-interface\";\nimport { getRequiredIntegrationIds } from \"#/utils/automation-catalog\";\nimport { PRODUCT_URL } from \"#/utils/constants\";\n\n/** OpenHands Cloud integrations page — where always-on responders are set up. */\nexport const OPENHANDS_CLOUD_INTEGRATIONS_URL = `${PRODUCT_URL.PRODUCTION}/settings/integrations`;\n\n/**\n * Single source of truth for \"does this automation get the deployment-choice\n * modal?\" — true only for automations whose required integrations are\n * exclusively responder ones (owned by the interface manifest, GitHub/Slack by\n * default), so multi-tool digests (e.g. slack + linear + notion) are not\n * treated as Slack responders. An integration the automation can start without\n * does not decide where it runs, so only the required ones are classified.\n */\nexport function isResponderAutomation(\n automation: RecommendedAutomation,\n): boolean {\n const responderIds = getResponderIntegrationIds();\n const ids = getRequiredIntegrationIds(automation);\n return ids.length > 0 && ids.every((id) => responderIds.includes(id));\n}\n\n/**\n * Where a responder runs. Only `local` and `openhands-cloud` are wired today;\n * `user-cloud` is reserved for a future remote-deployment target.\n */\nexport type ResponderDeploymentTarget =\n | \"local\"\n | \"user-cloud\"\n | \"openhands-cloud\";\n\n/** What the launcher should do when an option's primary action fires. */\nexport type ResponderDeploymentAction =\n | { kind: \"launch-local\" }\n | { kind: \"open-url\"; url: string };\n\n/** Presentational + behavioral descriptor for one deployment option. */\nexport interface ResponderDeploymentOption {\n target: ResponderDeploymentTarget;\n testId: string;\n titleKey: I18nKey;\n descriptionKey: I18nKey;\n primaryActionKey: I18nKey;\n primaryActionTestId: string;\n action: ResponderDeploymentAction;\n}\n\n/**\n * Centralized runtime-selection mechanism. Returns a descriptor (data) rather\n * than executing behavior, so the side effects stay with the launcher that owns\n * the relevant state. Adding a target later means adding a `case` here and an\n * entry to {@link VISIBLE_RESPONDER_DEPLOYMENT_TARGETS}; the `never` check makes\n * an unhandled target a compile error.\n */\nexport function resolveResponderDeploymentOption(\n target: ResponderDeploymentTarget,\n): ResponderDeploymentOption {\n switch (target) {\n case \"local\":\n return {\n target,\n testId: \"responder-deployment-option-local\",\n titleKey: I18nKey.RESPONDER_DEPLOYMENT$LOCAL_TITLE,\n descriptionKey: I18nKey.RESPONDER_DEPLOYMENT$LOCAL_DESCRIPTION,\n primaryActionKey: I18nKey.RESPONDER_DEPLOYMENT$LOCAL_ACTION,\n primaryActionTestId: \"responder-deployment-continue-local\",\n action: { kind: \"launch-local\" },\n };\n case \"openhands-cloud\":\n return {\n target,\n testId: \"responder-deployment-option-openhands-cloud\",\n titleKey: I18nKey.RESPONDER_DEPLOYMENT$OPENHANDS_CLOUD_TITLE,\n descriptionKey:\n I18nKey.RESPONDER_DEPLOYMENT$OPENHANDS_CLOUD_DESCRIPTION,\n primaryActionKey: I18nKey.RESPONDER_DEPLOYMENT$OPENHANDS_CLOUD_ACTION,\n primaryActionTestId: \"responder-deployment-open-openhands-cloud\",\n action: { kind: \"open-url\", url: OPENHANDS_CLOUD_INTEGRATIONS_URL },\n };\n case \"user-cloud\":\n throw new Error(\"User Cloud responder deployment is not yet supported\");\n default: {\n const exhaustive: never = target;\n return exhaustive;\n }\n }\n}\n\n/** Targets the modal renders today, in display order (excludes `user-cloud`). */\nexport const VISIBLE_RESPONDER_DEPLOYMENT_TARGETS: ResponderDeploymentTarget[] =\n [\"local\", \"openhands-cloud\"];\n"],"mappings":"8MAOA,IAAa,EAAmC,GAAG,EAAA,YAAY,WAAW,wBAU1E,SAAgB,EACd,EACS,CACT,IAAM,EAAe,EAAA,2BAA2B,EAC1C,EAAM,EAAA,0BAA0B,CAAU,EAChD,OAAO,EAAI,OAAS,GAAK,EAAI,MAAO,GAAO,EAAa,SAAS,CAAE,CAAC,CACtE,CAkCA,SAAgB,EACd,EAC2B,CAC3B,OAAQ,EAAR,CACE,IAAK,QACH,MAAO,CACL,SACA,OAAQ,oCACR,SAAU,EAAA,QAAQ,iCAClB,eAAgB,EAAA,QAAQ,uCACxB,iBAAkB,EAAA,QAAQ,kCAC1B,oBAAqB,sCACrB,OAAQ,CAAE,KAAM,cAAe,CACjC,EACF,IAAK,kBACH,MAAO,CACL,SACA,OAAQ,8CACR,SAAU,EAAA,QAAQ,2CAClB,eACE,EAAA,QAAQ,iDACV,iBAAkB,EAAA,QAAQ,4CAC1B,oBAAqB,4CACrB,OAAQ,CAAE,KAAM,WAAY,IAAK,CAAiC,CACpE,EACF,IAAK,aACH,MAAU,MAAM,sDAAsD,EACxE,QAEE,OAAO,CAEX,CACF,CAGA,IAAa,EACX,CAAC,QAAS,iBAAiB"}
@@ -0,0 +1,42 @@
1
+ import { I18nKey as e } from "../i18n/declaration.js";
2
+ import { PRODUCT_URL as t } from "./constants.js";
3
+ import { getRequiredIntegrationIds as n } from "./automation-catalog.js";
4
+ import { getResponderIntegrationIds as r } from "../manifests/automation-interface.js";
5
+ //#region src/utils/responder-deployment.ts
6
+ var i = `${t.PRODUCTION}/settings/integrations`;
7
+ function a(e) {
8
+ let t = r(), i = n(e);
9
+ return i.length > 0 && i.every((e) => t.includes(e));
10
+ }
11
+ function o(t) {
12
+ switch (t) {
13
+ case "local": return {
14
+ target: t,
15
+ testId: "responder-deployment-option-local",
16
+ titleKey: e.RESPONDER_DEPLOYMENT$LOCAL_TITLE,
17
+ descriptionKey: e.RESPONDER_DEPLOYMENT$LOCAL_DESCRIPTION,
18
+ primaryActionKey: e.RESPONDER_DEPLOYMENT$LOCAL_ACTION,
19
+ primaryActionTestId: "responder-deployment-continue-local",
20
+ action: { kind: "launch-local" }
21
+ };
22
+ case "openhands-cloud": return {
23
+ target: t,
24
+ testId: "responder-deployment-option-openhands-cloud",
25
+ titleKey: e.RESPONDER_DEPLOYMENT$OPENHANDS_CLOUD_TITLE,
26
+ descriptionKey: e.RESPONDER_DEPLOYMENT$OPENHANDS_CLOUD_DESCRIPTION,
27
+ primaryActionKey: e.RESPONDER_DEPLOYMENT$OPENHANDS_CLOUD_ACTION,
28
+ primaryActionTestId: "responder-deployment-open-openhands-cloud",
29
+ action: {
30
+ kind: "open-url",
31
+ url: i
32
+ }
33
+ };
34
+ case "user-cloud": throw Error("User Cloud responder deployment is not yet supported");
35
+ default: return t;
36
+ }
37
+ }
38
+ var s = ["local", "openhands-cloud"];
39
+ //#endregion
40
+ export { s as VISIBLE_RESPONDER_DEPLOYMENT_TARGETS, a as isResponderAutomation, o as resolveResponderDeploymentOption };
41
+
42
+ //# sourceMappingURL=responder-deployment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"responder-deployment.js","names":[],"sources":["../../src/utils/responder-deployment.ts"],"sourcesContent":["import type { RecommendedAutomation } from \"@openhands/extensions/automations\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport { getResponderIntegrationIds } from \"#/manifests/automation-interface\";\nimport { getRequiredIntegrationIds } from \"#/utils/automation-catalog\";\nimport { PRODUCT_URL } from \"#/utils/constants\";\n\n/** OpenHands Cloud integrations page — where always-on responders are set up. */\nexport const OPENHANDS_CLOUD_INTEGRATIONS_URL = `${PRODUCT_URL.PRODUCTION}/settings/integrations`;\n\n/**\n * Single source of truth for \"does this automation get the deployment-choice\n * modal?\" — true only for automations whose required integrations are\n * exclusively responder ones (owned by the interface manifest, GitHub/Slack by\n * default), so multi-tool digests (e.g. slack + linear + notion) are not\n * treated as Slack responders. An integration the automation can start without\n * does not decide where it runs, so only the required ones are classified.\n */\nexport function isResponderAutomation(\n automation: RecommendedAutomation,\n): boolean {\n const responderIds = getResponderIntegrationIds();\n const ids = getRequiredIntegrationIds(automation);\n return ids.length > 0 && ids.every((id) => responderIds.includes(id));\n}\n\n/**\n * Where a responder runs. Only `local` and `openhands-cloud` are wired today;\n * `user-cloud` is reserved for a future remote-deployment target.\n */\nexport type ResponderDeploymentTarget =\n | \"local\"\n | \"user-cloud\"\n | \"openhands-cloud\";\n\n/** What the launcher should do when an option's primary action fires. */\nexport type ResponderDeploymentAction =\n | { kind: \"launch-local\" }\n | { kind: \"open-url\"; url: string };\n\n/** Presentational + behavioral descriptor for one deployment option. */\nexport interface ResponderDeploymentOption {\n target: ResponderDeploymentTarget;\n testId: string;\n titleKey: I18nKey;\n descriptionKey: I18nKey;\n primaryActionKey: I18nKey;\n primaryActionTestId: string;\n action: ResponderDeploymentAction;\n}\n\n/**\n * Centralized runtime-selection mechanism. Returns a descriptor (data) rather\n * than executing behavior, so the side effects stay with the launcher that owns\n * the relevant state. Adding a target later means adding a `case` here and an\n * entry to {@link VISIBLE_RESPONDER_DEPLOYMENT_TARGETS}; the `never` check makes\n * an unhandled target a compile error.\n */\nexport function resolveResponderDeploymentOption(\n target: ResponderDeploymentTarget,\n): ResponderDeploymentOption {\n switch (target) {\n case \"local\":\n return {\n target,\n testId: \"responder-deployment-option-local\",\n titleKey: I18nKey.RESPONDER_DEPLOYMENT$LOCAL_TITLE,\n descriptionKey: I18nKey.RESPONDER_DEPLOYMENT$LOCAL_DESCRIPTION,\n primaryActionKey: I18nKey.RESPONDER_DEPLOYMENT$LOCAL_ACTION,\n primaryActionTestId: \"responder-deployment-continue-local\",\n action: { kind: \"launch-local\" },\n };\n case \"openhands-cloud\":\n return {\n target,\n testId: \"responder-deployment-option-openhands-cloud\",\n titleKey: I18nKey.RESPONDER_DEPLOYMENT$OPENHANDS_CLOUD_TITLE,\n descriptionKey:\n I18nKey.RESPONDER_DEPLOYMENT$OPENHANDS_CLOUD_DESCRIPTION,\n primaryActionKey: I18nKey.RESPONDER_DEPLOYMENT$OPENHANDS_CLOUD_ACTION,\n primaryActionTestId: \"responder-deployment-open-openhands-cloud\",\n action: { kind: \"open-url\", url: OPENHANDS_CLOUD_INTEGRATIONS_URL },\n };\n case \"user-cloud\":\n throw new Error(\"User Cloud responder deployment is not yet supported\");\n default: {\n const exhaustive: never = target;\n return exhaustive;\n }\n }\n}\n\n/** Targets the modal renders today, in display order (excludes `user-cloud`). */\nexport const VISIBLE_RESPONDER_DEPLOYMENT_TARGETS: ResponderDeploymentTarget[] =\n [\"local\", \"openhands-cloud\"];\n"],"mappings":";;;;;AAOA,IAAa,IAAmC,GAAG,EAAY,WAAW;AAU1E,SAAgB,EACd,GACS;CACT,IAAM,IAAe,EAA2B,GAC1C,IAAM,EAA0B,CAAU;CAChD,OAAO,EAAI,SAAS,KAAK,EAAI,OAAO,MAAO,EAAa,SAAS,CAAE,CAAC;AACtE;AAkCA,SAAgB,EACd,GAC2B;CAC3B,QAAQ,GAAR;EACE,KAAK,SACH,OAAO;GACL;GACA,QAAQ;GACR,UAAU,EAAQ;GAClB,gBAAgB,EAAQ;GACxB,kBAAkB,EAAQ;GAC1B,qBAAqB;GACrB,QAAQ,EAAE,MAAM,eAAe;EACjC;EACF,KAAK,mBACH,OAAO;GACL;GACA,QAAQ;GACR,UAAU,EAAQ;GAClB,gBACE,EAAQ;GACV,kBAAkB,EAAQ;GAC1B,qBAAqB;GACrB,QAAQ;IAAE,MAAM;IAAY,KAAK;GAAiC;EACpE;EACF,KAAK,cACH,MAAU,MAAM,sDAAsD;EACxE,SAEE,OAAO;CAEX;AACF;AAGA,IAAa,IACX,CAAC,SAAS,iBAAiB"}
@@ -0,0 +1,2 @@
1
+ require("../_virtual/_rolldown/runtime.cjs");var e=1;function t(t){let{scrollLeft:n,scrollWidth:r,clientWidth:i}=t,a=r-i,o=a>e;return{left:o&&n>e,right:o&&n<a-e}}exports.readScrollFadeState=t;
2
+ //# sourceMappingURL=scroll-fade-state.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scroll-fade-state.cjs","names":[],"sources":["../../src/utils/scroll-fade-state.ts"],"sourcesContent":["const SCROLL_EDGE_THRESHOLD_PX = 1;\n\nexport interface ScrollFadeState {\n left: boolean;\n right: boolean;\n}\n\n/** Whether a horizontal scroller is clipped on each edge. */\nexport function readScrollFadeState(element: HTMLElement): ScrollFadeState {\n const { scrollLeft, scrollWidth, clientWidth } = element;\n const maxScroll = scrollWidth - clientWidth;\n const hasOverflow = maxScroll > SCROLL_EDGE_THRESHOLD_PX;\n\n return {\n left: hasOverflow && scrollLeft > SCROLL_EDGE_THRESHOLD_PX,\n right: hasOverflow && scrollLeft < maxScroll - SCROLL_EDGE_THRESHOLD_PX,\n };\n}\n"],"mappings":"6CAAA,IAAM,EAA2B,EAQjC,SAAgB,EAAoB,EAAuC,CACzE,GAAM,CAAE,aAAY,cAAa,eAAgB,EAC3C,EAAY,EAAc,EAC1B,EAAc,EAAY,EAEhC,MAAO,CACL,KAAM,GAAe,EAAa,EAClC,MAAO,GAAe,EAAa,EAAY,CACjD,CACF"}
@@ -0,0 +1,6 @@
1
+ export interface ScrollFadeState {
2
+ left: boolean;
3
+ right: boolean;
4
+ }
5
+ /** Whether a horizontal scroller is clipped on each edge. */
6
+ export declare function readScrollFadeState(element: HTMLElement): ScrollFadeState;
@@ -0,0 +1,13 @@
1
+ //#region src/utils/scroll-fade-state.ts
2
+ var e = 1;
3
+ function t(t) {
4
+ let { scrollLeft: n, scrollWidth: r, clientWidth: i } = t, a = r - i, o = a > e;
5
+ return {
6
+ left: o && n > e,
7
+ right: o && n < a - e
8
+ };
9
+ }
10
+ //#endregion
11
+ export { t as readScrollFadeState };
12
+
13
+ //# sourceMappingURL=scroll-fade-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scroll-fade-state.js","names":[],"sources":["../../src/utils/scroll-fade-state.ts"],"sourcesContent":["const SCROLL_EDGE_THRESHOLD_PX = 1;\n\nexport interface ScrollFadeState {\n left: boolean;\n right: boolean;\n}\n\n/** Whether a horizontal scroller is clipped on each edge. */\nexport function readScrollFadeState(element: HTMLElement): ScrollFadeState {\n const { scrollLeft, scrollWidth, clientWidth } = element;\n const maxScroll = scrollWidth - clientWidth;\n const hasOverflow = maxScroll > SCROLL_EDGE_THRESHOLD_PX;\n\n return {\n left: hasOverflow && scrollLeft > SCROLL_EDGE_THRESHOLD_PX,\n right: hasOverflow && scrollLeft < maxScroll - SCROLL_EDGE_THRESHOLD_PX,\n };\n}\n"],"mappings":";AAAA,IAAM,IAA2B;AAQjC,SAAgB,EAAoB,GAAuC;CACzE,IAAM,EAAE,eAAY,gBAAa,mBAAgB,GAC3C,IAAY,IAAc,GAC1B,IAAc,IAAY;CAEhC,OAAO;EACL,MAAM,KAAe,IAAa;EAClC,OAAO,KAAe,IAAa,IAAY;CACjD;AACF"}
@@ -0,0 +1,2 @@
1
+ require("../_virtual/_rolldown/runtime.cjs");const e=require("../i18n/declaration.cjs"),t=require("../node_modules/lucide-react/dist/esm/icons/bot.cjs"),n=require("../node_modules/lucide-react/dist/esm/icons/git-pull-request.cjs"),r=require("../node_modules/lucide-react/dist/esm/icons/package.cjs"),i=require("../node_modules/lucide-react/dist/esm/icons/palette.cjs"),a=require("../node_modules/lucide-react/dist/esm/icons/pen-line.cjs"),o=require("../node_modules/lucide-react/dist/esm/icons/plug.cjs"),s=require("../node_modules/lucide-react/dist/esm/icons/shield-check.cjs"),c=require("../node_modules/lucide-react/dist/esm/icons/workflow.cjs"),l=require("../node_modules/lucide-react/dist/esm/icons/wrench.cjs"),u=require("../node_modules/@openhands/extensions/skills/index.cjs");var d=[`automations`,`environment`,`code-hosting`,`agent-authoring`,`code-quality`,`integrations`,`writing`,`design`,`other`],f={automations:e.I18nKey.SETTINGS$SKILLS_CATEGORY_AUTOMATIONS,environment:e.I18nKey.SETTINGS$SKILLS_CATEGORY_ENVIRONMENT,"code-hosting":e.I18nKey.SETTINGS$SKILLS_CATEGORY_CODE_HOSTING,"agent-authoring":e.I18nKey.SETTINGS$SKILLS_CATEGORY_AGENT_AUTHORING,"code-quality":e.I18nKey.SETTINGS$SKILLS_CATEGORY_CODE_QUALITY,integrations:e.I18nKey.SETTINGS$SKILLS_CATEGORY_INTEGRATIONS,writing:e.I18nKey.SETTINGS$SKILLS_CATEGORY_WRITING,design:e.I18nKey.SETTINGS$SKILLS_CATEGORY_DESIGN,other:e.I18nKey.SETTINGS$SKILLS_CATEGORY_OTHER},p={automations:c.Workflow,environment:l.Wrench,"code-hosting":n.GitPullRequest,"agent-authoring":t.Bot,"code-quality":s.ShieldCheck,integrations:o.Plug,writing:a.PenLine,design:i.Palette,other:r.Package},m=`other`,h=new Set(u.SKILL_CATEGORY_IDS);function g(e){let t=e.category;return t&&h.has(t)?t:m}exports.SKILL_CATEGORY_ICONS=p,exports.SKILL_CATEGORY_LABEL_KEYS=f,exports.SKILL_CATEGORY_ORDER=d,exports.UNCATEGORIZED_SKILL_CATEGORY=m,exports.getSkillCategory=g;
2
+ //# sourceMappingURL=skill-category.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-category.cjs","names":[],"sources":["../../src/utils/skill-category.ts"],"sourcesContent":["import {\n Bot,\n GitPullRequest,\n Package,\n Palette,\n PenLine,\n Plug,\n ShieldCheck,\n Workflow,\n Wrench,\n type LucideIcon,\n} from \"lucide-react\";\nimport {\n SKILL_CATEGORY_IDS,\n type SkillCategoryId,\n} from \"@openhands/extensions/skills\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport type { SkillInfo } from \"#/types/settings\";\n\n/** Display order in the facet rail. `other` last. */\nexport const SKILL_CATEGORY_ORDER: readonly SkillCategoryId[] = [\n \"automations\",\n \"environment\",\n \"code-hosting\",\n \"agent-authoring\",\n \"code-quality\",\n \"integrations\",\n \"writing\",\n \"design\",\n \"other\",\n];\n\nexport const SKILL_CATEGORY_LABEL_KEYS: Record<SkillCategoryId, I18nKey> = {\n automations: I18nKey.SETTINGS$SKILLS_CATEGORY_AUTOMATIONS,\n environment: I18nKey.SETTINGS$SKILLS_CATEGORY_ENVIRONMENT,\n \"code-hosting\": I18nKey.SETTINGS$SKILLS_CATEGORY_CODE_HOSTING,\n \"agent-authoring\": I18nKey.SETTINGS$SKILLS_CATEGORY_AGENT_AUTHORING,\n \"code-quality\": I18nKey.SETTINGS$SKILLS_CATEGORY_CODE_QUALITY,\n integrations: I18nKey.SETTINGS$SKILLS_CATEGORY_INTEGRATIONS,\n writing: I18nKey.SETTINGS$SKILLS_CATEGORY_WRITING,\n design: I18nKey.SETTINGS$SKILLS_CATEGORY_DESIGN,\n other: I18nKey.SETTINGS$SKILLS_CATEGORY_OTHER,\n};\n\nexport const SKILL_CATEGORY_ICONS: Record<SkillCategoryId, LucideIcon> = {\n automations: Workflow,\n environment: Wrench,\n \"code-hosting\": GitPullRequest,\n \"agent-authoring\": Bot,\n \"code-quality\": ShieldCheck,\n integrations: Plug,\n writing: PenLine,\n design: Palette,\n other: Package,\n};\n\n/** The catalog uses `other` for a skill with no marketplace entry, so it means \"uncategorized\" there exactly as it does for a local skill. */\nexport const UNCATEGORIZED_SKILL_CATEGORY: SkillCategoryId = \"other\";\n\nconst KNOWN_CATEGORIES = new Set<string>(SKILL_CATEGORY_IDS);\n\n/** Local skills carry no category and a stale bundled catalog could carry one this build does not know; both degrade to `other` rather than an unrenderable facet value. */\nexport function getSkillCategory(skill: SkillInfo): SkillCategoryId {\n const raw = skill.category;\n if (raw && KNOWN_CATEGORIES.has(raw)) {\n return raw;\n }\n return UNCATEGORIZED_SKILL_CATEGORY;\n}\n"],"mappings":"ixBAoBA,IAAa,EAAmD,CAC9D,cACA,cACA,eACA,kBACA,eACA,eACA,UACA,SACA,OACF,EAEa,EAA8D,CACzE,YAAa,EAAA,QAAQ,qCACrB,YAAa,EAAA,QAAQ,qCACrB,eAAgB,EAAA,QAAQ,sCACxB,kBAAmB,EAAA,QAAQ,yCAC3B,eAAgB,EAAA,QAAQ,sCACxB,aAAc,EAAA,QAAQ,sCACtB,QAAS,EAAA,QAAQ,iCACjB,OAAQ,EAAA,QAAQ,gCAChB,MAAO,EAAA,QAAQ,8BACjB,EAEa,EAA4D,CACvE,YAAa,EAAA,SACb,YAAa,EAAA,OACb,eAAgB,EAAA,eAChB,kBAAmB,EAAA,IACnB,eAAgB,EAAA,YAChB,aAAc,EAAA,KACd,QAAS,EAAA,QACT,OAAQ,EAAA,QACR,MAAO,EAAA,OACT,EAGa,EAAgD,QAEvD,EAAmB,IAAI,IAAY,EAAA,kBAAkB,EAG3D,SAAgB,EAAiB,EAAmC,CAClE,IAAM,EAAM,EAAM,SAIlB,OAHI,GAAO,EAAiB,IAAI,CAAG,EAC1B,EAEF,CACT"}
@@ -0,0 +1,51 @@
1
+ import { I18nKey as e } from "../i18n/declaration.js";
2
+ import { Bot as t } from "../node_modules/lucide-react/dist/esm/icons/bot.js";
3
+ import { GitPullRequest as n } from "../node_modules/lucide-react/dist/esm/icons/git-pull-request.js";
4
+ import { Package as r } from "../node_modules/lucide-react/dist/esm/icons/package.js";
5
+ import { Palette as i } from "../node_modules/lucide-react/dist/esm/icons/palette.js";
6
+ import { PenLine as a } from "../node_modules/lucide-react/dist/esm/icons/pen-line.js";
7
+ import { Plug as o } from "../node_modules/lucide-react/dist/esm/icons/plug.js";
8
+ import { ShieldCheck as s } from "../node_modules/lucide-react/dist/esm/icons/shield-check.js";
9
+ import { Workflow as c } from "../node_modules/lucide-react/dist/esm/icons/workflow.js";
10
+ import { Wrench as l } from "../node_modules/lucide-react/dist/esm/icons/wrench.js";
11
+ import { SKILL_CATEGORY_IDS as u } from "../node_modules/@openhands/extensions/skills/index.js";
12
+ //#region src/utils/skill-category.ts
13
+ var d = [
14
+ "automations",
15
+ "environment",
16
+ "code-hosting",
17
+ "agent-authoring",
18
+ "code-quality",
19
+ "integrations",
20
+ "writing",
21
+ "design",
22
+ "other"
23
+ ], f = {
24
+ automations: e.SETTINGS$SKILLS_CATEGORY_AUTOMATIONS,
25
+ environment: e.SETTINGS$SKILLS_CATEGORY_ENVIRONMENT,
26
+ "code-hosting": e.SETTINGS$SKILLS_CATEGORY_CODE_HOSTING,
27
+ "agent-authoring": e.SETTINGS$SKILLS_CATEGORY_AGENT_AUTHORING,
28
+ "code-quality": e.SETTINGS$SKILLS_CATEGORY_CODE_QUALITY,
29
+ integrations: e.SETTINGS$SKILLS_CATEGORY_INTEGRATIONS,
30
+ writing: e.SETTINGS$SKILLS_CATEGORY_WRITING,
31
+ design: e.SETTINGS$SKILLS_CATEGORY_DESIGN,
32
+ other: e.SETTINGS$SKILLS_CATEGORY_OTHER
33
+ }, p = {
34
+ automations: c,
35
+ environment: l,
36
+ "code-hosting": n,
37
+ "agent-authoring": t,
38
+ "code-quality": s,
39
+ integrations: o,
40
+ writing: a,
41
+ design: i,
42
+ other: r
43
+ }, m = "other", h = new Set(u);
44
+ function g(e) {
45
+ let t = e.category;
46
+ return t && h.has(t) ? t : m;
47
+ }
48
+ //#endregion
49
+ export { p as SKILL_CATEGORY_ICONS, f as SKILL_CATEGORY_LABEL_KEYS, d as SKILL_CATEGORY_ORDER, m as UNCATEGORIZED_SKILL_CATEGORY, g as getSkillCategory };
50
+
51
+ //# sourceMappingURL=skill-category.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-category.js","names":[],"sources":["../../src/utils/skill-category.ts"],"sourcesContent":["import {\n Bot,\n GitPullRequest,\n Package,\n Palette,\n PenLine,\n Plug,\n ShieldCheck,\n Workflow,\n Wrench,\n type LucideIcon,\n} from \"lucide-react\";\nimport {\n SKILL_CATEGORY_IDS,\n type SkillCategoryId,\n} from \"@openhands/extensions/skills\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport type { SkillInfo } from \"#/types/settings\";\n\n/** Display order in the facet rail. `other` last. */\nexport const SKILL_CATEGORY_ORDER: readonly SkillCategoryId[] = [\n \"automations\",\n \"environment\",\n \"code-hosting\",\n \"agent-authoring\",\n \"code-quality\",\n \"integrations\",\n \"writing\",\n \"design\",\n \"other\",\n];\n\nexport const SKILL_CATEGORY_LABEL_KEYS: Record<SkillCategoryId, I18nKey> = {\n automations: I18nKey.SETTINGS$SKILLS_CATEGORY_AUTOMATIONS,\n environment: I18nKey.SETTINGS$SKILLS_CATEGORY_ENVIRONMENT,\n \"code-hosting\": I18nKey.SETTINGS$SKILLS_CATEGORY_CODE_HOSTING,\n \"agent-authoring\": I18nKey.SETTINGS$SKILLS_CATEGORY_AGENT_AUTHORING,\n \"code-quality\": I18nKey.SETTINGS$SKILLS_CATEGORY_CODE_QUALITY,\n integrations: I18nKey.SETTINGS$SKILLS_CATEGORY_INTEGRATIONS,\n writing: I18nKey.SETTINGS$SKILLS_CATEGORY_WRITING,\n design: I18nKey.SETTINGS$SKILLS_CATEGORY_DESIGN,\n other: I18nKey.SETTINGS$SKILLS_CATEGORY_OTHER,\n};\n\nexport const SKILL_CATEGORY_ICONS: Record<SkillCategoryId, LucideIcon> = {\n automations: Workflow,\n environment: Wrench,\n \"code-hosting\": GitPullRequest,\n \"agent-authoring\": Bot,\n \"code-quality\": ShieldCheck,\n integrations: Plug,\n writing: PenLine,\n design: Palette,\n other: Package,\n};\n\n/** The catalog uses `other` for a skill with no marketplace entry, so it means \"uncategorized\" there exactly as it does for a local skill. */\nexport const UNCATEGORIZED_SKILL_CATEGORY: SkillCategoryId = \"other\";\n\nconst KNOWN_CATEGORIES = new Set<string>(SKILL_CATEGORY_IDS);\n\n/** Local skills carry no category and a stale bundled catalog could carry one this build does not know; both degrade to `other` rather than an unrenderable facet value. */\nexport function getSkillCategory(skill: SkillInfo): SkillCategoryId {\n const raw = skill.category;\n if (raw && KNOWN_CATEGORIES.has(raw)) {\n return raw;\n }\n return UNCATEGORIZED_SKILL_CATEGORY;\n}\n"],"mappings":";;;;;;;;;;;;AAoBA,IAAa,IAAmD;CAC9D;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF,GAEa,IAA8D;CACzE,aAAa,EAAQ;CACrB,aAAa,EAAQ;CACrB,gBAAgB,EAAQ;CACxB,mBAAmB,EAAQ;CAC3B,gBAAgB,EAAQ;CACxB,cAAc,EAAQ;CACtB,SAAS,EAAQ;CACjB,QAAQ,EAAQ;CAChB,OAAO,EAAQ;AACjB,GAEa,IAA4D;CACvE,aAAa;CACb,aAAa;CACb,gBAAgB;CAChB,mBAAmB;CACnB,gBAAgB;CAChB,cAAc;CACd,SAAS;CACT,QAAQ;CACR,OAAO;AACT,GAGa,IAAgD,SAEvD,IAAmB,IAAI,IAAY,CAAkB;AAG3D,SAAgB,EAAiB,GAAmC;CAClE,IAAM,IAAM,EAAM;CAIlB,OAHI,KAAO,EAAiB,IAAI,CAAG,IAC1B,IAEF;AACT"}
@@ -1,2 +1,2 @@
1
- require("../_virtual/_rolldown/runtime.cjs");var e=[`project`,`personal`,`public`],t=[`/.agents/skills/`,`/.openhands/skills/`,`/.openhands/microagents/`];function n(e){return e.replace(/\\/g,`/`)}function r(e){let t=n(e).toLowerCase();return t===`public`?!0:t.includes(`public-skills`)||t.includes(`/.openhands/cache/skills/`)}function i(e){let r=n(e);return/^\/Users\/[^/]+\/\.(agents|openhands)\//.test(r)||/^\/home\/[^/]+\/\.(agents|openhands)\//.test(r)?!0:t.some(e=>{let t=r.indexOf(e);if(t===-1)return!1;let n=r.slice(0,t);return/^\/Users\/[^/]+$/.test(n)||/^\/home\/[^/]+$/.test(n)})}function a(e,r){let a=n(e);if(!t.some(e=>a.includes(e))||i(e))return!1;if(r){let e=n(r).replace(/\/$/,``);if(a.startsWith(e))return!0}return!0}function o(e,t){let n=e.source?.trim();if(!n)return e.type===`repo`?`project`:`public`;let o=n.toLowerCase();return r(n)?`public`:o===`user`||o===`global`?`personal`:o===`project`||o===`repo`||o===`sandbox`?`project`:i(n)?`personal`:a(n,t)?`project`:`public`}function s(t,n){let r={project:[],personal:[],public:[]};for(let e of t)r[o(e,n)].push(e);for(let t of e)r[t].sort((e,t)=>e.name.localeCompare(t.name));return r}exports.SKILL_SCOPE_ORDER=e,exports.groupSkillsByScope=s;
1
+ require("../_virtual/_rolldown/runtime.cjs");var e=[`project`,`personal`,`public`],t=[`/.agents/skills/`,`/.openhands/skills/`,`/.openhands/microagents/`];function n(e){return e.replace(/\\/g,`/`)}function r(e){let t=n(e).toLowerCase();return t===`public`?!0:t.includes(`public-skills`)||t.includes(`/.openhands/cache/skills/`)}function i(e){let r=n(e);return/^\/Users\/[^/]+\/\.(agents|openhands)\//.test(r)||/^\/home\/[^/]+\/\.(agents|openhands)\//.test(r)?!0:t.some(e=>{let t=r.indexOf(e);if(t===-1)return!1;let n=r.slice(0,t);return/^\/Users\/[^/]+$/.test(n)||/^\/home\/[^/]+$/.test(n)})}function a(e,r){let a=n(e);if(!t.some(e=>a.includes(e))||i(e))return!1;if(r){let e=n(r).replace(/\/$/,``);if(a.startsWith(e))return!0}return!0}function o(e,t){let n=e.source?.trim();if(!n)return e.type===`repo`?`project`:`public`;let o=n.toLowerCase();return r(n)?`public`:o===`user`||o===`global`?`personal`:o===`project`||o===`repo`||o===`sandbox`?`project`:i(n)?`personal`:a(n,t)?`project`:`public`}function s(t,n){let r={project:[],personal:[],public:[]};for(let e of t)r[o(e,n)].push(e);for(let t of e)r[t].sort((e,t)=>e.name.localeCompare(t.name));return r}exports.SKILL_SCOPE_ORDER=e,exports.getSkillScope=o,exports.groupSkillsByScope=s;
2
2
  //# sourceMappingURL=skill-scope.cjs.map