@vertesia/ui 1.5.0-dev.20260717.131047Z → 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 (567) hide show
  1. package/lib/core/components/SidePanel.js +1 -1
  2. package/lib/core/components/SidePanel.js.map +1 -1
  3. package/lib/core/components/shadcn/button.d.ts +10 -3
  4. package/lib/core/components/shadcn/button.d.ts.map +1 -1
  5. package/lib/core/components/shadcn/button.js +41 -9
  6. package/lib/core/components/shadcn/button.js.map +1 -1
  7. package/lib/core/components/shadcn/filters/filterBar.d.ts.map +1 -1
  8. package/lib/core/components/shadcn/filters/filterBar.js +1 -1
  9. package/lib/core/components/shadcn/filters/filterBar.js.map +1 -1
  10. package/lib/core/components/shadcn/modal/dialog.d.ts +1 -1
  11. package/lib/core/components/shadcn/modal/dialog.d.ts.map +1 -1
  12. package/lib/core/components/shadcn/modal/dialog.js +3 -1
  13. package/lib/core/components/shadcn/modal/dialog.js.map +1 -1
  14. package/lib/core/components/shadcn/tabs.d.ts +12 -1
  15. package/lib/core/components/shadcn/tabs.d.ts.map +1 -1
  16. package/lib/core/components/shadcn/tabs.js +12 -4
  17. package/lib/core/components/shadcn/tabs.js.map +1 -1
  18. package/lib/core/components/shadcn/theme/ThemeSwitcher.js +1 -1
  19. package/lib/core/components/shadcn/theme/ThemeSwitcher.js.map +1 -1
  20. package/lib/features/agent/chat/AgentChatPlaybackControls.d.ts.map +1 -1
  21. package/lib/features/agent/chat/AgentChatPlaybackControls.js +2 -2
  22. package/lib/features/agent/chat/AgentChatPlaybackControls.js.map +1 -1
  23. package/lib/features/agent/chat/AgentRequestInputOverlay.d.ts.map +1 -1
  24. package/lib/features/agent/chat/AgentRequestInputOverlay.js +2 -2
  25. package/lib/features/agent/chat/AgentRequestInputOverlay.js.map +1 -1
  26. package/lib/features/agent/chat/AgentRightPanel.d.ts +5 -1
  27. package/lib/features/agent/chat/AgentRightPanel.d.ts.map +1 -1
  28. package/lib/features/agent/chat/AgentRightPanel.js +2 -2
  29. package/lib/features/agent/chat/AgentRightPanel.js.map +1 -1
  30. package/lib/features/agent/chat/ArtifactsTab.d.ts +5 -1
  31. package/lib/features/agent/chat/ArtifactsTab.d.ts.map +1 -1
  32. package/lib/features/agent/chat/ArtifactsTab.js +53 -13
  33. package/lib/features/agent/chat/ArtifactsTab.js.map +1 -1
  34. package/lib/features/agent/chat/DocumentEditingActionCard.d.ts +6 -0
  35. package/lib/features/agent/chat/DocumentEditingActionCard.d.ts.map +1 -0
  36. package/lib/features/agent/chat/DocumentEditingActionCard.js +129 -0
  37. package/lib/features/agent/chat/DocumentEditingActionCard.js.map +1 -0
  38. package/lib/features/agent/chat/ImageLightbox.d.ts.map +1 -1
  39. package/lib/features/agent/chat/ImageLightbox.js +1 -1
  40. package/lib/features/agent/chat/ImageLightbox.js.map +1 -1
  41. package/lib/features/agent/chat/ModernAgentConversation.d.ts +19 -1
  42. package/lib/features/agent/chat/ModernAgentConversation.d.ts.map +1 -1
  43. package/lib/features/agent/chat/ModernAgentConversation.js +125 -27
  44. package/lib/features/agent/chat/ModernAgentConversation.js.map +1 -1
  45. package/lib/features/agent/chat/ModernAgentOutput/AgentMarkdownAnchor.d.ts +45 -0
  46. package/lib/features/agent/chat/ModernAgentOutput/AgentMarkdownAnchor.d.ts.map +1 -0
  47. package/lib/features/agent/chat/ModernAgentOutput/AgentMarkdownAnchor.js +40 -0
  48. package/lib/features/agent/chat/ModernAgentOutput/AgentMarkdownAnchor.js.map +1 -0
  49. package/lib/features/agent/chat/ModernAgentOutput/AllMessagesMixed.d.ts +3 -1
  50. package/lib/features/agent/chat/ModernAgentOutput/AllMessagesMixed.d.ts.map +1 -1
  51. package/lib/features/agent/chat/ModernAgentOutput/AllMessagesMixed.js +96 -51
  52. package/lib/features/agent/chat/ModernAgentOutput/AllMessagesMixed.js.map +1 -1
  53. package/lib/features/agent/chat/ModernAgentOutput/AttachmentPreview.d.ts +2 -1
  54. package/lib/features/agent/chat/ModernAgentOutput/AttachmentPreview.d.ts.map +1 -1
  55. package/lib/features/agent/chat/ModernAgentOutput/AttachmentPreview.js +9 -5
  56. package/lib/features/agent/chat/ModernAgentOutput/AttachmentPreview.js.map +1 -1
  57. package/lib/features/agent/chat/ModernAgentOutput/CollapsibleAgentMarkdown.d.ts +25 -0
  58. package/lib/features/agent/chat/ModernAgentOutput/CollapsibleAgentMarkdown.d.ts.map +1 -0
  59. package/lib/features/agent/chat/ModernAgentOutput/CollapsibleAgentMarkdown.js +33 -0
  60. package/lib/features/agent/chat/ModernAgentOutput/CollapsibleAgentMarkdown.js.map +1 -0
  61. package/lib/features/agent/chat/ModernAgentOutput/Header.d.ts.map +1 -1
  62. package/lib/features/agent/chat/ModernAgentOutput/Header.js +4 -2
  63. package/lib/features/agent/chat/ModernAgentOutput/Header.js.map +1 -1
  64. package/lib/features/agent/chat/ModernAgentOutput/MessageInput.d.ts.map +1 -1
  65. package/lib/features/agent/chat/ModernAgentOutput/MessageInput.js +2 -2
  66. package/lib/features/agent/chat/ModernAgentOutput/MessageInput.js.map +1 -1
  67. package/lib/features/agent/chat/ModernAgentOutput/MessageItem.d.ts +3 -1
  68. package/lib/features/agent/chat/ModernAgentOutput/MessageItem.d.ts.map +1 -1
  69. package/lib/features/agent/chat/ModernAgentOutput/MessageItem.js +23 -24
  70. package/lib/features/agent/chat/ModernAgentOutput/MessageItem.js.map +1 -1
  71. package/lib/features/agent/chat/ModernAgentOutput/ResourceChangeSummary.d.ts +14 -0
  72. package/lib/features/agent/chat/ModernAgentOutput/ResourceChangeSummary.d.ts.map +1 -0
  73. package/lib/features/agent/chat/ModernAgentOutput/ResourceChangeSummary.js +21 -0
  74. package/lib/features/agent/chat/ModernAgentOutput/ResourceChangeSummary.js.map +1 -0
  75. package/lib/features/agent/chat/ModernAgentOutput/ResourceChip.d.ts +30 -0
  76. package/lib/features/agent/chat/ModernAgentOutput/ResourceChip.d.ts.map +1 -0
  77. package/lib/features/agent/chat/ModernAgentOutput/ResourceChip.js +53 -0
  78. package/lib/features/agent/chat/ModernAgentOutput/ResourceChip.js.map +1 -0
  79. package/lib/features/agent/chat/ModernAgentOutput/ToolCallGroup.d.ts.map +1 -1
  80. package/lib/features/agent/chat/ModernAgentOutput/ToolCallGroup.js +21 -2
  81. package/lib/features/agent/chat/ModernAgentOutput/ToolCallGroup.js.map +1 -1
  82. package/lib/features/agent/chat/ModernAgentOutput/requestInputMessages.d.ts +6 -0
  83. package/lib/features/agent/chat/ModernAgentOutput/requestInputMessages.d.ts.map +1 -1
  84. package/lib/features/agent/chat/ModernAgentOutput/requestInputMessages.js +15 -1
  85. package/lib/features/agent/chat/ModernAgentOutput/requestInputMessages.js.map +1 -1
  86. package/lib/features/agent/chat/ModernAgentOutput/resourceLinks.d.ts +6 -0
  87. package/lib/features/agent/chat/ModernAgentOutput/resourceLinks.d.ts.map +1 -0
  88. package/lib/features/agent/chat/ModernAgentOutput/resourceLinks.js +29 -0
  89. package/lib/features/agent/chat/ModernAgentOutput/resourceLinks.js.map +1 -0
  90. package/lib/features/agent/chat/ModernAgentOutput/resourceSummary.d.ts +33 -0
  91. package/lib/features/agent/chat/ModernAgentOutput/resourceSummary.d.ts.map +1 -0
  92. package/lib/features/agent/chat/ModernAgentOutput/resourceSummary.js +129 -0
  93. package/lib/features/agent/chat/ModernAgentOutput/resourceSummary.js.map +1 -0
  94. package/lib/features/agent/chat/ModernAgentOutput/utils.d.ts +7 -0
  95. package/lib/features/agent/chat/ModernAgentOutput/utils.d.ts.map +1 -1
  96. package/lib/features/agent/chat/ModernAgentOutput/utils.js +11 -1
  97. package/lib/features/agent/chat/ModernAgentOutput/utils.js.map +1 -1
  98. package/lib/features/agent/chat/hooks/useAgentStream.d.ts +1 -1
  99. package/lib/features/agent/chat/hooks/useAgentStream.d.ts.map +1 -1
  100. package/lib/features/agent/chat/hooks/useAgentStream.js +24 -9
  101. package/lib/features/agent/chat/hooks/useAgentStream.js.map +1 -1
  102. package/lib/features/agent/chat/index.d.ts +2 -1
  103. package/lib/features/agent/chat/index.d.ts.map +1 -1
  104. package/lib/features/agent/chat/index.js +3 -0
  105. package/lib/features/agent/chat/index.js.map +1 -1
  106. package/lib/features/environment/SelectEnvironment.d.ts +28 -0
  107. package/lib/features/environment/SelectEnvironment.d.ts.map +1 -0
  108. package/lib/features/environment/SelectEnvironment.js +97 -0
  109. package/lib/features/environment/SelectEnvironment.js.map +1 -0
  110. package/lib/features/environment/index.d.ts +2 -0
  111. package/lib/features/environment/index.d.ts.map +1 -0
  112. package/lib/features/environment/index.js +2 -0
  113. package/lib/features/environment/index.js.map +1 -0
  114. package/lib/features/index.d.ts +2 -0
  115. package/lib/features/index.d.ts.map +1 -1
  116. package/lib/features/index.js +2 -0
  117. package/lib/features/index.js.map +1 -1
  118. package/lib/features/magic-pdf/AnnotatedImageSlider.js +12 -12
  119. package/lib/features/magic-pdf/AnnotatedImageSlider.js.map +1 -1
  120. package/lib/features/magic-pdf/DownloadPopover.d.ts.map +1 -1
  121. package/lib/features/magic-pdf/DownloadPopover.js +3 -17
  122. package/lib/features/magic-pdf/DownloadPopover.js.map +1 -1
  123. package/lib/features/magic-pdf/ExtractedContentView.js +2 -6
  124. package/lib/features/magic-pdf/ExtractedContentView.js.map +1 -1
  125. package/lib/features/magic-pdf/GroundedExtractionAssistantPanel.d.ts +25 -0
  126. package/lib/features/magic-pdf/GroundedExtractionAssistantPanel.d.ts.map +1 -0
  127. package/lib/features/magic-pdf/GroundedExtractionAssistantPanel.js +42 -0
  128. package/lib/features/magic-pdf/GroundedExtractionAssistantPanel.js.map +1 -0
  129. package/lib/features/magic-pdf/GroundedExtractionView.d.ts +27 -0
  130. package/lib/features/magic-pdf/GroundedExtractionView.d.ts.map +1 -0
  131. package/lib/features/magic-pdf/GroundedExtractionView.js +377 -0
  132. package/lib/features/magic-pdf/GroundedExtractionView.js.map +1 -0
  133. package/lib/features/magic-pdf/MagicPdfProvider.d.ts +0 -2
  134. package/lib/features/magic-pdf/MagicPdfProvider.d.ts.map +1 -1
  135. package/lib/features/magic-pdf/MagicPdfProvider.js +15 -42
  136. package/lib/features/magic-pdf/MagicPdfProvider.js.map +1 -1
  137. package/lib/features/magic-pdf/MagicPdfView.d.ts.map +1 -1
  138. package/lib/features/magic-pdf/MagicPdfView.js +2 -19
  139. package/lib/features/magic-pdf/MagicPdfView.js.map +1 -1
  140. package/lib/features/magic-pdf/index.d.ts +1 -0
  141. package/lib/features/magic-pdf/index.d.ts.map +1 -1
  142. package/lib/features/magic-pdf/index.js +1 -0
  143. package/lib/features/magic-pdf/index.js.map +1 -1
  144. package/lib/features/magic-pdf/types.d.ts +1 -1
  145. package/lib/features/magic-pdf/types.d.ts.map +1 -1
  146. package/lib/features/oauth/McpConnectionsButton.d.ts.map +1 -1
  147. package/lib/features/oauth/McpConnectionsButton.js +2 -2
  148. package/lib/features/oauth/McpConnectionsButton.js.map +1 -1
  149. package/lib/features/oauth/McpConnectionsDialog.d.ts.map +1 -1
  150. package/lib/features/oauth/McpConnectionsDialog.js +1 -1
  151. package/lib/features/oauth/McpConnectionsDialog.js.map +1 -1
  152. package/lib/features/oauth/RemoteMcpConnectionButton.d.ts.map +1 -1
  153. package/lib/features/oauth/RemoteMcpConnectionButton.js +1 -1
  154. package/lib/features/oauth/RemoteMcpConnectionButton.js.map +1 -1
  155. package/lib/features/pdf-viewer/PdfPageSlider.js +2 -2
  156. package/lib/features/pdf-viewer/PdfPageSlider.js.map +1 -1
  157. package/lib/features/pdf-viewer/SimplePdfViewer.d.ts.map +1 -1
  158. package/lib/features/pdf-viewer/SimplePdfViewer.js +3 -3
  159. package/lib/features/pdf-viewer/SimplePdfViewer.js.map +1 -1
  160. package/lib/features/permissions/UserPermissionsProvider.js +1 -1
  161. package/lib/features/permissions/UserPermissionsProvider.js.map +1 -1
  162. package/lib/features/store/objects/DocumentQuickFilter.d.ts.map +1 -1
  163. package/lib/features/store/objects/DocumentQuickFilter.js +5 -5
  164. package/lib/features/store/objects/DocumentQuickFilter.js.map +1 -1
  165. package/lib/features/store/objects/DocumentSearchResults.d.ts.map +1 -1
  166. package/lib/features/store/objects/DocumentSearchResults.js +4 -4
  167. package/lib/features/store/objects/DocumentSearchResults.js.map +1 -1
  168. package/lib/features/store/objects/components/ContentDispositionButton.d.ts.map +1 -1
  169. package/lib/features/store/objects/components/ContentDispositionButton.js +1 -1
  170. package/lib/features/store/objects/components/ContentDispositionButton.js.map +1 -1
  171. package/lib/features/store/objects/components/ContentOverview.d.ts +2 -1
  172. package/lib/features/store/objects/components/ContentOverview.d.ts.map +1 -1
  173. package/lib/features/store/objects/components/ContentOverview.js +159 -31
  174. package/lib/features/store/objects/components/ContentOverview.js.map +1 -1
  175. package/lib/features/store/objects/components/DocumentEditingConfigurationSelector.d.ts +16 -0
  176. package/lib/features/store/objects/components/DocumentEditingConfigurationSelector.d.ts.map +1 -0
  177. package/lib/features/store/objects/components/DocumentEditingConfigurationSelector.js +116 -0
  178. package/lib/features/store/objects/components/DocumentEditingConfigurationSelector.js.map +1 -0
  179. package/lib/features/store/objects/components/DocumentEditingLockStatus.d.ts +7 -0
  180. package/lib/features/store/objects/components/DocumentEditingLockStatus.d.ts.map +1 -0
  181. package/lib/features/store/objects/components/DocumentEditingLockStatus.js +13 -0
  182. package/lib/features/store/objects/components/DocumentEditingLockStatus.js.map +1 -0
  183. package/lib/features/store/objects/components/DocumentEditingPanel.d.ts +48 -0
  184. package/lib/features/store/objects/components/DocumentEditingPanel.d.ts.map +1 -0
  185. package/lib/features/store/objects/components/DocumentEditingPanel.js +720 -0
  186. package/lib/features/store/objects/components/DocumentEditingPanel.js.map +1 -0
  187. package/lib/features/store/objects/components/DocumentIcon.js +1 -1
  188. package/lib/features/store/objects/components/TextEditorPanel.d.ts.map +1 -1
  189. package/lib/features/store/objects/components/TextEditorPanel.js +22 -9
  190. package/lib/features/store/objects/components/TextEditorPanel.js.map +1 -1
  191. package/lib/features/store/objects/components/VectorSearchWidget.js +1 -1
  192. package/lib/features/store/objects/components/VectorSearchWidget.js.map +1 -1
  193. package/lib/features/store/objects/components/documentArtifactRefs.d.ts +26 -0
  194. package/lib/features/store/objects/components/documentArtifactRefs.d.ts.map +1 -0
  195. package/lib/features/store/objects/components/documentArtifactRefs.js +52 -0
  196. package/lib/features/store/objects/components/documentArtifactRefs.js.map +1 -0
  197. package/lib/features/store/objects/components/documentEditingAgentConfig.d.ts +4 -0
  198. package/lib/features/store/objects/components/documentEditingAgentConfig.d.ts.map +1 -0
  199. package/lib/features/store/objects/components/documentEditingAgentConfig.js +40 -0
  200. package/lib/features/store/objects/components/documentEditingAgentConfig.js.map +1 -0
  201. package/lib/features/store/objects/components/documentEditingPrompts.d.ts +3 -0
  202. package/lib/features/store/objects/components/documentEditingPrompts.d.ts.map +1 -0
  203. package/lib/features/store/objects/components/documentEditingPrompts.js +13 -0
  204. package/lib/features/store/objects/components/documentEditingPrompts.js.map +1 -0
  205. package/lib/features/store/objects/components/documentEditingRun.d.ts +27 -0
  206. package/lib/features/store/objects/components/documentEditingRun.d.ts.map +1 -0
  207. package/lib/features/store/objects/components/documentEditingRun.js +126 -0
  208. package/lib/features/store/objects/components/documentEditingRun.js.map +1 -0
  209. package/lib/features/store/objects/components/documentEditingTarget.d.ts +20 -0
  210. package/lib/features/store/objects/components/documentEditingTarget.d.ts.map +1 -0
  211. package/lib/features/store/objects/components/documentEditingTarget.js +40 -0
  212. package/lib/features/store/objects/components/documentEditingTarget.js.map +1 -0
  213. package/lib/features/store/objects/components/index.d.ts +1 -0
  214. package/lib/features/store/objects/components/index.d.ts.map +1 -1
  215. package/lib/features/store/objects/components/index.js +1 -0
  216. package/lib/features/store/objects/components/index.js.map +1 -1
  217. package/lib/features/store/objects/components/useContentPanelHooks.d.ts +6 -3
  218. package/lib/features/store/objects/components/useContentPanelHooks.d.ts.map +1 -1
  219. package/lib/features/store/objects/components/useContentPanelHooks.js +57 -37
  220. package/lib/features/store/objects/components/useContentPanelHooks.js.map +1 -1
  221. package/lib/features/store/objects/components/useDownloadFile.d.ts +2 -1
  222. package/lib/features/store/objects/components/useDownloadFile.d.ts.map +1 -1
  223. package/lib/features/store/objects/components/useDownloadFile.js +3 -0
  224. package/lib/features/store/objects/components/useDownloadFile.js.map +1 -1
  225. package/lib/features/store/objects/layout/renderers.d.ts.map +1 -1
  226. package/lib/features/store/objects/layout/renderers.js +2 -2
  227. package/lib/features/store/objects/layout/renderers.js.map +1 -1
  228. package/lib/features/store/objects/selection/SelectionActions.js +1 -1
  229. package/lib/features/store/objects/selection/SelectionActions.js.map +1 -1
  230. package/lib/features/store/objects/selection/actions/StartWorkflowButton.js +1 -1
  231. package/lib/features/store/objects/selection/actions/StartWorkflowButton.js.map +1 -1
  232. package/lib/features/store/types/ContentObjectTypesTable.d.ts.map +1 -1
  233. package/lib/features/store/types/ContentObjectTypesTable.js +4 -4
  234. package/lib/features/store/types/ContentObjectTypesTable.js.map +1 -1
  235. package/lib/features/store/types/IntakePolicyEditor.d.ts +15 -0
  236. package/lib/features/store/types/IntakePolicyEditor.d.ts.map +1 -0
  237. package/lib/features/store/types/IntakePolicyEditor.js +455 -0
  238. package/lib/features/store/types/IntakePolicyEditor.js.map +1 -0
  239. package/lib/features/store/types/IntakePolicyForm.d.ts +11 -0
  240. package/lib/features/store/types/IntakePolicyForm.d.ts.map +1 -0
  241. package/lib/features/store/types/IntakePolicyForm.js +91 -0
  242. package/lib/features/store/types/IntakePolicyForm.js.map +1 -0
  243. package/lib/features/store/types/SelectContentTypeModal.js +1 -1
  244. package/lib/features/store/types/SelectContentTypeModal.js.map +1 -1
  245. package/lib/features/store/types/index.d.ts +2 -0
  246. package/lib/features/store/types/index.d.ts.map +1 -1
  247. package/lib/features/store/types/index.js +2 -0
  248. package/lib/features/store/types/index.js.map +1 -1
  249. package/lib/features/store/types/intake-policy-editor.logic.d.ts +7 -0
  250. package/lib/features/store/types/intake-policy-editor.logic.d.ts.map +1 -0
  251. package/lib/features/store/types/intake-policy-editor.logic.js +60 -0
  252. package/lib/features/store/types/intake-policy-editor.logic.js.map +1 -0
  253. package/lib/features/store/types/typeCatalogCache.d.ts +5 -0
  254. package/lib/features/store/types/typeCatalogCache.d.ts.map +1 -0
  255. package/lib/features/store/types/typeCatalogCache.js +40 -0
  256. package/lib/features/store/types/typeCatalogCache.js.map +1 -0
  257. package/lib/features/user/UserInfo.js +7 -3
  258. package/lib/features/user/UserInfo.js.map +1 -1
  259. package/lib/features/views/ViewExperience.d.ts +20 -0
  260. package/lib/features/views/ViewExperience.d.ts.map +1 -0
  261. package/lib/features/views/ViewExperience.js +188 -0
  262. package/lib/features/views/ViewExperience.js.map +1 -0
  263. package/lib/features/views/ViewNavigation.d.ts +3 -0
  264. package/lib/features/views/ViewNavigation.d.ts.map +1 -0
  265. package/lib/features/views/ViewNavigation.js +36 -0
  266. package/lib/features/views/ViewNavigation.js.map +1 -0
  267. package/lib/features/views/ViewResults.d.ts +9 -0
  268. package/lib/features/views/ViewResults.d.ts.map +1 -0
  269. package/lib/features/views/ViewResults.js +229 -0
  270. package/lib/features/views/ViewResults.js.map +1 -0
  271. package/lib/features/views/ViewSearch.d.ts +3 -0
  272. package/lib/features/views/ViewSearch.d.ts.map +1 -0
  273. package/lib/features/views/ViewSearch.js +74 -0
  274. package/lib/features/views/ViewSearch.js.map +1 -0
  275. package/lib/features/views/index.d.ts +7 -0
  276. package/lib/features/views/index.d.ts.map +1 -0
  277. package/lib/features/views/index.js +7 -0
  278. package/lib/features/views/index.js.map +1 -0
  279. package/lib/features/views/types.d.ts +39 -0
  280. package/lib/features/views/types.d.ts.map +1 -0
  281. package/lib/features/views/types.js +2 -0
  282. package/lib/features/views/types.js.map +1 -0
  283. package/lib/features/views/viewState.d.ts +14 -0
  284. package/lib/features/views/viewState.d.ts.map +1 -0
  285. package/lib/features/views/viewState.js +117 -0
  286. package/lib/features/views/viewState.js.map +1 -0
  287. package/lib/i18n/locales/ar.json +134 -1
  288. package/lib/i18n/locales/de.json +130 -1
  289. package/lib/i18n/locales/en.json +363 -33
  290. package/lib/i18n/locales/es.json +131 -1
  291. package/lib/i18n/locales/fr.json +131 -1
  292. package/lib/i18n/locales/it.json +131 -1
  293. package/lib/i18n/locales/ja.json +129 -1
  294. package/lib/i18n/locales/ko.json +129 -1
  295. package/lib/i18n/locales/pt.json +131 -1
  296. package/lib/i18n/locales/ru.json +132 -1
  297. package/lib/i18n/locales/tr.json +130 -1
  298. package/lib/i18n/locales/zh-TW.json +129 -1
  299. package/lib/i18n/locales/zh.json +129 -1
  300. package/lib/rich-text/EditorToolbar.d.ts +37 -0
  301. package/lib/rich-text/EditorToolbar.d.ts.map +1 -0
  302. package/lib/rich-text/EditorToolbar.js +215 -0
  303. package/lib/rich-text/EditorToolbar.js.map +1 -0
  304. package/lib/rich-text/VertesiaRichTextEditor.d.ts +26 -0
  305. package/lib/rich-text/VertesiaRichTextEditor.d.ts.map +1 -0
  306. package/lib/rich-text/VertesiaRichTextEditor.js +67 -0
  307. package/lib/rich-text/VertesiaRichTextEditor.js.map +1 -0
  308. package/lib/rich-text/index.d.ts +2 -0
  309. package/lib/rich-text/index.d.ts.map +1 -0
  310. package/lib/rich-text/index.js +2 -0
  311. package/lib/rich-text/index.js.map +1 -0
  312. package/lib/router/HistoryNavigator.d.ts.map +1 -1
  313. package/lib/router/HistoryNavigator.js +23 -13
  314. package/lib/router/HistoryNavigator.js.map +1 -1
  315. package/lib/router/Nav.d.ts.map +1 -1
  316. package/lib/router/Nav.js +15 -6
  317. package/lib/router/Nav.js.map +1 -1
  318. package/lib/session/UserSession.d.ts.map +1 -1
  319. package/lib/session/UserSession.js +5 -3
  320. package/lib/session/UserSession.js.map +1 -1
  321. package/lib/vertesia-ui-core.js +4 -4
  322. package/lib/vertesia-ui-core.js.map +1 -1
  323. package/lib/vertesia-ui-features.js +40 -28
  324. package/lib/vertesia-ui-features.js.map +1 -1
  325. package/lib/vertesia-ui-i18n.js +15 -15
  326. package/lib/vertesia-ui-i18n.js.map +1 -1
  327. package/lib/vertesia-ui-rich-text.js +5 -0
  328. package/lib/vertesia-ui-rich-text.js.map +1 -0
  329. package/lib/vertesia-ui-router.js +1 -1
  330. package/lib/vertesia-ui-router.js.map +1 -1
  331. package/lib/vertesia-ui-session.js +1 -1
  332. package/lib/vertesia-ui-session.js.map +1 -1
  333. package/lib/vertesia-ui-shell.js +1 -1
  334. package/lib/vertesia-ui-shell.js.map +1 -1
  335. package/lib/vertesia-ui-widgets.js +25 -7
  336. package/lib/vertesia-ui-widgets.js.map +1 -1
  337. package/lib/widgets/form/Form.js +1 -1
  338. package/lib/widgets/form/Form.js.map +1 -1
  339. package/lib/widgets/json-view/JSONSwitcher.js +1 -1
  340. package/lib/widgets/json-view/JSONSwitcher.js.map +1 -1
  341. package/lib/widgets/json-view/JSONView.js +6 -6
  342. package/lib/widgets/json-view/JSONView.js.map +1 -1
  343. package/lib/widgets/markdown/AgentResourceResolver.d.ts +31 -0
  344. package/lib/widgets/markdown/AgentResourceResolver.d.ts.map +1 -0
  345. package/lib/widgets/markdown/AgentResourceResolver.js +39 -0
  346. package/lib/widgets/markdown/AgentResourceResolver.js.map +1 -0
  347. package/lib/widgets/markdown/ArtifactEditingSurface.d.ts +63 -0
  348. package/lib/widgets/markdown/ArtifactEditingSurface.d.ts.map +1 -0
  349. package/lib/widgets/markdown/ArtifactEditingSurface.js +582 -0
  350. package/lib/widgets/markdown/ArtifactEditingSurface.js.map +1 -0
  351. package/lib/widgets/markdown/CollaborativeMarkdownRenderer.d.ts +69 -0
  352. package/lib/widgets/markdown/CollaborativeMarkdownRenderer.d.ts.map +1 -0
  353. package/lib/widgets/markdown/CollaborativeMarkdownRenderer.js +374 -0
  354. package/lib/widgets/markdown/CollaborativeMarkdownRenderer.js.map +1 -0
  355. package/lib/widgets/markdown/MarkdownLink.d.ts +3 -1
  356. package/lib/widgets/markdown/MarkdownLink.d.ts.map +1 -1
  357. package/lib/widgets/markdown/MarkdownLink.js +41 -14
  358. package/lib/widgets/markdown/MarkdownLink.js.map +1 -1
  359. package/lib/widgets/markdown/MarkdownRenderer.d.ts +8 -1
  360. package/lib/widgets/markdown/MarkdownRenderer.d.ts.map +1 -1
  361. package/lib/widgets/markdown/MarkdownRenderer.js +20 -4
  362. package/lib/widgets/markdown/MarkdownRenderer.js.map +1 -1
  363. package/lib/widgets/markdown/index.d.ts +5 -1
  364. package/lib/widgets/markdown/index.d.ts.map +1 -1
  365. package/lib/widgets/markdown/index.js +5 -1
  366. package/lib/widgets/markdown/index.js.map +1 -1
  367. package/lib/widgets/markdown/normalizeCustomSchemeLinks.d.ts.map +1 -1
  368. package/lib/widgets/markdown/normalizeCustomSchemeLinks.js +14 -2
  369. package/lib/widgets/markdown/normalizeCustomSchemeLinks.js.map +1 -1
  370. package/lib/widgets/markdown/textDiff.d.ts +52 -0
  371. package/lib/widgets/markdown/textDiff.d.ts.map +1 -0
  372. package/lib/widgets/markdown/textDiff.js +362 -0
  373. package/lib/widgets/markdown/textDiff.js.map +1 -0
  374. package/lib/widgets/markdown/useArtifactContent.d.ts +5 -3
  375. package/lib/widgets/markdown/useArtifactContent.d.ts.map +1 -1
  376. package/lib/widgets/markdown/useArtifactContent.js +6 -3
  377. package/lib/widgets/markdown/useArtifactContent.js.map +1 -1
  378. package/lib/widgets/markdown/useResolvedUrl.d.ts +1 -5
  379. package/lib/widgets/markdown/useResolvedUrl.d.ts.map +1 -1
  380. package/lib/widgets/markdown/useResolvedUrl.js +19 -31
  381. package/lib/widgets/markdown/useResolvedUrl.js.map +1 -1
  382. package/lib/widgets/monacoEditor/MonacoEditor.d.ts.map +1 -1
  383. package/lib/widgets/monacoEditor/MonacoEditor.js +29 -0
  384. package/lib/widgets/monacoEditor/MonacoEditor.js.map +1 -1
  385. package/lib/widgets/schema-editor/ManagedSchema.d.ts +8 -0
  386. package/lib/widgets/schema-editor/ManagedSchema.d.ts.map +1 -1
  387. package/lib/widgets/schema-editor/ManagedSchema.js +16 -0
  388. package/lib/widgets/schema-editor/ManagedSchema.js.map +1 -1
  389. package/lib/widgets/schema-editor/editor/EditableSchemaProperty.d.ts +2 -0
  390. package/lib/widgets/schema-editor/editor/EditableSchemaProperty.d.ts.map +1 -1
  391. package/lib/widgets/schema-editor/editor/EditableSchemaProperty.js +1 -0
  392. package/lib/widgets/schema-editor/editor/EditableSchemaProperty.js.map +1 -1
  393. package/lib/widgets/schema-editor/editor/PropertyViewer.d.ts.map +1 -1
  394. package/lib/widgets/schema-editor/editor/PropertyViewer.js +4 -1
  395. package/lib/widgets/schema-editor/editor/PropertyViewer.js.map +1 -1
  396. package/lib/widgets/schema-editor/editor/SchemaEditor.d.ts.map +1 -1
  397. package/lib/widgets/schema-editor/editor/SchemaEditor.js +22 -11
  398. package/lib/widgets/schema-editor/editor/SchemaEditor.js.map +1 -1
  399. package/lib/widgets/xml-viewer/hooks/useXMLViewer.d.ts +9 -0
  400. package/lib/widgets/xml-viewer/hooks/useXMLViewer.d.ts.map +1 -1
  401. package/lib/widgets/xml-viewer/hooks/useXMLViewer.js +20 -17
  402. package/lib/widgets/xml-viewer/hooks/useXMLViewer.js.map +1 -1
  403. package/package.json +37 -33
  404. package/src/__tests__/a11y.test.tsx +77 -1
  405. package/src/__tests__/axe-helper.ts +17 -7
  406. package/src/__tests__/setup.ts +25 -0
  407. package/src/core/components/SidePanel.tsx +1 -1
  408. package/src/core/components/shadcn/button.tsx +67 -12
  409. package/src/core/components/shadcn/filters/filterBar.tsx +1 -0
  410. package/src/core/components/shadcn/modal/dialog.tsx +4 -2
  411. package/src/core/components/shadcn/tabs.test.tsx +65 -0
  412. package/src/core/components/shadcn/tabs.tsx +25 -3
  413. package/src/core/components/shadcn/theme/ThemeSwitcher.tsx +1 -1
  414. package/src/features/agent/chat/AgentChatPlaybackControls.tsx +0 -5
  415. package/src/features/agent/chat/AgentRequestInputOverlay.test.tsx +31 -0
  416. package/src/features/agent/chat/AgentRequestInputOverlay.tsx +6 -2
  417. package/src/features/agent/chat/AgentRightPanel.tsx +16 -1
  418. package/src/features/agent/chat/ArtifactsTab.test.tsx +55 -0
  419. package/src/features/agent/chat/ArtifactsTab.tsx +222 -61
  420. package/src/features/agent/chat/DocumentEditingActionCard.test.tsx +105 -0
  421. package/src/features/agent/chat/DocumentEditingActionCard.tsx +210 -0
  422. package/src/features/agent/chat/ImageLightbox.tsx +0 -1
  423. package/src/features/agent/chat/ModernAgentConversation.test.tsx +285 -40
  424. package/src/features/agent/chat/ModernAgentConversation.tsx +247 -77
  425. package/src/features/agent/chat/ModernAgentOutput/AgentMarkdownAnchor.test.tsx +79 -0
  426. package/src/features/agent/chat/ModernAgentOutput/AgentMarkdownAnchor.tsx +94 -0
  427. package/src/features/agent/chat/ModernAgentOutput/AllMessagesMixed.test.tsx +263 -35
  428. package/src/features/agent/chat/ModernAgentOutput/AllMessagesMixed.tsx +236 -118
  429. package/src/features/agent/chat/ModernAgentOutput/AttachmentPreview.tsx +17 -0
  430. package/src/features/agent/chat/ModernAgentOutput/CollapsibleAgentMarkdown.test.tsx +44 -0
  431. package/src/features/agent/chat/ModernAgentOutput/CollapsibleAgentMarkdown.tsx +88 -0
  432. package/src/features/agent/chat/ModernAgentOutput/Header.tsx +3 -3
  433. package/src/features/agent/chat/ModernAgentOutput/MessageInput.tsx +0 -2
  434. package/src/features/agent/chat/ModernAgentOutput/MessageItem.tsx +34 -47
  435. package/src/features/agent/chat/ModernAgentOutput/ResourceChangeSummary.tsx +40 -0
  436. package/src/features/agent/chat/ModernAgentOutput/ResourceChip.test.tsx +148 -0
  437. package/src/features/agent/chat/ModernAgentOutput/ResourceChip.tsx +141 -0
  438. package/src/features/agent/chat/ModernAgentOutput/ToolCallGroup.tsx +33 -1
  439. package/src/features/agent/chat/ModernAgentOutput/requestInputMessages.test.ts +80 -0
  440. package/src/features/agent/chat/ModernAgentOutput/requestInputMessages.ts +21 -1
  441. package/src/features/agent/chat/ModernAgentOutput/resourceLinks.tsx +43 -0
  442. package/src/features/agent/chat/ModernAgentOutput/resourceSummary.test.ts +229 -0
  443. package/src/features/agent/chat/ModernAgentOutput/resourceSummary.ts +152 -0
  444. package/src/features/agent/chat/ModernAgentOutput/utils.test.ts +17 -0
  445. package/src/features/agent/chat/ModernAgentOutput/utils.ts +14 -1
  446. package/src/features/agent/chat/hooks/useAgentStream.test.tsx +188 -0
  447. package/src/features/agent/chat/hooks/useAgentStream.ts +28 -8
  448. package/src/features/agent/chat/index.ts +11 -0
  449. package/src/features/environment/SelectEnvironment.tsx +186 -0
  450. package/src/features/environment/index.ts +1 -0
  451. package/src/features/index.ts +2 -0
  452. package/src/features/magic-pdf/AnnotatedImageSlider.tsx +62 -66
  453. package/src/features/magic-pdf/DownloadPopover.tsx +5 -48
  454. package/src/features/magic-pdf/ExtractedContentView.tsx +2 -14
  455. package/src/features/magic-pdf/GroundedExtractionAssistantPanel.tsx +86 -0
  456. package/src/features/magic-pdf/GroundedExtractionView.test.tsx +65 -0
  457. package/src/features/magic-pdf/GroundedExtractionView.tsx +1055 -0
  458. package/src/features/magic-pdf/MagicPdfProvider.tsx +17 -47
  459. package/src/features/magic-pdf/MagicPdfView.tsx +3 -51
  460. package/src/features/magic-pdf/index.ts +1 -0
  461. package/src/features/magic-pdf/types.ts +1 -1
  462. package/src/features/oauth/McpConnectionsButton.tsx +0 -2
  463. package/src/features/oauth/McpConnectionsDialog.tsx +0 -1
  464. package/src/features/oauth/RemoteMcpConnectionButton.tsx +0 -1
  465. package/src/features/pdf-viewer/PdfPageSlider.tsx +5 -5
  466. package/src/features/pdf-viewer/SimplePdfViewer.tsx +11 -12
  467. package/src/features/permissions/UserPermissionsProvider.tsx +1 -1
  468. package/src/features/store/objects/DocumentQuickFilter.tsx +13 -15
  469. package/src/features/store/objects/DocumentSearchResults.tsx +5 -8
  470. package/src/features/store/objects/components/ContentDispositionButton.tsx +5 -1
  471. package/src/features/store/objects/components/ContentOverview.tsx +356 -105
  472. package/src/features/store/objects/components/DocumentEditingConfigurationSelector.test.ts +34 -0
  473. package/src/features/store/objects/components/DocumentEditingConfigurationSelector.tsx +211 -0
  474. package/src/features/store/objects/components/DocumentEditingLockStatus.test.tsx +32 -0
  475. package/src/features/store/objects/components/DocumentEditingLockStatus.tsx +45 -0
  476. package/src/features/store/objects/components/DocumentEditingPanel.test.tsx +336 -0
  477. package/src/features/store/objects/components/DocumentEditingPanel.tsx +1236 -0
  478. package/src/features/store/objects/components/DocumentIcon.tsx +1 -1
  479. package/src/features/store/objects/components/TextEditorPanel.test.tsx +48 -0
  480. package/src/features/store/objects/components/TextEditorPanel.tsx +41 -20
  481. package/src/features/store/objects/components/VectorSearchWidget.tsx +2 -2
  482. package/src/features/store/objects/components/documentArtifactRefs.test.ts +65 -0
  483. package/src/features/store/objects/components/documentArtifactRefs.ts +72 -0
  484. package/src/features/store/objects/components/documentEditingAgentConfig.test.ts +28 -0
  485. package/src/features/store/objects/components/documentEditingAgentConfig.ts +41 -0
  486. package/src/features/store/objects/components/documentEditingPrompts.test.ts +26 -0
  487. package/src/features/store/objects/components/documentEditingPrompts.ts +12 -0
  488. package/src/features/store/objects/components/documentEditingRun.test.ts +176 -0
  489. package/src/features/store/objects/components/documentEditingRun.ts +184 -0
  490. package/src/features/store/objects/components/documentEditingTarget.test.ts +96 -0
  491. package/src/features/store/objects/components/documentEditingTarget.ts +63 -0
  492. package/src/features/store/objects/components/index.ts +1 -0
  493. package/src/features/store/objects/components/useContentPanelHooks.ts +55 -42
  494. package/src/features/store/objects/components/useDownloadFile.test.ts +20 -0
  495. package/src/features/store/objects/components/useDownloadFile.ts +5 -1
  496. package/src/features/store/objects/layout/renderers.tsx +1 -2
  497. package/src/features/store/objects/selection/SelectionActions.tsx +1 -1
  498. package/src/features/store/objects/selection/actions/StartWorkflowButton.tsx +2 -2
  499. package/src/features/store/types/ContentObjectTypesTable.tsx +12 -14
  500. package/src/features/store/types/IntakePolicyEditor.tsx +679 -0
  501. package/src/features/store/types/IntakePolicyForm.tsx +838 -0
  502. package/src/features/store/types/SelectContentTypeModal.tsx +2 -2
  503. package/src/features/store/types/index.ts +2 -0
  504. package/src/features/store/types/intake-policy-editor.logic.test.ts +109 -0
  505. package/src/features/store/types/intake-policy-editor.logic.ts +87 -0
  506. package/src/features/store/types/typeCatalogCache.ts +45 -0
  507. package/src/features/user/UserInfo.tsx +7 -7
  508. package/src/features/views/ViewExperience.test.tsx +273 -0
  509. package/src/features/views/ViewExperience.tsx +408 -0
  510. package/src/features/views/ViewNavigation.test.tsx +86 -0
  511. package/src/features/views/ViewNavigation.tsx +187 -0
  512. package/src/features/views/ViewResults.test.ts +82 -0
  513. package/src/features/views/ViewResults.tsx +609 -0
  514. package/src/features/views/ViewSearch.test.tsx +147 -0
  515. package/src/features/views/ViewSearch.tsx +205 -0
  516. package/src/features/views/index.ts +6 -0
  517. package/src/features/views/types.ts +57 -0
  518. package/src/features/views/viewState.test.ts +111 -0
  519. package/src/features/views/viewState.ts +132 -0
  520. package/src/i18n/locales/ar.json +134 -1
  521. package/src/i18n/locales/de.json +130 -1
  522. package/src/i18n/locales/en.json +1083 -753
  523. package/src/i18n/locales/es.json +131 -1
  524. package/src/i18n/locales/fr.json +131 -1
  525. package/src/i18n/locales/it.json +131 -1
  526. package/src/i18n/locales/ja.json +129 -1
  527. package/src/i18n/locales/ko.json +129 -1
  528. package/src/i18n/locales/pt.json +131 -1
  529. package/src/i18n/locales/ru.json +132 -1
  530. package/src/i18n/locales/tr.json +130 -1
  531. package/src/i18n/locales/zh-TW.json +129 -1
  532. package/src/i18n/locales/zh.json +129 -1
  533. package/src/rich-text/EditorToolbar.tsx +708 -0
  534. package/src/rich-text/VertesiaRichTextEditor.test.tsx +211 -0
  535. package/src/rich-text/VertesiaRichTextEditor.tsx +241 -0
  536. package/src/rich-text/index.ts +9 -0
  537. package/src/router/HistoryNavigator.test.ts +48 -0
  538. package/src/router/HistoryNavigator.ts +24 -13
  539. package/src/router/Nav.tsx +18 -8
  540. package/src/session/UserSession.test.ts +39 -0
  541. package/src/session/UserSession.ts +5 -3
  542. package/src/widgets/form/Form.tsx +1 -1
  543. package/src/widgets/json-view/JSONSwitcher.tsx +2 -2
  544. package/src/widgets/json-view/JSONView.tsx +7 -7
  545. package/src/widgets/markdown/AgentResourceResolver.test.ts +24 -0
  546. package/src/widgets/markdown/AgentResourceResolver.tsx +70 -0
  547. package/src/widgets/markdown/ArtifactEditingSurface.test.tsx +537 -0
  548. package/src/widgets/markdown/ArtifactEditingSurface.tsx +878 -0
  549. package/src/widgets/markdown/CollaborativeMarkdownRenderer.test.tsx +484 -0
  550. package/src/widgets/markdown/CollaborativeMarkdownRenderer.tsx +825 -0
  551. package/src/widgets/markdown/MarkdownLink.test.tsx +122 -0
  552. package/src/widgets/markdown/MarkdownLink.tsx +102 -17
  553. package/src/widgets/markdown/MarkdownRenderer.tsx +30 -3
  554. package/src/widgets/markdown/index.ts +39 -1
  555. package/src/widgets/markdown/normalizeCustomSchemeLinks.ts +15 -2
  556. package/src/widgets/markdown/textDiff.test.ts +156 -0
  557. package/src/widgets/markdown/textDiff.ts +399 -0
  558. package/src/widgets/markdown/useArtifactContent.ts +9 -3
  559. package/src/widgets/markdown/useResolvedUrl.test.ts +29 -40
  560. package/src/widgets/markdown/useResolvedUrl.ts +33 -35
  561. package/src/widgets/monacoEditor/MonacoEditor.tsx +29 -0
  562. package/src/widgets/schema-editor/ManagedSchema.ts +22 -0
  563. package/src/widgets/schema-editor/editor/EditableSchemaProperty.tsx +3 -0
  564. package/src/widgets/schema-editor/editor/PropertyViewer.tsx +14 -3
  565. package/src/widgets/schema-editor/editor/SchemaEditor.tsx +80 -29
  566. package/src/widgets/xml-viewer/hooks/useXMLViewer.test.ts +26 -0
  567. package/src/widgets/xml-viewer/hooks/useXMLViewer.ts +23 -18
@@ -1,14 +1,16 @@
1
1
  import {
2
2
  type AgentMessage,
3
3
  AgentMessageType,
4
+ type AgentResourceReference,
4
5
  type AskUserMessageDetails,
5
6
  type BatchProgressDetails,
7
+ getResourcesFromMessage,
6
8
  type JSONSchema,
7
9
  type Plan,
8
10
  } from '@vertesia/common';
9
11
  import { Badge, Button, cn, VTooltip } from '@vertesia/ui/core';
10
12
  import { i18nInstance, NAMESPACE, useUITranslation } from '@vertesia/ui/i18n';
11
- import { NavLink } from '@vertesia/ui/router';
13
+ import { useRouterContext } from '@vertesia/ui/router';
12
14
  import { MarkdownRenderer, type MarkdownRendererProps } from '@vertesia/ui/widgets';
13
15
  import type { Element } from 'hast';
14
16
  import {
@@ -29,6 +31,7 @@ import {
29
31
  import React, { Component, type ReactNode, useCallback, useEffect, useMemo, useRef, useState } from 'react';
30
32
  import { AnimatedThinkingDots, PulsatingCircle } from '../AnimatedThinkingDots';
31
33
  import { AskUserWidget } from '../AskUserWidget';
34
+ import { DocumentEditingActionCard, parseMarkdownEditingAction } from '../DocumentEditingActionCard.js';
32
35
  import { ThinkingMessages } from '../WaitingMessages';
33
36
  import {
34
37
  formatWorkstreamName,
@@ -37,10 +40,19 @@ import {
37
40
  getWorkstreamLaunchDetails,
38
41
  type WorkstreamLaunchDetails,
39
42
  } from '../workstreams.js';
43
+ import { createAgentMarkdownAnchor } from './AgentMarkdownAnchor';
40
44
  import { AttachmentPreviewList, parseUserMessageAttachments } from './AttachmentPreview';
41
45
  import BatchProgressPanel, { type BatchProgressPanelClassNames } from './BatchProgressPanel';
46
+ import {
47
+ AGENT_LINE_CLAMP_CLASS,
48
+ AGENT_PROSE_CLASS as SUMMARY_PROSE_CLASS,
49
+ AGENT_COLLAPSE_LINES as SUMMARY_THOUGHT_COLLAPSE_LINES,
50
+ AGENT_COLLAPSE_THRESHOLD as SUMMARY_THOUGHT_COLLAPSE_THRESHOLD,
51
+ } from './CollapsibleAgentMarkdown.js';
42
52
  import { getMessageDeliveryStatus, MessageDeliveryStatus } from './MessageDeliveryStatus';
43
53
  import MessageItem, { type MessageItemClassNames, type MessageItemProps } from './MessageItem';
54
+ import { ResourceChangeSummary } from './ResourceChangeSummary';
55
+ import { ResourceActivityLinkList } from './ResourceChip';
44
56
  import {
45
57
  getAnsweredRequestInputKeys,
46
58
  getAnsweredToolApprovalRequestInputKeys,
@@ -49,6 +61,7 @@ import {
49
61
  getRequestInputDisplayText,
50
62
  getRequestInputMessageKey,
51
63
  getResolvedToolApprovalKeys,
64
+ getToolApprovalResponseMetadata,
52
65
  hasRequestInputUx,
53
66
  isRequestInputAnswered,
54
67
  isToolApprovalAnswerHidden,
@@ -56,6 +69,12 @@ import {
56
69
  isToolApprovalRequestInputHidden,
57
70
  type RequestInputMessageWithUx,
58
71
  } from './requestInputMessages';
72
+ import {
73
+ interleaveTurnSummaries,
74
+ isResourceSummaryReady,
75
+ type ResourceSummaryRenderItem,
76
+ segmentTurnResources,
77
+ } from './resourceSummary';
59
78
  import StreamingMessage, { type StreamingMessageClassNames } from './StreamingMessage';
60
79
  import {
61
80
  buildSummaryConversationItems,
@@ -282,6 +301,7 @@ function getMessageText(message: AgentMessage): string {
282
301
  interface SummaryMessageProps {
283
302
  message: AgentMessage;
284
303
  onSendMessage?: (message: string, metadata?: Record<string, unknown>) => void;
304
+ onOpenArtifact?: (path: string) => void;
285
305
  onSelectWorkstream?: (workstreamId: string) => void;
286
306
  requestInputAnswered?: boolean;
287
307
  StoreLinkComponent?: React.ComponentType<{ href: string; documentId: string; children: React.ReactNode }>;
@@ -329,17 +349,7 @@ function SummaryWorkstreamLaunchMessage({
329
349
  );
330
350
  }
331
351
 
332
- const SUMMARY_PROSE_CLASS = [
333
- 'agent-markdown vprose prose max-w-none break-words text-sm leading-6 text-foreground/80',
334
- 'prose-p:my-2 prose-p:leading-6 prose-li:my-0.5 prose-pre:my-3 prose-headings:tracking-normal',
335
- 'prose-headings:text-foreground prose-strong:text-foreground prose-code:text-foreground',
336
- 'prose-a:text-foreground prose-a:underline prose-a:decoration-muted prose-a:underline-offset-4',
337
- '[&_p]:text-foreground/80 [&_li]:text-foreground/80 [&_li::marker]:text-muted',
338
- ].join(' ');
339
-
340
352
  const USER_BUBBLE_COLLAPSE_THRESHOLD = 520;
341
- const SUMMARY_THOUGHT_COLLAPSE_LINES = 6;
342
- const SUMMARY_THOUGHT_COLLAPSE_THRESHOLD = 520;
343
353
  const STORE_LINK_MARKDOWN_RE =
344
354
  /\[[^\]]+\]\((?:\/store\/(?:objects|collections)\/|store:|document:|document:\/\/|collection:)[^)]+\)/;
345
355
  const DEFAULT_AGENT_MARKDOWN_COMPONENTS: MarkdownRendererProps['components'] = {
@@ -560,6 +570,7 @@ function SummaryUserBubble({
560
570
  workstreamId,
561
571
  className,
562
572
  artifactRunId,
573
+ onOpenArtifact,
563
574
  markdownComponents,
564
575
  }: {
565
576
  children: React.ReactNode;
@@ -567,6 +578,7 @@ function SummaryUserBubble({
567
578
  workstreamId?: string;
568
579
  className?: string;
569
580
  artifactRunId?: string;
581
+ onOpenArtifact?: (path: string) => void;
570
582
  markdownComponents?: MarkdownRendererProps['components'];
571
583
  }) {
572
584
  const { t } = useUITranslation();
@@ -606,6 +618,7 @@ function SummaryUserBubble({
606
618
  {shouldRenderMarkdown ? (
607
619
  <MarkdownRenderer
608
620
  artifactRunId={artifactRunId}
621
+ onArtifactOpen={onOpenArtifact}
609
622
  components={markdownComponents}
610
623
  className={cn(
611
624
  'agent-markdown vprose prose max-w-none break-words text-sm leading-6 text-foreground/90',
@@ -646,11 +659,13 @@ function SummaryUserBubble({
646
659
  function SummaryMessage({
647
660
  message,
648
661
  onSendMessage,
662
+ onOpenArtifact,
649
663
  onSelectWorkstream,
650
664
  requestInputAnswered = false,
651
665
  StoreLinkComponent,
652
666
  CollectionLinkComponent,
653
667
  }: SummaryMessageProps) {
668
+ const { router } = useRouterContext();
654
669
  const content =
655
670
  message.type === AgentMessageType.REQUEST_INPUT ? getRequestInputDisplayText(message) : getMessageText(message);
656
671
  const workstreamLaunchDetails = getWorkstreamLaunchDetails(message) ?? getWorkstreamActivityDetails(message);
@@ -660,55 +675,24 @@ function SummaryMessage({
660
675
  () => (message.type === AgentMessageType.QUESTION ? parseUserMessageAttachments(content) : null),
661
676
  [content, message.type],
662
677
  );
678
+ const editingAction = useMemo(
679
+ () =>
680
+ message.type === AgentMessageType.QUESTION
681
+ ? parseMarkdownEditingAction(message.details?.editing_action)
682
+ : undefined,
683
+ [message.details, message.type],
684
+ );
663
685
 
664
686
  const markdownComponents = useMemo(
665
687
  () => ({
666
688
  ...DEFAULT_AGENT_MARKDOWN_COMPONENTS,
667
- a: ({
668
- node: _node,
669
- ref: _ref,
670
- ...props
671
- }: {
672
- node?: unknown;
673
- ref?: unknown;
674
- href?: string;
675
- children?: React.ReactNode;
676
- }) => {
677
- const href = props.href || '';
678
- if (href.includes('/store/objects')) {
679
- const documentId = href.split('/store/objects/')[1] || '';
680
- if (StoreLinkComponent) {
681
- return (
682
- <StoreLinkComponent href={href} documentId={documentId}>
683
- {props.children}
684
- </StoreLinkComponent>
685
- );
686
- }
687
- return (
688
- <NavLink href={href} topLevelNav>
689
- {props.children}
690
- </NavLink>
691
- );
692
- }
693
- if (href.includes('/store/collections')) {
694
- const collectionId = href.split('/store/collections/')[1] || '';
695
- if (CollectionLinkComponent) {
696
- return (
697
- <CollectionLinkComponent href={href} collectionId={collectionId}>
698
- {props.children}
699
- </CollectionLinkComponent>
700
- );
701
- }
702
- return (
703
- <NavLink href={href} topLevelNav>
704
- {props.children}
705
- </NavLink>
706
- );
707
- }
708
- return <a {...props} target="_blank" rel="noopener noreferrer" />;
709
- },
689
+ a: createAgentMarkdownAnchor({
690
+ StoreLinkComponent,
691
+ CollectionLinkComponent,
692
+ addStickyParams: (href: string) => router.getTopRouter().navigator.addStickyParams(href),
693
+ }),
710
694
  }),
711
- [StoreLinkComponent, CollectionLinkComponent],
695
+ [StoreLinkComponent, CollectionLinkComponent, router],
712
696
  );
713
697
 
714
698
  if (workstreamLaunchDetails) {
@@ -732,6 +716,7 @@ function SummaryMessage({
732
716
  <AttachmentPreviewList
733
717
  items={attachments}
734
718
  artifactRunId={runId}
719
+ onOpenArtifact={onOpenArtifact}
735
720
  align="end"
736
721
  variant="message"
737
722
  StoreLinkComponent={StoreLinkComponent}
@@ -744,9 +729,13 @@ function SummaryMessage({
744
729
  message={message}
745
730
  workstreamId={workstreamId}
746
731
  artifactRunId={runId}
732
+ onOpenArtifact={onOpenArtifact}
747
733
  markdownComponents={markdownComponents}
734
+ // Comments/edits are user actions: keep the user-message background and end
735
+ // alignment, just give the card a little more room for tables and diffs.
736
+ className={editingAction ? 'max-w-[min(44rem,90%)]' : undefined}
748
737
  >
749
- {questionBody}
738
+ {editingAction ? <DocumentEditingActionCard action={editingAction} /> : questionBody}
750
739
  </SummaryUserBubble>
751
740
  )}
752
741
  </>
@@ -763,7 +752,9 @@ function SummaryMessage({
763
752
  options={uxConfig.options}
764
753
  variant={uxConfig.variant}
765
754
  multiSelect={uxConfig.multiSelect}
766
- onSelect={(optionId) => onSendMessage?.(optionId)}
755
+ onSelect={(optionId) =>
756
+ onSendMessage?.(optionId, getToolApprovalResponseMetadata(message, optionId))
757
+ }
767
758
  onMultiSelect={(optionIds) => onSendMessage?.(optionIds.join(', '))}
768
759
  allowFreeResponse={!uxConfig.options?.length || !!uxConfig.free_response}
769
760
  placeholder={uxConfig.free_response?.placeholder}
@@ -796,6 +787,7 @@ function SummaryMessage({
796
787
  >
797
788
  <MarkdownRenderer
798
789
  artifactRunId={runId}
790
+ onArtifactOpen={onOpenArtifact}
799
791
  onProposalSelect={(optionId) => onSendMessage?.(optionId)}
800
792
  onProposalSubmit={(text) => onSendMessage?.(text)}
801
793
  components={markdownComponents}
@@ -1025,6 +1017,8 @@ interface SummaryToolDetailItem {
1025
1017
  finishedAt?: number | string;
1026
1018
  status?: ToolExecutionStatus;
1027
1019
  decisionText?: string;
1020
+ resources: AgentResourceReference[];
1021
+ workflowRunId?: string;
1028
1022
  sections: SummaryToolDetailSection[];
1029
1023
  }
1030
1024
 
@@ -1040,6 +1034,7 @@ const TOOL_DETAIL_SYSTEM_KEYS = new Set([
1040
1034
  'collection_id',
1041
1035
  'document_id',
1042
1036
  'display_role',
1037
+ 'duration_ms',
1043
1038
  'event_class',
1044
1039
  'id',
1045
1040
  'object_id',
@@ -1057,6 +1052,7 @@ const TOOL_DETAIL_SYSTEM_KEYS = new Set([
1057
1052
  'tools',
1058
1053
  'message_to_human',
1059
1054
  'progress_messages',
1055
+ 'resources',
1060
1056
  'source',
1061
1057
  'token_usage',
1062
1058
  'checkpoint_at',
@@ -1391,7 +1387,12 @@ function getRenderableGroupKey(group: RenderableGroup): string {
1391
1387
  return ['group', group.toolRunId, group.firstTimestamp, firstKey, lastKey].filter(Boolean).join(':');
1392
1388
  }
1393
1389
 
1394
- function getPreviousRenderableGroupTimestamp(groups: RenderableGroup[], index: number): number | string | undefined {
1390
+ // Accepts the augmented render list (which may contain interleaved resource_summary items); those
1391
+ // are skipped so the previous *group* timestamp is found regardless of inserted summaries.
1392
+ function getPreviousRenderableGroupTimestamp(
1393
+ groups: Array<RenderableGroup | ResourceSummaryRenderItem>,
1394
+ index: number,
1395
+ ): number | string | undefined {
1395
1396
  for (let previousIndex = index - 1; previousIndex >= 0; previousIndex--) {
1396
1397
  const group = groups[previousIndex];
1397
1398
  if (group.type === 'single') return group.message.timestamp;
@@ -1509,6 +1510,8 @@ function buildSummaryToolDetailItem(message: AgentMessage, index: number): Summa
1509
1510
  finishedAt: getTimestampDetail(details[SUMMARY_TOOL_FINISHED_AT_DETAIL_KEY]) ?? message.timestamp,
1510
1511
  status: approvalDecisionTitle ? 'error' : (details.tool_status as ToolExecutionStatus | undefined),
1511
1512
  decisionText,
1513
+ resources: getResourcesFromMessage(message),
1514
+ workflowRunId: message.workflow_run_id,
1512
1515
  sections: getToolDetailSections(message),
1513
1516
  };
1514
1517
  }
@@ -1843,6 +1846,13 @@ function formatToolDetailCopyText(item: SummaryToolDetailItem): string {
1843
1846
  const metadata = getToolDetailMetadata(item).map((entry) => `${entry.label}: ${entry.value}`);
1844
1847
  if (metadata.length > 0) parts.push(metadata.join('\n'));
1845
1848
  if (item.text) parts.push(item.text);
1849
+ if (item.resources.length > 0) {
1850
+ parts.push(
1851
+ `Resources\n${item.resources
1852
+ .map((resource) => `${resource.label} (${resource.type}:${resource.id}) — ${resource.action}`)
1853
+ .join('\n')}`,
1854
+ );
1855
+ }
1846
1856
 
1847
1857
  for (const section of item.sections) {
1848
1858
  parts.push(`${section.label}\n${formatToolSectionValue(section.value)}`);
@@ -1950,52 +1960,80 @@ function SummaryToolDetailPanel({ item }: { item: SummaryToolDetailItem }) {
1950
1960
  }
1951
1961
 
1952
1962
  function SummaryToolTimelineItem({ item }: { item: SummaryToolDetailItem }) {
1963
+ const { t } = useUITranslation();
1953
1964
  const isDecision = Boolean(item.decisionText);
1954
1965
  const isAttention = !isDecision && (item.status === 'error' || item.status === 'warning');
1955
1966
  const hasMetadata = getToolDetailMetadata(item).length > 0;
1956
1967
  const hasDetails = Boolean(item.command || item.text || item.sections.length || hasMetadata);
1968
+ const hasResources = item.resources.length > 0;
1957
1969
  const [isExpanded, setIsExpanded] = useState(false);
1958
1970
  const iconStatus = isDecision ? undefined : item.status;
1971
+ const toggleDetailsLabel = isExpanded ? t('agent.hideDetails') : t('agent.showDetails');
1972
+ const detailsSubject = hasResources ? item.resources.map((resource) => resource.label).join(', ') : item.title;
1973
+
1974
+ const icon = (
1975
+ <span
1976
+ className={cn(
1977
+ 'flex size-5 items-center justify-center pt-0.5',
1978
+ isAttention ? 'text-attention' : 'text-muted',
1979
+ )}
1980
+ >
1981
+ <ToolDetailIcon kind={item.kind} status={iconStatus} />
1982
+ </span>
1983
+ );
1984
+
1985
+ const chevron = (
1986
+ <ChevronDown
1987
+ className={cn('size-4 shrink-0 text-muted opacity-50 transition-transform', !isExpanded && '-rotate-90')}
1988
+ aria-hidden="true"
1989
+ />
1990
+ );
1959
1991
 
1960
1992
  return (
1961
1993
  <div className="min-w-0">
1962
- <button
1963
- type="button"
1964
- className={cn(
1965
- 'grid w-full grid-cols-[1.5rem_1fr_auto] gap-2 text-start outline-none transition-colors',
1966
- 'focus-visible:text-foreground focus-visible:underline focus-visible:underline-offset-4',
1967
- hasDetails ? 'cursor-pointer hover:text-foreground' : 'cursor-default',
1968
- )}
1969
- onClick={() => hasDetails && setIsExpanded((current) => !current)}
1970
- aria-expanded={hasDetails ? isExpanded : undefined}
1971
- disabled={!hasDetails}
1972
- >
1973
- <span
1994
+ {hasResources ? (
1995
+ <div className="grid w-full grid-cols-[1.5rem_1fr_auto] items-center gap-2 text-start">
1996
+ {icon}
1997
+ <ResourceActivityLinkList resources={item.resources} workflowRunId={item.workflowRunId} />
1998
+ {hasDetails ? (
1999
+ <VTooltip description={toggleDetailsLabel} asChild>
2000
+ <Button
2001
+ variant="ghost"
2002
+ size="xs"
2003
+ className="size-6 p-0 text-muted"
2004
+ onClick={() => setIsExpanded((current) => !current)}
2005
+ aria-expanded={isExpanded}
2006
+ aria-label={`${toggleDetailsLabel}: ${detailsSubject}`}
2007
+ >
2008
+ {chevron}
2009
+ </Button>
2010
+ </VTooltip>
2011
+ ) : null}
2012
+ </div>
2013
+ ) : (
2014
+ <button
2015
+ type="button"
1974
2016
  className={cn(
1975
- 'flex size-5 items-center justify-center pt-0.5',
1976
- isAttention ? 'text-attention' : 'text-muted',
2017
+ 'grid w-full grid-cols-[1.5rem_1fr_auto] gap-2 text-start outline-none transition-colors',
2018
+ 'focus-visible:text-foreground focus-visible:underline focus-visible:underline-offset-4',
2019
+ hasDetails ? 'cursor-pointer hover:text-foreground' : 'cursor-default',
1977
2020
  )}
2021
+ onClick={() => hasDetails && setIsExpanded((current) => !current)}
2022
+ aria-expanded={hasDetails ? isExpanded : undefined}
2023
+ disabled={!hasDetails}
1978
2024
  >
1979
- <ToolDetailIcon kind={item.kind} status={iconStatus} />
1980
- </span>
1981
- <span className="min-w-0 text-sm text-muted">
1982
- <span className="break-words">{item.title}</span>
1983
- {item.decisionText ? (
1984
- <Badge variant="destructive" className="ms-2 rounded-full shadow-sm shadow-destructive/10">
1985
- {item.decisionText}
1986
- </Badge>
1987
- ) : null}
1988
- </span>
1989
- {hasDetails ? (
1990
- <ChevronDown
1991
- className={cn(
1992
- 'mt-0.5 size-4 shrink-0 text-muted opacity-50 transition-transform',
1993
- !isExpanded && '-rotate-90',
1994
- )}
1995
- aria-hidden="true"
1996
- />
1997
- ) : null}
1998
- </button>
2025
+ {icon}
2026
+ <span className="min-w-0 text-sm text-muted">
2027
+ <span className="break-words">{item.title}</span>
2028
+ {item.decisionText ? (
2029
+ <Badge variant="destructive" className="ms-2 rounded-full shadow-sm shadow-destructive/10">
2030
+ {item.decisionText}
2031
+ </Badge>
2032
+ ) : null}
2033
+ </span>
2034
+ {hasDetails ? chevron : null}
2035
+ </button>
2036
+ )}
1999
2037
  {hasDetails && isExpanded ? (
2000
2038
  <div className="mt-1">
2001
2039
  <SummaryToolDetailPanel item={item} />
@@ -2028,13 +2066,7 @@ function SummaryThoughtProseItem({
2028
2066
  <div className="min-w-0 py-1">
2029
2067
  <div
2030
2068
  data-testid="summary-thought-prose"
2031
- className={cn(
2032
- SUMMARY_PROSE_CLASS,
2033
- isLong &&
2034
- !disableCollapse &&
2035
- !isExpanded &&
2036
- '[display:-webkit-box] overflow-hidden [-webkit-box-orient:vertical] [-webkit-line-clamp:6]',
2037
- )}
2069
+ className={cn(SUMMARY_PROSE_CLASS, isLong && !disableCollapse && !isExpanded && AGENT_LINE_CLAMP_CLASS)}
2038
2070
  style={{ overflowWrap: 'anywhere' }}
2039
2071
  >
2040
2072
  <MarkdownRenderer artifactRunId={artifactRunId} components={DEFAULT_AGENT_MARKDOWN_COMPONENTS}>
@@ -2133,9 +2165,9 @@ function SummaryStoppedMessage({
2133
2165
 
2134
2166
  return (
2135
2167
  <div className={cn('mx-auto w-full max-w-3xl px-1', className)} data-testid="summary-stopped-message">
2136
- <div className="flex items-center justify-end gap-2 text-lg font-medium text-muted sm:text-xl">
2168
+ <div className="flex items-center justify-end gap-2 text-sm font-medium text-muted">
2137
2169
  <span>{t('agent.youStoppedAfter', { duration })}</span>
2138
- <MessageDeliveryStatus message={message} className="h-5 w-5" />
2170
+ <MessageDeliveryStatus message={message} className="h-4 w-4" />
2139
2171
  </div>
2140
2172
  <div className="mt-5 border-b border-border/70" />
2141
2173
  </div>
@@ -2240,7 +2272,12 @@ function SummaryActivityRow({
2240
2272
  options={uxConfig.options}
2241
2273
  variant={uxConfig.variant}
2242
2274
  multiSelect={uxConfig.multiSelect}
2243
- onSelect={(optionId) => onSendMessage?.(optionId)}
2275
+ onSelect={(optionId) =>
2276
+ onSendMessage?.(
2277
+ optionId,
2278
+ getToolApprovalResponseMetadata(message, optionId),
2279
+ )
2280
+ }
2244
2281
  onMultiSelect={(optionIds) => onSendMessage?.(optionIds.join(', '))}
2245
2282
  allowFreeResponse={
2246
2283
  !uxConfig.options?.length || !!uxConfig.free_response
@@ -2379,6 +2416,8 @@ interface AllMessagesMixedProps {
2379
2416
  streamingMessages?: Map<string, StreamingData>; // Real-time streaming chunks
2380
2417
  /** Callback when user sends a message (e.g., from proposal selection) */
2381
2418
  onSendMessage?: (message: string, metadata?: Record<string, unknown>) => void;
2419
+ /** Open a Markdown artifact in the surrounding agent panel. */
2420
+ onOpenArtifact?: (path: string) => void;
2382
2421
  /** Stable index for thinking messages (changes on 4s interval) */
2383
2422
  thinkingMessageIndex?: number;
2384
2423
  /** className overrides passed to every MessageItem */
@@ -2438,6 +2477,7 @@ function AllMessagesMixedComponent({
2438
2477
  isCompleted = false,
2439
2478
  streamingMessages = new Map(),
2440
2479
  onSendMessage,
2480
+ onOpenArtifact,
2441
2481
  messageItemClassNames,
2442
2482
  messageStyleOverrides,
2443
2483
  toolCallGroupClassNames,
@@ -2759,6 +2799,36 @@ function AllMessagesMixedComponent({
2759
2799
  return isCompleted || !isInProgress(completionDisplayMessages);
2760
2800
  }, [completionDisplayMessages, hasLatestToolApprovalAllow, hasPendingToolApprovalRequest, isCompleted]);
2761
2801
 
2802
+ // Per-turn resource summaries. Derived from the full source stream (not the active-tab view) so
2803
+ // child-workstream resources are included, but CLIPPED to the playback cursor so scrubbing back
2804
+ // never reveals resources created later in the turn. Gated on the MAIN workstream reaching either
2805
+ // a terminal state or its final ANSWER, so a completed child tab can't surface a summary early while
2806
+ // reusable interactive workflows can summarize a completed turn. Built from structured tool metadata
2807
+ // (details.resources), never parsed from prose.
2808
+ //
2809
+ // Clip by the cursor message's POSITION in the ordered source, not by `timestamp <= cursor`:
2810
+ // millisecond timestamps are not unique, so a later message sharing the cursor's timestamp would
2811
+ // otherwise leak. indexOf works because sortAndDedupeMessages preserves message references; a
2812
+ // timestamp compare is the fallback if the cursor can't be located (e.g. collapsed by dedup).
2813
+ const clippedResourceSource = useMemo(() => {
2814
+ if (workstreamSourceSorted.length === 0) return workstreamSourceSorted;
2815
+ const cursorMessage = messages[messages.length - 1];
2816
+ if (!cursorMessage) return [];
2817
+ const cursorIndex = workstreamSourceSorted.indexOf(cursorMessage);
2818
+ if (cursorIndex >= 0) {
2819
+ return cursorIndex >= workstreamSourceSorted.length - 1
2820
+ ? workstreamSourceSorted
2821
+ : workstreamSourceSorted.slice(0, cursorIndex + 1);
2822
+ }
2823
+ const cursorTs = getTimestampMs(cursorMessage.timestamp);
2824
+ return workstreamSourceSorted.filter((m) => getTimestampMs(m.timestamp) <= cursorTs);
2825
+ }, [workstreamSourceSorted, messages]);
2826
+ const isLatestResourceTurnComplete = useMemo(
2827
+ () => isCompleted || isResourceSummaryReady(clippedResourceSource),
2828
+ [isCompleted, clippedResourceSource],
2829
+ );
2830
+ const turnResourceSummaries = useMemo(() => segmentTurnResources(clippedResourceSource), [clippedResourceSource]);
2831
+
2762
2832
  // Split streaming messages:
2763
2833
  // - complete (or stale incomplete) ones are interleaved chronologically
2764
2834
  // - actively incomplete ones render at the end
@@ -2828,6 +2898,19 @@ function AllMessagesMixedComponent({
2828
2898
  [visibleSummaryDisplayMessages, isDisplayCompleted, latestSummaryObservedTimestamp],
2829
2899
  );
2830
2900
 
2901
+ // Interleave per-turn resource summaries into the sliding (summary) timeline, mirroring the
2902
+ // stacked view. Turn boundaries are user QUESTION message items.
2903
+ const slidingRenderItems = React.useMemo(
2904
+ () =>
2905
+ interleaveTurnSummaries(
2906
+ summaryConversationItems,
2907
+ (item) => item.type === 'message' && item.message.type === AgentMessageType.QUESTION,
2908
+ turnResourceSummaries,
2909
+ isLatestResourceTurnComplete,
2910
+ ),
2911
+ [summaryConversationItems, turnResourceSummaries, isLatestResourceTurnComplete],
2912
+ );
2913
+
2831
2914
  // Group messages with ONLY complete streaming interleaved for stacked view.
2832
2915
  // Incomplete streaming is rendered separately at the end (avoids re-grouping on every chunk).
2833
2916
  // Assistant prose stays as its own timeline item so thoughts remain visible between tool calls.
@@ -2839,6 +2922,19 @@ function AllMessagesMixedComponent({
2839
2922
  [displayMessages, completeStreaming, activeWorkstream],
2840
2923
  );
2841
2924
 
2925
+ // Interleave per-turn resource summaries into the stacked timeline. Turn boundaries are user
2926
+ // QUESTION groups; turn N's resources come from the full-stream segmentation.
2927
+ const stackedRenderItems = React.useMemo(
2928
+ () =>
2929
+ interleaveTurnSummaries(
2930
+ groupedMessages,
2931
+ (group) => group.type === 'single' && group.message.type === AgentMessageType.QUESTION,
2932
+ turnResourceSummaries,
2933
+ isLatestResourceTurnComplete,
2934
+ ),
2935
+ [groupedMessages, turnResourceSummaries, isLatestResourceTurnComplete],
2936
+ );
2937
+
2842
2938
  // Show an activity indicator when the latest visible conversation state is not terminal.
2843
2939
  // Older idle/complete messages from previous turns must not suppress the new turn.
2844
2940
  const isAgentWorking = useMemo(() => {
@@ -3246,18 +3342,16 @@ function AllMessagesMixedComponent({
3246
3342
  {isSummaryView && activeWorkstream !== 'all' && activeWorkstreamName && (
3247
3343
  <div className="sticky top-0 z-20 -mx-2 bg-background/95 px-2 pb-2 pt-1 backdrop-blur sm:-mx-4 sm:px-4">
3248
3344
  <div className="mx-auto flex w-full max-w-3xl items-center gap-2 border-b border-border/70 pb-3">
3249
- <VTooltip description={t('agent.backToMainAgent')} asChild>
3250
- <Button
3251
- type="button"
3252
- variant="ghost"
3253
- size="icon"
3254
- className="size-8 shrink-0 text-muted hover:text-foreground"
3255
- aria-label={t('agent.backToMainAgent')}
3256
- onClick={handleShowMainAgentChat}
3257
- >
3258
- <ArrowLeft className="size-4" aria-hidden="true" />
3259
- </Button>
3260
- </VTooltip>
3345
+ <Button
3346
+ type="button"
3347
+ variant="ghost"
3348
+ size="icon"
3349
+ className="size-8 shrink-0 text-muted hover:text-foreground"
3350
+ title={t('agent.backToMainAgent')}
3351
+ onClick={handleShowMainAgentChat}
3352
+ >
3353
+ <ArrowLeft className="size-4" aria-hidden="true" />
3354
+ </Button>
3261
3355
  <div className="min-w-0 flex-1 truncate text-sm font-medium text-foreground">
3262
3356
  {activeWorkstreamName}
3263
3357
  </div>
@@ -3293,8 +3387,19 @@ function AllMessagesMixedComponent({
3293
3387
  {viewMode === 'stacked' ? (
3294
3388
  // Details view - show ALL messages with streaming interleaved
3295
3389
  <>
3296
- {groupedMessages.map((group, groupIndex) => {
3297
- const isLastGroup = groupIndex === groupedMessages.length - 1;
3390
+ {stackedRenderItems.map((group, groupIndex) => {
3391
+ const isLastGroup = groupIndex === stackedRenderItems.length - 1;
3392
+
3393
+ if (group.type === 'resource_summary') {
3394
+ return (
3395
+ <ResourceChangeSummary
3396
+ key={group.key}
3397
+ resources={group.resources}
3398
+ workflowRunId={artifactRunId}
3399
+ className="my-2"
3400
+ />
3401
+ );
3402
+ }
3298
3403
 
3299
3404
  if (group.type === 'tool_group') {
3300
3405
  // Render grouped tool calls
@@ -3367,7 +3472,7 @@ function AllMessagesMixedComponent({
3367
3472
  message={message}
3368
3473
  startTimestamp={
3369
3474
  getPreviousRenderableGroupTimestamp(
3370
- groupedMessages,
3475
+ stackedRenderItems,
3371
3476
  groupIndex,
3372
3477
  ) ?? message.timestamp
3373
3478
  }
@@ -3403,6 +3508,7 @@ function AllMessagesMixedComponent({
3403
3508
  message={message}
3404
3509
  showPulsatingCircle={isLatestMessage}
3405
3510
  onSendMessage={onSendMessage}
3511
+ onOpenArtifact={onOpenArtifact}
3406
3512
  requestInputAnswered={isRequestInputAnswered(
3407
3513
  message,
3408
3514
  answeredRequestInputKeys,
@@ -3463,7 +3569,18 @@ function AllMessagesMixedComponent({
3463
3569
  ) : (
3464
3570
  // Summary view - conversation turns with per-turn work disclosure
3465
3571
  <>
3466
- {summaryConversationItems.map((item) => {
3572
+ {slidingRenderItems.map((item) => {
3573
+ if (item.type === 'resource_summary') {
3574
+ return (
3575
+ <ResourceChangeSummary
3576
+ key={item.key}
3577
+ resources={item.resources}
3578
+ workflowRunId={artifactRunId}
3579
+ className="my-2"
3580
+ />
3581
+ );
3582
+ }
3583
+
3467
3584
  if (item.type === 'work') {
3468
3585
  if (hideToolCallsInViewMode?.includes(viewMode)) return null;
3469
3586
  const isThinkingOnlyWork = isTransientThinkingWork(item.messages);
@@ -3523,6 +3640,7 @@ function AllMessagesMixedComponent({
3523
3640
  <SummaryMessage
3524
3641
  message={message}
3525
3642
  onSendMessage={onSendMessage}
3643
+ onOpenArtifact={onOpenArtifact}
3526
3644
  onSelectWorkstream={handleSelectWorkstream}
3527
3645
  requestInputAnswered={isRequestInputAnswered(
3528
3646
  message,