@openhands/agent-canvas 1.9.0 → 1.11.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 (1386) hide show
  1. package/README.md +1 -1
  2. package/README.windows.md +2 -2
  3. package/build/assets/{acp-providers-C921BlYB.js → acp-providers-BkL3HWa3.js} +1 -1
  4. package/build/assets/active-backend-context-BBvP-bI2.js +2 -0
  5. package/build/assets/agent-context-settings-Bno1nwPL.js +1 -0
  6. package/build/assets/{agent-profiles-settings-BymJf3EP.js → agent-profiles-settings-DqoS7RL3.js} +1 -1
  7. package/build/assets/agent-server-conversation-service.api-0RztSdJJ.js +86 -0
  8. package/build/assets/agent-settings-BJHryp65.js +1 -0
  9. package/build/assets/{agent-settings-WzqXk6B4.js → agent-settings-h8hQz-IU.js} +2 -2
  10. package/build/assets/alert-banner-lrK-2_0Y.js +1 -0
  11. package/build/assets/{api-key-entry-screen-DI0I04O3.js → api-key-entry-screen-Qsb83VX1.js} +1 -1
  12. package/build/assets/{app-settings-DGistSFV.js → app-settings-r1RUbgGi.js} +1 -1
  13. package/build/assets/automation-detail-7LkL91j9.js +3 -0
  14. package/build/assets/automation-export-U2QNyNy6.js +2 -0
  15. package/build/assets/automation-setup-route-Bel9_Lue.js +1 -0
  16. package/build/assets/automation-templates-CRLDssaI.js +1 -0
  17. package/build/assets/automations-list-B2iV3ZKW.js +1 -0
  18. package/build/assets/{back-nav-button-D4ngzpSh.js → back-nav-button-B3pYwmUJ.js} +1 -1
  19. package/build/assets/backend-form-modal-OroTqnAv.js +1 -0
  20. package/build/assets/{backend-synced-settings-badge-BnzI8Ysj.js → backend-synced-settings-badge-DB4717Iu.js} +1 -1
  21. package/build/assets/{badge-1Mf1iPcX.js → badge-yR53enbU.js} +1 -1
  22. package/build/assets/{base-modal-BBuy0WQQ.js → base-modal-3NmIOKDm.js} +1 -1
  23. package/build/assets/bot-DuN83i3p.js +1 -0
  24. package/build/assets/{brand-button-DGN6Y9o6.js → brand-button-CJcwjnfb.js} +1 -1
  25. package/build/assets/{browser-D_ekTlTS.js → browser--eoQOo4M.js} +2 -2
  26. package/build/assets/{browser-tab-D4a4Ou_w.js → browser-tab-A94o33Vn.js} +1 -1
  27. package/build/assets/{chat-send-button-CgbcjD97.js → chat-send-button-B8n6-DQA.js} +1 -1
  28. package/build/assets/check-DLOKoFU9.js +1 -0
  29. package/build/assets/{checkmark-CxdXtM3b.js → checkmark-XZyokq_Y.js} +1 -1
  30. package/build/assets/chevron-down-CnIbtM6i.js +1 -0
  31. package/build/assets/circle-check-CxCYJrpZ.js +1 -0
  32. package/build/assets/{circle-plus-check-toggle-yTAS-nX3.js → circle-plus-check-toggle-BVzv5EkZ.js} +1 -1
  33. package/build/assets/{close-CDAVqnTn.js → close-ScPlnwyq.js} +1 -1
  34. package/build/assets/{cloud-funnel-analytics-CEOl5Gxr.js → cloud-funnel-analytics-CBQdPZl_.js} +1 -1
  35. package/build/assets/{combobox-caret-Bd2yySnF.js → combobox-caret-BlmRwiM8.js} +1 -1
  36. package/build/assets/command-menu-PsRXVBz2.js +1 -0
  37. package/build/assets/condenser-settings-w7L3EFvm.js +1 -0
  38. package/build/assets/{confirmation-modal-NCUPr2-O.js → confirmation-modal-DAH0XtOp.js} +1 -1
  39. package/build/assets/context-menu-list-item-BQhmFVEK.js +1 -0
  40. package/build/assets/{conversation-CUJ0Vo8g.js → conversation-BUzBZAc-.js} +7 -7
  41. package/build/assets/conversation-panel-pzAKsSDb.js +1 -0
  42. package/build/assets/conversation-pzAKsSDb.js +1 -0
  43. package/build/assets/{conversation-state-store-F62HvuI1.js → conversation-state-store-Bs8gA263.js} +1 -1
  44. package/build/assets/{conversation-store-C6hSXHw0.js → conversation-store-B8Eahyeg.js} +1 -1
  45. package/build/assets/{conversation-tab-empty-state-BCZ7rUMH.js → conversation-tab-empty-state-C9sfDOlt.js} +1 -1
  46. package/build/assets/{copy-z7idLzWO.js → copy-Drmhc2jD.js} +1 -1
  47. package/build/assets/{copy-to-clipboard-button-D_Lp6-Fl.js → copy-to-clipboard-button-DatoElj8.js} +1 -1
  48. package/build/assets/{device-verify-DLmolX8Q.js → device-verify-BIjXeW9N.js} +1 -1
  49. package/build/assets/{dist-hOnv1nn2.js → dist-Bl64nBZL.js} +1 -1
  50. package/build/assets/{dropdown-classes-BB8rzqXL.js → dropdown-classes-zFW7qPSK.js} +1 -1
  51. package/build/assets/entry.client-DzbDyLkV.js +2 -0
  52. package/build/assets/enum-filter-dropdown-CctILg5t.js +1 -0
  53. package/build/assets/{environment-switch-overlay-BepBBX66.js → environment-switch-overlay-Cvmo6clk.js} +1 -1
  54. package/build/assets/{extensions-hub-R3KNv-5V.js → extensions-hub-DOmHPGTA.js} +1 -1
  55. package/build/assets/{extensions-navigation-CfWFmI1I.js → extensions-navigation-6zU5M1pa.js} +1 -1
  56. package/build/assets/{external-link-BdBSg8rk.js → external-link-zWbg5KXS.js} +1 -1
  57. package/build/assets/file-text-RecuaId_.js +1 -0
  58. package/build/assets/files-tab-BzofBmF4.js +1 -0
  59. package/build/assets/{folder-C86qXV7M.js → folder-C1ou4_DT.js} +1 -1
  60. package/build/assets/{form-control-classes-DAfsCJTe.js → form-control-classes-DLN3Qgub.js} +1 -1
  61. package/build/assets/format-relative-time-DGPQlPx0.js +1 -0
  62. package/build/assets/format-time-delta-BIR5Os7T.js +1 -0
  63. package/build/assets/{git-provider-icon-BZqqUPlm.js → git-provider-icon-BLMlwy02.js} +1 -1
  64. package/build/assets/{git-repo-dropdown-DEpOwUez.js → git-repo-dropdown-B7RvO70z.js} +1 -1
  65. package/build/assets/git-repo-dropdown-B_PTq4ol.js +1 -0
  66. package/build/assets/{highlighted-source-view-CX9oIoVT.js → highlighted-source-view-CgJfD5VT.js} +1 -1
  67. package/build/assets/home-DEZaZqYv.js +1 -0
  68. package/build/assets/home-r89Vj2td.js +1 -0
  69. package/build/assets/{home-store-Ch1ErdBc.js → home-store-D7CjMN_-.js} +1 -1
  70. package/build/assets/{iconBase-B2rQun3J.js → iconBase-C2sR-uAp.js} +1 -1
  71. package/build/assets/index-home-r89Vj2td.js +1 -0
  72. package/build/assets/install-server-modal-BTwK5lbi.js +1 -0
  73. package/build/assets/kebab-menu-item-content-C4CkeiJO.js +1 -0
  74. package/build/assets/{launch-B1POpHuP.js → launch-DVlx4v9o.js} +1 -1
  75. package/build/assets/{link-external-BDBCz-_z.js → link-external-BNZzCM1I.js} +1 -1
  76. package/build/assets/{list-todo-DtiL3lTp.js → list-todo-CheUtB7F.js} +1 -1
  77. package/build/assets/llm-not-configured-banner-CwKu8C6g.js +27 -0
  78. package/build/assets/llm-settings-BJotLQND.js +1 -0
  79. package/build/assets/llm-settings-CDM-5H2A.js +1 -0
  80. package/build/assets/{llm-subscription-service-DBJbfd8Z.js → llm-subscription-service-7eVfDIE1.js} +1 -1
  81. package/build/assets/loader-circle-C5AnEN8r.js +1 -0
  82. package/build/assets/{loading-spinner-DfZ_bhV7.js → loading-spinner-CN3riY7k.js} +1 -1
  83. package/build/assets/{manage-backends-modal-CwyWsiag.js → manage-backends-modal-HNWKLYhq.js} +1 -1
  84. package/build/assets/manifest-2a36a8f8.js +1 -0
  85. package/build/assets/manifest-subpage-layout-D-m-h8_t.js +1 -0
  86. package/build/assets/map-provider-7Bp2aih5.js +1 -0
  87. package/build/assets/markdown-renderer-BiiiIznl.js +8 -0
  88. package/build/assets/mcp-gLgPP7AS.js +9 -0
  89. package/build/assets/mcp-marketplace-utils-Dr_HG_ol.js +1 -0
  90. package/build/assets/messages-D1cbVhRK.js +40 -0
  91. package/build/assets/{modal-backdrop-X-vKo61e.js → modal-backdrop-BSzNhM4r.js} +1 -1
  92. package/build/assets/{modal-body-CMsDpalT.js → modal-body-duRaxj_K.js} +1 -1
  93. package/build/assets/{modal-classes-B6PDrxXo.js → modal-classes-CLEXO6dj.js} +1 -1
  94. package/build/assets/{modal-close-button-DyxBZaAb.js → modal-close-button-D0aT02hs.js} +1 -1
  95. package/build/assets/mouse-pointer-click-Px-dXWcS.js +1 -0
  96. package/build/assets/{navigation-context-BOGzIng3.js → navigation-context-CQZwH_tC.js} +1 -1
  97. package/build/assets/navigation-link-Bxo3-4vo.js +1 -0
  98. package/build/assets/npm-DRzJF5Zn.js +1 -0
  99. package/build/assets/onboarding-DSr8hOpk.js +1 -0
  100. package/build/assets/onboarding-modal-C6Euf7N4.js +1 -0
  101. package/build/assets/{openhands-logo-CmYvJXBa.js → openhands-logo-BS-Epajy.js} +1 -1
  102. package/build/assets/{organization-service.api-UDy63-oC.js → organization-service.api-C4GYWwj9.js} +1 -1
  103. package/build/assets/{pencil-BjgtZmWp.js → pencil-Bl3GWhgq.js} +1 -1
  104. package/build/assets/{planner-tab-BWk8885v.js → planner-tab-CZcguxTK.js} +1 -1
  105. package/build/assets/{plugins-management-service-CjkgF2dd.js → plugins-management-service-BmDzOQsd.js} +1 -1
  106. package/build/assets/plus-CtzlyAoF.js +1 -0
  107. package/build/assets/{profiles-service.api-CukSFLzz.js → profiles-service.api-CoLTwjc1.js} +1 -1
  108. package/build/assets/{providers-CqUWC85T.js → providers-tBzTpz1w.js} +1 -1
  109. package/build/assets/{proxy-BBUG3sd2.js → proxy-DCI9S-LA.js} +1 -1
  110. package/build/assets/{puzzle-BoNc6zZ8.js → puzzle-B3v361yY.js} +1 -1
  111. package/build/assets/recommended-automations-launcher-BbJAJVED.js +1 -0
  112. package/build/assets/{refresh-cw-BrM5ZAZD.js → refresh-cw-B9GhC3QC.js} +1 -1
  113. package/build/assets/root-BfM_kC_d.css +1 -0
  114. package/build/assets/root-gstBEjty.js +2 -0
  115. package/build/assets/root-layout-BIAFLP9p.js +2 -0
  116. package/build/assets/{schema-field-nImDoY6-.js → schema-field-zhsVDllR.js} +1 -1
  117. package/build/assets/{sdk-section-page-BxMrtUNV.js → sdk-section-page-CS4GWn0y.js} +1 -1
  118. package/build/assets/{search-7DRiGm4Z.js → search-BatSpWed.js} +1 -1
  119. package/build/assets/search-CYaiKHRp.js +1 -0
  120. package/build/assets/{secrets-service-Dhjh3HhH.js → secrets-service-DjgGduXk.js} +1 -1
  121. package/build/assets/{secrets-settings-CPdxceT_.js → secrets-settings-f-qahfbi.js} +1 -1
  122. package/build/assets/{segmented-toggle-Do6oyepX.js → segmented-toggle-SmvsR3jW.js} +1 -1
  123. package/build/assets/settings-CWFxymAf.js +1 -0
  124. package/build/assets/settings-DQd0xLEw.js +1 -0
  125. package/build/assets/{settings-dropdown-input-DYCULKpp.js → settings-dropdown-input-TWIeiG02.js} +1 -1
  126. package/build/assets/{settings-gear-TYXnELES.js → settings-gear-DaJj6Pde.js} +1 -1
  127. package/build/assets/{settings-index-C9o2NBO0.js → settings-index-BVwy9JEp.js} +1 -1
  128. package/build/assets/{settings-input-B-q2gkVy.js → settings-input-D61Vzp9e.js} +1 -1
  129. package/build/assets/settings-like-page-layout-classes-Cw4Yzv_P.js +1 -0
  130. package/build/assets/{settings-list-classes-WpQi0q1L.js → settings-list-classes-sE0ASr1s.js} +1 -1
  131. package/build/assets/{settings-modal-CEK0AIx6.js → settings-modal-D6D5ngET.js} +1 -1
  132. package/build/assets/{settings-section-header-context-CnIIQAUn.js → settings-section-header-context-BOJ_Fbak.js} +1 -1
  133. package/build/assets/settings-service.api-DZp7E7A9.js +1 -0
  134. package/build/assets/{settings-switch-LqKdGxHL.js → settings-switch-Drt-rF5s.js} +1 -1
  135. package/build/assets/{settings-utils-BL_Z9uIe.js → settings-utils-gw2ppAvw.js} +1 -1
  136. package/build/assets/{shared-conversation-Bu-dQlgp.js → shared-conversation-DIxZjElr.js} +1 -1
  137. package/build/assets/shield-check-D2cpEpv3.js +1 -0
  138. package/build/assets/{sidebar-layout-oHBGQmLh.js → sidebar-layout-Dxg6zc2K.js} +1 -1
  139. package/build/assets/sidebar-mobile-menu-toggle-OoZBHxaT.js +1 -0
  140. package/build/assets/{sidebar-nav-link-CrujNA09.js → sidebar-nav-link-CxLoG-dG.js} +1 -1
  141. package/build/assets/sidebar-store-BJeYY-E9.js +1 -0
  142. package/build/assets/{skill-card-pill-row-CZBI7OqH.js → skill-card-pill-row-B_BYBONu.js} +1 -1
  143. package/build/assets/{skill-icon-badge-BOov_phZ.js → skill-icon-badge-CN41Hy9l.js} +1 -1
  144. package/build/assets/skill-scope-B1Per5XI.js +1 -0
  145. package/build/assets/{skills-CYFLsN5U.js → skills-B0IliMxw.js} +1 -1
  146. package/build/assets/{skills-plugins-D0PiHWAD.js → skills-plugins-B3AO6sMz.js} +1 -1
  147. package/build/assets/skills-settings-DmmgJ6CT.js +2 -0
  148. package/build/assets/sparkles-g7y3r-Ut.js +1 -0
  149. package/build/assets/{styled-tooltip-C7grwnOX.js → styled-tooltip-C5C07RQC.js} +1 -1
  150. package/build/assets/{switch-skeleton-BQoOhQTB.js → switch-skeleton-DwOoCqaL.js} +1 -1
  151. package/build/assets/{syntax-highlighter-B92AFGMy.js → syntax-highlighter-BGDg_7w9.js} +1 -1
  152. package/build/assets/{task-list-tab-R3ac6m7O.js → task-list-tab-C19Q_JNf.js} +1 -1
  153. package/build/assets/{terminal-cMS3RgVE.js → terminal-BUpID2wS.js} +1 -1
  154. package/build/assets/{terminal-yqkNdEAx.js → terminal-CbuMRYal.js} +1 -1
  155. package/build/assets/{toggle-switch-BeSrbgCg.js → toggle-switch-CIioisto.js} +1 -1
  156. package/build/assets/{trash-2-wW5TWcdN.js → trash-2-CzDVN-Iw.js} +1 -1
  157. package/build/assets/{typography-iYhzLlHO.js → typography-D9tiHct7.js} +1 -1
  158. package/build/assets/{u-check-circle-DBEvndTS.js → u-check-circle-BKn1spCL.js} +1 -1
  159. package/build/assets/{u-edit-809W9D9T.js → u-edit-DAkcF52u.js} +1 -1
  160. package/build/assets/{u-robot-CJtSzy5X.js → u-robot-BvAOA2ZD.js} +1 -1
  161. package/build/assets/{use-acp-credential-form-DUxbxmbq.js → use-acp-credential-form-DJmmJKMo.js} +1 -1
  162. package/build/assets/{use-activate-agent-profile-CDHA52tC.js → use-activate-agent-profile-CeFfYwu_.js} +1 -1
  163. package/build/assets/{use-agent-profiles-TsOdIyw5.js → use-agent-profiles-BHLkLbRR.js} +1 -1
  164. package/build/assets/{use-breakpoint-DA7JqsRN.js → use-breakpoint-DWtihr9g.js} +1 -1
  165. package/build/assets/{use-can-manage-org-profiles-Bt1M71u5.js → use-can-manage-org-profiles-Bu4y8gSx.js} +1 -1
  166. package/build/assets/{use-click-outside-element-DKqpqEEm.js → use-click-outside-element-W6Os4Nlb.js} +1 -1
  167. package/build/assets/{use-cloud-current-user-id-DWt7HCgf.js → use-cloud-current-user-id-QD9x3ySO.js} +1 -1
  168. package/build/assets/{use-config-CxlEdf_v.js → use-config-CPwqciXN.js} +1 -1
  169. package/build/assets/{use-create-conversation-nOJ6Um5h.js → use-create-conversation-DWaSVUOB.js} +1 -1
  170. package/build/assets/{use-create-secret-Dj5ang9x.js → use-create-secret-BsOfOLvg.js} +1 -1
  171. package/build/assets/use-is-authed-Bka89Xmm.js +1 -0
  172. package/build/assets/{use-is-creating-conversation-CAggrM75.js → use-is-creating-conversation-CVefC9Ns.js} +1 -1
  173. package/build/assets/{use-launch-skill-in-chat-DKzCTMt0.js → use-launch-skill-in-chat-BcKNjxxd.js} +1 -1
  174. package/build/assets/use-llm-profiles-CU8ah1pz.js +1 -0
  175. package/build/assets/use-manifest-capabilities-DBYPjyV6.js +1 -0
  176. package/build/assets/{use-onboarding-completion-gxQlcEy2.js → use-onboarding-completion-CtNJxkXG.js} +1 -1
  177. package/build/assets/{use-plugins-marketplace-CVO7sXYR.js → use-plugins-marketplace-ZEA-gyM9.js} +1 -1
  178. package/build/assets/use-save-agent-profile-DgI_Uz9a.js +1 -0
  179. package/build/assets/{use-save-settings-L3aMaDeS.js → use-save-settings-pSjRhD_m.js} +1 -1
  180. package/build/assets/{use-settings-8nt3DGxW.js → use-settings-BHWsOcIG.js} +1 -1
  181. package/build/assets/use-settings-nav-items-CQgkxUbV.js +16 -0
  182. package/build/assets/use-tracking-CGCsBWhg.js +3 -0
  183. package/build/assets/{use-user-conversation-BIIpGUgM.js → use-user-conversation-DRfEU8x0.js} +1 -1
  184. package/build/assets/{useInfiniteQuery-BLRVmVPU.js → useInfiniteQuery-DbCv0Jzd.js} +1 -1
  185. package/build/assets/{useMutation-CaSHLnX0.js → useMutation-ChpkYxI5.js} +1 -1
  186. package/build/assets/{useQueries--d_WWAzc.js → useQueries-Cjv3E8_1.js} +1 -1
  187. package/build/assets/useQuery-BCnzy4LX.js +1 -0
  188. package/build/assets/utils-DPQfkd-7.js +1 -0
  189. package/build/assets/{vendor-markdown-BML7QbqS.js → vendor-markdown-j0kYzV48.js} +1 -1
  190. package/build/assets/{vendor-styling-Bcgpimp9.js → vendor-styling-Ck5D_A2Q.js} +6 -6
  191. package/build/assets/{vendor~browser-jaN4ilxM.js → vendor~browser-C6uXH-dw.js} +2 -2
  192. package/build/assets/vendor~browser-DJ1pl_wn.js +47 -0
  193. package/build/assets/{vendor~browser-tab-_-VCXq8n.js → vendor~browser-tab-C5uuAxZX.js} +1 -1
  194. package/build/assets/vendor~entry.client-CgNUwtQL.js +1 -0
  195. package/build/assets/{vendor~entry.client-BcYIVQvB.js → vendor~entry.client-zSIea5EO.js} +2 -2
  196. package/build/assets/vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~cy4jtuc2-rfV8mQ9m.js +1 -0
  197. package/build/assets/{vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~b0bpqexo-CbTboogo.js → vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~kv3pap4j-oGvLV0dO.js} +4 -4
  198. package/build/assets/vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~lq5hicxx-cHFhpUBq.js +26 -0
  199. package/build/assets/{vendor~files-tab-C7RmQJwN.js → vendor~files-tab-C87pjSpi.js} +1 -1
  200. package/build/assets/{vendor~index-home~home~conversation-panel~conversation-Bqp1ZqJM.js → vendor~index-home~home~conversation-panel~conversation-DiXf0dkj.js} +1 -1
  201. package/build/assets/{vendor~conversation-panel~conversation~alert-banner-BNzz5FuZ.js → vendor~index-home~home~conversation-panel~conversation~alert-banner-B3qC_oj8.js} +1 -1
  202. package/build/assets/{vendor~launch-ChXCOGw8.js → vendor~launch-CHwEQG6e.js} +1 -1
  203. package/build/assets/vendor~module-DyG7x7JT.js +2 -0
  204. package/build/assets/{vendor~root-layout~conversation-panel~conversation-BCn8lzeG.js → vendor~root-layout~conversation-panel~conversation-DEzjR4K7.js} +1 -1
  205. package/build/assets/{vendor~root-layout~conversation-panel~conversation~shared-conversation-DRblkyXD.js → vendor~root-layout~conversation-panel~conversation~shared-conversation-DOuig0C0.js} +1 -1
  206. package/build/assets/vendor~root-layout~conversation-panel~conversation~skills-settings~automations-list~shared-~bovqqk8e-U-xdsAEx.js +1 -0
  207. package/build/assets/{vendor~root-layout~index-home~home~conversation-panel~conversation~automation-setup-route-B_L-gcOG.js → vendor~root-layout~index-home~home~conversation-panel~conversation~automation-setup-route-CjECvSl5.js} +1 -1
  208. package/build/assets/{vendor~root-layout~index-home~home~conversation-panel~conversation~shared-conversation-sjx0x5ac.js → vendor~root-layout~index-home~home~conversation-panel~conversation~shared-conversation-CQR5Sa0H.js} +1 -1
  209. package/build/assets/{vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~gy8zbn65-CGt6bWRT.js → vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~gxu4j2ea-Cwhh3zLe.js} +1 -1
  210. package/build/assets/{vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~dfc8ddxy-tTyxnjXT.js → vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~hjcjabwg-CuQhkiS7.js} +1 -1
  211. package/build/assets/vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~skills-setti~9pstowjp-BOVIFA_g.js +73 -0
  212. package/build/assets/{vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~skills-setti~dufan6ng-Dtdw8H0q.js → vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~skills-setti~ht43enc2-C0JXQb_q.js} +162 -54
  213. package/build/assets/{verification-settings-DBsnSXC3.js → verification-settings-BItwt998.js} +1 -1
  214. package/build/assets/wrench-B1_H-tL1.js +1 -0
  215. package/build/assets/x-RYDBg-e2.js +1 -0
  216. package/build/assets/{x-mark-jcTkPiOB.js → x-mark-BopmFoBq.js} +1 -1
  217. package/build/assets/zap-tbKDzCe3.js +1 -0
  218. package/build/index.html +4 -4
  219. package/build/locales/ar/openhands.json +108 -5
  220. package/build/locales/ca/openhands.json +108 -5
  221. package/build/locales/de/openhands.json +108 -5
  222. package/build/locales/en/openhands.json +108 -5
  223. package/build/locales/es/openhands.json +108 -5
  224. package/build/locales/fr/openhands.json +108 -5
  225. package/build/locales/it/openhands.json +108 -5
  226. package/build/locales/ja/openhands.json +108 -5
  227. package/build/locales/ko-KR/openhands.json +108 -5
  228. package/build/locales/no/openhands.json +108 -5
  229. package/build/locales/pt/openhands.json +108 -5
  230. package/build/locales/tr/openhands.json +108 -5
  231. package/build/locales/uk/openhands.json +108 -5
  232. package/build/locales/zh-CN/openhands.json +108 -5
  233. package/build/locales/zh-TW/openhands.json +108 -5
  234. package/build/mockServiceWorker.js +21 -9
  235. package/config/defaults.json +3 -3
  236. package/dist/api/agent-server-adapter.cjs +3 -3
  237. package/dist/api/agent-server-adapter.cjs.map +1 -1
  238. package/dist/api/agent-server-adapter.d.ts +32 -5
  239. package/dist/api/agent-server-adapter.js +120 -91
  240. package/dist/api/agent-server-adapter.js.map +1 -1
  241. package/dist/api/automation-service/automation-service.api.cjs +1 -1
  242. package/dist/api/automation-service/automation-service.api.cjs.map +1 -1
  243. package/dist/api/automation-service/automation-service.api.d.ts +5 -0
  244. package/dist/api/automation-service/automation-service.api.js +11 -0
  245. package/dist/api/automation-service/automation-service.api.js.map +1 -1
  246. package/dist/api/backend-registry/active-store.cjs +1 -1
  247. package/dist/api/backend-registry/active-store.cjs.map +1 -1
  248. package/dist/api/backend-registry/active-store.js +36 -31
  249. package/dist/api/backend-registry/active-store.js.map +1 -1
  250. package/dist/api/backend-registry/url-selection.cjs +2 -0
  251. package/dist/api/backend-registry/url-selection.cjs.map +1 -0
  252. package/dist/api/backend-registry/url-selection.d.ts +31 -0
  253. package/dist/api/backend-registry/url-selection.js +29 -0
  254. package/dist/api/backend-registry/url-selection.js.map +1 -0
  255. package/dist/api/cloud/conversation-service.api.cjs +1 -1
  256. package/dist/api/cloud/conversation-service.api.cjs.map +1 -1
  257. package/dist/api/cloud/conversation-service.api.d.ts +19 -2
  258. package/dist/api/cloud/conversation-service.api.js +51 -47
  259. package/dist/api/cloud/conversation-service.api.js.map +1 -1
  260. package/dist/api/conversation-file-upload.api.cjs +1 -1
  261. package/dist/api/conversation-file-upload.api.js +10 -10
  262. package/dist/api/conversation-service/agent-server-conversation-service.api.cjs +1 -1
  263. package/dist/api/conversation-service/agent-server-conversation-service.api.cjs.map +1 -1
  264. package/dist/api/conversation-service/agent-server-conversation-service.api.js +55 -61
  265. package/dist/api/conversation-service/agent-server-conversation-service.api.js.map +1 -1
  266. package/dist/api/event-service/event-service.api.cjs +1 -1
  267. package/dist/api/event-service/event-service.api.js +12 -12
  268. package/dist/api/launch-child-conversation-client-tool.cjs +47 -0
  269. package/dist/api/launch-child-conversation-client-tool.cjs.map +1 -0
  270. package/dist/api/launch-child-conversation-client-tool.d.ts +3 -0
  271. package/dist/api/launch-child-conversation-client-tool.js +93 -0
  272. package/dist/api/launch-child-conversation-client-tool.js.map +1 -0
  273. package/dist/api/mcp-service/mcp-redacted-credentials.cjs +1 -1
  274. package/dist/api/mcp-service/mcp-redacted-credentials.cjs.map +1 -1
  275. package/dist/api/mcp-service/mcp-redacted-credentials.d.ts +3 -2
  276. package/dist/api/mcp-service/mcp-redacted-credentials.js +32 -27
  277. package/dist/api/mcp-service/mcp-redacted-credentials.js.map +1 -1
  278. package/dist/api/mcp-service/mcp-service.api.cjs +1 -1
  279. package/dist/api/mcp-service/mcp-service.api.cjs.map +1 -1
  280. package/dist/api/mcp-service/mcp-service.api.js +19 -19
  281. package/dist/api/mcp-service/mcp-service.api.js.map +1 -1
  282. package/dist/api/open-hands.types.d.ts +1 -1
  283. package/dist/api/settings-service/settings-service.api.cjs +1 -1
  284. package/dist/api/settings-service/settings-service.api.cjs.map +1 -1
  285. package/dist/api/settings-service/settings-service.api.d.ts +10 -0
  286. package/dist/api/settings-service/settings-service.api.js +90 -100
  287. package/dist/api/settings-service/settings-service.api.js.map +1 -1
  288. package/dist/api/skills-service.cjs +1 -1
  289. package/dist/api/skills-service.cjs.map +1 -1
  290. package/dist/api/skills-service.js +1 -0
  291. package/dist/api/skills-service.js.map +1 -1
  292. package/dist/api/workspace-upload-path.cjs +1 -1
  293. package/dist/api/workspace-upload-path.js +8 -8
  294. package/dist/assets/chevron-left.d.ts +1 -1
  295. package/dist/assets/chevron-right.d.ts +1 -1
  296. package/dist/components/conversation-events/chat/event-content-helpers/get-action-event-title.cjs +1 -1
  297. package/dist/components/conversation-events/chat/event-content-helpers/get-action-event-title.cjs.map +1 -1
  298. package/dist/components/conversation-events/chat/event-content-helpers/get-action-event-title.js +24 -18
  299. package/dist/components/conversation-events/chat/event-content-helpers/get-action-event-title.js.map +1 -1
  300. package/dist/components/conversation-events/chat/event-content-helpers/get-event-content.cjs +1 -1
  301. package/dist/components/conversation-events/chat/event-content-helpers/get-event-content.cjs.map +1 -1
  302. package/dist/components/conversation-events/chat/event-content-helpers/get-event-content.js +5 -0
  303. package/dist/components/conversation-events/chat/event-content-helpers/get-event-content.js.map +1 -1
  304. package/dist/components/conversation-events/chat/event-content-helpers/should-render-event.cjs +2 -2
  305. package/dist/components/conversation-events/chat/event-content-helpers/should-render-event.cjs.map +1 -1
  306. package/dist/components/conversation-events/chat/event-content-helpers/should-render-event.js +11 -7
  307. package/dist/components/conversation-events/chat/event-content-helpers/should-render-event.js.map +1 -1
  308. package/dist/components/conversation-events/chat/event-message-components/collapsible-thinking.d.ts +2 -1
  309. package/dist/components/conversation-events/chat/event-message-components/critic-result-display.d.ts +2 -1
  310. package/dist/components/conversation-events/chat/event-message-components/error-event-message.d.ts +2 -1
  311. package/dist/components/conversation-events/chat/event-message-components/event-group.d.ts +1 -1
  312. package/dist/components/conversation-events/chat/event-message-components/finish-event-message.d.ts +1 -1
  313. package/dist/components/conversation-events/chat/event-message-components/generic-event-message-wrapper.d.ts +1 -1
  314. package/dist/components/conversation-events/chat/event-message-components/observation-pair-event-message.d.ts +2 -1
  315. package/dist/components/conversation-events/chat/event-message-components/skill-item-expanded.d.ts +1 -1
  316. package/dist/components/conversation-events/chat/event-message-components/skill-ready-content-list.d.ts +2 -1
  317. package/dist/components/conversation-events/chat/event-message-components/thought-event-message.d.ts +1 -1
  318. package/dist/components/conversation-events/chat/event-message-components/user-assistant-event-message.d.ts +2 -1
  319. package/dist/components/conversation-events/chat/event-message.d.ts +2 -1
  320. package/dist/components/conversation-events/chat/task-tracking/task-item.d.ts +1 -1
  321. package/dist/components/conversation-events/chat/task-tracking/task-list-section.d.ts +1 -1
  322. package/dist/components/features/alerts/alert-banner.d.ts +1 -1
  323. package/dist/components/features/analytics/telemetry-consent-banner.d.ts +2 -1
  324. package/dist/components/features/automations/add-automation-modal.d.ts +1 -1
  325. package/dist/components/features/automations/automation-card-skeleton.d.ts +1 -1
  326. package/dist/components/features/automations/automation-card.d.ts +9 -1
  327. package/dist/components/features/automations/automation-group.d.ts +9 -1
  328. package/dist/components/features/automations/automation-health-badge.d.ts +8 -0
  329. package/dist/components/features/automations/automation-list-row.d.ts +3 -1
  330. package/dist/components/features/automations/automation-run-insights.d.ts +17 -0
  331. package/dist/components/features/automations/automation-view-toggle.d.ts +1 -1
  332. package/dist/components/features/automations/backend-not-configured.d.ts +1 -1
  333. package/dist/components/features/automations/create-instructions.d.ts +2 -2
  334. package/dist/components/features/automations/dashboard/automations-dashboard-controls.d.ts +18 -0
  335. package/dist/components/features/automations/dashboard/automations-filtered-empty-state.d.ts +9 -0
  336. package/dist/components/features/automations/dashboard/use-automation-sub-page-nav.d.ts +12 -0
  337. package/dist/components/features/automations/delete-confirmation-modal.d.ts +1 -1
  338. package/dist/components/features/automations/detail/active-status-badge.d.ts +1 -1
  339. package/dist/components/features/automations/detail/activity-log-item.d.ts +1 -1
  340. package/dist/components/features/automations/detail/activity-log-section.d.ts +3 -1
  341. package/dist/components/features/automations/detail/activity-section.d.ts +1 -1
  342. package/dist/components/features/automations/detail/back-link.d.ts +1 -1
  343. package/dist/components/features/automations/detail/branch-badge.d.ts +1 -1
  344. package/dist/components/features/automations/detail/config-field.d.ts +1 -1
  345. package/dist/components/features/automations/detail/configuration-section.d.ts +1 -1
  346. package/dist/components/features/automations/detail/debug-automation-button.d.ts +1 -1
  347. package/dist/components/features/automations/detail/detail-header.d.ts +1 -1
  348. package/dist/components/features/automations/detail/detail-skeleton.d.ts +1 -1
  349. package/dist/components/features/automations/detail/edit-automation-modal.d.ts +1 -1
  350. package/dist/components/features/automations/detail/not-found-state.d.ts +1 -1
  351. package/dist/components/features/automations/detail/plugin-chip.d.ts +1 -1
  352. package/dist/components/features/automations/detail/plugins-section.d.ts +1 -1
  353. package/dist/components/features/automations/detail/prompt-section.d.ts +2 -1
  354. package/dist/components/features/automations/detail/run-logs-modal.d.ts +1 -1
  355. package/dist/components/features/automations/detail/run-status-badge.d.ts +10 -1
  356. package/dist/components/features/automations/detail/section-card.d.ts +1 -1
  357. package/dist/components/features/automations/empty-state.d.ts +1 -1
  358. package/dist/components/features/automations/error-state.d.ts +1 -1
  359. package/dist/components/features/automations/import-automation-modal.d.ts +1 -1
  360. package/dist/components/features/automations/kebab-menu-item-content.d.ts +1 -1
  361. package/dist/components/features/automations/kebab-menu.d.ts +1 -1
  362. package/dist/components/features/automations/metadata-chip.d.ts +1 -1
  363. package/dist/components/features/automations/recommended-automations-launcher.d.ts +1 -1
  364. package/dist/components/features/automations/recommended-automations-section.d.ts +1 -1
  365. package/dist/components/features/automations/responder-deployment-modal.d.ts +1 -1
  366. package/dist/components/features/automations/search-input.d.ts +1 -1
  367. package/dist/components/features/automations/status-badge.d.ts +1 -1
  368. package/dist/components/features/automations/turn-off-confirmation-modal.d.ts +8 -0
  369. package/dist/components/features/automations/view-menu-item-content.d.ts +1 -1
  370. package/dist/components/features/backends/add-backend-modal.d.ts +1 -1
  371. package/dist/components/features/backends/api-key-entry-screen.d.ts +2 -1
  372. package/dist/components/features/backends/backend-form-modal.d.ts +3 -3
  373. package/dist/components/features/backends/backend-row.d.ts +1 -1
  374. package/dist/components/features/backends/backend-selector.d.ts +2 -1
  375. package/dist/components/features/backends/backend-status-dot.d.ts +2 -1
  376. package/dist/components/features/backends/backend-version.d.ts +1 -1
  377. package/dist/components/features/backends/device-flow-auth.d.ts +1 -1
  378. package/dist/components/features/backends/manage-backends-modal.d.ts +2 -1
  379. package/dist/components/features/browser/browser-chrome-bar.d.ts +1 -1
  380. package/dist/components/features/browser/browser-snapshot.d.ts +1 -1
  381. package/dist/components/features/browser/browser.d.ts +1 -1
  382. package/dist/components/features/browser/empty-browser-message.d.ts +1 -1
  383. package/dist/components/features/chat/btw-messages.d.ts +1 -1
  384. package/dist/components/features/chat/change-agent-button.d.ts +2 -1
  385. package/dist/components/features/chat/change-agent-context-menu.d.ts +1 -1
  386. package/dist/components/features/chat/chat-action-tooltip.d.ts +1 -1
  387. package/dist/components/features/chat/chat-add-file-button.d.ts +2 -1
  388. package/dist/components/features/chat/chat-interface.d.ts +2 -1
  389. package/dist/components/features/chat/chat-message.d.ts +1 -1
  390. package/dist/components/features/chat/chat-messages-skeleton.d.ts +2 -1
  391. package/dist/components/features/chat/chat-play-button.d.ts +1 -1
  392. package/dist/components/features/chat/chat-send-button.d.ts +1 -1
  393. package/dist/components/features/chat/chat-status-indicator.d.ts +1 -1
  394. package/dist/components/features/chat/chat-stop-button.d.ts +1 -1
  395. package/dist/components/features/chat/chat-suggestions.d.ts +1 -1
  396. package/dist/components/features/chat/components/chat-input-actions.d.ts +2 -1
  397. package/dist/components/features/chat/components/chat-input-container.d.ts +1 -1
  398. package/dist/components/features/chat/components/chat-input-field.d.ts +1 -1
  399. package/dist/components/features/chat/components/chat-input-grip.d.ts +1 -1
  400. package/dist/components/features/chat/components/chat-input-llm-profile-picker.d.ts +3 -2
  401. package/dist/components/features/chat/components/chat-input-model.d.ts +3 -2
  402. package/dist/components/features/chat/components/chat-input-profile-picker.d.ts +1 -1
  403. package/dist/components/features/chat/components/chat-input-row.d.ts +1 -1
  404. package/dist/components/features/chat/components/hidden-file-input.d.ts +1 -1
  405. package/dist/components/features/chat/components/slash-command-menu.d.ts +2 -1
  406. package/dist/components/features/chat/confirmation-mode-enabled.d.ts +1 -1
  407. package/dist/components/features/chat/custom-chat-input.d.ts +1 -1
  408. package/dist/components/features/chat/drag-over.d.ts +1 -1
  409. package/dist/components/features/chat/error-message-banner.d.ts +2 -1
  410. package/dist/components/features/chat/error-message.d.ts +2 -1
  411. package/dist/components/features/chat/generic-event-message.d.ts +1 -1
  412. package/dist/components/features/chat/git-control-bar-branch-button.d.ts +1 -1
  413. package/dist/components/features/chat/git-control-bar-pr-button.d.ts +1 -1
  414. package/dist/components/features/chat/git-control-bar-pull-button.d.ts +1 -1
  415. package/dist/components/features/chat/git-control-bar-push-button.d.ts +1 -1
  416. package/dist/components/features/chat/git-control-bar-repo-button.d.ts +1 -1
  417. package/dist/components/features/chat/git-control-bar-tooltip-wrapper.d.ts +1 -1
  418. package/dist/components/features/chat/git-control-bar.d.ts +1 -1
  419. package/dist/components/features/chat/git-external-link-icon.d.ts +1 -1
  420. package/dist/components/features/chat/goal-status-banner.d.ts +1 -1
  421. package/dist/components/features/chat/goal-status-content.d.ts +1 -1
  422. package/dist/components/features/chat/got-it-button.d.ts +1 -1
  423. package/dist/components/features/chat/interactive-chat-box.d.ts +1 -1
  424. package/dist/components/features/chat/model-messages.d.ts +2 -1
  425. package/dist/components/features/chat/mono-component.d.ts +1 -1
  426. package/dist/components/features/chat/open-repository-modal.d.ts +2 -1
  427. package/dist/components/features/chat/pasted-image-upload-as-file-button.d.ts +1 -1
  428. package/dist/components/features/chat/path-component.d.ts +1 -1
  429. package/dist/components/features/chat/pending-stop-icon.d.ts +1 -1
  430. package/dist/components/features/chat/pending-user-messages.d.ts +2 -1
  431. package/dist/components/features/chat/plan-preview.d.ts +1 -1
  432. package/dist/components/features/chat/remove-file-button.d.ts +1 -1
  433. package/dist/components/features/chat/skill-install-restart-banner.d.ts +1 -1
  434. package/dist/components/features/chat/success-indicator.d.ts +1 -1
  435. package/dist/components/features/chat/task-tracking/status-badge.d.ts +1 -1
  436. package/dist/components/features/chat/task-tracking/status-icon.d.ts +1 -1
  437. package/dist/components/features/chat/task-tracking/task-item.d.ts +1 -1
  438. package/dist/components/features/chat/task-tracking/task-list-section.d.ts +1 -1
  439. package/dist/components/features/chat/tool-visualizers/primitives/code-block.d.ts +2 -1
  440. package/dist/components/features/chat/tool-visualizers/primitives/diff-view.d.ts +2 -1
  441. package/dist/components/features/chat/tool-visualizers/primitives/file-path-chip.d.ts +2 -1
  442. package/dist/components/features/chat/tool-visualizers/primitives/key-value-grid.d.ts +1 -1
  443. package/dist/components/features/chat/tool-visualizers/primitives/output-pane.d.ts +2 -1
  444. package/dist/components/features/chat/typing-indicator.d.ts +1 -1
  445. package/dist/components/features/chat/uploaded-file.d.ts +1 -1
  446. package/dist/components/features/chat/uploaded-files.d.ts +1 -1
  447. package/dist/components/features/chat/uploaded-image.d.ts +2 -1
  448. package/dist/components/features/chat/user-message-body.d.ts +2 -2
  449. package/dist/components/features/chat/waiting-for-runtime-message.d.ts +1 -1
  450. package/dist/components/features/chat/workspace-mode-icon.d.ts +1 -1
  451. package/dist/components/features/chat/workspace-mode-selector.d.ts +1 -1
  452. package/dist/components/features/command-menu/command-menu-trigger.d.ts +2 -1
  453. package/dist/components/features/context-menu/archived-disabled-tooltip.d.ts +1 -1
  454. package/dist/components/features/context-menu/context-menu-icon-text-with-description.d.ts +1 -1
  455. package/dist/components/features/context-menu/context-menu-icon-text.d.ts +1 -1
  456. package/dist/components/features/context-menu/context-menu-list-item.cjs +1 -1
  457. package/dist/components/features/context-menu/context-menu-list-item.cjs.map +1 -1
  458. package/dist/components/features/context-menu/context-menu-list-item.d.ts +2 -1
  459. package/dist/components/features/context-menu/context-menu-list-item.js +2 -1
  460. package/dist/components/features/context-menu/context-menu-list-item.js.map +1 -1
  461. package/dist/components/features/controls/agent-loading.d.ts +1 -1
  462. package/dist/components/features/controls/agent-status.d.ts +1 -1
  463. package/dist/components/features/controls/git-tools-submenu.d.ts +1 -1
  464. package/dist/components/features/controls/macros-submenu.d.ts +1 -1
  465. package/dist/components/features/controls/server-status-context-menu-icon-text.d.ts +1 -1
  466. package/dist/components/features/controls/server-status-context-menu.d.ts +1 -1
  467. package/dist/components/features/controls/server-status.d.ts +1 -1
  468. package/dist/components/features/controls/tools-context-menu-icon-text.d.ts +1 -1
  469. package/dist/components/features/controls/tools-context-menu.d.ts +1 -1
  470. package/dist/components/features/controls/tools.d.ts +2 -1
  471. package/dist/components/features/conversation/conversation-loading.d.ts +1 -1
  472. package/dist/components/features/conversation/conversation-main/chat-interface-wrapper.d.ts +1 -1
  473. package/dist/components/features/conversation/conversation-main/conversation-main.d.ts +1 -1
  474. package/dist/components/features/conversation/conversation-main/conversation-mobile-panel-page.d.ts +2 -1
  475. package/dist/components/features/conversation/conversation-name-context-menu-icon-text.d.ts +1 -1
  476. package/dist/components/features/conversation/conversation-name-context-menu.d.ts +1 -1
  477. package/dist/components/features/conversation/conversation-name-with-status.d.ts +2 -1
  478. package/dist/components/features/conversation/conversation-name.d.ts +2 -1
  479. package/dist/components/features/conversation/conversation-tab-empty-state.d.ts +1 -1
  480. package/dist/components/features/conversation/conversation-tabs/conversation-tab-content/conversation-tab-content-crossfade.d.ts +1 -1
  481. package/dist/components/features/conversation/conversation-tabs/conversation-tab-content/conversation-tab-content.d.ts +1 -1
  482. package/dist/components/features/conversation/conversation-tabs/conversation-tab-content/suspense-pending-fallback.d.ts +1 -1
  483. package/dist/components/features/conversation/conversation-tabs/conversation-tab-content/tab-container.d.ts +1 -1
  484. package/dist/components/features/conversation/conversation-tabs/conversation-tab-content/tab-content-area.d.ts +1 -1
  485. package/dist/components/features/conversation/conversation-tabs/conversation-tab-content/tab-wrapper.d.ts +1 -1
  486. package/dist/components/features/conversation/conversation-tabs/conversation-tab-nav.d.ts +1 -1
  487. package/dist/components/features/conversation/conversation-tabs/conversation-tabs-context-menu.d.ts +1 -1
  488. package/dist/components/features/conversation/conversation-tabs/conversation-tabs.d.ts +1 -1
  489. package/dist/components/features/conversation/conversation-tabs/drawer-vscode-link.d.ts +1 -1
  490. package/dist/components/features/conversation/metrics-modal/context-window-section.d.ts +1 -1
  491. package/dist/components/features/conversation/metrics-modal/cost-section.d.ts +1 -1
  492. package/dist/components/features/conversation/metrics-modal/empty-state.d.ts +1 -1
  493. package/dist/components/features/conversation/metrics-modal/metric-row.d.ts +1 -1
  494. package/dist/components/features/conversation/metrics-modal/metrics-modal-header.d.ts +1 -1
  495. package/dist/components/features/conversation/metrics-modal/metrics-modal.d.ts +1 -1
  496. package/dist/components/features/conversation/metrics-modal/usage-section.d.ts +1 -1
  497. package/dist/components/features/conversation/right-panel-toggle.d.ts +1 -1
  498. package/dist/components/features/conversation/transcript-export-modal.d.ts +2 -1
  499. package/dist/components/features/conversation-panel/budget-display.d.ts +2 -1
  500. package/dist/components/features/conversation-panel/budget-progress-bar.d.ts +1 -1
  501. package/dist/components/features/conversation-panel/budget-usage-text.d.ts +2 -1
  502. package/dist/components/features/conversation-panel/cloud-new-conversation-menu.d.ts +1 -1
  503. package/dist/components/features/conversation-panel/compact-conversation-row.cjs +1 -1
  504. package/dist/components/features/conversation-panel/compact-conversation-row.cjs.map +1 -1
  505. package/dist/components/features/conversation-panel/compact-conversation-row.d.ts +2 -1
  506. package/dist/components/features/conversation-panel/compact-conversation-row.js +38 -37
  507. package/dist/components/features/conversation-panel/compact-conversation-row.js.map +1 -1
  508. package/dist/components/features/conversation-panel/confirm-delete-modal.d.ts +1 -1
  509. package/dist/components/features/conversation-panel/confirm-stop-modal.d.ts +1 -1
  510. package/dist/components/features/conversation-panel/conversation-card/conversation-card-actions.d.ts +1 -1
  511. package/dist/components/features/conversation-panel/conversation-card/conversation-card-context-menu.d.ts +1 -1
  512. package/dist/components/features/conversation-panel/conversation-card/conversation-card-footer.cjs +1 -2
  513. package/dist/components/features/conversation-panel/conversation-card/conversation-card-footer.cjs.map +1 -1
  514. package/dist/components/features/conversation-panel/conversation-card/conversation-card-footer.d.ts +3 -9
  515. package/dist/components/features/conversation-panel/conversation-card/conversation-card-footer.js +48 -51
  516. package/dist/components/features/conversation-panel/conversation-card/conversation-card-footer.js.map +1 -1
  517. package/dist/components/features/conversation-panel/conversation-card/conversation-card-header.d.ts +1 -1
  518. package/dist/components/features/conversation-panel/conversation-card/conversation-card-meta-chip.cjs +2 -0
  519. package/dist/components/features/conversation-panel/conversation-card/conversation-card-meta-chip.cjs.map +1 -0
  520. package/dist/components/features/conversation-panel/conversation-card/conversation-card-meta-chip.d.ts +12 -0
  521. package/dist/components/features/conversation-panel/conversation-card/conversation-card-meta-chip.js +6 -0
  522. package/dist/components/features/conversation-panel/conversation-card/conversation-card-meta-chip.js.map +1 -0
  523. package/dist/components/features/conversation-panel/conversation-card/conversation-card-preview.cjs +1 -1
  524. package/dist/components/features/conversation-panel/conversation-card/conversation-card-preview.cjs.map +1 -1
  525. package/dist/components/features/conversation-panel/conversation-card/conversation-card-preview.d.ts +16 -1
  526. package/dist/components/features/conversation-panel/conversation-card/conversation-card-preview.js +95 -78
  527. package/dist/components/features/conversation-panel/conversation-card/conversation-card-preview.js.map +1 -1
  528. package/dist/components/features/conversation-panel/conversation-card/conversation-card-skeleton.d.ts +1 -1
  529. package/dist/components/features/conversation-panel/conversation-card/conversation-card-title.d.ts +1 -1
  530. package/dist/components/features/conversation-panel/conversation-card/conversation-card.d.ts +2 -1
  531. package/dist/components/features/conversation-panel/conversation-card/conversation-repo-link.cjs +1 -1
  532. package/dist/components/features/conversation-panel/conversation-card/conversation-repo-link.cjs.map +1 -1
  533. package/dist/components/features/conversation-panel/conversation-card/conversation-repo-link.d.ts +1 -1
  534. package/dist/components/features/conversation-panel/conversation-card/conversation-repo-link.js +40 -38
  535. package/dist/components/features/conversation-panel/conversation-card/conversation-repo-link.js.map +1 -1
  536. package/dist/components/features/conversation-panel/conversation-card/conversation-status-badges.d.ts +1 -1
  537. package/dist/components/features/conversation-panel/conversation-card/conversation-tag-chips.cjs +2 -0
  538. package/dist/components/features/conversation-panel/conversation-card/conversation-tag-chips.cjs.map +1 -0
  539. package/dist/components/features/conversation-panel/conversation-card/conversation-tag-chips.d.ts +14 -0
  540. package/dist/components/features/conversation-panel/conversation-card/conversation-tag-chips.js +167 -0
  541. package/dist/components/features/conversation-panel/conversation-card/conversation-tag-chips.js.map +1 -0
  542. package/dist/components/features/conversation-panel/conversation-card/conversation-tag-display.cjs +2 -0
  543. package/dist/components/features/conversation-panel/conversation-card/conversation-tag-display.cjs.map +1 -0
  544. package/dist/components/features/conversation-panel/conversation-card/conversation-tag-display.d.ts +63 -0
  545. package/dist/components/features/conversation-panel/conversation-card/conversation-tag-display.js +66 -0
  546. package/dist/components/features/conversation-panel/conversation-card/conversation-tag-display.js.map +1 -0
  547. package/dist/components/features/conversation-panel/conversation-card/conversation-tag-icons.cjs +2 -0
  548. package/dist/components/features/conversation-panel/conversation-card/conversation-tag-icons.cjs.map +1 -0
  549. package/dist/components/features/conversation-panel/conversation-card/conversation-tag-icons.d.ts +15 -0
  550. package/dist/components/features/conversation-panel/conversation-card/conversation-tag-icons.js +117 -0
  551. package/dist/components/features/conversation-panel/conversation-card/conversation-tag-icons.js.map +1 -0
  552. package/dist/components/features/conversation-panel/conversation-card/no-repository.cjs +1 -1
  553. package/dist/components/features/conversation-panel/conversation-card/no-repository.cjs.map +1 -1
  554. package/dist/components/features/conversation-panel/conversation-card/no-repository.d.ts +1 -1
  555. package/dist/components/features/conversation-panel/conversation-card/no-repository.js +30 -19
  556. package/dist/components/features/conversation-panel/conversation-card/no-repository.js.map +1 -1
  557. package/dist/components/features/conversation-panel/conversation-group-folder-list.d.ts +1 -1
  558. package/dist/components/features/conversation-panel/conversation-group-folder-row.d.ts +1 -1
  559. package/dist/components/features/conversation-panel/conversation-panel-filter-menu.cjs +1 -1
  560. package/dist/components/features/conversation-panel/conversation-panel-filter-menu.cjs.map +1 -1
  561. package/dist/components/features/conversation-panel/conversation-panel-filter-menu.d.ts +7 -2
  562. package/dist/components/features/conversation-panel/conversation-panel-filter-menu.js +146 -104
  563. package/dist/components/features/conversation-panel/conversation-panel-filter-menu.js.map +1 -1
  564. package/dist/components/features/conversation-panel/conversation-panel-list-helpers.cjs +1 -1
  565. package/dist/components/features/conversation-panel/conversation-panel-list-helpers.cjs.map +1 -1
  566. package/dist/components/features/conversation-panel/conversation-panel-list-helpers.d.ts +20 -0
  567. package/dist/components/features/conversation-panel/conversation-panel-list-helpers.js +53 -27
  568. package/dist/components/features/conversation-panel/conversation-panel-list-helpers.js.map +1 -1
  569. package/dist/components/features/conversation-panel/conversation-panel-new-thread-picker.d.ts +1 -1
  570. package/dist/components/features/conversation-panel/conversation-panel-pinned-section.d.ts +1 -1
  571. package/dist/components/features/conversation-panel/conversation-panel.cjs +1 -1
  572. package/dist/components/features/conversation-panel/conversation-panel.cjs.map +1 -1
  573. package/dist/components/features/conversation-panel/conversation-panel.d.ts +2 -1
  574. package/dist/components/features/conversation-panel/conversation-panel.js +169 -155
  575. package/dist/components/features/conversation-panel/conversation-panel.js.map +1 -1
  576. package/dist/components/features/conversation-panel/conversation-status-dot.d.ts +1 -1
  577. package/dist/components/features/conversation-panel/exit-conversation-modal.d.ts +1 -1
  578. package/dist/components/features/conversation-panel/hook-event-item.d.ts +1 -1
  579. package/dist/components/features/conversation-panel/hook-matcher-content.d.ts +1 -1
  580. package/dist/components/features/conversation-panel/hooks-empty-state.d.ts +1 -1
  581. package/dist/components/features/conversation-panel/hooks-loading-state.d.ts +1 -1
  582. package/dist/components/features/conversation-panel/hooks-modal-header.d.ts +1 -1
  583. package/dist/components/features/conversation-panel/hooks-modal.d.ts +1 -1
  584. package/dist/components/features/conversation-panel/local-new-conversation-menu.d.ts +1 -1
  585. package/dist/components/features/conversation-panel/menu-heading.d.ts +1 -1
  586. package/dist/components/features/conversation-panel/menu-row.d.ts +1 -1
  587. package/dist/components/features/conversation-panel/menu-separator.d.ts +1 -1
  588. package/dist/components/features/conversation-panel/new-conversation-button.d.ts +2 -1
  589. package/dist/components/features/conversation-panel/plugins-modal.d.ts +1 -1
  590. package/dist/components/features/conversation-panel/runtime-waiting-state.d.ts +1 -1
  591. package/dist/components/features/conversation-panel/skill-content.d.ts +1 -1
  592. package/dist/components/features/conversation-panel/skill-item.d.ts +1 -1
  593. package/dist/components/features/conversation-panel/skill-triggers.d.ts +1 -1
  594. package/dist/components/features/conversation-panel/skills-empty-state.d.ts +1 -1
  595. package/dist/components/features/conversation-panel/skills-loading-state.d.ts +1 -1
  596. package/dist/components/features/conversation-panel/skills-modal-header.d.ts +1 -1
  597. package/dist/components/features/conversation-panel/skills-modal-section.d.ts +1 -1
  598. package/dist/components/features/conversation-panel/skills-modal.d.ts +1 -1
  599. package/dist/components/features/conversation-panel/start-task-card/start-task-card-footer.d.ts +1 -1
  600. package/dist/components/features/conversation-panel/start-task-card/start-task-card-header.d.ts +1 -1
  601. package/dist/components/features/conversation-panel/start-task-card/start-task-card.d.ts +1 -1
  602. package/dist/components/features/conversation-panel/start-task-card/start-task-status-badge.d.ts +1 -1
  603. package/dist/components/features/conversation-panel/start-task-card/start-task-status-indicator.d.ts +1 -1
  604. package/dist/components/features/conversation-panel/system-message-modal/empty-tools-state.d.ts +1 -1
  605. package/dist/components/features/conversation-panel/system-message-modal/system-message-content.d.ts +1 -1
  606. package/dist/components/features/conversation-panel/system-message-modal/system-message-header.d.ts +1 -1
  607. package/dist/components/features/conversation-panel/system-message-modal/tab-button.d.ts +1 -1
  608. package/dist/components/features/conversation-panel/system-message-modal/tab-content.d.ts +1 -1
  609. package/dist/components/features/conversation-panel/system-message-modal/tab-navigation.d.ts +1 -1
  610. package/dist/components/features/conversation-panel/system-message-modal/toggle-button.d.ts +1 -1
  611. package/dist/components/features/conversation-panel/system-message-modal/tool-item.d.ts +1 -1
  612. package/dist/components/features/conversation-panel/system-message-modal/tool-parameters.d.ts +1 -1
  613. package/dist/components/features/conversation-panel/system-message-modal/tools-list.d.ts +1 -1
  614. package/dist/components/features/conversation-panel/system-message-modal.d.ts +1 -1
  615. package/dist/components/features/diff-viewer/commit-list.d.ts +2 -1
  616. package/dist/components/features/diff-viewer/commit-row.d.ts +2 -1
  617. package/dist/components/features/diff-viewer/diff-drawer-icon.d.ts +1 -1
  618. package/dist/components/features/diff-viewer/editor-container.d.ts +1 -1
  619. package/dist/components/features/diff-viewer/empty-changes-message.d.ts +1 -1
  620. package/dist/components/features/diff-viewer/file-diff-viewer.d.ts +2 -1
  621. package/dist/components/features/diff-viewer/loading-spinner.d.ts +1 -1
  622. package/dist/components/features/files/file-item.d.ts +1 -1
  623. package/dist/components/features/files/file-list.d.ts +2 -1
  624. package/dist/components/features/files-tab/file-content-viewer.d.ts +1 -1
  625. package/dist/components/features/files-tab/file-quick-row.d.ts +1 -1
  626. package/dist/components/features/files-tab/file-tree-view.d.ts +1 -1
  627. package/dist/components/features/files-tab/highlighted-source-view.d.ts +1 -1
  628. package/dist/components/features/files-tab/no-file-selected-message.d.ts +1 -1
  629. package/dist/components/features/files-tab/segmented-toggle.d.ts +1 -1
  630. package/dist/components/features/files-tab/tree-node.d.ts +1 -1
  631. package/dist/components/features/home/featured-automations/automation-health-indicator.d.ts +11 -0
  632. package/dist/components/features/home/featured-automations/automation-run-activity-metrics.d.ts +18 -0
  633. package/dist/components/features/home/featured-automations/automation-run-activity-sparkline.d.ts +14 -0
  634. package/dist/components/features/home/featured-automations/automation-run-health.d.ts +25 -0
  635. package/dist/components/features/home/featured-automations/build-home-automation-menu-items.d.ts +39 -0
  636. package/dist/components/features/home/featured-automations/build-pinned-automation-menu-items.d.ts +22 -0
  637. package/dist/components/features/home/featured-automations/home-automation-activity.d.ts +23 -0
  638. package/dist/components/features/home/featured-automations/home-automation-menu.d.ts +13 -0
  639. package/dist/components/features/home/featured-automations/home-automation-run-tooltip.d.ts +12 -0
  640. package/dist/components/features/home/featured-automations/pinned-automation-card.d.ts +21 -0
  641. package/dist/components/features/home/featured-automations/pinned-automations-dashboard.d.ts +6 -0
  642. package/dist/components/features/home/featured-automations/running-automations-list.d.ts +6 -0
  643. package/dist/components/features/home/git-branch-dropdown/branch-dropdown-menu.d.ts +1 -1
  644. package/dist/components/features/home/git-branch-dropdown/git-branch-dropdown.d.ts +2 -1
  645. package/dist/components/features/home/git-provider-dropdown/git-provider-dropdown.d.ts +2 -1
  646. package/dist/components/features/home/git-repo-dropdown/git-repo-dropdown.d.ts +2 -1
  647. package/dist/components/features/home/home-chat-launcher.d.ts +1 -1
  648. package/dist/components/features/home/home-git-control-bar-preview.d.ts +1 -1
  649. package/dist/components/features/home/home-header/guide-message.d.ts +1 -1
  650. package/dist/components/features/home/home-header/home-header-title.d.ts +1 -1
  651. package/dist/components/features/home/home-header/home-header.d.ts +1 -1
  652. package/dist/components/features/home/llm-not-configured-banner.d.ts +1 -1
  653. package/dist/components/features/home/new-conversation/create-conversation-button.d.ts +1 -1
  654. package/dist/components/features/home/new-conversation/new-conversation.d.ts +1 -1
  655. package/dist/components/features/home/new-conversation.d.ts +1 -1
  656. package/dist/components/features/home/open-launcher-button.d.ts +1 -1
  657. package/dist/components/features/home/open-repository-dialog.d.ts +1 -1
  658. package/dist/components/features/home/open-workspace-dialog.d.ts +1 -1
  659. package/dist/components/features/home/repo-selection-form.d.ts +2 -1
  660. package/dist/components/features/home/shared/clear-button.d.ts +2 -1
  661. package/dist/components/features/home/shared/dropdown-item.d.ts +1 -1
  662. package/dist/components/features/home/shared/empty-state.d.ts +2 -1
  663. package/dist/components/features/home/shared/error-message.d.ts +2 -1
  664. package/dist/components/features/home/shared/generic-dropdown-menu.d.ts +1 -1
  665. package/dist/components/features/home/shared/loading-spinner.d.ts +2 -1
  666. package/dist/components/features/home/shared/toggle-button.d.ts +1 -1
  667. package/dist/components/features/home/tasks/task-card.d.ts +1 -1
  668. package/dist/components/features/home/tasks/task-group.d.ts +1 -1
  669. package/dist/components/features/home/tasks/task-issue-number.d.ts +1 -1
  670. package/dist/components/features/home/tasks/task-item-title.d.ts +1 -1
  671. package/dist/components/features/home/tasks/task-suggestions-skeleton.d.ts +1 -1
  672. package/dist/components/features/home/tasks/task-suggestions.d.ts +1 -1
  673. package/dist/components/features/home/workspace-dropdown/folder-browser-modal.d.ts +2 -1
  674. package/dist/components/features/home/workspace-dropdown/manage-workspaces-modal.d.ts +2 -1
  675. package/dist/components/features/home/workspace-dropdown/workspace-dropdown.d.ts +2 -1
  676. package/dist/components/features/home/workspace-selection-form.d.ts +2 -1
  677. package/dist/components/features/images/image-carousel.d.ts +2 -1
  678. package/dist/components/features/images/image-preview.d.ts +1 -1
  679. package/dist/components/features/images/thumbnail.d.ts +1 -1
  680. package/dist/components/features/launch/plugin-launch-modal.d.ts +2 -1
  681. package/dist/components/features/launch/plugin-launch-parameter-input.d.ts +1 -1
  682. package/dist/components/features/launch/plugin-launch-plugin-section.d.ts +1 -1
  683. package/dist/components/features/manifest/manifest-form-field.d.ts +1 -1
  684. package/dist/components/features/manifest/manifest-icons.d.ts +13 -0
  685. package/dist/components/features/manifest/manifest-overview-tiles.d.ts +19 -0
  686. package/dist/components/features/manifest/manifest-prerequisites-step.d.ts +1 -1
  687. package/dist/components/features/manifest/manifest-review-step.d.ts +1 -1
  688. package/dist/components/features/manifest/manifest-setup-dialog.d.ts +1 -1
  689. package/dist/components/features/manifest/manifest-subpage-layout.d.ts +23 -0
  690. package/dist/components/features/markdown/anchor.d.ts +1 -1
  691. package/dist/components/features/markdown/blockquote.d.ts +1 -1
  692. package/dist/components/features/markdown/code.d.ts +1 -1
  693. package/dist/components/features/markdown/headings.d.ts +6 -6
  694. package/dist/components/features/markdown/horizontal-rule.d.ts +1 -1
  695. package/dist/components/features/markdown/list.d.ts +3 -3
  696. package/dist/components/features/markdown/markdown-renderer.d.ts +1 -1
  697. package/dist/components/features/markdown/markdown-table-scroll.d.ts +1 -1
  698. package/dist/components/features/markdown/paragraph.d.ts +1 -1
  699. package/dist/components/features/markdown/plan-components.d.ts +36 -36
  700. package/dist/components/features/markdown/table.d.ts +3 -3
  701. package/dist/components/features/mcp-logo-badge.d.ts +1 -1
  702. package/dist/components/features/mcp-page/custom-server-editor.cjs +1 -1
  703. package/dist/components/features/mcp-page/custom-server-editor.cjs.map +1 -1
  704. package/dist/components/features/mcp-page/custom-server-editor.d.ts +2 -1
  705. package/dist/components/features/mcp-page/custom-server-editor.js +5 -0
  706. package/dist/components/features/mcp-page/custom-server-editor.js.map +1 -1
  707. package/dist/components/features/mcp-page/install-server-modal.cjs +1 -1
  708. package/dist/components/features/mcp-page/install-server-modal.cjs.map +1 -1
  709. package/dist/components/features/mcp-page/install-server-modal.d.ts +2 -1
  710. package/dist/components/features/mcp-page/install-server-modal.js +117 -118
  711. package/dist/components/features/mcp-page/install-server-modal.js.map +1 -1
  712. package/dist/components/features/mcp-page/installed-server-card.d.ts +2 -1
  713. package/dist/components/features/mcp-page/installed-servers-section.d.ts +1 -1
  714. package/dist/components/features/mcp-page/marketplace-card.d.ts +1 -1
  715. package/dist/components/features/mcp-page/marketplace-section.d.ts +1 -1
  716. package/dist/components/features/mcp-page/mcp-logo-stack-badge.d.ts +1 -1
  717. package/dist/components/features/mcp-page/mcp-section-filter-dropdown.d.ts +1 -1
  718. package/dist/components/features/mcp-page/mcp-server-health.d.ts +2 -1
  719. package/dist/components/features/mcp-page/mcp-toolbar.d.ts +1 -1
  720. package/dist/components/features/mcp-page/save-as-secret-toggle.d.ts +1 -1
  721. package/dist/components/features/onboarding/onboarding-host.d.ts +1 -1
  722. package/dist/components/features/onboarding/onboarding-modal.d.ts +2 -1
  723. package/dist/components/features/onboarding/onboarding-progress-bar.d.ts +1 -1
  724. package/dist/components/features/onboarding/steps/check-backend-step.d.ts +2 -1
  725. package/dist/components/features/onboarding/steps/choose-agent-step.d.ts +3 -2
  726. package/dist/components/features/onboarding/steps/say-hello-step.d.ts +2 -1
  727. package/dist/components/features/onboarding/steps/setup-acp-secrets-step.d.ts +2 -1
  728. package/dist/components/features/onboarding/steps/setup-llm-step.d.ts +2 -1
  729. package/dist/components/features/plugins/add-plugin-modal.d.ts +2 -1
  730. package/dist/components/features/plugins/plugin-card.d.ts +2 -1
  731. package/dist/components/features/plugins/plugin-detail-modal.d.ts +1 -1
  732. package/dist/components/features/plugins/plugin-files-section.d.ts +2 -1
  733. package/dist/components/features/plugins/plugin-picker-card.d.ts +1 -1
  734. package/dist/components/features/plugins/plugin-picker-modal.d.ts +1 -1
  735. package/dist/components/features/plugins/plugin-picker-trigger.d.ts +1 -1
  736. package/dist/components/features/plugins/plugin-picker.d.ts +1 -1
  737. package/dist/components/features/plugins/plugins-toolbar.d.ts +1 -1
  738. package/dist/components/features/settings/acp-auth-status-banner.d.ts +1 -1
  739. package/dist/components/features/settings/acp-conflict-warnings.d.ts +2 -1
  740. package/dist/components/features/settings/acp-credentials-section.d.ts +1 -1
  741. package/dist/components/features/settings/acp-secret-field.d.ts +2 -1
  742. package/dist/components/features/settings/agent-canvas-update-card.cjs +1 -1
  743. package/dist/components/features/settings/agent-canvas-update-card.cjs.map +1 -1
  744. package/dist/components/features/settings/agent-canvas-update-card.d.ts +10 -5
  745. package/dist/components/features/settings/agent-canvas-update-card.js +223 -149
  746. package/dist/components/features/settings/agent-canvas-update-card.js.map +1 -1
  747. package/dist/components/features/settings/agent-canvas-version-modal.cjs +2 -0
  748. package/dist/components/features/settings/agent-canvas-version-modal.cjs.map +1 -0
  749. package/dist/components/features/settings/agent-canvas-version-modal.d.ts +11 -0
  750. package/dist/components/features/settings/agent-canvas-version-modal.js +166 -0
  751. package/dist/components/features/settings/agent-canvas-version-modal.js.map +1 -0
  752. package/dist/components/features/settings/agent-canvas-version-tile.cjs +2 -0
  753. package/dist/components/features/settings/agent-canvas-version-tile.cjs.map +1 -0
  754. package/dist/components/features/settings/agent-canvas-version-tile.d.ts +13 -0
  755. package/dist/components/features/settings/agent-canvas-version-tile.js +60 -0
  756. package/dist/components/features/settings/agent-canvas-version-tile.js.map +1 -0
  757. package/dist/components/features/settings/agent-profiles/agent-profile-actions-menu.d.ts +1 -1
  758. package/dist/components/features/settings/agent-profiles/agent-profile-row.d.ts +1 -1
  759. package/dist/components/features/settings/agent-profiles/agent-profiles-body.d.ts +1 -1
  760. package/dist/components/features/settings/agent-profiles/agent-profiles-local-view.d.ts +1 -1
  761. package/dist/components/features/settings/agent-profiles/agent-profiles-manager.d.ts +1 -1
  762. package/dist/components/features/settings/agent-profiles/delete-agent-profile-modal.d.ts +1 -1
  763. package/dist/components/features/settings/agent-server-onboarding.d.ts +2 -1
  764. package/dist/components/features/settings/api-key-modal-base.d.ts +1 -1
  765. package/dist/components/features/settings/app-settings/app-settings-inputs-skeleton.d.ts +1 -1
  766. package/dist/components/features/settings/app-settings/language-input.d.ts +1 -1
  767. package/dist/components/features/settings/app-settings/theme-input.d.ts +2 -1
  768. package/dist/components/features/settings/backend-synced-settings-badge.d.ts +1 -1
  769. package/dist/components/features/settings/banner-message.d.ts +1 -1
  770. package/dist/components/features/settings/cloud-settings-link.d.ts +1 -1
  771. package/dist/components/features/settings/input-skeleton.d.ts +1 -1
  772. package/dist/components/features/settings/integrations-settings-link.d.ts +1 -1
  773. package/dist/components/features/settings/key-status-icon.d.ts +1 -1
  774. package/dist/components/features/settings/llm-profiles/delete-profile-modal.d.ts +1 -1
  775. package/dist/components/features/settings/llm-profiles/llm-profiles-manager.d.ts +1 -1
  776. package/dist/components/features/settings/llm-profiles/llm-settings-local-view.d.ts +2 -1
  777. package/dist/components/features/settings/llm-profiles/profile-actions-menu-item.d.ts +1 -1
  778. package/dist/components/features/settings/llm-profiles/profile-actions-menu.d.ts +1 -1
  779. package/dist/components/features/settings/llm-profiles/profile-row.d.ts +1 -1
  780. package/dist/components/features/settings/llm-profiles/profiles-body.d.ts +1 -1
  781. package/dist/components/features/settings/llm-profiles/rename-profile-modal.d.ts +1 -1
  782. package/dist/components/features/settings/llm-settings/llm-settings-inputs-skeleton.d.ts +1 -1
  783. package/dist/components/features/settings/llm-settings/openai-subscription-auth-card.d.ts +2 -1
  784. package/dist/components/features/settings/mcp-settings/mcp-server-form.cjs +1 -1
  785. package/dist/components/features/settings/mcp-settings/mcp-server-form.cjs.map +1 -1
  786. package/dist/components/features/settings/mcp-settings/mcp-server-form.d.ts +2 -1
  787. package/dist/components/features/settings/mcp-settings/mcp-server-form.js +2 -1
  788. package/dist/components/features/settings/mcp-settings/mcp-server-form.js.map +1 -1
  789. package/dist/components/features/settings/mcp-settings/mcp-server-list-item.d.ts +1 -1
  790. package/dist/components/features/settings/mcp-settings/mcp-server-list.d.ts +1 -1
  791. package/dist/components/features/settings/mobile-header.d.ts +1 -1
  792. package/dist/components/features/settings/optional-tag.d.ts +1 -1
  793. package/dist/components/features/settings/sdk-settings/field-help.d.ts +1 -1
  794. package/dist/components/features/settings/sdk-settings/schema-field.d.ts +2 -1
  795. package/dist/components/features/settings/sdk-settings/sdk-section-page.d.ts +1 -1
  796. package/dist/components/features/settings/sdk-settings/view-toggle.d.ts +1 -1
  797. package/dist/components/features/settings/secrets-settings/secret-form.d.ts +2 -1
  798. package/dist/components/features/settings/secrets-settings/secret-list-item.d.ts +2 -2
  799. package/dist/components/features/settings/settings-desktop-sidebar.cjs +1 -1
  800. package/dist/components/features/settings/settings-desktop-sidebar.cjs.map +1 -1
  801. package/dist/components/features/settings/settings-desktop-sidebar.d.ts +1 -1
  802. package/dist/components/features/settings/settings-desktop-sidebar.js +1 -1
  803. package/dist/components/features/settings/settings-desktop-sidebar.js.map +1 -1
  804. package/dist/components/features/settings/settings-dropdown-input.d.ts +1 -1
  805. package/dist/components/features/settings/settings-layout.d.ts +1 -1
  806. package/dist/components/features/settings/settings-mobile-drawer.cjs +1 -1
  807. package/dist/components/features/settings/settings-mobile-drawer.cjs.map +1 -1
  808. package/dist/components/features/settings/settings-mobile-drawer.d.ts +1 -1
  809. package/dist/components/features/settings/settings-mobile-drawer.js +1 -1
  810. package/dist/components/features/settings/settings-mobile-drawer.js.map +1 -1
  811. package/dist/components/features/settings/settings-mobile-hub.d.ts +1 -1
  812. package/dist/components/features/settings/settings-nav-divider.d.ts +1 -1
  813. package/dist/components/features/settings/settings-nav-header.d.ts +1 -1
  814. package/dist/components/features/settings/settings-nav-link.d.ts +1 -1
  815. package/dist/components/features/settings/settings-navigation.d.ts +1 -1
  816. package/dist/components/features/settings/settings-switch.d.ts +1 -1
  817. package/dist/components/features/settings/subtext-skeleton.d.ts +1 -1
  818. package/dist/components/features/settings/switch-skeleton.d.ts +1 -1
  819. package/dist/components/features/settings/upgrade-banner.d.ts +1 -1
  820. package/dist/components/features/settings/upgrade-button.d.ts +1 -1
  821. package/dist/components/features/sidebar/avatar.d.ts +1 -1
  822. package/dist/components/features/sidebar/sidebar-collapsed-icon-slot.d.ts +1 -1
  823. package/dist/components/features/sidebar/sidebar-conversation-list.d.ts +1 -1
  824. package/dist/components/features/sidebar/sidebar-mobile-menu-bar.d.ts +1 -1
  825. package/dist/components/features/sidebar/sidebar-mobile-menu-toggle.d.ts +1 -1
  826. package/dist/components/features/sidebar/sidebar-mobile-nav-context.d.ts +1 -1
  827. package/dist/components/features/sidebar/sidebar-nav-link.d.ts +1 -1
  828. package/dist/components/features/sidebar/sidebar-rail-body.cjs +1 -1
  829. package/dist/components/features/sidebar/sidebar-rail-body.cjs.map +1 -1
  830. package/dist/components/features/sidebar/sidebar-rail-body.d.ts +1 -1
  831. package/dist/components/features/sidebar/sidebar-rail-body.js +109 -108
  832. package/dist/components/features/sidebar/sidebar-rail-body.js.map +1 -1
  833. package/dist/components/features/sidebar/sidebar.d.ts +2 -1
  834. package/dist/components/features/sidebar/user-avatar.d.ts +1 -1
  835. package/dist/components/features/skills/add-skill-modal.d.ts +2 -1
  836. package/dist/components/features/skills/extensions-mobile-hub.d.ts +1 -1
  837. package/dist/components/features/skills/extensions-navigation.cjs +1 -1
  838. package/dist/components/features/skills/extensions-navigation.cjs.map +1 -1
  839. package/dist/components/features/skills/extensions-navigation.d.ts +1 -1
  840. package/dist/components/features/skills/extensions-navigation.js +9 -9
  841. package/dist/components/features/skills/extensions-navigation.js.map +1 -1
  842. package/dist/components/features/skills/skill-card-pill-row.d.ts +1 -1
  843. package/dist/components/features/skills/skill-card.d.ts +2 -1
  844. package/dist/components/features/skills/skill-detail-modal.d.ts +2 -1
  845. package/dist/components/features/skills/skill-facet-rail.d.ts +8 -0
  846. package/dist/components/features/skills/skill-facet-row.d.ts +13 -0
  847. package/dist/components/features/skills/skill-filter.d.ts +34 -0
  848. package/dist/components/features/skills/skill-filters-modal.d.ts +10 -0
  849. package/dist/components/features/skills/skill-icon-badge.d.ts +1 -1
  850. package/dist/components/features/skills/skill-type-badge.d.ts +1 -1
  851. package/dist/components/features/skills/skills-toolbar.d.ts +3 -4
  852. package/dist/components/features/suggestions/suggestion-item.d.ts +1 -1
  853. package/dist/components/features/suggestions/suggestions.d.ts +1 -1
  854. package/dist/components/features/terminal/empty-terminal-message.d.ts +1 -1
  855. package/dist/components/features/terminal/terminal.d.ts +1 -1
  856. package/dist/components/features/tips/random-tip.d.ts +2 -1
  857. package/dist/components/providers/agent-server-ui-providers.d.ts +1 -1
  858. package/dist/components/providers/agent-server-ui-root.d.ts +1 -1
  859. package/dist/components/providers/telemetry-provider.d.ts +1 -1
  860. package/dist/components/shared/action-tooltip.d.ts +1 -1
  861. package/dist/components/shared/agent-brand-icon.d.ts +1 -1
  862. package/dist/components/shared/badge.d.ts +1 -1
  863. package/dist/components/shared/buttons/back-nav-button-content.d.ts +1 -1
  864. package/dist/components/shared/buttons/circle-plus-check-toggle.d.ts +3 -2
  865. package/dist/components/shared/buttons/conversation-confirmation-buttons.d.ts +1 -1
  866. package/dist/components/shared/buttons/copy-to-clipboard-button.d.ts +1 -1
  867. package/dist/components/shared/buttons/copyable-content-wrapper.d.ts +1 -1
  868. package/dist/components/shared/buttons/modal-button.d.ts +1 -1
  869. package/dist/components/shared/buttons/openhands-logo-button.d.ts +1 -1
  870. package/dist/components/shared/buttons/remove-button.d.ts +1 -1
  871. package/dist/components/shared/buttons/scroll-to-bottom-button.d.ts +1 -1
  872. package/dist/components/shared/buttons/styled-tooltip.d.ts +1 -1
  873. package/dist/components/shared/filters/enum-filter-dropdown.cjs +1 -1
  874. package/dist/components/shared/filters/enum-filter-dropdown.cjs.map +1 -1
  875. package/dist/components/shared/filters/enum-filter-dropdown.d.ts +6 -2
  876. package/dist/components/shared/filters/enum-filter-dropdown.js +13 -13
  877. package/dist/components/shared/filters/enum-filter-dropdown.js.map +1 -1
  878. package/dist/components/shared/git-provider-icon.d.ts +1 -1
  879. package/dist/components/shared/hook-execution-event-message.d.ts +2 -1
  880. package/dist/components/shared/loading-spinner.d.ts +1 -1
  881. package/dist/components/shared/modals/confirmation-modal.d.ts +1 -1
  882. package/dist/components/shared/modals/confirmation-modals/base-modal.d.ts +3 -3
  883. package/dist/components/shared/modals/confirmation-modals/danger-modal.d.ts +1 -1
  884. package/dist/components/shared/modals/modal-body.d.ts +1 -1
  885. package/dist/components/shared/modals/modal-close-button.d.ts +1 -1
  886. package/dist/components/shared/modals/settings/model-selector.d.ts +2 -1
  887. package/dist/components/shared/modals/settings/settings-form.d.ts +2 -1
  888. package/dist/components/shared/modals/settings/settings-modal.d.ts +1 -1
  889. package/dist/components/shared/navigation-link.cjs +1 -1
  890. package/dist/components/shared/navigation-link.cjs.map +1 -1
  891. package/dist/components/shared/navigation-link.js +11 -7
  892. package/dist/components/shared/navigation-link.js.map +1 -1
  893. package/dist/components/shared/risk-alert.d.ts +1 -1
  894. package/dist/components/shared/text-shimmer.d.ts +1 -1
  895. package/dist/components/ui/resize-handle.d.ts +1 -1
  896. package/dist/config/defaults.cjs +1 -1
  897. package/dist/config/defaults.cjs.map +1 -1
  898. package/dist/config/defaults.js +3 -3
  899. package/dist/config/defaults.js.map +1 -1
  900. package/dist/constants/child-conversation.cjs +2 -0
  901. package/dist/constants/child-conversation.cjs.map +1 -0
  902. package/dist/constants/child-conversation.d.ts +29 -0
  903. package/dist/constants/child-conversation.js +6 -0
  904. package/dist/constants/child-conversation.js.map +1 -0
  905. package/dist/context/navigation-context.d.ts +1 -1
  906. package/dist/context/scroll-context.d.ts +1 -1
  907. package/dist/contexts/active-backend-context.d.ts +1 -1
  908. package/dist/contexts/conversation-websocket-context.cjs +3 -3
  909. package/dist/contexts/conversation-websocket-context.cjs.map +1 -1
  910. package/dist/contexts/conversation-websocket-context.d.ts +1 -1
  911. package/dist/contexts/conversation-websocket-context.js +189 -188
  912. package/dist/contexts/conversation-websocket-context.js.map +1 -1
  913. package/dist/contexts/settings-section-header-context.d.ts +1 -1
  914. package/dist/contexts/websocket-provider-wrapper.d.ts +1 -1
  915. package/dist/fixtures/home-automations-demo.d.ts +19 -0
  916. package/dist/hooks/chat/use-model-interceptor.cjs +1 -1
  917. package/dist/hooks/chat/use-model-interceptor.js +6 -6
  918. package/dist/hooks/mutation/use-add-mcp-server.cjs +1 -1
  919. package/dist/hooks/mutation/use-add-mcp-server.cjs.map +1 -1
  920. package/dist/hooks/mutation/use-add-mcp-server.js +10 -14
  921. package/dist/hooks/mutation/use-add-mcp-server.js.map +1 -1
  922. package/dist/hooks/mutation/use-create-conversation.cjs +1 -1
  923. package/dist/hooks/mutation/use-create-conversation.js +6 -6
  924. package/dist/hooks/mutation/use-delete-mcp-server.cjs +1 -1
  925. package/dist/hooks/mutation/use-delete-mcp-server.cjs.map +1 -1
  926. package/dist/hooks/mutation/use-delete-mcp-server.d.ts +2 -7
  927. package/dist/hooks/mutation/use-delete-mcp-server.js +8 -34
  928. package/dist/hooks/mutation/use-delete-mcp-server.js.map +1 -1
  929. package/dist/hooks/mutation/use-save-settings.cjs +1 -1
  930. package/dist/hooks/mutation/use-save-settings.cjs.map +1 -1
  931. package/dist/hooks/mutation/use-save-settings.js +8 -4
  932. package/dist/hooks/mutation/use-save-settings.js.map +1 -1
  933. package/dist/hooks/mutation/use-update-mcp-server.cjs +1 -1
  934. package/dist/hooks/mutation/use-update-mcp-server.cjs.map +1 -1
  935. package/dist/hooks/mutation/use-update-mcp-server.d.ts +1 -1
  936. package/dist/hooks/mutation/use-update-mcp-server.js +31 -16
  937. package/dist/hooks/mutation/use-update-mcp-server.js.map +1 -1
  938. package/dist/hooks/query/use-active-conversation.d.ts +1 -1
  939. package/dist/hooks/query/use-agent-profiles.d.ts +1 -1
  940. package/dist/hooks/query/use-app-installations.d.ts +1 -1
  941. package/dist/hooks/query/use-automation-detail.d.ts +2 -2
  942. package/dist/hooks/query/use-automation-health.d.ts +2 -0
  943. package/dist/hooks/query/use-automations.d.ts +5 -1
  944. package/dist/hooks/query/use-bash-command-logs.d.ts +1 -1
  945. package/dist/hooks/query/use-cloud-sandbox.d.ts +1 -1
  946. package/dist/hooks/query/use-commit-changes.d.ts +1 -1
  947. package/dist/hooks/query/use-config.d.ts +1 -1
  948. package/dist/hooks/query/use-conversation-history.d.ts +1 -1
  949. package/dist/hooks/query/use-conversation-hooks.d.ts +1 -1
  950. package/dist/hooks/query/use-conversation-skills.d.ts +1 -1
  951. package/dist/hooks/query/use-get-secrets.d.ts +1 -1
  952. package/dist/hooks/query/use-home-automations.d.ts +20 -0
  953. package/dist/hooks/query/use-latest-automation-runs.d.ts +19 -0
  954. package/dist/hooks/query/use-llm-profiles.d.ts +1 -1
  955. package/dist/hooks/query/use-llm-subscription-models.d.ts +1 -1
  956. package/dist/hooks/query/use-llm-subscription-status.d.ts +1 -1
  957. package/dist/hooks/query/use-local-git-info.d.ts +1 -1
  958. package/dist/hooks/query/use-local-workspaces.d.ts +1 -1
  959. package/dist/hooks/query/use-manifest-capabilities.d.ts +2 -0
  960. package/dist/hooks/query/use-plugin-file-content.d.ts +1 -1
  961. package/dist/hooks/query/use-plugins-marketplace.d.ts +1 -1
  962. package/dist/hooks/query/use-provider-models.d.ts +1 -1
  963. package/dist/hooks/query/use-search-branches.d.ts +1 -1
  964. package/dist/hooks/query/use-search-providers.d.ts +1 -1
  965. package/dist/hooks/query/use-search-repositories.d.ts +1 -1
  966. package/dist/hooks/query/use-search-subdirs.d.ts +2 -2
  967. package/dist/hooks/query/use-settings.d.ts +2 -2
  968. package/dist/hooks/query/use-skills.d.ts +1 -1
  969. package/dist/hooks/query/use-start-tasks.d.ts +1 -1
  970. package/dist/hooks/query/use-sub-conversation-task-polling.d.ts +1 -1
  971. package/dist/hooks/query/use-sub-conversations.d.ts +1 -1
  972. package/dist/hooks/query/use-suggested-tasks.d.ts +1 -1
  973. package/dist/hooks/query/use-task-polling.d.ts +2 -2
  974. package/dist/hooks/query/use-unified-get-git-changes.d.ts +1 -1
  975. package/dist/hooks/query/use-unified-git-diff.d.ts +1 -1
  976. package/dist/hooks/query/use-user-conversation.d.ts +1 -1
  977. package/dist/hooks/query/use-workspace-file-content.d.ts +1 -1
  978. package/dist/hooks/use-backend-scoped-path.cjs +2 -0
  979. package/dist/hooks/use-backend-scoped-path.cjs.map +1 -0
  980. package/dist/hooks/use-backend-scoped-path.d.ts +10 -0
  981. package/dist/hooks/use-backend-scoped-path.js +13 -0
  982. package/dist/hooks/use-backend-scoped-path.js.map +1 -0
  983. package/dist/hooks/use-home-automation-actions.d.ts +23 -0
  984. package/dist/hooks/use-home-pinned-automations.d.ts +26 -0
  985. package/dist/hooks/use-tracking.cjs +1 -1
  986. package/dist/hooks/use-tracking.cjs.map +1 -1
  987. package/dist/hooks/use-tracking.d.ts +4 -0
  988. package/dist/hooks/use-tracking.js +6 -0
  989. package/dist/hooks/use-tracking.js.map +1 -1
  990. package/dist/i18n/declaration.cjs +1 -1
  991. package/dist/i18n/declaration.cjs.map +1 -1
  992. package/dist/i18n/declaration.d.ts +105 -2
  993. package/dist/i18n/declaration.js +1 -1
  994. package/dist/i18n/declaration.js.map +1 -1
  995. package/dist/i18n/translation.cjs +2 -2
  996. package/dist/i18n/translation.cjs.map +1 -1
  997. package/dist/i18n/translation.js +1813 -62
  998. package/dist/i18n/translation.js.map +1 -1
  999. package/dist/icons/code-pill.d.ts +1 -1
  1000. package/dist/icons/docker.cjs +2 -0
  1001. package/dist/icons/docker.cjs.map +1 -0
  1002. package/dist/icons/docker.js +19 -0
  1003. package/dist/icons/docker.js.map +1 -0
  1004. package/dist/icons/npm.cjs +2 -0
  1005. package/dist/icons/npm.cjs.map +1 -0
  1006. package/dist/icons/npm.js +19 -0
  1007. package/dist/icons/npm.js.map +1 -0
  1008. package/dist/locales/ar/openhands.json +108 -5
  1009. package/dist/locales/ca/openhands.json +108 -5
  1010. package/dist/locales/de/openhands.json +108 -5
  1011. package/dist/locales/en/openhands.json +108 -5
  1012. package/dist/locales/es/openhands.json +108 -5
  1013. package/dist/locales/fr/openhands.json +108 -5
  1014. package/dist/locales/it/openhands.json +108 -5
  1015. package/dist/locales/ja/openhands.json +108 -5
  1016. package/dist/locales/ko-KR/openhands.json +108 -5
  1017. package/dist/locales/no/openhands.json +108 -5
  1018. package/dist/locales/pt/openhands.json +108 -5
  1019. package/dist/locales/tr/openhands.json +108 -5
  1020. package/dist/locales/uk/openhands.json +108 -5
  1021. package/dist/locales/zh-CN/openhands.json +108 -5
  1022. package/dist/locales/zh-TW/openhands.json +108 -5
  1023. package/dist/manifests/automation-insights.d.ts +64 -0
  1024. package/dist/manifests/automation-interface.cjs +1 -1
  1025. package/dist/manifests/automation-interface.cjs.map +1 -1
  1026. package/dist/manifests/automation-interface.d.ts +33 -1
  1027. package/dist/manifests/automation-interface.js +2 -1
  1028. package/dist/manifests/automation-interface.js.map +1 -1
  1029. package/dist/manifests/interface-validation.cjs +1 -1
  1030. package/dist/manifests/interface-validation.cjs.map +1 -1
  1031. package/dist/manifests/interface-validation.js +228 -50
  1032. package/dist/manifests/interface-validation.js.map +1 -1
  1033. package/dist/manifests/manifest-template.d.ts +2 -0
  1034. package/dist/manifests/manifest-validation.cjs.map +1 -1
  1035. package/dist/manifests/manifest-validation.js.map +1 -1
  1036. package/dist/manifests/types.cjs +1 -1
  1037. package/dist/manifests/types.cjs.map +1 -1
  1038. package/dist/manifests/types.d.ts +128 -0
  1039. package/dist/manifests/types.js +35 -2
  1040. package/dist/manifests/types.js.map +1 -1
  1041. package/dist/mockServiceWorker.js +21 -9
  1042. package/dist/node_modules/@openhands/extensions/automations/catalog/upstream-fork-sync/manifest.cjs +9 -0
  1043. package/dist/node_modules/@openhands/extensions/automations/catalog/upstream-fork-sync/manifest.cjs.map +1 -0
  1044. package/dist/node_modules/@openhands/extensions/automations/catalog/upstream-fork-sync/manifest.js +74 -0
  1045. package/dist/node_modules/@openhands/extensions/automations/catalog/upstream-fork-sync/manifest.js.map +1 -0
  1046. package/dist/node_modules/@openhands/extensions/automations/catalog-index.cjs +1 -1
  1047. package/dist/node_modules/@openhands/extensions/automations/catalog-index.cjs.map +1 -1
  1048. package/dist/node_modules/@openhands/extensions/automations/catalog-index.js +6 -4
  1049. package/dist/node_modules/@openhands/extensions/automations/catalog-index.js.map +1 -1
  1050. package/dist/node_modules/@openhands/extensions/automations/interface.cjs +1 -1
  1051. package/dist/node_modules/@openhands/extensions/automations/interface.cjs.map +1 -1
  1052. package/dist/node_modules/@openhands/extensions/automations/interface.js +126 -5
  1053. package/dist/node_modules/@openhands/extensions/automations/interface.js.map +1 -1
  1054. package/dist/node_modules/@openhands/extensions/skills/index.cjs +161 -53
  1055. package/dist/node_modules/@openhands/extensions/skills/index.cjs.map +1 -1
  1056. package/dist/node_modules/@openhands/extensions/skills/index.js +112 -50
  1057. package/dist/node_modules/@openhands/extensions/skills/index.js.map +1 -1
  1058. package/dist/node_modules/@openhands/typescript-client/dist/index.cjs +1 -1
  1059. package/dist/node_modules/@openhands/typescript-client/dist/index.js +1 -1
  1060. package/dist/node_modules/@tanstack/query-core/build/modern/utils.cjs +1 -1
  1061. package/dist/node_modules/@tanstack/query-core/build/modern/utils.cjs.map +1 -1
  1062. package/dist/node_modules/@tanstack/query-core/build/modern/utils.js +12 -1
  1063. package/dist/node_modules/@tanstack/query-core/build/modern/utils.js.map +1 -1
  1064. package/dist/node_modules/@tanstack/react-query/build/modern/useBaseQuery.cjs +1 -1
  1065. package/dist/node_modules/@tanstack/react-query/build/modern/useBaseQuery.cjs.map +1 -1
  1066. package/dist/node_modules/@tanstack/react-query/build/modern/useBaseQuery.js +14 -12
  1067. package/dist/node_modules/@tanstack/react-query/build/modern/useBaseQuery.js.map +1 -1
  1068. package/dist/node_modules/html-parse-stringify/dist/esm/html-parse-stringify.cjs +2 -0
  1069. package/dist/node_modules/html-parse-stringify/dist/esm/html-parse-stringify.cjs.map +1 -0
  1070. package/dist/node_modules/html-parse-stringify/dist/esm/html-parse-stringify.js +177 -0
  1071. package/dist/node_modules/html-parse-stringify/dist/esm/html-parse-stringify.js.map +1 -0
  1072. package/dist/node_modules/i18next/dist/esm/i18next.cjs +1 -1
  1073. package/dist/node_modules/i18next/dist/esm/i18next.cjs.map +1 -1
  1074. package/dist/node_modules/i18next/dist/esm/i18next.js +31 -24
  1075. package/dist/node_modules/i18next/dist/esm/i18next.js.map +1 -1
  1076. package/dist/node_modules/lucide-react/dist/esm/icons/briefcase.cjs +2 -0
  1077. package/dist/node_modules/lucide-react/dist/esm/icons/briefcase.cjs.map +1 -0
  1078. package/dist/node_modules/lucide-react/dist/esm/icons/briefcase.js +16 -0
  1079. package/dist/node_modules/lucide-react/dist/esm/icons/briefcase.js.map +1 -0
  1080. package/dist/node_modules/lucide-react/dist/esm/icons/building-2.cjs +2 -0
  1081. package/dist/node_modules/lucide-react/dist/esm/icons/building-2.cjs.map +1 -0
  1082. package/dist/node_modules/lucide-react/dist/esm/icons/building-2.js +27 -0
  1083. package/dist/node_modules/lucide-react/dist/esm/icons/building-2.js.map +1 -0
  1084. package/dist/node_modules/lucide-react/dist/esm/icons/circle-arrow-up.cjs +2 -0
  1085. package/dist/node_modules/lucide-react/dist/esm/icons/circle-arrow-up.cjs.map +1 -0
  1086. package/dist/node_modules/lucide-react/dist/esm/icons/circle-arrow-up.js +21 -0
  1087. package/dist/node_modules/lucide-react/dist/esm/icons/circle-arrow-up.js.map +1 -0
  1088. package/dist/node_modules/lucide-react/dist/esm/icons/circle-user-round.cjs +2 -0
  1089. package/dist/node_modules/lucide-react/dist/esm/icons/circle-user-round.cjs.map +1 -0
  1090. package/dist/node_modules/lucide-react/dist/esm/icons/circle-user-round.js +23 -0
  1091. package/dist/node_modules/lucide-react/dist/esm/icons/circle-user-round.js.map +1 -0
  1092. package/dist/node_modules/lucide-react/dist/esm/icons/cloud-cog.cjs +2 -0
  1093. package/dist/node_modules/lucide-react/dist/esm/icons/cloud-cog.cjs.map +1 -0
  1094. package/dist/node_modules/lucide-react/dist/esm/icons/cloud-cog.js +43 -0
  1095. package/dist/node_modules/lucide-react/dist/esm/icons/cloud-cog.js.map +1 -0
  1096. package/dist/node_modules/lucide-react/dist/esm/icons/earth.cjs +2 -0
  1097. package/dist/node_modules/lucide-react/dist/esm/icons/earth.cjs.map +1 -0
  1098. package/dist/node_modules/lucide-react/dist/esm/icons/earth.js +25 -0
  1099. package/dist/node_modules/lucide-react/dist/esm/icons/earth.js.map +1 -0
  1100. package/dist/node_modules/lucide-react/dist/esm/icons/flag.cjs +2 -0
  1101. package/dist/node_modules/lucide-react/dist/esm/icons/flag.cjs.map +1 -0
  1102. package/dist/node_modules/lucide-react/dist/esm/icons/flag.js +9 -0
  1103. package/dist/node_modules/lucide-react/dist/esm/icons/flag.js.map +1 -0
  1104. package/dist/node_modules/lucide-react/dist/esm/icons/folder-git-2.cjs +2 -0
  1105. package/dist/node_modules/lucide-react/dist/esm/icons/folder-git-2.cjs.map +1 -0
  1106. package/dist/node_modules/lucide-react/dist/esm/icons/folder-git-2.js +27 -0
  1107. package/dist/node_modules/lucide-react/dist/esm/icons/folder-git-2.js.map +1 -0
  1108. package/dist/node_modules/lucide-react/dist/esm/icons/folder-key.cjs +2 -0
  1109. package/dist/node_modules/lucide-react/dist/esm/icons/folder-key.cjs.map +1 -0
  1110. package/dist/node_modules/lucide-react/dist/esm/icons/folder-key.js +25 -0
  1111. package/dist/node_modules/lucide-react/dist/esm/icons/folder-key.js.map +1 -0
  1112. package/dist/node_modules/lucide-react/dist/esm/icons/git-pull-request.cjs +2 -0
  1113. package/dist/node_modules/lucide-react/dist/esm/icons/git-pull-request.cjs.map +1 -0
  1114. package/dist/node_modules/lucide-react/dist/esm/icons/git-pull-request.js +30 -0
  1115. package/dist/node_modules/lucide-react/dist/esm/icons/git-pull-request.js.map +1 -0
  1116. package/dist/node_modules/lucide-react/dist/esm/icons/hash.cjs +2 -0
  1117. package/dist/node_modules/lucide-react/dist/esm/icons/hash.cjs.map +1 -0
  1118. package/dist/node_modules/lucide-react/dist/esm/icons/hash.js +35 -0
  1119. package/dist/node_modules/lucide-react/dist/esm/icons/hash.js.map +1 -0
  1120. package/dist/node_modules/lucide-react/dist/esm/icons/house.cjs +2 -0
  1121. package/dist/node_modules/lucide-react/dist/esm/icons/house.cjs.map +1 -0
  1122. package/dist/node_modules/lucide-react/dist/esm/icons/house.js +12 -0
  1123. package/dist/node_modules/lucide-react/dist/esm/icons/house.js.map +1 -0
  1124. package/dist/node_modules/lucide-react/dist/esm/icons/id-card.cjs +2 -0
  1125. package/dist/node_modules/lucide-react/dist/esm/icons/id-card.cjs.map +1 -0
  1126. package/dist/node_modules/lucide-react/dist/esm/icons/id-card.js +33 -0
  1127. package/dist/node_modules/lucide-react/dist/esm/icons/id-card.js.map +1 -0
  1128. package/dist/node_modules/lucide-react/dist/esm/icons/key-round.cjs +2 -0
  1129. package/dist/node_modules/lucide-react/dist/esm/icons/key-round.cjs.map +1 -0
  1130. package/dist/node_modules/lucide-react/dist/esm/icons/key-round.js +15 -0
  1131. package/dist/node_modules/lucide-react/dist/esm/icons/key-round.js.map +1 -0
  1132. package/dist/node_modules/lucide-react/dist/esm/icons/layers.cjs +2 -0
  1133. package/dist/node_modules/lucide-react/dist/esm/icons/layers.cjs.map +1 -0
  1134. package/dist/node_modules/lucide-react/dist/esm/icons/layers.js +19 -0
  1135. package/dist/node_modules/lucide-react/dist/esm/icons/layers.js.map +1 -0
  1136. package/dist/node_modules/lucide-react/dist/esm/icons/link-2.cjs +2 -0
  1137. package/dist/node_modules/lucide-react/dist/esm/icons/link-2.cjs.map +1 -0
  1138. package/dist/node_modules/lucide-react/dist/esm/icons/link-2.js +22 -0
  1139. package/dist/node_modules/lucide-react/dist/esm/icons/link-2.js.map +1 -0
  1140. package/dist/node_modules/lucide-react/dist/esm/icons/mails.cjs +2 -0
  1141. package/dist/node_modules/lucide-react/dist/esm/icons/mails.cjs.map +1 -0
  1142. package/dist/node_modules/lucide-react/dist/esm/icons/mails.js +23 -0
  1143. package/dist/node_modules/lucide-react/dist/esm/icons/mails.js.map +1 -0
  1144. package/dist/node_modules/lucide-react/dist/esm/icons/messages-square.cjs +2 -0
  1145. package/dist/node_modules/lucide-react/dist/esm/icons/messages-square.cjs.map +1 -0
  1146. package/dist/node_modules/lucide-react/dist/esm/icons/messages-square.js +12 -0
  1147. package/dist/node_modules/lucide-react/dist/esm/icons/messages-square.js.map +1 -0
  1148. package/dist/node_modules/lucide-react/dist/esm/icons/plug.cjs +2 -0
  1149. package/dist/node_modules/lucide-react/dist/esm/icons/plug.cjs.map +1 -0
  1150. package/dist/node_modules/lucide-react/dist/esm/icons/plug.js +23 -0
  1151. package/dist/node_modules/lucide-react/dist/esm/icons/plug.js.map +1 -0
  1152. package/dist/node_modules/lucide-react/dist/esm/icons/square-kanban.cjs +2 -0
  1153. package/dist/node_modules/lucide-react/dist/esm/icons/square-kanban.cjs.map +1 -0
  1154. package/dist/node_modules/lucide-react/dist/esm/icons/square-kanban.js +27 -0
  1155. package/dist/node_modules/lucide-react/dist/esm/icons/square-kanban.js.map +1 -0
  1156. package/dist/node_modules/lucide-react/dist/esm/icons/ticket.cjs +2 -0
  1157. package/dist/node_modules/lucide-react/dist/esm/icons/ticket.cjs.map +1 -0
  1158. package/dist/node_modules/lucide-react/dist/esm/icons/ticket.js +23 -0
  1159. package/dist/node_modules/lucide-react/dist/esm/icons/ticket.js.map +1 -0
  1160. package/dist/node_modules/lucide-react/dist/esm/icons/users-round.cjs +2 -0
  1161. package/dist/node_modules/lucide-react/dist/esm/icons/users-round.cjs.map +1 -0
  1162. package/dist/node_modules/lucide-react/dist/esm/icons/users-round.js +21 -0
  1163. package/dist/node_modules/lucide-react/dist/esm/icons/users-round.js.map +1 -0
  1164. package/dist/node_modules/lucide-react/dist/esm/icons/waypoints.cjs +2 -0
  1165. package/dist/node_modules/lucide-react/dist/esm/icons/waypoints.cjs.map +1 -0
  1166. package/dist/node_modules/lucide-react/dist/esm/icons/waypoints.js +43 -0
  1167. package/dist/node_modules/lucide-react/dist/esm/icons/waypoints.js.map +1 -0
  1168. package/dist/node_modules/lucide-react/dist/esm/icons/webhook.cjs +2 -0
  1169. package/dist/node_modules/lucide-react/dist/esm/icons/webhook.cjs.map +1 -0
  1170. package/dist/node_modules/lucide-react/dist/esm/icons/webhook.js +19 -0
  1171. package/dist/node_modules/lucide-react/dist/esm/icons/webhook.js.map +1 -0
  1172. package/dist/node_modules/lucide-react/dist/esm/icons/workflow.cjs +2 -0
  1173. package/dist/node_modules/lucide-react/dist/esm/icons/workflow.cjs.map +1 -0
  1174. package/dist/node_modules/lucide-react/dist/esm/icons/workflow.js +27 -0
  1175. package/dist/node_modules/lucide-react/dist/esm/icons/workflow.js.map +1 -0
  1176. package/dist/node_modules/lucide-react/dist/esm/icons/wrench.cjs +2 -0
  1177. package/dist/node_modules/lucide-react/dist/esm/icons/wrench.cjs.map +1 -0
  1178. package/dist/node_modules/lucide-react/dist/esm/icons/wrench.js +9 -0
  1179. package/dist/node_modules/lucide-react/dist/esm/icons/wrench.js.map +1 -0
  1180. package/dist/node_modules/lucide-react/dist/esm/icons/zap.cjs +2 -0
  1181. package/dist/node_modules/lucide-react/dist/esm/icons/zap.cjs.map +1 -0
  1182. package/dist/node_modules/lucide-react/dist/esm/icons/zap.js +9 -0
  1183. package/dist/node_modules/lucide-react/dist/esm/icons/zap.js.map +1 -0
  1184. package/dist/node_modules/posthog-js/dist/module.cjs +2 -2
  1185. package/dist/node_modules/posthog-js/dist/module.cjs.map +1 -1
  1186. package/dist/node_modules/posthog-js/dist/module.js +2055 -1929
  1187. package/dist/node_modules/posthog-js/dist/module.js.map +1 -1
  1188. package/dist/node_modules/react-i18next/dist/es/TransWithoutContext.cjs +1 -1
  1189. package/dist/node_modules/react-i18next/dist/es/TransWithoutContext.cjs.map +1 -1
  1190. package/dist/node_modules/react-i18next/dist/es/TransWithoutContext.js +43 -62
  1191. package/dist/node_modules/react-i18next/dist/es/TransWithoutContext.js.map +1 -1
  1192. package/dist/node_modules/react-i18next/dist/es/useTranslation.cjs +1 -1
  1193. package/dist/node_modules/react-i18next/dist/es/useTranslation.cjs.map +1 -1
  1194. package/dist/node_modules/react-i18next/dist/es/useTranslation.js +12 -6
  1195. package/dist/node_modules/react-i18next/dist/es/useTranslation.js.map +1 -1
  1196. package/dist/node_modules/tailwind-merge/dist/bundle-mjs.cjs +1 -1
  1197. package/dist/node_modules/tailwind-merge/dist/bundle-mjs.cjs.map +1 -1
  1198. package/dist/node_modules/tailwind-merge/dist/bundle-mjs.js +352 -310
  1199. package/dist/node_modules/tailwind-merge/dist/bundle-mjs.js.map +1 -1
  1200. package/dist/package.cjs +1 -1
  1201. package/dist/package.cjs.map +1 -1
  1202. package/dist/package.js +39 -35
  1203. package/dist/package.js.map +1 -1
  1204. package/dist/routes/agent-settings.d.ts +3 -2
  1205. package/dist/routes/app-settings.d.ts +2 -1
  1206. package/dist/routes/browser-tab.d.ts +1 -1
  1207. package/dist/routes/changes-tab.d.ts +2 -1
  1208. package/dist/routes/commits-tab.d.ts +1 -1
  1209. package/dist/routes/conversation.d.ts +2 -1
  1210. package/dist/routes/files-tab.d.ts +1 -1
  1211. package/dist/routes/llm-settings.d.ts +3 -2
  1212. package/dist/routes/mcp.cjs +1 -1
  1213. package/dist/routes/mcp.cjs.map +1 -1
  1214. package/dist/routes/mcp.d.ts +2 -1
  1215. package/dist/routes/mcp.js +1 -1
  1216. package/dist/routes/mcp.js.map +1 -1
  1217. package/dist/routes/planner-tab.d.ts +2 -1
  1218. package/dist/routes/secrets-settings.d.ts +2 -1
  1219. package/dist/routes/task-list-tab.d.ts +1 -1
  1220. package/dist/services/child-conversation-launch.cjs +2 -0
  1221. package/dist/services/child-conversation-launch.cjs.map +1 -0
  1222. package/dist/services/child-conversation-launch.d.ts +41 -0
  1223. package/dist/services/child-conversation-launch.js +182 -0
  1224. package/dist/services/child-conversation-launch.js.map +1 -0
  1225. package/dist/services/settings.cjs +1 -1
  1226. package/dist/services/settings.cjs.map +1 -1
  1227. package/dist/services/settings.js +3 -7
  1228. package/dist/services/settings.js.map +1 -1
  1229. package/dist/stores/conversation-panel-preferences-store.cjs +1 -1
  1230. package/dist/stores/conversation-panel-preferences-store.cjs.map +1 -1
  1231. package/dist/stores/conversation-panel-preferences-store.d.ts +5 -1
  1232. package/dist/stores/conversation-panel-preferences-store.js +8 -2
  1233. package/dist/stores/conversation-panel-preferences-store.js.map +1 -1
  1234. package/dist/types/agent-server/core/base/action.d.ts +17 -1
  1235. package/dist/types/agent-server/core/base/base.d.ts +2 -1
  1236. package/dist/types/agent-server/type-guards.cjs +1 -1
  1237. package/dist/types/agent-server/type-guards.cjs.map +1 -1
  1238. package/dist/types/agent-server/type-guards.d.ts +8 -1
  1239. package/dist/types/agent-server/type-guards.js +4 -3
  1240. package/dist/types/agent-server/type-guards.js.map +1 -1
  1241. package/dist/types/automation.d.ts +30 -1
  1242. package/dist/types/mcp-auth.cjs.map +1 -1
  1243. package/dist/types/mcp-auth.d.ts +5 -41
  1244. package/dist/types/mcp-auth.js.map +1 -1
  1245. package/dist/types/mcp-server.d.ts +17 -32
  1246. package/dist/types/settings.d.ts +8 -28
  1247. package/dist/ui/card-title.d.ts +1 -1
  1248. package/dist/ui/card.d.ts +1 -1
  1249. package/dist/ui/combobox-caret.d.ts +3 -3
  1250. package/dist/ui/context-menu.cjs +1 -1
  1251. package/dist/ui/context-menu.cjs.map +1 -1
  1252. package/dist/ui/context-menu.d.ts +3 -2
  1253. package/dist/ui/context-menu.js +10 -9
  1254. package/dist/ui/context-menu.js.map +1 -1
  1255. package/dist/ui/divider.d.ts +1 -1
  1256. package/dist/ui/dropdown/clear-button.d.ts +1 -1
  1257. package/dist/ui/dropdown/dropdown-input.d.ts +1 -1
  1258. package/dist/ui/dropdown/dropdown-menu.d.ts +1 -1
  1259. package/dist/ui/dropdown/dropdown.d.ts +1 -1
  1260. package/dist/ui/dropdown/loading-spinner.d.ts +1 -1
  1261. package/dist/ui/dropdown/toggle-button.d.ts +1 -1
  1262. package/dist/ui/help-link.d.ts +1 -1
  1263. package/dist/ui/pre.d.ts +1 -1
  1264. package/dist/ui/toggle-switch.d.ts +2 -2
  1265. package/dist/ui/typography.d.ts +7 -7
  1266. package/dist/utils/automation-activity-log-export.d.ts +17 -0
  1267. package/dist/utils/automation-timeout.d.ts +4 -6
  1268. package/dist/utils/custom-toast-handlers.cjs +1 -1
  1269. package/dist/utils/custom-toast-handlers.cjs.map +1 -1
  1270. package/dist/utils/custom-toast-handlers.d.ts +2 -2
  1271. package/dist/utils/custom-toast-handlers.js +18 -1
  1272. package/dist/utils/custom-toast-handlers.js.map +1 -1
  1273. package/dist/utils/format-relative-time.d.ts +3 -0
  1274. package/dist/utils/mcp-config.cjs +1 -1
  1275. package/dist/utils/mcp-config.cjs.map +1 -1
  1276. package/dist/utils/mcp-config.d.ts +12 -29
  1277. package/dist/utils/mcp-config.js +161 -143
  1278. package/dist/utils/mcp-config.js.map +1 -1
  1279. package/dist/utils/mcp-installed-servers.cjs +1 -1
  1280. package/dist/utils/mcp-installed-servers.cjs.map +1 -1
  1281. package/dist/utils/mcp-installed-servers.d.ts +2 -2
  1282. package/dist/utils/mcp-installed-servers.js +21 -32
  1283. package/dist/utils/mcp-installed-servers.js.map +1 -1
  1284. package/dist/utils/mcp-server-health-key.cjs.map +1 -1
  1285. package/dist/utils/mcp-server-health-key.d.ts +2 -4
  1286. package/dist/utils/mcp-server-health-key.js.map +1 -1
  1287. package/dist/utils/settings-like-page-layout-classes.cjs +1 -1
  1288. package/dist/utils/settings-like-page-layout-classes.cjs.map +1 -1
  1289. package/dist/utils/settings-like-page-layout-classes.d.ts +6 -2
  1290. package/dist/utils/settings-like-page-layout-classes.js +1 -1
  1291. package/dist/utils/settings-like-page-layout-classes.js.map +1 -1
  1292. package/dist/utils/skill-category.d.ts +12 -0
  1293. package/package.json +41 -35
  1294. package/scripts/brand-dev-electron.mjs +244 -0
  1295. package/scripts/check-sdk-version-sync.mjs +6 -6
  1296. package/scripts/check-translation-completeness.cjs +4 -0
  1297. package/scripts/dev-safe.mjs +2 -2
  1298. package/scripts/dev-with-automation.mjs +3 -2
  1299. package/scripts/generate-icons.mjs +109 -0
  1300. package/build/assets/Trans-Bwpzk1wT.js +0 -1
  1301. package/build/assets/active-backend-context-BiwzkzDy.js +0 -2
  1302. package/build/assets/agent-context-settings-DXNT_dcw.js +0 -1
  1303. package/build/assets/agent-server-conversation-service.api-CYSWw-2g.js +0 -41
  1304. package/build/assets/agent-settings-BjgQQe-_.js +0 -1
  1305. package/build/assets/alert-banner-DR8EVyZM.js +0 -1
  1306. package/build/assets/api-error-message-e16L1kwH.js +0 -1
  1307. package/build/assets/automation-detail-DY6x2FW1.js +0 -2
  1308. package/build/assets/automation-export-C09f-Lua.js +0 -2
  1309. package/build/assets/automation-setup-route-CqKp0717.js +0 -1
  1310. package/build/assets/automations-list-CqWJ7qXW.js +0 -1
  1311. package/build/assets/backend-form-modal-B8D5hBzK.js +0 -1
  1312. package/build/assets/check-CPLXgluF.js +0 -1
  1313. package/build/assets/chevron-down-CP4QHvyc.js +0 -1
  1314. package/build/assets/circle-check-Dpy2_xSI.js +0 -1
  1315. package/build/assets/command-menu-Bj6X4ckE.js +0 -1
  1316. package/build/assets/condenser-settings-EAXQNR2E.js +0 -1
  1317. package/build/assets/context-menu-list-item-CrCrYuPF.js +0 -1
  1318. package/build/assets/conversation-BzyIcSwr.js +0 -1
  1319. package/build/assets/conversation-panel-BzyIcSwr.js +0 -1
  1320. package/build/assets/copy-DCmZtz6n.js +0 -1
  1321. package/build/assets/entry.client-BbIYOsIg.js +0 -2
  1322. package/build/assets/enum-filter-dropdown-C08-srev.js +0 -1
  1323. package/build/assets/files-tab-DEq8MbHu.js +0 -1
  1324. package/build/assets/format-time-delta-CxfPJpzC.js +0 -1
  1325. package/build/assets/git-repo-dropdown-9WKINV6J.js +0 -1
  1326. package/build/assets/home-CY0JaxiY.js +0 -1
  1327. package/build/assets/home-CaNWlVvB.js +0 -1
  1328. package/build/assets/index-home-CaNWlVvB.js +0 -1
  1329. package/build/assets/info-CmWQXtRQ.js +0 -1
  1330. package/build/assets/install-server-modal-BWrudmZU.js +0 -1
  1331. package/build/assets/llm-not-configured-banner-3tMsM4K6.js +0 -27
  1332. package/build/assets/llm-settings-CXo8iPNW.js +0 -1
  1333. package/build/assets/llm-settings-D0W8mJDk.js +0 -1
  1334. package/build/assets/loader-circle-B4QDBARx.js +0 -1
  1335. package/build/assets/manifest-39f4789d.js +0 -1
  1336. package/build/assets/map-provider-CXU6issd.js +0 -1
  1337. package/build/assets/markdown-renderer-DgiLLhW6.js +0 -8
  1338. package/build/assets/mcp-DXG9LWrI.js +0 -9
  1339. package/build/assets/mcp-marketplace-utils-DFmhKc5s.js +0 -1
  1340. package/build/assets/messages-kBjKaAeA.js +0 -40
  1341. package/build/assets/navigation-link-Bxmn-pCs.js +0 -1
  1342. package/build/assets/onboarding-47hh2IHA.js +0 -1
  1343. package/build/assets/onboarding-modal-9BuvvROo.js +0 -1
  1344. package/build/assets/plus-DrKuuvMe.js +0 -1
  1345. package/build/assets/recommended-automations-launcher-ejxy1P27.js +0 -1
  1346. package/build/assets/root-5S-M8SYa.js +0 -2
  1347. package/build/assets/root-DZ39lS5f.css +0 -1
  1348. package/build/assets/root-layout-BPqoa0gv.js +0 -3
  1349. package/build/assets/search-Dc2qR4O2.js +0 -1
  1350. package/build/assets/settings-BRbnfKEm.js +0 -1
  1351. package/build/assets/settings-Chfn5xTD.js +0 -1
  1352. package/build/assets/settings-like-page-layout-classes-DyxyJ0k4.js +0 -1
  1353. package/build/assets/settings-service.api-CZiPD8__.js +0 -1
  1354. package/build/assets/sidebar-mobile-menu-toggle-ND-hgygu.js +0 -1
  1355. package/build/assets/sidebar-store-Bui-WNEr.js +0 -1
  1356. package/build/assets/skills-settings-B43KArIz.js +0 -2
  1357. package/build/assets/use-is-authed-BT7Iud4U.js +0 -1
  1358. package/build/assets/use-llm-profiles-2Wc2db8u.js +0 -1
  1359. package/build/assets/use-save-agent-profile-D0wC5ExW.js +0 -1
  1360. package/build/assets/use-settings-nav-items-DHAAD-zk.js +0 -16
  1361. package/build/assets/use-skills-CE6miQ3r.js +0 -1
  1362. package/build/assets/use-tracking-BGboadaZ.js +0 -68
  1363. package/build/assets/useQuery-DiPh8LRJ.js +0 -1
  1364. package/build/assets/utils-BgGG1znF.js +0 -1
  1365. package/build/assets/v4-DDdyfk2q.js +0 -1
  1366. package/build/assets/vendor~browser-IVYgIgG1.js +0 -47
  1367. package/build/assets/vendor~entry.client-CXM9oiAk.js +0 -1
  1368. package/build/assets/vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~d4by102p-C2f0ZhS-.js +0 -26
  1369. package/build/assets/vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~emdr2jt4-BrmgjeOw.js +0 -1
  1370. package/build/assets/vendor~module-BZXjBMvd.js +0 -2
  1371. package/build/assets/x-omAzpXkl.js +0 -1
  1372. package/dist/components/features/skills/skill-type-filter.d.ts +0 -3
  1373. package/dist/components/features/skills/skills-type-filter-dropdown.d.ts +0 -7
  1374. package/dist/node_modules/html-parse-stringify/dist/html-parse-stringify.module.cjs +0 -2
  1375. package/dist/node_modules/html-parse-stringify/dist/html-parse-stringify.module.cjs.map +0 -1
  1376. package/dist/node_modules/html-parse-stringify/dist/html-parse-stringify.module.js +0 -81
  1377. package/dist/node_modules/html-parse-stringify/dist/html-parse-stringify.module.js.map +0 -1
  1378. package/dist/node_modules/lucide-react/dist/esm/icons/chevron-up.cjs +0 -2
  1379. package/dist/node_modules/lucide-react/dist/esm/icons/chevron-up.cjs.map +0 -1
  1380. package/dist/node_modules/lucide-react/dist/esm/icons/chevron-up.js +0 -9
  1381. package/dist/node_modules/lucide-react/dist/esm/icons/chevron-up.js.map +0 -1
  1382. package/dist/node_modules/void-elements/index.cjs +0 -2
  1383. package/dist/node_modules/void-elements/index.cjs.map +0 -1
  1384. package/dist/node_modules/void-elements/index.js +0 -25
  1385. package/dist/node_modules/void-elements/index.js.map +0 -1
  1386. /package/build/assets/{vendor~root-layout~index-home~home~mcp~automations-list~automation-setup-route~onboarding-modal-D7IDevqN.js → vendor~root-layout~index-home~home~mcp~automations-list~automation-templates~automation-set~bxsimjx0-D7IDevqN.js} +0 -0
@@ -11,5 +11,5 @@ interface DividerProps extends VariantProps<typeof dividerVariants> {
11
11
  className?: string;
12
12
  testId?: string;
13
13
  }
14
- export declare function Divider({ orientation, color, size, inset, className, testId, }: DividerProps): import("react/jsx-runtime").JSX.Element;
14
+ export declare function Divider({ orientation, color, size, inset, className, testId, }: DividerProps): import("react").JSX.Element;
15
15
  export {};
@@ -1,5 +1,5 @@
1
1
  interface ClearButtonProps {
2
2
  onClear: () => void;
3
3
  }
4
- export declare function ClearButton({ onClear }: ClearButtonProps): import("react/jsx-runtime").JSX.Element;
4
+ export declare function ClearButton({ onClear }: ClearButtonProps): import("react").JSX.Element;
5
5
  export {};
@@ -6,5 +6,5 @@ interface DropdownInputProps {
6
6
  italicPlaceholder?: boolean;
7
7
  fitContent?: boolean;
8
8
  }
9
- export declare function DropdownInput({ placeholder, isDisabled, getInputProps, italicPlaceholder, fitContent, }: DropdownInputProps): import("react/jsx-runtime").JSX.Element;
9
+ export declare function DropdownInput({ placeholder, isDisabled, getInputProps, italicPlaceholder, fitContent, }: DropdownInputProps): import("react").JSX.Element;
10
10
  export {};
@@ -15,5 +15,5 @@ interface DropdownMenuProps {
15
15
  openUpward?: boolean;
16
16
  fitContent?: boolean;
17
17
  }
18
- export declare function DropdownMenu({ isOpen, filteredOptions, selectedItem, emptyMessage, getMenuProps, getItemProps, footer, openUpward, fitContent, }: DropdownMenuProps): import("react/jsx-runtime").JSX.Element;
18
+ export declare function DropdownMenu({ isOpen, filteredOptions, selectedItem, emptyMessage, getMenuProps, getItemProps, footer, openUpward, fitContent, }: DropdownMenuProps): React.JSX.Element;
19
19
  export {};
@@ -22,5 +22,5 @@ interface DropdownProps {
22
22
  /** Size the trigger to its label instead of stretching to the container width. */
23
23
  fitContent?: boolean;
24
24
  }
25
- export declare function Dropdown({ options, emptyMessage, clearable, loading, disabled, placeholder, defaultValue, onChange, testId, className, footer, openUpward, hideTrigger, defaultOpen, openOnHover, italicPlaceholder, fitContent, }: DropdownProps): import("react/jsx-runtime").JSX.Element;
25
+ export declare function Dropdown({ options, emptyMessage, clearable, loading, disabled, placeholder, defaultValue, onChange, testId, className, footer, openUpward, hideTrigger, defaultOpen, openOnHover, italicPlaceholder, fitContent, }: DropdownProps): React.JSX.Element;
26
26
  export {};
@@ -1 +1 @@
1
- export declare function LoadingSpinner(): import("react/jsx-runtime").JSX.Element;
1
+ export declare function LoadingSpinner(): import("react").JSX.Element;
@@ -3,5 +3,5 @@ interface ToggleButtonProps {
3
3
  isDisabled: boolean;
4
4
  getToggleButtonProps: (props?: object) => object;
5
5
  }
6
- export declare function ToggleButton({ isOpen, isDisabled, getToggleButtonProps, }: ToggleButtonProps): import("react/jsx-runtime").JSX.Element;
6
+ export declare function ToggleButton({ isOpen, isDisabled, getToggleButtonProps, }: ToggleButtonProps): import("react").JSX.Element;
7
7
  export {};
@@ -13,5 +13,5 @@ interface HelpLinkProps extends VariantProps<typeof helpLinkVariants> {
13
13
  linkTextClassName?: string;
14
14
  suffixClassName?: string;
15
15
  }
16
- export declare function HelpLink({ testId, text, linkText, href, suffix, size, linkColor, className, linkTextClassName, suffixClassName, }: HelpLinkProps): import("react/jsx-runtime").JSX.Element;
16
+ export declare function HelpLink({ testId, text, linkText, href, suffix, size, linkColor, className, linkTextClassName, suffixClassName, }: HelpLinkProps): import("react").JSX.Element;
17
17
  export {};
package/dist/ui/pre.d.ts CHANGED
@@ -16,5 +16,5 @@ interface PreProps extends VariantProps<typeof preVariants> {
16
16
  testId?: string;
17
17
  children: React.ReactNode;
18
18
  }
19
- export declare function Pre({ size, font, lineHeight, background, textColor, padding, borderRadius, shadow, maxHeight, overflow, className, testId, children, }: PreProps): import("react/jsx-runtime").JSX.Element;
19
+ export declare function Pre({ size, font, lineHeight, background, textColor, padding, borderRadius, shadow, maxHeight, overflow, className, testId, children, }: PreProps): import("react").JSX.Element;
20
20
  export {};
@@ -3,12 +3,12 @@ interface ToggleSwitchVisualProps {
3
3
  className?: string;
4
4
  }
5
5
  /** Shared toggle track + thumb used by settings labels and automation controls. */
6
- export declare function ToggleSwitchVisual({ enabled, className, }: ToggleSwitchVisualProps): import("react/jsx-runtime").JSX.Element;
6
+ export declare function ToggleSwitchVisual({ enabled, className, }: ToggleSwitchVisualProps): import("react").JSX.Element;
7
7
  interface ToggleSwitchProps {
8
8
  enabled: boolean;
9
9
  label: string;
10
10
  onToggle: () => void;
11
11
  className?: string;
12
12
  }
13
- export declare function ToggleSwitch({ enabled, label, onToggle, className, }: ToggleSwitchProps): import("react/jsx-runtime").JSX.Element;
13
+ export declare function ToggleSwitch({ enabled, label, onToggle, className, }: ToggleSwitchProps): import("react").JSX.Element;
14
14
  export {};
@@ -7,7 +7,7 @@ interface TypographyProps extends VariantProps<typeof typographyVariants> {
7
7
  testId?: string;
8
8
  children: React.ReactNode;
9
9
  }
10
- export declare function Typography({ variant, className, testId, children, }: TypographyProps): import("react/jsx-runtime").JSX.Element;
10
+ export declare function Typography({ variant, className, testId, children, }: TypographyProps): import("react").JSX.Element;
11
11
  export declare namespace Typography {
12
12
  var H1: typeof import("./typography").H1;
13
13
  var H2: typeof import("./typography").H2;
@@ -16,10 +16,10 @@ export declare namespace Typography {
16
16
  var CodeBlock: typeof import("./typography").CodeBlock;
17
17
  var Paragraph: typeof import("./typography").Paragraph;
18
18
  }
19
- export declare function H1({ className, testId, children, }: Omit<TypographyProps, "variant">): import("react/jsx-runtime").JSX.Element;
20
- export declare function H2({ className, testId, children, }: Omit<TypographyProps, "variant">): import("react/jsx-runtime").JSX.Element;
21
- export declare function H3({ className, testId, children, }: Omit<TypographyProps, "variant">): import("react/jsx-runtime").JSX.Element;
22
- export declare function Text({ className, testId, children, }: Omit<TypographyProps, "variant">): import("react/jsx-runtime").JSX.Element;
23
- export declare function CodeBlock({ className, testId, children, }: Omit<TypographyProps, "variant">): import("react/jsx-runtime").JSX.Element;
24
- export declare function Paragraph({ className, testId, children, }: Omit<TypographyProps, "variant">): import("react/jsx-runtime").JSX.Element;
19
+ export declare function H1({ className, testId, children, }: Omit<TypographyProps, "variant">): import("react").JSX.Element;
20
+ export declare function H2({ className, testId, children, }: Omit<TypographyProps, "variant">): import("react").JSX.Element;
21
+ export declare function H3({ className, testId, children, }: Omit<TypographyProps, "variant">): import("react").JSX.Element;
22
+ export declare function Text({ className, testId, children, }: Omit<TypographyProps, "variant">): import("react").JSX.Element;
23
+ export declare function CodeBlock({ className, testId, children, }: Omit<TypographyProps, "variant">): import("react").JSX.Element;
24
+ export declare function Paragraph({ className, testId, children, }: Omit<TypographyProps, "variant">): import("react").JSX.Element;
25
25
  export {};
@@ -0,0 +1,17 @@
1
+ import type { ActivityLogExportFormat, Automation, AutomationRun, AutomationRunExportRow } from "#/types/automation";
2
+ export declare function getActivityLogExportFilename(automation: Pick<Automation, "id" | "name">, format: ActivityLogExportFormat): string;
3
+ export declare function serializeActivityLogRowsCsv(rows: AutomationRunExportRow[]): string;
4
+ export declare function buildConversationUrl(conversationId: string | null, conversationBaseUrl?: string): string | null;
5
+ export declare function mapAutomationRunToExportRow(run: AutomationRun, automation: Pick<Automation, "id" | "name" | "trigger">, conversationBaseUrl?: string): AutomationRunExportRow;
6
+ /**
7
+ * Page ``GET /v1/{id}/runs`` until complete, then project export rows locally.
8
+ */
9
+ export declare function fetchAllActivityLogExportRows(automation: Pick<Automation, "id" | "name" | "trigger">, conversationBaseUrl?: string): Promise<AutomationRunExportRow[]>;
10
+ /**
11
+ * Page the runs list endpoint and download one CSV or JSON file.
12
+ */
13
+ export declare function downloadActivityLogExport(options: {
14
+ automation: Pick<Automation, "id" | "name" | "trigger">;
15
+ format: ActivityLogExportFormat;
16
+ conversationBaseUrl?: string;
17
+ }): Promise<void>;
@@ -1,11 +1,9 @@
1
1
  import { I18nKey } from "#/i18n/declaration";
2
2
  /**
3
- * Per-automation run timeout bounds. These mirror the automation server
4
- * (`openhands/automation/utils/timeout.py`): a `null`/omitted timeout falls back
5
- * to the default, and the server rejects anything above the maximum.
3
+ * Per-automation run timeout defaults. The deployment reports the maximum it
4
+ * enforces through capability discovery.
6
5
  */
7
6
  export declare const AUTOMATION_TIMEOUT_DEFAULT_SECONDS = 600;
8
- export declare const AUTOMATION_TIMEOUT_MAX_SECONDS = 1800;
9
7
  export type AutomationTimeoutValidation = {
10
8
  value: number | null;
11
9
  } | {
@@ -14,7 +12,7 @@ export type AutomationTimeoutValidation = {
14
12
  /**
15
13
  * Validate a raw timeout string from the edit form. A blank string means "use
16
14
  * the server default" (resolved as `null`). Otherwise the value must be a
17
- * positive integer no greater than the ceiling, which the interface manifest
18
- * may lower from {@link AUTOMATION_TIMEOUT_MAX_SECONDS}.
15
+ * positive integer. When capability discovery supplies a ceiling, values above
16
+ * it are rejected before the request reaches the service.
19
17
  */
20
18
  export declare function validateAutomationTimeout(raw: string, maxSeconds?: number): AutomationTimeoutValidation;
@@ -1,2 +1,2 @@
1
- const e=require("../_virtual/_rolldown/runtime.cjs"),t=require("../i18n/declaration.cjs"),n=require("../node_modules/lucide-react/dist/esm/icons/circle-x.cjs"),r=require("../constants/status-colors.cjs"),i=require("./utils.cjs"),a=require("./user-facing-error.cjs"),o=require("../i18n/index.cjs"),s=require("../node_modules/react-hot-toast/dist/index.cjs"),c=require("./toast-duration.cjs");let l=require("react");l=e.__toESM(l,1);let u=require("react/jsx-runtime");var d={background:`var(--oh-color-tertiary)`,border:`1px solid var(--oh-border-input)`,color:`#fff`,borderRadius:`var(--oh-radius)`,maxWidth:`400px`,wordBreak:`break-word`,overflowWrap:`anywhere`,whiteSpace:`pre-wrap`},f={position:`top-right`,style:d},p={...d,color:`var(--oh-muted)`};function m({message:e}){let t=l.default.useRef(null),[a,o]=l.default.useState(!1);return l.default.useLayoutEffect(()=>{let e=t.current;if(!e)return;let n=()=>{let t=Number.parseFloat(getComputedStyle(e).lineHeight);if(!Number.isFinite(t)||t<=0){o(!1);return}o(e.getBoundingClientRect().height>t*1.5)};n();let r=new ResizeObserver(n);return r.observe(e),()=>r.disconnect()},[e]),(0,u.jsxs)(`div`,{className:i.cn(`flex min-w-0 gap-2`,a?`items-start`:`items-center`),children:[(0,u.jsx)(n.CircleX,{"aria-hidden":!0,className:`h-4 w-4 shrink-0`,strokeWidth:2,style:{color:r.OH_STATUS_ERROR_COLOR}}),(0,u.jsx)(`span`,{ref:t,className:`min-w-0 flex-1 text-sm leading-5 [word-break:break-word] [overflow-wrap:anywhere]`,children:e})]})}var h={...f,icon:null,style:p},g=e=>{let n=e||o.default.t(t.I18nKey.STATUS$ERROR);a.isCorsOrNetworkErrorMessage(n)?n=o.default.t(t.I18nKey.ERROR$CORS_OR_NETWORK):a.isBackendRequestTimeoutMessage(n)&&(n=o.default.t(t.I18nKey.ERROR$BACKEND_REQUEST_TIMEOUT));let r=c.calculateToastDuration(n,4e3);s.zt((0,u.jsx)(m,{message:n}),{...h,duration:r})},_=e=>{let t=c.calculateToastDuration(e,5e3);s.zt.success((0,u.jsx)(`span`,{className:`[word-break:break-word] [overflow-wrap:anywhere]`,children:e}),{...f,duration:t})};exports.TOAST_OPTIONS=f,exports.displayErrorToast=g,exports.displaySuccessToast=_;
1
+ const e=require("../_virtual/_rolldown/runtime.cjs"),t=require("../i18n/declaration.cjs"),n=require("../node_modules/lucide-react/dist/esm/icons/circle-x.cjs"),r=require("../constants/status-colors.cjs"),i=require("./utils.cjs"),a=require("./user-facing-error.cjs"),o=require("../i18n/index.cjs"),s=require("../node_modules/react-hot-toast/dist/index.cjs"),c=require("./toast-duration.cjs");let l=require("react");l=e.__toESM(l,1);let u=require("react/jsx-runtime");var d={background:`var(--oh-color-tertiary)`,border:`1px solid var(--oh-border-input)`,color:`#fff`,borderRadius:`var(--oh-radius)`,maxWidth:`400px`,wordBreak:`break-word`,overflowWrap:`anywhere`,whiteSpace:`pre-wrap`},f={position:`top-right`,style:d},p={...d,color:`var(--oh-muted)`};function m({message:e}){let t=l.default.useRef(null),[a,o]=l.default.useState(!1);return l.default.useLayoutEffect(()=>{let e=t.current;if(!e)return;let n=()=>{let t=Number.parseFloat(getComputedStyle(e).lineHeight);if(!Number.isFinite(t)||t<=0){o(!1);return}o(e.getBoundingClientRect().height>t*1.5)};n();let r=new ResizeObserver(n);return r.observe(e),()=>r.disconnect()},[e]),(0,u.jsxs)(`div`,{className:i.cn(`flex min-w-0 gap-2`,a?`items-start`:`items-center`),children:[(0,u.jsx)(n.CircleX,{"aria-hidden":!0,className:`h-4 w-4 shrink-0`,strokeWidth:2,style:{color:r.OH_STATUS_ERROR_COLOR}}),(0,u.jsx)(`span`,{ref:t,className:`min-w-0 flex-1 text-sm leading-5 [word-break:break-word] [overflow-wrap:anywhere]`,children:e})]})}var h={...f,icon:null,style:p},g=e=>{let n=e||o.default.t(t.I18nKey.STATUS$ERROR);a.isCorsOrNetworkErrorMessage(n)?n=o.default.t(t.I18nKey.ERROR$CORS_OR_NETWORK):a.isBackendRequestTimeoutMessage(n)&&(n=o.default.t(t.I18nKey.ERROR$BACKEND_REQUEST_TIMEOUT));let r=c.calculateToastDuration(n,4e3);s.zt((0,u.jsx)(m,{message:n}),{...h,duration:r})},_=e=>{let t=c.calculateToastDuration(e,5e3);s.zt.success((0,u.jsx)(`span`,{className:`[word-break:break-word] [overflow-wrap:anywhere]`,children:e}),{...f,duration:t})},v=(e,t,n)=>{let r=c.calculateToastDuration(`${e} ${t}`,5e3);s.zt.success((0,u.jsxs)(`span`,{className:`[word-break:break-word] [overflow-wrap:anywhere]`,children:[e,` `,(0,u.jsx)(`a`,{className:`underline hover:no-underline`,href:n,children:t})]}),{...f,duration:r})};exports.TOAST_OPTIONS=f,exports.displayErrorToast=g,exports.displaySuccessToast=_,exports.displaySuccessToastWithLink=v;
2
2
  //# sourceMappingURL=custom-toast-handlers.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"custom-toast-handlers.cjs","names":[],"sources":["../../src/utils/custom-toast-handlers.tsx"],"sourcesContent":["import React, { CSSProperties, ReactNode } from \"react\";\nimport { CircleX } from \"lucide-react\";\nimport toast, { ToastOptions } from \"react-hot-toast\";\nimport { OH_STATUS_ERROR_COLOR } from \"#/constants/status-colors\";\nimport { calculateToastDuration } from \"./toast-duration\";\nimport { cn } from \"#/utils/utils\";\nimport i18n from \"#/i18n\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport {\n isBackendRequestTimeoutMessage,\n isCorsOrNetworkErrorMessage,\n} from \"./user-facing-error\";\n\n// react-hot-toast accepts only CSSProperties via the style option — cannot use className\nconst TOAST_STYLE: CSSProperties = {\n background: \"var(--oh-color-tertiary)\",\n border: \"1px solid var(--oh-border-input)\",\n color: \"#fff\",\n borderRadius: \"var(--oh-radius)\",\n maxWidth: \"400px\",\n wordBreak: \"break-word\",\n overflowWrap: \"anywhere\",\n whiteSpace: \"pre-wrap\",\n};\n\nexport const TOAST_OPTIONS: ToastOptions = {\n position: \"top-right\",\n style: TOAST_STYLE,\n};\n\nconst ERROR_TOAST_STYLE: CSSProperties = {\n ...TOAST_STYLE,\n color: \"var(--oh-muted)\",\n};\n\n/** Icon + message row; center icon for single-line text, top-align when wrapped. */\nexport function ErrorToastContent({ message }: { message: ReactNode }) {\n const contentRef = React.useRef<HTMLSpanElement>(null);\n const [isMultiLine, setIsMultiLine] = React.useState(false);\n\n React.useLayoutEffect(() => {\n const content = contentRef.current;\n if (!content) {\n return undefined;\n }\n\n const updateIsMultiLine = () => {\n const lineHeight = Number.parseFloat(\n getComputedStyle(content).lineHeight,\n );\n if (!Number.isFinite(lineHeight) || lineHeight <= 0) {\n setIsMultiLine(false);\n return;\n }\n\n setIsMultiLine(content.getBoundingClientRect().height > lineHeight * 1.5);\n };\n\n updateIsMultiLine();\n\n const observer = new ResizeObserver(updateIsMultiLine);\n observer.observe(content);\n\n return () => observer.disconnect();\n }, [message]);\n\n return (\n <div\n className={cn(\n \"flex min-w-0 gap-2\",\n isMultiLine ? \"items-start\" : \"items-center\",\n )}\n >\n <CircleX\n aria-hidden\n className=\"h-4 w-4 shrink-0\"\n strokeWidth={2}\n style={{ color: OH_STATUS_ERROR_COLOR }}\n />\n <span\n ref={contentRef}\n className=\"min-w-0 flex-1 text-sm leading-5 [word-break:break-word] [overflow-wrap:anywhere]\"\n >\n {message}\n </span>\n </div>\n );\n}\n\nexport const ERROR_TOAST_OPTIONS: ToastOptions = {\n ...TOAST_OPTIONS,\n icon: null,\n style: ERROR_TOAST_STYLE,\n};\n\nexport const displayErrorToast = (error: string | null | undefined) => {\n let errorMessage = error || i18n.t(I18nKey.STATUS$ERROR);\n if (isCorsOrNetworkErrorMessage(errorMessage)) {\n errorMessage = i18n.t(I18nKey.ERROR$CORS_OR_NETWORK);\n } else if (isBackendRequestTimeoutMessage(errorMessage)) {\n errorMessage = i18n.t(I18nKey.ERROR$BACKEND_REQUEST_TIMEOUT);\n }\n const duration = calculateToastDuration(errorMessage, 4000);\n toast(<ErrorToastContent message={errorMessage} />, {\n ...ERROR_TOAST_OPTIONS,\n duration,\n });\n};\n\nexport const displaySuccessToast = (message: string) => {\n const duration = calculateToastDuration(message, 5000);\n toast.success(\n <span className=\"[word-break:break-word] [overflow-wrap:anywhere]\">\n {message}\n </span>,\n { ...TOAST_OPTIONS, duration },\n );\n};\n\nexport const displaySuccessToastWithLink = (\n message: string,\n linkLabel: string,\n href: string,\n) => {\n const duration = calculateToastDuration(`${message} ${linkLabel}`, 5000);\n toast.success(\n <span className=\"[word-break:break-word] [overflow-wrap:anywhere]\">\n {message}{\" \"}\n <a className=\"underline hover:no-underline\" href={href}>\n {linkLabel}\n </a>\n </span>,\n { ...TOAST_OPTIONS, duration },\n );\n};\n\n/**\n * Neutral, non-success notice — used when an action completed but the outcome\n * is qualified (e.g. a secret was saved but the active backend can't consume it\n * yet). Renders without the success checkmark so it doesn't read as \"all good\".\n */\nexport const displayWarningToast = (message: string) => {\n const duration = calculateToastDuration(message, 6000);\n toast(\n <span className=\"[word-break:break-word] [overflow-wrap:anywhere]\">\n {message}\n </span>,\n { ...TOAST_OPTIONS, icon: \"⚠️\", duration },\n );\n};\n"],"mappings":"kdAcA,IAAM,EAA6B,CACjC,WAAY,2BACZ,OAAQ,mCACR,MAAO,OACP,aAAc,mBACd,SAAU,QACV,UAAW,aACX,aAAc,WACd,WAAY,UACd,EAEa,EAA8B,CACzC,SAAU,YACV,MAAO,CACT,EAEM,EAAmC,CACvC,GAAG,EACH,MAAO,iBACT,EAGA,SAAgB,EAAkB,CAAE,WAAmC,CACrE,IAAM,EAAa,EAAA,QAAM,OAAwB,IAAI,EAC/C,CAAC,EAAa,GAAkB,EAAA,QAAM,SAAS,EAAK,EA4B1D,OA1BA,EAAA,QAAM,oBAAsB,CAC1B,IAAM,EAAU,EAAW,QAC3B,GAAI,CAAC,EACH,OAGF,IAAM,MAA0B,CAC9B,IAAM,EAAa,OAAO,WACxB,iBAAiB,CAAO,EAAE,UAC5B,EACA,GAAI,CAAC,OAAO,SAAS,CAAU,GAAK,GAAc,EAAG,CACnD,EAAe,EAAK,EACpB,MACF,CAEA,EAAe,EAAQ,sBAAsB,EAAE,OAAS,EAAa,GAAG,CAC1E,EAEA,EAAkB,EAElB,IAAM,EAAW,IAAI,eAAe,CAAiB,EAGrD,OAFA,EAAS,QAAQ,CAAO,MAEX,EAAS,WAAW,CACnC,EAAG,CAAC,CAAO,CAAC,GAGV,EAAA,EAAA,MAAC,MAAD,CACE,UAAW,EAAA,GACT,qBACA,EAAc,cAAgB,cAChC,WAJF,EAME,EAAA,EAAA,KAAC,EAAA,QAAD,CACE,cAAA,GACA,UAAU,mBACV,YAAa,EACb,MAAO,CAAE,MAAO,EAAA,qBAAsB,CACvC,CAAA,GACD,EAAA,EAAA,KAAC,OAAD,CACE,IAAK,EACL,UAAU,6FAET,CACG,CAAA,CACH,GAET,CAEA,IAAa,EAAoC,CAC/C,GAAG,EACH,KAAM,KACN,MAAO,CACT,EAEa,EAAqB,GAAqC,CACrE,IAAI,EAAe,GAAS,EAAA,QAAK,EAAE,EAAA,QAAQ,YAAY,EACnD,EAAA,4BAA4B,CAAY,EAC1C,EAAe,EAAA,QAAK,EAAE,EAAA,QAAQ,qBAAqB,EAC1C,EAAA,+BAA+B,CAAY,IACpD,EAAe,EAAA,QAAK,EAAE,EAAA,QAAQ,6BAA6B,GAE7D,IAAM,EAAW,EAAA,uBAAuB,EAAc,GAAI,EAC1D,EAAA,IAAM,EAAA,EAAA,KAAC,EAAD,CAAmB,QAAS,CAAe,CAAA,EAAG,CAClD,GAAG,EACH,UACF,CAAC,CACH,EAEa,EAAuB,GAAoB,CACtD,IAAM,EAAW,EAAA,uBAAuB,EAAS,GAAI,EACrD,EAAA,GAAM,SACJ,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,4DACb,CACG,CAAA,EACN,CAAE,GAAG,EAAe,UAAS,CAC/B,CACF"}
1
+ {"version":3,"file":"custom-toast-handlers.cjs","names":[],"sources":["../../src/utils/custom-toast-handlers.tsx"],"sourcesContent":["import React, { CSSProperties, ReactNode } from \"react\";\nimport { CircleX } from \"lucide-react\";\nimport toast, { ToastOptions } from \"react-hot-toast\";\nimport { OH_STATUS_ERROR_COLOR } from \"#/constants/status-colors\";\nimport { calculateToastDuration } from \"./toast-duration\";\nimport { cn } from \"#/utils/utils\";\nimport i18n from \"#/i18n\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport {\n isBackendRequestTimeoutMessage,\n isCorsOrNetworkErrorMessage,\n} from \"./user-facing-error\";\n\n// react-hot-toast accepts only CSSProperties via the style option — cannot use className\nconst TOAST_STYLE: CSSProperties = {\n background: \"var(--oh-color-tertiary)\",\n border: \"1px solid var(--oh-border-input)\",\n color: \"#fff\",\n borderRadius: \"var(--oh-radius)\",\n maxWidth: \"400px\",\n wordBreak: \"break-word\",\n overflowWrap: \"anywhere\",\n whiteSpace: \"pre-wrap\",\n};\n\nexport const TOAST_OPTIONS: ToastOptions = {\n position: \"top-right\",\n style: TOAST_STYLE,\n};\n\nconst ERROR_TOAST_STYLE: CSSProperties = {\n ...TOAST_STYLE,\n color: \"var(--oh-muted)\",\n};\n\n/** Icon + message row; center icon for single-line text, top-align when wrapped. */\nexport function ErrorToastContent({ message }: { message: ReactNode }) {\n const contentRef = React.useRef<HTMLSpanElement>(null);\n const [isMultiLine, setIsMultiLine] = React.useState(false);\n\n React.useLayoutEffect(() => {\n const content = contentRef.current;\n if (!content) {\n return undefined;\n }\n\n const updateIsMultiLine = () => {\n const lineHeight = Number.parseFloat(\n getComputedStyle(content).lineHeight,\n );\n if (!Number.isFinite(lineHeight) || lineHeight <= 0) {\n setIsMultiLine(false);\n return;\n }\n\n setIsMultiLine(content.getBoundingClientRect().height > lineHeight * 1.5);\n };\n\n updateIsMultiLine();\n\n const observer = new ResizeObserver(updateIsMultiLine);\n observer.observe(content);\n\n return () => observer.disconnect();\n }, [message]);\n\n return (\n <div\n className={cn(\n \"flex min-w-0 gap-2\",\n isMultiLine ? \"items-start\" : \"items-center\",\n )}\n >\n <CircleX\n aria-hidden\n className=\"h-4 w-4 shrink-0\"\n strokeWidth={2}\n style={{ color: OH_STATUS_ERROR_COLOR }}\n />\n <span\n ref={contentRef}\n className=\"min-w-0 flex-1 text-sm leading-5 [word-break:break-word] [overflow-wrap:anywhere]\"\n >\n {message}\n </span>\n </div>\n );\n}\n\nexport const ERROR_TOAST_OPTIONS: ToastOptions = {\n ...TOAST_OPTIONS,\n icon: null,\n style: ERROR_TOAST_STYLE,\n};\n\nexport const displayErrorToast = (error: string | null | undefined) => {\n let errorMessage = error || i18n.t(I18nKey.STATUS$ERROR);\n if (isCorsOrNetworkErrorMessage(errorMessage)) {\n errorMessage = i18n.t(I18nKey.ERROR$CORS_OR_NETWORK);\n } else if (isBackendRequestTimeoutMessage(errorMessage)) {\n errorMessage = i18n.t(I18nKey.ERROR$BACKEND_REQUEST_TIMEOUT);\n }\n const duration = calculateToastDuration(errorMessage, 4000);\n toast(<ErrorToastContent message={errorMessage} />, {\n ...ERROR_TOAST_OPTIONS,\n duration,\n });\n};\n\nexport const displaySuccessToast = (message: string) => {\n const duration = calculateToastDuration(message, 5000);\n toast.success(\n <span className=\"[word-break:break-word] [overflow-wrap:anywhere]\">\n {message}\n </span>,\n { ...TOAST_OPTIONS, duration },\n );\n};\n\nexport const displaySuccessToastWithLink = (\n message: string,\n linkLabel: string,\n href: string,\n) => {\n const duration = calculateToastDuration(`${message} ${linkLabel}`, 5000);\n toast.success(\n <span className=\"[word-break:break-word] [overflow-wrap:anywhere]\">\n {message}{\" \"}\n <a className=\"underline hover:no-underline\" href={href}>\n {linkLabel}\n </a>\n </span>,\n { ...TOAST_OPTIONS, duration },\n );\n};\n\n/**\n * Neutral, non-success notice — used when an action completed but the outcome\n * is qualified (e.g. a secret was saved but the active backend can't consume it\n * yet). Renders without the success checkmark so it doesn't read as \"all good\".\n */\nexport const displayWarningToast = (message: string) => {\n const duration = calculateToastDuration(message, 6000);\n toast(\n <span className=\"[word-break:break-word] [overflow-wrap:anywhere]\">\n {message}\n </span>,\n { ...TOAST_OPTIONS, icon: \"⚠️\", duration },\n );\n};\n"],"mappings":"kdAcA,IAAM,EAA6B,CACjC,WAAY,2BACZ,OAAQ,mCACR,MAAO,OACP,aAAc,mBACd,SAAU,QACV,UAAW,aACX,aAAc,WACd,WAAY,UACd,EAEa,EAA8B,CACzC,SAAU,YACV,MAAO,CACT,EAEM,EAAmC,CACvC,GAAG,EACH,MAAO,iBACT,EAGA,SAAgB,EAAkB,CAAE,WAAmC,CACrE,IAAM,EAAa,EAAA,QAAM,OAAwB,IAAI,EAC/C,CAAC,EAAa,GAAkB,EAAA,QAAM,SAAS,EAAK,EA4B1D,OA1BA,EAAA,QAAM,oBAAsB,CAC1B,IAAM,EAAU,EAAW,QAC3B,GAAI,CAAC,EACH,OAGF,IAAM,MAA0B,CAC9B,IAAM,EAAa,OAAO,WACxB,iBAAiB,CAAO,EAAE,UAC5B,EACA,GAAI,CAAC,OAAO,SAAS,CAAU,GAAK,GAAc,EAAG,CACnD,EAAe,EAAK,EACpB,MACF,CAEA,EAAe,EAAQ,sBAAsB,EAAE,OAAS,EAAa,GAAG,CAC1E,EAEA,EAAkB,EAElB,IAAM,EAAW,IAAI,eAAe,CAAiB,EAGrD,OAFA,EAAS,QAAQ,CAAO,MAEX,EAAS,WAAW,CACnC,EAAG,CAAC,CAAO,CAAC,GAGV,EAAA,EAAA,MAAC,MAAD,CACE,UAAW,EAAA,GACT,qBACA,EAAc,cAAgB,cAChC,WAJF,EAME,EAAA,EAAA,KAAC,EAAA,QAAD,CACE,cAAA,GACA,UAAU,mBACV,YAAa,EACb,MAAO,CAAE,MAAO,EAAA,qBAAsB,CACvC,CAAA,GACD,EAAA,EAAA,KAAC,OAAD,CACE,IAAK,EACL,UAAU,6FAET,CACG,CAAA,CACH,GAET,CAEA,IAAa,EAAoC,CAC/C,GAAG,EACH,KAAM,KACN,MAAO,CACT,EAEa,EAAqB,GAAqC,CACrE,IAAI,EAAe,GAAS,EAAA,QAAK,EAAE,EAAA,QAAQ,YAAY,EACnD,EAAA,4BAA4B,CAAY,EAC1C,EAAe,EAAA,QAAK,EAAE,EAAA,QAAQ,qBAAqB,EAC1C,EAAA,+BAA+B,CAAY,IACpD,EAAe,EAAA,QAAK,EAAE,EAAA,QAAQ,6BAA6B,GAE7D,IAAM,EAAW,EAAA,uBAAuB,EAAc,GAAI,EAC1D,EAAA,IAAM,EAAA,EAAA,KAAC,EAAD,CAAmB,QAAS,CAAe,CAAA,EAAG,CAClD,GAAG,EACH,UACF,CAAC,CACH,EAEa,EAAuB,GAAoB,CACtD,IAAM,EAAW,EAAA,uBAAuB,EAAS,GAAI,EACrD,EAAA,GAAM,SACJ,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,4DACb,CACG,CAAA,EACN,CAAE,GAAG,EAAe,UAAS,CAC/B,CACF,EAEa,GACX,EACA,EACA,IACG,CACH,IAAM,EAAW,EAAA,uBAAuB,GAAG,EAAQ,GAAG,IAAa,GAAI,EACvE,EAAA,GAAM,SACJ,EAAA,EAAA,MAAC,OAAD,CAAM,UAAU,4DAAhB,CACG,EAAS,KACV,EAAA,EAAA,KAAC,IAAD,CAAG,UAAU,+BAAqC,gBAC/C,CACA,CAAA,CACC,IACN,CAAE,GAAG,EAAe,UAAS,CAC/B,CACF"}
@@ -1,10 +1,10 @@
1
- import { ReactNode } from "react";
1
+ import React, { ReactNode } from "react";
2
2
  import { ToastOptions } from "react-hot-toast";
3
3
  export declare const TOAST_OPTIONS: ToastOptions;
4
4
  /** Icon + message row; center icon for single-line text, top-align when wrapped. */
5
5
  export declare function ErrorToastContent({ message }: {
6
6
  message: ReactNode;
7
- }): import("react/jsx-runtime").JSX.Element;
7
+ }): React.JSX.Element;
8
8
  export declare const ERROR_TOAST_OPTIONS: ToastOptions;
9
9
  export declare const displayErrorToast: (error: string | null | undefined) => void;
10
10
  export declare const displaySuccessToast: (message: string) => void;
@@ -76,8 +76,25 @@ var g = {
76
76
  ...p,
77
77
  duration: t
78
78
  });
79
+ }, y = (e, t, n) => {
80
+ let r = c(`${e} ${t}`, 5e3);
81
+ s.success(/* @__PURE__ */ d("span", {
82
+ className: "[word-break:break-word] [overflow-wrap:anywhere]",
83
+ children: [
84
+ e,
85
+ " ",
86
+ /* @__PURE__ */ u("a", {
87
+ className: "underline hover:no-underline",
88
+ href: n,
89
+ children: t
90
+ })
91
+ ]
92
+ }), {
93
+ ...p,
94
+ duration: r
95
+ });
79
96
  };
80
97
  //#endregion
81
- export { p as TOAST_OPTIONS, _ as displayErrorToast, v as displaySuccessToast };
98
+ export { p as TOAST_OPTIONS, _ as displayErrorToast, v as displaySuccessToast, y as displaySuccessToastWithLink };
82
99
 
83
100
  //# sourceMappingURL=custom-toast-handlers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"custom-toast-handlers.js","names":[],"sources":["../../src/utils/custom-toast-handlers.tsx"],"sourcesContent":["import React, { CSSProperties, ReactNode } from \"react\";\nimport { CircleX } from \"lucide-react\";\nimport toast, { ToastOptions } from \"react-hot-toast\";\nimport { OH_STATUS_ERROR_COLOR } from \"#/constants/status-colors\";\nimport { calculateToastDuration } from \"./toast-duration\";\nimport { cn } from \"#/utils/utils\";\nimport i18n from \"#/i18n\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport {\n isBackendRequestTimeoutMessage,\n isCorsOrNetworkErrorMessage,\n} from \"./user-facing-error\";\n\n// react-hot-toast accepts only CSSProperties via the style option — cannot use className\nconst TOAST_STYLE: CSSProperties = {\n background: \"var(--oh-color-tertiary)\",\n border: \"1px solid var(--oh-border-input)\",\n color: \"#fff\",\n borderRadius: \"var(--oh-radius)\",\n maxWidth: \"400px\",\n wordBreak: \"break-word\",\n overflowWrap: \"anywhere\",\n whiteSpace: \"pre-wrap\",\n};\n\nexport const TOAST_OPTIONS: ToastOptions = {\n position: \"top-right\",\n style: TOAST_STYLE,\n};\n\nconst ERROR_TOAST_STYLE: CSSProperties = {\n ...TOAST_STYLE,\n color: \"var(--oh-muted)\",\n};\n\n/** Icon + message row; center icon for single-line text, top-align when wrapped. */\nexport function ErrorToastContent({ message }: { message: ReactNode }) {\n const contentRef = React.useRef<HTMLSpanElement>(null);\n const [isMultiLine, setIsMultiLine] = React.useState(false);\n\n React.useLayoutEffect(() => {\n const content = contentRef.current;\n if (!content) {\n return undefined;\n }\n\n const updateIsMultiLine = () => {\n const lineHeight = Number.parseFloat(\n getComputedStyle(content).lineHeight,\n );\n if (!Number.isFinite(lineHeight) || lineHeight <= 0) {\n setIsMultiLine(false);\n return;\n }\n\n setIsMultiLine(content.getBoundingClientRect().height > lineHeight * 1.5);\n };\n\n updateIsMultiLine();\n\n const observer = new ResizeObserver(updateIsMultiLine);\n observer.observe(content);\n\n return () => observer.disconnect();\n }, [message]);\n\n return (\n <div\n className={cn(\n \"flex min-w-0 gap-2\",\n isMultiLine ? \"items-start\" : \"items-center\",\n )}\n >\n <CircleX\n aria-hidden\n className=\"h-4 w-4 shrink-0\"\n strokeWidth={2}\n style={{ color: OH_STATUS_ERROR_COLOR }}\n />\n <span\n ref={contentRef}\n className=\"min-w-0 flex-1 text-sm leading-5 [word-break:break-word] [overflow-wrap:anywhere]\"\n >\n {message}\n </span>\n </div>\n );\n}\n\nexport const ERROR_TOAST_OPTIONS: ToastOptions = {\n ...TOAST_OPTIONS,\n icon: null,\n style: ERROR_TOAST_STYLE,\n};\n\nexport const displayErrorToast = (error: string | null | undefined) => {\n let errorMessage = error || i18n.t(I18nKey.STATUS$ERROR);\n if (isCorsOrNetworkErrorMessage(errorMessage)) {\n errorMessage = i18n.t(I18nKey.ERROR$CORS_OR_NETWORK);\n } else if (isBackendRequestTimeoutMessage(errorMessage)) {\n errorMessage = i18n.t(I18nKey.ERROR$BACKEND_REQUEST_TIMEOUT);\n }\n const duration = calculateToastDuration(errorMessage, 4000);\n toast(<ErrorToastContent message={errorMessage} />, {\n ...ERROR_TOAST_OPTIONS,\n duration,\n });\n};\n\nexport const displaySuccessToast = (message: string) => {\n const duration = calculateToastDuration(message, 5000);\n toast.success(\n <span className=\"[word-break:break-word] [overflow-wrap:anywhere]\">\n {message}\n </span>,\n { ...TOAST_OPTIONS, duration },\n );\n};\n\nexport const displaySuccessToastWithLink = (\n message: string,\n linkLabel: string,\n href: string,\n) => {\n const duration = calculateToastDuration(`${message} ${linkLabel}`, 5000);\n toast.success(\n <span className=\"[word-break:break-word] [overflow-wrap:anywhere]\">\n {message}{\" \"}\n <a className=\"underline hover:no-underline\" href={href}>\n {linkLabel}\n </a>\n </span>,\n { ...TOAST_OPTIONS, duration },\n );\n};\n\n/**\n * Neutral, non-success notice — used when an action completed but the outcome\n * is qualified (e.g. a secret was saved but the active backend can't consume it\n * yet). Renders without the success checkmark so it doesn't read as \"all good\".\n */\nexport const displayWarningToast = (message: string) => {\n const duration = calculateToastDuration(message, 6000);\n toast(\n <span className=\"[word-break:break-word] [overflow-wrap:anywhere]\">\n {message}\n </span>,\n { ...TOAST_OPTIONS, icon: \"⚠️\", duration },\n );\n};\n"],"mappings":";;;;;;;;;;;AAcA,IAAM,IAA6B;CACjC,YAAY;CACZ,QAAQ;CACR,OAAO;CACP,cAAc;CACd,UAAU;CACV,WAAW;CACX,cAAc;CACd,YAAY;AACd,GAEa,IAA8B;CACzC,UAAU;CACV,OAAO;AACT,GAEM,IAAmC;CACvC,GAAG;CACH,OAAO;AACT;AAGA,SAAgB,EAAkB,EAAE,cAAmC;CACrE,IAAM,IAAa,EAAM,OAAwB,IAAI,GAC/C,CAAC,GAAa,KAAkB,EAAM,SAAS,EAAK;CA4B1D,OA1BA,EAAM,sBAAsB;EAC1B,IAAM,IAAU,EAAW;EAC3B,IAAI,CAAC,GACH;EAGF,IAAM,UAA0B;GAC9B,IAAM,IAAa,OAAO,WACxB,iBAAiB,CAAO,EAAE,UAC5B;GACA,IAAI,CAAC,OAAO,SAAS,CAAU,KAAK,KAAc,GAAG;IACnD,EAAe,EAAK;IACpB;GACF;GAEA,EAAe,EAAQ,sBAAsB,EAAE,SAAS,IAAa,GAAG;EAC1E;EAEA,EAAkB;EAElB,IAAM,IAAW,IAAI,eAAe,CAAiB;EAGrD,OAFA,EAAS,QAAQ,CAAO,SAEX,EAAS,WAAW;CACnC,GAAG,CAAC,CAAO,CAAC,GAGV,kBAAC,OAAD;EACE,WAAW,EACT,sBACA,IAAc,gBAAgB,cAChC;YAJF,CAME,kBAAC,GAAD;GACE,eAAA;GACA,WAAU;GACV,aAAa;GACb,OAAO,EAAE,OAAO,EAAsB;EACvC,CAAA,GACD,kBAAC,QAAD;GACE,KAAK;GACL,WAAU;aAET;EACG,CAAA,CACH;;AAET;AAEA,IAAa,IAAoC;CAC/C,GAAG;CACH,MAAM;CACN,OAAO;AACT,GAEa,KAAqB,MAAqC;CACrE,IAAI,IAAe,KAAS,EAAK,EAAE,EAAQ,YAAY;CACvD,AAAI,EAA4B,CAAY,IAC1C,IAAe,EAAK,EAAE,EAAQ,qBAAqB,IAC1C,EAA+B,CAAY,MACpD,IAAe,EAAK,EAAE,EAAQ,6BAA6B;CAE7D,IAAM,IAAW,EAAuB,GAAc,GAAI;CAC1D,EAAM,kBAAC,GAAD,EAAmB,SAAS,EAAe,CAAA,GAAG;EAClD,GAAG;EACH;CACF,CAAC;AACH,GAEa,KAAuB,MAAoB;CACtD,IAAM,IAAW,EAAuB,GAAS,GAAI;CACrD,EAAM,QACJ,kBAAC,QAAD;EAAM,WAAU;YACb;CACG,CAAA,GACN;EAAE,GAAG;EAAe;CAAS,CAC/B;AACF"}
1
+ {"version":3,"file":"custom-toast-handlers.js","names":[],"sources":["../../src/utils/custom-toast-handlers.tsx"],"sourcesContent":["import React, { CSSProperties, ReactNode } from \"react\";\nimport { CircleX } from \"lucide-react\";\nimport toast, { ToastOptions } from \"react-hot-toast\";\nimport { OH_STATUS_ERROR_COLOR } from \"#/constants/status-colors\";\nimport { calculateToastDuration } from \"./toast-duration\";\nimport { cn } from \"#/utils/utils\";\nimport i18n from \"#/i18n\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport {\n isBackendRequestTimeoutMessage,\n isCorsOrNetworkErrorMessage,\n} from \"./user-facing-error\";\n\n// react-hot-toast accepts only CSSProperties via the style option — cannot use className\nconst TOAST_STYLE: CSSProperties = {\n background: \"var(--oh-color-tertiary)\",\n border: \"1px solid var(--oh-border-input)\",\n color: \"#fff\",\n borderRadius: \"var(--oh-radius)\",\n maxWidth: \"400px\",\n wordBreak: \"break-word\",\n overflowWrap: \"anywhere\",\n whiteSpace: \"pre-wrap\",\n};\n\nexport const TOAST_OPTIONS: ToastOptions = {\n position: \"top-right\",\n style: TOAST_STYLE,\n};\n\nconst ERROR_TOAST_STYLE: CSSProperties = {\n ...TOAST_STYLE,\n color: \"var(--oh-muted)\",\n};\n\n/** Icon + message row; center icon for single-line text, top-align when wrapped. */\nexport function ErrorToastContent({ message }: { message: ReactNode }) {\n const contentRef = React.useRef<HTMLSpanElement>(null);\n const [isMultiLine, setIsMultiLine] = React.useState(false);\n\n React.useLayoutEffect(() => {\n const content = contentRef.current;\n if (!content) {\n return undefined;\n }\n\n const updateIsMultiLine = () => {\n const lineHeight = Number.parseFloat(\n getComputedStyle(content).lineHeight,\n );\n if (!Number.isFinite(lineHeight) || lineHeight <= 0) {\n setIsMultiLine(false);\n return;\n }\n\n setIsMultiLine(content.getBoundingClientRect().height > lineHeight * 1.5);\n };\n\n updateIsMultiLine();\n\n const observer = new ResizeObserver(updateIsMultiLine);\n observer.observe(content);\n\n return () => observer.disconnect();\n }, [message]);\n\n return (\n <div\n className={cn(\n \"flex min-w-0 gap-2\",\n isMultiLine ? \"items-start\" : \"items-center\",\n )}\n >\n <CircleX\n aria-hidden\n className=\"h-4 w-4 shrink-0\"\n strokeWidth={2}\n style={{ color: OH_STATUS_ERROR_COLOR }}\n />\n <span\n ref={contentRef}\n className=\"min-w-0 flex-1 text-sm leading-5 [word-break:break-word] [overflow-wrap:anywhere]\"\n >\n {message}\n </span>\n </div>\n );\n}\n\nexport const ERROR_TOAST_OPTIONS: ToastOptions = {\n ...TOAST_OPTIONS,\n icon: null,\n style: ERROR_TOAST_STYLE,\n};\n\nexport const displayErrorToast = (error: string | null | undefined) => {\n let errorMessage = error || i18n.t(I18nKey.STATUS$ERROR);\n if (isCorsOrNetworkErrorMessage(errorMessage)) {\n errorMessage = i18n.t(I18nKey.ERROR$CORS_OR_NETWORK);\n } else if (isBackendRequestTimeoutMessage(errorMessage)) {\n errorMessage = i18n.t(I18nKey.ERROR$BACKEND_REQUEST_TIMEOUT);\n }\n const duration = calculateToastDuration(errorMessage, 4000);\n toast(<ErrorToastContent message={errorMessage} />, {\n ...ERROR_TOAST_OPTIONS,\n duration,\n });\n};\n\nexport const displaySuccessToast = (message: string) => {\n const duration = calculateToastDuration(message, 5000);\n toast.success(\n <span className=\"[word-break:break-word] [overflow-wrap:anywhere]\">\n {message}\n </span>,\n { ...TOAST_OPTIONS, duration },\n );\n};\n\nexport const displaySuccessToastWithLink = (\n message: string,\n linkLabel: string,\n href: string,\n) => {\n const duration = calculateToastDuration(`${message} ${linkLabel}`, 5000);\n toast.success(\n <span className=\"[word-break:break-word] [overflow-wrap:anywhere]\">\n {message}{\" \"}\n <a className=\"underline hover:no-underline\" href={href}>\n {linkLabel}\n </a>\n </span>,\n { ...TOAST_OPTIONS, duration },\n );\n};\n\n/**\n * Neutral, non-success notice — used when an action completed but the outcome\n * is qualified (e.g. a secret was saved but the active backend can't consume it\n * yet). Renders without the success checkmark so it doesn't read as \"all good\".\n */\nexport const displayWarningToast = (message: string) => {\n const duration = calculateToastDuration(message, 6000);\n toast(\n <span className=\"[word-break:break-word] [overflow-wrap:anywhere]\">\n {message}\n </span>,\n { ...TOAST_OPTIONS, icon: \"⚠️\", duration },\n );\n};\n"],"mappings":";;;;;;;;;;;AAcA,IAAM,IAA6B;CACjC,YAAY;CACZ,QAAQ;CACR,OAAO;CACP,cAAc;CACd,UAAU;CACV,WAAW;CACX,cAAc;CACd,YAAY;AACd,GAEa,IAA8B;CACzC,UAAU;CACV,OAAO;AACT,GAEM,IAAmC;CACvC,GAAG;CACH,OAAO;AACT;AAGA,SAAgB,EAAkB,EAAE,cAAmC;CACrE,IAAM,IAAa,EAAM,OAAwB,IAAI,GAC/C,CAAC,GAAa,KAAkB,EAAM,SAAS,EAAK;CA4B1D,OA1BA,EAAM,sBAAsB;EAC1B,IAAM,IAAU,EAAW;EAC3B,IAAI,CAAC,GACH;EAGF,IAAM,UAA0B;GAC9B,IAAM,IAAa,OAAO,WACxB,iBAAiB,CAAO,EAAE,UAC5B;GACA,IAAI,CAAC,OAAO,SAAS,CAAU,KAAK,KAAc,GAAG;IACnD,EAAe,EAAK;IACpB;GACF;GAEA,EAAe,EAAQ,sBAAsB,EAAE,SAAS,IAAa,GAAG;EAC1E;EAEA,EAAkB;EAElB,IAAM,IAAW,IAAI,eAAe,CAAiB;EAGrD,OAFA,EAAS,QAAQ,CAAO,SAEX,EAAS,WAAW;CACnC,GAAG,CAAC,CAAO,CAAC,GAGV,kBAAC,OAAD;EACE,WAAW,EACT,sBACA,IAAc,gBAAgB,cAChC;YAJF,CAME,kBAAC,GAAD;GACE,eAAA;GACA,WAAU;GACV,aAAa;GACb,OAAO,EAAE,OAAO,EAAsB;EACvC,CAAA,GACD,kBAAC,QAAD;GACE,KAAK;GACL,WAAU;aAET;EACG,CAAA,CACH;;AAET;AAEA,IAAa,IAAoC;CAC/C,GAAG;CACH,MAAM;CACN,OAAO;AACT,GAEa,KAAqB,MAAqC;CACrE,IAAI,IAAe,KAAS,EAAK,EAAE,EAAQ,YAAY;CACvD,AAAI,EAA4B,CAAY,IAC1C,IAAe,EAAK,EAAE,EAAQ,qBAAqB,IAC1C,EAA+B,CAAY,MACpD,IAAe,EAAK,EAAE,EAAQ,6BAA6B;CAE7D,IAAM,IAAW,EAAuB,GAAc,GAAI;CAC1D,EAAM,kBAAC,GAAD,EAAmB,SAAS,EAAe,CAAA,GAAG;EAClD,GAAG;EACH;CACF,CAAC;AACH,GAEa,KAAuB,MAAoB;CACtD,IAAM,IAAW,EAAuB,GAAS,GAAI;CACrD,EAAM,QACJ,kBAAC,QAAD;EAAM,WAAU;YACb;CACG,CAAA,GACN;EAAE,GAAG;EAAe;CAAS,CAC/B;AACF,GAEa,KACX,GACA,GACA,MACG;CACH,IAAM,IAAW,EAAuB,GAAG,EAAQ,GAAG,KAAa,GAAI;CACvE,EAAM,QACJ,kBAAC,QAAD;EAAM,WAAU;YAAhB;GACG;GAAS;GACV,kBAAC,KAAD;IAAG,WAAU;IAAqC;cAC/C;GACA,CAAA;EACC;KACN;EAAE,GAAG;EAAe;CAAS,CAC/B;AACF"}
@@ -0,0 +1,3 @@
1
+ import { I18nKey } from "#/i18n/declaration";
2
+ export declare function formatDate(dateStr: string, locale: string): string;
3
+ export declare function formatRelativeTime(dateStr: string, locale: string, t: (key: I18nKey, options?: Record<string, unknown>) => string): string;
@@ -1,2 +1,2 @@
1
- require("../_virtual/_rolldown/runtime.cjs");const e=require("./mcp-server-name.cjs");var t={sse_servers:[],stdio_servers:[],shttp_servers:[]},n=`**********`;function r(e,t){return RegExp(`^${t}(_\\d+)?$`).test(e)?void 0:e}function i(e){return!!e&&typeof e==`object`&&!Array.isArray(e)}function a(e){if(!i(e))return null;let t=e.mcpServers;return i(t)&&!(`url`in t)&&!(`command`in t)?t:e}function o(e){if(!i(e))return;let t=Object.entries(e).filter(e=>typeof e[1]==`string`);return t.length>0?Object.fromEntries(t):void 0}function s(e){return e===`**********`?!0:Array.isArray(e)?e.some(s):i(e)?Object.values(e).some(s):!1}function c(e){if(!i(e))return;let t={};return i(e.tokens)&&(t.tokens=e.tokens),i(e.client_info)&&(t.client_info=e.client_info),(typeof e.token_expires_at==`number`||e.token_expires_at===null)&&(t.token_expires_at=e.token_expires_at),Object.keys(t).length>0?t:void 0}function l(e){if(i(e))switch(e.strategy){case`none`:return{strategy:`none`};case`api_key`:return typeof e.value==`string`?{strategy:`api_key`,value:e.value,...typeof e.header_name==`string`&&{header_name:e.header_name}}:void 0;case`bearer`:return typeof e.value==`string`?{strategy:`bearer`,value:e.value}:void 0;case`basic`:return typeof e.username!=`string`||typeof e.password!=`string`?void 0:{strategy:`basic`,username:e.username,password:e.password};case`header`:{let t=o(e.headers);return t?{strategy:`header`,headers:t}:void 0}case`oauth2`:{let t=_(e.authentication),n=c(e.state);return{strategy:`oauth2`,...t&&{authentication:t},...n&&{state:n}}}default:return}}function u(e){return l(e.auth)}function d(e){let t={};return e.auth&&!s(e.auth)&&(t.auth=e.auth),e.headers&&Object.keys(e.headers).length>0&&(t.headers=e.headers),t}function f(e){return e.enabled===!1?{enabled:!1}:{}}function p(e){return{...e.name&&{name:e.name},url:e.url,...e.headers&&{headers:e.headers},...e.auth&&{auth:e.auth},...f(e)}}function m(e){return p(e)}function h(e){return{...p(e),...e.timeout!==void 0&&{timeout:e.timeout}}}function g(e){return{name:e.name,command:e.command,...e.args&&{args:e.args},...e.env&&{env:e.env},...f(e)}}function _(e){if(!e||typeof e!=`object`)return;let t=e;if(t.type!==`oauth`)return;let n={type:`oauth`};return(t.client_auth_method===`none`||t.client_auth_method===`client_secret_post`||t.client_auth_method===`client_secret_basic`||t.client_auth_method===`private_key_jwt`)&&(n.client_auth_method=t.client_auth_method),(typeof t.scopes==`string`||Array.isArray(t.scopes)&&t.scopes.every(e=>typeof e==`string`))&&(n.scopes=t.scopes),typeof t.client_name==`string`&&(n.client_name=t.client_name),typeof t.client_metadata_url==`string`&&(n.client_metadata_url=t.client_metadata_url),typeof t.client_id==`string`&&(n.client_id=t.client_id),typeof t.client_secret==`string`&&(n.client_secret=t.client_secret),t.additional_client_metadata&&typeof t.additional_client_metadata==`object`&&!Array.isArray(t.additional_client_metadata)&&(n.additional_client_metadata=t.additional_client_metadata),n}function v(e){let n=a(e);if(!n)return{...t};let s=[],c=[],l=[];for(let[e,t]of Object.entries(n)){if(!i(t))continue;let n=t.url,a=t.enabled===!1;if(n){let i=t.transport,c=u(t),d=o(t.headers);if(i===`sse`){let t=r(e,`sse`),i={url:n};t&&(i.name=t),c&&(i.auth=c),d&&(i.headers=d),a&&(i.enabled=!1),s.push(i)}else{let i=r(e,`shttp`),o={url:n};i&&(o.name=i),t.timeout!=null&&(o.timeout=t.timeout),c&&(o.auth=c),d&&(o.headers=d),a&&(o.enabled=!1),l.push(o)}}else{if(typeof t.command!=`string`)continue;let n={name:e,command:t.command};t.args&&(n.args=t.args),t.env&&(n.env=t.env),a&&(n.enabled=!1),c.push(n)}}return{sse_servers:s,stdio_servers:c,shttp_servers:l}}function y(t){let n={},r=t=>{let r=e.toMcpServerName(t);if(!(r in n))return r;let i=1;for(;`${r}_${i}`in n;)i+=1;return`${r}_${i}`};for(let e of t.sse_servers){let t={},i;typeof e==`string`?t.url=e:(i=e.name,t.url=e.url,Object.assign(t,d(e),f(e))),t.transport=`sse`,n[r(i||`sse`)]=t}for(let e of t.shttp_servers){let t={transport:`http`},i;typeof e==`string`?t.url=e:(i=e.name,t.url=e.url,Object.assign(t,d(e),f(e)),e.timeout!=null&&(t.timeout=e.timeout)),n[r(i||`shttp`)]=t}for(let e of t.stdio_servers){let t={command:e.command};e.args&&(t.args=e.args),e.env&&(t.env=e.env),Object.assign(t,f(e)),n[r(e.name||`stdio`)]=t}return Object.keys(n).length>0?n:null}exports.REDACTED_MCP_SECRET_VALUE=n,exports.getSdkMcpServerMap=a,exports.hasRedactedMcpSecretLeaf=s,exports.parseMcpConfig=v,exports.stringRecord=o,exports.toMcpShttpServer=h,exports.toMcpSseServer=m,exports.toMcpStdioServer=g,exports.toSdkMcpConfig=y;
1
+ require("../_virtual/_rolldown/runtime.cjs");const e=require("../types/mcp-auth.cjs"),t=require("./mcp-server-name.cjs");var n=`**********`,r=e=>!!e&&typeof e==`object`&&!Array.isArray(e);function i(e){if(!r(e))return null;let t=e.mcpServers;return r(t)&&!(`url`in t)&&!(`command`in t)?t:e}function a(e){if(!r(e))return;let t=Object.entries(e).filter(e=>typeof e[1]==`string`);return t.length>0?Object.fromEntries(t):void 0}function o(e){return e===`**********`?!0:Array.isArray(e)?e.some(o):r(e)?Object.values(e).some(o):!1}var s=e=>e.enabled===!1?!1:void 0,c=e=>{if(e===`stdio`||e===`sse`||e===`streamable-http`)return e;if(e===`http`||e===`shttp`||e===void 0)return`http`};function l(t){let n=i(t);if(!n)return{};let o={};for(let[t,i]of Object.entries(n)){if(!r(i))continue;if(typeof i.command==`string`){o[t]={transport:`stdio`,command:i.command,...Array.isArray(i.args)&&i.args.every(e=>typeof e==`string`)&&{args:i.args},...a(i.env)&&{env:a(i.env)},...typeof i.cwd==`string`&&{cwd:i.cwd},...typeof i.description==`string`&&{description:i.description},...typeof i.icon==`string`&&{icon:i.icon},...typeof i.timeout==`number`&&{timeout:i.timeout},...i.enabled===!1&&{enabled:!1}};continue}if(typeof i.url!=`string`)continue;let n=c(i.transport);!n||n===`stdio`||(o[t]={transport:n,url:i.url,...a(i.headers)&&{headers:a(i.headers)},...e.isMcpAuthCredential(i.auth)&&{auth:i.auth},...typeof i.description==`string`&&{description:i.description},...typeof i.icon==`string`&&{icon:i.icon},...typeof i.timeout==`number`&&{timeout:i.timeout},...typeof i.sse_read_timeout==`number`&&{sse_read_timeout:i.sse_read_timeout},...typeof i.keep_alive==`boolean`&&{keep_alive:i.keep_alive},...i.enabled===!1&&{enabled:!1}})}return o}function u(e){return e.type===`stdio`?{transport:`stdio`,command:e.command,...e.args?.length?{args:e.args}:{},...e.env&&Object.keys(e.env).length>0?{env:e.env}:{},...e.enabled===!1&&{enabled:!1}}:{transport:e.type===`sse`?`sse`:`http`,url:e.url,...e.headers&&Object.keys(e.headers).length>0?{headers:e.headers}:{},...e.auth?{auth:e.auth}:{},...e.type===`shttp`&&e.timeout!==void 0?{timeout:e.timeout}:{},...e.enabled===!1&&{enabled:!1}}}var d=(e,t)=>t.enabled===!1?{enabled:!1}:s(e)===!1?{enabled:!0}:{},f=(e,t)=>{if(!t)return e?null:void 0;let n={};for(let[e,r]of Object.entries(t))r!==`**********`&&(n[e]=r);for(let r of Object.keys(e??{}))r in t||(n[r]=null);return Object.keys(n).length>0?n:void 0},p=[`client_auth_method`,`scopes`,`client_id`,`client_secret`],m=(e,t)=>{if(t===`**********`||t===void 0)return;if(t===null)return null;if(Array.isArray(t))return o(t)||JSON.stringify(e)===JSON.stringify(t)?void 0:t;if(!r(t))return Object.is(e,t)?void 0:t;let n=r(e)?e:{},i={};for(let[e,r]of Object.entries(t)){let t=m(n[e],r);t!==void 0&&(i[e]=t)}return Object.keys(i).length>0?i:void 0},h=(e,t)=>{if(t===void 0)return;if(t===null)return null;let n=m(e,t),i=r(n)?{...n}:{},a=r(e)?e:{};for(let e of p)e in a&&!(e in t)&&(i[e]=null);if(Object.keys(i).length!==0)return{type:`oauth`,...i}},g=(e,t)=>{if(!e||e.strategy===t.strategy)return t;let n={...t};for(let t of Object.keys(e))t!==`strategy`&&!(t in n)&&(n[t]=null);return n},_=`Removing an individual header from header authentication is not supported yet. Replace the credential or clear authentication, then re-enter the headers you want to keep.`,v=(e,t)=>{let n=f(e?.strategy===`header`?e.headers:void 0,t.headers);if(n){if(Object.values(n).some(e=>e===null))throw Error(_);return{strategy:`header`,headers:n}}},y=(e,t)=>{let n=e?.strategy===`oauth2`?e:void 0,r=h(n?.authentication,t.authentication),i=m(n?.state,t.state);if(!(n&&r===void 0&&i===void 0))return g(e,{strategy:`oauth2`,...r!==void 0&&{authentication:r},...i!==void 0&&{state:i}})};function b(e,t){let n=d(e,t);if(t.type===`stdio`){let r=f(e.transport===`stdio`?e.env:void 0,t.env);return{transport:`stdio`,command:t.command,...t.args?.length?{args:t.args}:e.transport===`stdio`&&e.args?{args:null}:{},...r===void 0?{}:{env:r},...n}}let r=e.transport===`stdio`?void 0:e,i={transport:t.type===`sse`?`sse`:`http`,url:t.url,...n};if(t.type===`shttp`&&(t.timeout===void 0?r?.timeout!==void 0&&(i.timeout=null):i.timeout=t.timeout),t.auth)if(t.auth.strategy===`oauth2`){let e=y(r?.auth,t.auth);e!==void 0&&(i.auth=e)}else if(t.auth.strategy===`header`&&r?.auth?.strategy===`header`){let e=v(r.auth,t.auth);e!==void 0&&(i.auth=e)}else o(t.auth)||(i.auth=g(r?.auth,t.auth));else r?.auth&&(i.auth=null);return i}var x=(e,t)=>{let n=(e,t)=>{let i=r(e)?{...e}:{};if(!r(t))return i;for(let[e,a]of Object.entries(t))a===null?delete i[e]:r(a)?i[e]=n(i[e],a):i[e]=a;return i};return n(e,t)},S=`Replace or clear the stored credential before renaming this MCP server.`;function C(e,t,n,r){if(o(n.transport===`stdio`?n.env:{auth:n.auth,headers:n.headers}))throw Error(S);let i=x(n,b(n,r));return{[e]:null,[t]:i}}function w(e,n,r){let i=t.toMcpServerName(n||r);if(!(i in e))return i;let a=1;for(;`${i}_${a}`in e;)a+=1;return`${i}_${a}`}exports.MCP_RENAME_CREDENTIAL_ERROR=S,exports.REDACTED_MCP_SECRET_VALUE=n,exports.allocateMcpSettingsKey=w,exports.buildMcpServerPatch=b,exports.buildRenameMcpConfigPatch=C,exports.getMcpServerEnabled=s,exports.hasRedactedMcpSecretLeaf=o,exports.parseMcpConfig=l,exports.stringRecord=a,exports.toCanonicalMcpServer=u;
2
2
  //# sourceMappingURL=mcp-config.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-config.cjs","names":[],"sources":["../../src/utils/mcp-config.ts"],"sourcesContent":["import {\n MCPConfig,\n MCPSSEServer,\n MCPSHTTPServer,\n MCPStdioServer,\n SettingsValue,\n} from \"#/types/settings\";\nimport type {\n MCPAuthCredential,\n MCPAuthenticationConfig,\n MCPJsonValue,\n MCPOAuthState,\n} from \"#/types/mcp-auth\";\nimport type { MCPServerConfig } from \"#/types/mcp-server\";\nimport { toMcpServerName } from \"#/utils/mcp-server-name\";\n\nconst EMPTY_MCP_CONFIG: MCPConfig = {\n sse_servers: [],\n stdio_servers: [],\n shttp_servers: [],\n};\n\nexport const REDACTED_MCP_SECRET_VALUE = \"**********\";\n\ntype SdkMcpServerConfig = Record<string, SettingsValue | MCPAuthCredential>;\ntype SdkMcpConfig = Record<string, SdkMcpServerConfig>;\n\n/**\n * The dict key for an SSE/SHTTP server doubles as its display name once a\n * user provides one. Keys that match the auto-generated fallback pattern\n * (``sse``, ``shttp``, ``shttp_1``, …) emitted by {@link toSdkMcpConfig}\n * carry no user intent, so we surface them as \"no name\" — re-serializing\n * regenerates the identical fallback key and existing configs are left\n * untouched.\n */\nfunction userGivenServerName(\n serverName: string,\n base: \"sse\" | \"shttp\",\n): string | undefined {\n const autoGenerated = new RegExp(`^${base}(_\\\\d+)?$`);\n return autoGenerated.test(serverName) ? undefined : serverName;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === \"object\" && !Array.isArray(value);\n}\n\nexport function getSdkMcpServerMap(\n value: unknown,\n): Record<string, unknown> | null {\n if (!isRecord(value)) return null;\n\n const mcpServers = value.mcpServers;\n if (\n isRecord(mcpServers) &&\n !(\"url\" in mcpServers) &&\n !(\"command\" in mcpServers)\n ) {\n return mcpServers;\n }\n\n return value;\n}\n\nexport function stringRecord(\n value: unknown,\n): Record<string, string> | undefined {\n if (!isRecord(value)) return undefined;\n const entries = Object.entries(value).filter(\n (entry): entry is [string, string] => typeof entry[1] === \"string\",\n );\n return entries.length > 0 ? Object.fromEntries(entries) : undefined;\n}\n\nexport function hasRedactedMcpSecretLeaf(value: unknown): boolean {\n if (value === REDACTED_MCP_SECRET_VALUE) return true;\n if (Array.isArray(value)) return value.some(hasRedactedMcpSecretLeaf);\n if (isRecord(value))\n return Object.values(value).some(hasRedactedMcpSecretLeaf);\n return false;\n}\n\nfunction getOAuthState(value: unknown): MCPOAuthState | undefined {\n if (!isRecord(value)) return undefined;\n const state: MCPOAuthState = {};\n if (isRecord(value.tokens)) {\n state.tokens = value.tokens as NonNullable<MCPOAuthState[\"tokens\"]>;\n }\n if (isRecord(value.client_info)) {\n state.client_info = value.client_info as NonNullable<\n MCPOAuthState[\"client_info\"]\n >;\n }\n if (\n typeof value.token_expires_at === \"number\" ||\n value.token_expires_at === null\n ) {\n state.token_expires_at = value.token_expires_at;\n }\n return Object.keys(state).length > 0 ? state : undefined;\n}\n\nfunction normalizeTaggedAuthCredential(\n value: unknown,\n): MCPAuthCredential | undefined {\n if (!isRecord(value)) return undefined;\n switch (value.strategy) {\n case \"none\":\n return { strategy: \"none\" };\n case \"api_key\":\n if (typeof value.value !== \"string\") return undefined;\n return {\n strategy: \"api_key\",\n value: value.value,\n ...(typeof value.header_name === \"string\" && {\n header_name: value.header_name,\n }),\n };\n case \"bearer\":\n if (typeof value.value !== \"string\") return undefined;\n return { strategy: \"bearer\", value: value.value };\n case \"basic\":\n if (\n typeof value.username !== \"string\" ||\n typeof value.password !== \"string\"\n ) {\n return undefined;\n }\n return {\n strategy: \"basic\",\n username: value.username,\n password: value.password,\n };\n case \"header\": {\n const headers = stringRecord(value.headers);\n return headers ? { strategy: \"header\", headers } : undefined;\n }\n case \"oauth2\": {\n const authentication = getAuthenticationConfig(value.authentication);\n const state = getOAuthState(value.state);\n return {\n strategy: \"oauth2\",\n ...(authentication && { authentication }),\n ...(state && { state }),\n };\n }\n default:\n return undefined;\n }\n}\n\nfunction authCredentialFromServerConfig(\n serverConfig: Record<string, unknown>,\n): MCPAuthCredential | undefined {\n return normalizeTaggedAuthCredential(serverConfig.auth);\n}\n\nfunction getRemoteSecretFields(entry: {\n auth?: MCPAuthCredential;\n headers?: Record<string, string>;\n}): Partial<SdkMcpServerConfig> {\n const fields: Partial<SdkMcpServerConfig> = {};\n if (entry.auth && !hasRedactedMcpSecretLeaf(entry.auth)) {\n fields.auth = entry.auth;\n }\n if (entry.headers && Object.keys(entry.headers).length > 0) {\n fields.headers = entry.headers;\n }\n return fields;\n}\n\n/**\n * Only an explicit ``false`` is carried. Every mutation round-trips the whole\n * server map through these converters, so preserving the flag here is what\n * stops adding or deleting one server from silently re-enabling another.\n */\nfunction disabledField(server: { enabled?: boolean }) {\n return server.enabled === false ? { enabled: false as const } : {};\n}\n\nfunction getRemoteServerFields(server: MCPServerConfig) {\n return {\n ...(server.name && { name: server.name }),\n url: server.url!,\n ...(server.headers && { headers: server.headers }),\n ...(server.auth && { auth: server.auth }),\n ...disabledField(server),\n };\n}\n\nexport function toMcpSseServer(server: MCPServerConfig): MCPSSEServer {\n return getRemoteServerFields(server);\n}\n\nexport function toMcpShttpServer(server: MCPServerConfig): MCPSHTTPServer {\n return {\n ...getRemoteServerFields(server),\n ...(server.timeout !== undefined && { timeout: server.timeout }),\n };\n}\n\nexport function toMcpStdioServer(server: MCPServerConfig): MCPStdioServer {\n return {\n name: server.name!,\n command: server.command!,\n ...(server.args && { args: server.args }),\n ...(server.env && { env: server.env }),\n ...disabledField(server),\n };\n}\n\nfunction getAuthenticationConfig(\n value: unknown,\n): MCPAuthenticationConfig | undefined {\n if (!value || typeof value !== \"object\") return undefined;\n const record = value as Record<string, unknown>;\n if (record.type !== \"oauth\") return undefined;\n const authentication: MCPAuthenticationConfig = { type: \"oauth\" };\n if (\n record.client_auth_method === \"none\" ||\n record.client_auth_method === \"client_secret_post\" ||\n record.client_auth_method === \"client_secret_basic\" ||\n record.client_auth_method === \"private_key_jwt\"\n ) {\n authentication.client_auth_method = record.client_auth_method;\n }\n if (typeof record.scopes === \"string\") {\n authentication.scopes = record.scopes;\n } else if (\n Array.isArray(record.scopes) &&\n record.scopes.every((scope) => typeof scope === \"string\")\n ) {\n authentication.scopes = record.scopes;\n }\n if (typeof record.client_name === \"string\") {\n authentication.client_name = record.client_name;\n }\n if (typeof record.client_metadata_url === \"string\") {\n authentication.client_metadata_url = record.client_metadata_url;\n }\n if (typeof record.client_id === \"string\") {\n authentication.client_id = record.client_id;\n }\n if (typeof record.client_secret === \"string\") {\n authentication.client_secret = record.client_secret;\n }\n if (\n record.additional_client_metadata &&\n typeof record.additional_client_metadata === \"object\" &&\n !Array.isArray(record.additional_client_metadata)\n ) {\n authentication.additional_client_metadata =\n record.additional_client_metadata as Record<string, MCPJsonValue>;\n }\n return authentication;\n}\n\n/**\n * Parse the SDK-native ``agent_settings.mcp_config`` value and convert it\n * to the frontend MCPConfig format used by UI components.\n */\nexport function parseMcpConfig(value: unknown): MCPConfig {\n const mcpConfig = getSdkMcpServerMap(value);\n if (!mcpConfig) {\n return { ...EMPTY_MCP_CONFIG };\n }\n\n const sseServers: (string | MCPSSEServer)[] = [];\n const stdioServers: MCPStdioServer[] = [];\n const shttpServers: (string | MCPSHTTPServer)[] = [];\n\n for (const [serverName, serverConfig] of Object.entries(mcpConfig)) {\n if (!isRecord(serverConfig)) continue;\n\n const url = serverConfig.url as string | undefined;\n\n // The SDK omits ``enabled`` while it holds its default (true), so only an\n // explicit ``false`` marks a server as switched off.\n const disabled = serverConfig.enabled === false;\n\n if (url) {\n const transport = serverConfig.transport as string | undefined;\n const auth = authCredentialFromServerConfig(serverConfig);\n const headers = stringRecord(serverConfig.headers);\n\n if (transport === \"sse\") {\n const name = userGivenServerName(serverName, \"sse\");\n const server: MCPSSEServer = { url };\n if (name) server.name = name;\n if (auth) server.auth = auth;\n if (headers) server.headers = headers;\n if (disabled) server.enabled = false;\n sseServers.push(server);\n } else {\n const name = userGivenServerName(serverName, \"shttp\");\n const server: MCPSHTTPServer = { url };\n if (name) server.name = name;\n if (serverConfig.timeout != null) {\n server.timeout = serverConfig.timeout as number;\n }\n if (auth) server.auth = auth;\n if (headers) server.headers = headers;\n if (disabled) server.enabled = false;\n shttpServers.push(server);\n }\n } else {\n if (typeof serverConfig.command !== \"string\") continue;\n const stdioServer: MCPStdioServer = {\n name: serverName,\n command: serverConfig.command,\n };\n if (serverConfig.args) {\n stdioServer.args = serverConfig.args as string[];\n }\n if (serverConfig.env) {\n stdioServer.env = serverConfig.env as Record<string, string>;\n }\n if (disabled) stdioServer.enabled = false;\n stdioServers.push(stdioServer);\n }\n }\n\n return {\n sse_servers: sseServers,\n stdio_servers: stdioServers,\n shttp_servers: shttpServers,\n };\n}\n\n/**\n * Convert the frontend MCPConfig format back to the SDK-native server map\n * expected by agent_settings.mcp_config on the backend.\n *\n * Names are only suffixed (``_1``, ``_2``, …) when an earlier entry has\n * already claimed the bare base name. We intentionally do NOT use a single\n * monotonic counter across server types: that would, for example, rename a\n * stdio server \"myname\" to \"myname_1\" the moment any sse/shttp entry is\n * persisted ahead of it, and shift the suffix on every save as the count\n * of other server types changes. With per-base collision suffixing,\n * unrelated entries keep their human-meaningful names stable across edits.\n *\n * ``enabled`` is only emitted when a server is switched off — the SDK defaults\n * it to true. Omitting it is what *clears* a previously persisted\n * ``enabled: false``, and that only works because ``saveSettings`` pre-clears\n * ``mcp_config`` to null before every write (see\n * ``settings-service.api.ts``), turning the backend's RFC 7386 merge into a\n * full replace. If that pre-clear is ever removed, re-enabling a server\n * becomes a silent no-op.\n */\nexport function toSdkMcpConfig(config: MCPConfig): SdkMcpConfig | null {\n const mcpConfig: SdkMcpConfig = {};\n\n const reserve = (base: string): string => {\n const safeBase = toMcpServerName(base);\n if (!(safeBase in mcpConfig)) return safeBase;\n let i = 1;\n while (`${safeBase}_${i}` in mcpConfig) i += 1;\n return `${safeBase}_${i}`;\n };\n\n for (const entry of config.sse_servers) {\n const server: SdkMcpServerConfig = {};\n let name: string | undefined;\n if (typeof entry === \"string\") {\n server.url = entry;\n } else {\n name = entry.name;\n server.url = entry.url;\n Object.assign(server, getRemoteSecretFields(entry), disabledField(entry));\n }\n server.transport = \"sse\";\n mcpConfig[reserve(name || \"sse\")] = server;\n }\n\n for (const entry of config.shttp_servers) {\n const server: SdkMcpServerConfig = { transport: \"http\" };\n let name: string | undefined;\n if (typeof entry === \"string\") {\n server.url = entry;\n } else {\n name = entry.name;\n server.url = entry.url;\n Object.assign(server, getRemoteSecretFields(entry), disabledField(entry));\n if (entry.timeout != null) server.timeout = entry.timeout;\n }\n mcpConfig[reserve(name || \"shttp\")] = server;\n }\n\n for (const entry of config.stdio_servers) {\n const server: SdkMcpServerConfig = {\n command: entry.command,\n };\n if (entry.args) server.args = entry.args;\n if (entry.env) server.env = entry.env;\n Object.assign(server, disabledField(entry));\n mcpConfig[reserve(entry.name || \"stdio\")] = server;\n }\n\n return Object.keys(mcpConfig).length > 0 ? mcpConfig : null;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"mcp-config.cjs","names":[],"sources":["../../src/utils/mcp-config.ts"],"sourcesContent":["import type {\n MCPAuthCredential,\n MCPConfig,\n MCPConfigPatch,\n MCPServer,\n MCPServerPatch,\n} from \"@openhands/typescript-client\";\nimport { isMcpAuthCredential } from \"#/types/mcp-auth\";\nimport type { MCPServerConfig } from \"#/types/mcp-server\";\nimport { toMcpServerName } from \"#/utils/mcp-server-name\";\n\nexport const REDACTED_MCP_SECRET_VALUE = \"**********\";\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n !!value && typeof value === \"object\" && !Array.isArray(value);\n\nexport function getSdkMcpServerMap(\n value: unknown,\n): Record<string, unknown> | null {\n if (!isRecord(value)) return null;\n\n const mcpServers = value.mcpServers;\n if (\n isRecord(mcpServers) &&\n !(\"url\" in mcpServers) &&\n !(\"command\" in mcpServers)\n ) {\n return mcpServers;\n }\n\n return value;\n}\n\nexport function stringRecord(\n value: unknown,\n): Record<string, string> | undefined {\n if (!isRecord(value)) return undefined;\n const entries = Object.entries(value).filter(\n (entry): entry is [string, string] => typeof entry[1] === \"string\",\n );\n return entries.length > 0 ? Object.fromEntries(entries) : undefined;\n}\n\nexport function hasRedactedMcpSecretLeaf(value: unknown): boolean {\n if (value === REDACTED_MCP_SECRET_VALUE) return true;\n if (Array.isArray(value)) return value.some(hasRedactedMcpSecretLeaf);\n if (isRecord(value)) {\n return Object.values(value).some(hasRedactedMcpSecretLeaf);\n }\n return false;\n}\n\n// Agent Server persists this optional field, but typescript-client 1.36.1\n// does not yet expose it in its generated MCP model types.\nexport const getMcpServerEnabled = (server: MCPServer): boolean | undefined =>\n (server as MCPServer & { enabled?: unknown }).enabled === false\n ? false\n : undefined;\n\nconst normalizeTransport = (\n value: unknown,\n): MCPServer[\"transport\"] | undefined => {\n if (value === \"stdio\" || value === \"sse\" || value === \"streamable-http\") {\n return value;\n }\n if (value === \"http\" || value === \"shttp\" || value === undefined) {\n return \"http\";\n }\n return undefined;\n};\n\n/**\n * Normalize the SDK and legacy cloud wrapper shapes into the client-owned,\n * name-keyed MCPConfig. The map key remains the server's persistence identity.\n */\n// @spec MCP-003 — Settings map keys are stable MCP identities\nexport function parseMcpConfig(value: unknown): MCPConfig {\n const serverMap = getSdkMcpServerMap(value);\n if (!serverMap) return {};\n\n const config: MCPConfig = {};\n for (const [settingsKey, candidate] of Object.entries(serverMap)) {\n if (!isRecord(candidate)) continue;\n\n if (typeof candidate.command === \"string\") {\n config[settingsKey] = {\n transport: \"stdio\",\n command: candidate.command,\n ...(Array.isArray(candidate.args) &&\n candidate.args.every((arg) => typeof arg === \"string\") && {\n args: candidate.args as string[],\n }),\n ...(stringRecord(candidate.env) && {\n env: stringRecord(candidate.env),\n }),\n ...(typeof candidate.cwd === \"string\" && { cwd: candidate.cwd }),\n ...(typeof candidate.description === \"string\" && {\n description: candidate.description,\n }),\n ...(typeof candidate.icon === \"string\" && { icon: candidate.icon }),\n ...(typeof candidate.timeout === \"number\" && {\n timeout: candidate.timeout,\n }),\n ...(candidate.enabled === false && { enabled: false }),\n };\n continue;\n }\n\n if (typeof candidate.url !== \"string\") continue;\n const transport = normalizeTransport(candidate.transport);\n if (!transport || transport === \"stdio\") continue;\n config[settingsKey] = {\n transport,\n url: candidate.url,\n ...(stringRecord(candidate.headers) && {\n headers: stringRecord(candidate.headers),\n }),\n ...(isMcpAuthCredential(candidate.auth) && {\n auth: candidate.auth,\n }),\n ...(typeof candidate.description === \"string\" && {\n description: candidate.description,\n }),\n ...(typeof candidate.icon === \"string\" && { icon: candidate.icon }),\n ...(typeof candidate.timeout === \"number\" && {\n timeout: candidate.timeout,\n }),\n ...(typeof candidate.sse_read_timeout === \"number\" && {\n sse_read_timeout: candidate.sse_read_timeout,\n }),\n ...(typeof candidate.keep_alive === \"boolean\" && {\n keep_alive: candidate.keep_alive,\n }),\n ...(candidate.enabled === false && { enabled: false }),\n };\n }\n return config;\n}\n\nexport function toCanonicalMcpServer(server: MCPServerConfig): MCPServer {\n if (server.type === \"stdio\") {\n return {\n transport: \"stdio\",\n command: server.command!,\n ...(server.args?.length ? { args: server.args } : {}),\n ...(server.env && Object.keys(server.env).length > 0\n ? { env: server.env }\n : {}),\n ...(server.enabled === false && { enabled: false }),\n };\n }\n\n return {\n transport: server.type === \"sse\" ? \"sse\" : \"http\",\n url: server.url!,\n ...(server.headers && Object.keys(server.headers).length > 0\n ? { headers: server.headers }\n : {}),\n ...(server.auth ? { auth: server.auth } : {}),\n ...(server.type === \"shttp\" && server.timeout !== undefined\n ? { timeout: server.timeout }\n : {}),\n ...(server.enabled === false && { enabled: false }),\n };\n}\n\nconst buildEnabledPatch = (\n previous: MCPServer,\n edited: MCPServerConfig,\n): MCPServerPatch => {\n if (edited.enabled === false) return { enabled: false } as MCPServerPatch;\n return getMcpServerEnabled(previous) === false\n ? ({ enabled: true } as MCPServerPatch)\n : {};\n};\n\nconst buildStringMapPatch = (\n previous: Record<string, string> | null | undefined,\n next: Record<string, string> | undefined,\n): Record<string, string | null> | null | undefined => {\n if (!next) return previous ? null : undefined;\n\n const patch: Record<string, string | null> = {};\n for (const [key, value] of Object.entries(next)) {\n if (value !== REDACTED_MCP_SECRET_VALUE) {\n patch[key] = value;\n }\n }\n for (const key of Object.keys(previous ?? {})) {\n if (!(key in next)) patch[key] = null;\n }\n return Object.keys(patch).length > 0 ? patch : undefined;\n};\n\ntype OAuthCredential = Extract<MCPAuthCredential, { strategy: \"oauth2\" }>;\ntype OAuthCredentialPatch = Extract<\n NonNullable<MCPServerPatch[\"auth\"]>,\n { strategy: \"oauth2\" }\n>;\nconst OAUTH_EDITABLE_AUTHENTICATION_FIELDS = [\n \"client_auth_method\",\n \"scopes\",\n \"client_id\",\n \"client_secret\",\n] as const;\n\nconst buildRedactionSafeNestedPatch = (\n previous: unknown,\n next: unknown,\n): unknown | undefined => {\n if (next === REDACTED_MCP_SECRET_VALUE || next === undefined) {\n return undefined;\n }\n if (next === null) return null;\n if (Array.isArray(next)) {\n if (hasRedactedMcpSecretLeaf(next)) return undefined;\n return JSON.stringify(previous) === JSON.stringify(next) ? undefined : next;\n }\n if (!isRecord(next)) {\n return Object.is(previous, next) ? undefined : next;\n }\n\n const previousRecord = isRecord(previous) ? previous : {};\n const patch: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(next)) {\n const nestedPatch = buildRedactionSafeNestedPatch(\n previousRecord[key],\n value,\n );\n if (nestedPatch !== undefined) patch[key] = nestedPatch;\n }\n return Object.keys(patch).length > 0 ? patch : undefined;\n};\n\nconst buildOAuthAuthenticationPatch = (\n previous: OAuthCredential[\"authentication\"],\n edited: OAuthCredential[\"authentication\"],\n): OAuthCredentialPatch[\"authentication\"] | undefined => {\n if (edited === undefined) return undefined;\n if (edited === null) return null;\n\n const nestedPatch = buildRedactionSafeNestedPatch(previous, edited);\n const patch = isRecord(nestedPatch) ? { ...nestedPatch } : {};\n const previousRecord = isRecord(previous) ? previous : {};\n for (const key of OAUTH_EDITABLE_AUTHENTICATION_FIELDS) {\n if (key in previousRecord && !(key in edited)) patch[key] = null;\n }\n if (Object.keys(patch).length === 0) return undefined;\n return { type: \"oauth\", ...patch } as NonNullable<\n OAuthCredentialPatch[\"authentication\"]\n >;\n};\n\nconst withAuthStrategyReplacementDeletes = <T extends MCPAuthCredential>(\n previous: MCPAuthCredential | null | undefined,\n patch: T,\n): T => {\n if (!previous || previous.strategy === patch.strategy) return patch;\n\n const replacement = { ...patch } as Record<string, unknown>;\n for (const key of Object.keys(previous)) {\n if (key !== \"strategy\" && !(key in replacement)) {\n replacement[key] = null;\n }\n }\n return replacement as T;\n};\n\ntype HeaderAuthCredential = Extract<MCPAuthCredential, { strategy: \"header\" }>;\n\nexport const MCP_HEADER_REMOVAL_ERROR =\n \"Removing an individual header from header authentication is not supported yet. Replace the credential or clear authentication, then re-enter the headers you want to keep.\";\n\nconst buildHeaderAuthCredentialPatch = (\n previous: MCPAuthCredential | null | undefined,\n edited: HeaderAuthCredential,\n): NonNullable<MCPServerPatch[\"auth\"]> | undefined => {\n const previousHeaders =\n previous?.strategy === \"header\" ? previous.headers : undefined;\n const headersPatch = buildStringMapPatch(previousHeaders, edited.headers);\n if (!headersPatch) return undefined;\n if (Object.values(headersPatch).some((value) => value === null)) {\n throw new Error(MCP_HEADER_REMOVAL_ERROR);\n }\n return {\n strategy: \"header\",\n headers: headersPatch as Record<string, string>,\n };\n};\n\nconst buildOAuthCredentialPatch = (\n previous: MCPAuthCredential | null | undefined,\n edited: OAuthCredential,\n): OAuthCredentialPatch | undefined => {\n const previousOAuth = previous?.strategy === \"oauth2\" ? previous : undefined;\n const authentication = buildOAuthAuthenticationPatch(\n previousOAuth?.authentication,\n edited.authentication,\n );\n const state = buildRedactionSafeNestedPatch(\n previousOAuth?.state,\n edited.state,\n );\n if (previousOAuth && authentication === undefined && state === undefined) {\n return undefined;\n }\n return withAuthStrategyReplacementDeletes(previous, {\n strategy: \"oauth2\",\n ...(authentication !== undefined && { authentication }),\n ...(state !== undefined && { state }),\n } as OAuthCredentialPatch);\n};\n\n/**\n * Build one sparse MCP server merge-patch from an editor result. Redacted\n * values are display-only and are never mutation inputs.\n */\n// @spec MCP-002 — Secret patches preserve user intent\nexport function buildMcpServerPatch(\n previous: MCPServer,\n edited: MCPServerConfig,\n): MCPServerPatch {\n const enabled = buildEnabledPatch(previous, edited);\n if (edited.type === \"stdio\") {\n const env = buildStringMapPatch(\n previous.transport === \"stdio\" ? previous.env : undefined,\n edited.env,\n );\n return {\n transport: \"stdio\",\n command: edited.command!,\n ...(edited.args?.length\n ? { args: edited.args }\n : previous.transport === \"stdio\" && previous.args\n ? { args: null }\n : {}),\n ...(env !== undefined ? { env } : {}),\n ...enabled,\n };\n }\n\n const previousRemote = previous.transport === \"stdio\" ? undefined : previous;\n const patch: MCPServerPatch = {\n transport: edited.type === \"sse\" ? \"sse\" : \"http\",\n url: edited.url!,\n ...enabled,\n };\n\n if (edited.type === \"shttp\") {\n if (edited.timeout !== undefined) patch.timeout = edited.timeout;\n else if (previousRemote?.timeout !== undefined) patch.timeout = null;\n }\n\n if (edited.auth) {\n if (edited.auth.strategy === \"oauth2\") {\n const auth = buildOAuthCredentialPatch(previousRemote?.auth, edited.auth);\n if (auth !== undefined) patch.auth = auth;\n } else if (\n edited.auth.strategy === \"header\" &&\n previousRemote?.auth?.strategy === \"header\"\n ) {\n const auth = buildHeaderAuthCredentialPatch(\n previousRemote.auth,\n edited.auth,\n );\n if (auth !== undefined) patch.auth = auth;\n } else if (!hasRedactedMcpSecretLeaf(edited.auth)) {\n patch.auth = withAuthStrategyReplacementDeletes(\n previousRemote?.auth,\n edited.auth,\n );\n }\n } else if (previousRemote?.auth) {\n patch.auth = null;\n }\n\n return patch;\n}\n\nconst applyMcpServerPatch = (\n previous: MCPServer,\n patch: MCPServerPatch,\n): MCPServer => {\n const apply = (base: unknown, next: unknown): Record<string, unknown> => {\n const merged = isRecord(base) ? { ...base } : {};\n if (!isRecord(next)) return merged;\n\n for (const [key, value] of Object.entries(next)) {\n if (value === null) {\n delete merged[key];\n } else if (isRecord(value)) {\n merged[key] = apply(merged[key], value);\n } else {\n merged[key] = value;\n }\n }\n return merged;\n };\n\n return apply(previous, patch) as MCPServer;\n};\n\nexport const MCP_RENAME_CREDENTIAL_ERROR =\n \"Replace or clear the stored credential before renaming this MCP server.\";\n\n// @spec MCP-003 — Settings map keys are stable MCP identities\nexport function buildRenameMcpConfigPatch(\n oldKey: string,\n newKey: string,\n previous: MCPServer,\n edited: MCPServerConfig,\n): MCPConfigPatch {\n const previousSecrets =\n previous.transport === \"stdio\"\n ? previous.env\n : { auth: previous.auth, headers: previous.headers };\n if (hasRedactedMcpSecretLeaf(previousSecrets)) {\n throw new Error(MCP_RENAME_CREDENTIAL_ERROR);\n }\n const renamedServer = applyMcpServerPatch(\n previous,\n buildMcpServerPatch(previous, edited),\n );\n return {\n [oldKey]: null,\n [newKey]: renamedServer,\n };\n}\n\nexport function allocateMcpSettingsKey(\n config: MCPConfig,\n preferredName: string | undefined,\n fallback: \"sse\" | \"shttp\" | \"stdio\",\n): string {\n const base = toMcpServerName(preferredName || fallback);\n if (!(base in config)) return base;\n let suffix = 1;\n while (`${base}_${suffix}` in config) suffix += 1;\n return `${base}_${suffix}`;\n}\n"],"mappings":"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"}
@@ -1,39 +1,22 @@
1
- import { MCPConfig, MCPSSEServer, MCPSHTTPServer, MCPStdioServer, SettingsValue } from "#/types/settings";
2
- import type { MCPAuthCredential } from "#/types/mcp-auth";
1
+ import type { MCPConfig, MCPConfigPatch, MCPServer, MCPServerPatch } from "@openhands/typescript-client";
3
2
  import type { MCPServerConfig } from "#/types/mcp-server";
4
3
  export declare const REDACTED_MCP_SECRET_VALUE = "**********";
5
- type SdkMcpServerConfig = Record<string, SettingsValue | MCPAuthCredential>;
6
- type SdkMcpConfig = Record<string, SdkMcpServerConfig>;
7
4
  export declare function getSdkMcpServerMap(value: unknown): Record<string, unknown> | null;
8
5
  export declare function stringRecord(value: unknown): Record<string, string> | undefined;
9
6
  export declare function hasRedactedMcpSecretLeaf(value: unknown): boolean;
10
- export declare function toMcpSseServer(server: MCPServerConfig): MCPSSEServer;
11
- export declare function toMcpShttpServer(server: MCPServerConfig): MCPSHTTPServer;
12
- export declare function toMcpStdioServer(server: MCPServerConfig): MCPStdioServer;
7
+ export declare const getMcpServerEnabled: (server: MCPServer) => boolean | undefined;
13
8
  /**
14
- * Parse the SDK-native ``agent_settings.mcp_config`` value and convert it
15
- * to the frontend MCPConfig format used by UI components.
9
+ * Normalize the SDK and legacy cloud wrapper shapes into the client-owned,
10
+ * name-keyed MCPConfig. The map key remains the server's persistence identity.
16
11
  */
17
12
  export declare function parseMcpConfig(value: unknown): MCPConfig;
13
+ export declare function toCanonicalMcpServer(server: MCPServerConfig): MCPServer;
14
+ export declare const MCP_HEADER_REMOVAL_ERROR = "Removing an individual header from header authentication is not supported yet. Replace the credential or clear authentication, then re-enter the headers you want to keep.";
18
15
  /**
19
- * Convert the frontend MCPConfig format back to the SDK-native server map
20
- * expected by agent_settings.mcp_config on the backend.
21
- *
22
- * Names are only suffixed (``_1``, ``_2``, …) when an earlier entry has
23
- * already claimed the bare base name. We intentionally do NOT use a single
24
- * monotonic counter across server types: that would, for example, rename a
25
- * stdio server "myname" to "myname_1" the moment any sse/shttp entry is
26
- * persisted ahead of it, and shift the suffix on every save as the count
27
- * of other server types changes. With per-base collision suffixing,
28
- * unrelated entries keep their human-meaningful names stable across edits.
29
- *
30
- * ``enabled`` is only emitted when a server is switched off — the SDK defaults
31
- * it to true. Omitting it is what *clears* a previously persisted
32
- * ``enabled: false``, and that only works because ``saveSettings`` pre-clears
33
- * ``mcp_config`` to null before every write (see
34
- * ``settings-service.api.ts``), turning the backend's RFC 7386 merge into a
35
- * full replace. If that pre-clear is ever removed, re-enabling a server
36
- * becomes a silent no-op.
16
+ * Build one sparse MCP server merge-patch from an editor result. Redacted
17
+ * values are display-only and are never mutation inputs.
37
18
  */
38
- export declare function toSdkMcpConfig(config: MCPConfig): SdkMcpConfig | null;
39
- export {};
19
+ export declare function buildMcpServerPatch(previous: MCPServer, edited: MCPServerConfig): MCPServerPatch;
20
+ export declare const MCP_RENAME_CREDENTIAL_ERROR = "Replace or clear the stored credential before renaming this MCP server.";
21
+ export declare function buildRenameMcpConfigPatch(oldKey: string, newKey: string, previous: MCPServer, edited: MCPServerConfig): MCPConfigPatch;
22
+ export declare function allocateMcpSettingsKey(config: MCPConfig, preferredName: string | undefined, fallback: "sse" | "shttp" | "stdio"): string;