@vertesia/ui 1.0.0-dev.20260128.144200 → 1.0.0-dev.20260225.024852Z

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 (500) hide show
  1. package/lib/esm/core/components/InputList.js +1 -1
  2. package/lib/esm/core/components/InputList.js.map +1 -1
  3. package/lib/esm/core/components/Overlay.js +1 -1
  4. package/lib/esm/core/components/Overlay.js.map +1 -1
  5. package/lib/esm/core/components/SidePanel.js +8 -2
  6. package/lib/esm/core/components/SidePanel.js.map +1 -1
  7. package/lib/esm/core/components/Switch.js +1 -1
  8. package/lib/esm/core/components/Switch.js.map +1 -1
  9. package/lib/esm/core/components/index.js +0 -8
  10. package/lib/esm/core/components/index.js.map +1 -1
  11. package/lib/esm/core/components/shadcn/MessageBox.js.map +1 -0
  12. package/lib/esm/core/components/shadcn/Panel.js +13 -0
  13. package/lib/esm/core/components/shadcn/Panel.js.map +1 -0
  14. package/lib/esm/core/components/{Badge.js → shadcn/badge.js} +2 -2
  15. package/lib/esm/core/components/shadcn/badge.js.map +1 -0
  16. package/lib/esm/core/components/shadcn/command.js +1 -1
  17. package/lib/esm/core/components/shadcn/command.js.map +1 -1
  18. package/lib/esm/core/components/shadcn/filters/filterBar.js +73 -83
  19. package/lib/esm/core/components/shadcn/filters/filterBar.js.map +1 -1
  20. package/lib/esm/core/components/shadcn/index.js +4 -2
  21. package/lib/esm/core/components/shadcn/index.js.map +1 -1
  22. package/lib/esm/core/components/shadcn/modal/ConfirmModal.js +10 -0
  23. package/lib/esm/core/components/shadcn/modal/ConfirmModal.js.map +1 -0
  24. package/lib/esm/core/components/{DeleteModal.js → shadcn/modal/DeleteModal.js} +1 -1
  25. package/lib/esm/core/components/shadcn/modal/DeleteModal.js.map +1 -0
  26. package/lib/esm/core/components/shadcn/{dialog.js → modal/dialog.js} +19 -15
  27. package/lib/esm/core/components/shadcn/modal/dialog.js.map +1 -0
  28. package/lib/esm/core/components/shadcn/modal/index.js +4 -0
  29. package/lib/esm/core/components/shadcn/modal/index.js.map +1 -0
  30. package/lib/esm/core/components/shadcn/popover.js +4 -2
  31. package/lib/esm/core/components/shadcn/popover.js.map +1 -1
  32. package/lib/esm/core/components/shadcn/selectBox.js +19 -15
  33. package/lib/esm/core/components/shadcn/selectBox.js.map +1 -1
  34. package/lib/esm/core/components/shadcn/tabs.js +16 -14
  35. package/lib/esm/core/components/shadcn/tabs.js.map +1 -1
  36. package/lib/esm/core/components/shadcn/textarea.js +30 -2
  37. package/lib/esm/core/components/shadcn/textarea.js.map +1 -1
  38. package/lib/esm/core/components/shadcn/tooltip.js +5 -1
  39. package/lib/esm/core/components/shadcn/tooltip.js.map +1 -1
  40. package/lib/esm/features/agent/PayloadBuilder.js +45 -0
  41. package/lib/esm/features/agent/PayloadBuilder.js.map +1 -1
  42. package/lib/esm/features/agent/chat/AgentChart.js +12 -232
  43. package/lib/esm/features/agent/chat/AgentChart.js.map +1 -1
  44. package/lib/esm/features/agent/chat/AskUserWidget.js +2 -1
  45. package/lib/esm/features/agent/chat/AskUserWidget.js.map +1 -1
  46. package/lib/esm/features/agent/chat/DocumentPanel.js +46 -0
  47. package/lib/esm/features/agent/chat/DocumentPanel.js.map +1 -0
  48. package/lib/esm/features/agent/chat/DocumentTabBar.js +17 -0
  49. package/lib/esm/features/agent/chat/DocumentTabBar.js.map +1 -0
  50. package/lib/esm/features/agent/chat/ModernAgentConversation.js +159 -402
  51. package/lib/esm/features/agent/chat/ModernAgentConversation.js.map +1 -1
  52. package/lib/esm/features/agent/chat/ModernAgentOutput/AllMessagesMixed.js +99 -57
  53. package/lib/esm/features/agent/chat/ModernAgentOutput/AllMessagesMixed.js.map +1 -1
  54. package/lib/esm/features/agent/chat/ModernAgentOutput/BatchProgressPanel.js +4 -4
  55. package/lib/esm/features/agent/chat/ModernAgentOutput/BatchProgressPanel.js.map +1 -1
  56. package/lib/esm/features/agent/chat/ModernAgentOutput/Header.js +4 -4
  57. package/lib/esm/features/agent/chat/ModernAgentOutput/Header.js.map +1 -1
  58. package/lib/esm/features/agent/chat/ModernAgentOutput/InlineSlidingPlanPanel.js +3 -3
  59. package/lib/esm/features/agent/chat/ModernAgentOutput/InlineSlidingPlanPanel.js.map +1 -1
  60. package/lib/esm/features/agent/chat/ModernAgentOutput/MessageInput.js +25 -22
  61. package/lib/esm/features/agent/chat/ModernAgentOutput/MessageInput.js.map +1 -1
  62. package/lib/esm/features/agent/chat/ModernAgentOutput/MessageItem.js +110 -55
  63. package/lib/esm/features/agent/chat/ModernAgentOutput/MessageItem.js.map +1 -1
  64. package/lib/esm/features/agent/chat/ModernAgentOutput/StreamingMessage.js +2 -2
  65. package/lib/esm/features/agent/chat/ModernAgentOutput/StreamingMessage.js.map +1 -1
  66. package/lib/esm/features/agent/chat/ModernAgentOutput/ToolCallGroup.js +146 -55
  67. package/lib/esm/features/agent/chat/ModernAgentOutput/ToolCallGroup.js.map +1 -1
  68. package/lib/esm/features/agent/chat/ModernAgentOutput/WorkstreamTabs.js +5 -6
  69. package/lib/esm/features/agent/chat/ModernAgentOutput/WorkstreamTabs.js.map +1 -1
  70. package/lib/esm/features/agent/chat/ModernAgentOutput/utils.js +110 -2
  71. package/lib/esm/features/agent/chat/ModernAgentOutput/utils.js.map +1 -1
  72. package/lib/esm/features/agent/chat/SkillWidgetProvider.js +28 -15
  73. package/lib/esm/features/agent/chat/SkillWidgetProvider.js.map +1 -1
  74. package/lib/esm/features/agent/chat/hooks/useAgentPlans.js +146 -0
  75. package/lib/esm/features/agent/chat/hooks/useAgentPlans.js.map +1 -0
  76. package/lib/esm/features/agent/chat/hooks/useAgentStream.js +180 -0
  77. package/lib/esm/features/agent/chat/hooks/useAgentStream.js.map +1 -0
  78. package/lib/esm/features/agent/chat/hooks/useDocumentPanel.js +100 -0
  79. package/lib/esm/features/agent/chat/hooks/useDocumentPanel.js.map +1 -0
  80. package/lib/esm/features/agent/chat/hooks/useFileProcessing.js +90 -0
  81. package/lib/esm/features/agent/chat/hooks/useFileProcessing.js.map +1 -0
  82. package/lib/esm/features/agent/chat/index.js +6 -5
  83. package/lib/esm/features/agent/chat/index.js.map +1 -1
  84. package/lib/esm/features/agent/chat/types/document.js +2 -0
  85. package/lib/esm/features/agent/chat/types/document.js.map +1 -0
  86. package/lib/esm/features/agent/index.js +0 -2
  87. package/lib/esm/features/agent/index.js.map +1 -1
  88. package/lib/esm/features/store/collections/BrowseCollectionView.js +4 -6
  89. package/lib/esm/features/store/collections/BrowseCollectionView.js.map +1 -1
  90. package/lib/esm/features/store/collections/CreateCollection.js +4 -4
  91. package/lib/esm/features/store/collections/CreateCollection.js.map +1 -1
  92. package/lib/esm/features/store/collections/EditCollectionView.js +1 -1
  93. package/lib/esm/features/store/collections/EditCollectionView.js.map +1 -1
  94. package/lib/esm/features/store/objects/DocumentSearchResults.js +5 -5
  95. package/lib/esm/features/store/objects/DocumentSearchResults.js.map +1 -1
  96. package/lib/esm/features/store/objects/ExportPropertiesModal.js +3 -3
  97. package/lib/esm/features/store/objects/ExportPropertiesModal.js.map +1 -1
  98. package/lib/esm/features/store/objects/components/ContentOverview.js +19 -120
  99. package/lib/esm/features/store/objects/components/ContentOverview.js.map +1 -1
  100. package/lib/esm/features/store/objects/components/PropertiesEditorModal.js +1 -1
  101. package/lib/esm/features/store/objects/components/PropertiesEditorModal.js.map +1 -1
  102. package/lib/esm/features/store/objects/components/SelectDocumentModal.js +2 -2
  103. package/lib/esm/features/store/objects/components/SelectDocumentModal.js.map +1 -1
  104. package/lib/esm/features/store/objects/components/VectorSearchWidget.js +1 -1
  105. package/lib/esm/features/store/objects/components/VectorSearchWidget.js.map +1 -1
  106. package/lib/esm/features/store/objects/components/index.js +1 -1
  107. package/lib/esm/features/store/objects/components/index.js.map +1 -1
  108. package/lib/esm/features/store/objects/components/useDownloadFile.js +192 -0
  109. package/lib/esm/features/store/objects/components/useDownloadFile.js.map +1 -0
  110. package/lib/esm/features/store/objects/search/DocumentSearchContext.js +1 -2
  111. package/lib/esm/features/store/objects/search/DocumentSearchContext.js.map +1 -1
  112. package/lib/esm/features/store/objects/selection/SelectionActions.js +5 -8
  113. package/lib/esm/features/store/objects/selection/SelectionActions.js.map +1 -1
  114. package/lib/esm/features/store/objects/selection/actions/AddToCollectionAction.js +4 -4
  115. package/lib/esm/features/store/objects/selection/actions/AddToCollectionAction.js.map +1 -1
  116. package/lib/esm/features/store/objects/selection/actions/ChangeTypeAction.js +2 -2
  117. package/lib/esm/features/store/objects/selection/actions/ChangeTypeAction.js.map +1 -1
  118. package/lib/esm/features/store/objects/selection/actions/ExportPropertiesAction.js +1 -1
  119. package/lib/esm/features/store/objects/selection/actions/ExportPropertiesAction.js.map +1 -1
  120. package/lib/esm/features/store/objects/selection/actions/StartWorkflowComponent.js +3 -3
  121. package/lib/esm/features/store/objects/selection/actions/StartWorkflowComponent.js.map +1 -1
  122. package/lib/esm/features/store/objects/upload/DocumentUploadModal.js +13 -13
  123. package/lib/esm/features/store/objects/upload/DocumentUploadModal.js.map +1 -1
  124. package/lib/esm/features/store/objects/upload/useSmartFileUploadProcessing.js +15 -8
  125. package/lib/esm/features/store/objects/upload/useSmartFileUploadProcessing.js.map +1 -1
  126. package/lib/esm/features/store/types/ObjectSchemaEditor.js +6 -5
  127. package/lib/esm/features/store/types/ObjectSchemaEditor.js.map +1 -1
  128. package/lib/esm/features/store/types/SelectContentType.js +3 -3
  129. package/lib/esm/features/store/types/SelectContentType.js.map +1 -1
  130. package/lib/esm/features/store/types/SelectContentTypeModal.js +5 -4
  131. package/lib/esm/features/store/types/SelectContentTypeModal.js.map +1 -1
  132. package/lib/esm/features/store/types/TableLayoutEditor.js +4 -4
  133. package/lib/esm/features/store/types/TableLayoutEditor.js.map +1 -1
  134. package/lib/esm/features/user/UserInfo.js +73 -9
  135. package/lib/esm/features/user/UserInfo.js.map +1 -1
  136. package/lib/esm/features/utils/print.js +0 -1
  137. package/lib/esm/features/utils/print.js.map +1 -1
  138. package/lib/esm/layout/AppLayout.js +3 -4
  139. package/lib/esm/layout/AppLayout.js.map +1 -1
  140. package/lib/esm/layout/Sidebar.js +5 -5
  141. package/lib/esm/layout/Sidebar.js.map +1 -1
  142. package/lib/esm/router/HistoryNavigator.js +7 -1
  143. package/lib/esm/router/HistoryNavigator.js.map +1 -1
  144. package/lib/esm/router/Nav.js +2 -2
  145. package/lib/esm/router/Nav.js.map +1 -1
  146. package/lib/esm/session/UserSession.js +35 -9
  147. package/lib/esm/session/UserSession.js.map +1 -1
  148. package/lib/esm/session/UserSessionProvider.js +3 -2
  149. package/lib/esm/session/UserSessionProvider.js.map +1 -1
  150. package/lib/esm/shell/apps/AppProjectSelector.js +2 -2
  151. package/lib/esm/shell/apps/AppProjectSelector.js.map +1 -1
  152. package/lib/esm/shell/apps/StandaloneApp.js +2 -2
  153. package/lib/esm/shell/apps/StandaloneApp.js.map +1 -1
  154. package/lib/esm/shell/login/InviteAcceptModal.js +2 -2
  155. package/lib/esm/shell/login/InviteAcceptModal.js.map +1 -1
  156. package/lib/esm/shell/login/SignInModal.js +1 -1
  157. package/lib/esm/shell/login/SignInModal.js.map +1 -1
  158. package/lib/esm/shell/login/SignupForm.js +2 -2
  159. package/lib/esm/shell/login/SignupForm.js.map +1 -1
  160. package/lib/esm/shell/login/UserInfo.js +2 -2
  161. package/lib/esm/shell/login/UserInfo.js.map +1 -1
  162. package/lib/esm/widgets/json-view/JSONCode.js +1 -1
  163. package/lib/esm/widgets/json-view/JSONCode.js.map +1 -1
  164. package/lib/esm/widgets/json-view/JSONDisplay.js +1 -1
  165. package/lib/esm/widgets/json-view/JSONDisplay.js.map +1 -1
  166. package/lib/esm/widgets/markdown/ArtifactContentRenderer.js +84 -13
  167. package/lib/esm/widgets/markdown/ArtifactContentRenderer.js.map +1 -1
  168. package/lib/esm/widgets/markdown/MarkdownFigure.js +40 -0
  169. package/lib/esm/widgets/markdown/MarkdownFigure.js.map +1 -0
  170. package/lib/esm/widgets/markdown/MarkdownRenderer.js +42 -7
  171. package/lib/esm/widgets/markdown/MarkdownRenderer.js.map +1 -1
  172. package/lib/esm/widgets/markdown/MermaidDiagram.js +80 -5
  173. package/lib/esm/widgets/markdown/MermaidDiagram.js.map +1 -1
  174. package/lib/esm/widgets/markdown/codeBlockHandlers.js +33 -33
  175. package/lib/esm/widgets/markdown/codeBlockHandlers.js.map +1 -1
  176. package/lib/esm/widgets/markdown/codeBlockHandlers.test.js +2 -29
  177. package/lib/esm/widgets/markdown/codeBlockHandlers.test.js.map +1 -1
  178. package/lib/esm/widgets/markdown/index.js +1 -0
  179. package/lib/esm/widgets/markdown/index.js.map +1 -1
  180. package/lib/esm/widgets/markdown/normalizeCustomSchemeLinks.js +77 -0
  181. package/lib/esm/widgets/markdown/normalizeCustomSchemeLinks.js.map +1 -0
  182. package/lib/esm/widgets/markdown/normalizeDirectives.js +45 -0
  183. package/lib/esm/widgets/markdown/normalizeDirectives.js.map +1 -0
  184. package/lib/esm/widgets/markdown/remarkDirectiveHandler.js +96 -0
  185. package/lib/esm/widgets/markdown/remarkDirectiveHandler.js.map +1 -0
  186. package/lib/esm/widgets/monacoEditor/MonacoEditor.js +8 -14
  187. package/lib/esm/widgets/monacoEditor/MonacoEditor.js.map +1 -1
  188. package/lib/esm/widgets/schema-editor/ManagedSchema.js.map +1 -1
  189. package/lib/esm/widgets/schema-editor/editor/PropertyEditor.js +3 -3
  190. package/lib/esm/widgets/schema-editor/editor/PropertyEditor.js.map +1 -1
  191. package/lib/esm/widgets/schema-editor/json-schema4-utils.js.map +1 -1
  192. package/lib/tsconfig.tsbuildinfo +1 -1
  193. package/lib/types/core/components/SidePanel.d.ts +4 -1
  194. package/lib/types/core/components/SidePanel.d.ts.map +1 -1
  195. package/lib/types/core/components/index.d.ts +0 -8
  196. package/lib/types/core/components/index.d.ts.map +1 -1
  197. package/lib/types/core/components/shadcn/MessageBox.d.ts.map +1 -0
  198. package/lib/types/core/components/{Panel.d.ts → shadcn/Panel.d.ts} +3 -1
  199. package/lib/types/core/components/shadcn/Panel.d.ts.map +1 -0
  200. package/lib/types/core/components/{Badge.d.ts → shadcn/badge.d.ts} +4 -4
  201. package/lib/types/core/components/shadcn/badge.d.ts.map +1 -0
  202. package/lib/types/core/components/shadcn/button.d.ts +1 -1
  203. package/lib/types/core/components/shadcn/filters/filterBar.d.ts.map +1 -1
  204. package/lib/types/core/components/shadcn/index.d.ts +4 -2
  205. package/lib/types/core/components/shadcn/index.d.ts.map +1 -1
  206. package/lib/types/core/components/shadcn/input.d.ts +1 -1
  207. package/lib/types/core/components/shadcn/modal/ConfirmModal.d.ts.map +1 -0
  208. package/lib/types/core/components/shadcn/modal/DeleteModal.d.ts.map +1 -0
  209. package/lib/types/core/components/shadcn/{dialog.d.ts → modal/dialog.d.ts} +7 -4
  210. package/lib/types/core/components/shadcn/modal/dialog.d.ts.map +1 -0
  211. package/lib/types/core/components/shadcn/modal/index.d.ts +4 -0
  212. package/lib/types/core/components/shadcn/modal/index.d.ts.map +1 -0
  213. package/lib/types/core/components/shadcn/popover.d.ts.map +1 -1
  214. package/lib/types/core/components/shadcn/selectBox.d.ts +9 -5
  215. package/lib/types/core/components/shadcn/selectBox.d.ts.map +1 -1
  216. package/lib/types/core/components/shadcn/tabs.d.ts +14 -5
  217. package/lib/types/core/components/shadcn/tabs.d.ts.map +1 -1
  218. package/lib/types/core/components/shadcn/textarea.d.ts +6 -2
  219. package/lib/types/core/components/shadcn/textarea.d.ts.map +1 -1
  220. package/lib/types/core/components/shadcn/tooltip.d.ts.map +1 -1
  221. package/lib/types/features/agent/PayloadBuilder.d.ts +22 -4
  222. package/lib/types/features/agent/PayloadBuilder.d.ts.map +1 -1
  223. package/lib/types/features/agent/chat/AgentChart.d.ts +3 -44
  224. package/lib/types/features/agent/chat/AgentChart.d.ts.map +1 -1
  225. package/lib/types/features/agent/chat/AskUserWidget.d.ts.map +1 -1
  226. package/lib/types/features/agent/chat/DocumentPanel.d.ts +16 -0
  227. package/lib/types/features/agent/chat/DocumentPanel.d.ts.map +1 -0
  228. package/lib/types/features/agent/chat/DocumentTabBar.d.ts +10 -0
  229. package/lib/types/features/agent/chat/DocumentTabBar.d.ts.map +1 -0
  230. package/lib/types/features/agent/chat/ModernAgentConversation.d.ts +69 -1
  231. package/lib/types/features/agent/chat/ModernAgentConversation.d.ts.map +1 -1
  232. package/lib/types/features/agent/chat/ModernAgentOutput/AllMessagesMixed.d.ts +36 -1
  233. package/lib/types/features/agent/chat/ModernAgentOutput/AllMessagesMixed.d.ts.map +1 -1
  234. package/lib/types/features/agent/chat/ModernAgentOutput/BatchProgressPanel.d.ts +18 -2
  235. package/lib/types/features/agent/chat/ModernAgentOutput/BatchProgressPanel.d.ts.map +1 -1
  236. package/lib/types/features/agent/chat/ModernAgentOutput/Header.d.ts +4 -7
  237. package/lib/types/features/agent/chat/ModernAgentOutput/Header.d.ts.map +1 -1
  238. package/lib/types/features/agent/chat/ModernAgentOutput/MessageInput.d.ts +2 -1
  239. package/lib/types/features/agent/chat/ModernAgentOutput/MessageInput.d.ts.map +1 -1
  240. package/lib/types/features/agent/chat/ModernAgentOutput/MessageItem.d.ts +35 -7
  241. package/lib/types/features/agent/chat/ModernAgentOutput/MessageItem.d.ts.map +1 -1
  242. package/lib/types/features/agent/chat/ModernAgentOutput/StreamingMessage.d.ts +11 -1
  243. package/lib/types/features/agent/chat/ModernAgentOutput/StreamingMessage.d.ts.map +1 -1
  244. package/lib/types/features/agent/chat/ModernAgentOutput/ToolCallGroup.d.ts +20 -2
  245. package/lib/types/features/agent/chat/ModernAgentOutput/ToolCallGroup.d.ts.map +1 -1
  246. package/lib/types/features/agent/chat/ModernAgentOutput/WorkstreamTabs.d.ts.map +1 -1
  247. package/lib/types/features/agent/chat/ModernAgentOutput/utils.d.ts +18 -1
  248. package/lib/types/features/agent/chat/ModernAgentOutput/utils.d.ts.map +1 -1
  249. package/lib/types/features/agent/chat/SkillWidgetProvider.d.ts.map +1 -1
  250. package/lib/types/features/agent/chat/hooks/useAgentPlans.d.ts +22 -0
  251. package/lib/types/features/agent/chat/hooks/useAgentPlans.d.ts.map +1 -0
  252. package/lib/types/features/agent/chat/hooks/useAgentStream.d.ts +42 -0
  253. package/lib/types/features/agent/chat/hooks/useAgentStream.d.ts.map +1 -0
  254. package/lib/types/features/agent/chat/hooks/useDocumentPanel.d.ts +22 -0
  255. package/lib/types/features/agent/chat/hooks/useDocumentPanel.d.ts.map +1 -0
  256. package/lib/types/features/agent/chat/hooks/useFileProcessing.d.ts +27 -0
  257. package/lib/types/features/agent/chat/hooks/useFileProcessing.d.ts.map +1 -0
  258. package/lib/types/features/agent/chat/index.d.ts +12 -8
  259. package/lib/types/features/agent/chat/index.d.ts.map +1 -1
  260. package/lib/types/features/agent/chat/types/document.d.ts +5 -0
  261. package/lib/types/features/agent/chat/types/document.d.ts.map +1 -0
  262. package/lib/types/features/agent/index.d.ts +0 -2
  263. package/lib/types/features/agent/index.d.ts.map +1 -1
  264. package/lib/types/features/store/collections/BrowseCollectionView.d.ts.map +1 -1
  265. package/lib/types/features/store/objects/ExportPropertiesModal.d.ts.map +1 -1
  266. package/lib/types/features/store/objects/components/ContentOverview.d.ts.map +1 -1
  267. package/lib/types/features/store/objects/components/PropertiesEditorModal.d.ts.map +1 -1
  268. package/lib/types/features/store/objects/components/index.d.ts +1 -1
  269. package/lib/types/features/store/objects/components/index.d.ts.map +1 -1
  270. package/lib/types/features/store/objects/components/useDownloadFile.d.ts +35 -0
  271. package/lib/types/features/store/objects/components/useDownloadFile.d.ts.map +1 -0
  272. package/lib/types/features/store/objects/search/DocumentSearchContext.d.ts.map +1 -1
  273. package/lib/types/features/store/objects/selection/SelectionActions.d.ts +1 -1
  274. package/lib/types/features/store/objects/selection/SelectionActions.d.ts.map +1 -1
  275. package/lib/types/features/store/objects/selection/actions/ChangeTypeAction.d.ts.map +1 -1
  276. package/lib/types/features/store/objects/selection/actions/ExportPropertiesAction.d.ts.map +1 -1
  277. package/lib/types/features/store/objects/upload/useSmartFileUploadProcessing.d.ts.map +1 -1
  278. package/lib/types/features/store/types/ObjectSchemaEditor.d.ts +2 -1
  279. package/lib/types/features/store/types/ObjectSchemaEditor.d.ts.map +1 -1
  280. package/lib/types/features/store/types/SelectContentTypeModal.d.ts +1 -1
  281. package/lib/types/features/store/types/SelectContentTypeModal.d.ts.map +1 -1
  282. package/lib/types/features/store/types/TableLayoutEditor.d.ts +2 -1
  283. package/lib/types/features/store/types/TableLayoutEditor.d.ts.map +1 -1
  284. package/lib/types/features/user/UserInfo.d.ts +12 -1
  285. package/lib/types/features/user/UserInfo.d.ts.map +1 -1
  286. package/lib/types/features/utils/print.d.ts.map +1 -1
  287. package/lib/types/layout/AppLayout.d.ts.map +1 -1
  288. package/lib/types/layout/Sidebar.d.ts +4 -2
  289. package/lib/types/layout/Sidebar.d.ts.map +1 -1
  290. package/lib/types/router/HistoryNavigator.d.ts.map +1 -1
  291. package/lib/types/router/Nav.d.ts +6 -1
  292. package/lib/types/router/Nav.d.ts.map +1 -1
  293. package/lib/types/session/UserSession.d.ts.map +1 -1
  294. package/lib/types/session/UserSessionProvider.d.ts +1 -0
  295. package/lib/types/session/UserSessionProvider.d.ts.map +1 -1
  296. package/lib/types/widgets/json-view/JSONCode.d.ts.map +1 -1
  297. package/lib/types/widgets/markdown/ArtifactContentRenderer.d.ts +10 -1
  298. package/lib/types/widgets/markdown/ArtifactContentRenderer.d.ts.map +1 -1
  299. package/lib/types/widgets/markdown/MarkdownFigure.d.ts +15 -0
  300. package/lib/types/widgets/markdown/MarkdownFigure.d.ts.map +1 -0
  301. package/lib/types/widgets/markdown/MarkdownRenderer.d.ts.map +1 -1
  302. package/lib/types/widgets/markdown/MermaidDiagram.d.ts.map +1 -1
  303. package/lib/types/widgets/markdown/codeBlockHandlers.d.ts +5 -2
  304. package/lib/types/widgets/markdown/codeBlockHandlers.d.ts.map +1 -1
  305. package/lib/types/widgets/markdown/index.d.ts +1 -0
  306. package/lib/types/widgets/markdown/index.d.ts.map +1 -1
  307. package/lib/types/widgets/markdown/normalizeCustomSchemeLinks.d.ts +9 -0
  308. package/lib/types/widgets/markdown/normalizeCustomSchemeLinks.d.ts.map +1 -0
  309. package/lib/types/widgets/markdown/normalizeDirectives.d.ts +20 -0
  310. package/lib/types/widgets/markdown/normalizeDirectives.d.ts.map +1 -0
  311. package/lib/types/widgets/markdown/remarkDirectiveHandler.d.ts +2 -0
  312. package/lib/types/widgets/markdown/remarkDirectiveHandler.d.ts.map +1 -0
  313. package/lib/types/widgets/monacoEditor/MonacoEditor.d.ts +1 -3
  314. package/lib/types/widgets/monacoEditor/MonacoEditor.d.ts.map +1 -1
  315. package/lib/types/widgets/schema-editor/ManagedSchema.d.ts +1 -1
  316. package/lib/types/widgets/schema-editor/ManagedSchema.d.ts.map +1 -1
  317. package/lib/vertesia-ui-core.js +1 -1
  318. package/lib/vertesia-ui-core.js.map +1 -1
  319. package/lib/vertesia-ui-features.js +1 -1
  320. package/lib/vertesia-ui-features.js.map +1 -1
  321. package/lib/vertesia-ui-layout.js +1 -1
  322. package/lib/vertesia-ui-layout.js.map +1 -1
  323. package/lib/vertesia-ui-router.js +1 -1
  324. package/lib/vertesia-ui-router.js.map +1 -1
  325. package/lib/vertesia-ui-session.js +1 -1
  326. package/lib/vertesia-ui-session.js.map +1 -1
  327. package/lib/vertesia-ui-shell.js +1 -1
  328. package/lib/vertesia-ui-shell.js.map +1 -1
  329. package/lib/vertesia-ui-widgets.js +1 -1
  330. package/lib/vertesia-ui-widgets.js.map +1 -1
  331. package/package.json +14 -10
  332. package/src/core/components/InputList.tsx +1 -1
  333. package/src/core/components/Overlay.tsx +1 -1
  334. package/src/core/components/SidePanel.tsx +29 -15
  335. package/src/core/components/Switch.tsx +1 -1
  336. package/src/core/components/index.ts +0 -8
  337. package/src/core/components/shadcn/Panel.tsx +50 -0
  338. package/src/core/components/{Badge.tsx → shadcn/badge.tsx} +3 -3
  339. package/src/core/components/shadcn/command.tsx +1 -1
  340. package/src/core/components/shadcn/filters/filterBar.tsx +76 -87
  341. package/src/core/components/shadcn/index.ts +5 -3
  342. package/src/core/components/{ConfirmModal.tsx → shadcn/modal/ConfirmModal.tsx} +8 -8
  343. package/src/core/components/{DeleteModal.tsx → shadcn/modal/DeleteModal.tsx} +1 -1
  344. package/src/core/components/shadcn/{dialog.tsx → modal/dialog.tsx} +43 -32
  345. package/src/core/components/shadcn/modal/index.ts +3 -0
  346. package/src/core/components/shadcn/popover.tsx +4 -2
  347. package/src/core/components/shadcn/selectBox.tsx +71 -52
  348. package/src/core/components/shadcn/tabs.tsx +36 -19
  349. package/src/core/components/shadcn/textarea.tsx +43 -2
  350. package/src/core/components/shadcn/tooltip.tsx +23 -17
  351. package/src/features/agent/PayloadBuilder.tsx +70 -9
  352. package/src/features/agent/chat/AgentChart.tsx +46 -678
  353. package/src/features/agent/chat/AskUserWidget.tsx +4 -3
  354. package/src/features/agent/chat/DocumentPanel.tsx +120 -0
  355. package/src/features/agent/chat/DocumentTabBar.tsx +49 -0
  356. package/src/features/agent/chat/ModernAgentConversation.tsx +403 -549
  357. package/src/features/agent/chat/ModernAgentOutput/AllMessagesMixed.tsx +162 -55
  358. package/src/features/agent/chat/ModernAgentOutput/BatchProgressPanel.tsx +40 -10
  359. package/src/features/agent/chat/ModernAgentOutput/Header.tsx +12 -16
  360. package/src/features/agent/chat/ModernAgentOutput/InlineSlidingPlanPanel.tsx +3 -3
  361. package/src/features/agent/chat/ModernAgentOutput/MessageInput.tsx +68 -75
  362. package/src/features/agent/chat/ModernAgentOutput/MessageItem.tsx +206 -94
  363. package/src/features/agent/chat/ModernAgentOutput/StreamingMessage.tsx +22 -5
  364. package/src/features/agent/chat/ModernAgentOutput/ToolCallGroup.tsx +295 -113
  365. package/src/features/agent/chat/ModernAgentOutput/WorkstreamTabs.tsx +11 -8
  366. package/src/features/agent/chat/ModernAgentOutput/utils.ts +133 -4
  367. package/src/features/agent/chat/SkillWidgetProvider.tsx +32 -15
  368. package/src/features/agent/chat/hooks/useAgentPlans.ts +190 -0
  369. package/src/features/agent/chat/hooks/useAgentStream.ts +239 -0
  370. package/src/features/agent/chat/hooks/useDocumentPanel.ts +118 -0
  371. package/src/features/agent/chat/hooks/useFileProcessing.ts +126 -0
  372. package/src/features/agent/chat/index.ts +18 -17
  373. package/src/features/agent/chat/types/document.ts +4 -0
  374. package/src/features/agent/index.ts +0 -2
  375. package/src/features/store/collections/BrowseCollectionView.tsx +5 -8
  376. package/src/features/store/collections/CreateCollection.tsx +8 -8
  377. package/src/features/store/collections/EditCollectionView.tsx +1 -1
  378. package/src/features/store/objects/DocumentSearchResults.tsx +9 -13
  379. package/src/features/store/objects/ExportPropertiesModal.tsx +9 -7
  380. package/src/features/store/objects/components/ContentOverview.tsx +29 -155
  381. package/src/features/store/objects/components/PropertiesEditorModal.tsx +0 -1
  382. package/src/features/store/objects/components/SelectDocumentModal.tsx +6 -6
  383. package/src/features/store/objects/components/VectorSearchWidget.tsx +2 -2
  384. package/src/features/store/objects/components/index.ts +1 -1
  385. package/src/features/store/objects/components/useDownloadFile.ts +237 -0
  386. package/src/features/store/objects/search/DocumentSearchContext.ts +1 -2
  387. package/src/features/store/objects/selection/SelectionActions.tsx +0 -4
  388. package/src/features/store/objects/selection/actions/AddToCollectionAction.tsx +13 -13
  389. package/src/features/store/objects/selection/actions/ChangeTypeAction.tsx +2 -6
  390. package/src/features/store/objects/selection/actions/ExportPropertiesAction.tsx +1 -3
  391. package/src/features/store/objects/selection/actions/StartWorkflowComponent.tsx +8 -8
  392. package/src/features/store/objects/upload/DocumentUploadModal.tsx +25 -25
  393. package/src/features/store/objects/upload/useSmartFileUploadProcessing.ts +16 -10
  394. package/src/features/store/types/ObjectSchemaEditor.tsx +32 -29
  395. package/src/features/store/types/SelectContentType.tsx +3 -3
  396. package/src/features/store/types/SelectContentTypeModal.tsx +17 -30
  397. package/src/features/store/types/TableLayoutEditor.tsx +14 -18
  398. package/src/features/user/UserInfo.tsx +176 -10
  399. package/src/features/utils/print.ts +0 -1
  400. package/src/layout/AppLayout.tsx +16 -44
  401. package/src/layout/Sidebar.tsx +7 -5
  402. package/src/router/HistoryNavigator.ts +9 -1
  403. package/src/router/Nav.tsx +7 -2
  404. package/src/session/UserSession.ts +38 -9
  405. package/src/session/UserSessionProvider.tsx +3 -2
  406. package/src/shell/apps/AppProjectSelector.tsx +2 -2
  407. package/src/shell/apps/StandaloneApp.tsx +3 -3
  408. package/src/shell/login/InviteAcceptModal.tsx +6 -6
  409. package/src/shell/login/SignInModal.tsx +1 -1
  410. package/src/shell/login/SignupForm.tsx +3 -3
  411. package/src/shell/login/UserInfo.tsx +5 -5
  412. package/src/widgets/json-view/JSONCode.tsx +1 -3
  413. package/src/widgets/json-view/JSONDisplay.tsx +1 -1
  414. package/src/widgets/markdown/ArtifactContentRenderer.tsx +115 -14
  415. package/src/widgets/markdown/MarkdownFigure.tsx +100 -0
  416. package/src/widgets/markdown/MarkdownRenderer.tsx +62 -9
  417. package/src/widgets/markdown/MermaidDiagram.tsx +97 -5
  418. package/src/widgets/markdown/codeBlockHandlers.test.tsx +3 -34
  419. package/src/widgets/markdown/codeBlockHandlers.tsx +47 -42
  420. package/src/widgets/markdown/index.ts +1 -0
  421. package/src/widgets/markdown/markdown.css +192 -0
  422. package/src/widgets/markdown/normalizeCustomSchemeLinks.test.ts +86 -0
  423. package/src/widgets/markdown/normalizeCustomSchemeLinks.ts +91 -0
  424. package/src/widgets/markdown/normalizeDirectives.ts +50 -0
  425. package/src/widgets/markdown/remarkDirectiveHandler.ts +119 -0
  426. package/src/widgets/monacoEditor/MonacoEditor.tsx +8 -22
  427. package/src/widgets/schema-editor/ManagedSchema.ts +1 -1
  428. package/src/widgets/schema-editor/editor/PropertyEditor.tsx +5 -5
  429. package/src/widgets/schema-editor/json-schema4-utils.ts +1 -1
  430. package/lib/esm/core/components/Badge.js.map +0 -1
  431. package/lib/esm/core/components/Button.js +0 -32
  432. package/lib/esm/core/components/Button.js.map +0 -1
  433. package/lib/esm/core/components/ConfirmModal.js +0 -10
  434. package/lib/esm/core/components/ConfirmModal.js.map +0 -1
  435. package/lib/esm/core/components/DeleteModal.js.map +0 -1
  436. package/lib/esm/core/components/MessageBox.js.map +0 -1
  437. package/lib/esm/core/components/Modal.js +0 -26
  438. package/lib/esm/core/components/Modal.js.map +0 -1
  439. package/lib/esm/core/components/Panel.js +0 -8
  440. package/lib/esm/core/components/Panel.js.map +0 -1
  441. package/lib/esm/core/components/SelectBox.js +0 -67
  442. package/lib/esm/core/components/SelectBox.js.map +0 -1
  443. package/lib/esm/core/components/shadcn/dialog.js.map +0 -1
  444. package/lib/esm/core/components/tabs/Tabs.js +0 -78
  445. package/lib/esm/core/components/tabs/Tabs.js.map +0 -1
  446. package/lib/esm/core/components/tabs/TabsContext.js +0 -7
  447. package/lib/esm/core/components/tabs/TabsContext.js.map +0 -1
  448. package/lib/esm/core/components/tabs/index.js +0 -3
  449. package/lib/esm/core/components/tabs/index.js.map +0 -1
  450. package/lib/esm/features/agent/createChartTool.js +0 -632
  451. package/lib/esm/features/agent/createChartTool.js.map +0 -1
  452. package/lib/esm/features/agent/examples.js +0 -295
  453. package/lib/esm/features/agent/examples.js.map +0 -1
  454. package/lib/esm/features/agent/visualization.js +0 -165
  455. package/lib/esm/features/agent/visualization.js.map +0 -1
  456. package/lib/esm/features/store/objects/components/useDownloadObject.js +0 -21
  457. package/lib/esm/features/store/objects/components/useDownloadObject.js.map +0 -1
  458. package/lib/types/core/components/Badge.d.ts.map +0 -1
  459. package/lib/types/core/components/Button.d.ts +0 -14
  460. package/lib/types/core/components/Button.d.ts.map +0 -1
  461. package/lib/types/core/components/ConfirmModal.d.ts.map +0 -1
  462. package/lib/types/core/components/DeleteModal.d.ts.map +0 -1
  463. package/lib/types/core/components/MessageBox.d.ts.map +0 -1
  464. package/lib/types/core/components/Modal.d.ts +0 -30
  465. package/lib/types/core/components/Modal.d.ts.map +0 -1
  466. package/lib/types/core/components/Panel.d.ts.map +0 -1
  467. package/lib/types/core/components/SelectBox.d.ts +0 -36
  468. package/lib/types/core/components/SelectBox.d.ts.map +0 -1
  469. package/lib/types/core/components/shadcn/dialog.d.ts.map +0 -1
  470. package/lib/types/core/components/tabs/Tabs.d.ts +0 -25
  471. package/lib/types/core/components/tabs/Tabs.d.ts.map +0 -1
  472. package/lib/types/core/components/tabs/TabsContext.d.ts +0 -17
  473. package/lib/types/core/components/tabs/TabsContext.d.ts.map +0 -1
  474. package/lib/types/core/components/tabs/index.d.ts +0 -3
  475. package/lib/types/core/components/tabs/index.d.ts.map +0 -1
  476. package/lib/types/features/agent/createChartTool.d.ts +0 -178
  477. package/lib/types/features/agent/createChartTool.d.ts.map +0 -1
  478. package/lib/types/features/agent/examples.d.ts +0 -59
  479. package/lib/types/features/agent/examples.d.ts.map +0 -1
  480. package/lib/types/features/agent/visualization.d.ts +0 -95
  481. package/lib/types/features/agent/visualization.d.ts.map +0 -1
  482. package/lib/types/features/store/objects/components/useDownloadObject.d.ts +0 -4
  483. package/lib/types/features/store/objects/components/useDownloadObject.d.ts.map +0 -1
  484. package/src/core/components/Button.tsx +0 -63
  485. package/src/core/components/Modal.tsx +0 -144
  486. package/src/core/components/Panel.tsx +0 -34
  487. package/src/core/components/SelectBox.tsx +0 -188
  488. package/src/core/components/tabs/Tabs.tsx +0 -132
  489. package/src/core/components/tabs/TabsContext.ts +0 -25
  490. package/src/core/components/tabs/index.ts +0 -2
  491. package/src/features/agent/CHART_INSTRUCTIONS.md +0 -228
  492. package/src/features/agent/createChartTool.ts +0 -643
  493. package/src/features/agent/examples.ts +0 -321
  494. package/src/features/agent/visualization.ts +0 -227
  495. package/src/features/store/objects/components/useDownloadObject.ts +0 -29
  496. /package/lib/esm/core/components/{MessageBox.js → shadcn/MessageBox.js} +0 -0
  497. /package/lib/types/core/components/{MessageBox.d.ts → shadcn/MessageBox.d.ts} +0 -0
  498. /package/lib/types/core/components/{ConfirmModal.d.ts → shadcn/modal/ConfirmModal.d.ts} +0 -0
  499. /package/lib/types/core/components/{DeleteModal.d.ts → shadcn/modal/DeleteModal.d.ts} +0 -0
  500. /package/src/core/components/{MessageBox.tsx → shadcn/MessageBox.tsx} +0 -0
@@ -1,4 +1,5 @@
1
1
  import { AgentMessage } from "@vertesia/common";
2
+ import { cn } from "@vertesia/ui/core";
2
3
  import { CheckCircle, Clock } from "lucide-react";
3
4
  import { getWorkstreamId } from "./utils";
4
5
 
@@ -58,19 +59,20 @@ export default function WorkstreamTabs({
58
59
 
59
60
  // If there are no multiple workstreams, return an empty div to maintain layout
60
61
  if (!hasMultipleWorkstreams) {
61
- return <div className="py-1"></div>;
62
+ return <div className="py-0.5"></div>;
62
63
  }
63
64
 
64
65
  return (
65
- <div className="flex overflow-x-auto space-x-1 mb-2 bg-muted border-b-2 border-muted/20 sticky top-0 z-10">
66
+ <div className="flex overflow-x-auto space-x-1 mb-1 bg-muted border-b border-muted/20 sticky top-0 z-10">
66
67
  {sortedWorkstreams.map(([id, name]) => (
67
68
  <button
68
69
  key={id}
69
- className={`px-2 py-1 text-xs font-medium whitespace-nowrap transition-colors flex items-center gap-1.5
70
- ${activeWorkstream === id
70
+ className={cn(
71
+ "px-2 py-1 text-xs font-medium whitespace-nowrap transition-colors flex items-center gap-1.5",
72
+ activeWorkstream === id
71
73
  ? "bg-info text-info border-b-2 border-info"
72
74
  : "text-muted hover:bg-muted border-b-2 border-transparent"
73
- }`}
75
+ )}
74
76
  onClick={() => onSelectWorkstream(id)}
75
77
  title={name.length > 20 ? name : undefined}
76
78
  >
@@ -79,11 +81,12 @@ export default function WorkstreamTabs({
79
81
  {count && count.has(id) && count.get(id)! > 0 && (
80
82
  <div className="flex items-center space-x-1">
81
83
  <span
82
- className={`inline-flex items-center justify-center p-1 text-xs rounded-full
83
- ${activeWorkstream === id
84
+ className={cn(
85
+ "inline-flex items-center justify-center p-1 text-xs rounded-full",
86
+ activeWorkstream === id
84
87
  ? "bg-info text-info"
85
88
  : "bg-muted text-muted"
86
- }`}
89
+ )}
87
90
  >
88
91
  {count.get(id)}
89
92
  </span>
@@ -1,6 +1,6 @@
1
- import dayjs from "dayjs";
2
- import { AgentMessage, AgentMessageType } from "@vertesia/common";
3
1
  import { VertesiaClient } from "@vertesia/client";
2
+ import { AgentMessage, AgentMessageType } from "@vertesia/common";
3
+ import dayjs from "dayjs";
4
4
 
5
5
  export function insertMessageInTimeline(arr: AgentMessage[], m: AgentMessage) {
6
6
  const t = typeof m.timestamp === "number" ? m.timestamp : new Date(m.timestamp).getTime();
@@ -262,6 +262,16 @@ export function getToolStatus(message: AgentMessage): ToolExecutionStatus | unde
262
262
  return message.details?.tool_status;
263
263
  }
264
264
 
265
+ /**
266
+ * Get the activity_group_id from message details, if present.
267
+ * This groups all internal activity updates for one tool-execution cycle.
268
+ */
269
+ export function getActivityGroupId(message: AgentMessage): string | undefined {
270
+ const value = message.details?.activity_group_id;
271
+ if (typeof value !== "string" || value.trim() === "") return undefined;
272
+ return value;
273
+ }
274
+
265
275
  /**
266
276
  * Group consecutive tool call messages together for a cleaner display
267
277
  * Non-tool messages remain as single items
@@ -329,6 +339,12 @@ export function groupMessagesWithStreaming(
329
339
  streamingMessages: Map<string, StreamingData>,
330
340
  activeWorkstream?: string
331
341
  ): RenderableGroup[] {
342
+ // First pass: collect messages by activity_group_id (core grouping signal)
343
+ const activityGroups = new Map<string, {
344
+ messages: AgentMessage[];
345
+ firstTimestamp: number;
346
+ }>();
347
+
332
348
  // First pass: collect messages by tool_iteration (for parallel tool calls in same iteration)
333
349
  const iterationGroups = new Map<number, {
334
350
  messages: AgentMessage[];
@@ -345,7 +361,17 @@ export function groupMessagesWithStreaming(
345
361
  const standaloneMessages: AgentMessage[] = [];
346
362
 
347
363
  for (const message of messages) {
348
- if (isToolCallMessage(message)) {
364
+ const activityGroupId = getActivityGroupId(message);
365
+
366
+ if (activityGroupId) {
367
+ if (!activityGroups.has(activityGroupId)) {
368
+ activityGroups.set(activityGroupId, {
369
+ messages: [],
370
+ firstTimestamp: getTimestampMs(message.timestamp),
371
+ });
372
+ }
373
+ activityGroups.get(activityGroupId)!.messages.push(message);
374
+ } else if (isToolCallMessage(message)) {
349
375
  const toolIteration = getToolIteration(message);
350
376
  const toolRunId = getToolRunId(message);
351
377
 
@@ -380,11 +406,22 @@ export function groupMessagesWithStreaming(
380
406
  type GroupedItem =
381
407
  | { kind: 'message'; message: AgentMessage; timestamp: number }
382
408
  | { kind: 'streaming'; streamingId: string; data: StreamingData; timestamp: number }
409
+ | { kind: 'activity_group'; activityGroupId: string; messages: AgentMessage[]; timestamp: number }
383
410
  | { kind: 'iteration_group'; iteration: number; messages: AgentMessage[]; timestamp: number }
384
411
  | { kind: 'tool_run'; toolRunId: string; messages: AgentMessage[]; timestamp: number };
385
412
 
386
413
  const items: GroupedItem[] = [];
387
414
 
415
+ // Add activity groups first (strongest grouping signal from core)
416
+ activityGroups.forEach((group, activityGroupId) => {
417
+ items.push({
418
+ kind: 'activity_group',
419
+ activityGroupId,
420
+ messages: group.messages,
421
+ timestamp: group.firstTimestamp
422
+ });
423
+ });
424
+
388
425
  // Add iteration groups (parallel tool calls from same iteration)
389
426
  iterationGroups.forEach((group, iteration) => {
390
427
  items.push({
@@ -478,6 +515,23 @@ export function groupMessagesWithStreaming(
478
515
  startTimestamp: item.data.startTimestamp,
479
516
  isComplete: item.data.isComplete
480
517
  });
518
+ } else if (item.kind === 'activity_group') {
519
+ // Core activity group - includes tool calls and related progress updates
520
+ flushToolGroup();
521
+ const sortedMessages = [...item.messages].sort(
522
+ (a, b) => getTimestampMs(a.timestamp) - getTimestampMs(b.timestamp)
523
+ );
524
+ const latestStatus = sortedMessages.reduce<ToolExecutionStatus | undefined>(
525
+ (status, msg) => getToolStatus(msg) || status,
526
+ undefined
527
+ );
528
+ groups.push({
529
+ type: 'tool_group',
530
+ messages: sortedMessages,
531
+ firstTimestamp: item.timestamp,
532
+ toolRunId: item.activityGroupId,
533
+ toolStatus: latestStatus
534
+ });
481
535
  } else if (item.kind === 'iteration_group') {
482
536
  // Iteration group - parallel tool calls from same iteration
483
537
  flushToolGroup();
@@ -529,4 +583,79 @@ export function groupMessagesWithStreaming(
529
583
  flushToolGroup();
530
584
 
531
585
  return groups;
532
- }
586
+ }
587
+
588
+ /**
589
+ * Merge the ToolExecutionStatus of two groups.
590
+ * Priority: error > warning > running > completed > undefined
591
+ */
592
+ export function mergeToolStatus(
593
+ a: ToolExecutionStatus | undefined,
594
+ b: ToolExecutionStatus | undefined,
595
+ ): ToolExecutionStatus | undefined {
596
+ const priority: Record<ToolExecutionStatus, number> = {
597
+ error: 4,
598
+ warning: 3,
599
+ running: 2,
600
+ completed: 1,
601
+ };
602
+ const pa = a ? priority[a] : 0;
603
+ const pb = b ? priority[b] : 0;
604
+ return pa >= pb ? (a ?? b) : b;
605
+ }
606
+
607
+ /**
608
+ * Post-processing step: merge consecutive tool_group entries into a single
609
+ * larger group so the UI shows one block instead of many.
610
+ * Non-tool-group entries (single, streaming) act as separators and are
611
+ * passed through unchanged.
612
+ */
613
+ export function mergeConsecutiveToolGroups(groups: RenderableGroup[]): RenderableGroup[] {
614
+ const merged: RenderableGroup[] = [];
615
+ let pendingToolGroup: {
616
+ messages: AgentMessage[];
617
+ firstTimestamp: number;
618
+ toolRunId?: string;
619
+ toolStatus?: ToolExecutionStatus;
620
+ } | null = null;
621
+
622
+ const flushPending = () => {
623
+ if (pendingToolGroup) {
624
+ merged.push({
625
+ type: 'tool_group',
626
+ messages: pendingToolGroup.messages,
627
+ firstTimestamp: pendingToolGroup.firstTimestamp,
628
+ toolRunId: pendingToolGroup.toolRunId,
629
+ toolStatus: pendingToolGroup.toolStatus,
630
+ });
631
+ pendingToolGroup = null;
632
+ }
633
+ };
634
+
635
+ for (const group of groups) {
636
+ if (group.type === 'tool_group') {
637
+ if (pendingToolGroup) {
638
+ // Merge into the pending group
639
+ pendingToolGroup.messages = [...pendingToolGroup.messages, ...group.messages];
640
+ pendingToolGroup.toolStatus = mergeToolStatus(pendingToolGroup.toolStatus, group.toolStatus);
641
+ // Keep the first toolRunId if any, otherwise take the new one
642
+ if (!pendingToolGroup.toolRunId && group.toolRunId) {
643
+ pendingToolGroup.toolRunId = group.toolRunId;
644
+ }
645
+ } else {
646
+ pendingToolGroup = {
647
+ messages: [...group.messages],
648
+ firstTimestamp: group.firstTimestamp,
649
+ toolRunId: group.toolRunId,
650
+ toolStatus: group.toolStatus,
651
+ };
652
+ }
653
+ } else {
654
+ flushPending();
655
+ merged.push(group);
656
+ }
657
+ }
658
+ flushPending();
659
+
660
+ return merged;
661
+ }
@@ -4,7 +4,7 @@ import { FusionFragmentHandler } from "@vertesia/fusion-ux";
4
4
  import { useUserSession } from "@vertesia/ui/session";
5
5
  import { CodeBlockRendererProps, CodeBlockRendererProvider } from "@vertesia/ui/widgets";
6
6
  import { memo, useEffect, useMemo, useState } from "react";
7
- import { AgentChart, AgentChartSpec } from "./AgentChart";
7
+ import { VegaLiteChartSpec } from "./AgentChart";
8
8
  import { VegaLiteChart } from "./VegaLiteChart";
9
9
 
10
10
  interface SkillWidgetProviderProperties {
@@ -12,13 +12,25 @@ interface SkillWidgetProviderProperties {
12
12
  }
13
13
 
14
14
  /**
15
- * Widget for rendering Recharts-based charts (bar, line, pie, etc.)
16
- * Used for `chart` code blocks that use Recharts format
15
+ * Widget for rendering chart code blocks.
16
+ * `chart` and `vega-lite` now both render through Vega-Lite.
17
17
  */
18
- const RechartsChartWidget = memo(function RechartsChartWidget({ code }: { code: string }) {
18
+ const ChartWidget = memo(function ChartWidget({ code }: { code: string }) {
19
19
  const spec = useMemo(() => {
20
20
  try {
21
- return JSON.parse(code) as AgentChartSpec;
21
+ const parsed = JSON.parse(code);
22
+
23
+ // Wrapped Vega-Lite format
24
+ if (parsed?.library === 'vega-lite' && parsed?.spec && typeof parsed.spec === 'object') {
25
+ return parsed as VegaLiteChartSpec;
26
+ }
27
+
28
+ // Native Vega-Lite spec format
29
+ if (typeof parsed?.$schema === 'string' && parsed.$schema.includes('vega')) {
30
+ return { library: 'vega-lite' as const, spec: parsed };
31
+ }
32
+
33
+ return null;
22
34
  } catch {
23
35
  // During streaming, code may be incomplete JSON - return null to skip rendering
24
36
  return null;
@@ -30,7 +42,7 @@ const RechartsChartWidget = memo(function RechartsChartWidget({ code }: { code:
30
42
  return null;
31
43
  }
32
44
 
33
- return <AgentChart spec={spec} />
45
+ return <VegaLiteChart spec={spec} />
34
46
  });
35
47
 
36
48
  /**
@@ -59,7 +71,7 @@ const VegaLiteChartWidget = memo(function VegaLiteChartWidget({ code }: { code:
59
71
  });
60
72
 
61
73
  const defaultComponents: Record<string, React.FunctionComponent<CodeBlockRendererProps>> = {
62
- "chart": RechartsChartWidget,
74
+ "chart": ChartWidget,
63
75
  "vega-lite": VegaLiteChartWidget,
64
76
  "vegalite": VegaLiteChartWidget,
65
77
  "fusion-fragment": FusionFragmentHandler,
@@ -83,17 +95,22 @@ async function fetchSkillWidgets(client: VertesiaClient): Promise<Record<string,
83
95
  const installedApps = await client.apps.getInstalledApps("tools");
84
96
  const urls = new Set<string>();
85
97
  for (const app of installedApps) {
86
- for (const item of app.manifest.tool_collections || []) {
87
- const collection = normalizeToolCollection(item);
88
- const collUrl = collection.url;
89
- if (collUrl.startsWith("http://") || collUrl.startsWith("https://")) {
90
- const i = collUrl.indexOf("/api/");
91
- if (i > 0) {
92
- const url = collUrl.substring(0, i);
93
- urls.add(url + '/api/widgets');
98
+ if (app.manifest.tool_collections && app.manifest.tool_collections.length > 0) {
99
+ for (const item of app.manifest.tool_collections || []) {
100
+ const collection = normalizeToolCollection(item);
101
+ const collUrl = collection.url;
102
+ if (collUrl.startsWith("http://") || collUrl.startsWith("https://")) {
103
+ const i = collUrl.indexOf("/api/");
104
+ if (i > 0) {
105
+ const url = collUrl.substring(0, i);
106
+ urls.add(url + '/api/widgets');
107
+ }
94
108
  }
95
109
  }
96
110
  }
111
+ if (app.manifest.endpoint && app.manifest.capabilities?.includes("tools")) {
112
+ urls.add(new URL('/api/widgets', app.manifest.endpoint).toString());
113
+ }
97
114
  }
98
115
 
99
116
  const allWidgets = await Promise.all(Array.from(urls).map(url => {
@@ -0,0 +1,190 @@
1
+ import { useCallback, useEffect, useRef, useState } from 'react';
2
+ import { AgentMessage, AgentMessageType, Plan } from '@vertesia/common';
3
+
4
+ export interface UseAgentPlansResult {
5
+ plans: Array<{ plan: Plan; timestamp: number }>;
6
+ activePlanIndex: number;
7
+ setActivePlanIndex: (index: number) => void;
8
+ workstreamStatusMap: Map<number, Map<string, 'pending' | 'in_progress' | 'completed' | 'skipped'>>;
9
+ showInput: boolean;
10
+ /** Whether the sliding plan panel should be shown */
11
+ showSlidingPanel: boolean;
12
+ setShowSlidingPanel: (show: boolean | ((prev: boolean) => boolean)) => void;
13
+ }
14
+
15
+ /**
16
+ * Hook that extracts plan detection and workstream status management from messages.
17
+ *
18
+ * Key improvement: incremental processing. Instead of scanning ALL messages
19
+ * on every change, tracks `lastProcessedIndex` and only scans new messages.
20
+ */
21
+ export function useAgentPlans(
22
+ messages: AgentMessage[],
23
+ interactive: boolean,
24
+ isModal = false,
25
+ ): UseAgentPlansResult {
26
+ const [plans, setPlans] = useState<Array<{ plan: Plan; timestamp: number }>>([]);
27
+ const [activePlanIndex, setActivePlanIndex] = useState<number>(0);
28
+ const [workstreamStatusMap, setWorkstreamStatusMap] = useState<
29
+ Map<number, Map<string, 'pending' | 'in_progress' | 'completed' | 'skipped'>>
30
+ >(new Map());
31
+ const [showInput, setShowInput] = useState(interactive);
32
+ const [showSlidingPanel, setShowSlidingPanel] = useState<boolean>(!isModal);
33
+
34
+ // Incremental processing: track how far we've scanned
35
+ const lastProcessedIndex = useRef<number>(-1);
36
+ // Track known plan timestamps to avoid re-adding
37
+ const knownPlanTimestamps = useRef<Set<number>>(new Set());
38
+
39
+ // Reset when messages are cleared (new run)
40
+ useEffect(() => {
41
+ if (messages.length === 0) {
42
+ setPlans([]);
43
+ setActivePlanIndex(0);
44
+ setWorkstreamStatusMap(new Map());
45
+ setShowSlidingPanel(false);
46
+ lastProcessedIndex.current = -1;
47
+ knownPlanTimestamps.current.clear();
48
+ }
49
+ }, [messages.length === 0]);
50
+
51
+ // Process new messages incrementally
52
+ useEffect(() => {
53
+ if (messages.length === 0) return;
54
+
55
+ const startIdx = lastProcessedIndex.current + 1;
56
+ if (startIdx >= messages.length) {
57
+ // No new messages to process, but still check showInput from last message
58
+ updateShowInput(messages);
59
+ return;
60
+ }
61
+
62
+ let plansChanged = false;
63
+ const newPlansToAdd: Array<{ plan: Plan; timestamp: number }> = [];
64
+ const newWorkstreamUpdates: Array<{
65
+ timestamp: number;
66
+ statusMap: Map<string, 'pending' | 'in_progress' | 'completed' | 'skipped'>;
67
+ }> = [];
68
+
69
+ for (let i = startIdx; i < messages.length; i++) {
70
+ const message = messages[i];
71
+
72
+ if (message.type === AgentMessageType.PLAN) {
73
+ try {
74
+ let newPlanDetails: Plan | null = null;
75
+
76
+ if (message.details && typeof message.details === 'object') {
77
+ if (message.details.plan && Array.isArray(message.details.plan)) {
78
+ newPlanDetails = { plan: message.details.plan } as Plan;
79
+ }
80
+ }
81
+
82
+ if (newPlanDetails) {
83
+ const timestamp =
84
+ typeof message.timestamp === 'number'
85
+ ? message.timestamp
86
+ : new Date(message.timestamp).getTime();
87
+
88
+ if (!knownPlanTimestamps.current.has(timestamp)) {
89
+ knownPlanTimestamps.current.add(timestamp);
90
+ plansChanged = true;
91
+
92
+ newPlansToAdd.push({ plan: newPlanDetails, timestamp });
93
+
94
+ // Initialize workstreams for this plan
95
+ const newWorkstreamStatus = new Map<
96
+ string,
97
+ 'pending' | 'in_progress' | 'completed' | 'skipped'
98
+ >();
99
+ newWorkstreamStatus.set('main', 'in_progress');
100
+
101
+ if (Array.isArray(newPlanDetails.plan)) {
102
+ newPlanDetails.plan.forEach((task) => {
103
+ if (task && typeof task === 'object' && task.id) {
104
+ const taskId = task.id.toString();
105
+ newWorkstreamStatus.set(taskId, task.status || 'pending');
106
+ }
107
+ });
108
+ }
109
+
110
+ newWorkstreamUpdates.push({ timestamp, statusMap: newWorkstreamStatus });
111
+ }
112
+ }
113
+ } catch (error) {
114
+ console.error('Failed to parse plan from message:', error);
115
+ }
116
+ }
117
+ }
118
+
119
+ lastProcessedIndex.current = messages.length - 1;
120
+
121
+ // Batch state updates
122
+ if (plansChanged && newPlansToAdd.length > 0) {
123
+ setPlans((prev) => {
124
+ // Add newest first
125
+ const reversed = [...newPlansToAdd].reverse();
126
+ return [...reversed, ...prev];
127
+ });
128
+ setActivePlanIndex(0);
129
+ setShowSlidingPanel(true);
130
+
131
+ if (newWorkstreamUpdates.length > 0) {
132
+ setWorkstreamStatusMap((prev) => {
133
+ const newMap = new Map(prev);
134
+ for (const update of newWorkstreamUpdates) {
135
+ newMap.set(update.timestamp, update.statusMap);
136
+ }
137
+ return newMap;
138
+ });
139
+ }
140
+ }
141
+
142
+ updateShowInput(messages);
143
+ }, [messages, interactive]);
144
+
145
+ // Auto-show plan panel for the first plan (once only)
146
+ useEffect(() => {
147
+ if (
148
+ plans.length === 1 &&
149
+ !showSlidingPanel &&
150
+ !sessionStorage.getItem('plan-panel-shown')
151
+ ) {
152
+ const notificationTimeout = setTimeout(() => {
153
+ setShowSlidingPanel(true);
154
+ sessionStorage.setItem('plan-panel-shown', 'true');
155
+ }, 500);
156
+ return () => clearTimeout(notificationTimeout);
157
+ }
158
+ }, [plans.length, showSlidingPanel]);
159
+
160
+ // Hide panel when there are no plans
161
+ useEffect(() => {
162
+ if (plans.length === 0) {
163
+ setShowSlidingPanel(false);
164
+ }
165
+ }, [plans.length]);
166
+
167
+ // Helper to determine showInput from the latest message
168
+ const updateShowInput = useCallback((msgs: AgentMessage[]) => {
169
+ const lastMessage = msgs[msgs.length - 1];
170
+ if (!lastMessage) return;
171
+
172
+ if (lastMessage.type === AgentMessageType.TERMINATED) {
173
+ setShowInput(false);
174
+ } else if (interactive) {
175
+ setShowInput(true);
176
+ } else {
177
+ setShowInput(lastMessage.type === AgentMessageType.REQUEST_INPUT);
178
+ }
179
+ }, [interactive]);
180
+
181
+ return {
182
+ plans,
183
+ activePlanIndex,
184
+ setActivePlanIndex,
185
+ workstreamStatusMap,
186
+ showInput,
187
+ showSlidingPanel,
188
+ setShowSlidingPanel,
189
+ };
190
+ }