@openhands/agent-canvas 1.16.0 → 1.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1093) hide show
  1. package/README.md +1 -1
  2. package/README.windows.md +2 -2
  3. package/build/assets/{acp-providers-CX3Lh9gj.js → acp-providers-DcY_mKYa.js} +1 -1
  4. package/build/assets/active-backend-context-BnH4-L8h.js +2 -0
  5. package/build/assets/{agent-context-settings-DSZlXrLj.js → agent-context-settings-D3peZkjX.js} +1 -1
  6. package/build/assets/agent-profiles-service.api-DkeZaqIl.js +1 -0
  7. package/build/assets/agent-profiles-settings-7yMWYjGF.js +1 -0
  8. package/build/assets/agent-server-client-options-EHB23gyx.js +1 -0
  9. package/build/assets/agent-server-config-C_x8Otd9.js +1 -0
  10. package/build/assets/agent-server-conversation-service.api-jiCopc2E.js +88 -0
  11. package/build/assets/agent-settings-BF8hM6wb.js +2 -0
  12. package/build/assets/agent-settings-YPutBAeR.js +1 -0
  13. package/build/assets/alert-banner-eYyqvHL3.js +1 -0
  14. package/build/assets/{api-error-message-B-XdSk3b.js → api-error-message-BXo0lCI5.js} +1 -1
  15. package/build/assets/api-key-entry-screen-CCBvBD8u.js +1 -0
  16. package/build/assets/app-settings-BtYDs-Be.js +1 -0
  17. package/build/assets/automation-detail-BxXhb_m2.js +3 -0
  18. package/build/assets/{automation-export-D3a3of4G.js → automation-export-BJsfi7n2.js} +1 -1
  19. package/build/assets/automation-git-sync-B7o_Nbl-.js +1 -0
  20. package/build/assets/automation-setup-route-qaJ6lLCf.js +3 -0
  21. package/build/assets/{automation-templates-BRppNh99.js → automation-templates-Bb98r-kx.js} +1 -1
  22. package/build/assets/automations-list-DEPVNud3.js +1 -0
  23. package/build/assets/{back-nav-button-Cjl_hoxq.js → back-nav-button-B2yBiVMB.js} +1 -1
  24. package/build/assets/backend-form-modal-DxisQV_6.js +1 -0
  25. package/build/assets/backend-synced-settings-badge-DLEp6cq7.js +1 -0
  26. package/build/assets/badge-ehL-kgeO.js +1 -0
  27. package/build/assets/{base-modal-D_L0oEbG.js → base-modal-C1a0TsSx.js} +1 -1
  28. package/build/assets/bot-ByolqPEr.js +1 -0
  29. package/build/assets/{brand-button-BAfk4wGP.js → brand-button-CUMfjb99.js} +1 -1
  30. package/build/assets/browser-SE24Tk8g.js +46 -0
  31. package/build/assets/browser-tab-HjJxHA0V.js +1 -0
  32. package/build/assets/canvas-extension-page-BsUGBb1T.js +1 -0
  33. package/build/assets/canvas-extensions-C9Tm6s_E.js +1 -0
  34. package/build/assets/{canvas-extensions-runtime-2_x5Ezmi.js → canvas-extensions-runtime-B8kxM4rO.js} +1 -1
  35. package/build/assets/{chat-send-button-MUQqCZCS.js → chat-send-button-CGvc2wpE.js} +1 -1
  36. package/build/assets/check-Bo8s5Ylg.js +1 -0
  37. package/build/assets/chevron-down-Cr6Fn_wS.js +1 -0
  38. package/build/assets/chevron-right-CfdfRn-8.js +1 -0
  39. package/build/assets/circle-check-5pH3qCji.js +1 -0
  40. package/build/assets/circle-plus-check-toggle-BDX_ctNs.js +1 -0
  41. package/build/assets/{cloud-funnel-analytics-CztBCCPp.js → cloud-funnel-analytics-D5uJ_4JE.js} +1 -1
  42. package/build/assets/{cog-D-MPQW6G.js → cog-CAEugqtV.js} +1 -1
  43. package/build/assets/command-menu-CQxs4mtX.js +1 -0
  44. package/build/assets/commits-tab-D0xgjipP.js +1 -0
  45. package/build/assets/{condenser-settings-DmEOje-7.js → condenser-settings-D63NJRBT.js} +1 -1
  46. package/build/assets/confirmation-modal-78sd9Vny.js +1 -0
  47. package/build/assets/{context-menu-list-item-I86vKcmM.js → context-menu-list-item-Cm7-7Y-7.js} +1 -1
  48. package/build/assets/conversation-B_nweu5p.js +93 -0
  49. package/build/assets/conversation-edjzrv5w.js +1 -0
  50. package/build/assets/conversation-panel-edjzrv5w.js +1 -0
  51. package/build/assets/conversation-state-store-9D_3P7q4.js +1 -0
  52. package/build/assets/conversation-store-DC-JlJuq.js +6 -0
  53. package/build/assets/{conversation-tab-empty-state-FIbh_lc8.js → conversation-tab-empty-state-B3dpJXX0.js} +1 -1
  54. package/build/assets/copy-to-clipboard-button-B1ljgNxO.js +1 -0
  55. package/build/assets/device-verify-D5QRIS_x.js +1 -0
  56. package/build/assets/{dropdown-classes-Bc1djN0-.js → dropdown-classes-BGvOvW2_.js} +1 -1
  57. package/build/assets/edit-automation-modal-D_JWSmxT.js +1 -0
  58. package/build/assets/empty-state-FK_s1B60.js +1 -0
  59. package/build/assets/{entry.client-CqyPPjOq.js → entry.client-BMafTpjO.js} +2 -2
  60. package/build/assets/enum-filter-dropdown-UNaom12H.js +1 -0
  61. package/build/assets/environment-switch-overlay-COibRUA-.js +1 -0
  62. package/build/assets/error-state-Cf8LRuuY.js +1 -0
  63. package/build/assets/extensions-hub-C_6ahIua.js +1 -0
  64. package/build/assets/extensions-navigation-C5GfpzFe.js +1 -0
  65. package/build/assets/external-link-Bd7Tga-1.js +1 -0
  66. package/build/assets/files-tab-D5PPIWI1.js +1 -0
  67. package/build/assets/{form-control-classes-Bkh5FGrD.js → form-control-classes-Dbq-7YP_.js} +1 -1
  68. package/build/assets/format-model-name-Dfh9Udrx.js +1 -0
  69. package/build/assets/get-git-path-jU2zjqIB.js +1 -0
  70. package/build/assets/git-repo-dropdown-BoDDWXfX.js +1 -0
  71. package/build/assets/git-repo-dropdown-uxlFw2gn.js +1 -0
  72. package/build/assets/highlighted-source-view-C7pAXrT0.js +1 -0
  73. package/build/assets/home-BM5_Wz_R.js +1 -0
  74. package/build/assets/home-Ivfm7KC4.js +1 -0
  75. package/build/assets/home-automation-run-tooltip-B1N2uO9p.js +1 -0
  76. package/build/assets/home-store-DCbei3DX.js +1 -0
  77. package/build/assets/hooks-service-Dnmhqc0Z.js +1 -0
  78. package/build/assets/index-home-td9BN2T3.js +1 -0
  79. package/build/assets/info-BcajzHn1.js +1 -0
  80. package/build/assets/install-server-modal-B81I-5OE.js +1 -0
  81. package/build/assets/kebab-menu-item-content-SCJBwZnp.js +1 -0
  82. package/build/assets/{key-BmVyxs-2.js → key-O84CMFHb.js} +1 -1
  83. package/build/assets/launch-ZLxI4opd.js +1 -0
  84. package/build/assets/list-filter-B8PQk3RA.js +1 -0
  85. package/build/assets/{list-todo-apgLVjMw.js → list-todo-Caa8E1X_.js} +1 -1
  86. package/build/assets/llm-not-configured-banner-Dh_ajcM8.js +27 -0
  87. package/build/assets/llm-settings-CODhjQzy.js +1 -0
  88. package/build/assets/llm-settings-CZaXYgtw.js +1 -0
  89. package/build/assets/llm-subscription-service-CgIDc38n.js +1 -0
  90. package/build/assets/loader-circle-BxJgk73D.js +1 -0
  91. package/build/assets/{loading-spinner-BY9N3pOe.js → loading-spinner-BeLV0IXf.js} +1 -1
  92. package/build/assets/manage-backends-modal-cMXqCb-B.js +1 -0
  93. package/build/assets/manifest-bfeccb98.js +1 -0
  94. package/build/assets/manifest-subpage-layout-CVZgVKoY.js +1 -0
  95. package/build/assets/{map-provider-Cu3Zgumb.js → map-provider-iRs80q_6.js} +1 -1
  96. package/build/assets/markdown-renderer-DyFl9-mL.js +8 -0
  97. package/build/assets/mcp-CraxoXQv.js +1 -0
  98. package/build/assets/{mcp-marketplace-utils-AIBzzHTO.js → mcp-marketplace-utils-C7PYr293.js} +1 -1
  99. package/build/assets/mcp-page-CteH_K0N.js +9 -0
  100. package/build/assets/messages-Bk1xhbU2.js +41 -0
  101. package/build/assets/{modal-body-BxZjsju9.js → modal-body-C24WsdFb.js} +1 -1
  102. package/build/assets/{modal-classes-C8eycCwG.js → modal-classes-B0b9eiL8.js} +1 -1
  103. package/build/assets/modal-close-button-DfqfB2Nj.js +1 -0
  104. package/build/assets/{mouse-pointer-click-Co2uyaPA.js → mouse-pointer-click-BXlRN92t.js} +1 -1
  105. package/build/assets/onboarding-DXFBRqEy.js +1 -0
  106. package/build/assets/onboarding-modal-BT3Gx_sZ.js +1 -0
  107. package/build/assets/organization-service.api-B5CvmnYQ.js +1 -0
  108. package/build/assets/pencil-q-ihqDYv.js +1 -0
  109. package/build/assets/pin-BdroVQdN.js +1 -0
  110. package/build/assets/planner-tab-CstoOlAB.js +1 -0
  111. package/build/assets/plug-7ACOEbMs.js +1 -0
  112. package/build/assets/plugins-management-service-5rqVPEGN.js +1 -0
  113. package/build/assets/plus-C2e21TFC.js +1 -0
  114. package/build/assets/profiles-service.api-D1XKMgr0.js +1 -0
  115. package/build/assets/providers-XmZ9HM4Q.js +1 -0
  116. package/build/assets/proxy-XP6U1Dhv.js +1 -0
  117. package/build/assets/{puzzle-JM_QaRm0.js → puzzle-LJYnuxKe.js} +1 -1
  118. package/build/assets/react-BX7IV650.js +1 -0
  119. package/build/assets/recommended-automations-launcher-DEHRKIAg.js +1 -0
  120. package/build/assets/refresh-cw-BtdC3T8P.js +1 -0
  121. package/build/assets/root-CM6IZHlg.css +1 -0
  122. package/build/assets/root-DdFkodKW.js +2 -0
  123. package/build/assets/root-layout-DUquNZTU.js +2 -0
  124. package/build/assets/schema-field-Y3F8JvXd.js +1 -0
  125. package/build/assets/scroll-fade-state-Dt_fx2kf.js +1 -0
  126. package/build/assets/sdk-section-page-CNZTLwH9.js +1 -0
  127. package/build/assets/secret-form-9-BoGA40.js +1 -0
  128. package/build/assets/secrets-service-BOIsfD9j.js +1 -0
  129. package/build/assets/secrets-settings-CBJgFr42.js +1 -0
  130. package/build/assets/settings-D4hdToD4.js +1 -0
  131. package/build/assets/settings-dropdown-input-DBvsZ7-Q.js +1 -0
  132. package/build/assets/settings-index-DeQphyBK.js +1 -0
  133. package/build/assets/settings-input-dVuzapBA.js +1 -0
  134. package/build/assets/{settings-list-classes-BzeSZbF2.js → settings-list-classes-DhAPuXm6.js} +1 -1
  135. package/build/assets/settings-modal-tHiJ8iYV.js +1 -0
  136. package/build/assets/settings-nav-GAQjW1a-.js +16 -0
  137. package/build/assets/settings-service.api-C1vZH9Vh.js +1 -0
  138. package/build/assets/settings-switch-DDd1cQ8t.js +1 -0
  139. package/build/assets/{settings-utils-UYpEdPuD.js → settings-utils-BTaaRhLZ.js} +1 -1
  140. package/build/assets/shared-conversation-Cyg7m7ns.js +1 -0
  141. package/build/assets/shield-check-C3Rl0NF8.js +1 -0
  142. package/build/assets/{sidebar-layout-D6fS8-Gl.js → sidebar-layout-DH0E-5KW.js} +1 -1
  143. package/build/assets/sidebar-mobile-menu-toggle-CQ4iky__.js +1 -0
  144. package/build/assets/{sidebar-nav-link-DQQcMf1A.js → sidebar-nav-link-oLQiKUBu.js} +1 -1
  145. package/build/assets/{sidebar-onboarding-checklist-storage-BBkeI6Bp.js → sidebar-onboarding-checklist-storage-TfvNNnnr.js} +1 -1
  146. package/build/assets/sidebar-store-DAZVH-DR.js +1 -0
  147. package/build/assets/skill-card-pill-row-DfjIfj0K.js +1 -0
  148. package/build/assets/{skill-filter-w__3UCEE.js → skill-filter-DsNLmn76.js} +2 -2
  149. package/build/assets/{skill-icon-badge-RQkq8wvl.js → skill-icon-badge-0MK_68Nc.js} +1 -1
  150. package/build/assets/skill-scope-BE-H9TSZ.js +1 -0
  151. package/build/assets/skills-plugins-vzSdxSk_.js +1 -0
  152. package/build/assets/skills-settings-BiPOH9H9.js +1 -0
  153. package/build/assets/styled-tooltip-CejG0rqv.js +1 -0
  154. package/build/assets/task-list-tab-OkZSqnTp.js +1 -0
  155. package/build/assets/{terminal-CNElN42a.js → terminal-Dph60VFZ.js} +2 -2
  156. package/build/assets/toggle-switch-B2uXaAUS.js +1 -0
  157. package/build/assets/trash-2-Bb40zQzs.js +1 -0
  158. package/build/assets/trash-Ckh7yCaB.js +1 -0
  159. package/build/assets/triangle-alert-DEdu-b_L.js +1 -0
  160. package/build/assets/{typography-v1KN0tzi.js → typography-DgcLGdHk.js} +1 -1
  161. package/build/assets/usage-tab-MCmNRAnR.js +1 -0
  162. package/build/assets/use-acp-credential-form-ychoGqjC.js +1 -0
  163. package/build/assets/use-activate-agent-profile-8L8Xdghy.js +1 -0
  164. package/build/assets/use-agent-profiles-Bi8hSkze.js +1 -0
  165. package/build/assets/{use-automation-health-E6NZi9rb.js → use-automation-health-U99vvHxx.js} +1 -1
  166. package/build/assets/use-automation-permissions-Buus0R6h.js +1 -0
  167. package/build/assets/{use-automations-xijQKIl9.js → use-automations-Bq5hVuv0.js} +1 -1
  168. package/build/assets/{use-can-manage-org-profiles-CrJP5262.js → use-can-manage-org-profiles-MzIeEV8F.js} +1 -1
  169. package/build/assets/use-canvas-extensions-Ca9KoVEm.js +1 -0
  170. package/build/assets/{use-cloud-current-user-id-CDfAHpPX.js → use-cloud-current-user-id-B4ZLUZSa.js} +1 -1
  171. package/build/assets/use-config-l5tkDHyD.js +1 -0
  172. package/build/assets/use-create-conversation-i_PdFdIs.js +1 -0
  173. package/build/assets/use-create-secret-CjWq0J4O.js +1 -0
  174. package/build/assets/use-free-models-gCsJ5BV0.js +1 -0
  175. package/build/assets/{use-get-secrets-K3jmk-LH.js → use-get-secrets-CMTuWEp_.js} +1 -1
  176. package/build/assets/use-is-authed-A2Yinlt0.js +1 -0
  177. package/build/assets/{use-launch-skill-in-chat-BYjYihBP.js → use-launch-skill-in-chat-QbXDhiHr.js} +1 -1
  178. package/build/assets/use-llm-configured-Dl4zg8ht.js +1 -0
  179. package/build/assets/use-llm-profiles-SWsuFmFu.js +1 -0
  180. package/build/assets/use-manifest-capabilities-CdqYfUAC.js +1 -0
  181. package/build/assets/use-onboarding-completion-Xl63ZvzQ.js +1 -0
  182. package/build/assets/use-pinned-home-route-BXDIUaxQ.js +1 -0
  183. package/build/assets/use-plugins-marketplace-BIIaPiaB.js +1 -0
  184. package/build/assets/use-save-agent-profile-D-ZHHE94.js +1 -0
  185. package/build/assets/{use-save-settings-DYqkKv7T.js → use-save-settings-Dapkf4cC.js} +1 -1
  186. package/build/assets/use-settings-C2KKQKVC.js +1 -0
  187. package/build/assets/use-settings-nav-items-TOc0Rsfd.js +1 -0
  188. package/build/assets/use-tracking-j4uo9VEW.js +3 -0
  189. package/build/assets/{use-user-conversation-B9Gebw_g.js → use-user-conversation-5UFqMoO4.js} +1 -1
  190. package/build/assets/{useInfiniteQuery-C926xzY4.js → useInfiniteQuery-CtSRG7uW.js} +1 -1
  191. package/build/assets/{useMutation-B-qc391N.js → useMutation-Cszf8mKy.js} +1 -1
  192. package/build/assets/useQueries-pUohFMSP.js +1 -0
  193. package/build/assets/useQuery-DAAacS7O.js +1 -0
  194. package/build/assets/useTranslation-CCgUjPJF.js +1 -0
  195. package/build/assets/utils-BgLSZdyy.js +1 -0
  196. package/build/assets/{vendor~conversation-panel~conversation-C8Fn4XOf.js → vendor~conversation-panel~conversation-C22sJuWZ.js} +1 -1
  197. package/build/assets/vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~b0x1wrp2-Z0lly3FE.js +2 -0
  198. package/build/assets/vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~czjee3a3-BXXGJNDU.js +185 -0
  199. package/build/assets/vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~ew9ih1s8-40UR63Gt.js +1 -0
  200. package/build/assets/{vendor~index-home~home~conversation-panel~conversation-hWywRBaR.js → vendor~index-home~home~conversation-panel~conversation-UTl7gUo9.js} +1 -1
  201. package/build/assets/vendor~root-layout-CcdIqs-C.js +1 -0
  202. package/build/assets/{vendor~root-layout~conversation-panel~conversation-BMbMgaGu.js → vendor~root-layout~conversation-panel~conversation-C3EBV3kp.js} +1 -1
  203. package/build/assets/vendor~root-layout~conversation-panel~conversation~skills-settings~automations-list~shared-~bovqqk8e-BCe0JJVy.js +1 -0
  204. package/build/assets/{vendor~root-layout~index-home~home~conversation-panel~conversation-j5MFqfSy.js → vendor~root-layout~index-home~home~conversation-panel~conversation-BGGbPcYh.js} +1 -1
  205. package/build/assets/vendor~root-layout~index-home~home~conversation-panel~conversation~mcp~automations-list~aut~ibfbmr9f-CxhwKuAd.js +1 -0
  206. package/build/assets/{vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~nj1hli3r-DP9wmsjo.js → vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~inibp4qe-CnsDDzeE.js} +1 -1
  207. package/build/assets/{vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~skills-setti~eo2nf80n-CUmIwQCN.js → vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~skills-setti~eo2nf80n-3eJ4ExtV.js} +12 -6
  208. package/build/assets/{verification-settings-gw_q6vkL.js → verification-settings-DdBpaVPz.js} +1 -1
  209. package/build/assets/{wrench-CUEI1krB.js → wrench-B8Wg_nbp.js} +1 -1
  210. package/build/assets/x-CX8lVGwm.js +1 -0
  211. package/build/index.html +4 -4
  212. package/build/locales/ar/openhands.json +79 -22
  213. package/build/locales/ca/openhands.json +79 -22
  214. package/build/locales/de/openhands.json +79 -22
  215. package/build/locales/en/openhands.json +79 -22
  216. package/build/locales/es/openhands.json +79 -22
  217. package/build/locales/fr/openhands.json +79 -22
  218. package/build/locales/it/openhands.json +79 -22
  219. package/build/locales/ja/openhands.json +79 -22
  220. package/build/locales/ko-KR/openhands.json +79 -22
  221. package/build/locales/no/openhands.json +79 -22
  222. package/build/locales/pt/openhands.json +79 -22
  223. package/build/locales/tr/openhands.json +79 -22
  224. package/build/locales/uk/openhands.json +79 -22
  225. package/build/locales/zh-CN/openhands.json +79 -22
  226. package/build/locales/zh-TW/openhands.json +79 -22
  227. package/config/defaults.json +3 -3
  228. package/dist/api/agent-server-adapter.cjs +3 -3
  229. package/dist/api/agent-server-adapter.cjs.map +1 -1
  230. package/dist/api/agent-server-adapter.d.ts +72 -12
  231. package/dist/api/agent-server-adapter.js +234 -132
  232. package/dist/api/agent-server-adapter.js.map +1 -1
  233. package/dist/api/agent-server-config.cjs +1 -1
  234. package/dist/api/agent-server-config.cjs.map +1 -1
  235. package/dist/api/agent-server-config.d.ts +6 -0
  236. package/dist/api/agent-server-config.js +6 -3
  237. package/dist/api/agent-server-config.js.map +1 -1
  238. package/dist/api/automation-service/automation-service.api.cjs +1 -1
  239. package/dist/api/automation-service/automation-service.api.cjs.map +1 -1
  240. package/dist/api/automation-service/automation-service.api.d.ts +2 -2
  241. package/dist/api/automation-service/automation-service.api.js +7 -7
  242. package/dist/api/automation-service/automation-service.api.js.map +1 -1
  243. package/dist/api/cloud/organization-service.api.cjs.map +1 -1
  244. package/dist/api/cloud/organization-service.api.d.ts +9 -1
  245. package/dist/api/cloud/organization-service.api.js.map +1 -1
  246. package/dist/api/cloud/provider-connections-service.api.cjs +2 -0
  247. package/dist/api/cloud/provider-connections-service.api.cjs.map +1 -0
  248. package/dist/api/cloud/provider-connections-service.api.d.ts +5 -0
  249. package/dist/api/cloud/provider-connections-service.api.js +50 -0
  250. package/dist/api/cloud/provider-connections-service.api.js.map +1 -0
  251. package/dist/api/cloud/skills-service.api.cjs +1 -1
  252. package/dist/api/cloud/skills-service.api.cjs.map +1 -1
  253. package/dist/api/cloud/skills-service.api.d.ts +10 -0
  254. package/dist/api/cloud/skills-service.api.js +11 -1
  255. package/dist/api/cloud/skills-service.api.js.map +1 -1
  256. package/dist/api/config-service/config-service.api.cjs +1 -1
  257. package/dist/api/config-service/config-service.api.cjs.map +1 -1
  258. package/dist/api/config-service/config-service.api.js +6 -2
  259. package/dist/api/config-service/config-service.api.js.map +1 -1
  260. package/dist/api/config-service/config-service.types.d.ts +13 -0
  261. package/dist/api/conversation-metadata-store.cjs +1 -1
  262. package/dist/api/conversation-metadata-store.cjs.map +1 -1
  263. package/dist/api/conversation-metadata-store.d.ts +24 -0
  264. package/dist/api/conversation-metadata-store.js +10 -2
  265. package/dist/api/conversation-metadata-store.js.map +1 -1
  266. package/dist/api/conversation-service/agent-server-conversation-service.api.cjs +1 -1
  267. package/dist/api/conversation-service/agent-server-conversation-service.api.cjs.map +1 -1
  268. package/dist/api/conversation-service/agent-server-conversation-service.api.d.ts +20 -0
  269. package/dist/api/conversation-service/agent-server-conversation-service.api.js +126 -77
  270. package/dist/api/conversation-service/agent-server-conversation-service.api.js.map +1 -1
  271. package/dist/api/hooks-service.cjs +2 -0
  272. package/dist/api/hooks-service.cjs.map +1 -0
  273. package/dist/api/hooks-service.d.ts +13 -0
  274. package/dist/api/hooks-service.js +20 -0
  275. package/dist/api/hooks-service.js.map +1 -0
  276. package/dist/api/provider-connections-service/provider-connections-service.api.cjs +1 -1
  277. package/dist/api/provider-connections-service/provider-connections-service.api.cjs.map +1 -1
  278. package/dist/api/provider-connections-service/provider-connections-service.api.js +25 -16
  279. package/dist/api/provider-connections-service/provider-connections-service.api.js.map +1 -1
  280. package/dist/api/settings-service/settings-service.api.cjs +1 -1
  281. package/dist/api/settings-service/settings-service.api.cjs.map +1 -1
  282. package/dist/api/settings-service/settings-service.api.d.ts +2 -0
  283. package/dist/api/settings-service/settings-service.api.js +18 -10
  284. package/dist/api/settings-service/settings-service.api.js.map +1 -1
  285. package/dist/api/skills-service.cjs +1 -1
  286. package/dist/api/skills-service.cjs.map +1 -1
  287. package/dist/api/skills-service.d.ts +7 -0
  288. package/dist/api/skills-service.js +11 -8
  289. package/dist/api/skills-service.js.map +1 -1
  290. package/dist/components/conversation-events/chat/event-message-components/critic-result-display.cjs +1 -1
  291. package/dist/components/conversation-events/chat/event-message-components/critic-result-display.js +5 -5
  292. package/dist/components/conversation-events/chat/event-message-components/finish-event-message.cjs +1 -1
  293. package/dist/components/conversation-events/chat/event-message-components/finish-event-message.cjs.map +1 -1
  294. package/dist/components/conversation-events/chat/event-message-components/finish-event-message.js +2 -1
  295. package/dist/components/conversation-events/chat/event-message-components/finish-event-message.js.map +1 -1
  296. package/dist/components/conversation-events/chat/event-message-components/generic-event-message-wrapper.cjs +1 -1
  297. package/dist/components/conversation-events/chat/event-message-components/generic-event-message-wrapper.cjs.map +1 -1
  298. package/dist/components/conversation-events/chat/event-message-components/generic-event-message-wrapper.d.ts +1 -1
  299. package/dist/components/conversation-events/chat/event-message-components/generic-event-message-wrapper.js +28 -28
  300. package/dist/components/conversation-events/chat/event-message-components/generic-event-message-wrapper.js.map +1 -1
  301. package/dist/components/conversation-events/chat/event-message-components/thought-event-message.cjs +1 -1
  302. package/dist/components/conversation-events/chat/event-message-components/thought-event-message.cjs.map +1 -1
  303. package/dist/components/conversation-events/chat/event-message-components/thought-event-message.js +2 -1
  304. package/dist/components/conversation-events/chat/event-message-components/thought-event-message.js.map +1 -1
  305. package/dist/components/conversation-events/chat/event-message-components/user-assistant-event-message.cjs +1 -1
  306. package/dist/components/conversation-events/chat/event-message-components/user-assistant-event-message.cjs.map +1 -1
  307. package/dist/components/conversation-events/chat/event-message-components/user-assistant-event-message.d.ts +1 -1
  308. package/dist/components/conversation-events/chat/event-message-components/user-assistant-event-message.js +37 -37
  309. package/dist/components/conversation-events/chat/event-message-components/user-assistant-event-message.js.map +1 -1
  310. package/dist/components/conversation-events/chat/event-message.cjs +2 -2
  311. package/dist/components/conversation-events/chat/event-message.cjs.map +1 -1
  312. package/dist/components/conversation-events/chat/event-message.js +79 -70
  313. package/dist/components/conversation-events/chat/event-message.js.map +1 -1
  314. package/dist/components/conversation-events/chat/messages.cjs +1 -1
  315. package/dist/components/conversation-events/chat/messages.cjs.map +1 -1
  316. package/dist/components/conversation-events/chat/messages.js +28 -27
  317. package/dist/components/conversation-events/chat/messages.js.map +1 -1
  318. package/dist/components/features/automations/automation-card.cjs +1 -1
  319. package/dist/components/features/automations/automation-card.cjs.map +1 -1
  320. package/dist/components/features/automations/automation-card.js +104 -97
  321. package/dist/components/features/automations/automation-card.js.map +1 -1
  322. package/dist/components/features/automations/automation-list-row.cjs +1 -1
  323. package/dist/components/features/automations/automation-list-row.cjs.map +1 -1
  324. package/dist/components/features/automations/automation-list-row.js +89 -77
  325. package/dist/components/features/automations/automation-list-row.js.map +1 -1
  326. package/dist/components/features/automations/build-automation-menu-items.cjs +1 -1
  327. package/dist/components/features/automations/build-automation-menu-items.cjs.map +1 -1
  328. package/dist/components/features/automations/build-automation-menu-items.d.ts +3 -1
  329. package/dist/components/features/automations/build-automation-menu-items.js +12 -11
  330. package/dist/components/features/automations/build-automation-menu-items.js.map +1 -1
  331. package/dist/components/features/automations/detail/configuration-section.d.ts +7 -1
  332. package/dist/components/features/automations/detail/detail-header.d.ts +10 -5
  333. package/dist/components/features/automations/detail/run-status-badge.cjs +1 -1
  334. package/dist/components/features/automations/detail/run-status-badge.cjs.map +1 -1
  335. package/dist/components/features/automations/detail/run-status-badge.d.ts +2 -2
  336. package/dist/components/features/automations/detail/run-status-badge.js +82 -53
  337. package/dist/components/features/automations/detail/run-status-badge.js.map +1 -1
  338. package/dist/components/features/automations/kebab-menu.cjs +1 -1
  339. package/dist/components/features/automations/kebab-menu.cjs.map +1 -1
  340. package/dist/components/features/automations/kebab-menu.js +9 -5
  341. package/dist/components/features/automations/kebab-menu.js.map +1 -1
  342. package/dist/components/features/automations/recommended-automations-launcher.cjs +1 -1
  343. package/dist/components/features/automations/recommended-automations-launcher.cjs.map +1 -1
  344. package/dist/components/features/automations/recommended-automations-launcher.js +12 -12
  345. package/dist/components/features/automations/recommended-automations-launcher.js.map +1 -1
  346. package/dist/components/features/automations/recommended-automations-section.cjs +1 -1
  347. package/dist/components/features/automations/recommended-automations-section.js +9 -9
  348. package/dist/components/features/backends/backend-selector.cjs +1 -1
  349. package/dist/components/features/backends/backend-selector.cjs.map +1 -1
  350. package/dist/components/features/backends/backend-selector.js +123 -112
  351. package/dist/components/features/backends/backend-selector.js.map +1 -1
  352. package/dist/components/features/backends/manage-backends-modal.cjs +1 -1
  353. package/dist/components/features/backends/manage-backends-modal.cjs.map +1 -1
  354. package/dist/components/features/backends/manage-backends-modal.js +29 -29
  355. package/dist/components/features/backends/manage-backends-modal.js.map +1 -1
  356. package/dist/components/features/chat/change-agent-button.cjs +1 -1
  357. package/dist/components/features/chat/change-agent-button.js +4 -4
  358. package/dist/components/features/chat/chat-interface.cjs +2 -2
  359. package/dist/components/features/chat/chat-interface.cjs.map +1 -1
  360. package/dist/components/features/chat/chat-interface.js +137 -137
  361. package/dist/components/features/chat/chat-interface.js.map +1 -1
  362. package/dist/components/features/chat/chat-message.cjs +1 -1
  363. package/dist/components/features/chat/chat-message.cjs.map +1 -1
  364. package/dist/components/features/chat/chat-message.d.ts +2 -1
  365. package/dist/components/features/chat/chat-message.js +88 -79
  366. package/dist/components/features/chat/chat-message.js.map +1 -1
  367. package/dist/components/features/chat/components/chat-input-llm-profile-picker.cjs +1 -1
  368. package/dist/components/features/chat/components/chat-input-llm-profile-picker.cjs.map +1 -1
  369. package/dist/components/features/chat/components/chat-input-llm-profile-picker.js +62 -61
  370. package/dist/components/features/chat/components/chat-input-llm-profile-picker.js.map +1 -1
  371. package/dist/components/features/chat/components/context-window-meter.cjs +1 -1
  372. package/dist/components/features/chat/components/context-window-meter.js +4 -4
  373. package/dist/components/features/chat/confirmation-mode-enabled.cjs +1 -1
  374. package/dist/components/features/chat/confirmation-mode-enabled.js +4 -4
  375. package/dist/components/features/chat/generic-event-message.cjs +1 -1
  376. package/dist/components/features/chat/generic-event-message.cjs.map +1 -1
  377. package/dist/components/features/chat/generic-event-message.d.ts +2 -1
  378. package/dist/components/features/chat/generic-event-message.js +41 -22
  379. package/dist/components/features/chat/generic-event-message.js.map +1 -1
  380. package/dist/components/features/chat/interactive-chat-box.cjs +1 -1
  381. package/dist/components/features/chat/interactive-chat-box.cjs.map +1 -1
  382. package/dist/components/features/chat/interactive-chat-box.js +20 -19
  383. package/dist/components/features/chat/interactive-chat-box.js.map +1 -1
  384. package/dist/components/features/chat/model-messages.cjs +1 -1
  385. package/dist/components/features/chat/model-messages.cjs.map +1 -1
  386. package/dist/components/features/chat/model-messages.js +27 -26
  387. package/dist/components/features/chat/model-messages.js.map +1 -1
  388. package/dist/components/features/conversation/conversation-overview-git-section.cjs +1 -1
  389. package/dist/components/features/conversation/conversation-overview-git-section.js +4 -4
  390. package/dist/components/features/conversation/conversation-overview-skills-panel.cjs +1 -1
  391. package/dist/components/features/conversation/conversation-overview-skills-panel.js +4 -4
  392. package/dist/components/features/conversation/conversation-tabs/conversation-tabs-context-menu.cjs +1 -1
  393. package/dist/components/features/conversation/conversation-tabs/conversation-tabs-context-menu.cjs.map +1 -1
  394. package/dist/components/features/conversation/conversation-tabs/conversation-tabs-context-menu.js +77 -78
  395. package/dist/components/features/conversation/conversation-tabs/conversation-tabs-context-menu.js.map +1 -1
  396. package/dist/components/features/conversation/conversation-tabs/conversation-tabs.cjs +1 -1
  397. package/dist/components/features/conversation/conversation-tabs/conversation-tabs.cjs.map +1 -1
  398. package/dist/components/features/conversation/conversation-tabs/conversation-tabs.js +88 -88
  399. package/dist/components/features/conversation/conversation-tabs/conversation-tabs.js.map +1 -1
  400. package/dist/components/features/conversation-panel/advanced-conversation-options-modal.cjs +2 -0
  401. package/dist/components/features/conversation-panel/advanced-conversation-options-modal.cjs.map +1 -0
  402. package/dist/components/features/conversation-panel/advanced-conversation-options-modal.d.ts +21 -0
  403. package/dist/components/features/conversation-panel/advanced-conversation-options-modal.js +239 -0
  404. package/dist/components/features/conversation-panel/advanced-conversation-options-modal.js.map +1 -0
  405. package/dist/components/features/conversation-panel/budget-display.cjs +1 -1
  406. package/dist/components/features/conversation-panel/budget-display.cjs.map +1 -1
  407. package/dist/components/features/conversation-panel/budget-display.d.ts +1 -2
  408. package/dist/components/features/conversation-panel/budget-display.js +12 -19
  409. package/dist/components/features/conversation-panel/budget-display.js.map +1 -1
  410. package/dist/components/features/conversation-panel/conversation-active-tag-filters.cjs +2 -0
  411. package/dist/components/features/conversation-panel/conversation-active-tag-filters.cjs.map +1 -0
  412. package/dist/components/features/conversation-panel/conversation-active-tag-filters.d.ts +28 -0
  413. package/dist/components/features/conversation-panel/conversation-active-tag-filters.js +69 -0
  414. package/dist/components/features/conversation-panel/conversation-active-tag-filters.js.map +1 -0
  415. package/dist/components/features/conversation-panel/conversation-card/conversation-card-actions.cjs +1 -1
  416. package/dist/components/features/conversation-panel/conversation-card/conversation-card-actions.cjs.map +1 -1
  417. package/dist/components/features/conversation-panel/conversation-card/conversation-card-actions.d.ts +2 -1
  418. package/dist/components/features/conversation-panel/conversation-card/conversation-card-actions.js +19 -18
  419. package/dist/components/features/conversation-panel/conversation-card/conversation-card-actions.js.map +1 -1
  420. package/dist/components/features/conversation-panel/conversation-card/conversation-card-context-menu.cjs +1 -1
  421. package/dist/components/features/conversation-panel/conversation-card/conversation-card-context-menu.cjs.map +1 -1
  422. package/dist/components/features/conversation-panel/conversation-card/conversation-card-context-menu.d.ts +2 -1
  423. package/dist/components/features/conversation-panel/conversation-card/conversation-card-context-menu.js +91 -80
  424. package/dist/components/features/conversation-panel/conversation-card/conversation-card-context-menu.js.map +1 -1
  425. package/dist/components/features/conversation-panel/conversation-card/conversation-card-footer.cjs +1 -1
  426. package/dist/components/features/conversation-panel/conversation-card/conversation-card-footer.cjs.map +1 -1
  427. package/dist/components/features/conversation-panel/conversation-card/conversation-card-footer.js +45 -44
  428. package/dist/components/features/conversation-panel/conversation-card/conversation-card-footer.js.map +1 -1
  429. package/dist/components/features/conversation-panel/conversation-card/conversation-card-preview.cjs +1 -1
  430. package/dist/components/features/conversation-panel/conversation-card/conversation-card-preview.cjs.map +1 -1
  431. package/dist/components/features/conversation-panel/conversation-card/conversation-card-preview.js +1 -1
  432. package/dist/components/features/conversation-panel/conversation-card/conversation-card-preview.js.map +1 -1
  433. package/dist/components/features/conversation-panel/conversation-card/conversation-card.cjs +1 -1
  434. package/dist/components/features/conversation-panel/conversation-card/conversation-card.cjs.map +1 -1
  435. package/dist/components/features/conversation-panel/conversation-card/conversation-card.d.ts +7 -1
  436. package/dist/components/features/conversation-panel/conversation-card/conversation-card.js +87 -81
  437. package/dist/components/features/conversation-panel/conversation-card/conversation-card.js.map +1 -1
  438. package/dist/components/features/conversation-panel/conversation-card/conversation-tag-chips.cjs +1 -1
  439. package/dist/components/features/conversation-panel/conversation-card/conversation-tag-chips.cjs.map +1 -1
  440. package/dist/components/features/conversation-panel/conversation-card/conversation-tag-chips.d.ts +2 -1
  441. package/dist/components/features/conversation-panel/conversation-card/conversation-tag-chips.js +1 -1
  442. package/dist/components/features/conversation-panel/conversation-card/conversation-tag-chips.js.map +1 -1
  443. package/dist/components/features/conversation-panel/conversation-card/conversation-tag-display.cjs +1 -1
  444. package/dist/components/features/conversation-panel/conversation-card/conversation-tag-display.cjs.map +1 -1
  445. package/dist/components/features/conversation-panel/conversation-card/conversation-tag-display.d.ts +2 -1
  446. package/dist/components/features/conversation-panel/conversation-card/conversation-tag-display.js +2 -1
  447. package/dist/components/features/conversation-panel/conversation-card/conversation-tag-display.js.map +1 -1
  448. package/dist/components/features/conversation-panel/conversation-layouts-menu.cjs +2 -0
  449. package/dist/components/features/conversation-panel/conversation-layouts-menu.cjs.map +1 -0
  450. package/dist/components/features/conversation-panel/conversation-layouts-menu.d.ts +29 -0
  451. package/dist/components/features/conversation-panel/conversation-layouts-menu.js +177 -0
  452. package/dist/components/features/conversation-panel/conversation-layouts-menu.js.map +1 -0
  453. package/dist/components/features/conversation-panel/conversation-panel-list-helpers.cjs +1 -1
  454. package/dist/components/features/conversation-panel/conversation-panel-list-helpers.cjs.map +1 -1
  455. package/dist/components/features/conversation-panel/conversation-panel-list-helpers.d.ts +37 -0
  456. package/dist/components/features/conversation-panel/conversation-panel-list-helpers.js +85 -45
  457. package/dist/components/features/conversation-panel/conversation-panel-list-helpers.js.map +1 -1
  458. package/dist/components/features/conversation-panel/conversation-panel.cjs +1 -1
  459. package/dist/components/features/conversation-panel/conversation-panel.cjs.map +1 -1
  460. package/dist/components/features/conversation-panel/conversation-panel.js +296 -290
  461. package/dist/components/features/conversation-panel/conversation-panel.js.map +1 -1
  462. package/dist/components/features/conversation-panel/edit-conversation-tags-modal.cjs +2 -0
  463. package/dist/components/features/conversation-panel/edit-conversation-tags-modal.cjs.map +1 -0
  464. package/dist/components/features/conversation-panel/edit-conversation-tags-modal.d.ts +22 -0
  465. package/dist/components/features/conversation-panel/edit-conversation-tags-modal.js +153 -0
  466. package/dist/components/features/conversation-panel/edit-conversation-tags-modal.js.map +1 -0
  467. package/dist/components/features/conversation-panel/hide-older-conversations-row.cjs +2 -0
  468. package/dist/components/features/conversation-panel/hide-older-conversations-row.cjs.map +1 -0
  469. package/dist/components/features/conversation-panel/hide-older-conversations-row.d.ts +6 -0
  470. package/dist/components/features/conversation-panel/hide-older-conversations-row.js +65 -0
  471. package/dist/components/features/conversation-panel/hide-older-conversations-row.js.map +1 -0
  472. package/dist/components/features/conversation-panel/menu-row.cjs +1 -1
  473. package/dist/components/features/conversation-panel/menu-row.cjs.map +1 -1
  474. package/dist/components/features/conversation-panel/menu-row.d.ts +11 -1
  475. package/dist/components/features/conversation-panel/menu-row.js +27 -16
  476. package/dist/components/features/conversation-panel/menu-row.js.map +1 -1
  477. package/dist/components/features/home/featured-automations/automation-health-indicator.cjs +1 -1
  478. package/dist/components/features/home/featured-automations/automation-health-indicator.cjs.map +1 -1
  479. package/dist/components/features/home/featured-automations/automation-health-indicator.js +1 -1
  480. package/dist/components/features/home/featured-automations/automation-health-indicator.js.map +1 -1
  481. package/dist/components/features/home/featured-automations/automation-run-activity-metrics.cjs +1 -1
  482. package/dist/components/features/home/featured-automations/automation-run-activity-metrics.cjs.map +1 -1
  483. package/dist/components/features/home/featured-automations/automation-run-activity-metrics.d.ts +4 -3
  484. package/dist/components/features/home/featured-automations/automation-run-activity-metrics.js +22 -25
  485. package/dist/components/features/home/featured-automations/automation-run-activity-metrics.js.map +1 -1
  486. package/dist/components/features/home/featured-automations/automation-run-activity-sparkline.cjs +1 -1
  487. package/dist/components/features/home/featured-automations/automation-run-activity-sparkline.cjs.map +1 -1
  488. package/dist/components/features/home/featured-automations/automation-run-activity-sparkline.d.ts +1 -1
  489. package/dist/components/features/home/featured-automations/automation-run-activity-sparkline.js +15 -15
  490. package/dist/components/features/home/featured-automations/automation-run-activity-sparkline.js.map +1 -1
  491. package/dist/components/features/home/featured-automations/automation-run-health.cjs +1 -1
  492. package/dist/components/features/home/featured-automations/automation-run-health.cjs.map +1 -1
  493. package/dist/components/features/home/featured-automations/automation-run-health.d.ts +5 -3
  494. package/dist/components/features/home/featured-automations/automation-run-health.js +30 -23
  495. package/dist/components/features/home/featured-automations/automation-run-health.js.map +1 -1
  496. package/dist/components/features/home/featured-automations/build-home-automation-menu-items.d.ts +1 -2
  497. package/dist/components/features/home/featured-automations/build-pinned-automation-menu-items.d.ts +0 -1
  498. package/dist/components/features/home/featured-automations/home-automation-activity.d.ts +3 -2
  499. package/dist/components/features/home/featured-automations/home-automation-run-tooltip.cjs +1 -1
  500. package/dist/components/features/home/featured-automations/home-automation-run-tooltip.cjs.map +1 -1
  501. package/dist/components/features/home/featured-automations/home-automation-run-tooltip.d.ts +1 -1
  502. package/dist/components/features/home/featured-automations/home-automation-run-tooltip.js +42 -42
  503. package/dist/components/features/home/featured-automations/home-automation-run-tooltip.js.map +1 -1
  504. package/dist/components/features/images/image-lightbox.cjs +2 -0
  505. package/dist/components/features/images/image-lightbox.cjs.map +1 -0
  506. package/dist/components/features/images/image-lightbox.d.ts +11 -0
  507. package/dist/components/features/images/image-lightbox.js +37 -0
  508. package/dist/components/features/images/image-lightbox.js.map +1 -0
  509. package/dist/components/features/images/image-preview.cjs +1 -1
  510. package/dist/components/features/images/image-preview.cjs.map +1 -1
  511. package/dist/components/features/images/image-preview.d.ts +2 -1
  512. package/dist/components/features/images/image-preview.js +33 -13
  513. package/dist/components/features/images/image-preview.js.map +1 -1
  514. package/dist/components/features/manifest/manifest-form-field.d.ts +3 -1
  515. package/dist/components/features/manifest/manifest-review-step.d.ts +3 -1
  516. package/dist/components/features/onboarding/steps/setup-llm-step.d.ts +3 -4
  517. package/dist/components/features/settings/cloud-settings-link.cjs +1 -1
  518. package/dist/components/features/settings/cloud-settings-link.cjs.map +1 -1
  519. package/dist/components/features/settings/cloud-settings-link.d.ts +3 -1
  520. package/dist/components/features/settings/cloud-settings-link.js +22 -19
  521. package/dist/components/features/settings/cloud-settings-link.js.map +1 -1
  522. package/dist/components/features/settings/integrations-settings-link.cjs +1 -1
  523. package/dist/components/features/settings/integrations-settings-link.cjs.map +1 -1
  524. package/dist/components/features/settings/integrations-settings-link.d.ts +3 -1
  525. package/dist/components/features/settings/integrations-settings-link.js +20 -17
  526. package/dist/components/features/settings/integrations-settings-link.js.map +1 -1
  527. package/dist/components/features/settings/llm-profiles/llm-settings-local-view.cjs +1 -1
  528. package/dist/components/features/settings/llm-profiles/llm-settings-local-view.js +3 -2
  529. package/dist/components/features/settings/llm-profiles/profile-row.cjs +1 -1
  530. package/dist/components/features/settings/llm-profiles/profile-row.js +1 -1
  531. package/dist/components/features/settings/llm-profiles/profiles-body.d.ts +2 -2
  532. package/dist/components/features/settings/sdk-settings/sdk-section-page.cjs +1 -1
  533. package/dist/components/features/settings/sdk-settings/sdk-section-page.cjs.map +1 -1
  534. package/dist/components/features/settings/sdk-settings/sdk-section-page.d.ts +8 -7
  535. package/dist/components/features/settings/sdk-settings/sdk-section-page.js +172 -142
  536. package/dist/components/features/settings/sdk-settings/sdk-section-page.js.map +1 -1
  537. package/dist/components/features/settings/secrets-settings/secret-form.cjs +1 -1
  538. package/dist/components/features/settings/secrets-settings/secret-form.cjs.map +1 -1
  539. package/dist/components/features/settings/secrets-settings/secret-form.js +38 -25
  540. package/dist/components/features/settings/secrets-settings/secret-form.js.map +1 -1
  541. package/dist/components/features/settings/settings-dropdown-input.cjs +1 -1
  542. package/dist/components/features/settings/settings-dropdown-input.js +6 -6
  543. package/dist/components/features/sidebar/sidebar-rail-body.cjs +1 -1
  544. package/dist/components/features/sidebar/sidebar-rail-body.cjs.map +1 -1
  545. package/dist/components/features/sidebar/sidebar-rail-body.d.ts +4 -1
  546. package/dist/components/features/sidebar/sidebar-rail-body.js +157 -139
  547. package/dist/components/features/sidebar/sidebar-rail-body.js.map +1 -1
  548. package/dist/components/features/sidebar/sidebar.cjs +1 -1
  549. package/dist/components/features/sidebar/sidebar.cjs.map +1 -1
  550. package/dist/components/features/sidebar/sidebar.js +28 -26
  551. package/dist/components/features/sidebar/sidebar.js.map +1 -1
  552. package/dist/components/features/sidebar/use-sidebar-onboarding-checklist.cjs +1 -1
  553. package/dist/components/features/sidebar/use-sidebar-onboarding-checklist.js +3 -3
  554. package/dist/components/features/skills/extensions-navigation.cjs +1 -1
  555. package/dist/components/features/skills/extensions-navigation.cjs.map +1 -1
  556. package/dist/components/features/skills/extensions-navigation.js +3 -3
  557. package/dist/components/features/skills/extensions-navigation.js.map +1 -1
  558. package/dist/components/providers/agent-server-ui-providers.cjs +1 -1
  559. package/dist/components/providers/agent-server-ui-providers.cjs.map +1 -1
  560. package/dist/components/providers/agent-server-ui-providers.js +33 -29
  561. package/dist/components/providers/agent-server-ui-providers.js.map +1 -1
  562. package/dist/components/shared/buttons/remove-button.cjs +1 -1
  563. package/dist/components/shared/buttons/remove-button.cjs.map +1 -1
  564. package/dist/components/shared/buttons/remove-button.d.ts +2 -1
  565. package/dist/components/shared/buttons/remove-button.js +2 -1
  566. package/dist/components/shared/buttons/remove-button.js.map +1 -1
  567. package/dist/components/shared/buttons/styled-tooltip.cjs +1 -1
  568. package/dist/components/shared/buttons/styled-tooltip.cjs.map +1 -1
  569. package/dist/components/shared/buttons/styled-tooltip.d.ts +2 -1
  570. package/dist/components/shared/buttons/styled-tooltip.js +2 -1
  571. package/dist/components/shared/buttons/styled-tooltip.js.map +1 -1
  572. package/dist/components/shared/filters/enum-filter-dropdown.cjs +1 -1
  573. package/dist/components/shared/filters/enum-filter-dropdown.cjs.map +1 -1
  574. package/dist/components/shared/filters/enum-filter-dropdown.d.ts +5 -1
  575. package/dist/components/shared/filters/enum-filter-dropdown.js +14 -14
  576. package/dist/components/shared/filters/enum-filter-dropdown.js.map +1 -1
  577. package/dist/components/shared/free-models-note.cjs +2 -0
  578. package/dist/components/shared/free-models-note.cjs.map +1 -0
  579. package/dist/components/shared/free-models-note.d.ts +3 -0
  580. package/dist/components/shared/free-models-note.js +20 -0
  581. package/dist/components/shared/free-models-note.js.map +1 -0
  582. package/dist/components/shared/modals/confirmation-modal.cjs +1 -1
  583. package/dist/components/shared/modals/confirmation-modal.cjs.map +1 -1
  584. package/dist/components/shared/modals/confirmation-modal.d.ts +2 -1
  585. package/dist/components/shared/modals/confirmation-modal.js +8 -8
  586. package/dist/components/shared/modals/confirmation-modal.js.map +1 -1
  587. package/dist/components/shared/modals/settings/model-selector.cjs +1 -1
  588. package/dist/components/shared/modals/settings/model-selector.cjs.map +1 -1
  589. package/dist/components/shared/modals/settings/model-selector.js +102 -112
  590. package/dist/components/shared/modals/settings/model-selector.js.map +1 -1
  591. package/dist/config/defaults.cjs +1 -1
  592. package/dist/config/defaults.cjs.map +1 -1
  593. package/dist/config/defaults.js +3 -3
  594. package/dist/config/defaults.js.map +1 -1
  595. package/dist/constants/acp-providers.cjs.map +1 -1
  596. package/dist/constants/acp-providers.d.ts +12 -0
  597. package/dist/constants/acp-providers.js.map +1 -1
  598. package/dist/constants/settings-nav.d.ts +8 -0
  599. package/dist/contexts/conversation-websocket-context.cjs +3 -3
  600. package/dist/contexts/conversation-websocket-context.cjs.map +1 -1
  601. package/dist/contexts/conversation-websocket-context.d.ts +5 -0
  602. package/dist/contexts/conversation-websocket-context.js +194 -198
  603. package/dist/contexts/conversation-websocket-context.js.map +1 -1
  604. package/dist/contexts/websocket-provider-wrapper.cjs +1 -1
  605. package/dist/contexts/websocket-provider-wrapper.cjs.map +1 -1
  606. package/dist/contexts/websocket-provider-wrapper.js +31 -15
  607. package/dist/contexts/websocket-provider-wrapper.js.map +1 -1
  608. package/dist/hooks/chat/record-model-switch-message.cjs +1 -1
  609. package/dist/hooks/chat/record-model-switch-message.cjs.map +1 -1
  610. package/dist/hooks/chat/record-model-switch-message.d.ts +31 -0
  611. package/dist/hooks/chat/record-model-switch-message.js +25 -12
  612. package/dist/hooks/chat/record-model-switch-message.js.map +1 -1
  613. package/dist/hooks/chat/use-plan-mode-interceptor.cjs +2 -0
  614. package/dist/hooks/chat/use-plan-mode-interceptor.cjs.map +1 -0
  615. package/dist/hooks/chat/use-plan-mode-interceptor.d.ts +16 -0
  616. package/dist/hooks/chat/use-plan-mode-interceptor.js +43 -0
  617. package/dist/hooks/chat/use-plan-mode-interceptor.js.map +1 -0
  618. package/dist/hooks/chat/use-slash-command.cjs +1 -1
  619. package/dist/hooks/chat/use-slash-command.cjs.map +1 -1
  620. package/dist/hooks/chat/use-slash-command.js +63 -62
  621. package/dist/hooks/chat/use-slash-command.js.map +1 -1
  622. package/dist/hooks/mutation/use-create-conversation.cjs +1 -1
  623. package/dist/hooks/mutation/use-create-conversation.cjs.map +1 -1
  624. package/dist/hooks/mutation/use-create-conversation.js +5 -1
  625. package/dist/hooks/mutation/use-create-conversation.js.map +1 -1
  626. package/dist/hooks/mutation/use-read-conversation-file.cjs +1 -1
  627. package/dist/hooks/mutation/use-read-conversation-file.cjs.map +1 -1
  628. package/dist/hooks/mutation/use-read-conversation-file.js +11 -4
  629. package/dist/hooks/mutation/use-read-conversation-file.js.map +1 -1
  630. package/dist/hooks/mutation/use-save-settings.cjs +1 -1
  631. package/dist/hooks/mutation/use-save-settings.js +3 -3
  632. package/dist/hooks/mutation/use-switch-llm-profile.cjs +1 -1
  633. package/dist/hooks/mutation/use-switch-llm-profile.cjs.map +1 -1
  634. package/dist/hooks/mutation/use-switch-llm-profile.js +13 -25
  635. package/dist/hooks/mutation/use-switch-llm-profile.js.map +1 -1
  636. package/dist/hooks/mutation/use-update-conversation-tags.cjs +2 -0
  637. package/dist/hooks/mutation/use-update-conversation-tags.cjs.map +1 -0
  638. package/dist/hooks/mutation/use-update-conversation-tags.d.ts +8 -0
  639. package/dist/hooks/mutation/use-update-conversation-tags.js +45 -0
  640. package/dist/hooks/mutation/use-update-conversation-tags.js.map +1 -0
  641. package/dist/hooks/query/query-keys.cjs +1 -1
  642. package/dist/hooks/query/query-keys.cjs.map +1 -1
  643. package/dist/hooks/query/query-keys.d.ts +6 -0
  644. package/dist/hooks/query/query-keys.js +2 -2
  645. package/dist/hooks/query/query-keys.js.map +1 -1
  646. package/dist/hooks/query/use-automation-sdk-version.cjs +1 -1
  647. package/dist/hooks/query/use-automation-sdk-version.cjs.map +1 -1
  648. package/dist/hooks/query/use-automation-sdk-version.d.ts +0 -1
  649. package/dist/hooks/query/use-automation-sdk-version.js +30 -55
  650. package/dist/hooks/query/use-automation-sdk-version.js.map +1 -1
  651. package/dist/hooks/query/use-conversation-skills.cjs +1 -1
  652. package/dist/hooks/query/use-conversation-skills.cjs.map +1 -1
  653. package/dist/hooks/query/use-conversation-skills.d.ts +14 -5
  654. package/dist/hooks/query/use-conversation-skills.js +20 -4
  655. package/dist/hooks/query/use-conversation-skills.js.map +1 -1
  656. package/dist/hooks/query/use-free-models.cjs +2 -0
  657. package/dist/hooks/query/use-free-models.cjs.map +1 -0
  658. package/dist/hooks/query/use-free-models.d.ts +23 -0
  659. package/dist/hooks/query/use-free-models.js +67 -0
  660. package/dist/hooks/query/use-free-models.js.map +1 -0
  661. package/dist/hooks/query/use-local-git-info.cjs.map +1 -1
  662. package/dist/hooks/query/use-local-git-info.js.map +1 -1
  663. package/dist/hooks/query/use-provider-connections.cjs +1 -1
  664. package/dist/hooks/query/use-provider-connections.cjs.map +1 -1
  665. package/dist/hooks/query/use-provider-connections.d.ts +6 -3
  666. package/dist/hooks/query/use-provider-connections.js +7 -3
  667. package/dist/hooks/query/use-provider-connections.js.map +1 -1
  668. package/dist/hooks/query/use-provider-models.cjs +1 -1
  669. package/dist/hooks/query/use-provider-models.cjs.map +1 -1
  670. package/dist/hooks/query/use-provider-models.js +34 -25
  671. package/dist/hooks/query/use-provider-models.js.map +1 -1
  672. package/dist/hooks/query/use-search-providers.cjs +1 -1
  673. package/dist/hooks/query/use-search-providers.cjs.map +1 -1
  674. package/dist/hooks/query/use-search-providers.js +31 -19
  675. package/dist/hooks/query/use-search-providers.js.map +1 -1
  676. package/dist/hooks/query/use-sub-conversations.cjs +1 -1
  677. package/dist/hooks/query/use-sub-conversations.cjs.map +1 -1
  678. package/dist/hooks/query/use-sub-conversations.js +16 -16
  679. package/dist/hooks/query/use-sub-conversations.js.map +1 -1
  680. package/dist/hooks/use-acp-model-context.cjs +1 -1
  681. package/dist/hooks/use-acp-model-context.js +3 -3
  682. package/dist/hooks/use-agent-state.cjs +1 -1
  683. package/dist/hooks/use-agent-state.cjs.map +1 -1
  684. package/dist/hooks/use-agent-state.d.ts +17 -1
  685. package/dist/hooks/use-agent-state.js +19 -9
  686. package/dist/hooks/use-agent-state.js.map +1 -1
  687. package/dist/hooks/use-automation-permissions.cjs +2 -0
  688. package/dist/hooks/use-automation-permissions.cjs.map +1 -0
  689. package/dist/hooks/use-automation-permissions.d.ts +43 -0
  690. package/dist/hooks/use-automation-permissions.js +52 -0
  691. package/dist/hooks/use-automation-permissions.js.map +1 -0
  692. package/dist/hooks/use-chat-input-model-state.cjs +1 -1
  693. package/dist/hooks/use-chat-input-model-state.js +3 -3
  694. package/dist/hooks/use-handle-plan-click.cjs +1 -1
  695. package/dist/hooks/use-handle-plan-click.cjs.map +1 -1
  696. package/dist/hooks/use-handle-plan-click.d.ts +3 -1
  697. package/dist/hooks/use-handle-plan-click.js +85 -26
  698. package/dist/hooks/use-handle-plan-click.js.map +1 -1
  699. package/dist/hooks/use-home-automation-actions.cjs +1 -1
  700. package/dist/hooks/use-home-automation-actions.cjs.map +1 -1
  701. package/dist/hooks/use-home-automation-actions.d.ts +1 -2
  702. package/dist/hooks/use-home-automation-actions.js +1 -1
  703. package/dist/hooks/use-home-automation-actions.js.map +1 -1
  704. package/dist/hooks/use-llm-configured.cjs +1 -1
  705. package/dist/hooks/use-llm-configured.js +3 -3
  706. package/dist/hooks/use-manifest-preflight.d.ts +1 -1
  707. package/dist/hooks/use-unified-websocket-status.cjs +1 -1
  708. package/dist/hooks/use-unified-websocket-status.cjs.map +1 -1
  709. package/dist/hooks/use-unified-websocket-status.d.ts +7 -0
  710. package/dist/hooks/use-unified-websocket-status.js +5 -1
  711. package/dist/hooks/use-unified-websocket-status.js.map +1 -1
  712. package/dist/i18n/declaration.cjs +1 -1
  713. package/dist/i18n/declaration.cjs.map +1 -1
  714. package/dist/i18n/declaration.d.ts +71 -14
  715. package/dist/i18n/declaration.js +1 -1
  716. package/dist/i18n/declaration.js.map +1 -1
  717. package/dist/i18n/translation.cjs +2 -2
  718. package/dist/i18n/translation.cjs.map +1 -1
  719. package/dist/i18n/translation.js +1281 -312
  720. package/dist/i18n/translation.js.map +1 -1
  721. package/dist/locales/ar/openhands.json +79 -22
  722. package/dist/locales/ca/openhands.json +79 -22
  723. package/dist/locales/de/openhands.json +79 -22
  724. package/dist/locales/en/openhands.json +79 -22
  725. package/dist/locales/es/openhands.json +79 -22
  726. package/dist/locales/fr/openhands.json +79 -22
  727. package/dist/locales/it/openhands.json +79 -22
  728. package/dist/locales/ja/openhands.json +79 -22
  729. package/dist/locales/ko-KR/openhands.json +79 -22
  730. package/dist/locales/no/openhands.json +79 -22
  731. package/dist/locales/pt/openhands.json +79 -22
  732. package/dist/locales/tr/openhands.json +79 -22
  733. package/dist/locales/uk/openhands.json +79 -22
  734. package/dist/locales/zh-CN/openhands.json +79 -22
  735. package/dist/locales/zh-TW/openhands.json +79 -22
  736. package/dist/manifests/automation-insights.cjs.map +1 -1
  737. package/dist/manifests/automation-insights.d.ts +10 -2
  738. package/dist/manifests/automation-insights.js.map +1 -1
  739. package/dist/manifests/automation-setup.cjs +1 -1
  740. package/dist/manifests/automation-setup.cjs.map +1 -1
  741. package/dist/manifests/automation-setup.d.ts +9 -16
  742. package/dist/manifests/automation-setup.js +17 -7
  743. package/dist/manifests/automation-setup.js.map +1 -1
  744. package/dist/manifests/manifest-actions.d.ts +1 -1
  745. package/dist/manifests/manifest-capabilities.d.ts +3 -1
  746. package/dist/manifests/manifest-local-validation.cjs +2 -0
  747. package/dist/manifests/manifest-local-validation.cjs.map +1 -0
  748. package/dist/manifests/manifest-local-validation.d.ts +15 -11
  749. package/dist/manifests/manifest-local-validation.js +8 -0
  750. package/dist/manifests/manifest-local-validation.js.map +1 -0
  751. package/dist/manifests/manifest-template.cjs +2 -0
  752. package/dist/manifests/manifest-template.cjs.map +1 -0
  753. package/dist/manifests/manifest-template.d.ts +4 -4
  754. package/dist/manifests/manifest-template.js +12 -0
  755. package/dist/manifests/manifest-template.js.map +1 -0
  756. package/dist/manifests/manifest-validation.cjs +1 -1
  757. package/dist/manifests/manifest-validation.cjs.map +1 -1
  758. package/dist/manifests/manifest-validation.js +106 -28
  759. package/dist/manifests/manifest-validation.js.map +1 -1
  760. package/dist/manifests/types.cjs.map +1 -1
  761. package/dist/manifests/types.d.ts +39 -4
  762. package/dist/manifests/types.js.map +1 -1
  763. package/dist/node_modules/@openhands/extensions/automations/catalog/custom-automation/manifest.cjs +8 -0
  764. package/dist/node_modules/@openhands/extensions/automations/catalog/custom-automation/manifest.cjs.map +1 -0
  765. package/dist/node_modules/@openhands/extensions/automations/catalog/custom-automation/manifest.js +221 -0
  766. package/dist/node_modules/@openhands/extensions/automations/catalog/custom-automation/manifest.js.map +1 -0
  767. package/dist/node_modules/@openhands/extensions/automations/catalog/github-issue-to-pr/manifest.cjs +1 -1
  768. package/dist/node_modules/@openhands/extensions/automations/catalog/github-issue-to-pr/manifest.cjs.map +1 -1
  769. package/dist/node_modules/@openhands/extensions/automations/catalog/github-issue-to-pr/manifest.js +1 -1
  770. package/dist/node_modules/@openhands/extensions/automations/catalog/github-issue-to-pr/manifest.js.map +1 -1
  771. package/dist/node_modules/@openhands/extensions/automations/catalog/github-pr-reviewer/manifest.cjs +1 -1
  772. package/dist/node_modules/@openhands/extensions/automations/catalog/github-pr-reviewer/manifest.cjs.map +1 -1
  773. package/dist/node_modules/@openhands/extensions/automations/catalog/github-pr-reviewer/manifest.js +1 -1
  774. package/dist/node_modules/@openhands/extensions/automations/catalog/github-pr-reviewer/manifest.js.map +1 -1
  775. package/dist/node_modules/@openhands/extensions/automations/catalog/qa-changes/manifest.cjs +1 -1
  776. package/dist/node_modules/@openhands/extensions/automations/catalog/qa-changes/manifest.cjs.map +1 -1
  777. package/dist/node_modules/@openhands/extensions/automations/catalog/qa-changes/manifest.js +1 -1
  778. package/dist/node_modules/@openhands/extensions/automations/catalog/qa-changes/manifest.js.map +1 -1
  779. package/dist/node_modules/@openhands/extensions/automations/catalog-index.cjs +1 -1
  780. package/dist/node_modules/@openhands/extensions/automations/catalog-index.cjs.map +1 -1
  781. package/dist/node_modules/@openhands/extensions/automations/catalog-index.js +22 -20
  782. package/dist/node_modules/@openhands/extensions/automations/catalog-index.js.map +1 -1
  783. package/dist/node_modules/@openhands/extensions/automations/interface.cjs +1 -1
  784. package/dist/node_modules/@openhands/extensions/automations/interface.cjs.map +1 -1
  785. package/dist/node_modules/@openhands/extensions/automations/interface.js +2 -1
  786. package/dist/node_modules/@openhands/extensions/automations/interface.js.map +1 -1
  787. package/dist/node_modules/@openhands/extensions/integrations/catalog/gitlab.cjs +1 -1
  788. package/dist/node_modules/@openhands/extensions/integrations/catalog/gitlab.cjs.map +1 -1
  789. package/dist/node_modules/@openhands/extensions/integrations/catalog/gitlab.js +24 -5
  790. package/dist/node_modules/@openhands/extensions/integrations/catalog/gitlab.js.map +1 -1
  791. package/dist/node_modules/@tanstack/react-query/build/modern/QueryClientProvider.cjs +1 -1
  792. package/dist/node_modules/@tanstack/react-query/build/modern/QueryClientProvider.js +1 -1
  793. package/dist/node_modules/lucide-react/dist/esm/icons/circle-question-mark.cjs +2 -0
  794. package/dist/node_modules/lucide-react/dist/esm/icons/circle-question-mark.cjs.map +1 -0
  795. package/dist/node_modules/lucide-react/dist/esm/icons/circle-question-mark.js +21 -0
  796. package/dist/node_modules/lucide-react/dist/esm/icons/circle-question-mark.js.map +1 -0
  797. package/dist/node_modules/lucide-react/dist/esm/icons/shrink.cjs +2 -0
  798. package/dist/node_modules/lucide-react/dist/esm/icons/shrink.cjs.map +1 -0
  799. package/dist/node_modules/lucide-react/dist/esm/icons/shrink.js +23 -0
  800. package/dist/node_modules/lucide-react/dist/esm/icons/shrink.js.map +1 -0
  801. package/dist/node_modules/lucide-react/dist/esm/icons/sliders-horizontal.cjs +2 -0
  802. package/dist/node_modules/lucide-react/dist/esm/icons/sliders-horizontal.cjs.map +1 -0
  803. package/dist/node_modules/lucide-react/dist/esm/icons/sliders-horizontal.js +43 -0
  804. package/dist/node_modules/lucide-react/dist/esm/icons/sliders-horizontal.js.map +1 -0
  805. package/dist/node_modules/lucide-react/dist/esm/icons/tags.cjs +2 -0
  806. package/dist/node_modules/lucide-react/dist/esm/icons/tags.cjs.map +1 -0
  807. package/dist/node_modules/lucide-react/dist/esm/icons/tags.js +22 -0
  808. package/dist/node_modules/lucide-react/dist/esm/icons/tags.js.map +1 -0
  809. package/dist/package.cjs +1 -1
  810. package/dist/package.cjs.map +1 -1
  811. package/dist/package.js +4 -4
  812. package/dist/package.js.map +1 -1
  813. package/dist/routes/agent-settings.d.ts +2 -0
  814. package/dist/routes/app-settings.cjs +1 -1
  815. package/dist/routes/app-settings.cjs.map +1 -1
  816. package/dist/routes/app-settings.js +53 -48
  817. package/dist/routes/app-settings.js.map +1 -1
  818. package/dist/routes/llm-settings.cjs +1 -1
  819. package/dist/routes/llm-settings.cjs.map +1 -1
  820. package/dist/routes/llm-settings.d.ts +3 -1
  821. package/dist/routes/llm-settings.js +120 -127
  822. package/dist/routes/llm-settings.js.map +1 -1
  823. package/dist/routes/planner-tab.cjs +1 -1
  824. package/dist/routes/planner-tab.cjs.map +1 -1
  825. package/dist/routes/planner-tab.js +44 -28
  826. package/dist/routes/planner-tab.js.map +1 -1
  827. package/dist/services/telemetry.cjs +1 -1
  828. package/dist/services/telemetry.cjs.map +1 -1
  829. package/dist/services/telemetry.d.ts +5 -0
  830. package/dist/services/telemetry.js +122 -115
  831. package/dist/services/telemetry.js.map +1 -1
  832. package/dist/stores/conversation-panel-preferences-store.cjs +1 -1
  833. package/dist/stores/conversation-panel-preferences-store.cjs.map +1 -1
  834. package/dist/stores/conversation-panel-preferences-store.d.ts +32 -5
  835. package/dist/stores/conversation-panel-preferences-store.js +29 -12
  836. package/dist/stores/conversation-panel-preferences-store.js.map +1 -1
  837. package/dist/stores/conversation-state-store.cjs +1 -1
  838. package/dist/stores/conversation-state-store.cjs.map +1 -1
  839. package/dist/stores/conversation-state-store.d.ts +9 -3
  840. package/dist/stores/conversation-state-store.js +6 -3
  841. package/dist/stores/conversation-state-store.js.map +1 -1
  842. package/dist/stores/conversation-store.cjs +1 -1
  843. package/dist/stores/conversation-store.cjs.map +1 -1
  844. package/dist/stores/conversation-store.d.ts +2 -0
  845. package/dist/stores/conversation-store.js +3 -0
  846. package/dist/stores/conversation-store.js.map +1 -1
  847. package/dist/stores/free-models-store.cjs +2 -0
  848. package/dist/stores/free-models-store.cjs.map +1 -0
  849. package/dist/stores/free-models-store.d.ts +30 -0
  850. package/dist/stores/free-models-store.js +22 -0
  851. package/dist/stores/free-models-store.js.map +1 -0
  852. package/dist/stores/model-store.cjs +1 -1
  853. package/dist/stores/model-store.cjs.map +1 -1
  854. package/dist/stores/model-store.d.ts +7 -0
  855. package/dist/stores/model-store.js +4 -0
  856. package/dist/stores/model-store.js.map +1 -1
  857. package/dist/types/automation.cjs.map +1 -1
  858. package/dist/types/automation.d.ts +46 -1
  859. package/dist/types/automation.js.map +1 -1
  860. package/dist/ui/context-menu.d.ts +1 -1
  861. package/dist/ui/toggle-switch.cjs +1 -1
  862. package/dist/ui/toggle-switch.cjs.map +1 -1
  863. package/dist/ui/toggle-switch.d.ts +4 -1
  864. package/dist/ui/toggle-switch.js +4 -3
  865. package/dist/ui/toggle-switch.js.map +1 -1
  866. package/dist/utils/automation-catalog.cjs +1 -1
  867. package/dist/utils/automation-catalog.cjs.map +1 -1
  868. package/dist/utils/automation-catalog.d.ts +12 -1
  869. package/dist/utils/automation-catalog.js +42 -12
  870. package/dist/utils/automation-catalog.js.map +1 -1
  871. package/dist/utils/automation-run-display.cjs +2 -0
  872. package/dist/utils/automation-run-display.cjs.map +1 -0
  873. package/dist/utils/automation-run-display.d.ts +20 -0
  874. package/dist/utils/automation-run-display.js +85 -0
  875. package/dist/utils/automation-run-display.js.map +1 -0
  876. package/dist/utils/automation-schedule.cjs +1 -1
  877. package/dist/utils/automation-schedule.cjs.map +1 -1
  878. package/dist/utils/automation-schedule.d.ts +16 -0
  879. package/dist/utils/automation-schedule.js +2 -0
  880. package/dist/utils/automation-schedule.js.map +1 -1
  881. package/dist/utils/constants.cjs +1 -1
  882. package/dist/utils/constants.cjs.map +1 -1
  883. package/dist/utils/constants.d.ts +4 -0
  884. package/dist/utils/constants.js +23 -3
  885. package/dist/utils/constants.js.map +1 -1
  886. package/dist/utils/format-event-timestamp.cjs +2 -0
  887. package/dist/utils/format-event-timestamp.cjs.map +1 -0
  888. package/dist/utils/format-event-timestamp.d.ts +1 -0
  889. package/dist/utils/format-event-timestamp.js +13 -0
  890. package/dist/utils/format-event-timestamp.js.map +1 -0
  891. package/dist/utils/format-model-name.cjs +1 -1
  892. package/dist/utils/format-model-name.cjs.map +1 -1
  893. package/dist/utils/format-model-name.d.ts +27 -6
  894. package/dist/utils/format-model-name.js +14 -6
  895. package/dist/utils/format-model-name.js.map +1 -1
  896. package/dist/utils/git-diff-stats.cjs +2 -2
  897. package/dist/utils/git-diff-stats.cjs.map +1 -1
  898. package/dist/utils/git-diff-stats.d.ts +4 -0
  899. package/dist/utils/git-diff-stats.js +12 -2
  900. package/dist/utils/git-diff-stats.js.map +1 -1
  901. package/dist/utils/plan-file.cjs +4 -0
  902. package/dist/utils/plan-file.cjs.map +1 -0
  903. package/dist/utils/plan-file.d.ts +18 -0
  904. package/dist/utils/plan-file.js +58 -0
  905. package/dist/utils/plan-file.js.map +1 -0
  906. package/dist/utils/recommended-automation-rail.cjs +1 -1
  907. package/dist/utils/recommended-automation-rail.cjs.map +1 -1
  908. package/dist/utils/recommended-automation-rail.js +1 -0
  909. package/dist/utils/recommended-automation-rail.js.map +1 -1
  910. package/dist/utils/scroll-fade-state.cjs +1 -1
  911. package/dist/utils/scroll-fade-state.cjs.map +1 -1
  912. package/dist/utils/scroll-fade-state.d.ts +6 -0
  913. package/dist/utils/scroll-fade-state.js +8 -1
  914. package/dist/utils/scroll-fade-state.js.map +1 -1
  915. package/dist/utils/sdk-settings-schema.cjs +1 -1
  916. package/dist/utils/sdk-settings-schema.cjs.map +1 -1
  917. package/dist/utils/sdk-settings-schema.d.ts +1 -0
  918. package/dist/utils/sdk-settings-schema.js +25 -22
  919. package/dist/utils/sdk-settings-schema.js.map +1 -1
  920. package/dist/utils/utils.cjs +1 -1
  921. package/dist/utils/utils.cjs.map +1 -1
  922. package/dist/utils/utils.js +11 -11
  923. package/dist/utils/utils.js.map +1 -1
  924. package/package.json +4 -4
  925. package/scripts/check-sdk-version-sync.mjs +6 -6
  926. package/scripts/dev-safe.mjs +1 -1
  927. package/scripts/dev-with-automation.mjs +1 -1
  928. package/scripts/static-server.mjs +33 -1
  929. package/build/assets/active-backend-context-CrHTlgvN.js +0 -2
  930. package/build/assets/agent-profiles-settings-Dzgb7G9z.js +0 -1
  931. package/build/assets/agent-server-conversation-service.api-tnqNjbpE.js +0 -86
  932. package/build/assets/agent-settings-DLtsqaOs.js +0 -2
  933. package/build/assets/agent-settings-fFvR-XC2.js +0 -1
  934. package/build/assets/alert-banner-HP6mX-Vr.js +0 -1
  935. package/build/assets/api-key-entry-screen-qTzrmJcr.js +0 -1
  936. package/build/assets/app-settings-dbnneVaV.js +0 -1
  937. package/build/assets/automation-detail-BmwlCUAB.js +0 -3
  938. package/build/assets/automation-git-sync-CprN5DcU.js +0 -1
  939. package/build/assets/automation-setup-route-C40kXjMY.js +0 -1
  940. package/build/assets/automations-list-DuNcRawl.js +0 -1
  941. package/build/assets/backend-form-modal-lhGwzXFI.js +0 -1
  942. package/build/assets/backend-synced-settings-badge-DPkz30BE.js +0 -1
  943. package/build/assets/badge-BU3S0VtE.js +0 -1
  944. package/build/assets/bot-dMYHVfYM.js +0 -1
  945. package/build/assets/browser-DSAo0tz1.js +0 -46
  946. package/build/assets/browser-tab-C9vy56R5.js +0 -1
  947. package/build/assets/canvas-extension-page-dx1gFrfW.js +0 -1
  948. package/build/assets/canvas-extensions-8A-XhpgP.js +0 -1
  949. package/build/assets/check-CS0vmpQQ.js +0 -1
  950. package/build/assets/chevron-down-e1QBpjVy.js +0 -1
  951. package/build/assets/chevron-right-ZG4R5G4Q.js +0 -1
  952. package/build/assets/circle-check-DzWLNsbE.js +0 -1
  953. package/build/assets/circle-plus-check-toggle-BO_kFZt3.js +0 -1
  954. package/build/assets/command-menu--UIlGL72.js +0 -1
  955. package/build/assets/commits-tab-AnZwLvh-.js +0 -1
  956. package/build/assets/confirmation-modal-Dv1ktp8K.js +0 -1
  957. package/build/assets/conversation-BbGrAO4Z.js +0 -93
  958. package/build/assets/conversation-mYT6NAoj.js +0 -1
  959. package/build/assets/conversation-panel-mYT6NAoj.js +0 -1
  960. package/build/assets/conversation-state-store-B0ImPLHO.js +0 -1
  961. package/build/assets/conversation-store-Ca3ghXap.js +0 -6
  962. package/build/assets/copy-to-clipboard-button-Ca8iSkkA.js +0 -1
  963. package/build/assets/device-verify-Bhn2e_Ye.js +0 -1
  964. package/build/assets/edit-automation-modal-DadGbJ2u.js +0 -1
  965. package/build/assets/empty-state-BoGVDecT.js +0 -1
  966. package/build/assets/enum-filter-dropdown-Bgca129f.js +0 -1
  967. package/build/assets/environment-switch-overlay-BmBRT7gv.js +0 -1
  968. package/build/assets/error-state-Body8Ngd.js +0 -1
  969. package/build/assets/extensions-hub-CcDqq_vR.js +0 -1
  970. package/build/assets/extensions-navigation-Cr4yzYk4.js +0 -1
  971. package/build/assets/external-link-DKUlnCQV.js +0 -1
  972. package/build/assets/files-tab-D4o2VyE_.js +0 -1
  973. package/build/assets/format-model-name-CasAP3nd.js +0 -1
  974. package/build/assets/get-git-path-ChKDVHZp.js +0 -1
  975. package/build/assets/git-repo-dropdown-4ROKl2cB.js +0 -1
  976. package/build/assets/git-repo-dropdown-BkqzkMmM.js +0 -1
  977. package/build/assets/highlighted-source-view-BFRxGT_Q.js +0 -1
  978. package/build/assets/home-ChpSuepX.js +0 -1
  979. package/build/assets/home-DIsB440S.js +0 -1
  980. package/build/assets/home-automation-run-tooltip-BVNDWjAH.js +0 -1
  981. package/build/assets/home-store-CY9Ej0ux.js +0 -1
  982. package/build/assets/index-home-BdlrFIif.js +0 -1
  983. package/build/assets/info-B6RQawoW.js +0 -1
  984. package/build/assets/install-server-modal-Dpy89p4g.js +0 -1
  985. package/build/assets/kebab-menu-item-content-D8hSNGmm.js +0 -1
  986. package/build/assets/launch-IrTDEFCs.js +0 -1
  987. package/build/assets/list-filter-DsEK7NFC.js +0 -1
  988. package/build/assets/llm-not-configured-banner-CIFABh3K.js +0 -27
  989. package/build/assets/llm-settings-B9juXhIa.js +0 -1
  990. package/build/assets/llm-settings-De1d5dfr.js +0 -1
  991. package/build/assets/llm-subscription-service-BpJ0ouQo.js +0 -1
  992. package/build/assets/loader-circle-CC1au6hc.js +0 -1
  993. package/build/assets/manage-backends-modal-BrPV3oB-.js +0 -1
  994. package/build/assets/manifest-80fb1c29.js +0 -1
  995. package/build/assets/manifest-subpage-layout-CAOYzrYp.js +0 -1
  996. package/build/assets/markdown-renderer-BzTlxI8x.js +0 -8
  997. package/build/assets/mcp-BTs_SXfZ.js +0 -1
  998. package/build/assets/mcp-page-BEBYqH_K.js +0 -9
  999. package/build/assets/messages-DKV9cRc2.js +0 -41
  1000. package/build/assets/modal-close-button-DDzdRvCs.js +0 -1
  1001. package/build/assets/onboarding-DV_OXoeP.js +0 -1
  1002. package/build/assets/onboarding-modal-rkyBYkeQ.js +0 -1
  1003. package/build/assets/organization-service.api-DrYNkEN_.js +0 -1
  1004. package/build/assets/pencil-47jAZH_V.js +0 -1
  1005. package/build/assets/pin-By41Vl5J.js +0 -1
  1006. package/build/assets/planner-tab-C9uZmhme.js +0 -1
  1007. package/build/assets/plug-CG5HFcNG.js +0 -1
  1008. package/build/assets/plugins-management-service-BMJgC3Ga.js +0 -1
  1009. package/build/assets/plus-C7Slq-0I.js +0 -1
  1010. package/build/assets/profiles-service.api-ChoKrL0l.js +0 -1
  1011. package/build/assets/providers-BhMcY5nv.js +0 -1
  1012. package/build/assets/proxy-9Fe1v5na.js +0 -1
  1013. package/build/assets/recommended-automations-launcher-6ABrI9Cy.js +0 -1
  1014. package/build/assets/refresh-cw-3q3Frrii.js +0 -1
  1015. package/build/assets/root-Dc8YmC9F.js +0 -2
  1016. package/build/assets/root-VDaypvK4.css +0 -1
  1017. package/build/assets/root-layout-CXkhSPYh.js +0 -2
  1018. package/build/assets/schema-field-D-y9-LDb.js +0 -1
  1019. package/build/assets/scroll-fade-state-Dw-i4SGq.js +0 -1
  1020. package/build/assets/sdk-section-page-BlFiizlG.js +0 -1
  1021. package/build/assets/secret-form-BB7the8W.js +0 -1
  1022. package/build/assets/secrets-service-ByZVENbp.js +0 -1
  1023. package/build/assets/secrets-settings-B_GpxKW2.js +0 -1
  1024. package/build/assets/settings-C0EWuBtA.js +0 -1
  1025. package/build/assets/settings-dropdown-input-BcwylHs2.js +0 -1
  1026. package/build/assets/settings-index-5w5UW2K3.js +0 -1
  1027. package/build/assets/settings-input-Db-1g8Ql.js +0 -1
  1028. package/build/assets/settings-modal-DfJ3tcJQ.js +0 -1
  1029. package/build/assets/settings-service.api-DJ1r62Zr.js +0 -1
  1030. package/build/assets/settings-switch-CS-dJDmA.js +0 -1
  1031. package/build/assets/shared-conversation-CA5ISEDy.js +0 -1
  1032. package/build/assets/shield-check-D2aCRd16.js +0 -1
  1033. package/build/assets/sidebar-mobile-menu-toggle-C_fb0Jki.js +0 -1
  1034. package/build/assets/sidebar-store-DGqHkVLw.js +0 -1
  1035. package/build/assets/skill-card-pill-row-B27-xyig.js +0 -1
  1036. package/build/assets/skill-scope-B42H-XOc.js +0 -1
  1037. package/build/assets/skills-plugins-tgF8EiXC.js +0 -1
  1038. package/build/assets/skills-settings-BgJ9PaOe.js +0 -1
  1039. package/build/assets/styled-tooltip-C4jf5Fv9.js +0 -1
  1040. package/build/assets/task-list-tab-C5zcaktH.js +0 -1
  1041. package/build/assets/toggle-switch-ChOLXv2n.js +0 -1
  1042. package/build/assets/trash-2-D7K26eDO.js +0 -1
  1043. package/build/assets/trash-D-HYiVYM.js +0 -1
  1044. package/build/assets/triangle-alert-CtdXWHUI.js +0 -1
  1045. package/build/assets/usage-tab-CVDffLPt.js +0 -1
  1046. package/build/assets/use-acp-credential-form-XIQmpX6M.js +0 -1
  1047. package/build/assets/use-activate-agent-profile-BLfmvDiG.js +0 -1
  1048. package/build/assets/use-agent-profiles-Bd9Bvvp1.js +0 -1
  1049. package/build/assets/use-canvas-extensions-Bi693ujJ.js +0 -1
  1050. package/build/assets/use-config-A9QovgXO.js +0 -1
  1051. package/build/assets/use-create-conversation-Dx3l7mFZ.js +0 -1
  1052. package/build/assets/use-create-secret-B9cUFWRG.js +0 -1
  1053. package/build/assets/use-has-permission-B3C8rQmR.js +0 -1
  1054. package/build/assets/use-is-authed-nTBcM7dE.js +0 -1
  1055. package/build/assets/use-llm-configured-BV9nZ1_j.js +0 -1
  1056. package/build/assets/use-llm-profiles-BO-P4Oyo.js +0 -1
  1057. package/build/assets/use-manifest-capabilities-Cw_flwEz.js +0 -1
  1058. package/build/assets/use-onboarding-completion-D8U7k4Qb.js +0 -1
  1059. package/build/assets/use-pinned-home-route-CckOZrmb.js +0 -1
  1060. package/build/assets/use-plugins-marketplace-7i94Zu3Z.js +0 -1
  1061. package/build/assets/use-save-agent-profile-BUjSsDXK.js +0 -1
  1062. package/build/assets/use-settings-DSXLbvBl.js +0 -1
  1063. package/build/assets/use-settings-nav-items-CwRw-CmX.js +0 -16
  1064. package/build/assets/use-tracking-D53y3TH9.js +0 -3
  1065. package/build/assets/useQueries-DlbhlH9I.js +0 -1
  1066. package/build/assets/useQuery-BSTgq1rl.js +0 -1
  1067. package/build/assets/utils-CN5ZfZy1.js +0 -1
  1068. package/build/assets/vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~czjee3a3-DqZDXfg2.js +0 -186
  1069. package/build/assets/vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~ew9ih1s8-rfV8mQ9m.js +0 -1
  1070. package/build/assets/vendor~root-layout-C9Ju9DQg.js +0 -1
  1071. package/build/assets/vendor~root-layout~conversation-panel~conversation~skills-settings~automations-list~shared-~bovqqk8e-BWir3rJs.js +0 -1
  1072. package/build/assets/vendor~root-layout~index-home~home~conversation-panel~conversation~mcp~automations-list~aut~ibfbmr9f-cDuKr-WD.js +0 -1
  1073. package/build/assets/vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~iyia17eu-Chf7vmKB.js +0 -1
  1074. package/build/assets/x-DJdhbdmt.js +0 -1
  1075. package/dist/components/features/conversation-panel/conversation-panel-filter-menu.cjs +0 -2
  1076. package/dist/components/features/conversation-panel/conversation-panel-filter-menu.cjs.map +0 -1
  1077. package/dist/components/features/conversation-panel/conversation-panel-filter-menu.d.ts +0 -35
  1078. package/dist/components/features/conversation-panel/conversation-panel-filter-menu.js +0 -247
  1079. package/dist/components/features/conversation-panel/conversation-panel-filter-menu.js.map +0 -1
  1080. package/dist/hooks/query/use-skills.cjs +0 -2
  1081. package/dist/hooks/query/use-skills.cjs.map +0 -1
  1082. package/dist/hooks/query/use-skills.d.ts +0 -7
  1083. package/dist/hooks/query/use-skills.js +0 -13
  1084. package/dist/hooks/query/use-skills.js.map +0 -1
  1085. package/dist/hooks/use-has-permission.cjs +0 -2
  1086. package/dist/hooks/use-has-permission.cjs.map +0 -1
  1087. package/dist/hooks/use-has-permission.d.ts +0 -1
  1088. package/dist/hooks/use-has-permission.js +0 -8
  1089. package/dist/hooks/use-has-permission.js.map +0 -1
  1090. package/dist/node_modules/lucide-react/dist/esm/icons/eye.cjs +0 -2
  1091. package/dist/node_modules/lucide-react/dist/esm/icons/eye.cjs.map +0 -1
  1092. package/dist/node_modules/lucide-react/dist/esm/icons/eye.js +0 -14
  1093. package/dist/node_modules/lucide-react/dist/esm/icons/eye.js.map +0 -1
@@ -8,7 +8,8 @@ function o({ event: o, isFromPlanningAgent: s = !1 }) {
8
8
  return /* @__PURE__ */ a(r, { children: [/* @__PURE__ */ i(e, {
9
9
  type: "agent",
10
10
  message: typeof c.details == "string" ? c.details : String(c.details),
11
- isFromPlanningAgent: s
11
+ isFromPlanningAgent: s,
12
+ timestamp: o.timestamp
12
13
  }), o.critic_result != null && /* @__PURE__ */ i(t, { criticResult: o.critic_result })] });
13
14
  }
14
15
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"finish-event-message.js","names":[],"sources":["../../../../../src/components/conversation-events/chat/event-message-components/finish-event-message.tsx"],"sourcesContent":["import { ActionEvent } from \"#/types/agent-server/core\";\nimport { FinishAction } from \"#/types/agent-server/core/base/action\";\nimport { ChatMessage } from \"../../../features/chat/chat-message\";\nimport { getEventContent } from \"../event-content-helpers/get-event-content\";\nimport { CriticResultDisplay } from \"./critic-result-display\";\n\ninterface FinishEventMessageProps {\n event: ActionEvent<FinishAction>;\n isFromPlanningAgent?: boolean;\n}\n\nexport function FinishEventMessage({\n event,\n isFromPlanningAgent = false,\n}: FinishEventMessageProps) {\n const eventContent = getEventContent(event);\n const message =\n typeof eventContent.details === \"string\"\n ? eventContent.details\n : String(eventContent.details);\n\n return (\n <>\n <ChatMessage\n type=\"agent\"\n message={message}\n isFromPlanningAgent={isFromPlanningAgent}\n />\n {event.critic_result != null && (\n <CriticResultDisplay criticResult={event.critic_result} />\n )}\n </>\n );\n}\n"],"mappings":";;;;;AAWA,SAAgB,EAAmB,EACjC,UACA,yBAAsB,MACI;CAC1B,IAAM,IAAe,EAAgB,CAAK;CAM1C,OACE,kBAAA,GAAA,EAAA,UAAA,CACE,kBAAC,GAAD;EACE,MAAK;EACI,SARb,OAAO,EAAa,WAAY,WAC5B,EAAa,UACb,OAAO,EAAa,OAAO;EAON;CACtB,CAAA,GACA,EAAM,iBAAiB,QACtB,kBAAC,GAAD,EAAqB,cAAc,EAAM,cAAgB,CAAA,CAE3D,EAAA,CAAA;AAEN"}
1
+ {"version":3,"file":"finish-event-message.js","names":[],"sources":["../../../../../src/components/conversation-events/chat/event-message-components/finish-event-message.tsx"],"sourcesContent":["import { ActionEvent } from \"#/types/agent-server/core\";\nimport { FinishAction } from \"#/types/agent-server/core/base/action\";\nimport { ChatMessage } from \"../../../features/chat/chat-message\";\nimport { getEventContent } from \"../event-content-helpers/get-event-content\";\nimport { CriticResultDisplay } from \"./critic-result-display\";\n\ninterface FinishEventMessageProps {\n event: ActionEvent<FinishAction>;\n isFromPlanningAgent?: boolean;\n}\n\nexport function FinishEventMessage({\n event,\n isFromPlanningAgent = false,\n}: FinishEventMessageProps) {\n const eventContent = getEventContent(event);\n const message =\n typeof eventContent.details === \"string\"\n ? eventContent.details\n : String(eventContent.details);\n\n return (\n <>\n <ChatMessage\n type=\"agent\"\n message={message}\n isFromPlanningAgent={isFromPlanningAgent}\n timestamp={event.timestamp}\n />\n {event.critic_result != null && (\n <CriticResultDisplay criticResult={event.critic_result} />\n )}\n </>\n );\n}\n"],"mappings":";;;;;AAWA,SAAgB,EAAmB,EACjC,UACA,yBAAsB,MACI;CAC1B,IAAM,IAAe,EAAgB,CAAK;CAM1C,OACE,kBAAA,GAAA,EAAA,UAAA,CACE,kBAAC,GAAD;EACE,MAAK;EACI,SARb,OAAO,EAAa,WAAY,WAC5B,EAAa,UACb,OAAO,EAAa,OAAO;EAON;EACrB,WAAW,EAAM;CAClB,CAAA,GACA,EAAM,iBAAiB,QACtB,kBAAC,GAAD,EAAqB,cAAc,EAAM,cAAgB,CAAA,CAE3D,EAAA,CAAA;AAEN"}
@@ -1,2 +1,2 @@
1
- require("../../../../_virtual/_rolldown/runtime.cjs");const e=require("../../../../i18n/declaration.cjs"),t=require("../../../../types/agent-server/type-guards.cjs"),n=require("../../../features/chat/generic-event-message.cjs"),r=require("../../../../icons/skills.cjs"),i=require("../../../shared/buttons/conversation-confirmation-buttons.cjs"),a=require("../event-content-helpers/get-observation-result.cjs"),o=require("../event-content-helpers/create-skill-ready-event.cjs"),s=require("../../../features/chat/tool-visualizers/primitives/markdown-file-preview.cjs"),c=require("../event-content-helpers/get-event-content.cjs"),l=require("../event-content-helpers/get-invoke-skill-items.cjs"),u=require("./skill-ready-content-list.cjs");let d=require("react/jsx-runtime");function f(n){if(o.isSkillReadyEvent(n))return n._skillReadyItems.length>0?{items:n._skillReadyItems,titleKey:e.I18nKey.SKILLS$TRIGGERED_SKILL_KNOWLEDGE}:null;if(t.isObservationEvent(n)&&n.observation.kind===`InvokeSkillObservation`){let t=l.getInvokeSkillItems(n);return t.length>0?{items:t,titleKey:e.I18nKey.SKILLS$INVOKED_SKILL_KNOWLEDGE}:null}return null}function p({event:e,isLastMessage:l,correspondingAction:p}){let{title:m,details:h}=c.getEventContent(e,p);if(!o.isSkillReadyEvent(e)&&t.isObservationEvent(e)&&e.observation.kind===`TaskTrackerObservation`)return(0,d.jsx)(`div`,{children:h});let g;o.isSkillReadyEvent(e)?g=`success`:t.isObservationEvent(e)?g=a.getObservationResult(e):t.isACPToolCallEvent(e)&&(g=a.getACPToolCallResult(e));let _=f(e),v=_?(0,d.jsx)(u.SkillReadyContentList,{items:_.items,titleKey:_.titleKey}):h,y=!o.isSkillReadyEvent(e)&&s.isMarkdownFileEditorEvent(e,p);return(0,d.jsxs)(`div`,{children:[(0,d.jsx)(n.GenericEventMessage,{title:m,details:v,success:g,initiallyExpanded:y,titleIcon:_?(0,d.jsx)(r.default,{className:`h-4 w-4 stroke-[var(--oh-muted)] flex-shrink-0 mr-2`}):void 0}),l&&(0,d.jsx)(i.ConversationConfirmationButtons,{})]})}exports.GenericEventMessageWrapper=p;
1
+ require("../../../../_virtual/_rolldown/runtime.cjs");const e=require("../../../../i18n/declaration.cjs"),t=require("../../../../types/agent-server/type-guards.cjs"),n=require("../../../features/chat/generic-event-message.cjs"),r=require("../../../../icons/skills.cjs"),i=require("../event-content-helpers/get-observation-result.cjs"),a=require("../event-content-helpers/create-skill-ready-event.cjs"),o=require("../../../features/chat/tool-visualizers/primitives/markdown-file-preview.cjs"),s=require("../event-content-helpers/get-event-content.cjs"),c=require("../event-content-helpers/get-invoke-skill-items.cjs"),l=require("./skill-ready-content-list.cjs");let u=require("react/jsx-runtime");function d(n){if(a.isSkillReadyEvent(n))return n._skillReadyItems.length>0?{items:n._skillReadyItems,titleKey:e.I18nKey.SKILLS$TRIGGERED_SKILL_KNOWLEDGE}:null;if(t.isObservationEvent(n)&&n.observation.kind===`InvokeSkillObservation`){let t=c.getInvokeSkillItems(n);return t.length>0?{items:t,titleKey:e.I18nKey.SKILLS$INVOKED_SKILL_KNOWLEDGE}:null}return null}function f({event:e,correspondingAction:c}){let{title:f,details:p}=s.getEventContent(e,c);if(!a.isSkillReadyEvent(e)&&t.isObservationEvent(e)&&e.observation.kind===`TaskTrackerObservation`)return(0,u.jsx)(`div`,{children:p});let m;a.isSkillReadyEvent(e)?m=`success`:t.isObservationEvent(e)?m=i.getObservationResult(e):t.isACPToolCallEvent(e)&&(m=i.getACPToolCallResult(e));let h=d(e),g=h?(0,u.jsx)(l.SkillReadyContentList,{items:h.items,titleKey:h.titleKey}):p,_=!a.isSkillReadyEvent(e)&&o.isMarkdownFileEditorEvent(e,c);return(0,u.jsx)(`div`,{children:(0,u.jsx)(n.GenericEventMessage,{title:f,details:g,success:m,initiallyExpanded:_,timestamp:e.timestamp,titleIcon:h?(0,u.jsx)(r.default,{className:`h-4 w-4 stroke-[var(--oh-muted)] flex-shrink-0 mr-2`}):void 0})})}exports.GenericEventMessageWrapper=f;
2
2
  //# sourceMappingURL=generic-event-message-wrapper.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"generic-event-message-wrapper.cjs","names":[],"sources":["../../../../../src/components/conversation-events/chat/event-message-components/generic-event-message-wrapper.tsx"],"sourcesContent":["import {\n OpenHandsEvent,\n ActionEvent,\n ObservationEvent,\n} from \"#/types/agent-server/core\";\nimport { InvokeSkillObservation } from \"#/types/agent-server/core/base/observation\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport { GenericEventMessage } from \"../../../features/chat/generic-event-message\";\nimport { getEventContent } from \"../event-content-helpers/get-event-content\";\nimport {\n getACPToolCallResult,\n getObservationResult,\n ObservationResultStatus,\n} from \"../event-content-helpers/get-observation-result\";\nimport {\n isACPToolCallEvent,\n isObservationEvent,\n} from \"#/types/agent-server/type-guards\";\nimport {\n SkillReadyEvent,\n SkillReadyItem,\n isSkillReadyEvent,\n} from \"../event-content-helpers/create-skill-ready-event\";\nimport { getInvokeSkillItems } from \"../event-content-helpers/get-invoke-skill-items\";\nimport { ConversationConfirmationButtons } from \"#/components/shared/buttons/conversation-confirmation-buttons\";\nimport { SkillReadyContentList } from \"./skill-ready-content-list\";\nimport SkillsIcon from \"#/icons/skills.svg?react\";\nimport { isMarkdownFileEditorEvent } from \"#/components/features/chat/tool-visualizers/primitives/markdown-file-preview\";\n\ninterface GenericEventMessageWrapperProps {\n event: OpenHandsEvent | SkillReadyEvent;\n isLastMessage: boolean;\n correspondingAction?: ActionEvent;\n}\n\n/**\n * Resolves the expandable skill-knowledge list shared by Skill Ready events and\n * invoke-skill tool observations. Returns the list items and their header\n * label, or null when the event carries no skill knowledge (so the caller keeps\n * the default details body). Additional skill-knowledge sources slot in as one\n * more branch here.\n */\nfunction getSkillKnowledge(\n event: OpenHandsEvent | SkillReadyEvent,\n): { items: SkillReadyItem[]; titleKey: I18nKey } | null {\n if (isSkillReadyEvent(event)) {\n return event._skillReadyItems.length > 0\n ? {\n items: event._skillReadyItems,\n titleKey: I18nKey.SKILLS$TRIGGERED_SKILL_KNOWLEDGE,\n }\n : null;\n }\n if (\n isObservationEvent(event) &&\n event.observation.kind === \"InvokeSkillObservation\"\n ) {\n const items = getInvokeSkillItems(\n event as ObservationEvent<InvokeSkillObservation>,\n );\n return items.length > 0\n ? { items, titleKey: I18nKey.SKILLS$INVOKED_SKILL_KNOWLEDGE }\n : null;\n }\n return null;\n}\n\nexport function GenericEventMessageWrapper({\n event,\n isLastMessage,\n correspondingAction,\n}: GenericEventMessageWrapperProps) {\n const { title, details } = getEventContent(event, correspondingAction);\n\n // TaskTrackerObservation has its own rendering\n if (\n !isSkillReadyEvent(event) &&\n isObservationEvent(event) &&\n event.observation.kind === \"TaskTrackerObservation\"\n ) {\n return <div>{details}</div>;\n }\n\n // Determine success status\n let success: ObservationResultStatus | undefined;\n if (isSkillReadyEvent(event)) {\n success = \"success\";\n } else if (isObservationEvent(event)) {\n success = getObservationResult(event);\n } else if (isACPToolCallEvent(event)) {\n success = getACPToolCallResult(event);\n }\n\n // Skill Ready events and invoke-skill tool observations both render the\n // expandable skill-knowledge list (with the skills icon); they differ only in\n // the header label.\n const skillKnowledge = getSkillKnowledge(event);\n const bodyDetails = skillKnowledge ? (\n <SkillReadyContentList\n items={skillKnowledge.items}\n titleKey={skillKnowledge.titleKey}\n />\n ) : (\n details\n );\n\n // Markdown file-editor cards carry a clipped preview; expand them by\n // default so the artifact is visible without an extra chevron click.\n const initiallyExpanded =\n !isSkillReadyEvent(event) &&\n isMarkdownFileEditorEvent(event, correspondingAction);\n\n return (\n <div>\n <GenericEventMessage\n title={title}\n details={bodyDetails}\n success={success}\n initiallyExpanded={initiallyExpanded}\n titleIcon={\n skillKnowledge ? (\n <SkillsIcon className=\"h-4 w-4 stroke-[var(--oh-muted)] flex-shrink-0 mr-2\" />\n ) : undefined\n }\n />\n {isLastMessage && <ConversationConfirmationButtons />}\n </div>\n );\n}\n"],"mappings":"mwBA0CA,SAAS,EACP,EACuD,CACvD,GAAI,EAAA,kBAAkB,CAAK,EACzB,OAAO,EAAM,iBAAiB,OAAS,EACnC,CACE,MAAO,EAAM,iBACb,SAAU,EAAA,QAAQ,gCACpB,EACA,KAEN,GACE,EAAA,mBAAmB,CAAK,GACxB,EAAM,YAAY,OAAS,yBAC3B,CACA,IAAM,EAAQ,EAAA,oBACZ,CACF,EACA,OAAO,EAAM,OAAS,EAClB,CAAE,QAAO,SAAU,EAAA,QAAQ,8BAA+B,EAC1D,IACN,CACA,OAAO,IACT,CAEA,SAAgB,EAA2B,CACzC,QACA,gBACA,uBACkC,CAClC,GAAM,CAAE,QAAO,WAAY,EAAA,gBAAgB,EAAO,CAAmB,EAGrE,GACE,CAAC,EAAA,kBAAkB,CAAK,GACxB,EAAA,mBAAmB,CAAK,GACxB,EAAM,YAAY,OAAS,yBAE3B,OAAO,EAAA,EAAA,KAAC,MAAD,CAAA,SAAM,CAAa,CAAA,EAI5B,IAAI,EACA,EAAA,kBAAkB,CAAK,EACzB,EAAU,UACD,EAAA,mBAAmB,CAAK,EACjC,EAAU,EAAA,qBAAqB,CAAK,EAC3B,EAAA,mBAAmB,CAAK,IACjC,EAAU,EAAA,qBAAqB,CAAK,GAMtC,IAAM,EAAiB,EAAkB,CAAK,EACxC,EAAc,GAClB,EAAA,EAAA,KAAC,EAAA,sBAAD,CACE,MAAO,EAAe,MACtB,SAAU,EAAe,QAC1B,CAAA,EAED,EAKI,EACJ,CAAC,EAAA,kBAAkB,CAAK,GACxB,EAAA,0BAA0B,EAAO,CAAmB,EAEtD,OACE,EAAA,EAAA,MAAC,MAAD,CAAA,SAAA,EACE,EAAA,EAAA,KAAC,EAAA,oBAAD,CACS,QACP,QAAS,EACA,UACU,oBACnB,UACE,GACE,EAAA,EAAA,KAAC,EAAA,QAAD,CAAY,UAAU,qDAAuD,CAAA,EAC3E,IAAA,EAEP,CAAA,EACA,IAAiB,EAAA,EAAA,KAAC,EAAA,gCAAD,CAAkC,CAAA,CACjD,CAAA,CAAA,CAET"}
1
+ {"version":3,"file":"generic-event-message-wrapper.cjs","names":[],"sources":["../../../../../src/components/conversation-events/chat/event-message-components/generic-event-message-wrapper.tsx"],"sourcesContent":["import {\n OpenHandsEvent,\n ActionEvent,\n ObservationEvent,\n} from \"#/types/agent-server/core\";\nimport { InvokeSkillObservation } from \"#/types/agent-server/core/base/observation\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport { GenericEventMessage } from \"../../../features/chat/generic-event-message\";\nimport { getEventContent } from \"../event-content-helpers/get-event-content\";\nimport {\n getACPToolCallResult,\n getObservationResult,\n ObservationResultStatus,\n} from \"../event-content-helpers/get-observation-result\";\nimport {\n isACPToolCallEvent,\n isObservationEvent,\n} from \"#/types/agent-server/type-guards\";\nimport {\n SkillReadyEvent,\n SkillReadyItem,\n isSkillReadyEvent,\n} from \"../event-content-helpers/create-skill-ready-event\";\nimport { getInvokeSkillItems } from \"../event-content-helpers/get-invoke-skill-items\";\nimport { SkillReadyContentList } from \"./skill-ready-content-list\";\nimport SkillsIcon from \"#/icons/skills.svg?react\";\nimport { isMarkdownFileEditorEvent } from \"#/components/features/chat/tool-visualizers/primitives/markdown-file-preview\";\n\ninterface GenericEventMessageWrapperProps {\n event: OpenHandsEvent | SkillReadyEvent;\n isLastMessage: boolean;\n correspondingAction?: ActionEvent;\n}\n\n/**\n * Resolves the expandable skill-knowledge list shared by Skill Ready events and\n * invoke-skill tool observations. Returns the list items and their header\n * label, or null when the event carries no skill knowledge (so the caller keeps\n * the default details body). Additional skill-knowledge sources slot in as one\n * more branch here.\n */\nfunction getSkillKnowledge(\n event: OpenHandsEvent | SkillReadyEvent,\n): { items: SkillReadyItem[]; titleKey: I18nKey } | null {\n if (isSkillReadyEvent(event)) {\n return event._skillReadyItems.length > 0\n ? {\n items: event._skillReadyItems,\n titleKey: I18nKey.SKILLS$TRIGGERED_SKILL_KNOWLEDGE,\n }\n : null;\n }\n if (\n isObservationEvent(event) &&\n event.observation.kind === \"InvokeSkillObservation\"\n ) {\n const items = getInvokeSkillItems(\n event as ObservationEvent<InvokeSkillObservation>,\n );\n return items.length > 0\n ? { items, titleKey: I18nKey.SKILLS$INVOKED_SKILL_KNOWLEDGE }\n : null;\n }\n return null;\n}\n\nexport function GenericEventMessageWrapper({\n event,\n correspondingAction,\n}: GenericEventMessageWrapperProps) {\n const { title, details } = getEventContent(event, correspondingAction);\n\n // TaskTrackerObservation has its own rendering\n if (\n !isSkillReadyEvent(event) &&\n isObservationEvent(event) &&\n event.observation.kind === \"TaskTrackerObservation\"\n ) {\n return <div>{details}</div>;\n }\n\n // Determine success status\n let success: ObservationResultStatus | undefined;\n if (isSkillReadyEvent(event)) {\n success = \"success\";\n } else if (isObservationEvent(event)) {\n success = getObservationResult(event);\n } else if (isACPToolCallEvent(event)) {\n success = getACPToolCallResult(event);\n }\n\n // Skill Ready events and invoke-skill tool observations both render the\n // expandable skill-knowledge list (with the skills icon); they differ only in\n // the header label.\n const skillKnowledge = getSkillKnowledge(event);\n const bodyDetails = skillKnowledge ? (\n <SkillReadyContentList\n items={skillKnowledge.items}\n titleKey={skillKnowledge.titleKey}\n />\n ) : (\n details\n );\n\n // Markdown file-editor cards carry a clipped preview; expand them by\n // default so the artifact is visible without an extra chevron click.\n const initiallyExpanded =\n !isSkillReadyEvent(event) &&\n isMarkdownFileEditorEvent(event, correspondingAction);\n\n return (\n <div>\n <GenericEventMessage\n title={title}\n details={bodyDetails}\n success={success}\n initiallyExpanded={initiallyExpanded}\n timestamp={event.timestamp}\n titleIcon={\n skillKnowledge ? (\n <SkillsIcon className=\"h-4 w-4 stroke-[var(--oh-muted)] flex-shrink-0 mr-2\" />\n ) : undefined\n }\n />\n </div>\n );\n}\n"],"mappings":"wrBAyCA,SAAS,EACP,EACuD,CACvD,GAAI,EAAA,kBAAkB,CAAK,EACzB,OAAO,EAAM,iBAAiB,OAAS,EACnC,CACE,MAAO,EAAM,iBACb,SAAU,EAAA,QAAQ,gCACpB,EACA,KAEN,GACE,EAAA,mBAAmB,CAAK,GACxB,EAAM,YAAY,OAAS,yBAC3B,CACA,IAAM,EAAQ,EAAA,oBACZ,CACF,EACA,OAAO,EAAM,OAAS,EAClB,CAAE,QAAO,SAAU,EAAA,QAAQ,8BAA+B,EAC1D,IACN,CACA,OAAO,IACT,CAEA,SAAgB,EAA2B,CACzC,QACA,uBACkC,CAClC,GAAM,CAAE,QAAO,WAAY,EAAA,gBAAgB,EAAO,CAAmB,EAGrE,GACE,CAAC,EAAA,kBAAkB,CAAK,GACxB,EAAA,mBAAmB,CAAK,GACxB,EAAM,YAAY,OAAS,yBAE3B,OAAO,EAAA,EAAA,KAAC,MAAD,CAAA,SAAM,CAAa,CAAA,EAI5B,IAAI,EACA,EAAA,kBAAkB,CAAK,EACzB,EAAU,UACD,EAAA,mBAAmB,CAAK,EACjC,EAAU,EAAA,qBAAqB,CAAK,EAC3B,EAAA,mBAAmB,CAAK,IACjC,EAAU,EAAA,qBAAqB,CAAK,GAMtC,IAAM,EAAiB,EAAkB,CAAK,EACxC,EAAc,GAClB,EAAA,EAAA,KAAC,EAAA,sBAAD,CACE,MAAO,EAAe,MACtB,SAAU,EAAe,QAC1B,CAAA,EAED,EAKI,EACJ,CAAC,EAAA,kBAAkB,CAAK,GACxB,EAAA,0BAA0B,EAAO,CAAmB,EAEtD,OACE,EAAA,EAAA,KAAC,MAAD,CAAA,UACE,EAAA,EAAA,KAAC,EAAA,oBAAD,CACS,QACP,QAAS,EACA,UACU,oBACnB,UAAW,EAAM,UACjB,UACE,GACE,EAAA,EAAA,KAAC,EAAA,QAAD,CAAY,UAAU,qDAAuD,CAAA,EAC3E,IAAA,EAEP,CAAA,CACE,CAAA,CAET"}
@@ -5,5 +5,5 @@ interface GenericEventMessageWrapperProps {
5
5
  isLastMessage: boolean;
6
6
  correspondingAction?: ActionEvent;
7
7
  }
8
- export declare function GenericEventMessageWrapper({ event, isLastMessage, correspondingAction, }: GenericEventMessageWrapperProps): import("react").JSX.Element;
8
+ export declare function GenericEventMessageWrapper({ event, correspondingAction, }: GenericEventMessageWrapperProps): import("react").JSX.Element;
9
9
  export {};
@@ -2,22 +2,21 @@ import { I18nKey as e } from "../../../../i18n/declaration.js";
2
2
  import { isACPToolCallEvent as t, isObservationEvent as n } from "../../../../types/agent-server/type-guards.js";
3
3
  import { GenericEventMessage as r } from "../../../features/chat/generic-event-message.js";
4
4
  import i from "../../../../icons/skills.js";
5
- import { ConversationConfirmationButtons as a } from "../../../shared/buttons/conversation-confirmation-buttons.js";
6
- import { getACPToolCallResult as o, getObservationResult as s } from "../event-content-helpers/get-observation-result.js";
7
- import { isSkillReadyEvent as c } from "../event-content-helpers/create-skill-ready-event.js";
8
- import { isMarkdownFileEditorEvent as l } from "../../../features/chat/tool-visualizers/primitives/markdown-file-preview.js";
9
- import { getEventContent as u } from "../event-content-helpers/get-event-content.js";
10
- import { getInvokeSkillItems as d } from "../event-content-helpers/get-invoke-skill-items.js";
11
- import { SkillReadyContentList as f } from "./skill-ready-content-list.js";
12
- import { jsx as p, jsxs as m } from "react/jsx-runtime";
5
+ import { getACPToolCallResult as a, getObservationResult as o } from "../event-content-helpers/get-observation-result.js";
6
+ import { isSkillReadyEvent as s } from "../event-content-helpers/create-skill-ready-event.js";
7
+ import { isMarkdownFileEditorEvent as c } from "../../../features/chat/tool-visualizers/primitives/markdown-file-preview.js";
8
+ import { getEventContent as l } from "../event-content-helpers/get-event-content.js";
9
+ import { getInvokeSkillItems as u } from "../event-content-helpers/get-invoke-skill-items.js";
10
+ import { SkillReadyContentList as d } from "./skill-ready-content-list.js";
11
+ import { jsx as f } from "react/jsx-runtime";
13
12
  //#region src/components/conversation-events/chat/event-message-components/generic-event-message-wrapper.tsx
14
- function h(t) {
15
- if (c(t)) return t._skillReadyItems.length > 0 ? {
13
+ function p(t) {
14
+ if (s(t)) return t._skillReadyItems.length > 0 ? {
16
15
  items: t._skillReadyItems,
17
16
  titleKey: e.SKILLS$TRIGGERED_SKILL_KNOWLEDGE
18
17
  } : null;
19
18
  if (n(t) && t.observation.kind === "InvokeSkillObservation") {
20
- let n = d(t);
19
+ let n = u(t);
21
20
  return n.length > 0 ? {
22
21
  items: n,
23
22
  titleKey: e.SKILLS$INVOKED_SKILL_KNOWLEDGE
@@ -25,24 +24,25 @@ function h(t) {
25
24
  }
26
25
  return null;
27
26
  }
28
- function g({ event: e, isLastMessage: d, correspondingAction: g }) {
29
- let { title: _, details: v } = u(e, g);
30
- if (!c(e) && n(e) && e.observation.kind === "TaskTrackerObservation") return /* @__PURE__ */ p("div", { children: v });
31
- let y;
32
- c(e) ? y = "success" : n(e) ? y = s(e) : t(e) && (y = o(e));
33
- let b = h(e), x = b ? /* @__PURE__ */ p(f, {
34
- items: b.items,
35
- titleKey: b.titleKey
36
- }) : v, S = !c(e) && l(e, g);
37
- return /* @__PURE__ */ m("div", { children: [/* @__PURE__ */ p(r, {
38
- title: _,
39
- details: x,
40
- success: y,
41
- initiallyExpanded: S,
42
- titleIcon: b ? /* @__PURE__ */ p(i, { className: "h-4 w-4 stroke-[var(--oh-muted)] flex-shrink-0 mr-2" }) : void 0
43
- }), d && /* @__PURE__ */ p(a, {})] });
27
+ function m({ event: e, correspondingAction: u }) {
28
+ let { title: m, details: h } = l(e, u);
29
+ if (!s(e) && n(e) && e.observation.kind === "TaskTrackerObservation") return /* @__PURE__ */ f("div", { children: h });
30
+ let g;
31
+ s(e) ? g = "success" : n(e) ? g = o(e) : t(e) && (g = a(e));
32
+ let _ = p(e), v = _ ? /* @__PURE__ */ f(d, {
33
+ items: _.items,
34
+ titleKey: _.titleKey
35
+ }) : h, y = !s(e) && c(e, u);
36
+ return /* @__PURE__ */ f("div", { children: /* @__PURE__ */ f(r, {
37
+ title: m,
38
+ details: v,
39
+ success: g,
40
+ initiallyExpanded: y,
41
+ timestamp: e.timestamp,
42
+ titleIcon: _ ? /* @__PURE__ */ f(i, { className: "h-4 w-4 stroke-[var(--oh-muted)] flex-shrink-0 mr-2" }) : void 0
43
+ }) });
44
44
  }
45
45
  //#endregion
46
- export { g as GenericEventMessageWrapper };
46
+ export { m as GenericEventMessageWrapper };
47
47
 
48
48
  //# sourceMappingURL=generic-event-message-wrapper.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"generic-event-message-wrapper.js","names":[],"sources":["../../../../../src/components/conversation-events/chat/event-message-components/generic-event-message-wrapper.tsx"],"sourcesContent":["import {\n OpenHandsEvent,\n ActionEvent,\n ObservationEvent,\n} from \"#/types/agent-server/core\";\nimport { InvokeSkillObservation } from \"#/types/agent-server/core/base/observation\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport { GenericEventMessage } from \"../../../features/chat/generic-event-message\";\nimport { getEventContent } from \"../event-content-helpers/get-event-content\";\nimport {\n getACPToolCallResult,\n getObservationResult,\n ObservationResultStatus,\n} from \"../event-content-helpers/get-observation-result\";\nimport {\n isACPToolCallEvent,\n isObservationEvent,\n} from \"#/types/agent-server/type-guards\";\nimport {\n SkillReadyEvent,\n SkillReadyItem,\n isSkillReadyEvent,\n} from \"../event-content-helpers/create-skill-ready-event\";\nimport { getInvokeSkillItems } from \"../event-content-helpers/get-invoke-skill-items\";\nimport { ConversationConfirmationButtons } from \"#/components/shared/buttons/conversation-confirmation-buttons\";\nimport { SkillReadyContentList } from \"./skill-ready-content-list\";\nimport SkillsIcon from \"#/icons/skills.svg?react\";\nimport { isMarkdownFileEditorEvent } from \"#/components/features/chat/tool-visualizers/primitives/markdown-file-preview\";\n\ninterface GenericEventMessageWrapperProps {\n event: OpenHandsEvent | SkillReadyEvent;\n isLastMessage: boolean;\n correspondingAction?: ActionEvent;\n}\n\n/**\n * Resolves the expandable skill-knowledge list shared by Skill Ready events and\n * invoke-skill tool observations. Returns the list items and their header\n * label, or null when the event carries no skill knowledge (so the caller keeps\n * the default details body). Additional skill-knowledge sources slot in as one\n * more branch here.\n */\nfunction getSkillKnowledge(\n event: OpenHandsEvent | SkillReadyEvent,\n): { items: SkillReadyItem[]; titleKey: I18nKey } | null {\n if (isSkillReadyEvent(event)) {\n return event._skillReadyItems.length > 0\n ? {\n items: event._skillReadyItems,\n titleKey: I18nKey.SKILLS$TRIGGERED_SKILL_KNOWLEDGE,\n }\n : null;\n }\n if (\n isObservationEvent(event) &&\n event.observation.kind === \"InvokeSkillObservation\"\n ) {\n const items = getInvokeSkillItems(\n event as ObservationEvent<InvokeSkillObservation>,\n );\n return items.length > 0\n ? { items, titleKey: I18nKey.SKILLS$INVOKED_SKILL_KNOWLEDGE }\n : null;\n }\n return null;\n}\n\nexport function GenericEventMessageWrapper({\n event,\n isLastMessage,\n correspondingAction,\n}: GenericEventMessageWrapperProps) {\n const { title, details } = getEventContent(event, correspondingAction);\n\n // TaskTrackerObservation has its own rendering\n if (\n !isSkillReadyEvent(event) &&\n isObservationEvent(event) &&\n event.observation.kind === \"TaskTrackerObservation\"\n ) {\n return <div>{details}</div>;\n }\n\n // Determine success status\n let success: ObservationResultStatus | undefined;\n if (isSkillReadyEvent(event)) {\n success = \"success\";\n } else if (isObservationEvent(event)) {\n success = getObservationResult(event);\n } else if (isACPToolCallEvent(event)) {\n success = getACPToolCallResult(event);\n }\n\n // Skill Ready events and invoke-skill tool observations both render the\n // expandable skill-knowledge list (with the skills icon); they differ only in\n // the header label.\n const skillKnowledge = getSkillKnowledge(event);\n const bodyDetails = skillKnowledge ? (\n <SkillReadyContentList\n items={skillKnowledge.items}\n titleKey={skillKnowledge.titleKey}\n />\n ) : (\n details\n );\n\n // Markdown file-editor cards carry a clipped preview; expand them by\n // default so the artifact is visible without an extra chevron click.\n const initiallyExpanded =\n !isSkillReadyEvent(event) &&\n isMarkdownFileEditorEvent(event, correspondingAction);\n\n return (\n <div>\n <GenericEventMessage\n title={title}\n details={bodyDetails}\n success={success}\n initiallyExpanded={initiallyExpanded}\n titleIcon={\n skillKnowledge ? (\n <SkillsIcon className=\"h-4 w-4 stroke-[var(--oh-muted)] flex-shrink-0 mr-2\" />\n ) : undefined\n }\n />\n {isLastMessage && <ConversationConfirmationButtons />}\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;;AA0CA,SAAS,EACP,GACuD;CACvD,IAAI,EAAkB,CAAK,GACzB,OAAO,EAAM,iBAAiB,SAAS,IACnC;EACE,OAAO,EAAM;EACb,UAAU,EAAQ;CACpB,IACA;CAEN,IACE,EAAmB,CAAK,KACxB,EAAM,YAAY,SAAS,0BAC3B;EACA,IAAM,IAAQ,EACZ,CACF;EACA,OAAO,EAAM,SAAS,IAClB;GAAE;GAAO,UAAU,EAAQ;EAA+B,IAC1D;CACN;CACA,OAAO;AACT;AAEA,SAAgB,EAA2B,EACzC,UACA,kBACA,0BACkC;CAClC,IAAM,EAAE,UAAO,eAAY,EAAgB,GAAO,CAAmB;CAGrE,IACE,CAAC,EAAkB,CAAK,KACxB,EAAmB,CAAK,KACxB,EAAM,YAAY,SAAS,0BAE3B,OAAO,kBAAC,OAAD,EAAA,UAAM,EAAa,CAAA;CAI5B,IAAI;CACJ,AAAI,EAAkB,CAAK,IACzB,IAAU,YACD,EAAmB,CAAK,IACjC,IAAU,EAAqB,CAAK,IAC3B,EAAmB,CAAK,MACjC,IAAU,EAAqB,CAAK;CAMtC,IAAM,IAAiB,EAAkB,CAAK,GACxC,IAAc,IAClB,kBAAC,GAAD;EACE,OAAO,EAAe;EACtB,UAAU,EAAe;CAC1B,CAAA,IAED,GAKI,IACJ,CAAC,EAAkB,CAAK,KACxB,EAA0B,GAAO,CAAmB;CAEtD,OACE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,GAAD;EACS;EACP,SAAS;EACA;EACU;EACnB,WACE,IACE,kBAAC,GAAD,EAAY,WAAU,sDAAuD,CAAA,IAC3E,KAAA;CAEP,CAAA,GACA,KAAiB,kBAAC,GAAD,CAAkC,CAAA,CACjD,EAAA,CAAA;AAET"}
1
+ {"version":3,"file":"generic-event-message-wrapper.js","names":[],"sources":["../../../../../src/components/conversation-events/chat/event-message-components/generic-event-message-wrapper.tsx"],"sourcesContent":["import {\n OpenHandsEvent,\n ActionEvent,\n ObservationEvent,\n} from \"#/types/agent-server/core\";\nimport { InvokeSkillObservation } from \"#/types/agent-server/core/base/observation\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport { GenericEventMessage } from \"../../../features/chat/generic-event-message\";\nimport { getEventContent } from \"../event-content-helpers/get-event-content\";\nimport {\n getACPToolCallResult,\n getObservationResult,\n ObservationResultStatus,\n} from \"../event-content-helpers/get-observation-result\";\nimport {\n isACPToolCallEvent,\n isObservationEvent,\n} from \"#/types/agent-server/type-guards\";\nimport {\n SkillReadyEvent,\n SkillReadyItem,\n isSkillReadyEvent,\n} from \"../event-content-helpers/create-skill-ready-event\";\nimport { getInvokeSkillItems } from \"../event-content-helpers/get-invoke-skill-items\";\nimport { SkillReadyContentList } from \"./skill-ready-content-list\";\nimport SkillsIcon from \"#/icons/skills.svg?react\";\nimport { isMarkdownFileEditorEvent } from \"#/components/features/chat/tool-visualizers/primitives/markdown-file-preview\";\n\ninterface GenericEventMessageWrapperProps {\n event: OpenHandsEvent | SkillReadyEvent;\n isLastMessage: boolean;\n correspondingAction?: ActionEvent;\n}\n\n/**\n * Resolves the expandable skill-knowledge list shared by Skill Ready events and\n * invoke-skill tool observations. Returns the list items and their header\n * label, or null when the event carries no skill knowledge (so the caller keeps\n * the default details body). Additional skill-knowledge sources slot in as one\n * more branch here.\n */\nfunction getSkillKnowledge(\n event: OpenHandsEvent | SkillReadyEvent,\n): { items: SkillReadyItem[]; titleKey: I18nKey } | null {\n if (isSkillReadyEvent(event)) {\n return event._skillReadyItems.length > 0\n ? {\n items: event._skillReadyItems,\n titleKey: I18nKey.SKILLS$TRIGGERED_SKILL_KNOWLEDGE,\n }\n : null;\n }\n if (\n isObservationEvent(event) &&\n event.observation.kind === \"InvokeSkillObservation\"\n ) {\n const items = getInvokeSkillItems(\n event as ObservationEvent<InvokeSkillObservation>,\n );\n return items.length > 0\n ? { items, titleKey: I18nKey.SKILLS$INVOKED_SKILL_KNOWLEDGE }\n : null;\n }\n return null;\n}\n\nexport function GenericEventMessageWrapper({\n event,\n correspondingAction,\n}: GenericEventMessageWrapperProps) {\n const { title, details } = getEventContent(event, correspondingAction);\n\n // TaskTrackerObservation has its own rendering\n if (\n !isSkillReadyEvent(event) &&\n isObservationEvent(event) &&\n event.observation.kind === \"TaskTrackerObservation\"\n ) {\n return <div>{details}</div>;\n }\n\n // Determine success status\n let success: ObservationResultStatus | undefined;\n if (isSkillReadyEvent(event)) {\n success = \"success\";\n } else if (isObservationEvent(event)) {\n success = getObservationResult(event);\n } else if (isACPToolCallEvent(event)) {\n success = getACPToolCallResult(event);\n }\n\n // Skill Ready events and invoke-skill tool observations both render the\n // expandable skill-knowledge list (with the skills icon); they differ only in\n // the header label.\n const skillKnowledge = getSkillKnowledge(event);\n const bodyDetails = skillKnowledge ? (\n <SkillReadyContentList\n items={skillKnowledge.items}\n titleKey={skillKnowledge.titleKey}\n />\n ) : (\n details\n );\n\n // Markdown file-editor cards carry a clipped preview; expand them by\n // default so the artifact is visible without an extra chevron click.\n const initiallyExpanded =\n !isSkillReadyEvent(event) &&\n isMarkdownFileEditorEvent(event, correspondingAction);\n\n return (\n <div>\n <GenericEventMessage\n title={title}\n details={bodyDetails}\n success={success}\n initiallyExpanded={initiallyExpanded}\n timestamp={event.timestamp}\n titleIcon={\n skillKnowledge ? (\n <SkillsIcon className=\"h-4 w-4 stroke-[var(--oh-muted)] flex-shrink-0 mr-2\" />\n ) : undefined\n }\n />\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;AAyCA,SAAS,EACP,GACuD;CACvD,IAAI,EAAkB,CAAK,GACzB,OAAO,EAAM,iBAAiB,SAAS,IACnC;EACE,OAAO,EAAM;EACb,UAAU,EAAQ;CACpB,IACA;CAEN,IACE,EAAmB,CAAK,KACxB,EAAM,YAAY,SAAS,0BAC3B;EACA,IAAM,IAAQ,EACZ,CACF;EACA,OAAO,EAAM,SAAS,IAClB;GAAE;GAAO,UAAU,EAAQ;EAA+B,IAC1D;CACN;CACA,OAAO;AACT;AAEA,SAAgB,EAA2B,EACzC,UACA,0BACkC;CAClC,IAAM,EAAE,UAAO,eAAY,EAAgB,GAAO,CAAmB;CAGrE,IACE,CAAC,EAAkB,CAAK,KACxB,EAAmB,CAAK,KACxB,EAAM,YAAY,SAAS,0BAE3B,OAAO,kBAAC,OAAD,EAAA,UAAM,EAAa,CAAA;CAI5B,IAAI;CACJ,AAAI,EAAkB,CAAK,IACzB,IAAU,YACD,EAAmB,CAAK,IACjC,IAAU,EAAqB,CAAK,IAC3B,EAAmB,CAAK,MACjC,IAAU,EAAqB,CAAK;CAMtC,IAAM,IAAiB,EAAkB,CAAK,GACxC,IAAc,IAClB,kBAAC,GAAD;EACE,OAAO,EAAe;EACtB,UAAU,EAAe;CAC1B,CAAA,IAED,GAKI,IACJ,CAAC,EAAkB,CAAK,KACxB,EAA0B,GAAO,CAAmB;CAEtD,OACE,kBAAC,OAAD,EAAA,UACE,kBAAC,GAAD;EACS;EACP,SAAS;EACA;EACU;EACnB,WAAW,EAAM;EACjB,WACE,IACE,kBAAC,GAAD,EAAY,WAAU,sDAAuD,CAAA,IAC3E,KAAA;CAEP,CAAA,EACE,CAAA;AAET"}
@@ -1,3 +1,3 @@
1
1
  const e=require("../../../../_virtual/_rolldown/runtime.cjs"),t=require("../../../features/chat/chat-message.cjs");let n=require("react");n=e.__toESM(n,1);let r=require("react/jsx-runtime");function i({event:e,actions:n,isFromPlanningAgent:i=!1}){let a=e.thought.filter(e=>e.type===`text`).map(e=>e.text).join(`
2
- `);return a?(0,r.jsx)(t.ChatMessage,{type:`agent`,message:a,actions:n,isFromPlanningAgent:i}):null}exports.ThoughtEventMessage=i;
2
+ `);return a?(0,r.jsx)(t.ChatMessage,{type:`agent`,message:a,actions:n,isFromPlanningAgent:i,timestamp:e.timestamp}):null}exports.ThoughtEventMessage=i;
3
3
  //# sourceMappingURL=thought-event-message.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"thought-event-message.cjs","names":[],"sources":["../../../../../src/components/conversation-events/chat/event-message-components/thought-event-message.tsx"],"sourcesContent":["import React from \"react\";\nimport { ActionEvent } from \"#/types/agent-server/core\";\nimport { ChatMessage } from \"../../../features/chat/chat-message\";\n\ninterface ThoughtEventMessageProps {\n event: ActionEvent;\n actions?: Array<{\n icon: React.ReactNode;\n onClick: () => void;\n tooltip?: string;\n }>;\n isFromPlanningAgent?: boolean;\n}\n\nexport function ThoughtEventMessage({\n event,\n actions,\n isFromPlanningAgent = false,\n}: ThoughtEventMessageProps) {\n // Extract thought content from the action event\n const thoughtContent = event.thought\n .filter((t) => t.type === \"text\")\n .map((t) => t.text)\n .join(\"\\n\");\n\n // If there's no thought content, don't render anything\n if (!thoughtContent) {\n return null;\n }\n\n return (\n <ChatMessage\n type=\"agent\"\n message={thoughtContent}\n actions={actions}\n isFromPlanningAgent={isFromPlanningAgent}\n />\n );\n}\n"],"mappings":"8LAcA,SAAgB,EAAoB,CAClC,QACA,UACA,sBAAsB,IACK,CAE3B,IAAM,EAAiB,EAAM,QAC1B,OAAQ,GAAM,EAAE,OAAS,MAAM,EAC/B,IAAK,GAAM,EAAE,IAAI,EACjB,KAAK;CAAI,EAOZ,OAJK,GAKH,EAAA,EAAA,KAAC,EAAA,YAAD,CACE,KAAK,QACL,QAAS,EACA,UACY,qBACtB,CAAA,EATM,IAWX"}
1
+ {"version":3,"file":"thought-event-message.cjs","names":[],"sources":["../../../../../src/components/conversation-events/chat/event-message-components/thought-event-message.tsx"],"sourcesContent":["import React from \"react\";\nimport { ActionEvent } from \"#/types/agent-server/core\";\nimport { ChatMessage } from \"../../../features/chat/chat-message\";\n\ninterface ThoughtEventMessageProps {\n event: ActionEvent;\n actions?: Array<{\n icon: React.ReactNode;\n onClick: () => void;\n tooltip?: string;\n }>;\n isFromPlanningAgent?: boolean;\n}\n\nexport function ThoughtEventMessage({\n event,\n actions,\n isFromPlanningAgent = false,\n}: ThoughtEventMessageProps) {\n // Extract thought content from the action event\n const thoughtContent = event.thought\n .filter((t) => t.type === \"text\")\n .map((t) => t.text)\n .join(\"\\n\");\n\n // If there's no thought content, don't render anything\n if (!thoughtContent) {\n return null;\n }\n\n return (\n <ChatMessage\n type=\"agent\"\n message={thoughtContent}\n actions={actions}\n isFromPlanningAgent={isFromPlanningAgent}\n timestamp={event.timestamp}\n />\n );\n}\n"],"mappings":"8LAcA,SAAgB,EAAoB,CAClC,QACA,UACA,sBAAsB,IACK,CAE3B,IAAM,EAAiB,EAAM,QAC1B,OAAQ,GAAM,EAAE,OAAS,MAAM,EAC/B,IAAK,GAAM,EAAE,IAAI,EACjB,KAAK;CAAI,EAOZ,OAJK,GAKH,EAAA,EAAA,KAAC,EAAA,YAAD,CACE,KAAK,QACL,QAAS,EACA,UACY,sBACrB,UAAW,EAAM,SAClB,CAAA,EAVM,IAYX"}
@@ -8,7 +8,8 @@ function n({ event: n, actions: r, isFromPlanningAgent: i = !1 }) {
8
8
  type: "agent",
9
9
  message: a,
10
10
  actions: r,
11
- isFromPlanningAgent: i
11
+ isFromPlanningAgent: i,
12
+ timestamp: n.timestamp
12
13
  }) : null;
13
14
  }
14
15
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"thought-event-message.js","names":[],"sources":["../../../../../src/components/conversation-events/chat/event-message-components/thought-event-message.tsx"],"sourcesContent":["import React from \"react\";\nimport { ActionEvent } from \"#/types/agent-server/core\";\nimport { ChatMessage } from \"../../../features/chat/chat-message\";\n\ninterface ThoughtEventMessageProps {\n event: ActionEvent;\n actions?: Array<{\n icon: React.ReactNode;\n onClick: () => void;\n tooltip?: string;\n }>;\n isFromPlanningAgent?: boolean;\n}\n\nexport function ThoughtEventMessage({\n event,\n actions,\n isFromPlanningAgent = false,\n}: ThoughtEventMessageProps) {\n // Extract thought content from the action event\n const thoughtContent = event.thought\n .filter((t) => t.type === \"text\")\n .map((t) => t.text)\n .join(\"\\n\");\n\n // If there's no thought content, don't render anything\n if (!thoughtContent) {\n return null;\n }\n\n return (\n <ChatMessage\n type=\"agent\"\n message={thoughtContent}\n actions={actions}\n isFromPlanningAgent={isFromPlanningAgent}\n />\n );\n}\n"],"mappings":";;;;AAcA,SAAgB,EAAoB,EAClC,UACA,YACA,yBAAsB,MACK;CAE3B,IAAM,IAAiB,EAAM,QAC1B,QAAQ,MAAM,EAAE,SAAS,MAAM,EAC/B,KAAK,MAAM,EAAE,IAAI,EACjB,KAAK,IAAI;CAOZ,OAJK,IAKH,kBAAC,GAAD;EACE,MAAK;EACL,SAAS;EACA;EACY;CACtB,CAAA,IATM;AAWX"}
1
+ {"version":3,"file":"thought-event-message.js","names":[],"sources":["../../../../../src/components/conversation-events/chat/event-message-components/thought-event-message.tsx"],"sourcesContent":["import React from \"react\";\nimport { ActionEvent } from \"#/types/agent-server/core\";\nimport { ChatMessage } from \"../../../features/chat/chat-message\";\n\ninterface ThoughtEventMessageProps {\n event: ActionEvent;\n actions?: Array<{\n icon: React.ReactNode;\n onClick: () => void;\n tooltip?: string;\n }>;\n isFromPlanningAgent?: boolean;\n}\n\nexport function ThoughtEventMessage({\n event,\n actions,\n isFromPlanningAgent = false,\n}: ThoughtEventMessageProps) {\n // Extract thought content from the action event\n const thoughtContent = event.thought\n .filter((t) => t.type === \"text\")\n .map((t) => t.text)\n .join(\"\\n\");\n\n // If there's no thought content, don't render anything\n if (!thoughtContent) {\n return null;\n }\n\n return (\n <ChatMessage\n type=\"agent\"\n message={thoughtContent}\n actions={actions}\n isFromPlanningAgent={isFromPlanningAgent}\n timestamp={event.timestamp}\n />\n );\n}\n"],"mappings":";;;;AAcA,SAAgB,EAAoB,EAClC,UACA,YACA,yBAAsB,MACK;CAE3B,IAAM,IAAiB,EAAM,QAC1B,QAAQ,MAAM,EAAE,SAAS,MAAM,EAC/B,KAAK,MAAM,EAAE,IAAI,EACjB,KAAK,IAAI;CAOZ,OAJK,IAKH,kBAAC,GAAD;EACE,MAAK;EACL,SAAS;EACA;EACY;EACrB,WAAW,EAAM;CAClB,CAAA,IAVM;AAYX"}
@@ -1,2 +1,2 @@
1
- const e=require("../../../../_virtual/_rolldown/runtime.cjs"),t=require("../../../../node_modules/react-i18next/dist/es/useTranslation.cjs"),n=require("../../../../i18n/declaration.cjs"),r=require("../../../../context/navigation-context.cjs"),i=require("../../../../hooks/use-conversation-id.cjs"),a=require("../../../../stores/conversation-store.cjs"),o=require("../../../../utils/custom-toast-handlers.cjs"),s=require("../../../../contexts/active-backend-context.cjs"),c=require("../event-thought-helpers.cjs"),l=require("../../../../api/conversation-service/conversation-service.api.cjs"),u=require("../../../../icons/repo-forked.cjs"),d=require("../../../features/chat/chat-message.cjs"),f=require("../../../features/images/image-carousel.cjs"),p=require("../../../shared/buttons/conversation-confirmation-buttons.cjs"),m=require("../event-content-helpers/parse-message-from-event.cjs"),h=require("./critic-result-display.cjs"),g=require("./collapsible-thinking.cjs"),_=require("../../../../hooks/mutation/use-fork-conversation.cjs");let v=require("react");v=e.__toESM(v,1);let y=require("react/jsx-runtime");function b({event:e,isLastMessage:b,isFromPlanningAgent:x}){let{t:S}=t.useTranslation(`openhands`),{navigate:C}=r.useNavigation(),{conversationId:w}=i.useOptionalConversationId(),T=s.useActiveBackend().backend.kind===`cloud`,{mutate:E,isPending:D}=_.useForkConversation(),O=a.useConversationStore(e=>e.setMessageToSend),k=v.default.useRef(!1),A=m.parseMessageFromEvent(e),{reasoning:j,message:M}=e.source===`agent`?c.splitInlineThink(A):{reasoning:``,message:A},N=[];Array.isArray(e.llm_message.content)&&e.llm_message.content.forEach(e=>{e.type===`image`&&N.push(...e.image_urls)});let P=!T&&w?[{icon:(0,y.jsx)(u.default,{width:15,height:15,"aria-hidden":!0}),onClick:()=>{if(!w||D||k.current)return;k.current=!0;let t=l.default.getCurrentConversation(),n=t?.id===w?t.title:void 0,r=n?`${n} (branch)`:void 0,i=e.source===`user`&&M.length>0;E({sourceConversationId:w,eventId:e.id,...i?{editText:M}:{},...r?{title:r}:{}},{onSuccess:({info:e,excluded:t})=>{C(`/conversations/${e.id}`),t&&window.setTimeout(()=>O(M),0)},onError:e=>o.displayErrorToast(e instanceof Error?e.message:null),onSettled:()=>{k.current=!1}})},tooltip:S(n.I18nKey.CHAT_INTERFACE$BRANCH_FROM_HERE)}]:void 0;return(0,y.jsxs)(y.Fragment,{children:[j&&(0,y.jsx)(g.CollapsibleThinking,{content:j}),(0,y.jsxs)(d.ChatMessage,{type:e.source,message:M,isFromPlanningAgent:x,actions:P,children:[N.length>0&&(0,y.jsx)(f.ImageCarousel,{size:`small`,images:N}),b&&(0,y.jsx)(p.ConversationConfirmationButtons,{})]}),e.source===`agent`&&e.critic_result!=null&&(0,y.jsx)(h.CriticResultDisplay,{criticResult:e.critic_result})]})}exports.UserAssistantEventMessage=b;
1
+ const e=require("../../../../_virtual/_rolldown/runtime.cjs"),t=require("../../../../node_modules/react-i18next/dist/es/useTranslation.cjs"),n=require("../../../../i18n/declaration.cjs"),r=require("../../../../context/navigation-context.cjs"),i=require("../../../../hooks/use-conversation-id.cjs"),a=require("../../../../stores/conversation-store.cjs"),o=require("../../../../utils/custom-toast-handlers.cjs"),s=require("../../../../contexts/active-backend-context.cjs"),c=require("../event-thought-helpers.cjs"),l=require("../../../../api/conversation-service/conversation-service.api.cjs"),u=require("../../../../icons/repo-forked.cjs"),d=require("../../../features/chat/chat-message.cjs"),f=require("../../../features/images/image-carousel.cjs"),p=require("../event-content-helpers/parse-message-from-event.cjs"),m=require("./critic-result-display.cjs"),h=require("./collapsible-thinking.cjs"),g=require("../../../../hooks/mutation/use-fork-conversation.cjs");let _=require("react");_=e.__toESM(_,1);let v=require("react/jsx-runtime");function y({event:e,isFromPlanningAgent:y}){let{t:b}=t.useTranslation(`openhands`),{navigate:x}=r.useNavigation(),{conversationId:S}=i.useOptionalConversationId(),C=s.useActiveBackend().backend.kind===`cloud`,{mutate:w,isPending:T}=g.useForkConversation(),E=a.useConversationStore(e=>e.setMessageToSend),D=_.default.useRef(!1),O=p.parseMessageFromEvent(e),{reasoning:k,message:A}=e.source===`agent`?c.splitInlineThink(O):{reasoning:``,message:O},j=[];Array.isArray(e.llm_message.content)&&e.llm_message.content.forEach(e=>{e.type===`image`&&j.push(...e.image_urls)});let M=!C&&S?[{icon:(0,v.jsx)(u.default,{width:15,height:15,"aria-hidden":!0}),onClick:()=>{if(!S||T||D.current)return;D.current=!0;let t=l.default.getCurrentConversation(),n=t?.id===S?t.title:void 0,r=n?`${n} (branch)`:void 0,i=e.source===`user`&&A.length>0;w({sourceConversationId:S,eventId:e.id,...i?{editText:A}:{},...r?{title:r}:{}},{onSuccess:({info:e,excluded:t})=>{x(`/conversations/${e.id}`),t&&window.setTimeout(()=>E(A),0)},onError:e=>o.displayErrorToast(e instanceof Error?e.message:null),onSettled:()=>{D.current=!1}})},tooltip:b(n.I18nKey.CHAT_INTERFACE$BRANCH_FROM_HERE)}]:void 0;return(0,v.jsxs)(v.Fragment,{children:[k&&(0,v.jsx)(h.CollapsibleThinking,{content:k}),(0,v.jsx)(d.ChatMessage,{type:e.source,message:A,isFromPlanningAgent:y,actions:M,timestamp:e.timestamp,children:j.length>0&&(0,v.jsx)(f.ImageCarousel,{size:`small`,images:j})}),e.source===`agent`&&e.critic_result!=null&&(0,v.jsx)(m.CriticResultDisplay,{criticResult:e.critic_result})]})}exports.UserAssistantEventMessage=y;
2
2
  //# sourceMappingURL=user-assistant-event-message.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"user-assistant-event-message.cjs","names":[],"sources":["../../../../../src/components/conversation-events/chat/event-message-components/user-assistant-event-message.tsx"],"sourcesContent":["import React from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { useNavigation } from \"#/context/navigation-context\";\nimport { MessageEvent } from \"#/types/agent-server/core\";\nimport { ChatMessage } from \"../../../features/chat/chat-message\";\nimport { ImageCarousel } from \"../../../features/images/image-carousel\";\nimport { ConversationConfirmationButtons } from \"#/components/shared/buttons/conversation-confirmation-buttons\";\nimport { parseMessageFromEvent } from \"../event-content-helpers/parse-message-from-event\";\nimport { CriticResultDisplay } from \"./critic-result-display\";\nimport { CollapsibleThinking } from \"./collapsible-thinking\";\nimport { splitInlineThink } from \"../event-thought-helpers\";\nimport RepoForkedIcon from \"#/icons/repo-forked.svg?react\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport { useOptionalConversationId } from \"#/hooks/use-conversation-id\";\nimport { useActiveBackend } from \"#/contexts/active-backend-context\";\nimport { useForkConversation } from \"#/hooks/mutation/use-fork-conversation\";\nimport { useConversationStore } from \"#/stores/conversation-store\";\nimport ConversationService from \"#/api/conversation-service/conversation-service.api\";\nimport { displayErrorToast } from \"#/utils/custom-toast-handlers\";\n\ninterface UserAssistantEventMessageProps {\n event: MessageEvent;\n isLastMessage: boolean;\n isFromPlanningAgent: boolean;\n}\n\nexport function UserAssistantEventMessage({\n event,\n isLastMessage,\n isFromPlanningAgent,\n}: UserAssistantEventMessageProps) {\n const { t } = useTranslation(\"openhands\");\n const { navigate } = useNavigation();\n const { conversationId } = useOptionalConversationId();\n const isCloud = useActiveBackend().backend.kind === \"cloud\";\n const { mutate: forkConversation, isPending: isForking } =\n useForkConversation();\n const setMessageToSend = useConversationStore(\n (state) => state.setMessageToSend,\n );\n // Blocks a same-tick double-click, before `isForking` flips.\n const forkInFlightRef = React.useRef(false);\n\n const parsed = parseMessageFromEvent(event);\n // Route an inline <think> block (e.g. from a streamed reply) to the thinking\n // section so reloaded conversations match the live rendering.\n const { reasoning, message } =\n event.source === \"agent\"\n ? splitInlineThink(parsed)\n : { reasoning: \"\", message: parsed };\n\n const imageUrls: string[] = [];\n if (Array.isArray(event.llm_message.content)) {\n event.llm_message.content.forEach((content) => {\n if (content.type === \"image\") {\n imageUrls.push(...content.image_urls);\n }\n });\n }\n\n // \"Branch from here\": a user message is \"edit message\" (excludes the message,\n // restores its text to the composer); an assistant message branches\n // inclusively. Local agent-server only, inside a conversation.\n const canBranch = !isCloud && !!conversationId;\n const handleBranch = () => {\n if (!conversationId || isForking || forkInFlightRef.current) return;\n forkInFlightRef.current = true;\n\n // Distinct title so the fork doesn't read identically to its source.\n // getCurrentConversation() is a shared singleton — match the id in case it\n // still holds the previously-viewed conversation.\n const source = ConversationService.getCurrentConversation();\n const sourceTitle =\n source?.id === conversationId ? source.title : undefined;\n const branchTitle = sourceTitle ? `${sourceTitle} (branch)` : undefined;\n\n // Only edit when there's text: an image-only message parses to \"\", so\n // branch it inclusively rather than dropping the image.\n const isEdit = event.source === \"user\" && message.length > 0;\n\n forkConversation(\n {\n sourceConversationId: conversationId,\n eventId: event.id,\n ...(isEdit ? { editText: message } : {}),\n ...(branchTitle ? { title: branchTitle } : {}),\n },\n {\n onSuccess: ({ info, excluded }) => {\n navigate(`/conversations/${info.id}`);\n // Prefill only when excluded (else the send duplicates it). Deferred\n // so the new conversation's composer receives it (as useLaunchSkillInChat).\n if (excluded) {\n window.setTimeout(() => setMessageToSend(message), 0);\n }\n },\n onError: (error) =>\n displayErrorToast(error instanceof Error ? error.message : null),\n onSettled: () => {\n forkInFlightRef.current = false;\n },\n },\n );\n };\n const actions = canBranch\n ? [\n {\n icon: <RepoForkedIcon width={15} height={15} aria-hidden />,\n onClick: handleBranch,\n tooltip: t(I18nKey.CHAT_INTERFACE$BRANCH_FROM_HERE),\n },\n ]\n : undefined;\n\n return (\n <>\n {reasoning && <CollapsibleThinking content={reasoning} />}\n <ChatMessage\n type={event.source}\n message={message}\n isFromPlanningAgent={isFromPlanningAgent}\n actions={actions}\n >\n {imageUrls.length > 0 && (\n <ImageCarousel size=\"small\" images={imageUrls} />\n )}\n {isLastMessage && <ConversationConfirmationButtons />}\n </ChatMessage>\n {event.source === \"agent\" && event.critic_result != null && (\n <CriticResultDisplay criticResult={event.critic_result} />\n )}\n </>\n );\n}\n"],"mappings":"ylCA0BA,SAAgB,EAA0B,CACxC,QACA,gBACA,uBACiC,CACjC,GAAM,CAAE,KAAM,EAAA,eAAe,WAAW,EAClC,CAAE,YAAa,EAAA,cAAc,EAC7B,CAAE,kBAAmB,EAAA,0BAA0B,EAC/C,EAAU,EAAA,iBAAiB,EAAE,QAAQ,OAAS,QAC9C,CAAE,OAAQ,EAAkB,UAAW,GAC3C,EAAA,oBAAoB,EAChB,EAAmB,EAAA,qBACtB,GAAU,EAAM,gBACnB,EAEM,EAAkB,EAAA,QAAM,OAAO,EAAK,EAEpC,EAAS,EAAA,sBAAsB,CAAK,EAGpC,CAAE,YAAW,WACjB,EAAM,SAAW,QACb,EAAA,iBAAiB,CAAM,EACvB,CAAE,UAAW,GAAI,QAAS,CAAO,EAEjC,EAAsB,CAAC,EACzB,MAAM,QAAQ,EAAM,YAAY,OAAO,GACzC,EAAM,YAAY,QAAQ,QAAS,GAAY,CACzC,EAAQ,OAAS,SACnB,EAAU,KAAK,GAAG,EAAQ,UAAU,CAExC,CAAC,EA+CH,IAAM,EAzCY,CAAC,GAAa,EA0C5B,CACE,CACE,MAAM,EAAA,EAAA,KAAC,EAAA,QAAD,CAAgB,MAAO,GAAI,OAAQ,GAAI,cAAA,EAAa,CAAA,EAC1D,YA5CmB,CACzB,GAAI,CAAC,GAAkB,GAAa,EAAgB,QAAS,OAC7D,EAAgB,QAAU,GAK1B,IAAM,EAAS,EAAA,QAAoB,uBAAuB,EACpD,EACJ,GAAQ,KAAO,EAAiB,EAAO,MAAQ,IAAA,GAC3C,EAAc,EAAc,GAAG,EAAY,WAAa,IAAA,GAIxD,EAAS,EAAM,SAAW,QAAU,EAAQ,OAAS,EAE3D,EACE,CACE,qBAAsB,EACtB,QAAS,EAAM,GACf,GAAI,EAAS,CAAE,SAAU,CAAQ,EAAI,CAAC,EACtC,GAAI,EAAc,CAAE,MAAO,CAAY,EAAI,CAAC,CAC9C,EACA,CACE,WAAY,CAAE,OAAM,cAAe,CACjC,EAAS,kBAAkB,EAAK,IAAI,EAGhC,GACF,OAAO,eAAiB,EAAiB,CAAO,EAAG,CAAC,CAExD,EACA,QAAU,GACR,EAAA,kBAAkB,aAAiB,MAAQ,EAAM,QAAU,IAAI,EACjE,cAAiB,CACf,EAAgB,QAAU,EAC5B,CACF,CACF,CACF,EAMQ,QAAS,EAAE,EAAA,QAAQ,+BAA+B,CACpD,CACF,EACA,IAAA,GAEJ,OACE,EAAA,EAAA,MAAA,EAAA,SAAA,CAAA,SAAA,CACG,IAAa,EAAA,EAAA,KAAC,EAAA,oBAAD,CAAqB,QAAS,CAAY,CAAA,GACxD,EAAA,EAAA,MAAC,EAAA,YAAD,CACE,KAAM,EAAM,OACH,UACY,sBACZ,mBAJX,CAMG,EAAU,OAAS,IAClB,EAAA,EAAA,KAAC,EAAA,cAAD,CAAe,KAAK,QAAQ,OAAQ,CAAY,CAAA,EAEjD,IAAiB,EAAA,EAAA,KAAC,EAAA,gCAAD,CAAkC,CAAA,CACzC,IACZ,EAAM,SAAW,SAAW,EAAM,eAAiB,OAClD,EAAA,EAAA,KAAC,EAAA,oBAAD,CAAqB,aAAc,EAAM,aAAgB,CAAA,CAE3D,CAAA,CAAA,CAEN"}
1
+ {"version":3,"file":"user-assistant-event-message.cjs","names":[],"sources":["../../../../../src/components/conversation-events/chat/event-message-components/user-assistant-event-message.tsx"],"sourcesContent":["import React from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { useNavigation } from \"#/context/navigation-context\";\nimport { MessageEvent } from \"#/types/agent-server/core\";\nimport { ChatMessage } from \"../../../features/chat/chat-message\";\nimport { ImageCarousel } from \"../../../features/images/image-carousel\";\nimport { parseMessageFromEvent } from \"../event-content-helpers/parse-message-from-event\";\nimport { CriticResultDisplay } from \"./critic-result-display\";\nimport { CollapsibleThinking } from \"./collapsible-thinking\";\nimport { splitInlineThink } from \"../event-thought-helpers\";\nimport RepoForkedIcon from \"#/icons/repo-forked.svg?react\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport { useOptionalConversationId } from \"#/hooks/use-conversation-id\";\nimport { useActiveBackend } from \"#/contexts/active-backend-context\";\nimport { useForkConversation } from \"#/hooks/mutation/use-fork-conversation\";\nimport { useConversationStore } from \"#/stores/conversation-store\";\nimport ConversationService from \"#/api/conversation-service/conversation-service.api\";\nimport { displayErrorToast } from \"#/utils/custom-toast-handlers\";\n\ninterface UserAssistantEventMessageProps {\n event: MessageEvent;\n isLastMessage: boolean;\n isFromPlanningAgent: boolean;\n}\n\nexport function UserAssistantEventMessage({\n event,\n isFromPlanningAgent,\n}: UserAssistantEventMessageProps) {\n const { t } = useTranslation(\"openhands\");\n const { navigate } = useNavigation();\n const { conversationId } = useOptionalConversationId();\n const isCloud = useActiveBackend().backend.kind === \"cloud\";\n const { mutate: forkConversation, isPending: isForking } =\n useForkConversation();\n const setMessageToSend = useConversationStore(\n (state) => state.setMessageToSend,\n );\n // Blocks a same-tick double-click, before `isForking` flips.\n const forkInFlightRef = React.useRef(false);\n\n const parsed = parseMessageFromEvent(event);\n // Route an inline <think> block (e.g. from a streamed reply) to the thinking\n // section so reloaded conversations match the live rendering.\n const { reasoning, message } =\n event.source === \"agent\"\n ? splitInlineThink(parsed)\n : { reasoning: \"\", message: parsed };\n\n const imageUrls: string[] = [];\n if (Array.isArray(event.llm_message.content)) {\n event.llm_message.content.forEach((content) => {\n if (content.type === \"image\") {\n imageUrls.push(...content.image_urls);\n }\n });\n }\n\n // \"Branch from here\": a user message is \"edit message\" (excludes the message,\n // restores its text to the composer); an assistant message branches\n // inclusively. Local agent-server only, inside a conversation.\n const canBranch = !isCloud && !!conversationId;\n const handleBranch = () => {\n if (!conversationId || isForking || forkInFlightRef.current) return;\n forkInFlightRef.current = true;\n\n // Distinct title so the fork doesn't read identically to its source.\n // getCurrentConversation() is a shared singleton — match the id in case it\n // still holds the previously-viewed conversation.\n const source = ConversationService.getCurrentConversation();\n const sourceTitle =\n source?.id === conversationId ? source.title : undefined;\n const branchTitle = sourceTitle ? `${sourceTitle} (branch)` : undefined;\n\n // Only edit when there's text: an image-only message parses to \"\", so\n // branch it inclusively rather than dropping the image.\n const isEdit = event.source === \"user\" && message.length > 0;\n\n forkConversation(\n {\n sourceConversationId: conversationId,\n eventId: event.id,\n ...(isEdit ? { editText: message } : {}),\n ...(branchTitle ? { title: branchTitle } : {}),\n },\n {\n onSuccess: ({ info, excluded }) => {\n navigate(`/conversations/${info.id}`);\n // Prefill only when excluded (else the send duplicates it). Deferred\n // so the new conversation's composer receives it (as useLaunchSkillInChat).\n if (excluded) {\n window.setTimeout(() => setMessageToSend(message), 0);\n }\n },\n onError: (error) =>\n displayErrorToast(error instanceof Error ? error.message : null),\n onSettled: () => {\n forkInFlightRef.current = false;\n },\n },\n );\n };\n const actions = canBranch\n ? [\n {\n icon: <RepoForkedIcon width={15} height={15} aria-hidden />,\n onClick: handleBranch,\n tooltip: t(I18nKey.CHAT_INTERFACE$BRANCH_FROM_HERE),\n },\n ]\n : undefined;\n\n return (\n <>\n {reasoning && <CollapsibleThinking content={reasoning} />}\n <ChatMessage\n type={event.source}\n message={message}\n isFromPlanningAgent={isFromPlanningAgent}\n actions={actions}\n timestamp={event.timestamp}\n >\n {imageUrls.length > 0 && (\n <ImageCarousel size=\"small\" images={imageUrls} />\n )}\n </ChatMessage>\n {event.source === \"agent\" && event.critic_result != null && (\n <CriticResultDisplay criticResult={event.critic_result} />\n )}\n </>\n );\n}\n"],"mappings":"8gCAyBA,SAAgB,EAA0B,CACxC,QACA,uBACiC,CACjC,GAAM,CAAE,KAAM,EAAA,eAAe,WAAW,EAClC,CAAE,YAAa,EAAA,cAAc,EAC7B,CAAE,kBAAmB,EAAA,0BAA0B,EAC/C,EAAU,EAAA,iBAAiB,EAAE,QAAQ,OAAS,QAC9C,CAAE,OAAQ,EAAkB,UAAW,GAC3C,EAAA,oBAAoB,EAChB,EAAmB,EAAA,qBACtB,GAAU,EAAM,gBACnB,EAEM,EAAkB,EAAA,QAAM,OAAO,EAAK,EAEpC,EAAS,EAAA,sBAAsB,CAAK,EAGpC,CAAE,YAAW,WACjB,EAAM,SAAW,QACb,EAAA,iBAAiB,CAAM,EACvB,CAAE,UAAW,GAAI,QAAS,CAAO,EAEjC,EAAsB,CAAC,EACzB,MAAM,QAAQ,EAAM,YAAY,OAAO,GACzC,EAAM,YAAY,QAAQ,QAAS,GAAY,CACzC,EAAQ,OAAS,SACnB,EAAU,KAAK,GAAG,EAAQ,UAAU,CAExC,CAAC,EA+CH,IAAM,EAzCY,CAAC,GAAa,EA0C5B,CACE,CACE,MAAM,EAAA,EAAA,KAAC,EAAA,QAAD,CAAgB,MAAO,GAAI,OAAQ,GAAI,cAAA,EAAa,CAAA,EAC1D,YA5CmB,CACzB,GAAI,CAAC,GAAkB,GAAa,EAAgB,QAAS,OAC7D,EAAgB,QAAU,GAK1B,IAAM,EAAS,EAAA,QAAoB,uBAAuB,EACpD,EACJ,GAAQ,KAAO,EAAiB,EAAO,MAAQ,IAAA,GAC3C,EAAc,EAAc,GAAG,EAAY,WAAa,IAAA,GAIxD,EAAS,EAAM,SAAW,QAAU,EAAQ,OAAS,EAE3D,EACE,CACE,qBAAsB,EACtB,QAAS,EAAM,GACf,GAAI,EAAS,CAAE,SAAU,CAAQ,EAAI,CAAC,EACtC,GAAI,EAAc,CAAE,MAAO,CAAY,EAAI,CAAC,CAC9C,EACA,CACE,WAAY,CAAE,OAAM,cAAe,CACjC,EAAS,kBAAkB,EAAK,IAAI,EAGhC,GACF,OAAO,eAAiB,EAAiB,CAAO,EAAG,CAAC,CAExD,EACA,QAAU,GACR,EAAA,kBAAkB,aAAiB,MAAQ,EAAM,QAAU,IAAI,EACjE,cAAiB,CACf,EAAgB,QAAU,EAC5B,CACF,CACF,CACF,EAMQ,QAAS,EAAE,EAAA,QAAQ,+BAA+B,CACpD,CACF,EACA,IAAA,GAEJ,OACE,EAAA,EAAA,MAAA,EAAA,SAAA,CAAA,SAAA,CACG,IAAa,EAAA,EAAA,KAAC,EAAA,oBAAD,CAAqB,QAAS,CAAY,CAAA,GACxD,EAAA,EAAA,KAAC,EAAA,YAAD,CACE,KAAM,EAAM,OACH,UACY,sBACZ,UACT,UAAW,EAAM,mBAEhB,EAAU,OAAS,IAClB,EAAA,EAAA,KAAC,EAAA,cAAD,CAAe,KAAK,QAAQ,OAAQ,CAAY,CAAA,CAEvC,CAAA,EACZ,EAAM,SAAW,SAAW,EAAM,eAAiB,OAClD,EAAA,EAAA,KAAC,EAAA,oBAAD,CAAqB,aAAc,EAAM,aAAgB,CAAA,CAE3D,CAAA,CAAA,CAEN"}
@@ -5,5 +5,5 @@ interface UserAssistantEventMessageProps {
5
5
  isLastMessage: boolean;
6
6
  isFromPlanningAgent: boolean;
7
7
  }
8
- export declare function UserAssistantEventMessage({ event, isLastMessage, isFromPlanningAgent, }: UserAssistantEventMessageProps): React.JSX.Element;
8
+ export declare function UserAssistantEventMessage({ event, isFromPlanningAgent, }: UserAssistantEventMessageProps): React.JSX.Element;
9
9
  export {};
@@ -10,65 +10,65 @@ import c from "../../../../api/conversation-service/conversation-service.api.js"
10
10
  import l from "../../../../icons/repo-forked.js";
11
11
  import { ChatMessage as u } from "../../../features/chat/chat-message.js";
12
12
  import { ImageCarousel as d } from "../../../features/images/image-carousel.js";
13
- import { ConversationConfirmationButtons as f } from "../../../shared/buttons/conversation-confirmation-buttons.js";
14
- import { parseMessageFromEvent as p } from "../event-content-helpers/parse-message-from-event.js";
15
- import { CriticResultDisplay as m } from "./critic-result-display.js";
16
- import { CollapsibleThinking as h } from "./collapsible-thinking.js";
17
- import { useForkConversation as g } from "../../../../hooks/mutation/use-fork-conversation.js";
18
- import _ from "react";
19
- import { Fragment as v, jsx as y, jsxs as b } from "react/jsx-runtime";
13
+ import { parseMessageFromEvent as f } from "../event-content-helpers/parse-message-from-event.js";
14
+ import { CriticResultDisplay as p } from "./critic-result-display.js";
15
+ import { CollapsibleThinking as m } from "./collapsible-thinking.js";
16
+ import { useForkConversation as h } from "../../../../hooks/mutation/use-fork-conversation.js";
17
+ import g from "react";
18
+ import { Fragment as _, jsx as v, jsxs as y } from "react/jsx-runtime";
20
19
  //#region src/components/conversation-events/chat/event-message-components/user-assistant-event-message.tsx
21
- function x({ event: x, isLastMessage: S, isFromPlanningAgent: C }) {
22
- let { t: w } = e("openhands"), { navigate: T } = n(), { conversationId: E } = r(), D = o().backend.kind === "cloud", { mutate: O, isPending: k } = g(), A = i((e) => e.setMessageToSend), j = _.useRef(!1), M = p(x), { reasoning: N, message: P } = x.source === "agent" ? s(M) : {
20
+ function b({ event: b, isFromPlanningAgent: x }) {
21
+ let { t: S } = e("openhands"), { navigate: C } = n(), { conversationId: w } = r(), T = o().backend.kind === "cloud", { mutate: E, isPending: D } = h(), O = i((e) => e.setMessageToSend), k = g.useRef(!1), A = f(b), { reasoning: j, message: M } = b.source === "agent" ? s(A) : {
23
22
  reasoning: "",
24
- message: M
25
- }, F = [];
26
- Array.isArray(x.llm_message.content) && x.llm_message.content.forEach((e) => {
27
- e.type === "image" && F.push(...e.image_urls);
23
+ message: A
24
+ }, N = [];
25
+ Array.isArray(b.llm_message.content) && b.llm_message.content.forEach((e) => {
26
+ e.type === "image" && N.push(...e.image_urls);
28
27
  });
29
- let I = !D && E ? [{
30
- icon: /* @__PURE__ */ y(l, {
28
+ let P = !T && w ? [{
29
+ icon: /* @__PURE__ */ v(l, {
31
30
  width: 15,
32
31
  height: 15,
33
32
  "aria-hidden": !0
34
33
  }),
35
34
  onClick: () => {
36
- if (!E || k || j.current) return;
37
- j.current = !0;
38
- let e = c.getCurrentConversation(), t = e?.id === E ? e.title : void 0, n = t ? `${t} (branch)` : void 0, r = x.source === "user" && P.length > 0;
39
- O({
40
- sourceConversationId: E,
41
- eventId: x.id,
42
- ...r ? { editText: P } : {},
35
+ if (!w || D || k.current) return;
36
+ k.current = !0;
37
+ let e = c.getCurrentConversation(), t = e?.id === w ? e.title : void 0, n = t ? `${t} (branch)` : void 0, r = b.source === "user" && M.length > 0;
38
+ E({
39
+ sourceConversationId: w,
40
+ eventId: b.id,
41
+ ...r ? { editText: M } : {},
43
42
  ...n ? { title: n } : {}
44
43
  }, {
45
44
  onSuccess: ({ info: e, excluded: t }) => {
46
- T(`/conversations/${e.id}`), t && window.setTimeout(() => A(P), 0);
45
+ C(`/conversations/${e.id}`), t && window.setTimeout(() => O(M), 0);
47
46
  },
48
47
  onError: (e) => a(e instanceof Error ? e.message : null),
49
48
  onSettled: () => {
50
- j.current = !1;
49
+ k.current = !1;
51
50
  }
52
51
  });
53
52
  },
54
- tooltip: w(t.CHAT_INTERFACE$BRANCH_FROM_HERE)
53
+ tooltip: S(t.CHAT_INTERFACE$BRANCH_FROM_HERE)
55
54
  }] : void 0;
56
- return /* @__PURE__ */ b(v, { children: [
57
- N && /* @__PURE__ */ y(h, { content: N }),
58
- /* @__PURE__ */ b(u, {
59
- type: x.source,
60
- message: P,
61
- isFromPlanningAgent: C,
62
- actions: I,
63
- children: [F.length > 0 && /* @__PURE__ */ y(d, {
55
+ return /* @__PURE__ */ y(_, { children: [
56
+ j && /* @__PURE__ */ v(m, { content: j }),
57
+ /* @__PURE__ */ v(u, {
58
+ type: b.source,
59
+ message: M,
60
+ isFromPlanningAgent: x,
61
+ actions: P,
62
+ timestamp: b.timestamp,
63
+ children: N.length > 0 && /* @__PURE__ */ v(d, {
64
64
  size: "small",
65
- images: F
66
- }), S && /* @__PURE__ */ y(f, {})]
65
+ images: N
66
+ })
67
67
  }),
68
- x.source === "agent" && x.critic_result != null && /* @__PURE__ */ y(m, { criticResult: x.critic_result })
68
+ b.source === "agent" && b.critic_result != null && /* @__PURE__ */ v(p, { criticResult: b.critic_result })
69
69
  ] });
70
70
  }
71
71
  //#endregion
72
- export { x as UserAssistantEventMessage };
72
+ export { b as UserAssistantEventMessage };
73
73
 
74
74
  //# sourceMappingURL=user-assistant-event-message.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"user-assistant-event-message.js","names":[],"sources":["../../../../../src/components/conversation-events/chat/event-message-components/user-assistant-event-message.tsx"],"sourcesContent":["import React from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { useNavigation } from \"#/context/navigation-context\";\nimport { MessageEvent } from \"#/types/agent-server/core\";\nimport { ChatMessage } from \"../../../features/chat/chat-message\";\nimport { ImageCarousel } from \"../../../features/images/image-carousel\";\nimport { ConversationConfirmationButtons } from \"#/components/shared/buttons/conversation-confirmation-buttons\";\nimport { parseMessageFromEvent } from \"../event-content-helpers/parse-message-from-event\";\nimport { CriticResultDisplay } from \"./critic-result-display\";\nimport { CollapsibleThinking } from \"./collapsible-thinking\";\nimport { splitInlineThink } from \"../event-thought-helpers\";\nimport RepoForkedIcon from \"#/icons/repo-forked.svg?react\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport { useOptionalConversationId } from \"#/hooks/use-conversation-id\";\nimport { useActiveBackend } from \"#/contexts/active-backend-context\";\nimport { useForkConversation } from \"#/hooks/mutation/use-fork-conversation\";\nimport { useConversationStore } from \"#/stores/conversation-store\";\nimport ConversationService from \"#/api/conversation-service/conversation-service.api\";\nimport { displayErrorToast } from \"#/utils/custom-toast-handlers\";\n\ninterface UserAssistantEventMessageProps {\n event: MessageEvent;\n isLastMessage: boolean;\n isFromPlanningAgent: boolean;\n}\n\nexport function UserAssistantEventMessage({\n event,\n isLastMessage,\n isFromPlanningAgent,\n}: UserAssistantEventMessageProps) {\n const { t } = useTranslation(\"openhands\");\n const { navigate } = useNavigation();\n const { conversationId } = useOptionalConversationId();\n const isCloud = useActiveBackend().backend.kind === \"cloud\";\n const { mutate: forkConversation, isPending: isForking } =\n useForkConversation();\n const setMessageToSend = useConversationStore(\n (state) => state.setMessageToSend,\n );\n // Blocks a same-tick double-click, before `isForking` flips.\n const forkInFlightRef = React.useRef(false);\n\n const parsed = parseMessageFromEvent(event);\n // Route an inline <think> block (e.g. from a streamed reply) to the thinking\n // section so reloaded conversations match the live rendering.\n const { reasoning, message } =\n event.source === \"agent\"\n ? splitInlineThink(parsed)\n : { reasoning: \"\", message: parsed };\n\n const imageUrls: string[] = [];\n if (Array.isArray(event.llm_message.content)) {\n event.llm_message.content.forEach((content) => {\n if (content.type === \"image\") {\n imageUrls.push(...content.image_urls);\n }\n });\n }\n\n // \"Branch from here\": a user message is \"edit message\" (excludes the message,\n // restores its text to the composer); an assistant message branches\n // inclusively. Local agent-server only, inside a conversation.\n const canBranch = !isCloud && !!conversationId;\n const handleBranch = () => {\n if (!conversationId || isForking || forkInFlightRef.current) return;\n forkInFlightRef.current = true;\n\n // Distinct title so the fork doesn't read identically to its source.\n // getCurrentConversation() is a shared singleton — match the id in case it\n // still holds the previously-viewed conversation.\n const source = ConversationService.getCurrentConversation();\n const sourceTitle =\n source?.id === conversationId ? source.title : undefined;\n const branchTitle = sourceTitle ? `${sourceTitle} (branch)` : undefined;\n\n // Only edit when there's text: an image-only message parses to \"\", so\n // branch it inclusively rather than dropping the image.\n const isEdit = event.source === \"user\" && message.length > 0;\n\n forkConversation(\n {\n sourceConversationId: conversationId,\n eventId: event.id,\n ...(isEdit ? { editText: message } : {}),\n ...(branchTitle ? { title: branchTitle } : {}),\n },\n {\n onSuccess: ({ info, excluded }) => {\n navigate(`/conversations/${info.id}`);\n // Prefill only when excluded (else the send duplicates it). Deferred\n // so the new conversation's composer receives it (as useLaunchSkillInChat).\n if (excluded) {\n window.setTimeout(() => setMessageToSend(message), 0);\n }\n },\n onError: (error) =>\n displayErrorToast(error instanceof Error ? error.message : null),\n onSettled: () => {\n forkInFlightRef.current = false;\n },\n },\n );\n };\n const actions = canBranch\n ? [\n {\n icon: <RepoForkedIcon width={15} height={15} aria-hidden />,\n onClick: handleBranch,\n tooltip: t(I18nKey.CHAT_INTERFACE$BRANCH_FROM_HERE),\n },\n ]\n : undefined;\n\n return (\n <>\n {reasoning && <CollapsibleThinking content={reasoning} />}\n <ChatMessage\n type={event.source}\n message={message}\n isFromPlanningAgent={isFromPlanningAgent}\n actions={actions}\n >\n {imageUrls.length > 0 && (\n <ImageCarousel size=\"small\" images={imageUrls} />\n )}\n {isLastMessage && <ConversationConfirmationButtons />}\n </ChatMessage>\n {event.source === \"agent\" && event.critic_result != null && (\n <CriticResultDisplay criticResult={event.critic_result} />\n )}\n </>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AA0BA,SAAgB,EAA0B,EACxC,UACA,kBACA,0BACiC;CACjC,IAAM,EAAE,SAAM,EAAe,WAAW,GAClC,EAAE,gBAAa,EAAc,GAC7B,EAAE,sBAAmB,EAA0B,GAC/C,IAAU,EAAiB,EAAE,QAAQ,SAAS,SAC9C,EAAE,QAAQ,GAAkB,WAAW,MAC3C,EAAoB,GAChB,IAAmB,GACtB,MAAU,EAAM,gBACnB,GAEM,IAAkB,EAAM,OAAO,EAAK,GAEpC,IAAS,EAAsB,CAAK,GAGpC,EAAE,cAAW,eACjB,EAAM,WAAW,UACb,EAAiB,CAAM,IACvB;EAAE,WAAW;EAAI,SAAS;CAAO,GAEjC,IAAsB,CAAC;CAC7B,AAAI,MAAM,QAAQ,EAAM,YAAY,OAAO,KACzC,EAAM,YAAY,QAAQ,SAAS,MAAY;EAC7C,AAAI,EAAQ,SAAS,WACnB,EAAU,KAAK,GAAG,EAAQ,UAAU;CAExC,CAAC;CA+CH,IAAM,IAzCY,CAAC,KAAa,IA0C5B,CACE;EACE,MAAM,kBAAC,GAAD;GAAgB,OAAO;GAAI,QAAQ;GAAI,eAAA;EAAa,CAAA;EAC1D,eA5CmB;GACzB,IAAI,CAAC,KAAkB,KAAa,EAAgB,SAAS;GAC7D,EAAgB,UAAU;GAK1B,IAAM,IAAS,EAAoB,uBAAuB,GACpD,IACJ,GAAQ,OAAO,IAAiB,EAAO,QAAQ,KAAA,GAC3C,IAAc,IAAc,GAAG,EAAY,aAAa,KAAA,GAIxD,IAAS,EAAM,WAAW,UAAU,EAAQ,SAAS;GAE3D,EACE;IACE,sBAAsB;IACtB,SAAS,EAAM;IACf,GAAI,IAAS,EAAE,UAAU,EAAQ,IAAI,CAAC;IACtC,GAAI,IAAc,EAAE,OAAO,EAAY,IAAI,CAAC;GAC9C,GACA;IACE,YAAY,EAAE,SAAM,kBAAe;KAIjC,AAHA,EAAS,kBAAkB,EAAK,IAAI,GAGhC,KACF,OAAO,iBAAiB,EAAiB,CAAO,GAAG,CAAC;IAExD;IACA,UAAU,MACR,EAAkB,aAAiB,QAAQ,EAAM,UAAU,IAAI;IACjE,iBAAiB;KACf,EAAgB,UAAU;IAC5B;GACF,CACF;EACF;EAMQ,SAAS,EAAE,EAAQ,+BAA+B;CACpD,CACF,IACA,KAAA;CAEJ,OACE,kBAAA,GAAA,EAAA,UAAA;EACG,KAAa,kBAAC,GAAD,EAAqB,SAAS,EAAY,CAAA;EACxD,kBAAC,GAAD;GACE,MAAM,EAAM;GACH;GACY;GACZ;aAJX,CAMG,EAAU,SAAS,KAClB,kBAAC,GAAD;IAAe,MAAK;IAAQ,QAAQ;GAAY,CAAA,GAEjD,KAAiB,kBAAC,GAAD,CAAkC,CAAA,CACzC;;EACZ,EAAM,WAAW,WAAW,EAAM,iBAAiB,QAClD,kBAAC,GAAD,EAAqB,cAAc,EAAM,cAAgB,CAAA;CAE3D,EAAA,CAAA;AAEN"}
1
+ {"version":3,"file":"user-assistant-event-message.js","names":[],"sources":["../../../../../src/components/conversation-events/chat/event-message-components/user-assistant-event-message.tsx"],"sourcesContent":["import React from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { useNavigation } from \"#/context/navigation-context\";\nimport { MessageEvent } from \"#/types/agent-server/core\";\nimport { ChatMessage } from \"../../../features/chat/chat-message\";\nimport { ImageCarousel } from \"../../../features/images/image-carousel\";\nimport { parseMessageFromEvent } from \"../event-content-helpers/parse-message-from-event\";\nimport { CriticResultDisplay } from \"./critic-result-display\";\nimport { CollapsibleThinking } from \"./collapsible-thinking\";\nimport { splitInlineThink } from \"../event-thought-helpers\";\nimport RepoForkedIcon from \"#/icons/repo-forked.svg?react\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport { useOptionalConversationId } from \"#/hooks/use-conversation-id\";\nimport { useActiveBackend } from \"#/contexts/active-backend-context\";\nimport { useForkConversation } from \"#/hooks/mutation/use-fork-conversation\";\nimport { useConversationStore } from \"#/stores/conversation-store\";\nimport ConversationService from \"#/api/conversation-service/conversation-service.api\";\nimport { displayErrorToast } from \"#/utils/custom-toast-handlers\";\n\ninterface UserAssistantEventMessageProps {\n event: MessageEvent;\n isLastMessage: boolean;\n isFromPlanningAgent: boolean;\n}\n\nexport function UserAssistantEventMessage({\n event,\n isFromPlanningAgent,\n}: UserAssistantEventMessageProps) {\n const { t } = useTranslation(\"openhands\");\n const { navigate } = useNavigation();\n const { conversationId } = useOptionalConversationId();\n const isCloud = useActiveBackend().backend.kind === \"cloud\";\n const { mutate: forkConversation, isPending: isForking } =\n useForkConversation();\n const setMessageToSend = useConversationStore(\n (state) => state.setMessageToSend,\n );\n // Blocks a same-tick double-click, before `isForking` flips.\n const forkInFlightRef = React.useRef(false);\n\n const parsed = parseMessageFromEvent(event);\n // Route an inline <think> block (e.g. from a streamed reply) to the thinking\n // section so reloaded conversations match the live rendering.\n const { reasoning, message } =\n event.source === \"agent\"\n ? splitInlineThink(parsed)\n : { reasoning: \"\", message: parsed };\n\n const imageUrls: string[] = [];\n if (Array.isArray(event.llm_message.content)) {\n event.llm_message.content.forEach((content) => {\n if (content.type === \"image\") {\n imageUrls.push(...content.image_urls);\n }\n });\n }\n\n // \"Branch from here\": a user message is \"edit message\" (excludes the message,\n // restores its text to the composer); an assistant message branches\n // inclusively. Local agent-server only, inside a conversation.\n const canBranch = !isCloud && !!conversationId;\n const handleBranch = () => {\n if (!conversationId || isForking || forkInFlightRef.current) return;\n forkInFlightRef.current = true;\n\n // Distinct title so the fork doesn't read identically to its source.\n // getCurrentConversation() is a shared singleton — match the id in case it\n // still holds the previously-viewed conversation.\n const source = ConversationService.getCurrentConversation();\n const sourceTitle =\n source?.id === conversationId ? source.title : undefined;\n const branchTitle = sourceTitle ? `${sourceTitle} (branch)` : undefined;\n\n // Only edit when there's text: an image-only message parses to \"\", so\n // branch it inclusively rather than dropping the image.\n const isEdit = event.source === \"user\" && message.length > 0;\n\n forkConversation(\n {\n sourceConversationId: conversationId,\n eventId: event.id,\n ...(isEdit ? { editText: message } : {}),\n ...(branchTitle ? { title: branchTitle } : {}),\n },\n {\n onSuccess: ({ info, excluded }) => {\n navigate(`/conversations/${info.id}`);\n // Prefill only when excluded (else the send duplicates it). Deferred\n // so the new conversation's composer receives it (as useLaunchSkillInChat).\n if (excluded) {\n window.setTimeout(() => setMessageToSend(message), 0);\n }\n },\n onError: (error) =>\n displayErrorToast(error instanceof Error ? error.message : null),\n onSettled: () => {\n forkInFlightRef.current = false;\n },\n },\n );\n };\n const actions = canBranch\n ? [\n {\n icon: <RepoForkedIcon width={15} height={15} aria-hidden />,\n onClick: handleBranch,\n tooltip: t(I18nKey.CHAT_INTERFACE$BRANCH_FROM_HERE),\n },\n ]\n : undefined;\n\n return (\n <>\n {reasoning && <CollapsibleThinking content={reasoning} />}\n <ChatMessage\n type={event.source}\n message={message}\n isFromPlanningAgent={isFromPlanningAgent}\n actions={actions}\n timestamp={event.timestamp}\n >\n {imageUrls.length > 0 && (\n <ImageCarousel size=\"small\" images={imageUrls} />\n )}\n </ChatMessage>\n {event.source === \"agent\" && event.critic_result != null && (\n <CriticResultDisplay criticResult={event.critic_result} />\n )}\n </>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAyBA,SAAgB,EAA0B,EACxC,UACA,0BACiC;CACjC,IAAM,EAAE,SAAM,EAAe,WAAW,GAClC,EAAE,gBAAa,EAAc,GAC7B,EAAE,sBAAmB,EAA0B,GAC/C,IAAU,EAAiB,EAAE,QAAQ,SAAS,SAC9C,EAAE,QAAQ,GAAkB,WAAW,MAC3C,EAAoB,GAChB,IAAmB,GACtB,MAAU,EAAM,gBACnB,GAEM,IAAkB,EAAM,OAAO,EAAK,GAEpC,IAAS,EAAsB,CAAK,GAGpC,EAAE,cAAW,eACjB,EAAM,WAAW,UACb,EAAiB,CAAM,IACvB;EAAE,WAAW;EAAI,SAAS;CAAO,GAEjC,IAAsB,CAAC;CAC7B,AAAI,MAAM,QAAQ,EAAM,YAAY,OAAO,KACzC,EAAM,YAAY,QAAQ,SAAS,MAAY;EAC7C,AAAI,EAAQ,SAAS,WACnB,EAAU,KAAK,GAAG,EAAQ,UAAU;CAExC,CAAC;CA+CH,IAAM,IAzCY,CAAC,KAAa,IA0C5B,CACE;EACE,MAAM,kBAAC,GAAD;GAAgB,OAAO;GAAI,QAAQ;GAAI,eAAA;EAAa,CAAA;EAC1D,eA5CmB;GACzB,IAAI,CAAC,KAAkB,KAAa,EAAgB,SAAS;GAC7D,EAAgB,UAAU;GAK1B,IAAM,IAAS,EAAoB,uBAAuB,GACpD,IACJ,GAAQ,OAAO,IAAiB,EAAO,QAAQ,KAAA,GAC3C,IAAc,IAAc,GAAG,EAAY,aAAa,KAAA,GAIxD,IAAS,EAAM,WAAW,UAAU,EAAQ,SAAS;GAE3D,EACE;IACE,sBAAsB;IACtB,SAAS,EAAM;IACf,GAAI,IAAS,EAAE,UAAU,EAAQ,IAAI,CAAC;IACtC,GAAI,IAAc,EAAE,OAAO,EAAY,IAAI,CAAC;GAC9C,GACA;IACE,YAAY,EAAE,SAAM,kBAAe;KAIjC,AAHA,EAAS,kBAAkB,EAAK,IAAI,GAGhC,KACF,OAAO,iBAAiB,EAAiB,CAAO,GAAG,CAAC;IAExD;IACA,UAAU,MACR,EAAkB,aAAiB,QAAQ,EAAM,UAAU,IAAI;IACjE,iBAAiB;KACf,EAAgB,UAAU;IAC5B;GACF,CACF;EACF;EAMQ,SAAS,EAAE,EAAQ,+BAA+B;CACpD,CACF,IACA,KAAA;CAEJ,OACE,kBAAA,GAAA,EAAA,UAAA;EACG,KAAa,kBAAC,GAAD,EAAqB,SAAS,EAAY,CAAA;EACxD,kBAAC,GAAD;GACE,MAAM,EAAM;GACH;GACY;GACZ;GACT,WAAW,EAAM;aAEhB,EAAU,SAAS,KAClB,kBAAC,GAAD;IAAe,MAAK;IAAQ,QAAQ;GAAY,CAAA;EAEvC,CAAA;EACZ,EAAM,WAAW,WAAW,EAAM,iBAAiB,QAClD,kBAAC,GAAD,EAAqB,cAAc,EAAM,cAAgB,CAAA;CAE3D,EAAA,CAAA;AAEN"}
@@ -1,4 +1,4 @@
1
- const e=require("../../../_virtual/_rolldown/runtime.cjs"),t=require("../../../types/agent-state.cjs"),n=require("../../../stores/conversation-store.cjs"),r=require("../../../types/agent-server/type-guards.cjs"),i=require("./event-thought-helpers.cjs"),a=require("../../../hooks/use-agent-state.cjs"),o=require("../../features/chat/goal-status-content.cjs"),s=require("../../../hooks/query/use-config.cjs"),c=require("../../features/chat/chat-message.cjs"),l=require("../../features/chat/plan-preview.cjs"),u=require("./event-message-components/error-event-message.cjs"),d=require("./event-message-components/collapsible-thinking.cjs"),f=require("./event-message-components/user-assistant-event-message.cjs"),p=require("./event-content-helpers/create-skill-ready-event.cjs"),m=require("./event-message-components/finish-event-message.cjs"),h=require("./event-message-components/generic-event-message-wrapper.cjs"),g=require("./event-message-components/thought-event-message.cjs"),_=require("../../shared/hook-execution-event-message.cjs");require("./event-message-components/hook-execution-event-message.cjs");const v=require("./hooks/use-plan-preview-events.cjs");let y=require("react");y=e.__toESM(y,1);let b=require("react/jsx-runtime");var x=e=>e.activated_skills||[],S=e=>!e||e.length===0?!1:e.some(e=>e.type===`text`&&e.text.trim().length>0),C=e=>{let t=x(e).length>0,n=S(e.extended_content);return t&&n},w=(e,t,n)=>{try{let r=p.createSkillReadyEvent(e);return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(f.UserAssistantEventMessage,{event:e,isLastMessage:!1,isFromPlanningAgent:t.isFromPlanningAgent}),(0,b.jsx)(h.GenericEventMessageWrapper,{event:r,isLastMessage:n})]})}catch{return(0,b.jsx)(f.UserAssistantEventMessage,{event:e,isLastMessage:n,isFromPlanningAgent:t.isFromPlanningAgent})}};function T({event:e,messages:p,isLastMessage:y,isInLast10Actions:x,planPreviewEventIds:S,suppressThought:T=!1}){let{data:E}=s.useConfig(),{planContent:D}=n.useConversationStore(),{curAgentState:O}=a.useAgentState(),k=O===t.AgentState.RUNNING||O===t.AgentState.LOADING,A=e.isFromPlanningAgent||!1,j={isLastMessage:y,isInLast10Actions:x,config:E,isFromPlanningAgent:A};if(r.isConversationStateUpdateEvent(e)&&r.isGoalConversationStateUpdateEvent(e))return(0,b.jsx)(o.GoalStatusContent,{status:e.value});if(r.isAgentErrorEvent(e))return(0,b.jsx)(u.ErrorEventMessage,{event:e,...j});if(r.isHookExecutionEvent(e))return(0,b.jsx)(_.HookExecutionEventMessage,{event:e});if(r.isACPToolCallEvent(e))return(0,b.jsx)(h.GenericEventMessageWrapper,{event:e,isLastMessage:y});if(r.isStreamingDeltaEvent(e)){let{reasoning:t,message:n}=i.splitInlineThink(e.content??``,{streaming:!0}),r=[e.reasoning_content??``,t].filter(Boolean).join(`
1
+ const e=require("../../../_virtual/_rolldown/runtime.cjs"),t=require("../../../types/agent-state.cjs"),n=require("../../../stores/conversation-store.cjs"),r=require("../../../types/agent-server/type-guards.cjs"),i=require("./event-thought-helpers.cjs"),a=require("../../../hooks/use-agent-state.cjs"),o=require("../../features/chat/goal-status-content.cjs"),s=require("../../../hooks/query/use-config.cjs"),c=require("../../features/chat/chat-message.cjs"),l=require("../../features/chat/plan-preview.cjs"),u=require("./event-message-components/error-event-message.cjs"),d=require("./event-message-components/collapsible-thinking.cjs"),f=require("./event-message-components/user-assistant-event-message.cjs"),p=require("./event-content-helpers/create-skill-ready-event.cjs"),m=require("./event-message-components/finish-event-message.cjs"),h=require("./event-message-components/generic-event-message-wrapper.cjs"),g=require("./event-message-components/thought-event-message.cjs"),_=require("../../shared/hook-execution-event-message.cjs");require("./event-message-components/hook-execution-event-message.cjs");const v=require("./hooks/use-plan-preview-events.cjs");let y=require("react");y=e.__toESM(y,1);let b=require("react/jsx-runtime");var x=e=>e.activated_skills||[],S=e=>!e||e.length===0?!1:e.some(e=>e.type===`text`&&e.text.trim().length>0),C=e=>{let t=x(e).length>0,n=S(e.extended_content);return t&&n},w=(e,t,n)=>{try{let r=p.createSkillReadyEvent(e);return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(f.UserAssistantEventMessage,{event:e,isLastMessage:!1,isFromPlanningAgent:t.isFromPlanningAgent}),(0,b.jsx)(h.GenericEventMessageWrapper,{event:r,isLastMessage:n})]})}catch{return(0,b.jsx)(f.UserAssistantEventMessage,{event:e,isLastMessage:n,isFromPlanningAgent:t.isFromPlanningAgent})}};function T({planContent:e,isLastMessage:n,isMainAgentRunning:r}){let{localPlanningConversationId:i,curPlanningAgentState:o,isPlanningAgentRunning:s}=a.usePlanningAgentState();return(0,b.jsx)(l.PlanPreview,{planContent:e,isStreaming:n&&!!i&&o===t.AgentState.RUNNING,isBuildDisabled:r||s})}function E({event:e,messages:l,isLastMessage:p,isInLast10Actions:y,planPreviewEventIds:x,suppressThought:S=!1}){let{data:E}=s.useConfig(),{planContent:D}=n.useConversationStore(),{curAgentState:O}=a.useAgentState(),k=O===t.AgentState.RUNNING||O===t.AgentState.LOADING,A=e.isFromPlanningAgent||!1,j={isLastMessage:p,isInLast10Actions:y,config:E,isFromPlanningAgent:A};if(r.isConversationStateUpdateEvent(e)&&r.isGoalConversationStateUpdateEvent(e))return(0,b.jsx)(o.GoalStatusContent,{status:e.value});if(r.isAgentErrorEvent(e))return(0,b.jsx)(u.ErrorEventMessage,{event:e,...j});if(r.isHookExecutionEvent(e))return(0,b.jsx)(_.HookExecutionEventMessage,{event:e});if(r.isACPToolCallEvent(e))return(0,b.jsx)(h.GenericEventMessageWrapper,{event:e,isLastMessage:p});if(r.isStreamingDeltaEvent(e)){let{reasoning:t,message:n}=i.splitInlineThink(e.content??``,{streaming:!0}),r=[e.reasoning_content??``,t].filter(Boolean).join(`
2
2
 
3
- `);return(0,b.jsxs)(b.Fragment,{children:[r&&(0,b.jsx)(d.CollapsibleThinking,{content:r}),n&&(0,b.jsx)(c.ChatMessage,{type:`agent`,message:n,isFromPlanningAgent:A})]})}if(r.isActionEvent(e)&&e.action.kind===`FinishAction`)return(0,b.jsx)(m.FinishEventMessage,{event:e,...j});if(r.isActionEvent(e)&&e.action.kind===`ThinkAction`)return(0,b.jsx)(d.CollapsibleThinking,{content:e.action.thought});if(r.isActionEvent(e)){let t=i.getReasoningContent(e);return(0,b.jsxs)(b.Fragment,{children:[t&&(0,b.jsx)(d.CollapsibleThinking,{content:t}),!T&&(0,b.jsx)(g.ThoughtEventMessage,{event:e,isFromPlanningAgent:A}),(0,b.jsx)(h.GenericEventMessageWrapper,{event:e,isLastMessage:y})]})}if(r.isObservationEvent(e)){if(r.isPlanningFileEditorObservationEvent(e))return S&&v.shouldShowPlanPreview(e.id,S)?(0,b.jsx)(l.PlanPreview,{planContent:D,isStreaming:y&&O===t.AgentState.RUNNING,isBuildDisabled:k}):null;let n=p.find(t=>r.isActionEvent(t)&&t.id===e.action_id),a=!T&&n&&r.isActionEvent(n)&&n.action.kind!==`ThinkAction`,o=n&&r.isActionEvent(n)?i.getReasoningContent(n):``;return(0,b.jsxs)(b.Fragment,{children:[o&&(0,b.jsx)(d.CollapsibleThinking,{content:o}),a&&(0,b.jsx)(g.ThoughtEventMessage,{event:n,isFromPlanningAgent:A}),(0,b.jsx)(h.GenericEventMessageWrapper,{event:e,isLastMessage:y,correspondingAction:n&&r.isActionEvent(n)?n:void 0})]})}if(!r.isActionEvent(e)&&!r.isObservationEvent(e)){let t=e;return r.isUserMessageEvent(e)&&C(t)?w(t,j,y):(0,b.jsx)(f.UserAssistantEventMessage,{event:t,...j,isLastMessage:y})}return(0,b.jsx)(h.GenericEventMessageWrapper,{event:e,isLastMessage:y})}exports.EventMessage=T;
3
+ `);return(0,b.jsxs)(b.Fragment,{children:[r&&(0,b.jsx)(d.CollapsibleThinking,{content:r}),n&&(0,b.jsx)(c.ChatMessage,{type:`agent`,message:n,isFromPlanningAgent:A,timestamp:e.timestamp})]})}if(r.isActionEvent(e)&&e.action.kind===`FinishAction`)return(0,b.jsx)(m.FinishEventMessage,{event:e,...j});if(r.isActionEvent(e)&&e.action.kind===`ThinkAction`)return(0,b.jsx)(d.CollapsibleThinking,{content:e.action.thought});if(r.isActionEvent(e)){let t=i.getReasoningContent(e);return(0,b.jsxs)(b.Fragment,{children:[t&&(0,b.jsx)(d.CollapsibleThinking,{content:t}),!S&&(0,b.jsx)(g.ThoughtEventMessage,{event:e,isFromPlanningAgent:A}),(0,b.jsx)(h.GenericEventMessageWrapper,{event:e,isLastMessage:p})]})}if(r.isObservationEvent(e)){if(r.isPlanningFileEditorObservationEvent(e))return x&&v.shouldShowPlanPreview(e.id,x)?(0,b.jsx)(T,{planContent:D,isLastMessage:p,isMainAgentRunning:k}):null;let t=l.find(t=>r.isActionEvent(t)&&t.id===e.action_id),n=!S&&t&&r.isActionEvent(t)&&t.action.kind!==`ThinkAction`,a=t&&r.isActionEvent(t)?i.getReasoningContent(t):``;return(0,b.jsxs)(b.Fragment,{children:[a&&(0,b.jsx)(d.CollapsibleThinking,{content:a}),n&&(0,b.jsx)(g.ThoughtEventMessage,{event:t,isFromPlanningAgent:A}),(0,b.jsx)(h.GenericEventMessageWrapper,{event:e,isLastMessage:p,correspondingAction:t&&r.isActionEvent(t)?t:void 0})]})}if(!r.isActionEvent(e)&&!r.isObservationEvent(e)){let t=e;return r.isUserMessageEvent(e)&&C(t)?w(t,j,p):(0,b.jsx)(f.UserAssistantEventMessage,{event:t,...j,isLastMessage:p})}return(0,b.jsx)(h.GenericEventMessageWrapper,{event:e,isLastMessage:p})}exports.EventMessage=E;
4
4
  //# sourceMappingURL=event-message.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"event-message.cjs","names":[],"sources":["../../../../src/components/conversation-events/chat/event-message.tsx"],"sourcesContent":["import React from \"react\";\nimport {\n OpenHandsEvent,\n MessageEvent,\n ActionEvent,\n} from \"#/types/agent-server/core\";\nimport {\n FinishAction,\n ThinkAction,\n} from \"#/types/agent-server/core/base/action\";\nimport {\n isActionEvent,\n isObservationEvent,\n isAgentErrorEvent,\n isUserMessageEvent,\n isPlanningFileEditorObservationEvent,\n isHookExecutionEvent,\n isACPToolCallEvent,\n isStreamingDeltaEvent,\n isConversationStateUpdateEvent,\n isGoalConversationStateUpdateEvent,\n} from \"#/types/agent-server/type-guards\";\nimport { useConfig } from \"#/hooks/query/use-config\";\nimport { useConversationStore } from \"#/stores/conversation-store\";\nimport { useAgentState } from \"#/hooks/use-agent-state\";\nimport { AgentState } from \"#/types/agent-state\";\nimport { ChatMessage } from \"#/components/features/chat/chat-message\";\nimport { GoalStatusContent } from \"#/components/features/chat/goal-status-content\";\nimport { PlanPreview } from \"../../features/chat/plan-preview\";\nimport { ErrorEventMessage } from \"./event-message-components/error-event-message\";\nimport { UserAssistantEventMessage } from \"./event-message-components/user-assistant-event-message\";\nimport { FinishEventMessage } from \"./event-message-components/finish-event-message\";\nimport { GenericEventMessageWrapper } from \"./event-message-components/generic-event-message-wrapper\";\nimport { ThoughtEventMessage } from \"./event-message-components/thought-event-message\";\nimport { CollapsibleThinking } from \"./event-message-components/collapsible-thinking\";\nimport { HookExecutionEventMessage } from \"./event-message-components/hook-execution-event-message\";\nimport { createSkillReadyEvent } from \"./event-content-helpers/create-skill-ready-event\";\nimport { shouldShowPlanPreview } from \"./hooks/use-plan-preview-events\";\nimport { getReasoningContent, splitInlineThink } from \"./event-thought-helpers\";\n\ninterface EventMessageProps {\n event: OpenHandsEvent & { isFromPlanningAgent?: boolean };\n messages: OpenHandsEvent[];\n isLastMessage: boolean;\n isInLast10Actions: boolean;\n /** Set of event IDs that should render PlanPreview (one per user message phase) */\n planPreviewEventIds?: Set<string>;\n /**\n * When true, do not render the inline `ThoughtEventMessage` for action /\n * observation events. The caller is expected to render the thought\n * separately (e.g. via a hoisted \"thought\" rendered item) so the message\n * pane and the in-group rendering don't double up on the same content.\n * Has no effect on `ThinkAction`, whose thought IS its action body.\n */\n suppressThought?: boolean;\n}\n\nconst getActivatedSkills = (event: MessageEvent): string[] =>\n event.activated_skills || [];\n\n/**\n * Checks if extended content contains valid text content.\n */\nconst hasValidExtendedContent = (\n extendedContent: MessageEvent[\"extended_content\"],\n): boolean => {\n if (!extendedContent || extendedContent.length === 0) {\n return false;\n }\n\n return extendedContent.some(\n (content) => content.type === \"text\" && content.text.trim().length > 0,\n );\n};\n\n/**\n * Determines if a Skill Ready event should be displayed for the given message event.\n */\nconst shouldShowSkillReadyEvent = (messageEvent: MessageEvent): boolean => {\n const activatedSkills = getActivatedSkills(messageEvent);\n const hasActivatedSkills = activatedSkills.length > 0;\n const hasExtendedContent = hasValidExtendedContent(\n messageEvent.extended_content,\n );\n\n return hasActivatedSkills && hasExtendedContent;\n};\n\ninterface CommonProps {\n isLastMessage: boolean;\n isInLast10Actions: boolean;\n config: unknown;\n isFromPlanningAgent: boolean;\n}\n\n/**\n * Renders a user message with its corresponding Skill Ready event.\n */\nconst renderUserMessageWithSkillReady = (\n messageEvent: MessageEvent,\n commonProps: CommonProps,\n isLastMessage: boolean,\n): React.ReactElement => {\n try {\n const skillReadyEvent = createSkillReadyEvent(messageEvent);\n return (\n <>\n <UserAssistantEventMessage\n event={messageEvent}\n isLastMessage={false}\n isFromPlanningAgent={commonProps.isFromPlanningAgent}\n />\n <GenericEventMessageWrapper\n event={skillReadyEvent}\n isLastMessage={isLastMessage}\n />\n </>\n );\n } catch (error) {\n // If skill ready event creation fails, just render the user message\n return (\n <UserAssistantEventMessage\n event={messageEvent}\n isLastMessage={isLastMessage}\n isFromPlanningAgent={commonProps.isFromPlanningAgent}\n />\n );\n }\n};\n\nexport function EventMessage({\n event,\n messages,\n isLastMessage,\n isInLast10Actions,\n planPreviewEventIds,\n suppressThought = false,\n}: EventMessageProps) {\n const { data: config } = useConfig();\n const { planContent } = useConversationStore();\n const { curAgentState } = useAgentState();\n\n // Disable Build button while agent is running (streaming)\n const isAgentRunning =\n curAgentState === AgentState.RUNNING ||\n curAgentState === AgentState.LOADING;\n\n // Read isFromPlanningAgent directly from the event object\n const isFromPlanningAgent = event.isFromPlanningAgent || false;\n\n // Common props for components that need them\n const commonProps = {\n isLastMessage,\n isInLast10Actions,\n config,\n isFromPlanningAgent,\n };\n\n // Finished `/goal` loop: render the terminal status inline so it settles into\n // the conversation. should-render-event.ts only lets the terminal goal event\n // through; the active loop is shown by the separate bottom GoalStatusBanner.\n if (\n isConversationStateUpdateEvent(event) &&\n isGoalConversationStateUpdateEvent(event)\n ) {\n return <GoalStatusContent status={event.value} />;\n }\n\n // Agent error events\n if (isAgentErrorEvent(event)) {\n return <ErrorEventMessage event={event} {...commonProps} />;\n }\n\n // Hook execution events\n if (isHookExecutionEvent(event)) {\n return <HookExecutionEventMessage event={event} />;\n }\n\n // ACP sub-agent tool call events (Claude Code, Codex, Gemini CLI, …)\n // render through the same generic wrapper used for observation events so\n // the card shape, success indicator and markdown rendering all match.\n if (isACPToolCallEvent(event)) {\n return (\n <GenericEventMessageWrapper event={event} isLastMessage={isLastMessage} />\n );\n }\n\n if (isStreamingDeltaEvent(event)) {\n // Route an inline <think> block to the thinking section, not the bubble.\n const { reasoning: inlineThink, message } = splitInlineThink(\n event.content ?? \"\",\n { streaming: true },\n );\n const reasoningContent = [event.reasoning_content ?? \"\", inlineThink]\n .filter(Boolean)\n .join(\"\\n\\n\");\n return (\n <>\n {reasoningContent && <CollapsibleThinking content={reasoningContent} />}\n {message && (\n <ChatMessage\n type=\"agent\"\n message={message}\n isFromPlanningAgent={isFromPlanningAgent}\n />\n )}\n </>\n );\n }\n\n // Finish actions\n if (isActionEvent(event) && event.action.kind === \"FinishAction\") {\n return (\n <FinishEventMessage\n event={event as ActionEvent<FinishAction>}\n {...commonProps}\n />\n );\n }\n\n // ThinkAction - render the thought inside a collapsible section so it\n // doesn't dominate the chat, especially when the thinking language\n // (usually English) differs from the conversation language.\n if (isActionEvent(event) && event.action.kind === \"ThinkAction\") {\n const thinkAction = event as ActionEvent<ThinkAction>;\n return <CollapsibleThinking content={thinkAction.action.thought} />;\n }\n\n // Action events - render thought + action (will be replaced by thought + observation)\n if (isActionEvent(event)) {\n const reasoningContent = getReasoningContent(event);\n return (\n <>\n {reasoningContent && <CollapsibleThinking content={reasoningContent} />}\n {!suppressThought && (\n <ThoughtEventMessage\n event={event}\n isFromPlanningAgent={isFromPlanningAgent}\n />\n )}\n <GenericEventMessageWrapper\n event={event}\n isLastMessage={isLastMessage}\n />\n </>\n );\n }\n\n // Observation events - find the corresponding action and render thought + observation\n if (isObservationEvent(event)) {\n // Handle PlanningFileEditorObservation specially\n if (isPlanningFileEditorObservationEvent(event)) {\n // Only show PlanPreview if this event is marked as the one to display\n // (last PlanningFileEditorObservation in its phase)\n if (\n planPreviewEventIds &&\n shouldShowPlanPreview(event.id, planPreviewEventIds)\n ) {\n // Show shine effect only if this is the last message AND agent is running\n const isStreaming =\n isLastMessage && curAgentState === AgentState.RUNNING;\n return (\n <PlanPreview\n planContent={planContent}\n isStreaming={isStreaming}\n isBuildDisabled={isAgentRunning}\n />\n );\n }\n // Not the designated preview event for this phase - render nothing\n // This prevents duplicate previews within the same phase\n return null;\n }\n\n // Find the action that this observation is responding to\n const correspondingAction = messages.find(\n (msg) => isActionEvent(msg) && msg.id === event.action_id,\n );\n\n // Skip ThoughtEventMessage for ThinkAction (thought IS the action)\n const shouldShowThought =\n !suppressThought &&\n correspondingAction &&\n isActionEvent(correspondingAction) &&\n correspondingAction.action.kind !== \"ThinkAction\";\n\n const reasoningContent =\n correspondingAction && isActionEvent(correspondingAction)\n ? getReasoningContent(correspondingAction)\n : \"\";\n\n return (\n <>\n {reasoningContent && <CollapsibleThinking content={reasoningContent} />}\n {shouldShowThought && (\n <ThoughtEventMessage\n event={correspondingAction}\n isFromPlanningAgent={isFromPlanningAgent}\n />\n )}\n <GenericEventMessageWrapper\n event={event}\n isLastMessage={isLastMessage}\n correspondingAction={\n correspondingAction && isActionEvent(correspondingAction)\n ? correspondingAction\n : undefined\n }\n />\n </>\n );\n }\n\n // Message events (user and assistant messages)\n if (!isActionEvent(event) && !isObservationEvent(event)) {\n const messageEvent = event as MessageEvent;\n\n // Check if this is a user message that should display a Skill Ready event\n if (isUserMessageEvent(event) && shouldShowSkillReadyEvent(messageEvent)) {\n return renderUserMessageWithSkillReady(\n messageEvent,\n commonProps,\n isLastMessage,\n );\n }\n\n // Render normal message event (user or assistant)\n return (\n <UserAssistantEventMessage\n event={messageEvent}\n {...commonProps}\n isLastMessage={isLastMessage}\n />\n );\n }\n\n // Generic fallback for all other events\n return (\n <GenericEventMessageWrapper event={event} isLastMessage={isLastMessage} />\n );\n}\n"],"mappings":"wtCAyDA,IAAM,EAAsB,GAC1B,EAAM,kBAAoB,CAAC,EAKvB,EACJ,GAEI,CAAC,GAAmB,EAAgB,SAAW,EAC1C,GAGF,EAAgB,KACpB,GAAY,EAAQ,OAAS,QAAU,EAAQ,KAAK,KAAK,EAAE,OAAS,CACvE,EAMI,EAA6B,GAAwC,CAEzE,IAAM,EADkB,EAAmB,CAChB,EAAgB,OAAS,EAC9C,EAAqB,EACzB,EAAa,gBACf,EAEA,OAAO,GAAsB,CAC/B,EAYM,GACJ,EACA,EACA,IACuB,CACvB,GAAI,CACF,IAAM,EAAkB,EAAA,sBAAsB,CAAY,EAC1D,OACE,EAAA,EAAA,MAAA,EAAA,SAAA,CAAA,SAAA,EACE,EAAA,EAAA,KAAC,EAAA,0BAAD,CACE,MAAO,EACP,cAAe,GACf,oBAAqB,EAAY,mBAClC,CAAA,GACD,EAAA,EAAA,KAAC,EAAA,2BAAD,CACE,MAAO,EACQ,eAChB,CAAA,CACD,CAAA,CAAA,CAEN,MAAgB,CAEd,OACE,EAAA,EAAA,KAAC,EAAA,0BAAD,CACE,MAAO,EACQ,gBACf,oBAAqB,EAAY,mBAClC,CAAA,CAEL,CACF,EAEA,SAAgB,EAAa,CAC3B,QACA,WACA,gBACA,oBACA,sBACA,kBAAkB,IACE,CACpB,GAAM,CAAE,KAAM,GAAW,EAAA,UAAU,EAC7B,CAAE,eAAgB,EAAA,qBAAqB,EACvC,CAAE,iBAAkB,EAAA,cAAc,EAGlC,EACJ,IAAkB,EAAA,WAAW,SAC7B,IAAkB,EAAA,WAAW,QAGzB,EAAsB,EAAM,qBAAuB,GAGnD,EAAc,CAClB,gBACA,oBACA,SACA,qBACF,EAKA,GACE,EAAA,+BAA+B,CAAK,GACpC,EAAA,mCAAmC,CAAK,EAExC,OAAO,EAAA,EAAA,KAAC,EAAA,kBAAD,CAAmB,OAAQ,EAAM,KAAQ,CAAA,EAIlD,GAAI,EAAA,kBAAkB,CAAK,EACzB,OAAO,EAAA,EAAA,KAAC,EAAA,kBAAD,CAA0B,QAAO,GAAI,CAAc,CAAA,EAI5D,GAAI,EAAA,qBAAqB,CAAK,EAC5B,OAAO,EAAA,EAAA,KAAC,EAAA,0BAAD,CAAkC,OAAQ,CAAA,EAMnD,GAAI,EAAA,mBAAmB,CAAK,EAC1B,OACE,EAAA,EAAA,KAAC,EAAA,2BAAD,CAAmC,QAAsB,eAAgB,CAAA,EAI7E,GAAI,EAAA,sBAAsB,CAAK,EAAG,CAEhC,GAAM,CAAE,UAAW,EAAa,WAAY,EAAA,iBAC1C,EAAM,SAAW,GACjB,CAAE,UAAW,EAAK,CACpB,EACM,EAAmB,CAAC,EAAM,mBAAqB,GAAI,CAAW,EACjE,OAAO,OAAO,EACd,KAAK;;CAAM,EACd,OACE,EAAA,EAAA,MAAA,EAAA,SAAA,CAAA,SAAA,CACG,IAAoB,EAAA,EAAA,KAAC,EAAA,oBAAD,CAAqB,QAAS,CAAmB,CAAA,EACrE,IACC,EAAA,EAAA,KAAC,EAAA,YAAD,CACE,KAAK,QACI,UACY,qBACtB,CAAA,CAEH,CAAA,CAAA,CAEN,CAGA,GAAI,EAAA,cAAc,CAAK,GAAK,EAAM,OAAO,OAAS,eAChD,OACE,EAAA,EAAA,KAAC,EAAA,mBAAD,CACS,QACP,GAAI,CACL,CAAA,EAOL,GAAI,EAAA,cAAc,CAAK,GAAK,EAAM,OAAO,OAAS,cAEhD,OAAO,EAAA,EAAA,KAAC,EAAA,oBAAD,CAAqB,QAAS,EAAY,OAAO,OAAU,CAAA,EAIpE,GAAI,EAAA,cAAc,CAAK,EAAG,CACxB,IAAM,EAAmB,EAAA,oBAAoB,CAAK,EAClD,OACE,EAAA,EAAA,MAAA,EAAA,SAAA,CAAA,SAAA,CACG,IAAoB,EAAA,EAAA,KAAC,EAAA,oBAAD,CAAqB,QAAS,CAAmB,CAAA,EACrE,CAAC,IACA,EAAA,EAAA,KAAC,EAAA,oBAAD,CACS,QACc,qBACtB,CAAA,GAEH,EAAA,EAAA,KAAC,EAAA,2BAAD,CACS,QACQ,eAChB,CAAA,CACD,CAAA,CAAA,CAEN,CAGA,GAAI,EAAA,mBAAmB,CAAK,EAAG,CAE7B,GAAI,EAAA,qCAAqC,CAAK,EAoB5C,OAhBE,GACA,EAAA,sBAAsB,EAAM,GAAI,CAAmB,GAMjD,EAAA,EAAA,KAAC,EAAA,YAAD,CACe,cACA,YAJf,GAAiB,IAAkB,EAAA,WAAW,QAK5C,gBAAiB,CAClB,CAAA,EAKE,KAIT,IAAM,EAAsB,EAAS,KAClC,GAAQ,EAAA,cAAc,CAAG,GAAK,EAAI,KAAO,EAAM,SAClD,EAGM,EACJ,CAAC,GACD,GACA,EAAA,cAAc,CAAmB,GACjC,EAAoB,OAAO,OAAS,cAEhC,EACJ,GAAuB,EAAA,cAAc,CAAmB,EACpD,EAAA,oBAAoB,CAAmB,EACvC,GAEN,OACE,EAAA,EAAA,MAAA,EAAA,SAAA,CAAA,SAAA,CACG,IAAoB,EAAA,EAAA,KAAC,EAAA,oBAAD,CAAqB,QAAS,CAAmB,CAAA,EACrE,IACC,EAAA,EAAA,KAAC,EAAA,oBAAD,CACE,MAAO,EACc,qBACtB,CAAA,GAEH,EAAA,EAAA,KAAC,EAAA,2BAAD,CACS,QACQ,gBACf,oBACE,GAAuB,EAAA,cAAc,CAAmB,EACpD,EACA,IAAA,EAEP,CAAA,CACD,CAAA,CAAA,CAEN,CAGA,GAAI,CAAC,EAAA,cAAc,CAAK,GAAK,CAAC,EAAA,mBAAmB,CAAK,EAAG,CACvD,IAAM,EAAe,EAYrB,OATI,EAAA,mBAAmB,CAAK,GAAK,EAA0B,CAAY,EAC9D,EACL,EACA,EACA,CACF,GAKA,EAAA,EAAA,KAAC,EAAA,0BAAD,CACE,MAAO,EACP,GAAI,EACW,eAChB,CAAA,CAEL,CAGA,OACE,EAAA,EAAA,KAAC,EAAA,2BAAD,CAAmC,QAAsB,eAAgB,CAAA,CAE7E"}
1
+ {"version":3,"file":"event-message.cjs","names":[],"sources":["../../../../src/components/conversation-events/chat/event-message.tsx"],"sourcesContent":["import React from \"react\";\nimport {\n OpenHandsEvent,\n MessageEvent,\n ActionEvent,\n} from \"#/types/agent-server/core\";\nimport {\n FinishAction,\n ThinkAction,\n} from \"#/types/agent-server/core/base/action\";\nimport {\n isActionEvent,\n isObservationEvent,\n isAgentErrorEvent,\n isUserMessageEvent,\n isPlanningFileEditorObservationEvent,\n isHookExecutionEvent,\n isACPToolCallEvent,\n isStreamingDeltaEvent,\n isConversationStateUpdateEvent,\n isGoalConversationStateUpdateEvent,\n} from \"#/types/agent-server/type-guards\";\nimport { useConfig } from \"#/hooks/query/use-config\";\nimport { useConversationStore } from \"#/stores/conversation-store\";\nimport { useAgentState, usePlanningAgentState } from \"#/hooks/use-agent-state\";\nimport { AgentState } from \"#/types/agent-state\";\nimport { ChatMessage } from \"#/components/features/chat/chat-message\";\nimport { GoalStatusContent } from \"#/components/features/chat/goal-status-content\";\nimport { PlanPreview } from \"../../features/chat/plan-preview\";\nimport { ErrorEventMessage } from \"./event-message-components/error-event-message\";\nimport { UserAssistantEventMessage } from \"./event-message-components/user-assistant-event-message\";\nimport { FinishEventMessage } from \"./event-message-components/finish-event-message\";\nimport { GenericEventMessageWrapper } from \"./event-message-components/generic-event-message-wrapper\";\nimport { ThoughtEventMessage } from \"./event-message-components/thought-event-message\";\nimport { CollapsibleThinking } from \"./event-message-components/collapsible-thinking\";\nimport { HookExecutionEventMessage } from \"./event-message-components/hook-execution-event-message\";\nimport { createSkillReadyEvent } from \"./event-content-helpers/create-skill-ready-event\";\nimport { shouldShowPlanPreview } from \"./hooks/use-plan-preview-events\";\nimport { getReasoningContent, splitInlineThink } from \"./event-thought-helpers\";\n\ninterface EventMessageProps {\n event: OpenHandsEvent & { isFromPlanningAgent?: boolean };\n messages: OpenHandsEvent[];\n isLastMessage: boolean;\n isInLast10Actions: boolean;\n /** Set of event IDs that should render PlanPreview (one per user message phase) */\n planPreviewEventIds?: Set<string>;\n /**\n * When true, do not render the inline `ThoughtEventMessage` for action /\n * observation events. The caller is expected to render the thought\n * separately (e.g. via a hoisted \"thought\" rendered item) so the message\n * pane and the in-group rendering don't double up on the same content.\n * Has no effect on `ThinkAction`, whose thought IS its action body.\n */\n suppressThought?: boolean;\n}\n\nconst getActivatedSkills = (event: MessageEvent): string[] =>\n event.activated_skills || [];\n\n/**\n * Checks if extended content contains valid text content.\n */\nconst hasValidExtendedContent = (\n extendedContent: MessageEvent[\"extended_content\"],\n): boolean => {\n if (!extendedContent || extendedContent.length === 0) {\n return false;\n }\n\n return extendedContent.some(\n (content) => content.type === \"text\" && content.text.trim().length > 0,\n );\n};\n\n/**\n * Determines if a Skill Ready event should be displayed for the given message event.\n */\nconst shouldShowSkillReadyEvent = (messageEvent: MessageEvent): boolean => {\n const activatedSkills = getActivatedSkills(messageEvent);\n const hasActivatedSkills = activatedSkills.length > 0;\n const hasExtendedContent = hasValidExtendedContent(\n messageEvent.extended_content,\n );\n\n return hasActivatedSkills && hasExtendedContent;\n};\n\ninterface CommonProps {\n isLastMessage: boolean;\n isInLast10Actions: boolean;\n config: unknown;\n isFromPlanningAgent: boolean;\n}\n\n/**\n * Renders a user message with its corresponding Skill Ready event.\n */\nconst renderUserMessageWithSkillReady = (\n messageEvent: MessageEvent,\n commonProps: CommonProps,\n isLastMessage: boolean,\n): React.ReactElement => {\n try {\n const skillReadyEvent = createSkillReadyEvent(messageEvent);\n return (\n <>\n <UserAssistantEventMessage\n event={messageEvent}\n isLastMessage={false}\n isFromPlanningAgent={commonProps.isFromPlanningAgent}\n />\n <GenericEventMessageWrapper\n event={skillReadyEvent}\n isLastMessage={isLastMessage}\n />\n </>\n );\n } catch (error) {\n // If skill ready event creation fails, just render the user message\n return (\n <UserAssistantEventMessage\n event={messageEvent}\n isLastMessage={isLastMessage}\n isFromPlanningAgent={commonProps.isFromPlanningAgent}\n />\n );\n }\n};\n\n/**\n * Renders the plan preview. Its own component so `usePlanningAgentState()`\n * only subscribes on this rare row, not every message in the conversation.\n */\nfunction PlanningObservationPreview({\n planContent,\n isLastMessage,\n isMainAgentRunning,\n}: {\n planContent: string | null;\n isLastMessage: boolean;\n isMainAgentRunning: boolean;\n}) {\n const {\n localPlanningConversationId,\n curPlanningAgentState,\n isPlanningAgentRunning,\n } = usePlanningAgentState();\n\n // Guard on the id explicitly — useAgentState(undefined) falls back to the\n // route conversation, which could be mistaken for the planner's activity.\n const isStreaming =\n isLastMessage &&\n !!localPlanningConversationId &&\n curPlanningAgentState === AgentState.RUNNING;\n\n return (\n <PlanPreview\n planContent={planContent}\n isStreaming={isStreaming}\n isBuildDisabled={isMainAgentRunning || isPlanningAgentRunning}\n />\n );\n}\n\nexport function EventMessage({\n event,\n messages,\n isLastMessage,\n isInLast10Actions,\n planPreviewEventIds,\n suppressThought = false,\n}: EventMessageProps) {\n const { data: config } = useConfig();\n const { planContent } = useConversationStore();\n const { curAgentState } = useAgentState();\n\n // Planner-running state is folded in by PlanningObservationPreview below,\n // not read here, to avoid a second useAgentState() subscription per row.\n const isAgentRunning =\n curAgentState === AgentState.RUNNING ||\n curAgentState === AgentState.LOADING;\n\n // Read isFromPlanningAgent directly from the event object\n const isFromPlanningAgent = event.isFromPlanningAgent || false;\n\n // Common props for components that need them\n const commonProps = {\n isLastMessage,\n isInLast10Actions,\n config,\n isFromPlanningAgent,\n };\n\n // Finished `/goal` loop: render the terminal status inline so it settles into\n // the conversation. should-render-event.ts only lets the terminal goal event\n // through; the active loop is shown by the separate bottom GoalStatusBanner.\n if (\n isConversationStateUpdateEvent(event) &&\n isGoalConversationStateUpdateEvent(event)\n ) {\n return <GoalStatusContent status={event.value} />;\n }\n\n // Agent error events\n if (isAgentErrorEvent(event)) {\n return <ErrorEventMessage event={event} {...commonProps} />;\n }\n\n // Hook execution events\n if (isHookExecutionEvent(event)) {\n return <HookExecutionEventMessage event={event} />;\n }\n\n // ACP sub-agent tool call events (Claude Code, Codex, Gemini CLI, …)\n // render through the same generic wrapper used for observation events so\n // the card shape, success indicator and markdown rendering all match.\n if (isACPToolCallEvent(event)) {\n return (\n <GenericEventMessageWrapper event={event} isLastMessage={isLastMessage} />\n );\n }\n\n if (isStreamingDeltaEvent(event)) {\n // Route an inline <think> block to the thinking section, not the bubble.\n const { reasoning: inlineThink, message } = splitInlineThink(\n event.content ?? \"\",\n { streaming: true },\n );\n const reasoningContent = [event.reasoning_content ?? \"\", inlineThink]\n .filter(Boolean)\n .join(\"\\n\\n\");\n return (\n <>\n {reasoningContent && <CollapsibleThinking content={reasoningContent} />}\n {message && (\n <ChatMessage\n type=\"agent\"\n message={message}\n isFromPlanningAgent={isFromPlanningAgent}\n timestamp={event.timestamp}\n />\n )}\n </>\n );\n }\n\n // Finish actions\n if (isActionEvent(event) && event.action.kind === \"FinishAction\") {\n return (\n <FinishEventMessage\n event={event as ActionEvent<FinishAction>}\n {...commonProps}\n />\n );\n }\n\n // ThinkAction - render the thought inside a collapsible section so it\n // doesn't dominate the chat, especially when the thinking language\n // (usually English) differs from the conversation language.\n if (isActionEvent(event) && event.action.kind === \"ThinkAction\") {\n const thinkAction = event as ActionEvent<ThinkAction>;\n return <CollapsibleThinking content={thinkAction.action.thought} />;\n }\n\n // Action events - render thought + action (will be replaced by thought + observation)\n if (isActionEvent(event)) {\n const reasoningContent = getReasoningContent(event);\n return (\n <>\n {reasoningContent && <CollapsibleThinking content={reasoningContent} />}\n {!suppressThought && (\n <ThoughtEventMessage\n event={event}\n isFromPlanningAgent={isFromPlanningAgent}\n />\n )}\n <GenericEventMessageWrapper\n event={event}\n isLastMessage={isLastMessage}\n />\n </>\n );\n }\n\n // Observation events - find the corresponding action and render thought + observation\n if (isObservationEvent(event)) {\n // Handle PlanningFileEditorObservation specially\n if (isPlanningFileEditorObservationEvent(event)) {\n // Only show PlanPreview if this event is marked as the one to display\n // (last PlanningFileEditorObservation in its phase)\n if (\n planPreviewEventIds &&\n shouldShowPlanPreview(event.id, planPreviewEventIds)\n ) {\n return (\n <PlanningObservationPreview\n planContent={planContent}\n isLastMessage={isLastMessage}\n isMainAgentRunning={isAgentRunning}\n />\n );\n }\n // Not the designated preview event for this phase - render nothing\n // This prevents duplicate previews within the same phase\n return null;\n }\n\n // Find the action that this observation is responding to\n const correspondingAction = messages.find(\n (msg) => isActionEvent(msg) && msg.id === event.action_id,\n );\n\n // Skip ThoughtEventMessage for ThinkAction (thought IS the action)\n const shouldShowThought =\n !suppressThought &&\n correspondingAction &&\n isActionEvent(correspondingAction) &&\n correspondingAction.action.kind !== \"ThinkAction\";\n\n const reasoningContent =\n correspondingAction && isActionEvent(correspondingAction)\n ? getReasoningContent(correspondingAction)\n : \"\";\n\n return (\n <>\n {reasoningContent && <CollapsibleThinking content={reasoningContent} />}\n {shouldShowThought && (\n <ThoughtEventMessage\n event={correspondingAction}\n isFromPlanningAgent={isFromPlanningAgent}\n />\n )}\n <GenericEventMessageWrapper\n event={event}\n isLastMessage={isLastMessage}\n correspondingAction={\n correspondingAction && isActionEvent(correspondingAction)\n ? correspondingAction\n : undefined\n }\n />\n </>\n );\n }\n\n // Message events (user and assistant messages)\n if (!isActionEvent(event) && !isObservationEvent(event)) {\n const messageEvent = event as MessageEvent;\n\n // Check if this is a user message that should display a Skill Ready event\n if (isUserMessageEvent(event) && shouldShowSkillReadyEvent(messageEvent)) {\n return renderUserMessageWithSkillReady(\n messageEvent,\n commonProps,\n isLastMessage,\n );\n }\n\n // Render normal message event (user or assistant)\n return (\n <UserAssistantEventMessage\n event={messageEvent}\n {...commonProps}\n isLastMessage={isLastMessage}\n />\n );\n }\n\n // Generic fallback for all other events\n return (\n <GenericEventMessageWrapper event={event} isLastMessage={isLastMessage} />\n );\n}\n"],"mappings":"wtCAyDA,IAAM,EAAsB,GAC1B,EAAM,kBAAoB,CAAC,EAKvB,EACJ,GAEI,CAAC,GAAmB,EAAgB,SAAW,EAC1C,GAGF,EAAgB,KACpB,GAAY,EAAQ,OAAS,QAAU,EAAQ,KAAK,KAAK,EAAE,OAAS,CACvE,EAMI,EAA6B,GAAwC,CAEzE,IAAM,EADkB,EAAmB,CAChB,EAAgB,OAAS,EAC9C,EAAqB,EACzB,EAAa,gBACf,EAEA,OAAO,GAAsB,CAC/B,EAYM,GACJ,EACA,EACA,IACuB,CACvB,GAAI,CACF,IAAM,EAAkB,EAAA,sBAAsB,CAAY,EAC1D,OACE,EAAA,EAAA,MAAA,EAAA,SAAA,CAAA,SAAA,EACE,EAAA,EAAA,KAAC,EAAA,0BAAD,CACE,MAAO,EACP,cAAe,GACf,oBAAqB,EAAY,mBAClC,CAAA,GACD,EAAA,EAAA,KAAC,EAAA,2BAAD,CACE,MAAO,EACQ,eAChB,CAAA,CACD,CAAA,CAAA,CAEN,MAAgB,CAEd,OACE,EAAA,EAAA,KAAC,EAAA,0BAAD,CACE,MAAO,EACQ,gBACf,oBAAqB,EAAY,mBAClC,CAAA,CAEL,CACF,EAMA,SAAS,EAA2B,CAClC,cACA,gBACA,sBAKC,CACD,GAAM,CACJ,8BACA,wBACA,0BACE,EAAA,sBAAsB,EAS1B,OACE,EAAA,EAAA,KAAC,EAAA,YAAD,CACe,cACA,YAPf,GACA,CAAC,CAAC,GACF,IAA0B,EAAA,WAAW,QAMnC,gBAAiB,GAAsB,CACxC,CAAA,CAEL,CAEA,SAAgB,EAAa,CAC3B,QACA,WACA,gBACA,oBACA,sBACA,kBAAkB,IACE,CACpB,GAAM,CAAE,KAAM,GAAW,EAAA,UAAU,EAC7B,CAAE,eAAgB,EAAA,qBAAqB,EACvC,CAAE,iBAAkB,EAAA,cAAc,EAIlC,EACJ,IAAkB,EAAA,WAAW,SAC7B,IAAkB,EAAA,WAAW,QAGzB,EAAsB,EAAM,qBAAuB,GAGnD,EAAc,CAClB,gBACA,oBACA,SACA,qBACF,EAKA,GACE,EAAA,+BAA+B,CAAK,GACpC,EAAA,mCAAmC,CAAK,EAExC,OAAO,EAAA,EAAA,KAAC,EAAA,kBAAD,CAAmB,OAAQ,EAAM,KAAQ,CAAA,EAIlD,GAAI,EAAA,kBAAkB,CAAK,EACzB,OAAO,EAAA,EAAA,KAAC,EAAA,kBAAD,CAA0B,QAAO,GAAI,CAAc,CAAA,EAI5D,GAAI,EAAA,qBAAqB,CAAK,EAC5B,OAAO,EAAA,EAAA,KAAC,EAAA,0BAAD,CAAkC,OAAQ,CAAA,EAMnD,GAAI,EAAA,mBAAmB,CAAK,EAC1B,OACE,EAAA,EAAA,KAAC,EAAA,2BAAD,CAAmC,QAAsB,eAAgB,CAAA,EAI7E,GAAI,EAAA,sBAAsB,CAAK,EAAG,CAEhC,GAAM,CAAE,UAAW,EAAa,WAAY,EAAA,iBAC1C,EAAM,SAAW,GACjB,CAAE,UAAW,EAAK,CACpB,EACM,EAAmB,CAAC,EAAM,mBAAqB,GAAI,CAAW,EACjE,OAAO,OAAO,EACd,KAAK;;CAAM,EACd,OACE,EAAA,EAAA,MAAA,EAAA,SAAA,CAAA,SAAA,CACG,IAAoB,EAAA,EAAA,KAAC,EAAA,oBAAD,CAAqB,QAAS,CAAmB,CAAA,EACrE,IACC,EAAA,EAAA,KAAC,EAAA,YAAD,CACE,KAAK,QACI,UACY,sBACrB,UAAW,EAAM,SAClB,CAAA,CAEH,CAAA,CAAA,CAEN,CAGA,GAAI,EAAA,cAAc,CAAK,GAAK,EAAM,OAAO,OAAS,eAChD,OACE,EAAA,EAAA,KAAC,EAAA,mBAAD,CACS,QACP,GAAI,CACL,CAAA,EAOL,GAAI,EAAA,cAAc,CAAK,GAAK,EAAM,OAAO,OAAS,cAEhD,OAAO,EAAA,EAAA,KAAC,EAAA,oBAAD,CAAqB,QAAS,EAAY,OAAO,OAAU,CAAA,EAIpE,GAAI,EAAA,cAAc,CAAK,EAAG,CACxB,IAAM,EAAmB,EAAA,oBAAoB,CAAK,EAClD,OACE,EAAA,EAAA,MAAA,EAAA,SAAA,CAAA,SAAA,CACG,IAAoB,EAAA,EAAA,KAAC,EAAA,oBAAD,CAAqB,QAAS,CAAmB,CAAA,EACrE,CAAC,IACA,EAAA,EAAA,KAAC,EAAA,oBAAD,CACS,QACc,qBACtB,CAAA,GAEH,EAAA,EAAA,KAAC,EAAA,2BAAD,CACS,QACQ,eAChB,CAAA,CACD,CAAA,CAAA,CAEN,CAGA,GAAI,EAAA,mBAAmB,CAAK,EAAG,CAE7B,GAAI,EAAA,qCAAqC,CAAK,EAiB5C,OAbE,GACA,EAAA,sBAAsB,EAAM,GAAI,CAAmB,GAGjD,EAAA,EAAA,KAAC,EAAD,CACe,cACE,gBACf,mBAAoB,CACrB,CAAA,EAKE,KAIT,IAAM,EAAsB,EAAS,KAClC,GAAQ,EAAA,cAAc,CAAG,GAAK,EAAI,KAAO,EAAM,SAClD,EAGM,EACJ,CAAC,GACD,GACA,EAAA,cAAc,CAAmB,GACjC,EAAoB,OAAO,OAAS,cAEhC,EACJ,GAAuB,EAAA,cAAc,CAAmB,EACpD,EAAA,oBAAoB,CAAmB,EACvC,GAEN,OACE,EAAA,EAAA,MAAA,EAAA,SAAA,CAAA,SAAA,CACG,IAAoB,EAAA,EAAA,KAAC,EAAA,oBAAD,CAAqB,QAAS,CAAmB,CAAA,EACrE,IACC,EAAA,EAAA,KAAC,EAAA,oBAAD,CACE,MAAO,EACc,qBACtB,CAAA,GAEH,EAAA,EAAA,KAAC,EAAA,2BAAD,CACS,QACQ,gBACf,oBACE,GAAuB,EAAA,cAAc,CAAmB,EACpD,EACA,IAAA,EAEP,CAAA,CACD,CAAA,CAAA,CAEN,CAGA,GAAI,CAAC,EAAA,cAAc,CAAK,GAAK,CAAC,EAAA,mBAAmB,CAAK,EAAG,CACvD,IAAM,EAAe,EAYrB,OATI,EAAA,mBAAmB,CAAK,GAAK,EAA0B,CAAY,EAC9D,EACL,EACA,EACA,CACF,GAKA,EAAA,EAAA,KAAC,EAAA,0BAAD,CACE,MAAO,EACP,GAAI,EACW,eAChB,CAAA,CAEL,CAGA,OACE,EAAA,EAAA,KAAC,EAAA,2BAAD,CAAmC,QAAsB,eAAgB,CAAA,CAE7E"}