@vertesia/ui 1.5.0-dev.20260722.120446Z → 1.5.0-dev.20260725.083715Z

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 (307) hide show
  1. package/lib/core/components/shadcn/filters/filterBar.d.ts.map +1 -1
  2. package/lib/core/components/shadcn/filters/filterBar.js +1 -1
  3. package/lib/core/components/shadcn/filters/filterBar.js.map +1 -1
  4. package/lib/core/components/shadcn/modal/dialog.d.ts +1 -1
  5. package/lib/core/components/shadcn/modal/dialog.d.ts.map +1 -1
  6. package/lib/core/components/shadcn/modal/dialog.js +2 -0
  7. package/lib/core/components/shadcn/modal/dialog.js.map +1 -1
  8. package/lib/core/components/shadcn/tabs.d.ts +12 -1
  9. package/lib/core/components/shadcn/tabs.d.ts.map +1 -1
  10. package/lib/core/components/shadcn/tabs.js +12 -4
  11. package/lib/core/components/shadcn/tabs.js.map +1 -1
  12. package/lib/features/agent/chat/AgentRightPanel.d.ts +5 -1
  13. package/lib/features/agent/chat/AgentRightPanel.d.ts.map +1 -1
  14. package/lib/features/agent/chat/AgentRightPanel.js +2 -2
  15. package/lib/features/agent/chat/AgentRightPanel.js.map +1 -1
  16. package/lib/features/agent/chat/ArtifactsTab.d.ts +5 -1
  17. package/lib/features/agent/chat/ArtifactsTab.d.ts.map +1 -1
  18. package/lib/features/agent/chat/ArtifactsTab.js +48 -11
  19. package/lib/features/agent/chat/ArtifactsTab.js.map +1 -1
  20. package/lib/features/agent/chat/DocumentEditingActionCard.d.ts +6 -0
  21. package/lib/features/agent/chat/DocumentEditingActionCard.d.ts.map +1 -0
  22. package/lib/features/agent/chat/DocumentEditingActionCard.js +129 -0
  23. package/lib/features/agent/chat/DocumentEditingActionCard.js.map +1 -0
  24. package/lib/features/agent/chat/ModernAgentConversation.d.ts +19 -1
  25. package/lib/features/agent/chat/ModernAgentConversation.d.ts.map +1 -1
  26. package/lib/features/agent/chat/ModernAgentConversation.js +125 -27
  27. package/lib/features/agent/chat/ModernAgentConversation.js.map +1 -1
  28. package/lib/features/agent/chat/ModernAgentOutput/AgentMarkdownAnchor.d.ts +45 -0
  29. package/lib/features/agent/chat/ModernAgentOutput/AgentMarkdownAnchor.d.ts.map +1 -0
  30. package/lib/features/agent/chat/ModernAgentOutput/AgentMarkdownAnchor.js +40 -0
  31. package/lib/features/agent/chat/ModernAgentOutput/AgentMarkdownAnchor.js.map +1 -0
  32. package/lib/features/agent/chat/ModernAgentOutput/AllMessagesMixed.d.ts +3 -1
  33. package/lib/features/agent/chat/ModernAgentOutput/AllMessagesMixed.d.ts.map +1 -1
  34. package/lib/features/agent/chat/ModernAgentOutput/AllMessagesMixed.js +94 -49
  35. package/lib/features/agent/chat/ModernAgentOutput/AllMessagesMixed.js.map +1 -1
  36. package/lib/features/agent/chat/ModernAgentOutput/AttachmentPreview.d.ts +2 -1
  37. package/lib/features/agent/chat/ModernAgentOutput/AttachmentPreview.d.ts.map +1 -1
  38. package/lib/features/agent/chat/ModernAgentOutput/AttachmentPreview.js +9 -5
  39. package/lib/features/agent/chat/ModernAgentOutput/AttachmentPreview.js.map +1 -1
  40. package/lib/features/agent/chat/ModernAgentOutput/CollapsibleAgentMarkdown.d.ts +25 -0
  41. package/lib/features/agent/chat/ModernAgentOutput/CollapsibleAgentMarkdown.d.ts.map +1 -0
  42. package/lib/features/agent/chat/ModernAgentOutput/CollapsibleAgentMarkdown.js +33 -0
  43. package/lib/features/agent/chat/ModernAgentOutput/CollapsibleAgentMarkdown.js.map +1 -0
  44. package/lib/features/agent/chat/ModernAgentOutput/MessageItem.d.ts +3 -1
  45. package/lib/features/agent/chat/ModernAgentOutput/MessageItem.d.ts.map +1 -1
  46. package/lib/features/agent/chat/ModernAgentOutput/MessageItem.js +22 -24
  47. package/lib/features/agent/chat/ModernAgentOutput/MessageItem.js.map +1 -1
  48. package/lib/features/agent/chat/ModernAgentOutput/ResourceChangeSummary.d.ts +14 -0
  49. package/lib/features/agent/chat/ModernAgentOutput/ResourceChangeSummary.d.ts.map +1 -0
  50. package/lib/features/agent/chat/ModernAgentOutput/ResourceChangeSummary.js +21 -0
  51. package/lib/features/agent/chat/ModernAgentOutput/ResourceChangeSummary.js.map +1 -0
  52. package/lib/features/agent/chat/ModernAgentOutput/ResourceChip.d.ts +30 -0
  53. package/lib/features/agent/chat/ModernAgentOutput/ResourceChip.d.ts.map +1 -0
  54. package/lib/features/agent/chat/ModernAgentOutput/ResourceChip.js +53 -0
  55. package/lib/features/agent/chat/ModernAgentOutput/ResourceChip.js.map +1 -0
  56. package/lib/features/agent/chat/ModernAgentOutput/ToolCallGroup.d.ts.map +1 -1
  57. package/lib/features/agent/chat/ModernAgentOutput/ToolCallGroup.js +21 -2
  58. package/lib/features/agent/chat/ModernAgentOutput/ToolCallGroup.js.map +1 -1
  59. package/lib/features/agent/chat/ModernAgentOutput/resourceLinks.d.ts +6 -0
  60. package/lib/features/agent/chat/ModernAgentOutput/resourceLinks.d.ts.map +1 -0
  61. package/lib/features/agent/chat/ModernAgentOutput/resourceLinks.js +29 -0
  62. package/lib/features/agent/chat/ModernAgentOutput/resourceLinks.js.map +1 -0
  63. package/lib/features/agent/chat/ModernAgentOutput/resourceSummary.d.ts +33 -0
  64. package/lib/features/agent/chat/ModernAgentOutput/resourceSummary.d.ts.map +1 -0
  65. package/lib/features/agent/chat/ModernAgentOutput/resourceSummary.js +129 -0
  66. package/lib/features/agent/chat/ModernAgentOutput/resourceSummary.js.map +1 -0
  67. package/lib/features/agent/chat/ModernAgentOutput/utils.d.ts +7 -0
  68. package/lib/features/agent/chat/ModernAgentOutput/utils.d.ts.map +1 -1
  69. package/lib/features/agent/chat/ModernAgentOutput/utils.js +11 -1
  70. package/lib/features/agent/chat/ModernAgentOutput/utils.js.map +1 -1
  71. package/lib/features/agent/chat/hooks/useAgentStream.d.ts +1 -1
  72. package/lib/features/agent/chat/hooks/useAgentStream.d.ts.map +1 -1
  73. package/lib/features/agent/chat/hooks/useAgentStream.js +24 -9
  74. package/lib/features/agent/chat/hooks/useAgentStream.js.map +1 -1
  75. package/lib/features/agent/chat/index.d.ts +2 -1
  76. package/lib/features/agent/chat/index.d.ts.map +1 -1
  77. package/lib/features/agent/chat/index.js +3 -0
  78. package/lib/features/agent/chat/index.js.map +1 -1
  79. package/lib/features/store/objects/DocumentSearchResults.js +2 -2
  80. package/lib/features/store/objects/DocumentSearchResults.js.map +1 -1
  81. package/lib/features/store/objects/components/ContentOverview.d.ts +2 -1
  82. package/lib/features/store/objects/components/ContentOverview.d.ts.map +1 -1
  83. package/lib/features/store/objects/components/ContentOverview.js +86 -15
  84. package/lib/features/store/objects/components/ContentOverview.js.map +1 -1
  85. package/lib/features/store/objects/components/DocumentEditingConfigurationSelector.d.ts +16 -0
  86. package/lib/features/store/objects/components/DocumentEditingConfigurationSelector.d.ts.map +1 -0
  87. package/lib/features/store/objects/components/DocumentEditingConfigurationSelector.js +116 -0
  88. package/lib/features/store/objects/components/DocumentEditingConfigurationSelector.js.map +1 -0
  89. package/lib/features/store/objects/components/DocumentEditingLockStatus.d.ts +7 -0
  90. package/lib/features/store/objects/components/DocumentEditingLockStatus.d.ts.map +1 -0
  91. package/lib/features/store/objects/components/DocumentEditingLockStatus.js +13 -0
  92. package/lib/features/store/objects/components/DocumentEditingLockStatus.js.map +1 -0
  93. package/lib/features/store/objects/components/DocumentEditingPanel.d.ts +48 -0
  94. package/lib/features/store/objects/components/DocumentEditingPanel.d.ts.map +1 -0
  95. package/lib/features/store/objects/components/DocumentEditingPanel.js +720 -0
  96. package/lib/features/store/objects/components/DocumentEditingPanel.js.map +1 -0
  97. package/lib/features/store/objects/components/TextEditorPanel.d.ts.map +1 -1
  98. package/lib/features/store/objects/components/TextEditorPanel.js +22 -9
  99. package/lib/features/store/objects/components/TextEditorPanel.js.map +1 -1
  100. package/lib/features/store/objects/components/documentArtifactRefs.d.ts +26 -0
  101. package/lib/features/store/objects/components/documentArtifactRefs.d.ts.map +1 -0
  102. package/lib/features/store/objects/components/documentArtifactRefs.js +52 -0
  103. package/lib/features/store/objects/components/documentArtifactRefs.js.map +1 -0
  104. package/lib/features/store/objects/components/documentEditingAgentConfig.d.ts +4 -0
  105. package/lib/features/store/objects/components/documentEditingAgentConfig.d.ts.map +1 -0
  106. package/lib/features/store/objects/components/documentEditingAgentConfig.js +40 -0
  107. package/lib/features/store/objects/components/documentEditingAgentConfig.js.map +1 -0
  108. package/lib/features/store/objects/components/documentEditingPrompts.d.ts +3 -0
  109. package/lib/features/store/objects/components/documentEditingPrompts.d.ts.map +1 -0
  110. package/lib/features/store/objects/components/documentEditingPrompts.js +13 -0
  111. package/lib/features/store/objects/components/documentEditingPrompts.js.map +1 -0
  112. package/lib/features/store/objects/components/documentEditingRun.d.ts +27 -0
  113. package/lib/features/store/objects/components/documentEditingRun.d.ts.map +1 -0
  114. package/lib/features/store/objects/components/documentEditingRun.js +126 -0
  115. package/lib/features/store/objects/components/documentEditingRun.js.map +1 -0
  116. package/lib/features/store/objects/components/documentEditingTarget.d.ts +20 -0
  117. package/lib/features/store/objects/components/documentEditingTarget.d.ts.map +1 -0
  118. package/lib/features/store/objects/components/documentEditingTarget.js +40 -0
  119. package/lib/features/store/objects/components/documentEditingTarget.js.map +1 -0
  120. package/lib/features/store/objects/components/index.d.ts +1 -0
  121. package/lib/features/store/objects/components/index.d.ts.map +1 -1
  122. package/lib/features/store/objects/components/index.js +1 -0
  123. package/lib/features/store/objects/components/index.js.map +1 -1
  124. package/lib/features/store/objects/components/useContentPanelHooks.d.ts +5 -1
  125. package/lib/features/store/objects/components/useContentPanelHooks.d.ts.map +1 -1
  126. package/lib/features/store/objects/components/useContentPanelHooks.js +53 -29
  127. package/lib/features/store/objects/components/useContentPanelHooks.js.map +1 -1
  128. package/lib/features/store/objects/components/useDownloadFile.d.ts +2 -1
  129. package/lib/features/store/objects/components/useDownloadFile.d.ts.map +1 -1
  130. package/lib/features/store/objects/components/useDownloadFile.js +3 -0
  131. package/lib/features/store/objects/components/useDownloadFile.js.map +1 -1
  132. package/lib/features/store/objects/selection/actions/StartWorkflowButton.js +1 -1
  133. package/lib/features/store/objects/selection/actions/StartWorkflowButton.js.map +1 -1
  134. package/lib/i18n/locales/ar.json +118 -1
  135. package/lib/i18n/locales/de.json +118 -1
  136. package/lib/i18n/locales/en.json +118 -0
  137. package/lib/i18n/locales/es.json +118 -1
  138. package/lib/i18n/locales/fr.json +118 -1
  139. package/lib/i18n/locales/it.json +118 -1
  140. package/lib/i18n/locales/ja.json +118 -1
  141. package/lib/i18n/locales/ko.json +118 -1
  142. package/lib/i18n/locales/pt.json +118 -1
  143. package/lib/i18n/locales/ru.json +118 -1
  144. package/lib/i18n/locales/tr.json +118 -1
  145. package/lib/i18n/locales/zh-TW.json +118 -1
  146. package/lib/i18n/locales/zh.json +118 -1
  147. package/lib/rich-text/EditorToolbar.d.ts +37 -0
  148. package/lib/rich-text/EditorToolbar.d.ts.map +1 -0
  149. package/lib/rich-text/EditorToolbar.js +215 -0
  150. package/lib/rich-text/EditorToolbar.js.map +1 -0
  151. package/lib/rich-text/VertesiaRichTextEditor.d.ts +26 -0
  152. package/lib/rich-text/VertesiaRichTextEditor.d.ts.map +1 -0
  153. package/lib/rich-text/VertesiaRichTextEditor.js +67 -0
  154. package/lib/rich-text/VertesiaRichTextEditor.js.map +1 -0
  155. package/lib/rich-text/index.d.ts +2 -0
  156. package/lib/rich-text/index.d.ts.map +1 -0
  157. package/lib/rich-text/index.js +2 -0
  158. package/lib/rich-text/index.js.map +1 -0
  159. package/lib/vertesia-ui-core.js +2 -2
  160. package/lib/vertesia-ui-core.js.map +1 -1
  161. package/lib/vertesia-ui-features.js +35 -30
  162. package/lib/vertesia-ui-features.js.map +1 -1
  163. package/lib/vertesia-ui-i18n.js +14 -14
  164. package/lib/vertesia-ui-i18n.js.map +1 -1
  165. package/lib/vertesia-ui-rich-text.js +5 -0
  166. package/lib/vertesia-ui-rich-text.js.map +1 -0
  167. package/lib/vertesia-ui-widgets.js +25 -7
  168. package/lib/vertesia-ui-widgets.js.map +1 -1
  169. package/lib/widgets/markdown/AgentResourceResolver.d.ts +31 -0
  170. package/lib/widgets/markdown/AgentResourceResolver.d.ts.map +1 -0
  171. package/lib/widgets/markdown/AgentResourceResolver.js +39 -0
  172. package/lib/widgets/markdown/AgentResourceResolver.js.map +1 -0
  173. package/lib/widgets/markdown/ArtifactEditingSurface.d.ts +63 -0
  174. package/lib/widgets/markdown/ArtifactEditingSurface.d.ts.map +1 -0
  175. package/lib/widgets/markdown/ArtifactEditingSurface.js +582 -0
  176. package/lib/widgets/markdown/ArtifactEditingSurface.js.map +1 -0
  177. package/lib/widgets/markdown/CollaborativeMarkdownRenderer.d.ts +69 -0
  178. package/lib/widgets/markdown/CollaborativeMarkdownRenderer.d.ts.map +1 -0
  179. package/lib/widgets/markdown/CollaborativeMarkdownRenderer.js +374 -0
  180. package/lib/widgets/markdown/CollaborativeMarkdownRenderer.js.map +1 -0
  181. package/lib/widgets/markdown/MarkdownLink.d.ts +3 -1
  182. package/lib/widgets/markdown/MarkdownLink.d.ts.map +1 -1
  183. package/lib/widgets/markdown/MarkdownLink.js +41 -14
  184. package/lib/widgets/markdown/MarkdownLink.js.map +1 -1
  185. package/lib/widgets/markdown/MarkdownRenderer.d.ts +8 -1
  186. package/lib/widgets/markdown/MarkdownRenderer.d.ts.map +1 -1
  187. package/lib/widgets/markdown/MarkdownRenderer.js +20 -4
  188. package/lib/widgets/markdown/MarkdownRenderer.js.map +1 -1
  189. package/lib/widgets/markdown/index.d.ts +5 -1
  190. package/lib/widgets/markdown/index.d.ts.map +1 -1
  191. package/lib/widgets/markdown/index.js +5 -1
  192. package/lib/widgets/markdown/index.js.map +1 -1
  193. package/lib/widgets/markdown/normalizeCustomSchemeLinks.d.ts.map +1 -1
  194. package/lib/widgets/markdown/normalizeCustomSchemeLinks.js +14 -2
  195. package/lib/widgets/markdown/normalizeCustomSchemeLinks.js.map +1 -1
  196. package/lib/widgets/markdown/textDiff.d.ts +52 -0
  197. package/lib/widgets/markdown/textDiff.d.ts.map +1 -0
  198. package/lib/widgets/markdown/textDiff.js +362 -0
  199. package/lib/widgets/markdown/textDiff.js.map +1 -0
  200. package/lib/widgets/markdown/useArtifactContent.d.ts +5 -3
  201. package/lib/widgets/markdown/useArtifactContent.d.ts.map +1 -1
  202. package/lib/widgets/markdown/useArtifactContent.js +6 -3
  203. package/lib/widgets/markdown/useArtifactContent.js.map +1 -1
  204. package/lib/widgets/markdown/useResolvedUrl.d.ts +1 -5
  205. package/lib/widgets/markdown/useResolvedUrl.d.ts.map +1 -1
  206. package/lib/widgets/markdown/useResolvedUrl.js +19 -31
  207. package/lib/widgets/markdown/useResolvedUrl.js.map +1 -1
  208. package/lib/widgets/xml-viewer/hooks/useXMLViewer.d.ts +9 -0
  209. package/lib/widgets/xml-viewer/hooks/useXMLViewer.d.ts.map +1 -1
  210. package/lib/widgets/xml-viewer/hooks/useXMLViewer.js +20 -17
  211. package/lib/widgets/xml-viewer/hooks/useXMLViewer.js.map +1 -1
  212. package/package.json +13 -9
  213. package/src/__tests__/a11y.test.tsx +4 -1
  214. package/src/__tests__/axe-helper.ts +17 -7
  215. package/src/__tests__/setup.ts +25 -0
  216. package/src/core/components/shadcn/filters/filterBar.tsx +1 -0
  217. package/src/core/components/shadcn/modal/dialog.tsx +3 -1
  218. package/src/core/components/shadcn/tabs.test.tsx +65 -0
  219. package/src/core/components/shadcn/tabs.tsx +25 -3
  220. package/src/features/agent/chat/AgentRightPanel.tsx +16 -1
  221. package/src/features/agent/chat/ArtifactsTab.test.tsx +55 -0
  222. package/src/features/agent/chat/ArtifactsTab.tsx +203 -52
  223. package/src/features/agent/chat/DocumentEditingActionCard.test.tsx +105 -0
  224. package/src/features/agent/chat/DocumentEditingActionCard.tsx +210 -0
  225. package/src/features/agent/chat/ModernAgentConversation.test.tsx +237 -40
  226. package/src/features/agent/chat/ModernAgentConversation.tsx +247 -75
  227. package/src/features/agent/chat/ModernAgentOutput/AgentMarkdownAnchor.test.tsx +79 -0
  228. package/src/features/agent/chat/ModernAgentOutput/AgentMarkdownAnchor.tsx +94 -0
  229. package/src/features/agent/chat/ModernAgentOutput/AllMessagesMixed.test.tsx +257 -34
  230. package/src/features/agent/chat/ModernAgentOutput/AllMessagesMixed.tsx +217 -105
  231. package/src/features/agent/chat/ModernAgentOutput/AttachmentPreview.tsx +17 -0
  232. package/src/features/agent/chat/ModernAgentOutput/CollapsibleAgentMarkdown.test.tsx +44 -0
  233. package/src/features/agent/chat/ModernAgentOutput/CollapsibleAgentMarkdown.tsx +88 -0
  234. package/src/features/agent/chat/ModernAgentOutput/MessageItem.tsx +30 -46
  235. package/src/features/agent/chat/ModernAgentOutput/ResourceChangeSummary.tsx +40 -0
  236. package/src/features/agent/chat/ModernAgentOutput/ResourceChip.test.tsx +148 -0
  237. package/src/features/agent/chat/ModernAgentOutput/ResourceChip.tsx +141 -0
  238. package/src/features/agent/chat/ModernAgentOutput/ToolCallGroup.tsx +33 -1
  239. package/src/features/agent/chat/ModernAgentOutput/resourceLinks.tsx +43 -0
  240. package/src/features/agent/chat/ModernAgentOutput/resourceSummary.test.ts +229 -0
  241. package/src/features/agent/chat/ModernAgentOutput/resourceSummary.ts +152 -0
  242. package/src/features/agent/chat/ModernAgentOutput/utils.test.ts +17 -0
  243. package/src/features/agent/chat/ModernAgentOutput/utils.ts +14 -1
  244. package/src/features/agent/chat/hooks/useAgentStream.test.tsx +188 -0
  245. package/src/features/agent/chat/hooks/useAgentStream.ts +28 -8
  246. package/src/features/agent/chat/index.ts +11 -0
  247. package/src/features/store/objects/DocumentSearchResults.tsx +2 -2
  248. package/src/features/store/objects/components/ContentOverview.tsx +216 -65
  249. package/src/features/store/objects/components/DocumentEditingConfigurationSelector.test.ts +34 -0
  250. package/src/features/store/objects/components/DocumentEditingConfigurationSelector.tsx +211 -0
  251. package/src/features/store/objects/components/DocumentEditingLockStatus.test.tsx +32 -0
  252. package/src/features/store/objects/components/DocumentEditingLockStatus.tsx +45 -0
  253. package/src/features/store/objects/components/DocumentEditingPanel.test.tsx +336 -0
  254. package/src/features/store/objects/components/DocumentEditingPanel.tsx +1236 -0
  255. package/src/features/store/objects/components/TextEditorPanel.test.tsx +48 -0
  256. package/src/features/store/objects/components/TextEditorPanel.tsx +41 -20
  257. package/src/features/store/objects/components/documentArtifactRefs.test.ts +65 -0
  258. package/src/features/store/objects/components/documentArtifactRefs.ts +72 -0
  259. package/src/features/store/objects/components/documentEditingAgentConfig.test.ts +28 -0
  260. package/src/features/store/objects/components/documentEditingAgentConfig.ts +41 -0
  261. package/src/features/store/objects/components/documentEditingPrompts.test.ts +26 -0
  262. package/src/features/store/objects/components/documentEditingPrompts.ts +12 -0
  263. package/src/features/store/objects/components/documentEditingRun.test.ts +176 -0
  264. package/src/features/store/objects/components/documentEditingRun.ts +184 -0
  265. package/src/features/store/objects/components/documentEditingTarget.test.ts +96 -0
  266. package/src/features/store/objects/components/documentEditingTarget.ts +63 -0
  267. package/src/features/store/objects/components/index.ts +1 -0
  268. package/src/features/store/objects/components/useContentPanelHooks.ts +52 -27
  269. package/src/features/store/objects/components/useDownloadFile.test.ts +20 -0
  270. package/src/features/store/objects/components/useDownloadFile.ts +5 -1
  271. package/src/features/store/objects/selection/actions/StartWorkflowButton.tsx +2 -2
  272. package/src/i18n/locales/ar.json +118 -1
  273. package/src/i18n/locales/de.json +118 -1
  274. package/src/i18n/locales/en.json +118 -0
  275. package/src/i18n/locales/es.json +118 -1
  276. package/src/i18n/locales/fr.json +118 -1
  277. package/src/i18n/locales/it.json +118 -1
  278. package/src/i18n/locales/ja.json +118 -1
  279. package/src/i18n/locales/ko.json +118 -1
  280. package/src/i18n/locales/pt.json +118 -1
  281. package/src/i18n/locales/ru.json +118 -1
  282. package/src/i18n/locales/tr.json +118 -1
  283. package/src/i18n/locales/zh-TW.json +118 -1
  284. package/src/i18n/locales/zh.json +118 -1
  285. package/src/rich-text/EditorToolbar.tsx +708 -0
  286. package/src/rich-text/VertesiaRichTextEditor.test.tsx +211 -0
  287. package/src/rich-text/VertesiaRichTextEditor.tsx +241 -0
  288. package/src/rich-text/index.ts +9 -0
  289. package/src/session/UserSession.test.ts +11 -11
  290. package/src/widgets/markdown/AgentResourceResolver.test.ts +24 -0
  291. package/src/widgets/markdown/AgentResourceResolver.tsx +70 -0
  292. package/src/widgets/markdown/ArtifactEditingSurface.test.tsx +537 -0
  293. package/src/widgets/markdown/ArtifactEditingSurface.tsx +878 -0
  294. package/src/widgets/markdown/CollaborativeMarkdownRenderer.test.tsx +484 -0
  295. package/src/widgets/markdown/CollaborativeMarkdownRenderer.tsx +825 -0
  296. package/src/widgets/markdown/MarkdownLink.test.tsx +122 -0
  297. package/src/widgets/markdown/MarkdownLink.tsx +102 -17
  298. package/src/widgets/markdown/MarkdownRenderer.tsx +30 -3
  299. package/src/widgets/markdown/index.ts +39 -1
  300. package/src/widgets/markdown/normalizeCustomSchemeLinks.ts +15 -2
  301. package/src/widgets/markdown/textDiff.test.ts +156 -0
  302. package/src/widgets/markdown/textDiff.ts +399 -0
  303. package/src/widgets/markdown/useArtifactContent.ts +9 -3
  304. package/src/widgets/markdown/useResolvedUrl.test.ts +29 -40
  305. package/src/widgets/markdown/useResolvedUrl.ts +33 -35
  306. package/src/widgets/xml-viewer/hooks/useXMLViewer.test.ts +26 -0
  307. package/src/widgets/xml-viewer/hooks/useXMLViewer.ts +23 -18
@@ -124,6 +124,194 @@ describe('useAgentStream', () => {
124
124
  });
125
125
  });
126
126
 
127
+ it('retains structured update events even when their display message is empty', async () => {
128
+ const structuredUpdate: AgentMessage = {
129
+ ...createMessage(AgentMessageType.UPDATE, 1_000, ''),
130
+ details: { event_class: 'document_updated', document_id: 'document-1' },
131
+ };
132
+ const streamMessages = vi.fn<
133
+ (
134
+ id: string,
135
+ onMessage?: (message: AgentMessage, exitFn?: (payload: unknown) => void) => void,
136
+ since?: number,
137
+ signal?: AbortSignal,
138
+ options?: AgentRunStreamMessagesOptions,
139
+ ) => Promise<unknown>
140
+ >(async (_id, _onMessage, _since, _signal, options) => {
141
+ options?.onHistoryLoaded?.([structuredUpdate]);
142
+ return null;
143
+ });
144
+ const client = createClient(streamMessages);
145
+
146
+ const { result } = renderHook(() => useAgentStream(client, 'agent-run-1'));
147
+
148
+ await waitFor(() => {
149
+ expect(result.current.messages).toEqual([structuredUpdate]);
150
+ });
151
+ });
152
+
153
+ it('retains resource-bearing lifecycle messages loaded from history even when their text is empty', async () => {
154
+ const resourceMessage: AgentMessage = {
155
+ ...createMessage(AgentMessageType.THOUGHT, 1_000, ''),
156
+ details: {
157
+ event_class: 'activity',
158
+ tool: 'create_document',
159
+ tool_event: 'completed',
160
+ resources: [{ type: 'document', id: 'doc-1', label: 'Doc One', action: 'created' }],
161
+ },
162
+ };
163
+ const streamMessages = vi.fn<
164
+ (
165
+ id: string,
166
+ onMessage?: (message: AgentMessage, exitFn?: (payload: unknown) => void) => void,
167
+ since?: number,
168
+ signal?: AbortSignal,
169
+ options?: AgentRunStreamMessagesOptions,
170
+ ) => Promise<unknown>
171
+ >(async (_id, _onMessage, _since, _signal, options) => {
172
+ options?.onHistoryLoaded?.([resourceMessage]);
173
+ return null;
174
+ });
175
+ const client = createClient(streamMessages);
176
+
177
+ const { result } = renderHook(() => useAgentStream(client, 'agent-run-1'));
178
+
179
+ await waitFor(() => {
180
+ expect(result.current.messages).toEqual([resourceMessage]);
181
+ });
182
+ });
183
+
184
+ it('retains resource-bearing lifecycle messages received from the live stream', async () => {
185
+ let onStreamMessage: ((message: AgentMessage) => void) | undefined;
186
+ const streamMessages = vi.fn<
187
+ (
188
+ id: string,
189
+ onMessage?: (message: AgentMessage, exitFn?: (payload: unknown) => void) => void,
190
+ since?: number,
191
+ signal?: AbortSignal,
192
+ ) => Promise<unknown>
193
+ >(async (_id, onMessage) => {
194
+ onStreamMessage = onMessage;
195
+ return null;
196
+ });
197
+ const client = createClient(streamMessages);
198
+ const resourceMessage: AgentMessage = {
199
+ ...createMessage(AgentMessageType.THOUGHT, 1_000, ''),
200
+ details: {
201
+ event_class: 'activity',
202
+ tool: 'create_interaction',
203
+ tool_event: 'completed',
204
+ resources: [{ type: 'interaction', id: 'interaction-1', label: 'Daily News Agent', action: 'created' }],
205
+ },
206
+ };
207
+
208
+ const { result } = renderHook(() => useAgentStream(client, 'agent-run-1'));
209
+
210
+ await waitFor(() => {
211
+ expect(onStreamMessage).toBeDefined();
212
+ });
213
+
214
+ act(() => {
215
+ onStreamMessage?.(resourceMessage);
216
+ });
217
+
218
+ await waitFor(() => {
219
+ expect(result.current.messages).toEqual([resourceMessage]);
220
+ });
221
+ });
222
+
223
+ it('continues to discard empty housekeeping messages without resources', async () => {
224
+ const emptyThought = createMessage(AgentMessageType.THOUGHT, 1_000, '');
225
+ const streamMessages = vi.fn<
226
+ (
227
+ id: string,
228
+ onMessage?: (message: AgentMessage, exitFn?: (payload: unknown) => void) => void,
229
+ since?: number,
230
+ signal?: AbortSignal,
231
+ options?: AgentRunStreamMessagesOptions,
232
+ ) => Promise<unknown>
233
+ >(async (_id, onMessage, _since, _signal, options) => {
234
+ options?.onHistoryLoaded?.([emptyThought]);
235
+ onMessage?.(emptyThought);
236
+ return null;
237
+ });
238
+ const client = createClient(streamMessages);
239
+
240
+ const { result } = renderHook(() => useAgentStream(client, 'agent-run-1'));
241
+
242
+ await waitFor(() => {
243
+ expect(result.current.initialHistoryStatus).toBe('has_messages');
244
+ });
245
+ expect(result.current.messages).toEqual([]);
246
+ });
247
+
248
+ it('forwards delivered stream messages without reconnecting when the callback changes', async () => {
249
+ let deliver: ((message: AgentMessage) => void) | undefined;
250
+ const streamMessages = vi.fn<
251
+ (
252
+ id: string,
253
+ onMessage?: (message: AgentMessage, exitFn?: (payload: unknown) => void) => void,
254
+ since?: number,
255
+ signal?: AbortSignal,
256
+ options?: AgentRunStreamMessagesOptions,
257
+ ) => Promise<unknown>
258
+ >(async (_id, onMessage, _since, _signal, options) => {
259
+ deliver = onMessage;
260
+ options?.onHistoryLoaded?.([]);
261
+ return null;
262
+ });
263
+ const client = createClient(streamMessages);
264
+ const firstCallback = vi.fn();
265
+ const secondCallback = vi.fn();
266
+ const { rerender } = renderHook(
267
+ ({ onMessage }: { onMessage: (message: AgentMessage) => void }) =>
268
+ useAgentStream(client, 'agent-run-1', onMessage),
269
+ { initialProps: { onMessage: firstCallback } },
270
+ );
271
+
272
+ await waitFor(() => expect(deliver).toBeDefined());
273
+ act(() => deliver?.(createMessage(AgentMessageType.UPDATE, 1_000, 'first update')));
274
+ expect(firstCallback).toHaveBeenCalledTimes(1);
275
+
276
+ rerender({ onMessage: secondCallback });
277
+ act(() => deliver?.(createMessage(AgentMessageType.UPDATE, 1_100, 'second update')));
278
+
279
+ expect(firstCallback).toHaveBeenCalledTimes(1);
280
+ expect(secondCallback).toHaveBeenCalledTimes(1);
281
+ expect(streamMessages).toHaveBeenCalledTimes(1);
282
+ });
283
+
284
+ it('does not forward replayed history deliveries to onMessage', async () => {
285
+ let deliver: ((message: AgentMessage) => void) | undefined;
286
+ const historical = createMessage(AgentMessageType.UPDATE, 1_000, 'historical update');
287
+ const streamMessages = vi.fn<
288
+ (
289
+ id: string,
290
+ onMessage?: (message: AgentMessage, exitFn?: (payload: unknown) => void) => void,
291
+ since?: number,
292
+ signal?: AbortSignal,
293
+ options?: AgentRunStreamMessagesOptions,
294
+ ) => Promise<unknown>
295
+ >(async (_id, onMessage, _since, _signal, options) => {
296
+ deliver = onMessage;
297
+ options?.onHistoryLoaded?.([historical]);
298
+ // Mirror completed-run behavior where archived events can be replayed
299
+ // immediately, before React has rendered the history state update.
300
+ onMessage?.(historical);
301
+ onMessage?.(createMessage(AgentMessageType.UPDATE, 900, 'older replay'));
302
+ return null;
303
+ });
304
+ const client = createClient(streamMessages);
305
+ const onMessage = vi.fn();
306
+ renderHook(() => useAgentStream(client, 'agent-run-1', onMessage));
307
+
308
+ await waitFor(() => expect(deliver).toBeDefined());
309
+ expect(onMessage).not.toHaveBeenCalled();
310
+
311
+ act(() => deliver?.(createMessage(AgentMessageType.UPDATE, 1_100, 'live update')));
312
+ expect(onMessage).toHaveBeenCalledTimes(1);
313
+ });
314
+
127
315
  it('marks initial history as errored when the history fetch fails', async () => {
128
316
  const streamMessages = vi.fn<
129
317
  (
@@ -5,6 +5,7 @@ import {
5
5
  AgentMessageType,
6
6
  type ConversationFile,
7
7
  type FileProcessingDetails,
8
+ getResourcesFromMessage,
8
9
  } from '@vertesia/common';
9
10
  import { useCallback, useEffect, useRef, useState } from 'react';
10
11
  import {
@@ -98,12 +99,16 @@ function isTimelineStateMessage(message: AgentMessage): boolean {
98
99
  function shouldStoreTimelineMessage(message: AgentMessage): boolean {
99
100
  if (message.type === AgentMessageType.STREAMING_CHUNK) return false;
100
101
 
102
+ // Structured resource events must survive replay even if a producer accidentally
103
+ // omits the human-readable display message.
104
+ if (message.type === AgentMessageType.UPDATE && typeof message.details?.event_class === 'string') return true;
105
+
101
106
  if (message.type === AgentMessageType.SYSTEM) {
102
107
  const details = message.details as FileProcessingDetails | undefined;
103
108
  if (details?.system_type === 'file_processing' && details.files) return false;
104
109
  }
105
110
 
106
- return Boolean(message.message) || isTimelineStateMessage(message);
111
+ return Boolean(message.message) || isTimelineStateMessage(message) || getResourcesFromMessage(message).length > 0;
107
112
  }
108
113
 
109
114
  function summarizeMessage(message: AgentMessage | undefined): Record<string, unknown> | undefined {
@@ -210,13 +215,19 @@ function getStreamingReplacementKeys(message: AgentMessage): string[] {
210
215
  * File-processing SYSTEM messages are passed through to the messages array
211
216
  * (Option A from the plan) so downstream hooks can react to them.
212
217
  */
213
- export function useAgentStream(client: VertesiaClient, agentRunId: string): UseAgentStreamResult {
218
+ export function useAgentStream(
219
+ client: VertesiaClient,
220
+ agentRunId: string,
221
+ onMessage?: (message: AgentMessage) => void,
222
+ ): UseAgentStreamResult {
214
223
  const [messages, setMessages] = useState<AgentMessage[]>([]);
215
224
  const [isCompleted, setIsCompleted] = useState(false);
216
225
  const [initialHistoryStatus, setInitialHistoryStatus] =
217
226
  useState<UseAgentStreamResult['initialHistoryStatus']>('loading');
218
227
  const [agentRunStatus, setAgentRunStatus] = useState<string | null>(null);
219
228
  const [workflowRunId, setWorkflowRunId] = useState<string | null>(null);
229
+ const onMessageRef = useRef(onMessage);
230
+ onMessageRef.current = onMessage;
220
231
 
221
232
  // Server-side file processing status updates
222
233
  const [serverFileUpdates, setServerFileUpdates] = useState<Map<string, ConversationFile>>(new Map());
@@ -345,6 +356,12 @@ export function useAgentStream(client: VertesiaClient, agentRunId: string): UseA
345
356
  agentRunId,
346
357
  (message) => {
347
358
  if (abortController.signal.aborted) return;
359
+ // Completed and idle runs replay their archived history through the live
360
+ // stream. Only forward genuinely new deliveries so onMessage consumers
361
+ // never treat replayed events as fresh ones.
362
+ if (!message.timestamp || message.timestamp > lastDeliveredTsRef.current) {
363
+ onMessageRef.current?.(message);
364
+ }
348
365
 
349
366
  debugAgentChat('stream message', {
350
367
  agentRunId,
@@ -450,6 +467,14 @@ export function useAgentStream(client: VertesiaClient, agentRunId: string): UseA
450
467
  onHistoryLoaded: (historical) => {
451
468
  if (abortController.signal.aborted) return;
452
469
  const timelineMessages = historical.filter(shouldStoreTimelineMessage);
470
+ // Advance the watermark synchronously before React processes the
471
+ // history state update. Some completed streams replay history via
472
+ // the live callback immediately after onHistoryLoaded returns.
473
+ for (const message of historical) {
474
+ if (message.timestamp && message.timestamp > lastDeliveredTsRef.current) {
475
+ lastDeliveredTsRef.current = message.timestamp;
476
+ }
477
+ }
453
478
  debugAgentChat('history loaded', {
454
479
  agentRunId,
455
480
  count: historical.length,
@@ -461,12 +486,7 @@ export function useAgentStream(client: VertesiaClient, agentRunId: string): UseA
461
486
  setInitialHistoryStatus(historical.length > 0 ? 'has_messages' : 'empty');
462
487
  if (timelineMessages.length > 0) {
463
488
  setMessages((prev) =>
464
- timelineMessages.reduce((next, message) => {
465
- if (message.timestamp && message.timestamp > lastDeliveredTsRef.current) {
466
- lastDeliveredTsRef.current = message.timestamp;
467
- }
468
- return insertTimelineMessage(next, message);
469
- }, prev),
489
+ timelineMessages.reduce((next, message) => insertTimelineMessage(next, message), prev),
470
490
  );
471
491
  }
472
492
  },
@@ -1,3 +1,13 @@
1
+ // Resource deep-link resolver — lets an embedding app override how agent resource references
2
+ // (documents, collections, interactions, ...) map to routes/links in the chat.
3
+ export {
4
+ type AgentResourceLinkReference,
5
+ type AgentResourceResolver,
6
+ AgentResourceResolverProvider,
7
+ type AgentResourceTarget,
8
+ type ResourceResolveContext,
9
+ useAgentResourceResolver,
10
+ } from '@vertesia/ui/widgets';
1
11
  export {
2
12
  AgentApprovalModeSelector,
3
13
  type AgentApprovalModeSelectorProps,
@@ -31,6 +41,7 @@ export * from './JumpingDots';
31
41
  export {
32
42
  ModernAgentConversation,
33
43
  type ModernAgentConversationProps,
44
+ type SendAgentMessageFn,
34
45
  type StartWorkflowFn,
35
46
  type StartWorkflowOptions,
36
47
  } from './ModernAgentConversation';
@@ -23,7 +23,7 @@ import type { TypeRegistry } from '../types/TypeRegistry.js';
23
23
  import { useTypeRegistry } from '../types/TypeRegistryProvider.js';
24
24
  import { ContentDispositionButton } from './components/ContentDispositionButton';
25
25
  import { ContentOverview } from './components/ContentOverview';
26
- import { useDownloadFile } from './components/useDownloadFile';
26
+ import { getContentObjectDownloadName, useDownloadFile } from './components/useDownloadFile';
27
27
  import { VectorSearchWidget } from './components/VectorSearchWidget';
28
28
  import { DocumentQuickFilterProvider } from './DocumentQuickFilter';
29
29
  import { DocumentTable } from './DocumentTable';
@@ -483,7 +483,7 @@ function OverviewDrawer({ object, onClose }: OverviewDrawerProps) {
483
483
  variant="ghost"
484
484
  size="sm"
485
485
  title="Download"
486
- onClick={() => downloadFromContentSource(contentSource, object.name || object.content?.name)}
486
+ onClick={() => downloadFromContentSource(contentSource, getContentObjectDownloadName(object))}
487
487
  >
488
488
  <Download className="size-4" />
489
489
  </Button>