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

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 (415) 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/core/hooks/useScrollableSearch.d.ts +1 -1
  13. package/lib/core/hooks/useScrollableSearch.d.ts.map +1 -1
  14. package/lib/core/hooks/useScrollableSearch.js +15 -2
  15. package/lib/core/hooks/useScrollableSearch.js.map +1 -1
  16. package/lib/env/index.d.ts +4 -0
  17. package/lib/env/index.d.ts.map +1 -1
  18. package/lib/env/index.js.map +1 -1
  19. package/lib/features/agent/chat/AgentRequestInputOverlay.d.ts +1 -1
  20. package/lib/features/agent/chat/AgentRequestInputOverlay.d.ts.map +1 -1
  21. package/lib/features/agent/chat/AgentRequestInputOverlay.js +3 -8
  22. package/lib/features/agent/chat/AgentRequestInputOverlay.js.map +1 -1
  23. package/lib/features/agent/chat/AgentRightPanel.d.ts +5 -1
  24. package/lib/features/agent/chat/AgentRightPanel.d.ts.map +1 -1
  25. package/lib/features/agent/chat/AgentRightPanel.js +2 -2
  26. package/lib/features/agent/chat/AgentRightPanel.js.map +1 -1
  27. package/lib/features/agent/chat/ArtifactsTab.d.ts +5 -1
  28. package/lib/features/agent/chat/ArtifactsTab.d.ts.map +1 -1
  29. package/lib/features/agent/chat/ArtifactsTab.js +48 -11
  30. package/lib/features/agent/chat/ArtifactsTab.js.map +1 -1
  31. package/lib/features/agent/chat/DocumentEditingActionCard.d.ts +6 -0
  32. package/lib/features/agent/chat/DocumentEditingActionCard.d.ts.map +1 -0
  33. package/lib/features/agent/chat/DocumentEditingActionCard.js +129 -0
  34. package/lib/features/agent/chat/DocumentEditingActionCard.js.map +1 -0
  35. package/lib/features/agent/chat/ModernAgentConversation.d.ts +27 -2
  36. package/lib/features/agent/chat/ModernAgentConversation.d.ts.map +1 -1
  37. package/lib/features/agent/chat/ModernAgentConversation.js +174 -40
  38. package/lib/features/agent/chat/ModernAgentConversation.js.map +1 -1
  39. package/lib/features/agent/chat/ModernAgentOutput/ActiveWorkstreamsSummary.d.ts +2 -1
  40. package/lib/features/agent/chat/ModernAgentOutput/ActiveWorkstreamsSummary.d.ts.map +1 -1
  41. package/lib/features/agent/chat/ModernAgentOutput/ActiveWorkstreamsSummary.js +25 -10
  42. package/lib/features/agent/chat/ModernAgentOutput/ActiveWorkstreamsSummary.js.map +1 -1
  43. package/lib/features/agent/chat/ModernAgentOutput/AgentMarkdownAnchor.d.ts +45 -0
  44. package/lib/features/agent/chat/ModernAgentOutput/AgentMarkdownAnchor.d.ts.map +1 -0
  45. package/lib/features/agent/chat/ModernAgentOutput/AgentMarkdownAnchor.js +40 -0
  46. package/lib/features/agent/chat/ModernAgentOutput/AgentMarkdownAnchor.js.map +1 -0
  47. package/lib/features/agent/chat/ModernAgentOutput/AllMessagesMixed.d.ts +3 -1
  48. package/lib/features/agent/chat/ModernAgentOutput/AllMessagesMixed.d.ts.map +1 -1
  49. package/lib/features/agent/chat/ModernAgentOutput/AllMessagesMixed.js +118 -58
  50. package/lib/features/agent/chat/ModernAgentOutput/AllMessagesMixed.js.map +1 -1
  51. package/lib/features/agent/chat/ModernAgentOutput/AttachmentPreview.d.ts +2 -1
  52. package/lib/features/agent/chat/ModernAgentOutput/AttachmentPreview.d.ts.map +1 -1
  53. package/lib/features/agent/chat/ModernAgentOutput/AttachmentPreview.js +23 -7
  54. package/lib/features/agent/chat/ModernAgentOutput/AttachmentPreview.js.map +1 -1
  55. package/lib/features/agent/chat/ModernAgentOutput/CollapsibleAgentMarkdown.d.ts +25 -0
  56. package/lib/features/agent/chat/ModernAgentOutput/CollapsibleAgentMarkdown.d.ts.map +1 -0
  57. package/lib/features/agent/chat/ModernAgentOutput/CollapsibleAgentMarkdown.js +33 -0
  58. package/lib/features/agent/chat/ModernAgentOutput/CollapsibleAgentMarkdown.js.map +1 -0
  59. package/lib/features/agent/chat/ModernAgentOutput/Header.js +2 -2
  60. package/lib/features/agent/chat/ModernAgentOutput/Header.js.map +1 -1
  61. package/lib/features/agent/chat/ModernAgentOutput/MessageInput.d.ts +2 -1
  62. package/lib/features/agent/chat/ModernAgentOutput/MessageInput.d.ts.map +1 -1
  63. package/lib/features/agent/chat/ModernAgentOutput/MessageInput.js +2 -2
  64. package/lib/features/agent/chat/ModernAgentOutput/MessageInput.js.map +1 -1
  65. package/lib/features/agent/chat/ModernAgentOutput/MessageItem.d.ts +3 -1
  66. package/lib/features/agent/chat/ModernAgentOutput/MessageItem.d.ts.map +1 -1
  67. package/lib/features/agent/chat/ModernAgentOutput/MessageItem.js +23 -25
  68. package/lib/features/agent/chat/ModernAgentOutput/MessageItem.js.map +1 -1
  69. package/lib/features/agent/chat/ModernAgentOutput/ResourceChangeSummary.d.ts +14 -0
  70. package/lib/features/agent/chat/ModernAgentOutput/ResourceChangeSummary.d.ts.map +1 -0
  71. package/lib/features/agent/chat/ModernAgentOutput/ResourceChangeSummary.js +21 -0
  72. package/lib/features/agent/chat/ModernAgentOutput/ResourceChangeSummary.js.map +1 -0
  73. package/lib/features/agent/chat/ModernAgentOutput/ResourceChip.d.ts +30 -0
  74. package/lib/features/agent/chat/ModernAgentOutput/ResourceChip.d.ts.map +1 -0
  75. package/lib/features/agent/chat/ModernAgentOutput/ResourceChip.js +53 -0
  76. package/lib/features/agent/chat/ModernAgentOutput/ResourceChip.js.map +1 -0
  77. package/lib/features/agent/chat/ModernAgentOutput/ToolCallGroup.d.ts.map +1 -1
  78. package/lib/features/agent/chat/ModernAgentOutput/ToolCallGroup.js +21 -2
  79. package/lib/features/agent/chat/ModernAgentOutput/ToolCallGroup.js.map +1 -1
  80. package/lib/features/agent/chat/ModernAgentOutput/requestInputMessages.d.ts +9 -1
  81. package/lib/features/agent/chat/ModernAgentOutput/requestInputMessages.d.ts.map +1 -1
  82. package/lib/features/agent/chat/ModernAgentOutput/requestInputMessages.js +97 -2
  83. package/lib/features/agent/chat/ModernAgentOutput/requestInputMessages.js.map +1 -1
  84. package/lib/features/agent/chat/ModernAgentOutput/resourceLinks.d.ts +6 -0
  85. package/lib/features/agent/chat/ModernAgentOutput/resourceLinks.d.ts.map +1 -0
  86. package/lib/features/agent/chat/ModernAgentOutput/resourceLinks.js +29 -0
  87. package/lib/features/agent/chat/ModernAgentOutput/resourceLinks.js.map +1 -0
  88. package/lib/features/agent/chat/ModernAgentOutput/resourceSummary.d.ts +33 -0
  89. package/lib/features/agent/chat/ModernAgentOutput/resourceSummary.d.ts.map +1 -0
  90. package/lib/features/agent/chat/ModernAgentOutput/resourceSummary.js +129 -0
  91. package/lib/features/agent/chat/ModernAgentOutput/resourceSummary.js.map +1 -0
  92. package/lib/features/agent/chat/ModernAgentOutput/utils.d.ts +7 -0
  93. package/lib/features/agent/chat/ModernAgentOutput/utils.d.ts.map +1 -1
  94. package/lib/features/agent/chat/ModernAgentOutput/utils.js +11 -1
  95. package/lib/features/agent/chat/ModernAgentOutput/utils.js.map +1 -1
  96. package/lib/features/agent/chat/hooks/useAgentStream.d.ts +1 -1
  97. package/lib/features/agent/chat/hooks/useAgentStream.d.ts.map +1 -1
  98. package/lib/features/agent/chat/hooks/useAgentStream.js +34 -10
  99. package/lib/features/agent/chat/hooks/useAgentStream.js.map +1 -1
  100. package/lib/features/agent/chat/index.d.ts +2 -1
  101. package/lib/features/agent/chat/index.d.ts.map +1 -1
  102. package/lib/features/agent/chat/index.js +3 -0
  103. package/lib/features/agent/chat/index.js.map +1 -1
  104. package/lib/features/facets/PromptsFacetsNav.d.ts +8 -6
  105. package/lib/features/facets/PromptsFacetsNav.d.ts.map +1 -1
  106. package/lib/features/facets/PromptsFacetsNav.js +8 -3
  107. package/lib/features/facets/PromptsFacetsNav.js.map +1 -1
  108. package/lib/features/store/objects/DocumentSearchResults.js +2 -2
  109. package/lib/features/store/objects/DocumentSearchResults.js.map +1 -1
  110. package/lib/features/store/objects/components/ContentOverview.d.ts +2 -1
  111. package/lib/features/store/objects/components/ContentOverview.d.ts.map +1 -1
  112. package/lib/features/store/objects/components/ContentOverview.js +90 -16
  113. package/lib/features/store/objects/components/ContentOverview.js.map +1 -1
  114. package/lib/features/store/objects/components/DocumentEditingConfigurationSelector.d.ts +16 -0
  115. package/lib/features/store/objects/components/DocumentEditingConfigurationSelector.d.ts.map +1 -0
  116. package/lib/features/store/objects/components/DocumentEditingConfigurationSelector.js +116 -0
  117. package/lib/features/store/objects/components/DocumentEditingConfigurationSelector.js.map +1 -0
  118. package/lib/features/store/objects/components/DocumentEditingLockStatus.d.ts +7 -0
  119. package/lib/features/store/objects/components/DocumentEditingLockStatus.d.ts.map +1 -0
  120. package/lib/features/store/objects/components/DocumentEditingLockStatus.js +13 -0
  121. package/lib/features/store/objects/components/DocumentEditingLockStatus.js.map +1 -0
  122. package/lib/features/store/objects/components/DocumentEditingPanel.d.ts +48 -0
  123. package/lib/features/store/objects/components/DocumentEditingPanel.d.ts.map +1 -0
  124. package/lib/features/store/objects/components/DocumentEditingPanel.js +720 -0
  125. package/lib/features/store/objects/components/DocumentEditingPanel.js.map +1 -0
  126. package/lib/features/store/objects/components/TextEditorPanel.d.ts.map +1 -1
  127. package/lib/features/store/objects/components/TextEditorPanel.js +22 -9
  128. package/lib/features/store/objects/components/TextEditorPanel.js.map +1 -1
  129. package/lib/features/store/objects/components/documentArtifactRefs.d.ts +26 -0
  130. package/lib/features/store/objects/components/documentArtifactRefs.d.ts.map +1 -0
  131. package/lib/features/store/objects/components/documentArtifactRefs.js +52 -0
  132. package/lib/features/store/objects/components/documentArtifactRefs.js.map +1 -0
  133. package/lib/features/store/objects/components/documentEditingAgentConfig.d.ts +4 -0
  134. package/lib/features/store/objects/components/documentEditingAgentConfig.d.ts.map +1 -0
  135. package/lib/features/store/objects/components/documentEditingAgentConfig.js +40 -0
  136. package/lib/features/store/objects/components/documentEditingAgentConfig.js.map +1 -0
  137. package/lib/features/store/objects/components/documentEditingPrompts.d.ts +3 -0
  138. package/lib/features/store/objects/components/documentEditingPrompts.d.ts.map +1 -0
  139. package/lib/features/store/objects/components/documentEditingPrompts.js +13 -0
  140. package/lib/features/store/objects/components/documentEditingPrompts.js.map +1 -0
  141. package/lib/features/store/objects/components/documentEditingRun.d.ts +27 -0
  142. package/lib/features/store/objects/components/documentEditingRun.d.ts.map +1 -0
  143. package/lib/features/store/objects/components/documentEditingRun.js +126 -0
  144. package/lib/features/store/objects/components/documentEditingRun.js.map +1 -0
  145. package/lib/features/store/objects/components/documentEditingTarget.d.ts +20 -0
  146. package/lib/features/store/objects/components/documentEditingTarget.d.ts.map +1 -0
  147. package/lib/features/store/objects/components/documentEditingTarget.js +40 -0
  148. package/lib/features/store/objects/components/documentEditingTarget.js.map +1 -0
  149. package/lib/features/store/objects/components/index.d.ts +1 -0
  150. package/lib/features/store/objects/components/index.d.ts.map +1 -1
  151. package/lib/features/store/objects/components/index.js +1 -0
  152. package/lib/features/store/objects/components/index.js.map +1 -1
  153. package/lib/features/store/objects/components/useContentPanelHooks.d.ts +36 -4
  154. package/lib/features/store/objects/components/useContentPanelHooks.d.ts.map +1 -1
  155. package/lib/features/store/objects/components/useContentPanelHooks.js +53 -29
  156. package/lib/features/store/objects/components/useContentPanelHooks.js.map +1 -1
  157. package/lib/features/store/objects/components/useDownloadFile.d.ts +2 -1
  158. package/lib/features/store/objects/components/useDownloadFile.d.ts.map +1 -1
  159. package/lib/features/store/objects/components/useDownloadFile.js +3 -0
  160. package/lib/features/store/objects/components/useDownloadFile.js.map +1 -1
  161. package/lib/features/store/objects/search/DocumentSearchContext.d.ts +128 -6
  162. package/lib/features/store/objects/search/DocumentSearchContext.d.ts.map +1 -1
  163. package/lib/features/store/objects/selection/ObjectsActionContext.d.ts +2 -2
  164. package/lib/features/store/objects/selection/ObjectsActionContext.d.ts.map +1 -1
  165. package/lib/features/store/objects/selection/ObjectsActionSpec.d.ts +2 -2
  166. package/lib/features/store/objects/selection/ObjectsActionSpec.d.ts.map +1 -1
  167. package/lib/features/store/objects/selection/SelectionActions.d.ts +2 -2
  168. package/lib/features/store/objects/selection/SelectionActions.d.ts.map +1 -1
  169. package/lib/features/store/objects/selection/actions/StartWorkflowButton.js +1 -1
  170. package/lib/features/store/objects/selection/actions/StartWorkflowButton.js.map +1 -1
  171. package/lib/features/store/objects/upload/DocumentUploadModal.js.map +1 -1
  172. package/lib/features/store/types/IntakePolicyEditor.d.ts +2 -2
  173. package/lib/features/store/types/IntakePolicyEditor.d.ts.map +1 -1
  174. package/lib/features/store/types/IntakePolicyEditor.js +5 -1
  175. package/lib/features/store/types/IntakePolicyEditor.js.map +1 -1
  176. package/lib/features/store/types/IntakePolicyForm.d.ts.map +1 -1
  177. package/lib/features/store/types/IntakePolicyForm.js +2 -2
  178. package/lib/features/store/types/IntakePolicyForm.js.map +1 -1
  179. package/lib/features/store/types/ObjectSchemaEditor.d.ts +2 -2
  180. package/lib/features/store/types/ObjectSchemaEditor.d.ts.map +1 -1
  181. package/lib/features/store/types/SelectContentType.d.ts +2 -2
  182. package/lib/features/store/types/SelectContentType.d.ts.map +1 -1
  183. package/lib/features/store/types/SelectContentType.js.map +1 -1
  184. package/lib/features/store/types/SelectContentTypeModal.d.ts +2 -2
  185. package/lib/features/store/types/SelectContentTypeModal.d.ts.map +1 -1
  186. package/lib/features/store/types/SelectContentTypeModal.js.map +1 -1
  187. package/lib/features/store/types/TableLayoutEditor.d.ts +2 -2
  188. package/lib/features/store/types/TableLayoutEditor.d.ts.map +1 -1
  189. package/lib/features/store/types/TypeRegistry.d.ts +1267 -6
  190. package/lib/features/store/types/TypeRegistry.d.ts.map +1 -1
  191. package/lib/features/store/types/TypeRegistry.js +5 -0
  192. package/lib/features/store/types/TypeRegistry.js.map +1 -1
  193. package/lib/features/store/types/intake-policy-editor.logic.d.ts +9 -1
  194. package/lib/features/store/types/intake-policy-editor.logic.d.ts.map +1 -1
  195. package/lib/features/store/types/intake-policy-editor.logic.js +9 -1
  196. package/lib/features/store/types/intake-policy-editor.logic.js.map +1 -1
  197. package/lib/features/store/types/search/ObjectTypeSearchContext.d.ts +1251 -1
  198. package/lib/features/store/types/search/ObjectTypeSearchContext.d.ts.map +1 -1
  199. package/lib/features/store/types/typeCatalogCache.d.ts +2 -2
  200. package/lib/features/store/types/typeCatalogCache.d.ts.map +1 -1
  201. package/lib/features/store/types/typeCatalogCache.js +4 -0
  202. package/lib/features/store/types/typeCatalogCache.js.map +1 -1
  203. package/lib/features/user/UserInfo.d.ts +118 -7
  204. package/lib/features/user/UserInfo.d.ts.map +1 -1
  205. package/lib/i18n/locales/ar.json +120 -2
  206. package/lib/i18n/locales/de.json +120 -2
  207. package/lib/i18n/locales/en.json +123 -1
  208. package/lib/i18n/locales/es.json +120 -2
  209. package/lib/i18n/locales/fr.json +120 -2
  210. package/lib/i18n/locales/it.json +120 -2
  211. package/lib/i18n/locales/ja.json +120 -2
  212. package/lib/i18n/locales/ko.json +120 -2
  213. package/lib/i18n/locales/pt.json +120 -2
  214. package/lib/i18n/locales/ru.json +120 -2
  215. package/lib/i18n/locales/tr.json +120 -2
  216. package/lib/i18n/locales/zh-TW.json +120 -2
  217. package/lib/i18n/locales/zh.json +120 -2
  218. package/lib/rich-text/EditorToolbar.d.ts +37 -0
  219. package/lib/rich-text/EditorToolbar.d.ts.map +1 -0
  220. package/lib/rich-text/EditorToolbar.js +215 -0
  221. package/lib/rich-text/EditorToolbar.js.map +1 -0
  222. package/lib/rich-text/VertesiaRichTextEditor.d.ts +26 -0
  223. package/lib/rich-text/VertesiaRichTextEditor.d.ts.map +1 -0
  224. package/lib/rich-text/VertesiaRichTextEditor.js +67 -0
  225. package/lib/rich-text/VertesiaRichTextEditor.js.map +1 -0
  226. package/lib/rich-text/index.d.ts +2 -0
  227. package/lib/rich-text/index.d.ts.map +1 -0
  228. package/lib/rich-text/index.js +2 -0
  229. package/lib/rich-text/index.js.map +1 -0
  230. package/lib/session/UserSession.d.ts +18 -4
  231. package/lib/session/UserSession.d.ts.map +1 -1
  232. package/lib/shell/apps/AppInstallationProvider.d.ts +222 -2
  233. package/lib/shell/apps/AppInstallationProvider.d.ts.map +1 -1
  234. package/lib/shell/login/InviteAcceptModal.js.map +1 -1
  235. package/lib/vertesia-ui-core.js +3 -3
  236. package/lib/vertesia-ui-core.js.map +1 -1
  237. package/lib/vertesia-ui-features.js +35 -30
  238. package/lib/vertesia-ui-features.js.map +1 -1
  239. package/lib/vertesia-ui-i18n.js +14 -14
  240. package/lib/vertesia-ui-i18n.js.map +1 -1
  241. package/lib/vertesia-ui-rich-text.js +5 -0
  242. package/lib/vertesia-ui-rich-text.js.map +1 -0
  243. package/lib/vertesia-ui-widgets.js +25 -7
  244. package/lib/vertesia-ui-widgets.js.map +1 -1
  245. package/lib/widgets/markdown/AgentResourceResolver.d.ts +31 -0
  246. package/lib/widgets/markdown/AgentResourceResolver.d.ts.map +1 -0
  247. package/lib/widgets/markdown/AgentResourceResolver.js +39 -0
  248. package/lib/widgets/markdown/AgentResourceResolver.js.map +1 -0
  249. package/lib/widgets/markdown/ArtifactEditingSurface.d.ts +63 -0
  250. package/lib/widgets/markdown/ArtifactEditingSurface.d.ts.map +1 -0
  251. package/lib/widgets/markdown/ArtifactEditingSurface.js +582 -0
  252. package/lib/widgets/markdown/ArtifactEditingSurface.js.map +1 -0
  253. package/lib/widgets/markdown/CollaborativeMarkdownRenderer.d.ts +69 -0
  254. package/lib/widgets/markdown/CollaborativeMarkdownRenderer.d.ts.map +1 -0
  255. package/lib/widgets/markdown/CollaborativeMarkdownRenderer.js +374 -0
  256. package/lib/widgets/markdown/CollaborativeMarkdownRenderer.js.map +1 -0
  257. package/lib/widgets/markdown/MarkdownLink.d.ts +3 -1
  258. package/lib/widgets/markdown/MarkdownLink.d.ts.map +1 -1
  259. package/lib/widgets/markdown/MarkdownLink.js +41 -14
  260. package/lib/widgets/markdown/MarkdownLink.js.map +1 -1
  261. package/lib/widgets/markdown/MarkdownRenderer.d.ts +8 -1
  262. package/lib/widgets/markdown/MarkdownRenderer.d.ts.map +1 -1
  263. package/lib/widgets/markdown/MarkdownRenderer.js +20 -4
  264. package/lib/widgets/markdown/MarkdownRenderer.js.map +1 -1
  265. package/lib/widgets/markdown/index.d.ts +5 -1
  266. package/lib/widgets/markdown/index.d.ts.map +1 -1
  267. package/lib/widgets/markdown/index.js +5 -1
  268. package/lib/widgets/markdown/index.js.map +1 -1
  269. package/lib/widgets/markdown/normalizeCustomSchemeLinks.d.ts.map +1 -1
  270. package/lib/widgets/markdown/normalizeCustomSchemeLinks.js +14 -2
  271. package/lib/widgets/markdown/normalizeCustomSchemeLinks.js.map +1 -1
  272. package/lib/widgets/markdown/textDiff.d.ts +52 -0
  273. package/lib/widgets/markdown/textDiff.d.ts.map +1 -0
  274. package/lib/widgets/markdown/textDiff.js +362 -0
  275. package/lib/widgets/markdown/textDiff.js.map +1 -0
  276. package/lib/widgets/markdown/useArtifactContent.d.ts +5 -3
  277. package/lib/widgets/markdown/useArtifactContent.d.ts.map +1 -1
  278. package/lib/widgets/markdown/useArtifactContent.js +6 -3
  279. package/lib/widgets/markdown/useArtifactContent.js.map +1 -1
  280. package/lib/widgets/markdown/useResolvedUrl.d.ts +1 -5
  281. package/lib/widgets/markdown/useResolvedUrl.d.ts.map +1 -1
  282. package/lib/widgets/markdown/useResolvedUrl.js +19 -31
  283. package/lib/widgets/markdown/useResolvedUrl.js.map +1 -1
  284. package/lib/widgets/monacoEditor/MonacoEditor.d.ts +7 -1
  285. package/lib/widgets/monacoEditor/MonacoEditor.d.ts.map +1 -1
  286. package/lib/widgets/monacoEditor/MonacoEditor.js +62 -6
  287. package/lib/widgets/monacoEditor/MonacoEditor.js.map +1 -1
  288. package/lib/widgets/xml-viewer/hooks/useXMLViewer.d.ts +9 -0
  289. package/lib/widgets/xml-viewer/hooks/useXMLViewer.d.ts.map +1 -1
  290. package/lib/widgets/xml-viewer/hooks/useXMLViewer.js +20 -17
  291. package/lib/widgets/xml-viewer/hooks/useXMLViewer.js.map +1 -1
  292. package/package.json +36 -32
  293. package/src/__tests__/a11y.test.tsx +4 -1
  294. package/src/__tests__/axe-helper.ts +17 -7
  295. package/src/__tests__/setup.ts +25 -0
  296. package/src/core/components/shadcn/filters/filterBar.tsx +1 -0
  297. package/src/core/components/shadcn/modal/dialog.tsx +3 -1
  298. package/src/core/components/shadcn/tabs.test.tsx +65 -0
  299. package/src/core/components/shadcn/tabs.tsx +25 -3
  300. package/src/core/hooks/useScrollableSearch.test.tsx +139 -0
  301. package/src/core/hooks/useScrollableSearch.tsx +17 -3
  302. package/src/env/index.ts +2 -0
  303. package/src/features/agent/chat/AgentChatPlaybackControls.test.tsx +2 -0
  304. package/src/features/agent/chat/AgentRequestInputOverlay.test.tsx +51 -6
  305. package/src/features/agent/chat/AgentRequestInputOverlay.tsx +5 -7
  306. package/src/features/agent/chat/AgentRightPanel.tsx +16 -1
  307. package/src/features/agent/chat/ArtifactsTab.test.tsx +55 -0
  308. package/src/features/agent/chat/ArtifactsTab.tsx +203 -52
  309. package/src/features/agent/chat/DocumentEditingActionCard.test.tsx +105 -0
  310. package/src/features/agent/chat/DocumentEditingActionCard.tsx +210 -0
  311. package/src/features/agent/chat/ModernAgentConversation.test.tsx +432 -43
  312. package/src/features/agent/chat/ModernAgentConversation.tsx +352 -96
  313. package/src/features/agent/chat/ModernAgentOutput/ActiveWorkstreamsSummary.tsx +75 -20
  314. package/src/features/agent/chat/ModernAgentOutput/AgentMarkdownAnchor.test.tsx +79 -0
  315. package/src/features/agent/chat/ModernAgentOutput/AgentMarkdownAnchor.tsx +94 -0
  316. package/src/features/agent/chat/ModernAgentOutput/AllMessagesMixed.test.tsx +369 -34
  317. package/src/features/agent/chat/ModernAgentOutput/AllMessagesMixed.tsx +279 -115
  318. package/src/features/agent/chat/ModernAgentOutput/AttachmentPreview.tsx +53 -4
  319. package/src/features/agent/chat/ModernAgentOutput/CollapsibleAgentMarkdown.test.tsx +44 -0
  320. package/src/features/agent/chat/ModernAgentOutput/CollapsibleAgentMarkdown.tsx +88 -0
  321. package/src/features/agent/chat/ModernAgentOutput/Header.tsx +2 -2
  322. package/src/features/agent/chat/ModernAgentOutput/MessageInput.test.tsx +71 -0
  323. package/src/features/agent/chat/ModernAgentOutput/MessageInput.tsx +3 -1
  324. package/src/features/agent/chat/ModernAgentOutput/MessageItem.tsx +48 -50
  325. package/src/features/agent/chat/ModernAgentOutput/ResourceChangeSummary.tsx +40 -0
  326. package/src/features/agent/chat/ModernAgentOutput/ResourceChip.test.tsx +148 -0
  327. package/src/features/agent/chat/ModernAgentOutput/ResourceChip.tsx +141 -0
  328. package/src/features/agent/chat/ModernAgentOutput/ToolCallGroup.tsx +33 -1
  329. package/src/features/agent/chat/ModernAgentOutput/requestInputMessages.test.ts +95 -0
  330. package/src/features/agent/chat/ModernAgentOutput/requestInputMessages.ts +111 -1
  331. package/src/features/agent/chat/ModernAgentOutput/resourceLinks.tsx +43 -0
  332. package/src/features/agent/chat/ModernAgentOutput/resourceSummary.test.ts +229 -0
  333. package/src/features/agent/chat/ModernAgentOutput/resourceSummary.ts +152 -0
  334. package/src/features/agent/chat/ModernAgentOutput/utils.test.ts +17 -0
  335. package/src/features/agent/chat/ModernAgentOutput/utils.ts +14 -1
  336. package/src/features/agent/chat/hooks/useAgentStream.test.tsx +245 -0
  337. package/src/features/agent/chat/hooks/useAgentStream.ts +38 -9
  338. package/src/features/agent/chat/index.ts +12 -0
  339. package/src/features/facets/PromptsFacetsNav.tsx +17 -9
  340. package/src/features/store/objects/DocumentSearchResults.tsx +2 -2
  341. package/src/features/store/objects/components/ContentOverview.tsx +220 -66
  342. package/src/features/store/objects/components/DocumentEditingConfigurationSelector.test.ts +34 -0
  343. package/src/features/store/objects/components/DocumentEditingConfigurationSelector.tsx +211 -0
  344. package/src/features/store/objects/components/DocumentEditingLockStatus.test.tsx +32 -0
  345. package/src/features/store/objects/components/DocumentEditingLockStatus.tsx +45 -0
  346. package/src/features/store/objects/components/DocumentEditingPanel.test.tsx +336 -0
  347. package/src/features/store/objects/components/DocumentEditingPanel.tsx +1236 -0
  348. package/src/features/store/objects/components/TextEditorPanel.test.tsx +48 -0
  349. package/src/features/store/objects/components/TextEditorPanel.tsx +41 -20
  350. package/src/features/store/objects/components/documentArtifactRefs.test.ts +65 -0
  351. package/src/features/store/objects/components/documentArtifactRefs.ts +72 -0
  352. package/src/features/store/objects/components/documentEditingAgentConfig.test.ts +28 -0
  353. package/src/features/store/objects/components/documentEditingAgentConfig.ts +41 -0
  354. package/src/features/store/objects/components/documentEditingPrompts.test.ts +26 -0
  355. package/src/features/store/objects/components/documentEditingPrompts.ts +12 -0
  356. package/src/features/store/objects/components/documentEditingRun.test.ts +176 -0
  357. package/src/features/store/objects/components/documentEditingRun.ts +184 -0
  358. package/src/features/store/objects/components/documentEditingTarget.test.ts +96 -0
  359. package/src/features/store/objects/components/documentEditingTarget.ts +63 -0
  360. package/src/features/store/objects/components/index.ts +1 -0
  361. package/src/features/store/objects/components/useContentPanelHooks.ts +52 -27
  362. package/src/features/store/objects/components/useDownloadFile.test.ts +20 -0
  363. package/src/features/store/objects/components/useDownloadFile.ts +5 -1
  364. package/src/features/store/objects/selection/ObjectsActionContext.tsx +2 -2
  365. package/src/features/store/objects/selection/ObjectsActionSpec.ts +2 -2
  366. package/src/features/store/objects/selection/SelectionActions.tsx +2 -2
  367. package/src/features/store/objects/selection/actions/StartWorkflowButton.tsx +2 -2
  368. package/src/features/store/objects/upload/DocumentUploadModal.tsx +2 -2
  369. package/src/features/store/types/IntakePolicyEditor.tsx +12 -4
  370. package/src/features/store/types/IntakePolicyForm.tsx +25 -0
  371. package/src/features/store/types/ObjectSchemaEditor.tsx +2 -2
  372. package/src/features/store/types/SelectContentType.tsx +9 -9
  373. package/src/features/store/types/SelectContentTypeModal.tsx +5 -5
  374. package/src/features/store/types/TableLayoutEditor.tsx +2 -2
  375. package/src/features/store/types/TypeRegistry.ts +8 -3
  376. package/src/features/store/types/intake-policy-editor.logic.ts +10 -2
  377. package/src/features/store/types/typeCatalogCache.ts +10 -3
  378. package/src/i18n/locales/ar.json +120 -2
  379. package/src/i18n/locales/de.json +120 -2
  380. package/src/i18n/locales/en.json +123 -1
  381. package/src/i18n/locales/es.json +120 -2
  382. package/src/i18n/locales/fr.json +120 -2
  383. package/src/i18n/locales/it.json +120 -2
  384. package/src/i18n/locales/ja.json +120 -2
  385. package/src/i18n/locales/ko.json +120 -2
  386. package/src/i18n/locales/pt.json +120 -2
  387. package/src/i18n/locales/ru.json +120 -2
  388. package/src/i18n/locales/tr.json +120 -2
  389. package/src/i18n/locales/zh-TW.json +120 -2
  390. package/src/i18n/locales/zh.json +120 -2
  391. package/src/rich-text/EditorToolbar.tsx +708 -0
  392. package/src/rich-text/VertesiaRichTextEditor.test.tsx +211 -0
  393. package/src/rich-text/VertesiaRichTextEditor.tsx +241 -0
  394. package/src/rich-text/index.ts +9 -0
  395. package/src/session/UserSession.test.ts +11 -11
  396. package/src/shell/login/InviteAcceptModal.tsx +4 -4
  397. package/src/widgets/markdown/AgentResourceResolver.test.ts +24 -0
  398. package/src/widgets/markdown/AgentResourceResolver.tsx +70 -0
  399. package/src/widgets/markdown/ArtifactEditingSurface.test.tsx +541 -0
  400. package/src/widgets/markdown/ArtifactEditingSurface.tsx +878 -0
  401. package/src/widgets/markdown/CollaborativeMarkdownRenderer.test.tsx +484 -0
  402. package/src/widgets/markdown/CollaborativeMarkdownRenderer.tsx +825 -0
  403. package/src/widgets/markdown/MarkdownLink.test.tsx +122 -0
  404. package/src/widgets/markdown/MarkdownLink.tsx +102 -17
  405. package/src/widgets/markdown/MarkdownRenderer.tsx +30 -3
  406. package/src/widgets/markdown/index.ts +39 -1
  407. package/src/widgets/markdown/normalizeCustomSchemeLinks.ts +15 -2
  408. package/src/widgets/markdown/textDiff.test.ts +156 -0
  409. package/src/widgets/markdown/textDiff.ts +399 -0
  410. package/src/widgets/markdown/useArtifactContent.ts +9 -3
  411. package/src/widgets/markdown/useResolvedUrl.test.ts +29 -40
  412. package/src/widgets/markdown/useResolvedUrl.ts +33 -35
  413. package/src/widgets/monacoEditor/MonacoEditor.tsx +83 -7
  414. package/src/widgets/xml-viewer/hooks/useXMLViewer.test.ts +26 -0
  415. 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
- import { Badge, Button, cn } from '@vertesia/ui/core';
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,
@@ -56,7 +68,14 @@ import {
56
68
  isToolApprovalRequestInput,
57
69
  isToolApprovalRequestInputHidden,
58
70
  type RequestInputMessageWithUx,
71
+ sendRequestInputResponse,
59
72
  } from './requestInputMessages';
73
+ import {
74
+ interleaveTurnSummaries,
75
+ isResourceSummaryReady,
76
+ type ResourceSummaryRenderItem,
77
+ segmentTurnResources,
78
+ } from './resourceSummary';
60
79
  import StreamingMessage, { type StreamingMessageClassNames } from './StreamingMessage';
61
80
  import {
62
81
  buildSummaryConversationItems,
@@ -74,6 +93,7 @@ import {
74
93
  getWorkstreamId,
75
94
  groupMessagesWithStreaming,
76
95
  isInProgress,
96
+ isToolActivityMessage,
77
97
  isToolPreambleMessage,
78
98
  isUserStoppedMessage,
79
99
  mergeConsecutiveToolGroups,
@@ -283,6 +303,7 @@ function getMessageText(message: AgentMessage): string {
283
303
  interface SummaryMessageProps {
284
304
  message: AgentMessage;
285
305
  onSendMessage?: (message: string, metadata?: Record<string, unknown>) => void;
306
+ onOpenArtifact?: (path: string) => void;
286
307
  onSelectWorkstream?: (workstreamId: string) => void;
287
308
  requestInputAnswered?: boolean;
288
309
  StoreLinkComponent?: React.ComponentType<{ href: string; documentId: string; children: React.ReactNode }>;
@@ -330,17 +351,7 @@ function SummaryWorkstreamLaunchMessage({
330
351
  );
331
352
  }
332
353
 
333
- const SUMMARY_PROSE_CLASS = [
334
- 'agent-markdown vprose prose max-w-none break-words text-sm leading-6 text-foreground/80',
335
- 'prose-p:my-2 prose-p:leading-6 prose-li:my-0.5 prose-pre:my-3 prose-headings:tracking-normal',
336
- 'prose-headings:text-foreground prose-strong:text-foreground prose-code:text-foreground',
337
- 'prose-a:text-foreground prose-a:underline prose-a:decoration-muted prose-a:underline-offset-4',
338
- '[&_p]:text-foreground/80 [&_li]:text-foreground/80 [&_li::marker]:text-muted',
339
- ].join(' ');
340
-
341
354
  const USER_BUBBLE_COLLAPSE_THRESHOLD = 520;
342
- const SUMMARY_THOUGHT_COLLAPSE_LINES = 6;
343
- const SUMMARY_THOUGHT_COLLAPSE_THRESHOLD = 520;
344
355
  const STORE_LINK_MARKDOWN_RE =
345
356
  /\[[^\]]+\]\((?:\/store\/(?:objects|collections)\/|store:|document:|document:\/\/|collection:)[^)]+\)/;
346
357
  const DEFAULT_AGENT_MARKDOWN_COMPONENTS: MarkdownRendererProps['components'] = {
@@ -561,6 +572,7 @@ function SummaryUserBubble({
561
572
  workstreamId,
562
573
  className,
563
574
  artifactRunId,
575
+ onOpenArtifact,
564
576
  markdownComponents,
565
577
  }: {
566
578
  children: React.ReactNode;
@@ -568,6 +580,7 @@ function SummaryUserBubble({
568
580
  workstreamId?: string;
569
581
  className?: string;
570
582
  artifactRunId?: string;
583
+ onOpenArtifact?: (path: string) => void;
571
584
  markdownComponents?: MarkdownRendererProps['components'];
572
585
  }) {
573
586
  const { t } = useUITranslation();
@@ -607,6 +620,7 @@ function SummaryUserBubble({
607
620
  {shouldRenderMarkdown ? (
608
621
  <MarkdownRenderer
609
622
  artifactRunId={artifactRunId}
623
+ onArtifactOpen={onOpenArtifact}
610
624
  components={markdownComponents}
611
625
  className={cn(
612
626
  'agent-markdown vprose prose max-w-none break-words text-sm leading-6 text-foreground/90',
@@ -647,11 +661,13 @@ function SummaryUserBubble({
647
661
  function SummaryMessage({
648
662
  message,
649
663
  onSendMessage,
664
+ onOpenArtifact,
650
665
  onSelectWorkstream,
651
666
  requestInputAnswered = false,
652
667
  StoreLinkComponent,
653
668
  CollectionLinkComponent,
654
669
  }: SummaryMessageProps) {
670
+ const { router } = useRouterContext();
655
671
  const content =
656
672
  message.type === AgentMessageType.REQUEST_INPUT ? getRequestInputDisplayText(message) : getMessageText(message);
657
673
  const workstreamLaunchDetails = getWorkstreamLaunchDetails(message) ?? getWorkstreamActivityDetails(message);
@@ -661,55 +677,24 @@ function SummaryMessage({
661
677
  () => (message.type === AgentMessageType.QUESTION ? parseUserMessageAttachments(content) : null),
662
678
  [content, message.type],
663
679
  );
680
+ const editingAction = useMemo(
681
+ () =>
682
+ message.type === AgentMessageType.QUESTION
683
+ ? parseMarkdownEditingAction(message.details?.editing_action)
684
+ : undefined,
685
+ [message.details, message.type],
686
+ );
664
687
 
665
688
  const markdownComponents = useMemo(
666
689
  () => ({
667
690
  ...DEFAULT_AGENT_MARKDOWN_COMPONENTS,
668
- a: ({
669
- node: _node,
670
- ref: _ref,
671
- ...props
672
- }: {
673
- node?: unknown;
674
- ref?: unknown;
675
- href?: string;
676
- children?: React.ReactNode;
677
- }) => {
678
- const href = props.href || '';
679
- if (href.includes('/store/objects')) {
680
- const documentId = href.split('/store/objects/')[1] || '';
681
- if (StoreLinkComponent) {
682
- return (
683
- <StoreLinkComponent href={href} documentId={documentId}>
684
- {props.children}
685
- </StoreLinkComponent>
686
- );
687
- }
688
- return (
689
- <NavLink href={href} topLevelNav>
690
- {props.children}
691
- </NavLink>
692
- );
693
- }
694
- if (href.includes('/store/collections')) {
695
- const collectionId = href.split('/store/collections/')[1] || '';
696
- if (CollectionLinkComponent) {
697
- return (
698
- <CollectionLinkComponent href={href} collectionId={collectionId}>
699
- {props.children}
700
- </CollectionLinkComponent>
701
- );
702
- }
703
- return (
704
- <NavLink href={href} topLevelNav>
705
- {props.children}
706
- </NavLink>
707
- );
708
- }
709
- return <a {...props} target="_blank" rel="noopener noreferrer" />;
710
- },
691
+ a: createAgentMarkdownAnchor({
692
+ StoreLinkComponent,
693
+ CollectionLinkComponent,
694
+ addStickyParams: (href: string) => router.getTopRouter().navigator.addStickyParams(href),
695
+ }),
711
696
  }),
712
- [StoreLinkComponent, CollectionLinkComponent],
697
+ [StoreLinkComponent, CollectionLinkComponent, router],
713
698
  );
714
699
 
715
700
  if (workstreamLaunchDetails) {
@@ -733,6 +718,7 @@ function SummaryMessage({
733
718
  <AttachmentPreviewList
734
719
  items={attachments}
735
720
  artifactRunId={runId}
721
+ onOpenArtifact={onOpenArtifact}
736
722
  align="end"
737
723
  variant="message"
738
724
  StoreLinkComponent={StoreLinkComponent}
@@ -745,9 +731,13 @@ function SummaryMessage({
745
731
  message={message}
746
732
  workstreamId={workstreamId}
747
733
  artifactRunId={runId}
734
+ onOpenArtifact={onOpenArtifact}
748
735
  markdownComponents={markdownComponents}
736
+ // Comments/edits are user actions: keep the user-message background and end
737
+ // alignment, just give the card a little more room for tables and diffs.
738
+ className={editingAction ? 'max-w-[min(44rem,90%)]' : undefined}
749
739
  >
750
- {questionBody}
740
+ {editingAction ? <DocumentEditingActionCard action={editingAction} /> : questionBody}
751
741
  </SummaryUserBubble>
752
742
  )}
753
743
  </>
@@ -765,13 +755,22 @@ function SummaryMessage({
765
755
  variant={uxConfig.variant}
766
756
  multiSelect={uxConfig.multiSelect}
767
757
  onSelect={(optionId) =>
768
- onSendMessage?.(optionId, getToolApprovalResponseMetadata(message, optionId))
758
+ sendRequestInputResponse(
759
+ onSendMessage,
760
+ message,
761
+ optionId,
762
+ getToolApprovalResponseMetadata(message, optionId),
763
+ )
764
+ }
765
+ onMultiSelect={(optionIds) =>
766
+ sendRequestInputResponse(onSendMessage, message, optionIds.join(', '))
769
767
  }
770
- onMultiSelect={(optionIds) => onSendMessage?.(optionIds.join(', '))}
771
768
  allowFreeResponse={!uxConfig.options?.length || !!uxConfig.free_response}
772
769
  placeholder={uxConfig.free_response?.placeholder}
773
770
  submitLabel={uxConfig.free_response?.submit_label}
774
- onSubmit={(value) => onSendMessage?.(value, uxConfig.free_response?.metadata)}
771
+ onSubmit={(value) =>
772
+ sendRequestInputResponse(onSendMessage, message, value, uxConfig.free_response?.metadata)
773
+ }
775
774
  hideBorder
776
775
  compact
777
776
  answered={requestInputAnswered}
@@ -799,6 +798,7 @@ function SummaryMessage({
799
798
  >
800
799
  <MarkdownRenderer
801
800
  artifactRunId={runId}
801
+ onArtifactOpen={onOpenArtifact}
802
802
  onProposalSelect={(optionId) => onSendMessage?.(optionId)}
803
803
  onProposalSubmit={(text) => onSendMessage?.(text)}
804
804
  components={markdownComponents}
@@ -1028,6 +1028,8 @@ interface SummaryToolDetailItem {
1028
1028
  finishedAt?: number | string;
1029
1029
  status?: ToolExecutionStatus;
1030
1030
  decisionText?: string;
1031
+ resources: AgentResourceReference[];
1032
+ workflowRunId?: string;
1031
1033
  sections: SummaryToolDetailSection[];
1032
1034
  }
1033
1035
 
@@ -1043,6 +1045,7 @@ const TOOL_DETAIL_SYSTEM_KEYS = new Set([
1043
1045
  'collection_id',
1044
1046
  'document_id',
1045
1047
  'display_role',
1048
+ 'duration_ms',
1046
1049
  'event_class',
1047
1050
  'id',
1048
1051
  'object_id',
@@ -1060,6 +1063,7 @@ const TOOL_DETAIL_SYSTEM_KEYS = new Set([
1060
1063
  'tools',
1061
1064
  'message_to_human',
1062
1065
  'progress_messages',
1066
+ 'resources',
1063
1067
  'source',
1064
1068
  'token_usage',
1065
1069
  'checkpoint_at',
@@ -1394,7 +1398,12 @@ function getRenderableGroupKey(group: RenderableGroup): string {
1394
1398
  return ['group', group.toolRunId, group.firstTimestamp, firstKey, lastKey].filter(Boolean).join(':');
1395
1399
  }
1396
1400
 
1397
- function getPreviousRenderableGroupTimestamp(groups: RenderableGroup[], index: number): number | string | undefined {
1401
+ // Accepts the augmented render list (which may contain interleaved resource_summary items); those
1402
+ // are skipped so the previous *group* timestamp is found regardless of inserted summaries.
1403
+ function getPreviousRenderableGroupTimestamp(
1404
+ groups: Array<RenderableGroup | ResourceSummaryRenderItem>,
1405
+ index: number,
1406
+ ): number | string | undefined {
1398
1407
  for (let previousIndex = index - 1; previousIndex >= 0; previousIndex--) {
1399
1408
  const group = groups[previousIndex];
1400
1409
  if (group.type === 'single') return group.message.timestamp;
@@ -1512,6 +1521,8 @@ function buildSummaryToolDetailItem(message: AgentMessage, index: number): Summa
1512
1521
  finishedAt: getTimestampDetail(details[SUMMARY_TOOL_FINISHED_AT_DETAIL_KEY]) ?? message.timestamp,
1513
1522
  status: approvalDecisionTitle ? 'error' : (details.tool_status as ToolExecutionStatus | undefined),
1514
1523
  decisionText,
1524
+ resources: getResourcesFromMessage(message),
1525
+ workflowRunId: message.workflow_run_id,
1515
1526
  sections: getToolDetailSections(message),
1516
1527
  };
1517
1528
  }
@@ -1846,6 +1857,13 @@ function formatToolDetailCopyText(item: SummaryToolDetailItem): string {
1846
1857
  const metadata = getToolDetailMetadata(item).map((entry) => `${entry.label}: ${entry.value}`);
1847
1858
  if (metadata.length > 0) parts.push(metadata.join('\n'));
1848
1859
  if (item.text) parts.push(item.text);
1860
+ if (item.resources.length > 0) {
1861
+ parts.push(
1862
+ `Resources\n${item.resources
1863
+ .map((resource) => `${resource.label} (${resource.type}:${resource.id}) — ${resource.action}`)
1864
+ .join('\n')}`,
1865
+ );
1866
+ }
1849
1867
 
1850
1868
  for (const section of item.sections) {
1851
1869
  parts.push(`${section.label}\n${formatToolSectionValue(section.value)}`);
@@ -1953,52 +1971,80 @@ function SummaryToolDetailPanel({ item }: { item: SummaryToolDetailItem }) {
1953
1971
  }
1954
1972
 
1955
1973
  function SummaryToolTimelineItem({ item }: { item: SummaryToolDetailItem }) {
1974
+ const { t } = useUITranslation();
1956
1975
  const isDecision = Boolean(item.decisionText);
1957
1976
  const isAttention = !isDecision && (item.status === 'error' || item.status === 'warning');
1958
1977
  const hasMetadata = getToolDetailMetadata(item).length > 0;
1959
1978
  const hasDetails = Boolean(item.command || item.text || item.sections.length || hasMetadata);
1979
+ const hasResources = item.resources.length > 0;
1960
1980
  const [isExpanded, setIsExpanded] = useState(false);
1961
1981
  const iconStatus = isDecision ? undefined : item.status;
1982
+ const toggleDetailsLabel = isExpanded ? t('agent.hideDetails') : t('agent.showDetails');
1983
+ const detailsSubject = hasResources ? item.resources.map((resource) => resource.label).join(', ') : item.title;
1984
+
1985
+ const icon = (
1986
+ <span
1987
+ className={cn(
1988
+ 'flex size-5 items-center justify-center pt-0.5',
1989
+ isAttention ? 'text-attention' : 'text-muted',
1990
+ )}
1991
+ >
1992
+ <ToolDetailIcon kind={item.kind} status={iconStatus} />
1993
+ </span>
1994
+ );
1995
+
1996
+ const chevron = (
1997
+ <ChevronDown
1998
+ className={cn('size-4 shrink-0 text-muted opacity-50 transition-transform', !isExpanded && '-rotate-90')}
1999
+ aria-hidden="true"
2000
+ />
2001
+ );
1962
2002
 
1963
2003
  return (
1964
2004
  <div className="min-w-0">
1965
- <button
1966
- type="button"
1967
- className={cn(
1968
- 'grid w-full grid-cols-[1.5rem_1fr_auto] gap-2 text-start outline-none transition-colors',
1969
- 'focus-visible:text-foreground focus-visible:underline focus-visible:underline-offset-4',
1970
- hasDetails ? 'cursor-pointer hover:text-foreground' : 'cursor-default',
1971
- )}
1972
- onClick={() => hasDetails && setIsExpanded((current) => !current)}
1973
- aria-expanded={hasDetails ? isExpanded : undefined}
1974
- disabled={!hasDetails}
1975
- >
1976
- <span
2005
+ {hasResources ? (
2006
+ <div className="grid w-full grid-cols-[1.5rem_1fr_auto] items-center gap-2 text-start">
2007
+ {icon}
2008
+ <ResourceActivityLinkList resources={item.resources} workflowRunId={item.workflowRunId} />
2009
+ {hasDetails ? (
2010
+ <VTooltip description={toggleDetailsLabel} asChild>
2011
+ <Button
2012
+ variant="ghost"
2013
+ size="xs"
2014
+ className="size-6 p-0 text-muted"
2015
+ onClick={() => setIsExpanded((current) => !current)}
2016
+ aria-expanded={isExpanded}
2017
+ aria-label={`${toggleDetailsLabel}: ${detailsSubject}`}
2018
+ >
2019
+ {chevron}
2020
+ </Button>
2021
+ </VTooltip>
2022
+ ) : null}
2023
+ </div>
2024
+ ) : (
2025
+ <button
2026
+ type="button"
1977
2027
  className={cn(
1978
- 'flex size-5 items-center justify-center pt-0.5',
1979
- isAttention ? 'text-attention' : 'text-muted',
2028
+ 'grid w-full grid-cols-[1.5rem_1fr_auto] gap-2 text-start outline-none transition-colors',
2029
+ 'focus-visible:text-foreground focus-visible:underline focus-visible:underline-offset-4',
2030
+ hasDetails ? 'cursor-pointer hover:text-foreground' : 'cursor-default',
1980
2031
  )}
2032
+ onClick={() => hasDetails && setIsExpanded((current) => !current)}
2033
+ aria-expanded={hasDetails ? isExpanded : undefined}
2034
+ disabled={!hasDetails}
1981
2035
  >
1982
- <ToolDetailIcon kind={item.kind} status={iconStatus} />
1983
- </span>
1984
- <span className="min-w-0 text-sm text-muted">
1985
- <span className="break-words">{item.title}</span>
1986
- {item.decisionText ? (
1987
- <Badge variant="destructive" className="ms-2 rounded-full shadow-sm shadow-destructive/10">
1988
- {item.decisionText}
1989
- </Badge>
1990
- ) : null}
1991
- </span>
1992
- {hasDetails ? (
1993
- <ChevronDown
1994
- className={cn(
1995
- 'mt-0.5 size-4 shrink-0 text-muted opacity-50 transition-transform',
1996
- !isExpanded && '-rotate-90',
1997
- )}
1998
- aria-hidden="true"
1999
- />
2000
- ) : null}
2001
- </button>
2036
+ {icon}
2037
+ <span className="min-w-0 text-sm text-muted">
2038
+ <span className="break-words">{item.title}</span>
2039
+ {item.decisionText ? (
2040
+ <Badge variant="destructive" className="ms-2 rounded-full shadow-sm shadow-destructive/10">
2041
+ {item.decisionText}
2042
+ </Badge>
2043
+ ) : null}
2044
+ </span>
2045
+ {hasDetails ? chevron : null}
2046
+ </button>
2047
+ )}
2002
2048
  {hasDetails && isExpanded ? (
2003
2049
  <div className="mt-1">
2004
2050
  <SummaryToolDetailPanel item={item} />
@@ -2031,13 +2077,7 @@ function SummaryThoughtProseItem({
2031
2077
  <div className="min-w-0 py-1">
2032
2078
  <div
2033
2079
  data-testid="summary-thought-prose"
2034
- className={cn(
2035
- SUMMARY_PROSE_CLASS,
2036
- isLong &&
2037
- !disableCollapse &&
2038
- !isExpanded &&
2039
- '[display:-webkit-box] overflow-hidden [-webkit-box-orient:vertical] [-webkit-line-clamp:6]',
2040
- )}
2080
+ className={cn(SUMMARY_PROSE_CLASS, isLong && !disableCollapse && !isExpanded && AGENT_LINE_CLAMP_CLASS)}
2041
2081
  style={{ overflowWrap: 'anywhere' }}
2042
2082
  >
2043
2083
  <MarkdownRenderer artifactRunId={artifactRunId} components={DEFAULT_AGENT_MARKDOWN_COMPONENTS}>
@@ -2136,9 +2176,9 @@ function SummaryStoppedMessage({
2136
2176
 
2137
2177
  return (
2138
2178
  <div className={cn('mx-auto w-full max-w-3xl px-1', className)} data-testid="summary-stopped-message">
2139
- <div className="flex items-center justify-end gap-2 text-lg font-medium text-muted sm:text-xl">
2179
+ <div className="flex items-center justify-end gap-2 text-sm font-medium text-muted">
2140
2180
  <span>{t('agent.youStoppedAfter', { duration })}</span>
2141
- <MessageDeliveryStatus message={message} className="h-5 w-5" />
2181
+ <MessageDeliveryStatus message={message} className="h-4 w-4" />
2142
2182
  </div>
2143
2183
  <div className="mt-5 border-b border-border/70" />
2144
2184
  </div>
@@ -2244,19 +2284,32 @@ function SummaryActivityRow({
2244
2284
  variant={uxConfig.variant}
2245
2285
  multiSelect={uxConfig.multiSelect}
2246
2286
  onSelect={(optionId) =>
2247
- onSendMessage?.(
2287
+ sendRequestInputResponse(
2288
+ onSendMessage,
2289
+ message,
2248
2290
  optionId,
2249
2291
  getToolApprovalResponseMetadata(message, optionId),
2250
2292
  )
2251
2293
  }
2252
- onMultiSelect={(optionIds) => onSendMessage?.(optionIds.join(', '))}
2294
+ onMultiSelect={(optionIds) =>
2295
+ sendRequestInputResponse(
2296
+ onSendMessage,
2297
+ message,
2298
+ optionIds.join(', '),
2299
+ )
2300
+ }
2253
2301
  allowFreeResponse={
2254
2302
  !uxConfig.options?.length || !!uxConfig.free_response
2255
2303
  }
2256
2304
  placeholder={uxConfig.free_response?.placeholder}
2257
2305
  submitLabel={uxConfig.free_response?.submit_label}
2258
2306
  onSubmit={(value) =>
2259
- onSendMessage?.(value, uxConfig.free_response?.metadata)
2307
+ sendRequestInputResponse(
2308
+ onSendMessage,
2309
+ message,
2310
+ value,
2311
+ uxConfig.free_response?.metadata,
2312
+ )
2260
2313
  }
2261
2314
  hideBorder
2262
2315
  compact
@@ -2387,6 +2440,8 @@ interface AllMessagesMixedProps {
2387
2440
  streamingMessages?: Map<string, StreamingData>; // Real-time streaming chunks
2388
2441
  /** Callback when user sends a message (e.g., from proposal selection) */
2389
2442
  onSendMessage?: (message: string, metadata?: Record<string, unknown>) => void;
2443
+ /** Open a Markdown artifact in the surrounding agent panel. */
2444
+ onOpenArtifact?: (path: string) => void;
2390
2445
  /** Stable index for thinking messages (changes on 4s interval) */
2391
2446
  thinkingMessageIndex?: number;
2392
2447
  /** className overrides passed to every MessageItem */
@@ -2446,6 +2501,7 @@ function AllMessagesMixedComponent({
2446
2501
  isCompleted = false,
2447
2502
  streamingMessages = new Map(),
2448
2503
  onSendMessage,
2504
+ onOpenArtifact,
2449
2505
  messageItemClassNames,
2450
2506
  messageStyleOverrides,
2451
2507
  toolCallGroupClassNames,
@@ -2631,18 +2687,23 @@ function AllMessagesMixedComponent({
2631
2687
  });
2632
2688
  }, []);
2633
2689
 
2690
+ const previousActiveWorkstreamRef = useRef(activeWorkstream);
2691
+ useEffect(() => {
2692
+ if (previousActiveWorkstreamRef.current === activeWorkstream) return;
2693
+ previousActiveWorkstreamRef.current = activeWorkstream;
2694
+ requestAnimationFrame(scrollToTop);
2695
+ }, [activeWorkstream, scrollToTop]);
2696
+
2634
2697
  const handleSelectWorkstream = useCallback(
2635
2698
  (workstreamId: string) => {
2636
2699
  setActiveWorkstream(workstreamId);
2637
- requestAnimationFrame(scrollToTop);
2638
2700
  },
2639
- [scrollToTop, setActiveWorkstream],
2701
+ [setActiveWorkstream],
2640
2702
  );
2641
2703
 
2642
2704
  const handleShowMainAgentChat = useCallback(() => {
2643
2705
  setActiveWorkstream('all');
2644
- requestAnimationFrame(scrollToTop);
2645
- }, [scrollToTop, setActiveWorkstream]);
2706
+ }, [setActiveWorkstream]);
2646
2707
 
2647
2708
  useEffect(() => {
2648
2709
  if (activeWorkstream !== 'all' && !workstreams.has(activeWorkstream)) {
@@ -2767,6 +2828,36 @@ function AllMessagesMixedComponent({
2767
2828
  return isCompleted || !isInProgress(completionDisplayMessages);
2768
2829
  }, [completionDisplayMessages, hasLatestToolApprovalAllow, hasPendingToolApprovalRequest, isCompleted]);
2769
2830
 
2831
+ // Per-turn resource summaries. Derived from the full source stream (not the active-tab view) so
2832
+ // child-workstream resources are included, but CLIPPED to the playback cursor so scrubbing back
2833
+ // never reveals resources created later in the turn. Gated on the MAIN workstream reaching either
2834
+ // a terminal state or its final ANSWER, so a completed child tab can't surface a summary early while
2835
+ // reusable interactive workflows can summarize a completed turn. Built from structured tool metadata
2836
+ // (details.resources), never parsed from prose.
2837
+ //
2838
+ // Clip by the cursor message's POSITION in the ordered source, not by `timestamp <= cursor`:
2839
+ // millisecond timestamps are not unique, so a later message sharing the cursor's timestamp would
2840
+ // otherwise leak. indexOf works because sortAndDedupeMessages preserves message references; a
2841
+ // timestamp compare is the fallback if the cursor can't be located (e.g. collapsed by dedup).
2842
+ const clippedResourceSource = useMemo(() => {
2843
+ if (workstreamSourceSorted.length === 0) return workstreamSourceSorted;
2844
+ const cursorMessage = messages[messages.length - 1];
2845
+ if (!cursorMessage) return [];
2846
+ const cursorIndex = workstreamSourceSorted.indexOf(cursorMessage);
2847
+ if (cursorIndex >= 0) {
2848
+ return cursorIndex >= workstreamSourceSorted.length - 1
2849
+ ? workstreamSourceSorted
2850
+ : workstreamSourceSorted.slice(0, cursorIndex + 1);
2851
+ }
2852
+ const cursorTs = getTimestampMs(cursorMessage.timestamp);
2853
+ return workstreamSourceSorted.filter((m) => getTimestampMs(m.timestamp) <= cursorTs);
2854
+ }, [workstreamSourceSorted, messages]);
2855
+ const isLatestResourceTurnComplete = useMemo(
2856
+ () => isCompleted || isResourceSummaryReady(clippedResourceSource),
2857
+ [isCompleted, clippedResourceSource],
2858
+ );
2859
+ const turnResourceSummaries = useMemo(() => segmentTurnResources(clippedResourceSource), [clippedResourceSource]);
2860
+
2770
2861
  // Split streaming messages:
2771
2862
  // - complete (or stale incomplete) ones are interleaved chronologically
2772
2863
  // - actively incomplete ones render at the end
@@ -2836,6 +2927,19 @@ function AllMessagesMixedComponent({
2836
2927
  [visibleSummaryDisplayMessages, isDisplayCompleted, latestSummaryObservedTimestamp],
2837
2928
  );
2838
2929
 
2930
+ // Interleave per-turn resource summaries into the sliding (summary) timeline, mirroring the
2931
+ // stacked view. Turn boundaries are user QUESTION message items.
2932
+ const slidingRenderItems = React.useMemo(
2933
+ () =>
2934
+ interleaveTurnSummaries(
2935
+ summaryConversationItems,
2936
+ (item) => item.type === 'message' && item.message.type === AgentMessageType.QUESTION,
2937
+ turnResourceSummaries,
2938
+ isLatestResourceTurnComplete,
2939
+ ),
2940
+ [summaryConversationItems, turnResourceSummaries, isLatestResourceTurnComplete],
2941
+ );
2942
+
2839
2943
  // Group messages with ONLY complete streaming interleaved for stacked view.
2840
2944
  // Incomplete streaming is rendered separately at the end (avoids re-grouping on every chunk).
2841
2945
  // Assistant prose stays as its own timeline item so thoughts remain visible between tool calls.
@@ -2847,6 +2951,19 @@ function AllMessagesMixedComponent({
2847
2951
  [displayMessages, completeStreaming, activeWorkstream],
2848
2952
  );
2849
2953
 
2954
+ // Interleave per-turn resource summaries into the stacked timeline. Turn boundaries are user
2955
+ // QUESTION groups; turn N's resources come from the full-stream segmentation.
2956
+ const stackedRenderItems = React.useMemo(
2957
+ () =>
2958
+ interleaveTurnSummaries(
2959
+ groupedMessages,
2960
+ (group) => group.type === 'single' && group.message.type === AgentMessageType.QUESTION,
2961
+ turnResourceSummaries,
2962
+ isLatestResourceTurnComplete,
2963
+ ),
2964
+ [groupedMessages, turnResourceSummaries, isLatestResourceTurnComplete],
2965
+ );
2966
+
2850
2967
  // Show an activity indicator when the latest visible conversation state is not terminal.
2851
2968
  // Older idle/complete messages from previous turns must not suppress the new turn.
2852
2969
  const isAgentWorking = useMemo(() => {
@@ -2857,6 +2974,18 @@ function AllMessagesMixedComponent({
2857
2974
  return !isDisplayCompleted || hasOpenUserTurn(completionDisplayMessages);
2858
2975
  }, [completionDisplayMessages, isDisplayCompleted]);
2859
2976
 
2977
+ const showPostToolThinking = useMemo(() => {
2978
+ if (!isAgentWorking || incompleteStreaming.length > 0) return false;
2979
+
2980
+ const latestSummaryItem = summaryConversationItems[summaryConversationItems.length - 1];
2981
+ const latestMessage = completionDisplayMessages[completionDisplayMessages.length - 1];
2982
+ const latestMessageShowsThinking =
2983
+ latestMessage !== undefined &&
2984
+ (latestMessage.details?.display_role === 'thinking' ||
2985
+ (isToolActivityMessage(latestMessage) && latestMessage.details?.tool_status === 'completed'));
2986
+ return latestSummaryItem?.type === 'work' && latestSummaryItem.isActive && latestMessageShowsThinking;
2987
+ }, [completionDisplayMessages, incompleteStreaming.length, isAgentWorking, summaryConversationItems]);
2988
+
2860
2989
  const showActivityFallback = shouldShowSummaryActivityFallback(
2861
2990
  summaryConversationItems,
2862
2991
  isAgentWorking,
@@ -3299,8 +3428,19 @@ function AllMessagesMixedComponent({
3299
3428
  {viewMode === 'stacked' ? (
3300
3429
  // Details view - show ALL messages with streaming interleaved
3301
3430
  <>
3302
- {groupedMessages.map((group, groupIndex) => {
3303
- const isLastGroup = groupIndex === groupedMessages.length - 1;
3431
+ {stackedRenderItems.map((group, groupIndex) => {
3432
+ const isLastGroup = groupIndex === stackedRenderItems.length - 1;
3433
+
3434
+ if (group.type === 'resource_summary') {
3435
+ return (
3436
+ <ResourceChangeSummary
3437
+ key={group.key}
3438
+ resources={group.resources}
3439
+ workflowRunId={artifactRunId}
3440
+ className="my-2"
3441
+ />
3442
+ );
3443
+ }
3304
3444
 
3305
3445
  if (group.type === 'tool_group') {
3306
3446
  // Render grouped tool calls
@@ -3373,7 +3513,7 @@ function AllMessagesMixedComponent({
3373
3513
  message={message}
3374
3514
  startTimestamp={
3375
3515
  getPreviousRenderableGroupTimestamp(
3376
- groupedMessages,
3516
+ stackedRenderItems,
3377
3517
  groupIndex,
3378
3518
  ) ?? message.timestamp
3379
3519
  }
@@ -3409,6 +3549,7 @@ function AllMessagesMixedComponent({
3409
3549
  message={message}
3410
3550
  showPulsatingCircle={isLatestMessage}
3411
3551
  onSendMessage={onSendMessage}
3552
+ onOpenArtifact={onOpenArtifact}
3412
3553
  requestInputAnswered={isRequestInputAnswered(
3413
3554
  message,
3414
3555
  answeredRequestInputKeys,
@@ -3469,7 +3610,18 @@ function AllMessagesMixedComponent({
3469
3610
  ) : (
3470
3611
  // Summary view - conversation turns with per-turn work disclosure
3471
3612
  <>
3472
- {summaryConversationItems.map((item) => {
3613
+ {slidingRenderItems.map((item) => {
3614
+ if (item.type === 'resource_summary') {
3615
+ return (
3616
+ <ResourceChangeSummary
3617
+ key={item.key}
3618
+ resources={item.resources}
3619
+ workflowRunId={artifactRunId}
3620
+ className="my-2"
3621
+ />
3622
+ );
3623
+ }
3624
+
3473
3625
  if (item.type === 'work') {
3474
3626
  if (hideToolCallsInViewMode?.includes(viewMode)) return null;
3475
3627
  const isThinkingOnlyWork = isTransientThinkingWork(item.messages);
@@ -3529,6 +3681,7 @@ function AllMessagesMixedComponent({
3529
3681
  <SummaryMessage
3530
3682
  message={message}
3531
3683
  onSendMessage={onSendMessage}
3684
+ onOpenArtifact={onOpenArtifact}
3532
3685
  onSelectWorkstream={handleSelectWorkstream}
3533
3686
  requestInputAnswered={isRequestInputAnswered(
3534
3687
  message,
@@ -3549,6 +3702,17 @@ function AllMessagesMixedComponent({
3549
3702
  artifactRunId={artifactRunId}
3550
3703
  />
3551
3704
  ))}
3705
+ {showPostToolThinking && (
3706
+ <div
3707
+ className={cn(
3708
+ 'mx-auto w-full max-w-3xl px-1 text-sm text-muted',
3709
+ workingIndicatorClassName,
3710
+ )}
3711
+ data-testid="post-tool-thinking-indicator"
3712
+ >
3713
+ {t('agent.thinking')}
3714
+ </div>
3715
+ )}
3552
3716
  {/* Activity fallback - shown before any tool/thought message has arrived */}
3553
3717
  {showActivityFallback && !showInitialRequestWaitingCard && (
3554
3718
  <SummaryActivityRow