@openhands/agent-canvas 1.8.0 → 1.10.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 (1282) hide show
  1. package/README.md +1 -1
  2. package/README.windows.md +2 -2
  3. package/build/assets/{acp-providers-WUD4tfSq.js → acp-providers-DLe_gVDY.js} +1 -1
  4. package/build/assets/active-backend-context-B0wI7OzM.js +2 -0
  5. package/build/assets/agent-context-settings-CaQtdNA-.js +1 -0
  6. package/build/assets/agent-profiles-settings-CvuErjp6.js +1 -0
  7. package/build/assets/agent-server-conversation-service.api-km_8sOVf.js +41 -0
  8. package/build/assets/{agent-settings-BGTyoT6X.js → agent-settings-UE-U4Xii.js} +2 -2
  9. package/build/assets/agent-settings-nmO-KSXr.js +1 -0
  10. package/build/assets/alert-banner-BMaOtTCG.js +1 -0
  11. package/build/assets/{api-key-entry-screen-JOx3SH1-.js → api-key-entry-screen-Cy66vT4D.js} +1 -1
  12. package/build/assets/{app-settings-D53QZy5p.js → app-settings-9ok42bV6.js} +1 -1
  13. package/build/assets/automation-C_eCrGyP.js +1 -0
  14. package/build/assets/automation-detail-fuITm6i3.js +3 -0
  15. package/build/assets/automation-export-CRq40mux.js +2 -0
  16. package/build/assets/automation-setup-route-EXDazOHW.js +1 -0
  17. package/build/assets/automation-templates-BArZsaxP.js +1 -0
  18. package/build/assets/automations-list-CG4HKOTn.js +1 -0
  19. package/build/assets/{back-nav-button-C02hGa8t.js → back-nav-button-BZB6H7xz.js} +1 -1
  20. package/build/assets/backend-form-modal-B_lXjOGa.js +1 -0
  21. package/build/assets/{backend-synced-settings-badge-CQ9xtNWm.js → backend-synced-settings-badge-B_NXJ3u1.js} +1 -1
  22. package/build/assets/{badge-CzXbf7tR.js → badge-C64c-7PO.js} +1 -1
  23. package/build/assets/{base-modal-DkVyzFMt.js → base-modal-C0RQPug5.js} +1 -1
  24. package/build/assets/bot-DuN83i3p.js +1 -0
  25. package/build/assets/{brand-button-BUlDL-mz.js → brand-button-DJmFCyMK.js} +1 -1
  26. package/build/assets/browser-D3gd2n83.js +6 -0
  27. package/build/assets/{browser-tab-BijpUbdt.js → browser-tab-BicAWuJ1.js} +1 -1
  28. package/build/assets/{chat-send-button-BKsVjhtA.js → chat-send-button-CCrH1E8u.js} +1 -1
  29. package/build/assets/check-DLOKoFU9.js +1 -0
  30. package/build/assets/{checkmark-CxdXtM3b.js → checkmark-XZyokq_Y.js} +1 -1
  31. package/build/assets/chevron-down-CnIbtM6i.js +1 -0
  32. package/build/assets/circle-check-CxCYJrpZ.js +1 -0
  33. package/build/assets/{circle-plus-check-toggle-DdjUiOo1.js → circle-plus-check-toggle-CB_sNERY.js} +1 -1
  34. package/build/assets/{close-CDAVqnTn.js → close-ScPlnwyq.js} +1 -1
  35. package/build/assets/cloud-funnel-analytics-XynamQGU.js +1 -0
  36. package/build/assets/{combobox-caret-Dl9UtvD6.js → combobox-caret-Bwiifgjs.js} +1 -1
  37. package/build/assets/command-menu-CA3IjGNc.js +1 -0
  38. package/build/assets/condenser-settings-cNGy75gq.js +1 -0
  39. package/build/assets/{confirmation-modal-CRBJSllP.js → confirmation-modal-BATFmFyP.js} +1 -1
  40. package/build/assets/context-menu-list-item-DhJCcBA0.js +1 -0
  41. package/build/assets/conversation-B6t6EiVp.js +1 -0
  42. package/build/assets/conversation-Csdxh9Xt.js +90 -0
  43. package/build/assets/conversation-panel-B6t6EiVp.js +1 -0
  44. package/build/assets/conversation-state-store-C2QzhPaK.js +1 -0
  45. package/build/assets/{conversation-store-C6hSXHw0.js → conversation-store-B8Eahyeg.js} +1 -1
  46. package/build/assets/{conversation-tab-empty-state-CDjvNgpG.js → conversation-tab-empty-state-D3fb5xIA.js} +1 -1
  47. package/build/assets/{copy-Drwu97Gx.js → copy-DaHuDtG4.js} +1 -1
  48. package/build/assets/{copy-z7idLzWO.js → copy-Drmhc2jD.js} +1 -1
  49. package/build/assets/{copy-to-clipboard-button-NbN1clVr.js → copy-to-clipboard-button-c4MQwKGj.js} +1 -1
  50. package/build/assets/{device-verify-CDm_WrVu.js → device-verify-oFpQoLgm.js} +1 -1
  51. package/build/assets/{dist-hOnv1nn2.js → dist-Bl64nBZL.js} +1 -1
  52. package/build/assets/{dropdown-classes-CqA2BTCL.js → dropdown-classes-f91ARMV1.js} +1 -1
  53. package/build/assets/entry.client-BCzY2Bf3.js +2 -0
  54. package/build/assets/enum-filter-dropdown-HG3q3rkV.js +1 -0
  55. package/build/assets/{environment-switch-overlay-mGl2pqqx.js → environment-switch-overlay-CquZXolz.js} +1 -1
  56. package/build/assets/{extensions-hub-Br3Lgynp.js → extensions-hub-BeweE0PW.js} +1 -1
  57. package/build/assets/{extensions-navigation-BQmstKDZ.js → extensions-navigation-Dd58NlUF.js} +1 -1
  58. package/build/assets/{external-link-D9B2QMPf.js → external-link-zWbg5KXS.js} +1 -1
  59. package/build/assets/file-text-RecuaId_.js +1 -0
  60. package/build/assets/files-tab-CLLG55-q.js +1 -0
  61. package/build/assets/{folder-C86qXV7M.js → folder-C1ou4_DT.js} +1 -1
  62. package/build/assets/{form-control-classes-CtVAktAy.js → form-control-classes-pHtZUI6K.js} +1 -1
  63. package/build/assets/format-relative-time-6-3uvOXe.js +1 -0
  64. package/build/assets/format-time-delta-BIR5Os7T.js +1 -0
  65. package/build/assets/git-provider-icon-wg7ShB98.js +1 -0
  66. package/build/assets/git-repo-dropdown-CWnaUyxL.js +1 -0
  67. package/build/assets/git-repo-dropdown-TzOuG5Ef.js +1 -0
  68. package/build/assets/{highlighted-source-view-KMsA9c4a.js → highlighted-source-view-DBtI3por.js} +1 -1
  69. package/build/assets/home-BpZQkDWM.js +1 -0
  70. package/build/assets/home-OEx0XtfP.js +1 -0
  71. package/build/assets/home-store-DM4qw1lF.js +1 -0
  72. package/build/assets/{iconBase-B2rQun3J.js → iconBase-C2sR-uAp.js} +1 -1
  73. package/build/assets/index-home-OEx0XtfP.js +1 -0
  74. package/build/assets/info-C9lpK5pw.js +1 -0
  75. package/build/assets/install-server-modal-DnjZrJUy.js +1 -0
  76. package/build/assets/kebab-menu-item-content-By16Tm_0.js +1 -0
  77. package/build/assets/{launch-DjkKw55l.js → launch-C9uijypN.js} +1 -1
  78. package/build/assets/{link-external-BDBCz-_z.js → link-external-BNZzCM1I.js} +1 -1
  79. package/build/assets/list-filter-C86CBRDE.js +1 -0
  80. package/build/assets/{list-todo-BpAf7aOT.js → list-todo-CheUtB7F.js} +1 -1
  81. package/build/assets/llm-not-configured-banner-DrBrhfN0.js +27 -0
  82. package/build/assets/{llm-settings-D8zNkIlP.js → llm-settings-CRsLqxgu.js} +1 -1
  83. package/build/assets/llm-settings-RBm_3kNm.js +1 -0
  84. package/build/assets/{llm-subscription-service-COTgZc1C.js → llm-subscription-service-DwjJ8-_X.js} +1 -1
  85. package/build/assets/loader-circle-C5AnEN8r.js +1 -0
  86. package/build/assets/{loading-spinner-DRFyh6Iy.js → loading-spinner-6Yj-YyoS.js} +1 -1
  87. package/build/assets/{manage-backends-modal-DiRWE3tJ.js → manage-backends-modal-DrwErS0N.js} +1 -1
  88. package/build/assets/manifest-c352d453.js +1 -0
  89. package/build/assets/manifest-subpage-layout-CtqVwIvJ.js +1 -0
  90. package/build/assets/markdown-renderer-lsvsp7jn.js +8 -0
  91. package/build/assets/mcp-DD4hPTRE.js +9 -0
  92. package/build/assets/mcp-marketplace-utils-BMnYz0Gc.js +1 -0
  93. package/build/assets/messages-Dt77e0qi.js +40 -0
  94. package/build/assets/{modal-backdrop-X-vKo61e.js → modal-backdrop-BSzNhM4r.js} +1 -1
  95. package/build/assets/{modal-body-C3bGicn4.js → modal-body-BHGCSAtj.js} +1 -1
  96. package/build/assets/{modal-classes-DFFO6BMU.js → modal-classes-DSTLuxkA.js} +1 -1
  97. package/build/assets/{modal-close-button-vxkAIRyZ.js → modal-close-button-dheWZ2ys.js} +1 -1
  98. package/build/assets/mouse-pointer-click-Px-dXWcS.js +1 -0
  99. package/build/assets/{navigation-context-BOGzIng3.js → navigation-context-CQZwH_tC.js} +1 -1
  100. package/build/assets/navigation-link-Bxo3-4vo.js +1 -0
  101. package/build/assets/onboarding-5CZvRBbh.js +1 -0
  102. package/build/assets/onboarding-modal-CD2ehuxt.js +1 -0
  103. package/build/assets/{openhands-logo-CmYvJXBa.js → openhands-logo-BS-Epajy.js} +1 -1
  104. package/build/assets/{organization-service.api-CQ73CB-S.js → organization-service.api-Dsuoep0g.js} +1 -1
  105. package/build/assets/{pencil-DzW2GB2M.js → pencil-Bl3GWhgq.js} +1 -1
  106. package/build/assets/{planner-tab-YG0bGxDY.js → planner-tab-DeO7Thb0.js} +1 -1
  107. package/build/assets/{plugins-management-service-ijhH8OSh.js → plugins-management-service-C9f75R6X.js} +1 -1
  108. package/build/assets/plus-CtzlyAoF.js +1 -0
  109. package/build/assets/{profiles-service.api-C32pPm70.js → profiles-service.api-Dl20_2IM.js} +1 -1
  110. package/build/assets/{providers-DuSn9s2i.js → providers-CeuhK46N.js} +1 -1
  111. package/build/assets/{proxy-BiyDhMBd.js → proxy-CIGI9zQC.js} +1 -1
  112. package/build/assets/{puzzle-DlqT0yvr.js → puzzle-B3v361yY.js} +1 -1
  113. package/build/assets/recommended-automations-launcher-6xmbf7lh.js +1 -0
  114. package/build/assets/{refresh-cw-Br5254f4.js → refresh-cw-B9GhC3QC.js} +1 -1
  115. package/build/assets/root-BQPNqNvD.js +2 -0
  116. package/build/assets/root-BeuHFY2s.css +1 -0
  117. package/build/assets/root-layout-Dl_2CDoq.js +3 -0
  118. package/build/assets/{schema-field-htfNouTG.js → schema-field-z2vSLuLo.js} +1 -1
  119. package/build/assets/{sdk-section-page-D0K1dBQY.js → sdk-section-page-BnCXAytf.js} +1 -1
  120. package/build/assets/{search-7DRiGm4Z.js → search-BatSpWed.js} +1 -1
  121. package/build/assets/search-CYaiKHRp.js +1 -0
  122. package/build/assets/{secrets-service-Dbv5Zb8G.js → secrets-service-DGUNlwQd.js} +1 -1
  123. package/build/assets/{secrets-settings-Da4SSaX9.js → secrets-settings-DUmML_dK.js} +1 -1
  124. package/build/assets/segmented-toggle-eSofF7gn.js +1 -0
  125. package/build/assets/settings-CWFxymAf.js +1 -0
  126. package/build/assets/{settings-F4a09IxY.js → settings-Co-M5bK9.js} +1 -1
  127. package/build/assets/{settings-dropdown-input-jOiv5Yrk.js → settings-dropdown-input-Cx4g7Xfl.js} +1 -1
  128. package/build/assets/{settings-gear-TYXnELES.js → settings-gear-DaJj6Pde.js} +1 -1
  129. package/build/assets/{settings-index-CyJBf5NA.js → settings-index-BECdgecg.js} +1 -1
  130. package/build/assets/settings-input-BQY115xH.js +1 -0
  131. package/build/assets/settings-like-page-layout-classes-Cw4Yzv_P.js +1 -0
  132. package/build/assets/{settings-list-classes-VqMzkYYt.js → settings-list-classes-C9cLrrcc.js} +1 -1
  133. package/build/assets/{settings-modal-C-S1NpbC.js → settings-modal-ChBJNTdd.js} +1 -1
  134. package/build/assets/{settings-section-header-context-CnIIQAUn.js → settings-section-header-context-BOJ_Fbak.js} +1 -1
  135. package/build/assets/settings-service.api-Dz9cZyvx.js +1 -0
  136. package/build/assets/{settings-switch-B405oU_v.js → settings-switch-BIodMVz9.js} +1 -1
  137. package/build/assets/shared-conversation-CSF0aTuE.js +1 -0
  138. package/build/assets/{sidebar-layout-BGMuyC86.js → sidebar-layout-DEycoFd_.js} +1 -1
  139. package/build/assets/sidebar-mobile-menu-toggle-DeRvTupV.js +1 -0
  140. package/build/assets/{sidebar-nav-link-DA4_ct9G.js → sidebar-nav-link-BjpQ-NVc.js} +1 -1
  141. package/build/assets/{sidebar-store-FRJ3rADB.js → sidebar-store-B04sX8aP.js} +1 -1
  142. package/build/assets/{skill-card-pill-row-BMdhr_sd.js → skill-card-pill-row-BH6fPGba.js} +1 -1
  143. package/build/assets/{skill-icon-badge-CGUkgcVH.js → skill-icon-badge-D4uznfjU.js} +1 -1
  144. package/build/assets/skill-scope-DH_AUUUP.js +1 -0
  145. package/build/assets/{skills-CYFLsN5U.js → skills-B0IliMxw.js} +1 -1
  146. package/build/assets/{skills-plugins-C5eJnyft.js → skills-plugins-vfvOk34h.js} +1 -1
  147. package/build/assets/skills-settings-DnbIu2eO.js +2 -0
  148. package/build/assets/sparkles-g7y3r-Ut.js +1 -0
  149. package/build/assets/{styled-tooltip-B3kIdVyH.js → styled-tooltip-CQ9JEFiO.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-B3k4W1cK.js → task-list-tab-DeF_uXdw.js} +1 -1
  153. package/build/assets/{terminal-cMS3RgVE.js → terminal-BUpID2wS.js} +1 -1
  154. package/build/assets/{terminal-CBI_41Zc.js → terminal-DRc4rup7.js} +1 -1
  155. package/build/assets/{toggle-switch-DYRr9CAR.js → toggle-switch--8n8NeV_.js} +1 -1
  156. package/build/assets/{trash-2-gZPlx23R.js → trash-2-CzDVN-Iw.js} +1 -1
  157. package/build/assets/{typography-B1UxuuEC.js → typography-BSbUhJPn.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-CjSvKWFH.js → use-acp-credential-form-BGKFi1VL.js} +1 -1
  162. package/build/assets/{use-activate-agent-profile-DCRf47e-.js → use-activate-agent-profile-2nvALjC-.js} +1 -1
  163. package/build/assets/use-agent-profiles-BlQA67MW.js +1 -0
  164. package/build/assets/{use-breakpoint-DA7JqsRN.js → use-breakpoint-DWtihr9g.js} +1 -1
  165. package/build/assets/{use-can-manage-org-profiles-vBiP7rHF.js → use-can-manage-org-profiles-Clw5Dh1s.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-BMq9gw93.js → use-cloud-current-user-id-B8AQSQFM.js} +1 -1
  168. package/build/assets/use-config-C3zGuUQI.js +1 -0
  169. package/build/assets/{use-create-conversation-CakhLF0X.js → use-create-conversation-FaP0kUpg.js} +1 -1
  170. package/build/assets/{use-create-secret-RT4QtSS9.js → use-create-secret-CgQ3pXd6.js} +1 -1
  171. package/build/assets/use-is-authed-Bka89Xmm.js +1 -0
  172. package/build/assets/{use-is-creating-conversation-CIAcnd8M.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-C-tDO6UB.js +1 -0
  175. package/build/assets/use-manifest-capabilities-DLP5wCxp.js +1 -0
  176. package/build/assets/{use-onboarding-completion-CJU4MNAY.js → use-onboarding-completion-BiCdXvlU.js} +1 -1
  177. package/build/assets/{use-plugins-marketplace-D-93nqtJ.js → use-plugins-marketplace-DRFNLBlr.js} +1 -1
  178. package/build/assets/use-save-agent-profile-CaGVAudI.js +1 -0
  179. package/build/assets/{use-save-settings--C6LZXfI.js → use-save-settings-C9B8Y-h3.js} +1 -1
  180. package/build/assets/{use-settings-DIAo5KFk.js → use-settings-3RcgdUuZ.js} +1 -1
  181. package/build/assets/use-settings-nav-items-y-Oyc93G.js +16 -0
  182. package/build/assets/use-tracking-CTtkLAmx.js +3 -0
  183. package/build/assets/{use-user-conversation-DhcAEyJX.js → use-user-conversation-Bei82QsZ.js} +1 -1
  184. package/build/assets/useInfiniteQuery-DbCv0Jzd.js +1 -0
  185. package/build/assets/{useMutation-DHLpZ6J0.js → useMutation-ChpkYxI5.js} +1 -1
  186. package/build/assets/{useQueries-B3T1a7qt.js → useQueries-Cjv3E8_1.js} +1 -1
  187. package/build/assets/useQuery-BCnzy4LX.js +1 -0
  188. package/build/assets/utils-BX9XJ0IE.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-Di4qO77Y.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~g4xrpilz-CYPMCkX1.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-atebg0iG.js → vendor~files-tab-C87pjSpi.js} +1 -1
  200. package/build/assets/{vendor~index-home~home~conversation-panel~conversation-G9DMrR7m.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-DEhW1h3I.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-CjECvSl5.js +1 -0
  208. package/build/assets/vendor~root-layout~index-home~home~conversation-panel~conversation~shared-conversation-CQR5Sa0H.js +1 -0
  209. package/build/assets/vendor~root-layout~index-home~home~mcp~automations-list~automation-templates~automation-set~bxsimjx0-D7IDevqN.js +1 -0
  210. package/build/assets/{vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~hakxo2tj-ClV0p9g3.js → vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~gxu4j2ea-Cwhh3zLe.js} +1 -1
  211. package/build/assets/{vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~bi2r7bko-VFnwct3q.js → vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~hjcjabwg-CuQhkiS7.js} +1 -1
  212. package/build/assets/vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~skills-setti~9pstowjp-BOVIFA_g.js +73 -0
  213. package/build/assets/{vendor~root-layout~index-home~home~conversation-panel~conversation~launch~skills-settings~a~eywn6ulz-BKxxr74w.js → vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~skills-setti~ht43enc2-C0JXQb_q.js} +175 -54
  214. package/build/assets/{verification-settings-Vr5cN4md.js → verification-settings-nD61Ijph.js} +1 -1
  215. package/build/assets/wrench-DRitTfwe.js +1 -0
  216. package/build/assets/x-RYDBg-e2.js +1 -0
  217. package/build/assets/{x-mark-jcTkPiOB.js → x-mark-BopmFoBq.js} +1 -1
  218. package/build/assets/zap-tbKDzCe3.js +1 -0
  219. package/build/index.html +4 -4
  220. package/build/locales/ar/openhands.json +106 -5
  221. package/build/locales/ca/openhands.json +106 -5
  222. package/build/locales/de/openhands.json +106 -5
  223. package/build/locales/en/openhands.json +107 -6
  224. package/build/locales/es/openhands.json +106 -5
  225. package/build/locales/fr/openhands.json +106 -5
  226. package/build/locales/it/openhands.json +106 -5
  227. package/build/locales/ja/openhands.json +106 -5
  228. package/build/locales/ko-KR/openhands.json +106 -5
  229. package/build/locales/no/openhands.json +106 -5
  230. package/build/locales/pt/openhands.json +106 -5
  231. package/build/locales/tr/openhands.json +106 -5
  232. package/build/locales/uk/openhands.json +106 -5
  233. package/build/locales/zh-CN/openhands.json +106 -5
  234. package/build/locales/zh-TW/openhands.json +106 -5
  235. package/build/mockServiceWorker.js +21 -9
  236. package/config/defaults.json +3 -3
  237. package/dist/api/agent-server-adapter.cjs +3 -3
  238. package/dist/api/agent-server-adapter.cjs.map +1 -1
  239. package/dist/api/agent-server-adapter.d.ts +46 -6
  240. package/dist/api/agent-server-adapter.js +187 -168
  241. package/dist/api/agent-server-adapter.js.map +1 -1
  242. package/dist/api/agent-server-compatibility.cjs +1 -1
  243. package/dist/api/agent-server-compatibility.cjs.map +1 -1
  244. package/dist/api/agent-server-compatibility.d.ts +4 -0
  245. package/dist/api/agent-server-compatibility.js +41 -38
  246. package/dist/api/agent-server-compatibility.js.map +1 -1
  247. package/dist/api/automation-service/automation-service.api.cjs +1 -1
  248. package/dist/api/automation-service/automation-service.api.cjs.map +1 -1
  249. package/dist/api/automation-service/automation-service.api.d.ts +25 -0
  250. package/dist/api/automation-service/automation-service.api.js +110 -62
  251. package/dist/api/automation-service/automation-service.api.js.map +1 -1
  252. package/dist/api/backend-registry/active-store.cjs +1 -1
  253. package/dist/api/backend-registry/active-store.cjs.map +1 -1
  254. package/dist/api/backend-registry/active-store.js +36 -31
  255. package/dist/api/backend-registry/active-store.js.map +1 -1
  256. package/dist/api/backend-registry/url-selection.cjs +2 -0
  257. package/dist/api/backend-registry/url-selection.cjs.map +1 -0
  258. package/dist/api/backend-registry/url-selection.d.ts +31 -0
  259. package/dist/api/backend-registry/url-selection.js +29 -0
  260. package/dist/api/backend-registry/url-selection.js.map +1 -0
  261. package/dist/api/mcp-service/mcp-redacted-credentials.cjs +1 -1
  262. package/dist/api/mcp-service/mcp-redacted-credentials.cjs.map +1 -1
  263. package/dist/api/mcp-service/mcp-redacted-credentials.d.ts +3 -2
  264. package/dist/api/mcp-service/mcp-redacted-credentials.js +32 -27
  265. package/dist/api/mcp-service/mcp-redacted-credentials.js.map +1 -1
  266. package/dist/api/mcp-service/mcp-service.api.cjs +1 -1
  267. package/dist/api/mcp-service/mcp-service.api.cjs.map +1 -1
  268. package/dist/api/mcp-service/mcp-service.api.js +19 -19
  269. package/dist/api/mcp-service/mcp-service.api.js.map +1 -1
  270. package/dist/api/settings-service/settings-service.api.cjs +1 -1
  271. package/dist/api/settings-service/settings-service.api.cjs.map +1 -1
  272. package/dist/api/settings-service/settings-service.api.d.ts +10 -0
  273. package/dist/api/settings-service/settings-service.api.js +90 -100
  274. package/dist/api/settings-service/settings-service.api.js.map +1 -1
  275. package/dist/api/skills-service.cjs +1 -1
  276. package/dist/api/skills-service.cjs.map +1 -1
  277. package/dist/api/skills-service.js +1 -0
  278. package/dist/api/skills-service.js.map +1 -1
  279. package/dist/assets/chevron-left.d.ts +1 -1
  280. package/dist/assets/chevron-right.d.ts +1 -1
  281. package/dist/components/conversation-events/chat/event-content-helpers/get-action-event-title.cjs +2 -0
  282. package/dist/components/conversation-events/chat/event-content-helpers/get-action-event-title.cjs.map +1 -0
  283. package/dist/components/conversation-events/chat/event-content-helpers/get-action-event-title.d.ts +12 -0
  284. package/dist/components/conversation-events/chat/event-content-helpers/get-action-event-title.js +94 -0
  285. package/dist/components/conversation-events/chat/event-content-helpers/get-action-event-title.js.map +1 -0
  286. package/dist/components/conversation-events/chat/event-content-helpers/get-event-content.cjs +1 -1
  287. package/dist/components/conversation-events/chat/event-content-helpers/get-event-content.cjs.map +1 -1
  288. package/dist/components/conversation-events/chat/event-content-helpers/get-event-content.js +31 -90
  289. package/dist/components/conversation-events/chat/event-content-helpers/get-event-content.js.map +1 -1
  290. package/dist/components/conversation-events/chat/event-message-components/collapsible-thinking.d.ts +2 -1
  291. package/dist/components/conversation-events/chat/event-message-components/critic-result-display.d.ts +2 -1
  292. package/dist/components/conversation-events/chat/event-message-components/error-event-message.d.ts +2 -1
  293. package/dist/components/conversation-events/chat/event-message-components/event-group.d.ts +1 -1
  294. package/dist/components/conversation-events/chat/event-message-components/finish-event-message.d.ts +1 -1
  295. package/dist/components/conversation-events/chat/event-message-components/generic-event-message-wrapper.d.ts +1 -1
  296. package/dist/components/conversation-events/chat/event-message-components/observation-pair-event-message.d.ts +2 -1
  297. package/dist/components/conversation-events/chat/event-message-components/skill-item-expanded.d.ts +1 -1
  298. package/dist/components/conversation-events/chat/event-message-components/skill-ready-content-list.d.ts +2 -1
  299. package/dist/components/conversation-events/chat/event-message-components/thought-event-message.d.ts +1 -1
  300. package/dist/components/conversation-events/chat/event-message-components/user-assistant-event-message.d.ts +2 -1
  301. package/dist/components/conversation-events/chat/event-message.d.ts +2 -1
  302. package/dist/components/conversation-events/chat/task-tracking/task-item.d.ts +1 -1
  303. package/dist/components/conversation-events/chat/task-tracking/task-list-section.d.ts +1 -1
  304. package/dist/components/features/alerts/alert-banner.d.ts +1 -1
  305. package/dist/components/features/analytics/telemetry-consent-banner.d.ts +2 -1
  306. package/dist/components/features/automations/add-automation-modal.d.ts +1 -1
  307. package/dist/components/features/automations/automation-card-skeleton.d.ts +1 -1
  308. package/dist/components/features/automations/automation-card.d.ts +9 -1
  309. package/dist/components/features/automations/automation-group.d.ts +9 -1
  310. package/dist/components/features/automations/automation-health-badge.d.ts +8 -0
  311. package/dist/components/features/automations/automation-list-row.d.ts +3 -1
  312. package/dist/components/features/automations/automation-run-insights.d.ts +17 -0
  313. package/dist/components/features/automations/automation-view-toggle.d.ts +1 -1
  314. package/dist/components/features/automations/backend-not-configured.d.ts +1 -1
  315. package/dist/components/features/automations/create-instructions.d.ts +2 -2
  316. package/dist/components/features/automations/dashboard/automations-dashboard-controls.d.ts +18 -0
  317. package/dist/components/features/automations/dashboard/automations-filtered-empty-state.d.ts +9 -0
  318. package/dist/components/features/automations/dashboard/use-automation-sub-page-nav.d.ts +12 -0
  319. package/dist/components/features/automations/delete-confirmation-modal.d.ts +1 -1
  320. package/dist/components/features/automations/detail/active-status-badge.d.ts +1 -1
  321. package/dist/components/features/automations/detail/activity-log-item.d.ts +1 -1
  322. package/dist/components/features/automations/detail/activity-log-section.d.ts +3 -1
  323. package/dist/components/features/automations/detail/activity-section.d.ts +1 -1
  324. package/dist/components/features/automations/detail/back-link.d.ts +1 -1
  325. package/dist/components/features/automations/detail/branch-badge.d.ts +1 -1
  326. package/dist/components/features/automations/detail/config-field.d.ts +1 -1
  327. package/dist/components/features/automations/detail/configuration-section.d.ts +1 -1
  328. package/dist/components/features/automations/detail/debug-automation-button.d.ts +1 -1
  329. package/dist/components/features/automations/detail/detail-header.d.ts +1 -1
  330. package/dist/components/features/automations/detail/detail-skeleton.d.ts +1 -1
  331. package/dist/components/features/automations/detail/edit-automation-modal.d.ts +1 -1
  332. package/dist/components/features/automations/detail/not-found-state.d.ts +1 -1
  333. package/dist/components/features/automations/detail/plugin-chip.d.ts +1 -1
  334. package/dist/components/features/automations/detail/plugins-section.d.ts +1 -1
  335. package/dist/components/features/automations/detail/prompt-section.d.ts +2 -1
  336. package/dist/components/features/automations/detail/run-logs-modal.d.ts +1 -1
  337. package/dist/components/features/automations/detail/run-status-badge.d.ts +10 -1
  338. package/dist/components/features/automations/detail/section-card.d.ts +1 -1
  339. package/dist/components/features/automations/empty-state.d.ts +1 -1
  340. package/dist/components/features/automations/error-state.d.ts +1 -1
  341. package/dist/components/features/automations/import-automation-modal.d.ts +1 -1
  342. package/dist/components/features/automations/kebab-menu-item-content.d.ts +1 -1
  343. package/dist/components/features/automations/kebab-menu.d.ts +1 -1
  344. package/dist/components/features/automations/metadata-chip.d.ts +1 -1
  345. package/dist/components/features/automations/recommended-automations-launcher.d.ts +1 -8
  346. package/dist/components/features/automations/recommended-automations-section.d.ts +1 -7
  347. package/dist/components/features/automations/responder-deployment-modal.d.ts +1 -1
  348. package/dist/components/features/automations/search-input.d.ts +1 -1
  349. package/dist/components/features/automations/status-badge.d.ts +1 -1
  350. package/dist/components/features/automations/turn-off-confirmation-modal.d.ts +8 -0
  351. package/dist/components/features/automations/view-menu-item-content.d.ts +1 -1
  352. package/dist/components/features/backends/add-backend-modal.d.ts +1 -1
  353. package/dist/components/features/backends/api-key-entry-screen.d.ts +2 -1
  354. package/dist/components/features/backends/backend-form-modal.cjs +1 -1
  355. package/dist/components/features/backends/backend-form-modal.cjs.map +1 -1
  356. package/dist/components/features/backends/backend-form-modal.d.ts +3 -3
  357. package/dist/components/features/backends/backend-form-modal.js +568 -358
  358. package/dist/components/features/backends/backend-form-modal.js.map +1 -1
  359. package/dist/components/features/backends/backend-row.d.ts +1 -1
  360. package/dist/components/features/backends/backend-selector.d.ts +2 -1
  361. package/dist/components/features/backends/backend-status-dot.d.ts +2 -1
  362. package/dist/components/features/backends/backend-version.d.ts +1 -1
  363. package/dist/components/features/backends/device-flow-auth.cjs +1 -1
  364. package/dist/components/features/backends/device-flow-auth.cjs.map +1 -1
  365. package/dist/components/features/backends/device-flow-auth.d.ts +9 -1
  366. package/dist/components/features/backends/device-flow-auth.js +56 -55
  367. package/dist/components/features/backends/device-flow-auth.js.map +1 -1
  368. package/dist/components/features/backends/manage-backends-modal.cjs +1 -1
  369. package/dist/components/features/backends/manage-backends-modal.cjs.map +1 -1
  370. package/dist/components/features/backends/manage-backends-modal.d.ts +2 -1
  371. package/dist/components/features/backends/manage-backends-modal.js +1 -1
  372. package/dist/components/features/backends/manage-backends-modal.js.map +1 -1
  373. package/dist/components/features/browser/browser-chrome-bar.d.ts +1 -1
  374. package/dist/components/features/browser/browser-snapshot.d.ts +1 -1
  375. package/dist/components/features/browser/browser.d.ts +1 -1
  376. package/dist/components/features/browser/empty-browser-message.d.ts +1 -1
  377. package/dist/components/features/chat/btw-messages.d.ts +1 -1
  378. package/dist/components/features/chat/change-agent-button.d.ts +2 -1
  379. package/dist/components/features/chat/change-agent-context-menu.d.ts +1 -1
  380. package/dist/components/features/chat/chat-action-tooltip.d.ts +1 -1
  381. package/dist/components/features/chat/chat-add-file-button.d.ts +2 -1
  382. package/dist/components/features/chat/chat-interface.cjs +1 -1
  383. package/dist/components/features/chat/chat-interface.cjs.map +1 -1
  384. package/dist/components/features/chat/chat-interface.d.ts +2 -1
  385. package/dist/components/features/chat/chat-interface.js +105 -105
  386. package/dist/components/features/chat/chat-interface.js.map +1 -1
  387. package/dist/components/features/chat/chat-message.cjs +1 -1
  388. package/dist/components/features/chat/chat-message.cjs.map +1 -1
  389. package/dist/components/features/chat/chat-message.d.ts +2 -1
  390. package/dist/components/features/chat/chat-message.js +59 -49
  391. package/dist/components/features/chat/chat-message.js.map +1 -1
  392. package/dist/components/features/chat/chat-messages-skeleton.d.ts +2 -1
  393. package/dist/components/features/chat/chat-play-button.d.ts +1 -1
  394. package/dist/components/features/chat/chat-send-button.d.ts +1 -1
  395. package/dist/components/features/chat/chat-status-indicator.d.ts +1 -1
  396. package/dist/components/features/chat/chat-stop-button.d.ts +1 -1
  397. package/dist/components/features/chat/chat-suggestions.d.ts +1 -1
  398. package/dist/components/features/chat/components/chat-input-actions.d.ts +2 -1
  399. package/dist/components/features/chat/components/chat-input-container.d.ts +1 -1
  400. package/dist/components/features/chat/components/chat-input-field.d.ts +1 -1
  401. package/dist/components/features/chat/components/chat-input-grip.d.ts +1 -1
  402. package/dist/components/features/chat/components/chat-input-llm-profile-picker.d.ts +3 -2
  403. package/dist/components/features/chat/components/chat-input-model.d.ts +3 -2
  404. package/dist/components/features/chat/components/chat-input-profile-picker.d.ts +1 -1
  405. package/dist/components/features/chat/components/chat-input-row.d.ts +1 -1
  406. package/dist/components/features/chat/components/hidden-file-input.d.ts +1 -1
  407. package/dist/components/features/chat/components/slash-command-menu.d.ts +2 -1
  408. package/dist/components/features/chat/confirmation-mode-enabled.d.ts +1 -1
  409. package/dist/components/features/chat/custom-chat-input.d.ts +1 -1
  410. package/dist/components/features/chat/drag-over.d.ts +1 -1
  411. package/dist/components/features/chat/error-message-banner.d.ts +2 -1
  412. package/dist/components/features/chat/error-message.d.ts +2 -1
  413. package/dist/components/features/chat/generic-event-message.d.ts +1 -1
  414. package/dist/components/features/chat/git-control-bar-branch-button.d.ts +1 -1
  415. package/dist/components/features/chat/git-control-bar-pr-button.d.ts +1 -1
  416. package/dist/components/features/chat/git-control-bar-pull-button.d.ts +1 -1
  417. package/dist/components/features/chat/git-control-bar-push-button.d.ts +1 -1
  418. package/dist/components/features/chat/git-control-bar-repo-button.d.ts +1 -1
  419. package/dist/components/features/chat/git-control-bar-tooltip-wrapper.d.ts +1 -1
  420. package/dist/components/features/chat/git-control-bar.d.ts +1 -1
  421. package/dist/components/features/chat/git-external-link-icon.d.ts +1 -1
  422. package/dist/components/features/chat/goal-status-banner.d.ts +1 -1
  423. package/dist/components/features/chat/goal-status-content.d.ts +1 -1
  424. package/dist/components/features/chat/got-it-button.d.ts +1 -1
  425. package/dist/components/features/chat/interactive-chat-box.d.ts +1 -1
  426. package/dist/components/features/chat/model-messages.d.ts +2 -1
  427. package/dist/components/features/chat/mono-component.d.ts +1 -1
  428. package/dist/components/features/chat/open-repository-modal.d.ts +2 -1
  429. package/dist/components/features/chat/pasted-image-upload-as-file-button.d.ts +1 -1
  430. package/dist/components/features/chat/path-component.d.ts +1 -1
  431. package/dist/components/features/chat/pending-stop-icon.d.ts +1 -1
  432. package/dist/components/features/chat/pending-user-messages.cjs +1 -1
  433. package/dist/components/features/chat/pending-user-messages.cjs.map +1 -1
  434. package/dist/components/features/chat/pending-user-messages.d.ts +2 -1
  435. package/dist/components/features/chat/pending-user-messages.js +4 -1
  436. package/dist/components/features/chat/pending-user-messages.js.map +1 -1
  437. package/dist/components/features/chat/plan-preview.d.ts +1 -1
  438. package/dist/components/features/chat/remove-file-button.d.ts +1 -1
  439. package/dist/components/features/chat/skill-install-restart-banner.d.ts +1 -1
  440. package/dist/components/features/chat/success-indicator.d.ts +1 -1
  441. package/dist/components/features/chat/task-tracking/status-badge.d.ts +1 -1
  442. package/dist/components/features/chat/task-tracking/status-icon.d.ts +1 -1
  443. package/dist/components/features/chat/task-tracking/task-item.d.ts +1 -1
  444. package/dist/components/features/chat/task-tracking/task-list-section.d.ts +1 -1
  445. package/dist/components/features/chat/tool-visualizers/primitives/code-block.d.ts +2 -1
  446. package/dist/components/features/chat/tool-visualizers/primitives/diff-view.d.ts +2 -1
  447. package/dist/components/features/chat/tool-visualizers/primitives/file-path-chip.d.ts +2 -1
  448. package/dist/components/features/chat/tool-visualizers/primitives/key-value-grid.d.ts +1 -1
  449. package/dist/components/features/chat/tool-visualizers/primitives/output-pane.d.ts +2 -1
  450. package/dist/components/features/chat/typing-indicator.cjs +1 -1
  451. package/dist/components/features/chat/typing-indicator.cjs.map +1 -1
  452. package/dist/components/features/chat/typing-indicator.d.ts +8 -1
  453. package/dist/components/features/chat/typing-indicator.js +94 -10
  454. package/dist/components/features/chat/typing-indicator.js.map +1 -1
  455. package/dist/components/features/chat/uploaded-file.d.ts +1 -1
  456. package/dist/components/features/chat/uploaded-files.d.ts +1 -1
  457. package/dist/components/features/chat/uploaded-image.d.ts +2 -1
  458. package/dist/components/features/chat/user-message-body.d.ts +2 -2
  459. package/dist/components/features/chat/waiting-for-runtime-message.d.ts +1 -1
  460. package/dist/components/features/chat/workspace-mode-icon.d.ts +1 -1
  461. package/dist/components/features/chat/workspace-mode-selector.d.ts +1 -1
  462. package/dist/components/features/command-menu/command-menu-items.d.ts +5 -1
  463. package/dist/components/features/command-menu/command-menu-trigger.d.ts +2 -1
  464. package/dist/components/features/context-menu/archived-disabled-tooltip.d.ts +1 -1
  465. package/dist/components/features/context-menu/context-menu-icon-text-with-description.d.ts +1 -1
  466. package/dist/components/features/context-menu/context-menu-icon-text.d.ts +1 -1
  467. package/dist/components/features/context-menu/context-menu-list-item.cjs +1 -1
  468. package/dist/components/features/context-menu/context-menu-list-item.cjs.map +1 -1
  469. package/dist/components/features/context-menu/context-menu-list-item.d.ts +2 -1
  470. package/dist/components/features/context-menu/context-menu-list-item.js +2 -1
  471. package/dist/components/features/context-menu/context-menu-list-item.js.map +1 -1
  472. package/dist/components/features/controls/agent-loading.d.ts +1 -1
  473. package/dist/components/features/controls/agent-status.d.ts +1 -1
  474. package/dist/components/features/controls/git-tools-submenu.d.ts +1 -1
  475. package/dist/components/features/controls/macros-submenu.d.ts +1 -1
  476. package/dist/components/features/controls/server-status-context-menu-icon-text.d.ts +1 -1
  477. package/dist/components/features/controls/server-status-context-menu.d.ts +1 -1
  478. package/dist/components/features/controls/server-status.d.ts +1 -1
  479. package/dist/components/features/controls/tools-context-menu-icon-text.d.ts +1 -1
  480. package/dist/components/features/controls/tools-context-menu.d.ts +1 -1
  481. package/dist/components/features/controls/tools.d.ts +2 -1
  482. package/dist/components/features/conversation/conversation-loading.d.ts +1 -1
  483. package/dist/components/features/conversation/conversation-main/chat-interface-wrapper.d.ts +1 -1
  484. package/dist/components/features/conversation/conversation-main/conversation-main.d.ts +1 -1
  485. package/dist/components/features/conversation/conversation-main/conversation-mobile-panel-page.d.ts +2 -1
  486. package/dist/components/features/conversation/conversation-name-context-menu-icon-text.d.ts +1 -1
  487. package/dist/components/features/conversation/conversation-name-context-menu.d.ts +1 -1
  488. package/dist/components/features/conversation/conversation-name-with-status.d.ts +2 -1
  489. package/dist/components/features/conversation/conversation-name.d.ts +2 -1
  490. package/dist/components/features/conversation/conversation-tab-empty-state.d.ts +1 -1
  491. package/dist/components/features/conversation/conversation-tabs/conversation-tab-content/conversation-tab-content-crossfade.d.ts +1 -1
  492. package/dist/components/features/conversation/conversation-tabs/conversation-tab-content/conversation-tab-content.d.ts +1 -1
  493. package/dist/components/features/conversation/conversation-tabs/conversation-tab-content/suspense-pending-fallback.d.ts +1 -1
  494. package/dist/components/features/conversation/conversation-tabs/conversation-tab-content/tab-container.d.ts +1 -1
  495. package/dist/components/features/conversation/conversation-tabs/conversation-tab-content/tab-content-area.d.ts +1 -1
  496. package/dist/components/features/conversation/conversation-tabs/conversation-tab-content/tab-wrapper.d.ts +1 -1
  497. package/dist/components/features/conversation/conversation-tabs/conversation-tab-nav.d.ts +1 -1
  498. package/dist/components/features/conversation/conversation-tabs/conversation-tabs-context-menu.d.ts +1 -1
  499. package/dist/components/features/conversation/conversation-tabs/conversation-tabs.d.ts +1 -1
  500. package/dist/components/features/conversation/conversation-tabs/drawer-vscode-link.d.ts +1 -1
  501. package/dist/components/features/conversation/metrics-modal/context-window-section.d.ts +1 -1
  502. package/dist/components/features/conversation/metrics-modal/cost-section.d.ts +1 -1
  503. package/dist/components/features/conversation/metrics-modal/empty-state.d.ts +1 -1
  504. package/dist/components/features/conversation/metrics-modal/metric-row.d.ts +1 -1
  505. package/dist/components/features/conversation/metrics-modal/metrics-modal-header.d.ts +1 -1
  506. package/dist/components/features/conversation/metrics-modal/metrics-modal.d.ts +1 -1
  507. package/dist/components/features/conversation/metrics-modal/usage-section.d.ts +1 -1
  508. package/dist/components/features/conversation/right-panel-toggle.d.ts +1 -1
  509. package/dist/components/features/conversation/transcript-export-modal.d.ts +2 -1
  510. package/dist/components/features/conversation-panel/budget-display.d.ts +2 -1
  511. package/dist/components/features/conversation-panel/budget-progress-bar.d.ts +1 -1
  512. package/dist/components/features/conversation-panel/budget-usage-text.d.ts +2 -1
  513. package/dist/components/features/conversation-panel/cloud-new-conversation-menu.d.ts +1 -1
  514. package/dist/components/features/conversation-panel/compact-conversation-row.cjs +1 -1
  515. package/dist/components/features/conversation-panel/compact-conversation-row.cjs.map +1 -1
  516. package/dist/components/features/conversation-panel/compact-conversation-row.d.ts +2 -1
  517. package/dist/components/features/conversation-panel/compact-conversation-row.js +38 -37
  518. package/dist/components/features/conversation-panel/compact-conversation-row.js.map +1 -1
  519. package/dist/components/features/conversation-panel/confirm-delete-modal.d.ts +1 -1
  520. package/dist/components/features/conversation-panel/confirm-stop-modal.d.ts +1 -1
  521. package/dist/components/features/conversation-panel/conversation-card/conversation-card-actions.d.ts +1 -1
  522. package/dist/components/features/conversation-panel/conversation-card/conversation-card-context-menu.d.ts +1 -1
  523. package/dist/components/features/conversation-panel/conversation-card/conversation-card-footer.d.ts +1 -1
  524. package/dist/components/features/conversation-panel/conversation-card/conversation-card-header.d.ts +1 -1
  525. package/dist/components/features/conversation-panel/conversation-card/conversation-card-preview.d.ts +1 -1
  526. package/dist/components/features/conversation-panel/conversation-card/conversation-card-skeleton.d.ts +1 -1
  527. package/dist/components/features/conversation-panel/conversation-card/conversation-card-title.d.ts +1 -1
  528. package/dist/components/features/conversation-panel/conversation-card/conversation-card.d.ts +2 -1
  529. package/dist/components/features/conversation-panel/conversation-card/conversation-repo-link.d.ts +1 -1
  530. package/dist/components/features/conversation-panel/conversation-card/conversation-status-badges.d.ts +1 -1
  531. package/dist/components/features/conversation-panel/conversation-card/no-repository.d.ts +1 -1
  532. package/dist/components/features/conversation-panel/conversation-group-folder-list.d.ts +1 -1
  533. package/dist/components/features/conversation-panel/conversation-group-folder-row.d.ts +1 -1
  534. package/dist/components/features/conversation-panel/conversation-panel-filter-menu.d.ts +1 -1
  535. package/dist/components/features/conversation-panel/conversation-panel-new-thread-picker.d.ts +1 -1
  536. package/dist/components/features/conversation-panel/conversation-panel-pinned-section.d.ts +1 -1
  537. package/dist/components/features/conversation-panel/conversation-panel.cjs +1 -1
  538. package/dist/components/features/conversation-panel/conversation-panel.cjs.map +1 -1
  539. package/dist/components/features/conversation-panel/conversation-panel.d.ts +2 -1
  540. package/dist/components/features/conversation-panel/conversation-panel.js +221 -220
  541. package/dist/components/features/conversation-panel/conversation-panel.js.map +1 -1
  542. package/dist/components/features/conversation-panel/conversation-status-dot.d.ts +1 -1
  543. package/dist/components/features/conversation-panel/exit-conversation-modal.d.ts +1 -1
  544. package/dist/components/features/conversation-panel/hook-event-item.d.ts +1 -1
  545. package/dist/components/features/conversation-panel/hook-matcher-content.d.ts +1 -1
  546. package/dist/components/features/conversation-panel/hooks-empty-state.d.ts +1 -1
  547. package/dist/components/features/conversation-panel/hooks-loading-state.d.ts +1 -1
  548. package/dist/components/features/conversation-panel/hooks-modal-header.d.ts +1 -1
  549. package/dist/components/features/conversation-panel/hooks-modal.d.ts +1 -1
  550. package/dist/components/features/conversation-panel/local-new-conversation-menu.d.ts +1 -1
  551. package/dist/components/features/conversation-panel/menu-heading.d.ts +1 -1
  552. package/dist/components/features/conversation-panel/menu-row.d.ts +1 -1
  553. package/dist/components/features/conversation-panel/menu-separator.d.ts +1 -1
  554. package/dist/components/features/conversation-panel/new-conversation-button.d.ts +2 -1
  555. package/dist/components/features/conversation-panel/plugins-modal.d.ts +1 -1
  556. package/dist/components/features/conversation-panel/runtime-waiting-state.d.ts +1 -1
  557. package/dist/components/features/conversation-panel/skill-content.d.ts +1 -1
  558. package/dist/components/features/conversation-panel/skill-item.d.ts +1 -1
  559. package/dist/components/features/conversation-panel/skill-triggers.d.ts +1 -1
  560. package/dist/components/features/conversation-panel/skills-empty-state.d.ts +1 -1
  561. package/dist/components/features/conversation-panel/skills-loading-state.d.ts +1 -1
  562. package/dist/components/features/conversation-panel/skills-modal-header.d.ts +1 -1
  563. package/dist/components/features/conversation-panel/skills-modal-section.d.ts +1 -1
  564. package/dist/components/features/conversation-panel/skills-modal.d.ts +1 -1
  565. package/dist/components/features/conversation-panel/start-task-card/start-task-card-footer.d.ts +1 -1
  566. package/dist/components/features/conversation-panel/start-task-card/start-task-card-header.d.ts +1 -1
  567. package/dist/components/features/conversation-panel/start-task-card/start-task-card.d.ts +1 -1
  568. package/dist/components/features/conversation-panel/start-task-card/start-task-status-badge.d.ts +1 -1
  569. package/dist/components/features/conversation-panel/start-task-card/start-task-status-indicator.d.ts +1 -1
  570. package/dist/components/features/conversation-panel/system-message-modal/empty-tools-state.d.ts +1 -1
  571. package/dist/components/features/conversation-panel/system-message-modal/system-message-content.d.ts +1 -1
  572. package/dist/components/features/conversation-panel/system-message-modal/system-message-header.d.ts +1 -1
  573. package/dist/components/features/conversation-panel/system-message-modal/tab-button.d.ts +1 -1
  574. package/dist/components/features/conversation-panel/system-message-modal/tab-content.d.ts +1 -1
  575. package/dist/components/features/conversation-panel/system-message-modal/tab-navigation.d.ts +1 -1
  576. package/dist/components/features/conversation-panel/system-message-modal/toggle-button.d.ts +1 -1
  577. package/dist/components/features/conversation-panel/system-message-modal/tool-item.d.ts +1 -1
  578. package/dist/components/features/conversation-panel/system-message-modal/tool-parameters.d.ts +1 -1
  579. package/dist/components/features/conversation-panel/system-message-modal/tools-list.d.ts +1 -1
  580. package/dist/components/features/conversation-panel/system-message-modal.d.ts +1 -1
  581. package/dist/components/features/diff-viewer/commit-list.d.ts +2 -1
  582. package/dist/components/features/diff-viewer/commit-row.d.ts +2 -1
  583. package/dist/components/features/diff-viewer/diff-drawer-icon.d.ts +1 -1
  584. package/dist/components/features/diff-viewer/editor-container.d.ts +1 -1
  585. package/dist/components/features/diff-viewer/empty-changes-message.d.ts +1 -1
  586. package/dist/components/features/diff-viewer/file-diff-viewer.d.ts +2 -1
  587. package/dist/components/features/diff-viewer/loading-spinner.d.ts +1 -1
  588. package/dist/components/features/files/file-item.d.ts +1 -1
  589. package/dist/components/features/files/file-list.d.ts +2 -1
  590. package/dist/components/features/files-tab/file-content-viewer.d.ts +1 -1
  591. package/dist/components/features/files-tab/file-quick-row.d.ts +1 -1
  592. package/dist/components/features/files-tab/file-tree-view.d.ts +1 -1
  593. package/dist/components/features/files-tab/highlighted-source-view.d.ts +1 -1
  594. package/dist/components/features/files-tab/no-file-selected-message.d.ts +1 -1
  595. package/dist/components/features/files-tab/segmented-toggle.cjs +1 -1
  596. package/dist/components/features/files-tab/segmented-toggle.cjs.map +1 -1
  597. package/dist/components/features/files-tab/segmented-toggle.d.ts +3 -1
  598. package/dist/components/features/files-tab/segmented-toggle.js +17 -14
  599. package/dist/components/features/files-tab/segmented-toggle.js.map +1 -1
  600. package/dist/components/features/files-tab/tree-node.d.ts +1 -1
  601. package/dist/components/features/home/featured-automations/automation-health-indicator.d.ts +11 -0
  602. package/dist/components/features/home/featured-automations/automation-run-activity-metrics.d.ts +18 -0
  603. package/dist/components/features/home/featured-automations/automation-run-activity-sparkline.d.ts +14 -0
  604. package/dist/components/features/home/featured-automations/automation-run-health.d.ts +25 -0
  605. package/dist/components/features/home/featured-automations/build-home-automation-menu-items.d.ts +39 -0
  606. package/dist/components/features/home/featured-automations/build-pinned-automation-menu-items.d.ts +22 -0
  607. package/dist/components/features/home/featured-automations/home-automation-activity.d.ts +23 -0
  608. package/dist/components/features/home/featured-automations/home-automation-menu.d.ts +13 -0
  609. package/dist/components/features/home/featured-automations/home-automation-run-tooltip.d.ts +12 -0
  610. package/dist/components/features/home/featured-automations/pinned-automation-card.d.ts +21 -0
  611. package/dist/components/features/home/featured-automations/pinned-automations-dashboard.d.ts +6 -0
  612. package/dist/components/features/home/featured-automations/running-automations-list.d.ts +6 -0
  613. package/dist/components/features/home/git-branch-dropdown/branch-dropdown-menu.d.ts +1 -1
  614. package/dist/components/features/home/git-branch-dropdown/git-branch-dropdown.d.ts +2 -1
  615. package/dist/components/features/home/git-provider-dropdown/git-provider-dropdown.d.ts +2 -1
  616. package/dist/components/features/home/git-repo-dropdown/git-repo-dropdown.d.ts +2 -1
  617. package/dist/components/features/home/home-chat-launcher.d.ts +1 -1
  618. package/dist/components/features/home/home-git-control-bar-preview.d.ts +1 -1
  619. package/dist/components/features/home/home-header/guide-message.d.ts +1 -1
  620. package/dist/components/features/home/home-header/home-header-title.d.ts +1 -1
  621. package/dist/components/features/home/home-header/home-header.d.ts +1 -1
  622. package/dist/components/features/home/llm-not-configured-banner.d.ts +1 -1
  623. package/dist/components/features/home/new-conversation/create-conversation-button.d.ts +1 -1
  624. package/dist/components/features/home/new-conversation/new-conversation.d.ts +1 -1
  625. package/dist/components/features/home/new-conversation.d.ts +1 -1
  626. package/dist/components/features/home/open-launcher-button.d.ts +1 -1
  627. package/dist/components/features/home/open-repository-dialog.d.ts +1 -1
  628. package/dist/components/features/home/open-workspace-dialog.d.ts +1 -1
  629. package/dist/components/features/home/repo-selection-form.d.ts +2 -1
  630. package/dist/components/features/home/shared/clear-button.d.ts +2 -1
  631. package/dist/components/features/home/shared/dropdown-item.d.ts +1 -1
  632. package/dist/components/features/home/shared/empty-state.d.ts +2 -1
  633. package/dist/components/features/home/shared/error-message.d.ts +2 -1
  634. package/dist/components/features/home/shared/generic-dropdown-menu.d.ts +1 -1
  635. package/dist/components/features/home/shared/loading-spinner.d.ts +2 -1
  636. package/dist/components/features/home/shared/toggle-button.d.ts +1 -1
  637. package/dist/components/features/home/tasks/task-card.d.ts +1 -1
  638. package/dist/components/features/home/tasks/task-group.d.ts +1 -1
  639. package/dist/components/features/home/tasks/task-issue-number.d.ts +1 -1
  640. package/dist/components/features/home/tasks/task-item-title.d.ts +1 -1
  641. package/dist/components/features/home/tasks/task-suggestions-skeleton.d.ts +1 -1
  642. package/dist/components/features/home/tasks/task-suggestions.d.ts +1 -1
  643. package/dist/components/features/home/workspace-dropdown/folder-browser-modal.d.ts +2 -1
  644. package/dist/components/features/home/workspace-dropdown/manage-workspaces-modal.d.ts +2 -1
  645. package/dist/components/features/home/workspace-dropdown/workspace-dropdown.d.ts +2 -1
  646. package/dist/components/features/home/workspace-selection-form.d.ts +2 -1
  647. package/dist/components/features/images/image-carousel.d.ts +2 -1
  648. package/dist/components/features/images/image-preview.d.ts +1 -1
  649. package/dist/components/features/images/thumbnail.d.ts +1 -1
  650. package/dist/components/features/launch/plugin-launch-modal.d.ts +2 -1
  651. package/dist/components/features/launch/plugin-launch-parameter-input.d.ts +1 -1
  652. package/dist/components/features/launch/plugin-launch-plugin-section.d.ts +1 -1
  653. package/dist/components/features/manifest/manifest-form-field.d.ts +27 -0
  654. package/dist/components/features/manifest/manifest-icons.d.ts +13 -0
  655. package/dist/components/features/manifest/manifest-overview-tiles.d.ts +19 -0
  656. package/dist/components/features/manifest/manifest-prerequisites-step.d.ts +11 -0
  657. package/dist/components/features/manifest/manifest-review-step.d.ts +14 -0
  658. package/dist/components/features/manifest/manifest-setup-dialog.d.ts +14 -0
  659. package/dist/components/features/manifest/manifest-subpage-layout.d.ts +23 -0
  660. package/dist/components/features/markdown/anchor.d.ts +1 -1
  661. package/dist/components/features/markdown/blockquote.d.ts +1 -1
  662. package/dist/components/features/markdown/code.d.ts +1 -1
  663. package/dist/components/features/markdown/headings.d.ts +6 -6
  664. package/dist/components/features/markdown/horizontal-rule.d.ts +1 -1
  665. package/dist/components/features/markdown/list.d.ts +3 -3
  666. package/dist/components/features/markdown/markdown-renderer.d.ts +1 -1
  667. package/dist/components/features/markdown/markdown-table-scroll.d.ts +1 -1
  668. package/dist/components/features/markdown/paragraph.d.ts +1 -1
  669. package/dist/components/features/markdown/plan-components.d.ts +36 -36
  670. package/dist/components/features/markdown/table.d.ts +3 -3
  671. package/dist/components/features/mcp-logo-badge.d.ts +1 -1
  672. package/dist/components/features/mcp-page/custom-server-editor.cjs +1 -1
  673. package/dist/components/features/mcp-page/custom-server-editor.cjs.map +1 -1
  674. package/dist/components/features/mcp-page/custom-server-editor.d.ts +2 -1
  675. package/dist/components/features/mcp-page/custom-server-editor.js +5 -0
  676. package/dist/components/features/mcp-page/custom-server-editor.js.map +1 -1
  677. package/dist/components/features/mcp-page/install-server-modal.cjs +1 -1
  678. package/dist/components/features/mcp-page/install-server-modal.cjs.map +1 -1
  679. package/dist/components/features/mcp-page/install-server-modal.d.ts +2 -1
  680. package/dist/components/features/mcp-page/install-server-modal.js +117 -118
  681. package/dist/components/features/mcp-page/install-server-modal.js.map +1 -1
  682. package/dist/components/features/mcp-page/installed-server-card.d.ts +2 -1
  683. package/dist/components/features/mcp-page/installed-servers-section.d.ts +1 -1
  684. package/dist/components/features/mcp-page/marketplace-card.d.ts +1 -1
  685. package/dist/components/features/mcp-page/marketplace-section.d.ts +1 -1
  686. package/dist/components/features/mcp-page/mcp-logo-stack-badge.d.ts +1 -1
  687. package/dist/components/features/mcp-page/mcp-section-filter-dropdown.d.ts +1 -1
  688. package/dist/components/features/mcp-page/mcp-server-health.d.ts +2 -1
  689. package/dist/components/features/mcp-page/mcp-toolbar.d.ts +1 -1
  690. package/dist/components/features/mcp-page/save-as-secret-toggle.d.ts +1 -1
  691. package/dist/components/features/onboarding/onboarding-host.d.ts +1 -1
  692. package/dist/components/features/onboarding/onboarding-modal.d.ts +2 -1
  693. package/dist/components/features/onboarding/onboarding-progress-bar.d.ts +1 -1
  694. package/dist/components/features/onboarding/steps/check-backend-step.d.ts +2 -1
  695. package/dist/components/features/onboarding/steps/choose-agent-step.d.ts +3 -2
  696. package/dist/components/features/onboarding/steps/say-hello-step.d.ts +2 -1
  697. package/dist/components/features/onboarding/steps/setup-acp-secrets-step.d.ts +2 -1
  698. package/dist/components/features/onboarding/steps/setup-llm-step.d.ts +2 -1
  699. package/dist/components/features/plugins/add-plugin-modal.d.ts +2 -1
  700. package/dist/components/features/plugins/plugin-card.d.ts +2 -1
  701. package/dist/components/features/plugins/plugin-detail-modal.d.ts +1 -1
  702. package/dist/components/features/plugins/plugin-files-section.d.ts +2 -1
  703. package/dist/components/features/plugins/plugin-picker-card.d.ts +1 -1
  704. package/dist/components/features/plugins/plugin-picker-modal.d.ts +1 -1
  705. package/dist/components/features/plugins/plugin-picker-trigger.d.ts +1 -1
  706. package/dist/components/features/plugins/plugin-picker.d.ts +1 -1
  707. package/dist/components/features/plugins/plugins-toolbar.d.ts +1 -1
  708. package/dist/components/features/settings/acp-auth-status-banner.d.ts +1 -1
  709. package/dist/components/features/settings/acp-conflict-warnings.d.ts +2 -1
  710. package/dist/components/features/settings/acp-credentials-section.d.ts +1 -1
  711. package/dist/components/features/settings/acp-secret-field.d.ts +2 -1
  712. package/dist/components/features/settings/agent-canvas-update-card.d.ts +1 -1
  713. package/dist/components/features/settings/agent-profiles/agent-profile-actions-menu.d.ts +1 -1
  714. package/dist/components/features/settings/agent-profiles/agent-profile-row.d.ts +1 -1
  715. package/dist/components/features/settings/agent-profiles/agent-profiles-body.d.ts +1 -1
  716. package/dist/components/features/settings/agent-profiles/agent-profiles-local-view.d.ts +1 -1
  717. package/dist/components/features/settings/agent-profiles/agent-profiles-manager.d.ts +1 -1
  718. package/dist/components/features/settings/agent-profiles/delete-agent-profile-modal.d.ts +1 -1
  719. package/dist/components/features/settings/agent-server-onboarding.d.ts +2 -1
  720. package/dist/components/features/settings/api-key-modal-base.d.ts +1 -1
  721. package/dist/components/features/settings/app-settings/app-settings-inputs-skeleton.d.ts +1 -1
  722. package/dist/components/features/settings/app-settings/language-input.d.ts +1 -1
  723. package/dist/components/features/settings/app-settings/theme-input.d.ts +2 -1
  724. package/dist/components/features/settings/backend-synced-settings-badge.d.ts +1 -1
  725. package/dist/components/features/settings/banner-message.d.ts +1 -1
  726. package/dist/components/features/settings/cloud-settings-link.d.ts +1 -1
  727. package/dist/components/features/settings/input-skeleton.d.ts +1 -1
  728. package/dist/components/features/settings/integrations-settings-link.d.ts +1 -1
  729. package/dist/components/features/settings/key-status-icon.d.ts +1 -1
  730. package/dist/components/features/settings/llm-profiles/delete-profile-modal.d.ts +1 -1
  731. package/dist/components/features/settings/llm-profiles/llm-profiles-manager.d.ts +1 -1
  732. package/dist/components/features/settings/llm-profiles/llm-settings-local-view.d.ts +2 -1
  733. package/dist/components/features/settings/llm-profiles/profile-actions-menu-item.d.ts +1 -1
  734. package/dist/components/features/settings/llm-profiles/profile-actions-menu.d.ts +1 -1
  735. package/dist/components/features/settings/llm-profiles/profile-row.d.ts +1 -1
  736. package/dist/components/features/settings/llm-profiles/profiles-body.d.ts +1 -1
  737. package/dist/components/features/settings/llm-profiles/rename-profile-modal.d.ts +1 -1
  738. package/dist/components/features/settings/llm-settings/llm-settings-inputs-skeleton.d.ts +1 -1
  739. package/dist/components/features/settings/llm-settings/openai-subscription-auth-card.d.ts +2 -1
  740. package/dist/components/features/settings/mcp-settings/mcp-server-form.cjs +1 -1
  741. package/dist/components/features/settings/mcp-settings/mcp-server-form.cjs.map +1 -1
  742. package/dist/components/features/settings/mcp-settings/mcp-server-form.d.ts +2 -1
  743. package/dist/components/features/settings/mcp-settings/mcp-server-form.js +2 -1
  744. package/dist/components/features/settings/mcp-settings/mcp-server-form.js.map +1 -1
  745. package/dist/components/features/settings/mcp-settings/mcp-server-list-item.d.ts +1 -1
  746. package/dist/components/features/settings/mcp-settings/mcp-server-list.d.ts +1 -1
  747. package/dist/components/features/settings/mobile-header.d.ts +1 -1
  748. package/dist/components/features/settings/optional-tag.d.ts +1 -1
  749. package/dist/components/features/settings/sdk-settings/field-help.d.ts +1 -1
  750. package/dist/components/features/settings/sdk-settings/schema-field.d.ts +2 -1
  751. package/dist/components/features/settings/sdk-settings/sdk-section-page.d.ts +1 -1
  752. package/dist/components/features/settings/sdk-settings/view-toggle.d.ts +1 -1
  753. package/dist/components/features/settings/secrets-settings/secret-form.d.ts +2 -1
  754. package/dist/components/features/settings/secrets-settings/secret-list-item.d.ts +2 -2
  755. package/dist/components/features/settings/settings-desktop-sidebar.d.ts +1 -1
  756. package/dist/components/features/settings/settings-dropdown-input.d.ts +1 -1
  757. package/dist/components/features/settings/settings-input.cjs +1 -1
  758. package/dist/components/features/settings/settings-input.cjs.map +1 -1
  759. package/dist/components/features/settings/settings-input.d.ts +6 -0
  760. package/dist/components/features/settings/settings-input.js +13 -8
  761. package/dist/components/features/settings/settings-input.js.map +1 -1
  762. package/dist/components/features/settings/settings-layout.d.ts +1 -1
  763. package/dist/components/features/settings/settings-mobile-drawer.d.ts +1 -1
  764. package/dist/components/features/settings/settings-mobile-hub.d.ts +1 -1
  765. package/dist/components/features/settings/settings-nav-divider.d.ts +1 -1
  766. package/dist/components/features/settings/settings-nav-header.d.ts +1 -1
  767. package/dist/components/features/settings/settings-nav-link.d.ts +1 -1
  768. package/dist/components/features/settings/settings-navigation.d.ts +1 -1
  769. package/dist/components/features/settings/settings-switch.d.ts +1 -1
  770. package/dist/components/features/settings/subtext-skeleton.d.ts +1 -1
  771. package/dist/components/features/settings/switch-skeleton.d.ts +1 -1
  772. package/dist/components/features/settings/upgrade-banner.d.ts +1 -1
  773. package/dist/components/features/settings/upgrade-button.d.ts +1 -1
  774. package/dist/components/features/sidebar/avatar.d.ts +1 -1
  775. package/dist/components/features/sidebar/sidebar-collapsed-icon-slot.d.ts +1 -1
  776. package/dist/components/features/sidebar/sidebar-conversation-list.d.ts +1 -1
  777. package/dist/components/features/sidebar/sidebar-mobile-menu-bar.d.ts +1 -1
  778. package/dist/components/features/sidebar/sidebar-mobile-menu-toggle.d.ts +1 -1
  779. package/dist/components/features/sidebar/sidebar-mobile-nav-context.d.ts +1 -1
  780. package/dist/components/features/sidebar/sidebar-nav-link.d.ts +1 -1
  781. package/dist/components/features/sidebar/sidebar-rail-body.cjs +1 -1
  782. package/dist/components/features/sidebar/sidebar-rail-body.cjs.map +1 -1
  783. package/dist/components/features/sidebar/sidebar-rail-body.d.ts +1 -1
  784. package/dist/components/features/sidebar/sidebar-rail-body.js +124 -123
  785. package/dist/components/features/sidebar/sidebar-rail-body.js.map +1 -1
  786. package/dist/components/features/sidebar/sidebar.d.ts +2 -1
  787. package/dist/components/features/sidebar/user-avatar.d.ts +1 -1
  788. package/dist/components/features/skills/add-skill-modal.d.ts +2 -1
  789. package/dist/components/features/skills/extensions-mobile-hub.d.ts +1 -1
  790. package/dist/components/features/skills/extensions-navigation.d.ts +1 -1
  791. package/dist/components/features/skills/skill-card-pill-row.d.ts +1 -1
  792. package/dist/components/features/skills/skill-card.d.ts +2 -1
  793. package/dist/components/features/skills/skill-detail-modal.d.ts +2 -1
  794. package/dist/components/features/skills/skill-facet-rail.d.ts +8 -0
  795. package/dist/components/features/skills/skill-facet-row.d.ts +13 -0
  796. package/dist/components/features/skills/skill-filter.d.ts +34 -0
  797. package/dist/components/features/skills/skill-filters-modal.d.ts +10 -0
  798. package/dist/components/features/skills/skill-icon-badge.d.ts +1 -1
  799. package/dist/components/features/skills/skill-type-badge.d.ts +1 -1
  800. package/dist/components/features/skills/skills-toolbar.d.ts +3 -4
  801. package/dist/components/features/suggestions/suggestion-item.d.ts +1 -1
  802. package/dist/components/features/suggestions/suggestions.d.ts +1 -1
  803. package/dist/components/features/terminal/empty-terminal-message.d.ts +1 -1
  804. package/dist/components/features/terminal/terminal.d.ts +1 -1
  805. package/dist/components/features/tips/random-tip.d.ts +2 -1
  806. package/dist/components/providers/agent-server-ui-providers.d.ts +1 -1
  807. package/dist/components/providers/agent-server-ui-root.d.ts +1 -1
  808. package/dist/components/providers/telemetry-provider.d.ts +1 -1
  809. package/dist/components/shared/action-tooltip.d.ts +1 -1
  810. package/dist/components/shared/agent-brand-icon.d.ts +1 -1
  811. package/dist/components/shared/badge.d.ts +1 -1
  812. package/dist/components/shared/buttons/back-nav-button-content.d.ts +1 -1
  813. package/dist/components/shared/buttons/circle-plus-check-toggle.d.ts +3 -2
  814. package/dist/components/shared/buttons/conversation-confirmation-buttons.d.ts +1 -1
  815. package/dist/components/shared/buttons/copy-to-clipboard-button.d.ts +1 -1
  816. package/dist/components/shared/buttons/copyable-content-wrapper.d.ts +1 -1
  817. package/dist/components/shared/buttons/modal-button.d.ts +1 -1
  818. package/dist/components/shared/buttons/openhands-logo-button.d.ts +1 -1
  819. package/dist/components/shared/buttons/remove-button.d.ts +1 -1
  820. package/dist/components/shared/buttons/scroll-to-bottom-button.d.ts +1 -1
  821. package/dist/components/shared/buttons/styled-tooltip.d.ts +1 -1
  822. package/dist/components/shared/filters/enum-filter-dropdown.cjs +1 -1
  823. package/dist/components/shared/filters/enum-filter-dropdown.cjs.map +1 -1
  824. package/dist/components/shared/filters/enum-filter-dropdown.d.ts +6 -2
  825. package/dist/components/shared/filters/enum-filter-dropdown.js +13 -13
  826. package/dist/components/shared/filters/enum-filter-dropdown.js.map +1 -1
  827. package/dist/components/shared/git-provider-icon.d.ts +1 -1
  828. package/dist/components/shared/hook-execution-event-message.d.ts +2 -1
  829. package/dist/components/shared/loading-spinner.d.ts +1 -1
  830. package/dist/components/shared/modals/confirmation-modal.d.ts +1 -1
  831. package/dist/components/shared/modals/confirmation-modals/base-modal.d.ts +3 -3
  832. package/dist/components/shared/modals/confirmation-modals/danger-modal.d.ts +1 -1
  833. package/dist/components/shared/modals/modal-body.d.ts +1 -1
  834. package/dist/components/shared/modals/modal-close-button.d.ts +1 -1
  835. package/dist/components/shared/modals/settings/model-selector.d.ts +2 -1
  836. package/dist/components/shared/modals/settings/settings-form.d.ts +2 -1
  837. package/dist/components/shared/modals/settings/settings-modal.d.ts +1 -1
  838. package/dist/components/shared/navigation-link.cjs +1 -1
  839. package/dist/components/shared/navigation-link.cjs.map +1 -1
  840. package/dist/components/shared/navigation-link.js +11 -7
  841. package/dist/components/shared/navigation-link.js.map +1 -1
  842. package/dist/components/shared/risk-alert.d.ts +1 -1
  843. package/dist/components/shared/text-shimmer.d.ts +1 -1
  844. package/dist/components/ui/resize-handle.d.ts +1 -1
  845. package/dist/config/defaults.cjs +1 -1
  846. package/dist/config/defaults.cjs.map +1 -1
  847. package/dist/config/defaults.js +3 -3
  848. package/dist/config/defaults.js.map +1 -1
  849. package/dist/context/navigation-context.d.ts +1 -1
  850. package/dist/context/scroll-context.d.ts +1 -1
  851. package/dist/contexts/active-backend-context.d.ts +1 -1
  852. package/dist/contexts/conversation-websocket-context.d.ts +1 -1
  853. package/dist/contexts/settings-section-header-context.d.ts +1 -1
  854. package/dist/contexts/websocket-provider-wrapper.d.ts +1 -1
  855. package/dist/fixtures/home-automations-demo.d.ts +19 -0
  856. package/dist/hooks/mutation/use-add-mcp-server.cjs +1 -1
  857. package/dist/hooks/mutation/use-add-mcp-server.cjs.map +1 -1
  858. package/dist/hooks/mutation/use-add-mcp-server.js +10 -14
  859. package/dist/hooks/mutation/use-add-mcp-server.js.map +1 -1
  860. package/dist/hooks/mutation/use-delete-mcp-server.cjs +1 -1
  861. package/dist/hooks/mutation/use-delete-mcp-server.cjs.map +1 -1
  862. package/dist/hooks/mutation/use-delete-mcp-server.d.ts +2 -7
  863. package/dist/hooks/mutation/use-delete-mcp-server.js +8 -34
  864. package/dist/hooks/mutation/use-delete-mcp-server.js.map +1 -1
  865. package/dist/hooks/mutation/use-save-settings.cjs +1 -1
  866. package/dist/hooks/mutation/use-save-settings.cjs.map +1 -1
  867. package/dist/hooks/mutation/use-save-settings.js +8 -4
  868. package/dist/hooks/mutation/use-save-settings.js.map +1 -1
  869. package/dist/hooks/mutation/use-update-mcp-server.cjs +1 -1
  870. package/dist/hooks/mutation/use-update-mcp-server.cjs.map +1 -1
  871. package/dist/hooks/mutation/use-update-mcp-server.d.ts +1 -1
  872. package/dist/hooks/mutation/use-update-mcp-server.js +31 -16
  873. package/dist/hooks/mutation/use-update-mcp-server.js.map +1 -1
  874. package/dist/hooks/query/query-keys.cjs.map +1 -1
  875. package/dist/hooks/query/query-keys.d.ts +4 -0
  876. package/dist/hooks/query/query-keys.js.map +1 -1
  877. package/dist/hooks/query/use-active-conversation.d.ts +1 -1
  878. package/dist/hooks/query/use-agent-profiles.d.ts +1 -1
  879. package/dist/hooks/query/use-app-installations.d.ts +1 -1
  880. package/dist/hooks/query/use-automation-detail.d.ts +2 -2
  881. package/dist/hooks/query/use-automation-health.d.ts +2 -0
  882. package/dist/hooks/query/use-automations.d.ts +5 -1
  883. package/dist/hooks/query/use-bash-command-logs.d.ts +1 -1
  884. package/dist/hooks/query/use-cloud-sandbox.d.ts +1 -1
  885. package/dist/hooks/query/use-commit-changes.d.ts +1 -1
  886. package/dist/hooks/query/use-config.d.ts +1 -1
  887. package/dist/hooks/query/use-conversation-history.d.ts +1 -1
  888. package/dist/hooks/query/use-conversation-hooks.d.ts +1 -1
  889. package/dist/hooks/query/use-conversation-skills.d.ts +1 -1
  890. package/dist/hooks/query/use-get-secrets.d.ts +1 -1
  891. package/dist/hooks/query/use-home-automations.d.ts +20 -0
  892. package/dist/hooks/query/use-latest-automation-runs.d.ts +19 -0
  893. package/dist/hooks/query/use-llm-profiles.d.ts +1 -1
  894. package/dist/hooks/query/use-llm-subscription-models.d.ts +1 -1
  895. package/dist/hooks/query/use-llm-subscription-status.d.ts +1 -1
  896. package/dist/hooks/query/use-local-git-info.d.ts +1 -1
  897. package/dist/hooks/query/use-local-workspaces.d.ts +1 -1
  898. package/dist/hooks/query/use-manifest-capabilities.d.ts +23 -0
  899. package/dist/hooks/query/use-manifest-prerequisites.d.ts +24 -0
  900. package/dist/hooks/query/use-plugin-file-content.d.ts +1 -1
  901. package/dist/hooks/query/use-plugins-marketplace.d.ts +1 -1
  902. package/dist/hooks/query/use-provider-models.d.ts +1 -1
  903. package/dist/hooks/query/use-search-branches.d.ts +1 -1
  904. package/dist/hooks/query/use-search-providers.d.ts +1 -1
  905. package/dist/hooks/query/use-search-repositories.d.ts +1 -1
  906. package/dist/hooks/query/use-search-subdirs.d.ts +2 -2
  907. package/dist/hooks/query/use-settings.d.ts +2 -2
  908. package/dist/hooks/query/use-skills.d.ts +1 -1
  909. package/dist/hooks/query/use-start-tasks.d.ts +1 -1
  910. package/dist/hooks/query/use-sub-conversation-task-polling.d.ts +1 -1
  911. package/dist/hooks/query/use-sub-conversations.d.ts +1 -1
  912. package/dist/hooks/query/use-suggested-tasks.d.ts +1 -1
  913. package/dist/hooks/query/use-task-polling.d.ts +2 -2
  914. package/dist/hooks/query/use-unified-get-git-changes.d.ts +1 -1
  915. package/dist/hooks/query/use-unified-git-diff.d.ts +1 -1
  916. package/dist/hooks/query/use-user-conversation.d.ts +1 -1
  917. package/dist/hooks/query/use-workspace-file-content.d.ts +1 -1
  918. package/dist/hooks/use-backend-scoped-path.cjs +2 -0
  919. package/dist/hooks/use-backend-scoped-path.cjs.map +1 -0
  920. package/dist/hooks/use-backend-scoped-path.d.ts +10 -0
  921. package/dist/hooks/use-backend-scoped-path.js +13 -0
  922. package/dist/hooks/use-backend-scoped-path.js.map +1 -0
  923. package/dist/hooks/use-home-automation-actions.d.ts +23 -0
  924. package/dist/hooks/use-home-pinned-automations.d.ts +26 -0
  925. package/dist/hooks/use-llm-configured.cjs +1 -1
  926. package/dist/hooks/use-llm-configured.cjs.map +1 -1
  927. package/dist/hooks/use-llm-configured.js +2 -1
  928. package/dist/hooks/use-llm-configured.js.map +1 -1
  929. package/dist/hooks/use-manifest-preflight.d.ts +18 -0
  930. package/dist/hooks/use-tracking.cjs +1 -1
  931. package/dist/hooks/use-tracking.cjs.map +1 -1
  932. package/dist/hooks/use-tracking.d.ts +18 -0
  933. package/dist/hooks/use-tracking.js +25 -1
  934. package/dist/hooks/use-tracking.js.map +1 -1
  935. package/dist/i18n/declaration.cjs +1 -1
  936. package/dist/i18n/declaration.cjs.map +1 -1
  937. package/dist/i18n/declaration.d.ts +103 -2
  938. package/dist/i18n/declaration.js +1 -1
  939. package/dist/i18n/declaration.js.map +1 -1
  940. package/dist/i18n/translation.cjs +2 -2
  941. package/dist/i18n/translation.cjs.map +1 -1
  942. package/dist/i18n/translation.js +1780 -63
  943. package/dist/i18n/translation.js.map +1 -1
  944. package/dist/icons/code-pill.d.ts +1 -1
  945. package/dist/icons/external-link.cjs +2 -0
  946. package/dist/icons/external-link.cjs.map +1 -0
  947. package/dist/icons/external-link.js +22 -0
  948. package/dist/icons/external-link.js.map +1 -0
  949. package/dist/icons/server.cjs +2 -0
  950. package/dist/icons/server.cjs.map +1 -0
  951. package/dist/icons/server.js +17 -0
  952. package/dist/icons/server.js.map +1 -0
  953. package/dist/locales/ar/openhands.json +106 -5
  954. package/dist/locales/ca/openhands.json +106 -5
  955. package/dist/locales/de/openhands.json +106 -5
  956. package/dist/locales/en/openhands.json +107 -6
  957. package/dist/locales/es/openhands.json +106 -5
  958. package/dist/locales/fr/openhands.json +106 -5
  959. package/dist/locales/it/openhands.json +106 -5
  960. package/dist/locales/ja/openhands.json +106 -5
  961. package/dist/locales/ko-KR/openhands.json +106 -5
  962. package/dist/locales/no/openhands.json +106 -5
  963. package/dist/locales/pt/openhands.json +106 -5
  964. package/dist/locales/tr/openhands.json +106 -5
  965. package/dist/locales/uk/openhands.json +106 -5
  966. package/dist/locales/zh-CN/openhands.json +106 -5
  967. package/dist/locales/zh-TW/openhands.json +106 -5
  968. package/dist/manifests/automation-insights.d.ts +64 -0
  969. package/dist/manifests/automation-interface.cjs +2 -0
  970. package/dist/manifests/automation-interface.cjs.map +1 -0
  971. package/dist/manifests/automation-interface.d.ts +76 -0
  972. package/dist/manifests/automation-interface.js +82 -0
  973. package/dist/manifests/automation-interface.js.map +1 -0
  974. package/dist/manifests/automation-setup.cjs +2 -0
  975. package/dist/manifests/automation-setup.cjs.map +1 -0
  976. package/dist/manifests/automation-setup.d.ts +52 -0
  977. package/dist/manifests/automation-setup.js +8 -0
  978. package/dist/manifests/automation-setup.js.map +1 -0
  979. package/dist/manifests/interface-validation.cjs +2 -0
  980. package/dist/manifests/interface-validation.cjs.map +1 -0
  981. package/dist/manifests/interface-validation.d.ts +27 -0
  982. package/dist/manifests/interface-validation.js +360 -0
  983. package/dist/manifests/interface-validation.js.map +1 -0
  984. package/dist/manifests/manifest-actions.d.ts +15 -0
  985. package/dist/manifests/manifest-capabilities.d.ts +25 -0
  986. package/dist/manifests/manifest-error-map.d.ts +40 -0
  987. package/dist/manifests/manifest-local-validation.d.ts +56 -0
  988. package/dist/manifests/manifest-registry.cjs +2 -0
  989. package/dist/manifests/manifest-registry.cjs.map +1 -0
  990. package/dist/manifests/manifest-registry.d.ts +15 -0
  991. package/dist/manifests/manifest-registry.js +26 -0
  992. package/dist/manifests/manifest-registry.js.map +1 -0
  993. package/dist/manifests/manifest-sources.cjs +2 -0
  994. package/dist/manifests/manifest-sources.cjs.map +1 -0
  995. package/dist/manifests/manifest-sources.d.ts +15 -0
  996. package/dist/manifests/manifest-sources.js +8 -0
  997. package/dist/manifests/manifest-sources.js.map +1 -0
  998. package/dist/manifests/manifest-template.d.ts +20 -0
  999. package/dist/manifests/manifest-validation.cjs +2 -0
  1000. package/dist/manifests/manifest-validation.cjs.map +1 -0
  1001. package/dist/manifests/manifest-validation.d.ts +30 -0
  1002. package/dist/manifests/manifest-validation.js +145 -0
  1003. package/dist/manifests/manifest-validation.js.map +1 -0
  1004. package/dist/manifests/types.cjs +2 -0
  1005. package/dist/manifests/types.cjs.map +1 -0
  1006. package/dist/manifests/types.d.ts +355 -0
  1007. package/dist/manifests/types.js +39 -0
  1008. package/dist/manifests/types.js.map +1 -0
  1009. package/dist/mockServiceWorker.js +21 -9
  1010. package/dist/node_modules/@openhands/extensions/automations/catalog/github-pr-reviewer/manifest.cjs +9 -0
  1011. package/dist/node_modules/@openhands/extensions/automations/catalog/github-pr-reviewer/manifest.cjs.map +1 -0
  1012. package/dist/node_modules/@openhands/extensions/automations/catalog/github-pr-reviewer/manifest.js +75 -0
  1013. package/dist/node_modules/@openhands/extensions/automations/catalog/github-pr-reviewer/manifest.js.map +1 -0
  1014. package/dist/node_modules/@openhands/extensions/automations/catalog/github-repo-monitor/manifest.cjs +9 -0
  1015. package/dist/node_modules/@openhands/extensions/automations/catalog/github-repo-monitor/manifest.cjs.map +1 -0
  1016. package/dist/node_modules/@openhands/extensions/automations/catalog/github-repo-monitor/manifest.js +78 -0
  1017. package/dist/node_modules/@openhands/extensions/automations/catalog/github-repo-monitor/manifest.js.map +1 -0
  1018. package/dist/node_modules/@openhands/extensions/automations/catalog/incident-retrospective-drafter/manifest.cjs +17 -0
  1019. package/dist/node_modules/@openhands/extensions/automations/catalog/incident-retrospective-drafter/manifest.cjs.map +1 -0
  1020. package/dist/node_modules/@openhands/extensions/automations/catalog/incident-retrospective-drafter/manifest.js +89 -0
  1021. package/dist/node_modules/@openhands/extensions/automations/catalog/incident-retrospective-drafter/manifest.js.map +1 -0
  1022. package/dist/node_modules/@openhands/extensions/automations/catalog/jira-issue-to-pr/manifest.cjs +10 -0
  1023. package/dist/node_modules/@openhands/extensions/automations/catalog/jira-issue-to-pr/manifest.cjs.map +1 -0
  1024. package/dist/node_modules/@openhands/extensions/automations/catalog/jira-issue-to-pr/manifest.js +17 -0
  1025. package/dist/node_modules/@openhands/extensions/automations/catalog/jira-issue-to-pr/manifest.js.map +1 -0
  1026. package/dist/node_modules/@openhands/extensions/automations/catalog/linear-triage-assistant/manifest.cjs +9 -0
  1027. package/dist/node_modules/@openhands/extensions/automations/catalog/linear-triage-assistant/manifest.cjs.map +1 -0
  1028. package/dist/node_modules/@openhands/extensions/automations/catalog/linear-triage-assistant/manifest.js +15 -0
  1029. package/dist/node_modules/@openhands/extensions/automations/catalog/linear-triage-assistant/manifest.js.map +1 -0
  1030. package/dist/node_modules/@openhands/extensions/automations/catalog/research-brief-writer/manifest.cjs +9 -0
  1031. package/dist/node_modules/@openhands/extensions/automations/catalog/research-brief-writer/manifest.cjs.map +1 -0
  1032. package/dist/node_modules/@openhands/extensions/automations/catalog/research-brief-writer/manifest.js +18 -0
  1033. package/dist/node_modules/@openhands/extensions/automations/catalog/research-brief-writer/manifest.js.map +1 -0
  1034. package/dist/node_modules/@openhands/extensions/automations/catalog/slack-channel-monitor/manifest.cjs +9 -0
  1035. package/dist/node_modules/@openhands/extensions/automations/catalog/slack-channel-monitor/manifest.cjs.map +1 -0
  1036. package/dist/node_modules/@openhands/extensions/automations/catalog/slack-channel-monitor/manifest.js +14 -0
  1037. package/dist/node_modules/@openhands/extensions/automations/catalog/slack-channel-monitor/manifest.js.map +1 -0
  1038. package/dist/node_modules/@openhands/extensions/automations/catalog/slack-standup-digest/manifest.cjs +9 -0
  1039. package/dist/node_modules/@openhands/extensions/automations/catalog/slack-standup-digest/manifest.cjs.map +1 -0
  1040. package/dist/node_modules/@openhands/extensions/automations/catalog/slack-standup-digest/manifest.js +14 -0
  1041. package/dist/node_modules/@openhands/extensions/automations/catalog/slack-standup-digest/manifest.js.map +1 -0
  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 +2 -0
  1047. package/dist/node_modules/@openhands/extensions/automations/catalog-index.cjs.map +1 -0
  1048. package/dist/node_modules/@openhands/extensions/automations/catalog-index.js +25 -0
  1049. package/dist/node_modules/@openhands/extensions/automations/catalog-index.js.map +1 -0
  1050. package/dist/node_modules/@openhands/extensions/automations/index.cjs +2 -0
  1051. package/dist/node_modules/@openhands/extensions/automations/index.cjs.map +1 -0
  1052. package/dist/node_modules/@openhands/extensions/automations/index.js +18 -0
  1053. package/dist/node_modules/@openhands/extensions/automations/index.js.map +1 -0
  1054. package/dist/node_modules/@openhands/extensions/automations/interface.cjs +2 -0
  1055. package/dist/node_modules/@openhands/extensions/automations/interface.cjs.map +1 -0
  1056. package/dist/node_modules/@openhands/extensions/automations/interface.js +210 -0
  1057. package/dist/node_modules/@openhands/extensions/automations/interface.js.map +1 -0
  1058. package/dist/node_modules/@openhands/extensions/integrations/catalog/datadog.cjs +1 -1
  1059. package/dist/node_modules/@openhands/extensions/integrations/catalog/datadog.cjs.map +1 -1
  1060. package/dist/node_modules/@openhands/extensions/integrations/catalog/datadog.js +3 -3
  1061. package/dist/node_modules/@openhands/extensions/integrations/catalog/datadog.js.map +1 -1
  1062. package/dist/node_modules/@openhands/extensions/skills/index.cjs +174 -53
  1063. package/dist/node_modules/@openhands/extensions/skills/index.cjs.map +1 -1
  1064. package/dist/node_modules/@openhands/extensions/skills/index.js +115 -53
  1065. package/dist/node_modules/@openhands/extensions/skills/index.js.map +1 -1
  1066. package/dist/node_modules/@tanstack/query-core/build/modern/utils.cjs +1 -1
  1067. package/dist/node_modules/@tanstack/query-core/build/modern/utils.cjs.map +1 -1
  1068. package/dist/node_modules/@tanstack/query-core/build/modern/utils.js +12 -1
  1069. package/dist/node_modules/@tanstack/query-core/build/modern/utils.js.map +1 -1
  1070. package/dist/node_modules/@tanstack/react-query/build/modern/useBaseQuery.cjs +1 -1
  1071. package/dist/node_modules/@tanstack/react-query/build/modern/useBaseQuery.cjs.map +1 -1
  1072. package/dist/node_modules/@tanstack/react-query/build/modern/useBaseQuery.js +14 -12
  1073. package/dist/node_modules/@tanstack/react-query/build/modern/useBaseQuery.js.map +1 -1
  1074. package/dist/node_modules/html-parse-stringify/dist/esm/html-parse-stringify.cjs +2 -0
  1075. package/dist/node_modules/html-parse-stringify/dist/esm/html-parse-stringify.cjs.map +1 -0
  1076. package/dist/node_modules/html-parse-stringify/dist/esm/html-parse-stringify.js +177 -0
  1077. package/dist/node_modules/html-parse-stringify/dist/esm/html-parse-stringify.js.map +1 -0
  1078. package/dist/node_modules/i18next/dist/esm/i18next.cjs +1 -1
  1079. package/dist/node_modules/i18next/dist/esm/i18next.cjs.map +1 -1
  1080. package/dist/node_modules/i18next/dist/esm/i18next.js +31 -24
  1081. package/dist/node_modules/i18next/dist/esm/i18next.js.map +1 -1
  1082. package/dist/node_modules/lucide-react/dist/esm/icons/monitor.cjs +2 -0
  1083. package/dist/node_modules/lucide-react/dist/esm/icons/monitor.cjs.map +1 -0
  1084. package/dist/node_modules/lucide-react/dist/esm/icons/monitor.js +29 -0
  1085. package/dist/node_modules/lucide-react/dist/esm/icons/monitor.js.map +1 -0
  1086. package/dist/node_modules/posthog-js/dist/module.cjs +2 -2
  1087. package/dist/node_modules/posthog-js/dist/module.cjs.map +1 -1
  1088. package/dist/node_modules/posthog-js/dist/module.js +2055 -1929
  1089. package/dist/node_modules/posthog-js/dist/module.js.map +1 -1
  1090. package/dist/node_modules/react-i18next/dist/es/TransWithoutContext.cjs +1 -1
  1091. package/dist/node_modules/react-i18next/dist/es/TransWithoutContext.cjs.map +1 -1
  1092. package/dist/node_modules/react-i18next/dist/es/TransWithoutContext.js +43 -62
  1093. package/dist/node_modules/react-i18next/dist/es/TransWithoutContext.js.map +1 -1
  1094. package/dist/node_modules/react-i18next/dist/es/useTranslation.cjs +1 -1
  1095. package/dist/node_modules/react-i18next/dist/es/useTranslation.cjs.map +1 -1
  1096. package/dist/node_modules/react-i18next/dist/es/useTranslation.js +12 -6
  1097. package/dist/node_modules/react-i18next/dist/es/useTranslation.js.map +1 -1
  1098. package/dist/node_modules/tailwind-merge/dist/bundle-mjs.cjs +1 -1
  1099. package/dist/node_modules/tailwind-merge/dist/bundle-mjs.cjs.map +1 -1
  1100. package/dist/node_modules/tailwind-merge/dist/bundle-mjs.js +352 -310
  1101. package/dist/node_modules/tailwind-merge/dist/bundle-mjs.js.map +1 -1
  1102. package/dist/package.cjs +1 -1
  1103. package/dist/package.cjs.map +1 -1
  1104. package/dist/package.js +34 -33
  1105. package/dist/package.js.map +1 -1
  1106. package/dist/routes/agent-settings.d.ts +3 -2
  1107. package/dist/routes/app-settings.d.ts +2 -1
  1108. package/dist/routes/browser-tab.d.ts +1 -1
  1109. package/dist/routes/changes-tab.d.ts +2 -1
  1110. package/dist/routes/commits-tab.d.ts +1 -1
  1111. package/dist/routes/conversation.d.ts +2 -1
  1112. package/dist/routes/files-tab.d.ts +1 -1
  1113. package/dist/routes/llm-settings.d.ts +3 -2
  1114. package/dist/routes/mcp.cjs +1 -1
  1115. package/dist/routes/mcp.cjs.map +1 -1
  1116. package/dist/routes/mcp.d.ts +2 -1
  1117. package/dist/routes/mcp.js +1 -1
  1118. package/dist/routes/mcp.js.map +1 -1
  1119. package/dist/routes/planner-tab.d.ts +2 -1
  1120. package/dist/routes/secrets-settings.d.ts +2 -1
  1121. package/dist/routes/task-list-tab.d.ts +1 -1
  1122. package/dist/services/settings.cjs +1 -1
  1123. package/dist/services/settings.cjs.map +1 -1
  1124. package/dist/services/settings.js +3 -7
  1125. package/dist/services/settings.js.map +1 -1
  1126. package/dist/types/agent-server/core/events/conversation-state-event.d.ts +2 -19
  1127. package/dist/types/agent-server/core/events/observation-event.d.ts +2 -18
  1128. package/dist/types/automation.d.ts +23 -4
  1129. package/dist/types/mcp-auth.cjs.map +1 -1
  1130. package/dist/types/mcp-auth.d.ts +5 -41
  1131. package/dist/types/mcp-auth.js.map +1 -1
  1132. package/dist/types/mcp-server.d.ts +17 -32
  1133. package/dist/types/settings.d.ts +8 -28
  1134. package/dist/ui/card-title.d.ts +1 -1
  1135. package/dist/ui/card.d.ts +1 -1
  1136. package/dist/ui/combobox-caret.d.ts +3 -3
  1137. package/dist/ui/context-menu.cjs +1 -1
  1138. package/dist/ui/context-menu.cjs.map +1 -1
  1139. package/dist/ui/context-menu.d.ts +3 -2
  1140. package/dist/ui/context-menu.js +10 -9
  1141. package/dist/ui/context-menu.js.map +1 -1
  1142. package/dist/ui/divider.d.ts +1 -1
  1143. package/dist/ui/dropdown/clear-button.d.ts +1 -1
  1144. package/dist/ui/dropdown/dropdown-input.d.ts +1 -1
  1145. package/dist/ui/dropdown/dropdown-menu.d.ts +1 -1
  1146. package/dist/ui/dropdown/dropdown.d.ts +1 -1
  1147. package/dist/ui/dropdown/loading-spinner.d.ts +1 -1
  1148. package/dist/ui/dropdown/toggle-button.d.ts +1 -1
  1149. package/dist/ui/help-link.d.ts +1 -1
  1150. package/dist/ui/pre.d.ts +1 -1
  1151. package/dist/ui/toggle-switch.d.ts +2 -2
  1152. package/dist/ui/typography.d.ts +7 -7
  1153. package/dist/utils/api-error-message.d.ts +6 -2
  1154. package/dist/utils/automation-activity-log-export.d.ts +17 -0
  1155. package/dist/utils/automation-catalog.cjs +2 -0
  1156. package/dist/utils/automation-catalog.cjs.map +1 -0
  1157. package/dist/utils/automation-catalog.d.ts +28 -0
  1158. package/dist/utils/automation-catalog.js +5 -0
  1159. package/dist/utils/automation-catalog.js.map +1 -0
  1160. package/dist/utils/automation-timeout.d.ts +5 -6
  1161. package/dist/utils/custom-toast-handlers.d.ts +2 -2
  1162. package/dist/utils/format-relative-time.d.ts +3 -0
  1163. package/dist/utils/mcp-config.cjs +1 -1
  1164. package/dist/utils/mcp-config.cjs.map +1 -1
  1165. package/dist/utils/mcp-config.d.ts +12 -29
  1166. package/dist/utils/mcp-config.js +161 -143
  1167. package/dist/utils/mcp-config.js.map +1 -1
  1168. package/dist/utils/mcp-installed-servers.cjs +1 -1
  1169. package/dist/utils/mcp-installed-servers.cjs.map +1 -1
  1170. package/dist/utils/mcp-installed-servers.d.ts +2 -2
  1171. package/dist/utils/mcp-installed-servers.js +21 -32
  1172. package/dist/utils/mcp-installed-servers.js.map +1 -1
  1173. package/dist/utils/mcp-server-health-key.cjs.map +1 -1
  1174. package/dist/utils/mcp-server-health-key.d.ts +2 -4
  1175. package/dist/utils/mcp-server-health-key.js.map +1 -1
  1176. package/dist/utils/responder-deployment.d.ts +5 -1
  1177. package/dist/utils/settings-like-page-layout-classes.cjs +1 -1
  1178. package/dist/utils/settings-like-page-layout-classes.cjs.map +1 -1
  1179. package/dist/utils/settings-like-page-layout-classes.d.ts +6 -2
  1180. package/dist/utils/settings-like-page-layout-classes.js +1 -1
  1181. package/dist/utils/settings-like-page-layout-classes.js.map +1 -1
  1182. package/dist/utils/skill-category.d.ts +12 -0
  1183. package/dist/utils/transcript-export/index.cjs +5 -5
  1184. package/dist/utils/transcript-export/index.js +12 -12
  1185. package/package.json +36 -33
  1186. package/scripts/check-sdk-version-sync.mjs +6 -6
  1187. package/scripts/check-translation-completeness.cjs +1 -0
  1188. package/scripts/dev-safe.mjs +17 -12
  1189. package/scripts/dev-static.mjs +17 -0
  1190. package/scripts/dev-with-automation.mjs +15 -16
  1191. package/scripts/ingress.mjs +22 -0
  1192. package/scripts/proxy-utils.mjs +157 -2
  1193. package/scripts/runtime-services-info.mjs +6 -6
  1194. package/scripts/static-build.mjs +0 -7
  1195. package/scripts/static-server.mjs +10 -0
  1196. package/build/assets/Trans-B7lYw4uD.js +0 -1
  1197. package/build/assets/active-backend-context-mY7Gff5c.js +0 -2
  1198. package/build/assets/agent-context-settings-BTUmWEzL.js +0 -1
  1199. package/build/assets/agent-profiles-settings-Ilqid_R5.js +0 -1
  1200. package/build/assets/agent-server-conversation-service.api-C_7YnjzP.js +0 -41
  1201. package/build/assets/agent-settings-CxfT4ksO.js +0 -1
  1202. package/build/assets/alert-banner-eRyIwDyU.js +0 -1
  1203. package/build/assets/automation-BGP_I1RR.js +0 -1
  1204. package/build/assets/automation-detail-nEflClmc.js +0 -2
  1205. package/build/assets/automation-export-BO_kfqC8.js +0 -2
  1206. package/build/assets/automations-list-BYncC7gv.js +0 -1
  1207. package/build/assets/backend-form-modal-CKrBF80P.js +0 -1
  1208. package/build/assets/browser-3QjrEr1D.js +0 -6
  1209. package/build/assets/check-CrxQfJZ2.js +0 -1
  1210. package/build/assets/chevron-down-D_LsyTA7.js +0 -1
  1211. package/build/assets/circle-check-DZn9HkLE.js +0 -1
  1212. package/build/assets/cloud-funnel-analytics-NlmDoeo2.js +0 -1
  1213. package/build/assets/command-menu-CvLPs7dg.js +0 -1
  1214. package/build/assets/condenser-settings-C4Y9CzQV.js +0 -1
  1215. package/build/assets/context-menu-list-item-FGaafXGh.js +0 -1
  1216. package/build/assets/conversation-D_ORtpKC.js +0 -1
  1217. package/build/assets/conversation-Dpc5nmGi.js +0 -90
  1218. package/build/assets/conversation-panel-D_ORtpKC.js +0 -1
  1219. package/build/assets/conversation-state-store-CGRQemtx.js +0 -1
  1220. package/build/assets/entry.client-BO2KQj0y.js +0 -2
  1221. package/build/assets/enum-filter-dropdown-DSqPZnsD.js +0 -1
  1222. package/build/assets/files-tab-4c9HFSLo.js +0 -1
  1223. package/build/assets/format-time-delta-DICE64sz.js +0 -1
  1224. package/build/assets/git-provider-icon-0PqmIS_S.js +0 -1
  1225. package/build/assets/home-D9JsyEmE.js +0 -1
  1226. package/build/assets/home-TFhnmZLx.js +0 -1
  1227. package/build/assets/index-home-D9JsyEmE.js +0 -1
  1228. package/build/assets/install-server-modal-BgGRnqA0.js +0 -1
  1229. package/build/assets/llm-not-configured-banner-Y4W9-sar.js +0 -27
  1230. package/build/assets/llm-settings-nPwv7hKu.js +0 -1
  1231. package/build/assets/loader-circle-CGD6-Vak.js +0 -1
  1232. package/build/assets/manifest-1cf33a7b.js +0 -1
  1233. package/build/assets/markdown-renderer-U40HF0Ak.js +0 -8
  1234. package/build/assets/mcp-xDMaHzOw.js +0 -9
  1235. package/build/assets/messages-CdNfZPgd.js +0 -40
  1236. package/build/assets/navigation-link-Bxmn-pCs.js +0 -1
  1237. package/build/assets/onboarding-DWuFieEA.js +0 -1
  1238. package/build/assets/onboarding-modal-C8m72Dpb.js +0 -1
  1239. package/build/assets/plus-CTGLo3aa.js +0 -1
  1240. package/build/assets/recommended-automations-launcher-Dru1yN46.js +0 -58
  1241. package/build/assets/root-B5JXKp1P.css +0 -1
  1242. package/build/assets/root-DOLLQteU.js +0 -2
  1243. package/build/assets/root-layout-xmylWoew.js +0 -3
  1244. package/build/assets/search-BrpWXWUi.js +0 -1
  1245. package/build/assets/segmented-toggle-CZKOdIly.js +0 -1
  1246. package/build/assets/settings-Chfn5xTD.js +0 -1
  1247. package/build/assets/settings-input-BEaTCem1.js +0 -1
  1248. package/build/assets/settings-like-page-layout-classes-DyxyJ0k4.js +0 -1
  1249. package/build/assets/settings-service.api-CTJRrvMu.js +0 -1
  1250. package/build/assets/shared-conversation-BvWtTwES.js +0 -1
  1251. package/build/assets/sidebar-mobile-menu-toggle-xiKoUfGa.js +0 -1
  1252. package/build/assets/skills-settings-pUxMr6WZ.js +0 -2
  1253. package/build/assets/use-agent-profiles-DmT9zxAN.js +0 -1
  1254. package/build/assets/use-config-C959QcRC.js +0 -1
  1255. package/build/assets/use-is-authed-BsS4XwSL.js +0 -1
  1256. package/build/assets/use-llm-profiles-CdaxVpyY.js +0 -1
  1257. package/build/assets/use-save-agent-profile-DGJ3-u0M.js +0 -1
  1258. package/build/assets/use-settings-nav-items-DPK5sxvR.js +0 -16
  1259. package/build/assets/use-skills-D_mLhYNa.js +0 -1
  1260. package/build/assets/use-tracking-COqZLobY.js +0 -1
  1261. package/build/assets/useQuery-B38jBavx.js +0 -1
  1262. package/build/assets/utils-DsWhWn2F.js +0 -1
  1263. package/build/assets/v4-DDdyfk2q.js +0 -1
  1264. package/build/assets/vendor~browser-CIoZCqGs.js +0 -47
  1265. package/build/assets/vendor~entry.client-BfviqoVc.js +0 -1
  1266. package/build/assets/vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~f1hl7voa-BrmgjeOw.js +0 -1
  1267. package/build/assets/vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~f9xdmd0z-DLMP7bZx.js +0 -26
  1268. package/build/assets/vendor~module-BZXjBMvd.js +0 -2
  1269. package/build/assets/vendor~root-layout~index-home~home~conversation-panel~conversation-Acmf1sKj.js +0 -1
  1270. package/build/assets/vendor~root-layout~index-home~home~conversation-panel~conversation~shared-conversation-CmzCY1BT.js +0 -1
  1271. package/build/assets/vendor~root-layout~index-home~home~mcp~automations-list~onboarding-modal-C7Yh77RT.js +0 -1
  1272. package/build/assets/x-Dx_JbpHA.js +0 -1
  1273. package/dist/components/features/skills/skill-type-filter.d.ts +0 -3
  1274. package/dist/components/features/skills/skills-type-filter-dropdown.d.ts +0 -7
  1275. package/dist/node_modules/html-parse-stringify/dist/html-parse-stringify.module.cjs +0 -2
  1276. package/dist/node_modules/html-parse-stringify/dist/html-parse-stringify.module.cjs.map +0 -1
  1277. package/dist/node_modules/html-parse-stringify/dist/html-parse-stringify.module.js +0 -81
  1278. package/dist/node_modules/html-parse-stringify/dist/html-parse-stringify.module.js.map +0 -1
  1279. package/dist/node_modules/void-elements/index.cjs +0 -2
  1280. package/dist/node_modules/void-elements/index.cjs.map +0 -1
  1281. package/dist/node_modules/void-elements/index.js +0 -25
  1282. package/dist/node_modules/void-elements/index.js.map +0 -1
@@ -579,6 +579,7 @@
579
579
  "CHAT_INTERFACE$MESSAGE_SEND_FAILED": "傳送失敗",
580
580
  "CHAT_INTERFACE$BRANCH_FROM_HERE": "從此處分支",
581
581
  "CHAT_INTERFACE$MESSAGE_RETRY": "重試",
582
+ "CHAT_INTERFACE$MESSAGE_DISMISS": "關閉",
582
583
  "CHAT_INTERFACE$AUGMENTED_PROMPT_FILES_TITLE": "已新增檔案",
583
584
  "CHAT_INTERFACE$DISCONNECTED": "已斷開連接",
584
585
  "CHAT_INTERFACE$COMMANDS": "命令",
@@ -772,6 +773,8 @@
772
773
  "AUTOMATIONS$CREATE_AUTOMATION_PROMPT": "建立一個自動化",
773
774
  "AUTOMATIONS$EMPTY_LEARN_MORE": "在文件中了解更多",
774
775
  "AUTOMATIONS$SEARCH_PLACEHOLDER": "搜尋自動化...",
776
+ "AUTOMATIONS$NO_FILTER_MATCHES": "沒有符合這些篩選條件的自動化",
777
+ "AUTOMATIONS$CLEAR_FILTERS": "清除篩選條件",
775
778
  "AUTOMATIONS$VIEW_MODE": "檢視模式",
776
779
  "AUTOMATIONS$VIEW_GRID": "網格檢視",
777
780
  "AUTOMATIONS$VIEW_LIST": "列表檢視",
@@ -812,7 +815,7 @@
812
815
  "AUTOMATIONS$TIMEOUT_HINT": "單次執行的最長時間。留空則使用預設值600秒(10分鐘);最大1800秒(30分鐘)。",
813
816
  "AUTOMATIONS$ERROR_TIMEOUT_INVALID_NUMBER": "超時必須是有效數字",
814
817
  "AUTOMATIONS$ERROR_TIMEOUT_POSITIVE": "超時必須為正數",
815
- "AUTOMATIONS$ERROR_TIMEOUT_MAX_EXCEEDED": "超時不能超過1800秒(30分鐘)",
818
+ "AUTOMATIONS$ERROR_TIMEOUT_MAX_EXCEEDED": "超時不能超過{{max}}秒",
816
819
  "AUTOMATIONS$CUSTOM_SCHEDULE_HINT": "此自動化使用自訂排程。已停用頻率編輯以避免破壞它。",
817
820
  "AUTOMATIONS$EDIT_SUCCESS": "自動化已更新",
818
821
  "AUTOMATIONS$EDIT_ERROR": "無法更新自動化",
@@ -831,12 +834,17 @@
831
834
  "AUTOMATIONS$DETAIL$FAILED": "失敗",
832
835
  "AUTOMATIONS$DETAIL$PENDING": "待處理",
833
836
  "AUTOMATIONS$DETAIL$RUNNING": "執行中",
837
+ "AUTOMATIONS$DETAIL$CANCELLED": "已取消",
838
+ "AUTOMATIONS$DETAIL$SKIPPED": "已略過",
834
839
  "AUTOMATIONS$DETAIL$INACTIVE": "非作用中",
835
840
  "AUTOMATIONS$DETAIL$LAST_RUN": "上次執行",
836
841
  "AUTOMATIONS$DETAIL$LOAD_MORE_RUNS": "載入更多",
842
+ "AUTOMATIONS$DETAIL$EXPORT_JSON": "匯出 JSON",
843
+ "AUTOMATIONS$DETAIL$EXPORT_CSV": "匯出 CSV",
844
+ "AUTOMATIONS$DETAIL$EXPORT_ACTIVITY_LOG_ERROR": "匯出活動紀錄失敗",
837
845
  "AUTOMATIONS$DETAIL$MODEL": "模型",
838
846
  "AUTOMATIONS$DETAIL$NO_RUNS": "尚無活動",
839
- "AUTOMATIONS$DETAIL$NO_CONVERSATION": "對話未建立",
847
+ "AUTOMATIONS$DETAIL$NO_CONVERSATION": "無對話",
840
848
  "AUTOMATIONS$DETAIL$LOGS_VIEW": "查看 {{timestamp}} 的執行日誌",
841
849
  "AUTOMATIONS$DETAIL$LOGS_VIEW_SHORT": "查看日誌",
842
850
  "AUTOMATIONS$DETAIL$DEBUG_WITH_OPENHANDS": "使用 OpenHands 偵錯",
@@ -1595,7 +1603,6 @@
1595
1603
  "SETTINGS$SKILLS_NO_SKILLS": "找不到技能。",
1596
1604
  "SETTINGS$SKILLS_TRIGGERS": "觸發器: {{triggers}}",
1597
1605
  "SETTINGS$SKILLS_SEARCH_PLACEHOLDER": "依名稱、描述或觸發器搜尋技能",
1598
- "SETTINGS$SKILLS_TYPE_ALL": "全部",
1599
1606
  "SETTINGS$SKILLS_TYPE_AGENTSKILLS": "自動探索",
1600
1607
  "SETTINGS$SKILLS_TYPE_KNOWLEDGE": "基於觸發",
1601
1608
  "SETTINGS$SKILLS_TYPE_REPO": "永遠啟用",
@@ -1706,6 +1713,22 @@
1706
1713
  "BACKEND$MANAGE_EMPTY": "尚未新增其他後端。",
1707
1714
  "BACKEND$ADD_TITLE": "新增後端",
1708
1715
  "BACKEND$ADD_SUBTITLE": "將此應用程式連線至另一個 agent 伺服器。新增後,您可以從上方選單中切換不同的後端。",
1716
+ "BACKEND$CHOOSER_TITLE": "選擇連線方式",
1717
+ "BACKEND$CHOOSER_DESCRIPTION": "連線至您控制的 agent-server,或使用託管的 OpenHands 體驗。",
1718
+ "BACKEND$CLOUD_OPTION_DESCRIPTION": "使用託管的 OpenHands 體驗。",
1719
+ "BACKEND$AGENT_SERVER_TITLE": "Agent 伺服器",
1720
+ "BACKEND$AGENT_SERVER_OPTION_DESCRIPTION": "連線至本機或遠端 agent-server。",
1721
+ "BACKEND$AGENT_SERVER_DESCRIPTION": "連線至本機或另一台電腦上執行的 agent-server。",
1722
+ "BACKEND$AGENT_SERVER_LOCATION": "Agent 伺服器位置",
1723
+ "BACKEND$BEFORE_CONNECT_TITLE": "連線之前",
1724
+ "BACKEND$LOCAL_SETUP_DESCRIPTION": "在與此前端不同的連接埠上執行僅後端執行個體,然後在下方輸入該主機。例如,使用以下命令啟動:",
1725
+ "BACKEND$LOCAL_SETUP_DOCS": "閱讀本機後端設定指南",
1726
+ "BACKEND$REMOTE_SETUP_TITLE": "建議設定",
1727
+ "BACKEND$REMOTE_SETUP_DESCRIPTION": "使用 --public 執行遠端後端,設定強式 LOCAL_BACKEND_API_KEY,並透過 SSH 通道、ngrok 或 TLS 反向代理公開。",
1728
+ "BACKEND$REMOTE_CONNECTION_TITLE": "連線詳細資料",
1729
+ "BACKEND$REMOTE_CONNECTION_DESCRIPTION": "SSH 通道請使用 http://localhost:8000;ngrok 設定請使用您的 ngrok 網域;或使用 HTTPS 反向代理 URL。",
1730
+ "BACKEND$REMOTE_SETUP_DOCS": "閱讀遠端後端設定指南",
1731
+ "BACKEND$DEPLOYMENT_OPTIONS": "比較雲端、自託管和企業版部署選項",
1709
1732
  "BACKEND$NAME_LABEL": "主機名稱",
1710
1733
  "BACKEND$HOST_LABEL": "主機",
1711
1734
  "BACKEND$HOST_HELPER": "Agent Server 的 URL",
@@ -1737,7 +1760,7 @@
1737
1760
  "BACKEND$INVALID_API_KEY": "API 金鑰已被拒絕",
1738
1761
  "BACKEND$PERSONAL_WORKSPACE": "個人工作區",
1739
1762
  "BACKEND$SWITCHING_TO": "正在切換到 {{environment}}",
1740
- "BACKEND$LOGIN_WITH_OPENHANDS": "使用 OpenHands Cloud 登入",
1763
+ "BACKEND$LOGIN_WITH_OPENHANDS": "連線至 OpenHands",
1741
1764
  "BACKEND$LOG_BACK_IN": "重新登入",
1742
1765
  "BACKEND$LOGGED_OUT": "已登出",
1743
1766
  "BACKEND$LOGIN_CLOUD_HINT": "適用於 OpenHands Cloud 或您的自託管 OpenHands Cloud 部署。",
@@ -1926,6 +1949,26 @@
1926
1949
  "SETTINGS$SKILLS_ADD_MODAL_STORAGE_BODY": "透過 <cmd>/add-skill</cmd> 新增的技能會儲存到目前工作區的 <path>.agents/skills/</path>。您也可以手動將技能資料夾複製到該位置。",
1927
1950
  "SETTINGS$SKILLS_ADD_MODAL_PRIVATE_REPOS": "對於私有 GitHub 儲存庫,請在使用 <cmd>/add-skill</cmd> 之前設定 <env>GITHUB_TOKEN</env> 環境變數。",
1928
1951
  "SETTINGS$SKILLS_ADD_MODAL_VIEW_DOCS": "閱讀完整的新增技能指南 →",
1952
+ "SETTINGS$SKILLS_CATEGORY_AUTOMATIONS": "自動化方案",
1953
+ "SETTINGS$SKILLS_CATEGORY_ENVIRONMENT": "環境與工具",
1954
+ "SETTINGS$SKILLS_CATEGORY_CODE_HOSTING": "程式碼託管與 CI",
1955
+ "SETTINGS$SKILLS_CATEGORY_AGENT_AUTHORING": "代理程式創作",
1956
+ "SETTINGS$SKILLS_CATEGORY_CODE_QUALITY": "程式碼品質與審查",
1957
+ "SETTINGS$SKILLS_CATEGORY_INTEGRATIONS": "服務整合",
1958
+ "SETTINGS$SKILLS_CATEGORY_WRITING": "寫作與文件",
1959
+ "SETTINGS$SKILLS_CATEGORY_DESIGN": "設計與前端",
1960
+ "SETTINGS$SKILLS_CATEGORY_OTHER": "未分類",
1961
+ "SETTINGS$SKILLS_FACET_STATE": "狀態",
1962
+ "SETTINGS$SKILLS_FACET_SOURCE": "來源",
1963
+ "SETTINGS$SKILLS_FACET_CATEGORY": "類別",
1964
+ "SETTINGS$SKILLS_FACET_TYPE": "類型",
1965
+ "SETTINGS$SKILLS_SOURCE_PROJECT": "此專案",
1966
+ "SETTINGS$SKILLS_SOURCE_PERSONAL": "個人",
1967
+ "SETTINGS$SKILLS_SOURCE_PUBLIC": "內建",
1968
+ "SETTINGS$SKILLS_FILTERS_BUTTON": "篩選",
1969
+ "SETTINGS$SKILLS_CLEAR_FILTERS": "清除篩選",
1970
+ "SETTINGS$SKILLS_FILTERS_MODAL_TITLE": "篩選技能",
1971
+ "SETTINGS$SKILLS_RESULT_COUNT": "{{count}} 個結果",
1929
1972
  "RECOMMENDED_AUTOMATIONS$SECTION_LABEL": "推薦的自動化",
1930
1973
  "RECOMMENDED_AUTOMATIONS$SECTION_TITLE": "從經過驗證的工作流程開始",
1931
1974
  "RECOMMENDED_AUTOMATIONS$SECTION_DESCRIPTION": "每個範本都包含代理提示、實作草圖,以及讓它發揮作用所需的 MCP。選擇一個即可開啟預先填好的對話,並與代理一起完成細節。",
@@ -2038,6 +2081,34 @@
2038
2081
  "BUTTON$EXPAND": "展開",
2039
2082
  "COMMON$ACTIVE_PROFILE": "使用中的設定檔",
2040
2083
  "AUTOMATIONS$STARTING": "正在啟動…",
2084
+ "FEATURED_AUTOMATIONS$SECTION_TITLE": "自動化",
2085
+ "FEATURED_AUTOMATIONS$CHIP_GROUP_LABEL": "已啟用的自動化",
2086
+ "FEATURED_AUTOMATIONS$FEATURED_HEADING": "精選",
2087
+ "FEATURED_AUTOMATIONS$MANAGE": "新增或管理自動化",
2088
+ "FEATURED_AUTOMATIONS$VIEW_CONVERSATION": "開啟最近的對話",
2089
+ "FEATURED_AUTOMATIONS$VIEW_DETAILS": "檢視自動化詳細資訊",
2090
+ "FEATURED_AUTOMATIONS$LAST_RUN_SUCCEEDED": "上次執行成功",
2091
+ "FEATURED_AUTOMATIONS$LAST_RUN_FAILED": "上次執行失敗",
2092
+ "FEATURED_AUTOMATIONS$RUN_IN_PROGRESS": "執行中",
2093
+ "FEATURED_AUTOMATIONS$STATUS_UNKNOWN": "最近執行狀態未知",
2094
+ "FEATURED_AUTOMATIONS$STATUS_UNAVAILABLE": "狀態無法使用",
2095
+ "FEATURED_AUTOMATIONS$TOASTER_TITLE": "自動化重複工作",
2096
+ "FEATURED_AUTOMATIONS$TOASTER_MESSAGE": "設定依排程或事件觸發的自動化。",
2097
+ "FEATURED_AUTOMATIONS$TOASTER_START": "開始",
2098
+ "FEATURED_AUTOMATIONS$TOASTER_DISMISS": "關閉",
2099
+ "FEATURED_AUTOMATIONS$SUGGESTED_TITLE": "建議的自動化",
2100
+ "FEATURED_AUTOMATIONS$RUNNING_TITLE": "執行中",
2101
+ "FEATURED_AUTOMATIONS$RUNNING_GROUP_LABEL": "目前正在執行的自動化",
2102
+ "FEATURED_AUTOMATIONS$RECENT_TITLE": "最近的自動化活動",
2103
+ "FEATURED_AUTOMATIONS$RECENT_GROUP_LABEL": "執行中與最近完成的自動化",
2104
+ "FEATURED_AUTOMATIONS$VIEW_ALL": "查看全部",
2105
+ "FEATURED_AUTOMATIONS$RUN_ACTIVITY_LABEL": "{{count}} 次最近執行",
2106
+ "FEATURED_AUTOMATIONS$RUN_DURATION": "時長",
2107
+ "FEATURED_AUTOMATIONS$RECOMMENDED_GROUP_LABEL": "建議的自動化",
2108
+ "FEATURED_AUTOMATIONS$RECOMMENDED_PR_REVIEW": "審查拉取請求並發布 AI 回饋",
2109
+ "FEATURED_AUTOMATIONS$RECOMMENDED_GITHUB_MENTIONS": "回覆 GitHub 上的 @OpenHands 提及",
2110
+ "FEATURED_AUTOMATIONS$RECOMMENDED_SLACK_STANDUP": "將 Slack 活動整理成每日站會",
2111
+ "FEATURED_AUTOMATIONS$RECOMMENDED_LINEAR_TRIAGE": "在新 Linear 議題到達時進行分診",
2041
2112
  "CHAT_INTERFACE$LOADING_CONVERSATION": "正在載入對話",
2042
2113
  "CHAT_INTERFACE$MORE_INPUT_ACTIONS": "更多輸入動作",
2043
2114
  "CONVERSATION$UNTITLED": "(無標題)",
@@ -2078,5 +2149,35 @@
2078
2149
  "SETTINGS$APP_UPDATE_HOW_TO_UPDATE": "如何更新",
2079
2150
  "SETTINGS$APP_UPDATE_RUN_COMMANDS": "執行以下任一命令:",
2080
2151
  "SETTINGS$APP_UPDATE_OR": "或",
2081
- "SETTINGS$APP_UPDATE_RELEASE_NOTES": "檢視版本資訊"
2152
+ "SETTINGS$APP_UPDATE_RELEASE_NOTES": "檢視版本資訊",
2153
+ "BUTTON$CONTINUE": "繼續",
2154
+ "SETUP$PREREQUISITES_TITLE": "開始之前",
2155
+ "SETUP$MANAGE_INTEGRATIONS": "管理整合",
2156
+ "SETUP$UNAVAILABLE_TITLE": "無法使用",
2157
+ "SETUP$SUBMIT_FAILED": "發生問題。未建立任何項目。",
2158
+ "SETUP$VALIDATION_REQUIRED": "此欄位為必填。",
2159
+ "SETUP$VALIDATION_MIN_LENGTH": "至少需要 {{length}} 個字元。",
2160
+ "SETUP$VALIDATION_MAX_LENGTH": "最多 {{length}} 個字元。",
2161
+ "SETUP$VALIDATION_INVALID_OPTION": "請從可用選項中選擇。",
2162
+ "SETUP$VALIDATION_UNSAFE_VALUE": "不允許使用引號和反斜線。",
2163
+ "SETUP$REVIEW_TITLE": "確認",
2164
+ "SETUP$CONFIRM": "確認並建立",
2165
+ "SETUP$FALLBACK_CONVERSATION": "在對話中設定",
2166
+ "SETUP$EMPTY_VALUE": "未設定",
2167
+ "SETUP$UNSUPPORTED_MESSAGE": "此部署不支援此自動化所需的全部功能。",
2168
+ "SETUP$REPOSITORY_PLACEHOLDER": "owner/repo",
2169
+ "FEATURED_AUTOMATIONS$PIN": "釘選到儀表板",
2170
+ "FEATURED_AUTOMATIONS$UNPIN": "從儀表板取消釘選",
2171
+ "FEATURED_AUTOMATIONS$ROW_MENU_LABEL": "{{name}} 的操作",
2172
+ "FEATURED_AUTOMATIONS$PINNED_TITLE": "已釘選的自動化",
2173
+ "FEATURED_AUTOMATIONS$PINNED_DASHBOARD_LABEL": "已釘選自動化儀表板",
2174
+ "AUTOMATIONS$CANCEL_RUN": "取消執行",
2175
+ "AUTOMATIONS$CANCEL_RUN_SUCCESS": "已取消自動化執行",
2176
+ "AUTOMATIONS$CANCEL_RUN_ERROR": "取消自動化執行失敗",
2177
+ "AUTOMATIONS$TURN_OFF_CONFIRM_TITLE": "關閉自動化",
2178
+ "AUTOMATIONS$TURN_OFF_CONFIRM_MESSAGE": "關閉「{{name}}」?在重新開啟之前,它將不再依排程執行。",
2179
+ "AUTOMATIONS$TURN_OFF_ERROR": "關閉自動化失敗",
2180
+ "FEATURED_AUTOMATIONS$MOVE_UP": "上移",
2181
+ "FEATURED_AUTOMATIONS$MOVE_DOWN": "下移",
2182
+ "FEATURED_AUTOMATIONS$REORDER_HANDLE": "重新排序 {{name}}"
2082
2183
  }
@@ -0,0 +1,64 @@
1
+ /**
2
+ * The dashboard's automation knowledge, and the only module beside
3
+ * `automation-setup.ts` that has any.
4
+ *
5
+ * The interface manifest's dashboard surface names metrics, filter predicates,
6
+ * and sort comparators from closed sets; the one implementation of each name
7
+ * is here, over the automation service's list and runs responses, so the rest
8
+ * of `src/manifests/` stays about composition rather than about automations.
9
+ *
10
+ * Summaries are derived from the newest page of runs (the sample the runs
11
+ * hook fetches); `total` alone is the response's lifetime count. Success rate
12
+ * and durations consider only COMPLETED and FAILED runs — a cancelled or
13
+ * skipped run says nothing about either.
14
+ */
15
+ import { type Automation, type AutomationRun, type AutomationRunsResponse } from "#/types/automation";
16
+ import type { DashboardSortValue, DashboardStatusValue, DashboardTriggerValue, InterfaceListInsights, OverviewMetric } from "./types";
17
+ export type AutomationHealth = "healthy" | "failing" | "running" | "disabled" | "never-run" | "unknown";
18
+ /** Which caption of the manifest's `insights.health` block names each state. */
19
+ export declare const HEALTH_LABEL_KEYS: Record<AutomationHealth, keyof InterfaceListInsights["health"]>;
20
+ export interface AutomationRunSummary {
21
+ /** Lifetime run count, from the response — not the sample's length. */
22
+ total: number;
23
+ latestRun: AutomationRun | null;
24
+ /** COMPLETED over COMPLETED+FAILED in the sample. Null with no terminal runs. */
25
+ recentSuccessRate: number | null;
26
+ /** Mean completed_at − started_at over the sample's terminal runs. */
27
+ averageDurationMs: number | null;
28
+ }
29
+ /** One automation's summary alongside its query state. */
30
+ export interface RunSummaryState {
31
+ summary: AutomationRunSummary | null;
32
+ isLoading: boolean;
33
+ isError: boolean;
34
+ }
35
+ type Summaries = ReadonlyMap<string, RunSummaryState>;
36
+ export declare function summarizeAutomationRuns(response: AutomationRunsResponse): AutomationRunSummary;
37
+ /**
38
+ * A disabled automation is disabled no matter its history; while the summary
39
+ * is unsettled nothing is claimed; after that the latest run speaks.
40
+ */
41
+ export declare function deriveAutomationHealth(automation: Automation, state: RunSummaryState | undefined): AutomationHealth;
42
+ /** "—" unknown, seconds under a minute, minutes under an hour, else "1.5h". */
43
+ export declare function formatCompactDuration(ms: number | null): string;
44
+ /** The list page's search predicate: name, prompt, repository, or model. */
45
+ export declare function matchesAutomationSearch(automation: Automation, query: string): boolean;
46
+ export interface DashboardViewState {
47
+ search: string;
48
+ status: DashboardStatusValue;
49
+ trigger: DashboardTriggerValue;
50
+ sort: DashboardSortValue;
51
+ }
52
+ /** The automations the dashboard shows, filtered and ordered. */
53
+ export declare function applyDashboardView(automations: readonly Automation[], view: DashboardViewState, byId: Summaries): Automation[];
54
+ export interface OverviewTileValue {
55
+ /** The formatted value the tile displays. */
56
+ display: string;
57
+ /** True when the metric's value is zero, which swaps in `zeroDetail`. */
58
+ isZero: boolean;
59
+ /** Values the tile's copy may substitute via `{{name}}`. */
60
+ placeholderValues: Record<string, string | number>;
61
+ }
62
+ /** The value behind one manifest-declared tile. */
63
+ export declare function computeOverviewTile(metric: OverviewMetric, automations: readonly Automation[], byId: Summaries): OverviewTileValue;
64
+ export {};
@@ -0,0 +1,2 @@
1
+ require("../_virtual/_rolldown/runtime.cjs");const e=require("../node_modules/@openhands/extensions/automations/index.cjs"),t=require("./interface-validation.cjs"),n=require("./manifest-sources.cjs");var r={list:`/automations`,setup:`/automations/new/:automationId`,detail:`/automations/:automationId`,templates:`/automations/templates`},i={list:`/v1`,detail:`/v1/{id}`,dispatch:`/v1/{id}/dispatch`,runs:`/v1/{id}/runs`,tarball:`/v1/{id}/tarball`,health:`/health`,capabilities:`/v1/capabilities`,validate:`/v1/validate`,createPrompt:`/v1/preset/prompt`,createPlugin:`/v1/preset/plugin`},a={fileKind:`automation`,fileVersion:1,filenameSuffix:`.automation.json`,importDefaults:{repoProvider:`github`,placeholderEventSource:`agent-canvas-import`}};function o(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function s(){return new Set(e.default.flatMap(e=>o(e)&&typeof e.id==`string`?[e.id]:[]))}function c(e){if(e===void 0)return null;let n=t.validateInterfaceManifest(e,{catalogIds:s(),mountedRoutes:r});return n.valid?e:(console.warn(`Rejected the automation interface manifest:`,n.errors.join(`; `)),null)}var l=c(n.AUTOMATION_INTERFACE_CANDIDATE);function u(){return(l?.routes??r).list}function d(e){return(l?.endpoints??i)[e]}function f(e,t){return d(e).replace(`{id}`,encodeURIComponent(t))}var p={sidebarLabel:null,commandMenuTitle:null,commandMenuDescription:null,commandMenuKeywords:null,listTitle:null,listSubtitle:null,detailBackLabel:null,editTitle:null};function m(){return l?{sidebarLabel:l.navigation.sidebar.label,commandMenuTitle:l.navigation.commandMenu.title,commandMenuDescription:l.navigation.commandMenu.description,commandMenuKeywords:l.navigation.commandMenu.keywords,listTitle:l.pages.list.title,listSubtitle:l.pages.list.subtitle,detailBackLabel:l.pages.detail.backLabel,editTitle:l.pages.edit.title}:p}function h(){return l?.importExport??a}exports.automationListPath=u,exports.getAutomationEndpoint=d,exports.getAutomationIdEndpoint=f,exports.getImportExportSpec=h,exports.getInterfaceCopy=m;
2
+ //# sourceMappingURL=automation-interface.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"automation-interface.cjs","names":[],"sources":["../../src/manifests/automation-interface.ts"],"sourcesContent":["/**\n * The automation interface seam.\n *\n * Every automation-specific datum the host's surfaces render — routes,\n * navigation and page copy, the settable attributes, the import/export\n * envelope, endpoint paths, the featured and responder id lists — is served\n * from here.\n * The published interface manifest supplies it when the pinned\n * `@openhands/extensions` ships one and it passes admission; otherwise the\n * host's own defaults do, which reproduce today's behavior exactly. Copy\n * defaults are null, meaning \"render the host's own translation\".\n *\n * The sub-page surface (navigation, overview tiles, filters, sort, run\n * insights, templates page) is the exception: the host holds no definitions\n * of its own, so its accessors return null until an admitted manifest\n * declares it, and the sub-pages simply do not render.\n */\n\nimport { AUTOMATION_CATALOG } from \"@openhands/extensions/automations\";\nimport { validateInterfaceManifest } from \"./interface-validation\";\nimport { AUTOMATION_INTERFACE_CANDIDATE } from \"./manifest-sources\";\nimport type {\n AutomationAttributeName,\n InterfaceDashboardFilter,\n InterfaceDashboardSort,\n InterfaceEndpointName,\n InterfaceIconSlug,\n InterfaceImportExport,\n InterfaceListInsights,\n InterfaceManifest,\n InterfaceOverview,\n InterfaceRoutes,\n InterfaceSubPageId,\n InterfaceTemplatesPage,\n} from \"./types\";\n\n/** The routes this host has registrations for, in `src/routes.ts`. */\nconst MOUNTED_ROUTES = {\n list: \"/automations\",\n setup: \"/automations/new/:automationId\",\n detail: \"/automations/:automationId\",\n templates: \"/automations/templates\",\n} satisfies InterfaceRoutes;\n\nconst DEFAULT_ENDPOINTS: InterfaceManifest[\"endpoints\"] = {\n list: \"/v1\",\n detail: \"/v1/{id}\",\n dispatch: \"/v1/{id}/dispatch\",\n runs: \"/v1/{id}/runs\",\n tarball: \"/v1/{id}/tarball\",\n health: \"/health\",\n capabilities: \"/v1/capabilities\",\n validate: \"/v1/validate\",\n createPrompt: \"/v1/preset/prompt\",\n createPlugin: \"/v1/preset/plugin\",\n};\n\nconst DEFAULT_IMPORT_EXPORT: InterfaceImportExport = {\n fileKind: \"automation\",\n fileVersion: 1,\n filenameSuffix: \".automation.json\",\n importDefaults: {\n repoProvider: \"github\",\n placeholderEventSource: \"agent-canvas-import\",\n },\n};\n\nconst DEFAULT_DOCS_URL =\n \"https://docs.openhands.dev/openhands/usage/automations/overview\";\n\n/**\n * Proven automations featured above the Beta group. NOT derived from\n * popularityRank (slack-standup-digest@94 outranks slack-channel-monitor@92\n * yet is Beta).\n */\nconst DEFAULT_FEATURED_AUTOMATION_IDS: readonly string[] = [\n \"github-pr-reviewer\",\n \"github-repo-monitor\",\n \"slack-channel-monitor\",\n];\n\n/**\n * Integrations whose automations are treated as event responders that poll\n * continuously, and so get the deployment-choice dialog.\n */\nconst DEFAULT_RESPONDER_INTEGRATION_IDS: readonly string[] = [\n \"github\",\n \"slack\",\n];\n\nexport interface AttributeSpec {\n present: boolean;\n /** Null means \"render the host's own translation\". */\n label: string | null;\n help: string | null;\n required: boolean;\n min: number | null;\n max: number | null;\n}\n\nconst ABSENT_ATTRIBUTE: AttributeSpec = {\n present: false,\n label: null,\n help: null,\n required: false,\n min: null,\n max: null,\n};\n\n/** Today's edit dialog, restated as specs so absence of a manifest changes nothing. */\nconst DEFAULT_ATTRIBUTES: Record<AutomationAttributeName, AttributeSpec> = {\n name: {\n present: true,\n label: null,\n help: null,\n required: true,\n min: null,\n max: null,\n },\n prompt: {\n present: true,\n label: null,\n help: null,\n required: false,\n min: null,\n max: null,\n },\n model: {\n present: true,\n label: null,\n help: null,\n required: false,\n min: null,\n max: null,\n },\n timeout: {\n present: true,\n label: null,\n help: null,\n required: false,\n min: 1,\n max: null,\n },\n schedule: {\n present: true,\n label: null,\n help: null,\n required: false,\n min: null,\n max: null,\n },\n};\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction getCatalogIds(): ReadonlySet<string> {\n return new Set(\n (AUTOMATION_CATALOG as readonly unknown[]).flatMap((entry) =>\n isRecord(entry) && typeof entry.id === \"string\" ? [entry.id] : [],\n ),\n );\n}\n\nfunction admitInterfaceManifest(candidate: unknown): InterfaceManifest | null {\n if (candidate === undefined) return null;\n\n const result = validateInterfaceManifest(candidate, {\n catalogIds: getCatalogIds(),\n mountedRoutes: MOUNTED_ROUTES,\n });\n if (!result.valid) {\n // Mirrors the setup registry: a rejected manifest is skipped loudly, and\n // the host's defaults stand.\n console.warn(\n \"Rejected the automation interface manifest:\",\n result.errors.join(\"; \"),\n );\n return null;\n }\n return candidate as InterfaceManifest;\n}\n\nconst ADMITTED = admitInterfaceManifest(AUTOMATION_INTERFACE_CANDIDATE);\n\nfunction substituteRouteParam(pattern: string, id: string): string {\n return pattern.replace(\":automationId\", encodeURIComponent(id));\n}\n\nexport function automationListPath(): string {\n return (ADMITTED?.routes ?? MOUNTED_ROUTES).list;\n}\n\nexport function automationSetupPath(id: string): string {\n return substituteRouteParam((ADMITTED?.routes ?? MOUNTED_ROUTES).setup, id);\n}\n\nexport function automationDetailPath(id: string): string {\n return substituteRouteParam((ADMITTED?.routes ?? MOUNTED_ROUTES).detail, id);\n}\n\nexport function automationTemplatesPath(): string {\n return ADMITTED?.routes.templates ?? MOUNTED_ROUTES.templates;\n}\n\nexport function getAutomationEndpoint(name: InterfaceEndpointName): string {\n return (ADMITTED?.endpoints ?? DEFAULT_ENDPOINTS)[name];\n}\n\n/** An id-parameterized endpoint with `{id}` substituted, encoded. */\nexport function getAutomationIdEndpoint(\n name: \"detail\" | \"dispatch\" | \"runs\" | \"tarball\",\n id: string,\n): string {\n return getAutomationEndpoint(name).replace(\"{id}\", encodeURIComponent(id));\n}\n\nexport interface InterfaceCopy {\n sidebarLabel: string | null;\n commandMenuTitle: string | null;\n commandMenuDescription: string | null;\n commandMenuKeywords: string | null;\n listTitle: string | null;\n listSubtitle: string | null;\n detailBackLabel: string | null;\n editTitle: string | null;\n}\n\nconst HOST_COPY: InterfaceCopy = {\n sidebarLabel: null,\n commandMenuTitle: null,\n commandMenuDescription: null,\n commandMenuKeywords: null,\n listTitle: null,\n listSubtitle: null,\n detailBackLabel: null,\n editTitle: null,\n};\n\nexport function getInterfaceCopy(): InterfaceCopy {\n if (!ADMITTED) return HOST_COPY;\n return {\n sidebarLabel: ADMITTED.navigation.sidebar.label,\n commandMenuTitle: ADMITTED.navigation.commandMenu.title,\n commandMenuDescription: ADMITTED.navigation.commandMenu.description,\n commandMenuKeywords: ADMITTED.navigation.commandMenu.keywords,\n listTitle: ADMITTED.pages.list.title,\n listSubtitle: ADMITTED.pages.list.subtitle,\n detailBackLabel: ADMITTED.pages.detail.backLabel,\n editTitle: ADMITTED.pages.edit.title,\n };\n}\n\nexport function getAttributeSpec(name: AutomationAttributeName): AttributeSpec {\n if (!ADMITTED) return DEFAULT_ATTRIBUTES[name];\n\n const attribute = ADMITTED.attributes[name];\n if (!attribute) return ABSENT_ATTRIBUTE;\n return {\n present: true,\n label: attribute.label,\n help: attribute.help ?? null,\n required: attribute.required,\n min: attribute.constraints?.min ?? null,\n max: attribute.constraints?.max ?? null,\n };\n}\n\nexport function getImportExportSpec(): InterfaceImportExport {\n return ADMITTED?.importExport ?? DEFAULT_IMPORT_EXPORT;\n}\n\nexport function getAutomationsDocsUrl(): string {\n return ADMITTED?.docsUrl ?? DEFAULT_DOCS_URL;\n}\n\nexport function getFeaturedAutomationIds(): readonly string[] {\n return ADMITTED?.featuredAutomationIds ?? DEFAULT_FEATURED_AUTOMATION_IDS;\n}\n\nexport function getResponderIntegrationIds(): readonly string[] {\n return ADMITTED?.responderIntegrationIds ?? DEFAULT_RESPONDER_INTEGRATION_IDS;\n}\n\nexport interface SubPageNavSpec {\n page: InterfaceSubPageId;\n /** The page's route, resolved through the manifest. */\n to: string;\n label: string;\n icon: InterfaceIconSlug;\n}\n\n/**\n * The sub-page navigation, or null when the manifest does not declare the\n * sub-page surface. No manifest, no sub-pages — there is no host default.\n */\nexport function getSubPagesSpec(): SubPageNavSpec[] | null {\n const subPages = ADMITTED?.navigation.subPages;\n if (!subPages) return null;\n return subPages.map((item) => ({\n page: item.page,\n to:\n item.page === \"templates\"\n ? automationTemplatesPath()\n : automationListPath(),\n label: item.label,\n icon: item.icon,\n }));\n}\n\nexport interface DashboardSpec {\n overview: InterfaceOverview;\n filters: InterfaceDashboardFilter[];\n sort: InterfaceDashboardSort;\n insights: InterfaceListInsights;\n}\n\n/**\n * The list page's dashboard composition, or null when the manifest does not\n * declare it. Admission accepts the sub-page surface whole or not at all, so\n * these four are present together.\n */\nexport function getDashboardSpec(): DashboardSpec | null {\n const list = ADMITTED?.pages.list;\n if (!list?.overview || !list.filters || !list.sort || !list.insights) {\n return null;\n }\n return {\n overview: list.overview,\n filters: list.filters,\n sort: list.sort,\n insights: list.insights,\n };\n}\n\n/** The templates page identity, or null when the manifest does not declare it. */\nexport function getTemplatesPageSpec(): InterfaceTemplatesPage | null {\n return ADMITTED?.pages.templates ?? null;\n}\n"],"mappings":"wMAqCA,IAAM,EAAiB,CACrB,KAAM,eACN,MAAO,iCACP,OAAQ,6BACR,UAAW,wBACb,EAEM,EAAoD,CACxD,KAAM,MACN,OAAQ,WACR,SAAU,oBACV,KAAM,gBACN,QAAS,mBACT,OAAQ,UACR,aAAc,mBACd,SAAU,eACV,aAAc,oBACd,aAAc,mBAChB,EAEM,EAA+C,CACnD,SAAU,aACV,YAAa,EACb,eAAgB,mBAChB,eAAgB,CACd,aAAc,SACd,uBAAwB,qBAC1B,CACF,EAwFA,SAAS,EAAS,EAAkD,CAClE,OAAO,OAAO,GAAU,YAAY,GAAkB,CAAC,MAAM,QAAQ,CAAK,CAC5E,CAEA,SAAS,GAAqC,CAC5C,OAAO,IAAI,IACR,EAAA,QAA0C,QAAS,GAClD,EAAS,CAAK,GAAK,OAAO,EAAM,IAAO,SAAW,CAAC,EAAM,EAAE,EAAI,CAAC,CAClE,CACF,CACF,CAEA,SAAS,EAAuB,EAA8C,CAC5E,GAAI,IAAc,IAAA,GAAW,OAAO,KAEpC,IAAM,EAAS,EAAA,0BAA0B,EAAW,CAClD,WAAY,EAAc,EAC1B,cAAe,CACjB,CAAC,EAUD,OATK,EAAO,MASL,GANL,QAAQ,KACN,8CACA,EAAO,OAAO,KAAK,IAAI,CACzB,EACO,KAGX,CAEA,IAAM,EAAW,EAAuB,EAAA,8BAA8B,EAMtE,SAAgB,GAA6B,CAC3C,OAAQ,GAAU,QAAU,GAAgB,IAC9C,CAcA,SAAgB,EAAsB,EAAqC,CACzE,OAAQ,GAAU,WAAa,GAAmB,EACpD,CAGA,SAAgB,EACd,EACA,EACQ,CACR,OAAO,EAAsB,CAAI,EAAE,QAAQ,OAAQ,mBAAmB,CAAE,CAAC,CAC3E,CAaA,IAAM,EAA2B,CAC/B,aAAc,KACd,iBAAkB,KAClB,uBAAwB,KACxB,oBAAqB,KACrB,UAAW,KACX,aAAc,KACd,gBAAiB,KACjB,UAAW,IACb,EAEA,SAAgB,GAAkC,CAEhD,OADK,EACE,CACL,aAAc,EAAS,WAAW,QAAQ,MAC1C,iBAAkB,EAAS,WAAW,YAAY,MAClD,uBAAwB,EAAS,WAAW,YAAY,YACxD,oBAAqB,EAAS,WAAW,YAAY,SACrD,UAAW,EAAS,MAAM,KAAK,MAC/B,aAAc,EAAS,MAAM,KAAK,SAClC,gBAAiB,EAAS,MAAM,OAAO,UACvC,UAAW,EAAS,MAAM,KAAK,KACjC,EAVsB,CAWxB,CAiBA,SAAgB,GAA6C,CAC3D,OAAO,GAAU,cAAgB,CACnC"}
@@ -0,0 +1,76 @@
1
+ /**
2
+ * The automation interface seam.
3
+ *
4
+ * Every automation-specific datum the host's surfaces render — routes,
5
+ * navigation and page copy, the settable attributes, the import/export
6
+ * envelope, endpoint paths, the featured and responder id lists — is served
7
+ * from here.
8
+ * The published interface manifest supplies it when the pinned
9
+ * `@openhands/extensions` ships one and it passes admission; otherwise the
10
+ * host's own defaults do, which reproduce today's behavior exactly. Copy
11
+ * defaults are null, meaning "render the host's own translation".
12
+ *
13
+ * The sub-page surface (navigation, overview tiles, filters, sort, run
14
+ * insights, templates page) is the exception: the host holds no definitions
15
+ * of its own, so its accessors return null until an admitted manifest
16
+ * declares it, and the sub-pages simply do not render.
17
+ */
18
+ import type { AutomationAttributeName, InterfaceDashboardFilter, InterfaceDashboardSort, InterfaceEndpointName, InterfaceIconSlug, InterfaceImportExport, InterfaceListInsights, InterfaceOverview, InterfaceSubPageId, InterfaceTemplatesPage } from "./types";
19
+ export interface AttributeSpec {
20
+ present: boolean;
21
+ /** Null means "render the host's own translation". */
22
+ label: string | null;
23
+ help: string | null;
24
+ required: boolean;
25
+ min: number | null;
26
+ max: number | null;
27
+ }
28
+ export declare function automationListPath(): string;
29
+ export declare function automationSetupPath(id: string): string;
30
+ export declare function automationDetailPath(id: string): string;
31
+ export declare function automationTemplatesPath(): string;
32
+ export declare function getAutomationEndpoint(name: InterfaceEndpointName): string;
33
+ /** An id-parameterized endpoint with `{id}` substituted, encoded. */
34
+ export declare function getAutomationIdEndpoint(name: "detail" | "dispatch" | "runs" | "tarball", id: string): string;
35
+ export interface InterfaceCopy {
36
+ sidebarLabel: string | null;
37
+ commandMenuTitle: string | null;
38
+ commandMenuDescription: string | null;
39
+ commandMenuKeywords: string | null;
40
+ listTitle: string | null;
41
+ listSubtitle: string | null;
42
+ detailBackLabel: string | null;
43
+ editTitle: string | null;
44
+ }
45
+ export declare function getInterfaceCopy(): InterfaceCopy;
46
+ export declare function getAttributeSpec(name: AutomationAttributeName): AttributeSpec;
47
+ export declare function getImportExportSpec(): InterfaceImportExport;
48
+ export declare function getAutomationsDocsUrl(): string;
49
+ export declare function getFeaturedAutomationIds(): readonly string[];
50
+ export declare function getResponderIntegrationIds(): readonly string[];
51
+ export interface SubPageNavSpec {
52
+ page: InterfaceSubPageId;
53
+ /** The page's route, resolved through the manifest. */
54
+ to: string;
55
+ label: string;
56
+ icon: InterfaceIconSlug;
57
+ }
58
+ /**
59
+ * The sub-page navigation, or null when the manifest does not declare the
60
+ * sub-page surface. No manifest, no sub-pages — there is no host default.
61
+ */
62
+ export declare function getSubPagesSpec(): SubPageNavSpec[] | null;
63
+ export interface DashboardSpec {
64
+ overview: InterfaceOverview;
65
+ filters: InterfaceDashboardFilter[];
66
+ sort: InterfaceDashboardSort;
67
+ insights: InterfaceListInsights;
68
+ }
69
+ /**
70
+ * The list page's dashboard composition, or null when the manifest does not
71
+ * declare it. Admission accepts the sub-page surface whole or not at all, so
72
+ * these four are present together.
73
+ */
74
+ export declare function getDashboardSpec(): DashboardSpec | null;
75
+ /** The templates page identity, or null when the manifest does not declare it. */
76
+ export declare function getTemplatesPageSpec(): InterfaceTemplatesPage | null;
@@ -0,0 +1,82 @@
1
+ import e from "../node_modules/@openhands/extensions/automations/index.js";
2
+ import { validateInterfaceManifest as t } from "./interface-validation.js";
3
+ import { AUTOMATION_INTERFACE_CANDIDATE as n } from "./manifest-sources.js";
4
+ //#region src/manifests/automation-interface.ts
5
+ var r = {
6
+ list: "/automations",
7
+ setup: "/automations/new/:automationId",
8
+ detail: "/automations/:automationId",
9
+ templates: "/automations/templates"
10
+ }, i = {
11
+ list: "/v1",
12
+ detail: "/v1/{id}",
13
+ dispatch: "/v1/{id}/dispatch",
14
+ runs: "/v1/{id}/runs",
15
+ tarball: "/v1/{id}/tarball",
16
+ health: "/health",
17
+ capabilities: "/v1/capabilities",
18
+ validate: "/v1/validate",
19
+ createPrompt: "/v1/preset/prompt",
20
+ createPlugin: "/v1/preset/plugin"
21
+ }, a = {
22
+ fileKind: "automation",
23
+ fileVersion: 1,
24
+ filenameSuffix: ".automation.json",
25
+ importDefaults: {
26
+ repoProvider: "github",
27
+ placeholderEventSource: "agent-canvas-import"
28
+ }
29
+ };
30
+ function o(e) {
31
+ return typeof e == "object" && !!e && !Array.isArray(e);
32
+ }
33
+ function s() {
34
+ return new Set(e.flatMap((e) => o(e) && typeof e.id == "string" ? [e.id] : []));
35
+ }
36
+ function c(e) {
37
+ if (e === void 0) return null;
38
+ let n = t(e, {
39
+ catalogIds: s(),
40
+ mountedRoutes: r
41
+ });
42
+ return n.valid ? e : (console.warn("Rejected the automation interface manifest:", n.errors.join("; ")), null);
43
+ }
44
+ var l = c(n);
45
+ function u() {
46
+ return (l?.routes ?? r).list;
47
+ }
48
+ function d(e) {
49
+ return (l?.endpoints ?? i)[e];
50
+ }
51
+ function f(e, t) {
52
+ return d(e).replace("{id}", encodeURIComponent(t));
53
+ }
54
+ var p = {
55
+ sidebarLabel: null,
56
+ commandMenuTitle: null,
57
+ commandMenuDescription: null,
58
+ commandMenuKeywords: null,
59
+ listTitle: null,
60
+ listSubtitle: null,
61
+ detailBackLabel: null,
62
+ editTitle: null
63
+ };
64
+ function m() {
65
+ return l ? {
66
+ sidebarLabel: l.navigation.sidebar.label,
67
+ commandMenuTitle: l.navigation.commandMenu.title,
68
+ commandMenuDescription: l.navigation.commandMenu.description,
69
+ commandMenuKeywords: l.navigation.commandMenu.keywords,
70
+ listTitle: l.pages.list.title,
71
+ listSubtitle: l.pages.list.subtitle,
72
+ detailBackLabel: l.pages.detail.backLabel,
73
+ editTitle: l.pages.edit.title
74
+ } : p;
75
+ }
76
+ function h() {
77
+ return l?.importExport ?? a;
78
+ }
79
+ //#endregion
80
+ export { u as automationListPath, d as getAutomationEndpoint, f as getAutomationIdEndpoint, h as getImportExportSpec, m as getInterfaceCopy };
81
+
82
+ //# sourceMappingURL=automation-interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"automation-interface.js","names":[],"sources":["../../src/manifests/automation-interface.ts"],"sourcesContent":["/**\n * The automation interface seam.\n *\n * Every automation-specific datum the host's surfaces render — routes,\n * navigation and page copy, the settable attributes, the import/export\n * envelope, endpoint paths, the featured and responder id lists — is served\n * from here.\n * The published interface manifest supplies it when the pinned\n * `@openhands/extensions` ships one and it passes admission; otherwise the\n * host's own defaults do, which reproduce today's behavior exactly. Copy\n * defaults are null, meaning \"render the host's own translation\".\n *\n * The sub-page surface (navigation, overview tiles, filters, sort, run\n * insights, templates page) is the exception: the host holds no definitions\n * of its own, so its accessors return null until an admitted manifest\n * declares it, and the sub-pages simply do not render.\n */\n\nimport { AUTOMATION_CATALOG } from \"@openhands/extensions/automations\";\nimport { validateInterfaceManifest } from \"./interface-validation\";\nimport { AUTOMATION_INTERFACE_CANDIDATE } from \"./manifest-sources\";\nimport type {\n AutomationAttributeName,\n InterfaceDashboardFilter,\n InterfaceDashboardSort,\n InterfaceEndpointName,\n InterfaceIconSlug,\n InterfaceImportExport,\n InterfaceListInsights,\n InterfaceManifest,\n InterfaceOverview,\n InterfaceRoutes,\n InterfaceSubPageId,\n InterfaceTemplatesPage,\n} from \"./types\";\n\n/** The routes this host has registrations for, in `src/routes.ts`. */\nconst MOUNTED_ROUTES = {\n list: \"/automations\",\n setup: \"/automations/new/:automationId\",\n detail: \"/automations/:automationId\",\n templates: \"/automations/templates\",\n} satisfies InterfaceRoutes;\n\nconst DEFAULT_ENDPOINTS: InterfaceManifest[\"endpoints\"] = {\n list: \"/v1\",\n detail: \"/v1/{id}\",\n dispatch: \"/v1/{id}/dispatch\",\n runs: \"/v1/{id}/runs\",\n tarball: \"/v1/{id}/tarball\",\n health: \"/health\",\n capabilities: \"/v1/capabilities\",\n validate: \"/v1/validate\",\n createPrompt: \"/v1/preset/prompt\",\n createPlugin: \"/v1/preset/plugin\",\n};\n\nconst DEFAULT_IMPORT_EXPORT: InterfaceImportExport = {\n fileKind: \"automation\",\n fileVersion: 1,\n filenameSuffix: \".automation.json\",\n importDefaults: {\n repoProvider: \"github\",\n placeholderEventSource: \"agent-canvas-import\",\n },\n};\n\nconst DEFAULT_DOCS_URL =\n \"https://docs.openhands.dev/openhands/usage/automations/overview\";\n\n/**\n * Proven automations featured above the Beta group. NOT derived from\n * popularityRank (slack-standup-digest@94 outranks slack-channel-monitor@92\n * yet is Beta).\n */\nconst DEFAULT_FEATURED_AUTOMATION_IDS: readonly string[] = [\n \"github-pr-reviewer\",\n \"github-repo-monitor\",\n \"slack-channel-monitor\",\n];\n\n/**\n * Integrations whose automations are treated as event responders that poll\n * continuously, and so get the deployment-choice dialog.\n */\nconst DEFAULT_RESPONDER_INTEGRATION_IDS: readonly string[] = [\n \"github\",\n \"slack\",\n];\n\nexport interface AttributeSpec {\n present: boolean;\n /** Null means \"render the host's own translation\". */\n label: string | null;\n help: string | null;\n required: boolean;\n min: number | null;\n max: number | null;\n}\n\nconst ABSENT_ATTRIBUTE: AttributeSpec = {\n present: false,\n label: null,\n help: null,\n required: false,\n min: null,\n max: null,\n};\n\n/** Today's edit dialog, restated as specs so absence of a manifest changes nothing. */\nconst DEFAULT_ATTRIBUTES: Record<AutomationAttributeName, AttributeSpec> = {\n name: {\n present: true,\n label: null,\n help: null,\n required: true,\n min: null,\n max: null,\n },\n prompt: {\n present: true,\n label: null,\n help: null,\n required: false,\n min: null,\n max: null,\n },\n model: {\n present: true,\n label: null,\n help: null,\n required: false,\n min: null,\n max: null,\n },\n timeout: {\n present: true,\n label: null,\n help: null,\n required: false,\n min: 1,\n max: null,\n },\n schedule: {\n present: true,\n label: null,\n help: null,\n required: false,\n min: null,\n max: null,\n },\n};\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction getCatalogIds(): ReadonlySet<string> {\n return new Set(\n (AUTOMATION_CATALOG as readonly unknown[]).flatMap((entry) =>\n isRecord(entry) && typeof entry.id === \"string\" ? [entry.id] : [],\n ),\n );\n}\n\nfunction admitInterfaceManifest(candidate: unknown): InterfaceManifest | null {\n if (candidate === undefined) return null;\n\n const result = validateInterfaceManifest(candidate, {\n catalogIds: getCatalogIds(),\n mountedRoutes: MOUNTED_ROUTES,\n });\n if (!result.valid) {\n // Mirrors the setup registry: a rejected manifest is skipped loudly, and\n // the host's defaults stand.\n console.warn(\n \"Rejected the automation interface manifest:\",\n result.errors.join(\"; \"),\n );\n return null;\n }\n return candidate as InterfaceManifest;\n}\n\nconst ADMITTED = admitInterfaceManifest(AUTOMATION_INTERFACE_CANDIDATE);\n\nfunction substituteRouteParam(pattern: string, id: string): string {\n return pattern.replace(\":automationId\", encodeURIComponent(id));\n}\n\nexport function automationListPath(): string {\n return (ADMITTED?.routes ?? MOUNTED_ROUTES).list;\n}\n\nexport function automationSetupPath(id: string): string {\n return substituteRouteParam((ADMITTED?.routes ?? MOUNTED_ROUTES).setup, id);\n}\n\nexport function automationDetailPath(id: string): string {\n return substituteRouteParam((ADMITTED?.routes ?? MOUNTED_ROUTES).detail, id);\n}\n\nexport function automationTemplatesPath(): string {\n return ADMITTED?.routes.templates ?? MOUNTED_ROUTES.templates;\n}\n\nexport function getAutomationEndpoint(name: InterfaceEndpointName): string {\n return (ADMITTED?.endpoints ?? DEFAULT_ENDPOINTS)[name];\n}\n\n/** An id-parameterized endpoint with `{id}` substituted, encoded. */\nexport function getAutomationIdEndpoint(\n name: \"detail\" | \"dispatch\" | \"runs\" | \"tarball\",\n id: string,\n): string {\n return getAutomationEndpoint(name).replace(\"{id}\", encodeURIComponent(id));\n}\n\nexport interface InterfaceCopy {\n sidebarLabel: string | null;\n commandMenuTitle: string | null;\n commandMenuDescription: string | null;\n commandMenuKeywords: string | null;\n listTitle: string | null;\n listSubtitle: string | null;\n detailBackLabel: string | null;\n editTitle: string | null;\n}\n\nconst HOST_COPY: InterfaceCopy = {\n sidebarLabel: null,\n commandMenuTitle: null,\n commandMenuDescription: null,\n commandMenuKeywords: null,\n listTitle: null,\n listSubtitle: null,\n detailBackLabel: null,\n editTitle: null,\n};\n\nexport function getInterfaceCopy(): InterfaceCopy {\n if (!ADMITTED) return HOST_COPY;\n return {\n sidebarLabel: ADMITTED.navigation.sidebar.label,\n commandMenuTitle: ADMITTED.navigation.commandMenu.title,\n commandMenuDescription: ADMITTED.navigation.commandMenu.description,\n commandMenuKeywords: ADMITTED.navigation.commandMenu.keywords,\n listTitle: ADMITTED.pages.list.title,\n listSubtitle: ADMITTED.pages.list.subtitle,\n detailBackLabel: ADMITTED.pages.detail.backLabel,\n editTitle: ADMITTED.pages.edit.title,\n };\n}\n\nexport function getAttributeSpec(name: AutomationAttributeName): AttributeSpec {\n if (!ADMITTED) return DEFAULT_ATTRIBUTES[name];\n\n const attribute = ADMITTED.attributes[name];\n if (!attribute) return ABSENT_ATTRIBUTE;\n return {\n present: true,\n label: attribute.label,\n help: attribute.help ?? null,\n required: attribute.required,\n min: attribute.constraints?.min ?? null,\n max: attribute.constraints?.max ?? null,\n };\n}\n\nexport function getImportExportSpec(): InterfaceImportExport {\n return ADMITTED?.importExport ?? DEFAULT_IMPORT_EXPORT;\n}\n\nexport function getAutomationsDocsUrl(): string {\n return ADMITTED?.docsUrl ?? DEFAULT_DOCS_URL;\n}\n\nexport function getFeaturedAutomationIds(): readonly string[] {\n return ADMITTED?.featuredAutomationIds ?? DEFAULT_FEATURED_AUTOMATION_IDS;\n}\n\nexport function getResponderIntegrationIds(): readonly string[] {\n return ADMITTED?.responderIntegrationIds ?? DEFAULT_RESPONDER_INTEGRATION_IDS;\n}\n\nexport interface SubPageNavSpec {\n page: InterfaceSubPageId;\n /** The page's route, resolved through the manifest. */\n to: string;\n label: string;\n icon: InterfaceIconSlug;\n}\n\n/**\n * The sub-page navigation, or null when the manifest does not declare the\n * sub-page surface. No manifest, no sub-pages — there is no host default.\n */\nexport function getSubPagesSpec(): SubPageNavSpec[] | null {\n const subPages = ADMITTED?.navigation.subPages;\n if (!subPages) return null;\n return subPages.map((item) => ({\n page: item.page,\n to:\n item.page === \"templates\"\n ? automationTemplatesPath()\n : automationListPath(),\n label: item.label,\n icon: item.icon,\n }));\n}\n\nexport interface DashboardSpec {\n overview: InterfaceOverview;\n filters: InterfaceDashboardFilter[];\n sort: InterfaceDashboardSort;\n insights: InterfaceListInsights;\n}\n\n/**\n * The list page's dashboard composition, or null when the manifest does not\n * declare it. Admission accepts the sub-page surface whole or not at all, so\n * these four are present together.\n */\nexport function getDashboardSpec(): DashboardSpec | null {\n const list = ADMITTED?.pages.list;\n if (!list?.overview || !list.filters || !list.sort || !list.insights) {\n return null;\n }\n return {\n overview: list.overview,\n filters: list.filters,\n sort: list.sort,\n insights: list.insights,\n };\n}\n\n/** The templates page identity, or null when the manifest does not declare it. */\nexport function getTemplatesPageSpec(): InterfaceTemplatesPage | null {\n return ADMITTED?.pages.templates ?? null;\n}\n"],"mappings":";;;;AAqCA,IAAM,IAAiB;CACrB,MAAM;CACN,OAAO;CACP,QAAQ;CACR,WAAW;AACb,GAEM,IAAoD;CACxD,MAAM;CACN,QAAQ;CACR,UAAU;CACV,MAAM;CACN,SAAS;CACT,QAAQ;CACR,cAAc;CACd,UAAU;CACV,cAAc;CACd,cAAc;AAChB,GAEM,IAA+C;CACnD,UAAU;CACV,aAAa;CACb,gBAAgB;CAChB,gBAAgB;EACd,cAAc;EACd,wBAAwB;CAC1B;AACF;AAwFA,SAAS,EAAS,GAAkD;CAClE,OAAO,OAAO,KAAU,cAAY,KAAkB,CAAC,MAAM,QAAQ,CAAK;AAC5E;AAEA,SAAS,IAAqC;CAC5C,OAAO,IAAI,IACR,EAA0C,SAAS,MAClD,EAAS,CAAK,KAAK,OAAO,EAAM,MAAO,WAAW,CAAC,EAAM,EAAE,IAAI,CAAC,CAClE,CACF;AACF;AAEA,SAAS,EAAuB,GAA8C;CAC5E,IAAI,MAAc,KAAA,GAAW,OAAO;CAEpC,IAAM,IAAS,EAA0B,GAAW;EAClD,YAAY,EAAc;EAC1B,eAAe;CACjB,CAAC;CAUD,OATK,EAAO,QASL,KANL,QAAQ,KACN,+CACA,EAAO,OAAO,KAAK,IAAI,CACzB,GACO;AAGX;AAEA,IAAM,IAAW,EAAuB,CAA8B;AAMtE,SAAgB,IAA6B;CAC3C,QAAQ,GAAU,UAAU,GAAgB;AAC9C;AAcA,SAAgB,EAAsB,GAAqC;CACzE,QAAQ,GAAU,aAAa,GAAmB;AACpD;AAGA,SAAgB,EACd,GACA,GACQ;CACR,OAAO,EAAsB,CAAI,EAAE,QAAQ,QAAQ,mBAAmB,CAAE,CAAC;AAC3E;AAaA,IAAM,IAA2B;CAC/B,cAAc;CACd,kBAAkB;CAClB,wBAAwB;CACxB,qBAAqB;CACrB,WAAW;CACX,cAAc;CACd,iBAAiB;CACjB,WAAW;AACb;AAEA,SAAgB,IAAkC;CAEhD,OADK,IACE;EACL,cAAc,EAAS,WAAW,QAAQ;EAC1C,kBAAkB,EAAS,WAAW,YAAY;EAClD,wBAAwB,EAAS,WAAW,YAAY;EACxD,qBAAqB,EAAS,WAAW,YAAY;EACrD,WAAW,EAAS,MAAM,KAAK;EAC/B,cAAc,EAAS,MAAM,KAAK;EAClC,iBAAiB,EAAS,MAAM,OAAO;EACvC,WAAW,EAAS,MAAM,KAAK;CACjC,IAVsB;AAWxB;AAiBA,SAAgB,IAA6C;CAC3D,OAAO,GAAU,gBAAgB;AACnC"}
@@ -0,0 +1,2 @@
1
+ require("../_virtual/_rolldown/runtime.cjs"),require("../utils/automation-catalog.cjs");var e=require("./automation-interface.cjs").getAutomationEndpoint(`createPrompt`);exports.AUTOMATION_CREATE_ENDPOINT=e;
2
+ //# sourceMappingURL=automation-setup.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"automation-setup.cjs","names":[],"sources":["../../src/manifests/automation-setup.ts"],"sourcesContent":["/**\n * The only module that knows a setup entry configures an *automation*.\n *\n * The published contract states just what varies between entries; everything\n * derivable is the host's to generate. That derivation is here, and nowhere\n * else, so the rest of `src/manifests/` stays about forms rather than about\n * automations.\n *\n * The algorithm mirrors `tests/test_automation_setup.py::_render_payload` in\n * `OpenHands/extensions`, which is the authoritative reference: it produces the\n * request bodies published in that repository's contract fixtures, and those\n * were verified against the live service. The create model is `extra=\"forbid\"`,\n * so any divergence is a hard 422 rather than a dropped field.\n */\n\nimport { findAutomationCommand } from \"#/utils/automation-catalog\";\nimport { getAutomationEndpoint } from \"./automation-interface\";\nimport { collectFields } from \"./manifest-local-validation\";\nimport { interpolateText } from \"./manifest-template\";\nimport type {\n SetupBlock,\n SetupEntry,\n SetupFormValues,\n SetupRequestBody,\n SetupTriggerKind,\n} from \"./types\";\n\n/** The creation endpoint a derived draft would be posted to. */\nexport const AUTOMATION_CREATE_ENDPOINT = getAutomationEndpoint(\"createPrompt\");\n\n/**\n * Trigger properties a form field may fill, per trigger kind. A field under a\n * trigger kind whose name is listed here fills the trigger property of the same\n * name; anything else there, such as a phrase to match, is an input to `filter`.\n */\nconst TRIGGER_PROPERTIES: Record<SetupTriggerKind, readonly string[]> = {\n cron: [\"schedule\", \"timezone\"],\n event: [\"on\"],\n};\n\n/**\n * Repository properties a form field may fill, read the same way\n * {@link TRIGGER_PROPERTIES} is: a field whose name is listed here fills the\n * `repos[]` property of the same name. `url` and `provider` are absent because\n * neither is answered by a field of its own — they come from the repo-picker's\n * value and from its declared provider.\n *\n * These two lists are the only field names the derivation knows; everything\n * else it reads it finds by field type. An entry that wants a base branch in\n * its request therefore has to name that field `ref`.\n */\nconst REPO_PROPERTIES: readonly string[] = [\"ref\"];\n\nconst FORM_PLACEHOLDER_PATTERN = /\\{\\{form\\.([A-Za-z0-9_.]+)\\}\\}/g;\n\n/** The repository input, which supplies `repos` and an event trigger's source. */\nfunction findRepoPickerField(setup: SetupBlock) {\n const match = Object.entries(collectFields(setup)).find(\n ([, field]) => field.type === \"repo-picker\",\n );\n return match ? { name: match[0], field: match[1] } : null;\n}\n\n/** The single trigger kind a direct entry declares, with its fields. */\nfunction getTrigger(setup: SetupBlock) {\n const entries = Object.entries(setup.form.triggers ?? {});\n if (entries.length === 0) return null;\n const [kind, fields] = entries[0];\n return { kind: kind as SetupTriggerKind, fields: fields ?? {} };\n}\n\n/**\n * The create request body these form values produce.\n *\n * No entry declares it: `name` comes from the entry, `repos` from the\n * repo-picker field and its declared provider, and `trigger` from the key and\n * fields under `form.triggers`. Only `prompt` and an event `filter` are\n * declared, because only they cannot be read off the form.\n *\n * Returns null for an assisted entry, which hands setup to a conversation\n * instead of sending a body.\n */\nexport function buildCreatePayload(\n entry: SetupEntry,\n values: SetupFormValues,\n): SetupRequestBody | null {\n const { setup } = entry;\n if (setup.mode !== \"direct\" || !setup.prompt) return null;\n\n const scope = { form: values, automation: entry };\n const repoPicker = findRepoPickerField(setup);\n const repository = repoPicker ? values[repoPicker.name] : undefined;\n\n const payload: SetupRequestBody = {\n name: repository ? `${entry.name} - ${repository}` : entry.name,\n prompt: interpolateText(setup.prompt, scope),\n };\n\n if (repository && repoPicker?.field.provider) {\n const declared = REPO_PROPERTIES.filter((name) => name in values);\n payload.repos = [\n {\n url: repository,\n ...Object.fromEntries(declared.map((name) => [name, values[name]])),\n provider: repoPicker.field.provider,\n },\n ];\n }\n\n const trigger = getTrigger(setup);\n if (trigger) {\n const properties = TRIGGER_PROPERTIES[trigger.kind];\n const declared = Object.keys(trigger.fields).filter((name) =>\n properties.includes(name),\n );\n\n payload.trigger = {\n type: trigger.kind,\n ...Object.fromEntries(declared.map((name) => [name, values[name] ?? \"\"])),\n ...(trigger.kind === \"event\" && {\n source: repoPicker?.field.provider ?? \"\",\n // A filter is optional: an entry that declares none accepts every\n // delivered event, so the key is left off rather than sent empty.\n ...(setup.filter && { filter: interpolateText(setup.filter, scope) }),\n }),\n };\n }\n\n return payload;\n}\n\n/**\n * The preflight body the host sends. The same shape for every entry, so no\n * entry declares it.\n */\nexport function buildPreflightBody(\n entry: SetupEntry,\n values: SetupFormValues,\n): SetupRequestBody | null {\n const draft = buildCreatePayload(entry, values);\n if (!draft) return null;\n\n return {\n automationId: entry.id,\n endpoint: AUTOMATION_CREATE_ENDPOINT,\n draft,\n };\n}\n\n/**\n * What an assisted entry sends into the conversation that finishes setup.\n *\n * The command is not declared either: it lives once, in the owning skill's own\n * `triggers` frontmatter, and the skill defaults to the entry's id. An entry\n * whose skill is invoked by description rather than by command contributes\n * nothing here, and the answers alone open the conversation.\n */\nexport function buildAssistedMessage(\n entry: SetupEntry,\n values: SetupFormValues,\n): string {\n const command = findAutomationCommand(entry);\n const message = entry.setup.message\n ? interpolateText(entry.setup.message, { form: values, automation: entry })\n : \"\";\n\n return [command, message].filter(Boolean).join(\"\\n\\n\");\n}\n\nfunction collectPlaceholderFields(value: string): string[] {\n const names = Array.from(\n value.matchAll(FORM_PLACEHOLDER_PATTERN),\n (match) => match[1],\n );\n return Array.from(new Set(names));\n}\n\n/**\n * Which form fields built each payload path.\n *\n * Preflight and the create endpoint reject a draft by payload path, and the\n * host has to turn that back into a highlighted input. Building the body with\n * each field standing in for its own value recovers the mapping exactly, so an\n * entry does not declare it.\n */\nexport function deriveErrorMap(entry: SetupEntry): Record<string, string[]> {\n const mapping: Record<string, string[]> = {};\n\n const standIns = Object.fromEntries(\n Object.keys(collectFields(entry.setup)).map((name) => [\n name,\n `{{form.${name}}}`,\n ]),\n );\n const template = buildCreatePayload(entry, standIns);\n if (!template) return mapping;\n\n const walk = (node: unknown, path: string): void => {\n if (Array.isArray(node)) {\n node.forEach((item, index) => walk(item, `${path}[${index}]`));\n return;\n }\n if (typeof node === \"object\" && node !== null) {\n Object.entries(node).forEach(([key, item]) =>\n walk(item, path ? `${path}.${key}` : key),\n );\n return;\n }\n if (typeof node === \"string\") {\n const names = collectPlaceholderFields(node);\n if (names.length > 0) mapping[path] = names;\n }\n };\n\n walk(template, \"\");\n return mapping;\n}\n"],"mappings":"wFA4BA,IAAa,sCAA6B,EAAA,sBAAsB,cAAc"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * The only module that knows a setup entry configures an *automation*.
3
+ *
4
+ * The published contract states just what varies between entries; everything
5
+ * derivable is the host's to generate. That derivation is here, and nowhere
6
+ * else, so the rest of `src/manifests/` stays about forms rather than about
7
+ * automations.
8
+ *
9
+ * The algorithm mirrors `tests/test_automation_setup.py::_render_payload` in
10
+ * `OpenHands/extensions`, which is the authoritative reference: it produces the
11
+ * request bodies published in that repository's contract fixtures, and those
12
+ * were verified against the live service. The create model is `extra="forbid"`,
13
+ * so any divergence is a hard 422 rather than a dropped field.
14
+ */
15
+ import type { SetupEntry, SetupFormValues, SetupRequestBody } from "./types";
16
+ /** The creation endpoint a derived draft would be posted to. */
17
+ export declare const AUTOMATION_CREATE_ENDPOINT: string;
18
+ /**
19
+ * The create request body these form values produce.
20
+ *
21
+ * No entry declares it: `name` comes from the entry, `repos` from the
22
+ * repo-picker field and its declared provider, and `trigger` from the key and
23
+ * fields under `form.triggers`. Only `prompt` and an event `filter` are
24
+ * declared, because only they cannot be read off the form.
25
+ *
26
+ * Returns null for an assisted entry, which hands setup to a conversation
27
+ * instead of sending a body.
28
+ */
29
+ export declare function buildCreatePayload(entry: SetupEntry, values: SetupFormValues): SetupRequestBody | null;
30
+ /**
31
+ * The preflight body the host sends. The same shape for every entry, so no
32
+ * entry declares it.
33
+ */
34
+ export declare function buildPreflightBody(entry: SetupEntry, values: SetupFormValues): SetupRequestBody | null;
35
+ /**
36
+ * What an assisted entry sends into the conversation that finishes setup.
37
+ *
38
+ * The command is not declared either: it lives once, in the owning skill's own
39
+ * `triggers` frontmatter, and the skill defaults to the entry's id. An entry
40
+ * whose skill is invoked by description rather than by command contributes
41
+ * nothing here, and the answers alone open the conversation.
42
+ */
43
+ export declare function buildAssistedMessage(entry: SetupEntry, values: SetupFormValues): string;
44
+ /**
45
+ * Which form fields built each payload path.
46
+ *
47
+ * Preflight and the create endpoint reject a draft by payload path, and the
48
+ * host has to turn that back into a highlighted input. Building the body with
49
+ * each field standing in for its own value recovers the mapping exactly, so an
50
+ * entry does not declare it.
51
+ */
52
+ export declare function deriveErrorMap(entry: SetupEntry): Record<string, string[]>;
@@ -0,0 +1,8 @@
1
+ import "../utils/automation-catalog.js";
2
+ import { getAutomationEndpoint as e } from "./automation-interface.js";
3
+ //#region src/manifests/automation-setup.ts
4
+ var t = e("createPrompt");
5
+ //#endregion
6
+ export { t as AUTOMATION_CREATE_ENDPOINT };
7
+
8
+ //# sourceMappingURL=automation-setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"automation-setup.js","names":[],"sources":["../../src/manifests/automation-setup.ts"],"sourcesContent":["/**\n * The only module that knows a setup entry configures an *automation*.\n *\n * The published contract states just what varies between entries; everything\n * derivable is the host's to generate. That derivation is here, and nowhere\n * else, so the rest of `src/manifests/` stays about forms rather than about\n * automations.\n *\n * The algorithm mirrors `tests/test_automation_setup.py::_render_payload` in\n * `OpenHands/extensions`, which is the authoritative reference: it produces the\n * request bodies published in that repository's contract fixtures, and those\n * were verified against the live service. The create model is `extra=\"forbid\"`,\n * so any divergence is a hard 422 rather than a dropped field.\n */\n\nimport { findAutomationCommand } from \"#/utils/automation-catalog\";\nimport { getAutomationEndpoint } from \"./automation-interface\";\nimport { collectFields } from \"./manifest-local-validation\";\nimport { interpolateText } from \"./manifest-template\";\nimport type {\n SetupBlock,\n SetupEntry,\n SetupFormValues,\n SetupRequestBody,\n SetupTriggerKind,\n} from \"./types\";\n\n/** The creation endpoint a derived draft would be posted to. */\nexport const AUTOMATION_CREATE_ENDPOINT = getAutomationEndpoint(\"createPrompt\");\n\n/**\n * Trigger properties a form field may fill, per trigger kind. A field under a\n * trigger kind whose name is listed here fills the trigger property of the same\n * name; anything else there, such as a phrase to match, is an input to `filter`.\n */\nconst TRIGGER_PROPERTIES: Record<SetupTriggerKind, readonly string[]> = {\n cron: [\"schedule\", \"timezone\"],\n event: [\"on\"],\n};\n\n/**\n * Repository properties a form field may fill, read the same way\n * {@link TRIGGER_PROPERTIES} is: a field whose name is listed here fills the\n * `repos[]` property of the same name. `url` and `provider` are absent because\n * neither is answered by a field of its own — they come from the repo-picker's\n * value and from its declared provider.\n *\n * These two lists are the only field names the derivation knows; everything\n * else it reads it finds by field type. An entry that wants a base branch in\n * its request therefore has to name that field `ref`.\n */\nconst REPO_PROPERTIES: readonly string[] = [\"ref\"];\n\nconst FORM_PLACEHOLDER_PATTERN = /\\{\\{form\\.([A-Za-z0-9_.]+)\\}\\}/g;\n\n/** The repository input, which supplies `repos` and an event trigger's source. */\nfunction findRepoPickerField(setup: SetupBlock) {\n const match = Object.entries(collectFields(setup)).find(\n ([, field]) => field.type === \"repo-picker\",\n );\n return match ? { name: match[0], field: match[1] } : null;\n}\n\n/** The single trigger kind a direct entry declares, with its fields. */\nfunction getTrigger(setup: SetupBlock) {\n const entries = Object.entries(setup.form.triggers ?? {});\n if (entries.length === 0) return null;\n const [kind, fields] = entries[0];\n return { kind: kind as SetupTriggerKind, fields: fields ?? {} };\n}\n\n/**\n * The create request body these form values produce.\n *\n * No entry declares it: `name` comes from the entry, `repos` from the\n * repo-picker field and its declared provider, and `trigger` from the key and\n * fields under `form.triggers`. Only `prompt` and an event `filter` are\n * declared, because only they cannot be read off the form.\n *\n * Returns null for an assisted entry, which hands setup to a conversation\n * instead of sending a body.\n */\nexport function buildCreatePayload(\n entry: SetupEntry,\n values: SetupFormValues,\n): SetupRequestBody | null {\n const { setup } = entry;\n if (setup.mode !== \"direct\" || !setup.prompt) return null;\n\n const scope = { form: values, automation: entry };\n const repoPicker = findRepoPickerField(setup);\n const repository = repoPicker ? values[repoPicker.name] : undefined;\n\n const payload: SetupRequestBody = {\n name: repository ? `${entry.name} - ${repository}` : entry.name,\n prompt: interpolateText(setup.prompt, scope),\n };\n\n if (repository && repoPicker?.field.provider) {\n const declared = REPO_PROPERTIES.filter((name) => name in values);\n payload.repos = [\n {\n url: repository,\n ...Object.fromEntries(declared.map((name) => [name, values[name]])),\n provider: repoPicker.field.provider,\n },\n ];\n }\n\n const trigger = getTrigger(setup);\n if (trigger) {\n const properties = TRIGGER_PROPERTIES[trigger.kind];\n const declared = Object.keys(trigger.fields).filter((name) =>\n properties.includes(name),\n );\n\n payload.trigger = {\n type: trigger.kind,\n ...Object.fromEntries(declared.map((name) => [name, values[name] ?? \"\"])),\n ...(trigger.kind === \"event\" && {\n source: repoPicker?.field.provider ?? \"\",\n // A filter is optional: an entry that declares none accepts every\n // delivered event, so the key is left off rather than sent empty.\n ...(setup.filter && { filter: interpolateText(setup.filter, scope) }),\n }),\n };\n }\n\n return payload;\n}\n\n/**\n * The preflight body the host sends. The same shape for every entry, so no\n * entry declares it.\n */\nexport function buildPreflightBody(\n entry: SetupEntry,\n values: SetupFormValues,\n): SetupRequestBody | null {\n const draft = buildCreatePayload(entry, values);\n if (!draft) return null;\n\n return {\n automationId: entry.id,\n endpoint: AUTOMATION_CREATE_ENDPOINT,\n draft,\n };\n}\n\n/**\n * What an assisted entry sends into the conversation that finishes setup.\n *\n * The command is not declared either: it lives once, in the owning skill's own\n * `triggers` frontmatter, and the skill defaults to the entry's id. An entry\n * whose skill is invoked by description rather than by command contributes\n * nothing here, and the answers alone open the conversation.\n */\nexport function buildAssistedMessage(\n entry: SetupEntry,\n values: SetupFormValues,\n): string {\n const command = findAutomationCommand(entry);\n const message = entry.setup.message\n ? interpolateText(entry.setup.message, { form: values, automation: entry })\n : \"\";\n\n return [command, message].filter(Boolean).join(\"\\n\\n\");\n}\n\nfunction collectPlaceholderFields(value: string): string[] {\n const names = Array.from(\n value.matchAll(FORM_PLACEHOLDER_PATTERN),\n (match) => match[1],\n );\n return Array.from(new Set(names));\n}\n\n/**\n * Which form fields built each payload path.\n *\n * Preflight and the create endpoint reject a draft by payload path, and the\n * host has to turn that back into a highlighted input. Building the body with\n * each field standing in for its own value recovers the mapping exactly, so an\n * entry does not declare it.\n */\nexport function deriveErrorMap(entry: SetupEntry): Record<string, string[]> {\n const mapping: Record<string, string[]> = {};\n\n const standIns = Object.fromEntries(\n Object.keys(collectFields(entry.setup)).map((name) => [\n name,\n `{{form.${name}}}`,\n ]),\n );\n const template = buildCreatePayload(entry, standIns);\n if (!template) return mapping;\n\n const walk = (node: unknown, path: string): void => {\n if (Array.isArray(node)) {\n node.forEach((item, index) => walk(item, `${path}[${index}]`));\n return;\n }\n if (typeof node === \"object\" && node !== null) {\n Object.entries(node).forEach(([key, item]) =>\n walk(item, path ? `${path}.${key}` : key),\n );\n return;\n }\n if (typeof node === \"string\") {\n const names = collectPlaceholderFields(node);\n if (names.length > 0) mapping[path] = names;\n }\n };\n\n walk(template, \"\");\n return mapping;\n}\n"],"mappings":";;;AA4BA,IAAa,IAA6B,EAAsB,cAAc"}
@@ -0,0 +1,2 @@
1
+ require("../_virtual/_rolldown/runtime.cjs");const e=require("./types.cjs");var t=/<[A-Za-z/!]/,n=/^[a-z0-9]+(-[a-z0-9]+)*$/,r=`https://docs.openhands.dev/`,i=/^[a-z][a-z-]*$/,a=/^\.[a-z][a-z.]*json$/,o=/^[a-z0-9][a-z0-9.-]*$/,s=/^\/[A-Za-z0-9/{}_-]*$/,c=/^[^{}]*\{id\}[^{}]*$/,l=[`github`,`gitlab`,`bitbucket`],u={name:{type:`text`,required:!0},prompt:{type:`textarea`,required:!1},model:{type:`llm-profile`,required:!1},timeout:{type:`number`,required:!1},schedule:{type:`schedule`,required:!1}},d=Object.keys(u),f=[`list`,`health`,`capabilities`,`validate`,`createPrompt`,`createPlugin`],p=[`detail`,`dispatch`,`runs`,`tarball`];function m(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function h(e,t){return typeof e==`string`&&t.includes(e)}var g=class{errors=[];fail(e,t){return this.errors.push(`${e}: ${t}`),!1}copy(e,n){return typeof e!=`string`||e.length===0?this.fail(n,`must be a non-empty string`):t.test(e)?this.fail(n,`must not contain markup`):!0}closed(e,t,n){Object.keys(e).filter(e=>!t.includes(e)).forEach(e=>this.fail(`${n}.${e}`,`is not allowed`))}record(e,t){return m(e)?!0:(this.fail(t,`must be an object`),!1)}};function _(e,t,n){e.record(t,`routes`)&&(e.closed(t,[`list`,`setup`,`detail`,`templates`],`routes`),[`list`,`setup`,`detail`].forEach(r=>{t[r]!==n[r]&&e.fail(`routes.${r}`,`must be "${n[r]}"`)}),t.templates!==void 0&&t.templates!==n.templates&&e.fail(`routes.templates`,n.templates===void 0?`is not a route this host mounts`:`must be "${n.templates}"`))}function v(t,n){if(!Array.isArray(n)||n.length===0){t.fail(`navigation.subPages`,`must be a non-empty array`);return}let r=new Set;n.forEach((n,i)=>{let a=`navigation.subPages[${i}]`;if(!t.record(n,a))return;t.closed(n,[`page`,`label`,`icon`],a);let{page:o,label:s,icon:c}=n;h(o,e.INTERFACE_SUB_PAGE_IDS)?r.has(o)?t.fail(`${a}.page`,`repeats a page`):r.add(o):t.fail(`${a}.page`,`is not a sub-page this host serves`),t.copy(s,`${a}.label`),y(t,c,`${a}.icon`)})}function y(t,n,r){h(n,e.INTERFACE_ICON_SLUGS)||t.fail(r,`is not an icon this host ships`)}function b(e,t){if(e.record(t,`navigation`)){if(e.closed(t,[`sidebar`,`commandMenu`,`subPages`],`navigation`),e.record(t.sidebar,`navigation.sidebar`)&&(e.closed(t.sidebar,[`label`],`navigation.sidebar`),e.copy(t.sidebar.label,`navigation.sidebar.label`)),e.record(t.commandMenu,`navigation.commandMenu`)){let n=t.commandMenu;e.closed(n,[`title`,`description`,`keywords`],`navigation.commandMenu`),e.copy(n.title,`navigation.commandMenu.title`),e.copy(n.description,`navigation.commandMenu.description`),e.copy(n.keywords,`navigation.commandMenu.keywords`)}t.subPages!==void 0&&v(e,t.subPages)}}function x(e,t){e.record(t,`pages`)&&(e.closed(t,[`list`,`detail`,`edit`,`templates`],`pages`),e.record(t.list,`pages.list`)&&(e.closed(t.list,[`title`,`subtitle`,`overview`,`filters`,`sort`,`insights`],`pages.list`),e.copy(t.list.title,`pages.list.title`),e.copy(t.list.subtitle,`pages.list.subtitle`),t.list.overview!==void 0&&S(e,t.list.overview),t.list.filters!==void 0&&T(e,t.list.filters),t.list.sort!==void 0&&O(e,t.list.sort),t.list.insights!==void 0&&A(e,t.list.insights)),e.record(t.detail,`pages.detail`)&&(e.closed(t.detail,[`backLabel`],`pages.detail`),e.copy(t.detail.backLabel,`pages.detail.backLabel`)),e.record(t.edit,`pages.edit`)&&(e.closed(t.edit,[`title`],`pages.edit`),e.copy(t.edit.title,`pages.edit.title`)),t.templates!==void 0&&j(e,t.templates))}function S(e,t){let n=`pages.list.overview`;if(!e.record(t,n))return;e.closed(t,[`label`,`tiles`],n),e.copy(t.label,`${n}.label`);let{tiles:r}=t;if(!Array.isArray(r)||r.length===0){e.fail(`${n}.tiles`,`must be a non-empty array`);return}let i=new Set;r.forEach((t,r)=>{C(e,t,i,`${n}.tiles[${r}]`)})}function C(t,n,r,i){if(!t.record(n,i))return;t.closed(n,[`metric`,`label`,`detail`,`zeroDetail`,`icon`],i);let{metric:a,label:o,detail:s,zeroDetail:c,icon:l}=n;if(t.copy(o,`${i}.label`),y(t,l,`${i}.icon`),!h(a,e.OVERVIEW_METRICS)){t.fail(`${i}.metric`,`is not a metric this host computes`),t.copy(s,`${i}.detail`),c!==void 0&&t.copy(c,`${i}.zeroDetail`);return}r.has(a)?t.fail(`${i}.metric`,`repeats a metric`):r.add(a),w(t,s,a,`${i}.detail`),c!==void 0&&w(t,c,a,`${i}.zeroDetail`)}function w(t,n,r,i){if(!t.copy(n,i))return;let a=e.OVERVIEW_TILE_PLACEHOLDERS[r];(a.length===0?/\{\{/:RegExp(`\\{\\{(?!(?:${a.join(`|`)})\\}\\})`)).test(n)&&t.fail(i,`uses a placeholder this metric does not expose`)}function T(e,t){let n=`pages.list.filters`;if(!Array.isArray(t)||t.length===0){e.fail(n,`must be a non-empty array`);return}let r=new Set;t.forEach((t,i)=>{E(e,t,r,`${n}[${i}]`)})}function E(t,n,r,i){if(!t.record(n,i))return;t.closed(n,[`id`,`label`,`options`],i);let{id:a,label:o,options:s}=n;if(t.copy(o,`${i}.label`),!h(a,e.DASHBOARD_FILTER_IDS)){t.fail(`${i}.id`,`is not a filter this host implements`);return}r.has(a)?t.fail(`${i}.id`,`repeats a filter`):r.add(a),D(t,s,e.DASHBOARD_FILTER_VALUES[a],`${i}.options`)}function D(e,t,n,r){if(!Array.isArray(t)||t.length<2){e.fail(r,`must offer at least two options`);return}let i=new Set;t.forEach((t,a)=>{let o=`${r}[${a}]`;if(!e.record(t,o))return;e.closed(t,[`value`,`label`],o);let{value:s,label:c}=t;h(s,n)?i.has(s)?e.fail(`${o}.value`,`repeats a value`):i.add(s):e.fail(`${o}.value`,`is not a value this host implements`),e.copy(c,`${o}.label`)}),i.has(`all`)||e.fail(r,`must offer the "all" option`)}function O(t,n){let r=`pages.list.sort`;if(!t.record(n,r))return;t.closed(n,[`label`,`options`,`default`],r);let{label:i,options:a,default:o}=n;t.copy(i,`${r}.label`);let s=new Set;!Array.isArray(a)||a.length===0?t.fail(`${r}.options`,`must be a non-empty array`):a.forEach((n,i)=>{let a=`${r}.options[${i}]`;t.record(n,a)&&(t.closed(n,[`value`,`label`],a),h(n.value,e.DASHBOARD_SORT_VALUES)?s.has(n.value)?t.fail(`${a}.value`,`repeats a value`):s.add(n.value):t.fail(`${a}.value`,`is not a sort this host implements`),t.copy(n.label,`${a}.label`))}),(typeof o!=`string`||!s.has(o))&&t.fail(`${r}.default`,`must be one of the declared option values`)}var k={health:[`healthy`,`failing`,`running`,`disabled`,`neverRun`,`checking`],lastRun:[`label`,`never`,`justNow`],stats:[`runs`,`recentSuccess`,`averageDuration`]};function A(e,t){let n=`pages.list.insights`;e.record(t,n)&&(e.closed(t,Object.keys(k),n),Object.keys(k).forEach(r=>{let i=`${n}.${r}`,a=t[r];if(!e.record(a,i))return;let o=k[r];e.closed(a,o,i),o.forEach(t=>{e.copy(a[t],`${i}.${t}`)})}))}function j(e,t){let n=`pages.templates`;e.record(t,n)&&(e.closed(t,[`title`,`description`],n),e.copy(t.title,`${n}.title`),e.copy(t.description,`${n}.description`))}function M(e,t){let n=m(t.routes)?t.routes:{},r=m(t.navigation)?t.navigation:{},i=m(t.pages)?t.pages:{},a=m(i.list)?i.list:{},o=[[`routes.templates`,n.templates],[`navigation.subPages`,r.subPages],[`pages.templates`,i.templates],[`pages.list.overview`,a.overview],[`pages.list.filters`,a.filters],[`pages.list.sort`,a.sort],[`pages.list.insights`,a.insights]],s=o.filter(([,e])=>e===void 0).map(([e])=>e);s.length===0||s.length===o.length||e.fail(`interface`,`the sub-page surface must be declared whole; missing ${s.join(`, `)}`)}function N(e,t,n,r){if(!e.record(n,r))return;e.closed(n,[`type`,`label`,`help`,`required`,`constraints`],r);let{type:i,label:a,help:o,required:s,constraints:c}=n;if(i!==t.type&&e.fail(`${r}.type`,`must be "${t.type}", the control this host renders`),e.copy(a,`${r}.label`),o!==void 0&&e.copy(o,`${r}.help`),s!==t.required&&e.fail(`${r}.required`,`must be ${t.required}, what this host enforces`),c!==void 0){if(t.type!==`number`)e.fail(`${r}.constraints`,`is only allowed on a number attribute`);else if(e.record(c,`${r}.constraints`)){e.closed(c,[`min`,`max`],`${r}.constraints`);let{min:t,max:n}=c;t!==void 0&&t!==1&&e.fail(`${r}.constraints.min`,`must be the 1 this host enforces`),n!==void 0&&(!Number.isInteger(n)||n<1)&&e.fail(`${r}.constraints.max`,`must be a positive integer`)}}}function P(e,t){if(!e.record(t,`attributes`))return;let n=Object.keys(t);n.length===0&&e.fail(`attributes`,`must declare at least one attribute`),n.forEach(n=>{if(!d.includes(n)){e.fail(`attributes.${n}`,`is not a settable attribute`);return}N(e,u[n],t[n],`attributes.${n}`)})}function F(e,t){if(!e.record(t,`importExport`))return;e.closed(t,[`fileKind`,`fileVersion`,`filenameSuffix`,`importDefaults`],`importExport`);let{fileKind:n,fileVersion:r,filenameSuffix:s,importDefaults:c}=t;(typeof n!=`string`||!i.test(n))&&e.fail(`importExport.fileKind`,`must be a lowercase slug`),r!==1&&e.fail(`importExport.fileVersion`,`must be 1`),(typeof s!=`string`||!a.test(s))&&e.fail(`importExport.filenameSuffix`,`must be a .json suffix`),e.record(c,`importExport.importDefaults`)&&(e.closed(c,[`repoProvider`,`placeholderEventSource`],`importExport.importDefaults`),(typeof c.repoProvider!=`string`||!l.includes(c.repoProvider))&&e.fail(`importExport.importDefaults.repoProvider`,`is not a supported provider`),(typeof c.placeholderEventSource!=`string`||!o.test(c.placeholderEventSource))&&e.fail(`importExport.importDefaults.placeholderEventSource`,`must be a lowercase event source`))}function I(e,t){if(!e.record(t,`endpoints`))return;let n=[...f,...p];e.closed(t,n,`endpoints`);let r=n=>{let r=t[n];return typeof r!=`string`||!s.test(r)||r.includes(`//`)?(e.fail(`endpoints.${n}`,`must be a rooted service-relative path`),null):r};f.forEach(t=>{let n=r(t);n!==null&&/[{}]/.test(n)&&e.fail(`endpoints.${t}`,`must not carry a substitution`)}),p.forEach(t=>{let n=r(t);n!==null&&!c.test(n)&&e.fail(`endpoints.${t}`,`must carry exactly one {id}`)})}function L(e,t,r){if(!Array.isArray(t)||t.length===0)return e.fail(r,`must be a non-empty array`),[];let i=t.filter(t=>typeof t==`string`&&n.test(t)?!0:(e.fail(r,`must contain only lowercase slugs`),!1));return new Set(i).size!==i.length&&e.fail(r,`must not repeat an id`),i}var R=[`version`,`routes`,`navigation`,`pages`,`docsUrl`,`attributes`,`importExport`,`endpoints`,`featuredAutomationIds`,`responderIntegrationIds`];function z(e,t){if(!m(e))return{valid:!1,errors:[`interface: must be an object`]};if(e.version!==`1.0`)return{valid:!1,errors:[`interface.version: must be "1.0"`]};let n=new g;return n.closed(e,R,`interface`),_(n,e.routes,t.mountedRoutes),b(n,e.navigation),x(n,e.pages),(typeof e.docsUrl!=`string`||!e.docsUrl.startsWith(r))&&n.fail(`docsUrl`,`must start with ${r}`),P(n,e.attributes),F(n,e.importExport),I(n,e.endpoints),L(n,e.featuredAutomationIds,`featuredAutomationIds`).forEach(e=>{t.catalogIds.has(e)||n.fail(`featuredAutomationIds`,`${e} is not a catalog entry`)}),L(n,e.responderIntegrationIds,`responderIntegrationIds`),M(n,e),{valid:n.errors.length===0,errors:n.errors}}exports.validateInterfaceManifest=z;
2
+ //# sourceMappingURL=interface-validation.cjs.map