@vertesia/ui 1.5.0-dev.20260901.052906Z → 1.5.0-dev.20260910.051115Z

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 (563) hide show
  1. package/lib/core/components/Avatar.d.ts.map +1 -1
  2. package/lib/core/components/Avatar.js +3 -3
  3. package/lib/core/components/Avatar.js.map +1 -1
  4. package/lib/core/components/ComboBox.js +1 -1
  5. package/lib/core/components/ComboBox.js.map +1 -1
  6. package/lib/core/components/FileUpload.js +1 -1
  7. package/lib/core/components/FileUpload.js.map +1 -1
  8. package/lib/core/components/Link.js +1 -1
  9. package/lib/core/components/Link.js.map +1 -1
  10. package/lib/core/components/SelectList.js +1 -1
  11. package/lib/core/components/SelectList.js.map +1 -1
  12. package/lib/core/components/SidePanel.js +1 -1
  13. package/lib/core/components/SidePanel.js.map +1 -1
  14. package/lib/core/components/Spinner.js +1 -1
  15. package/lib/core/components/Spinner.js.map +1 -1
  16. package/lib/core/components/TagsInput.js +8 -8
  17. package/lib/core/components/TagsInput.js.map +1 -1
  18. package/lib/core/components/shadcn/MessageBox.js +1 -1
  19. package/lib/core/components/shadcn/MessageBox.js.map +1 -1
  20. package/lib/core/components/shadcn/button.js +1 -1
  21. package/lib/core/components/shadcn/button.js.map +1 -1
  22. package/lib/core/components/shadcn/card.d.ts.map +1 -1
  23. package/lib/core/components/shadcn/card.js +1 -1
  24. package/lib/core/components/shadcn/card.js.map +1 -1
  25. package/lib/core/components/shadcn/command.js +5 -5
  26. package/lib/core/components/shadcn/command.js.map +1 -1
  27. package/lib/core/components/shadcn/filters/DynamicLabel.js +1 -1
  28. package/lib/core/components/shadcn/filters/DynamicLabel.js.map +1 -1
  29. package/lib/core/components/shadcn/filters/comboBox/DateCombobox.js +3 -3
  30. package/lib/core/components/shadcn/filters/comboBox/DateCombobox.js.map +1 -1
  31. package/lib/core/components/shadcn/input.js +3 -3
  32. package/lib/core/components/shadcn/input.js.map +1 -1
  33. package/lib/core/components/shadcn/modal/ConfirmModal.js +1 -1
  34. package/lib/core/components/shadcn/modal/ConfirmModal.js.map +1 -1
  35. package/lib/core/components/shadcn/modal/dialog.d.ts.map +1 -1
  36. package/lib/core/components/shadcn/modal/dialog.js +2 -2
  37. package/lib/core/components/shadcn/modal/dialog.js.map +1 -1
  38. package/lib/core/components/shadcn/overflowTabs.js +2 -2
  39. package/lib/core/components/shadcn/overflowTabs.js.map +1 -1
  40. package/lib/core/components/shadcn/popover.js +1 -1
  41. package/lib/core/components/shadcn/popover.js.map +1 -1
  42. package/lib/core/components/shadcn/radioGroup.d.ts.map +1 -1
  43. package/lib/core/components/shadcn/radioGroup.js +3 -3
  44. package/lib/core/components/shadcn/radioGroup.js.map +1 -1
  45. package/lib/core/components/shadcn/selectBox.js +1 -1
  46. package/lib/core/components/shadcn/selectBox.js.map +1 -1
  47. package/lib/core/components/shadcn/tabs.d.ts.map +1 -1
  48. package/lib/core/components/shadcn/tabs.js +5 -2
  49. package/lib/core/components/shadcn/tabs.js.map +1 -1
  50. package/lib/core/components/styles.js +1 -1
  51. package/lib/core/components/styles.js.map +1 -1
  52. package/lib/core/components/table/index.js +1 -1
  53. package/lib/core/hooks/useFetch.d.ts.map +1 -1
  54. package/lib/core/hooks/useFetch.js +2 -0
  55. package/lib/core/hooks/useFetch.js.map +1 -1
  56. package/lib/features/activity-doc/ActivityDoc.js +8 -8
  57. package/lib/features/activity-doc/ActivityDoc.js.map +1 -1
  58. package/lib/features/agent/chat/AgentChart.js +1 -1
  59. package/lib/features/agent/chat/AgentChart.js.map +1 -1
  60. package/lib/features/agent/chat/AgentRightPanel.d.ts +2 -3
  61. package/lib/features/agent/chat/AgentRightPanel.d.ts.map +1 -1
  62. package/lib/features/agent/chat/AgentRightPanel.js +3 -3
  63. package/lib/features/agent/chat/AgentRightPanel.js.map +1 -1
  64. package/lib/features/agent/chat/AskUserWidget.d.ts.map +1 -1
  65. package/lib/features/agent/chat/AskUserWidget.js +13 -13
  66. package/lib/features/agent/chat/AskUserWidget.js.map +1 -1
  67. package/lib/features/agent/chat/DocumentPanel.d.ts +7 -7
  68. package/lib/features/agent/chat/DocumentPanel.d.ts.map +1 -1
  69. package/lib/features/agent/chat/DocumentPanel.js +6 -12
  70. package/lib/features/agent/chat/DocumentPanel.js.map +1 -1
  71. package/lib/features/agent/chat/DocumentsTab.d.ts +15 -0
  72. package/lib/features/agent/chat/DocumentsTab.d.ts.map +1 -0
  73. package/lib/features/agent/chat/DocumentsTab.js +33 -0
  74. package/lib/features/agent/chat/DocumentsTab.js.map +1 -0
  75. package/lib/features/agent/chat/JumpingDots.js +1 -1
  76. package/lib/features/agent/chat/JumpingDots.js.map +1 -1
  77. package/lib/features/agent/chat/ModernAgentConversation.js +3 -3
  78. package/lib/features/agent/chat/ModernAgentConversation.js.map +1 -1
  79. package/lib/features/agent/chat/ModernAgentOutput/AllMessagesMixed.d.ts.map +1 -1
  80. package/lib/features/agent/chat/ModernAgentOutput/AllMessagesMixed.js +22 -9
  81. package/lib/features/agent/chat/ModernAgentOutput/AllMessagesMixed.js.map +1 -1
  82. package/lib/features/agent/chat/ModernAgentOutput/BatchProgressPanel.js +5 -5
  83. package/lib/features/agent/chat/ModernAgentOutput/BatchProgressPanel.js.map +1 -1
  84. package/lib/features/agent/chat/ModernAgentOutput/Header.d.ts.map +1 -1
  85. package/lib/features/agent/chat/ModernAgentOutput/Header.js +16 -11
  86. package/lib/features/agent/chat/ModernAgentOutput/Header.js.map +1 -1
  87. package/lib/features/agent/chat/ModernAgentOutput/InlineSlideInPanel.js +1 -1
  88. package/lib/features/agent/chat/ModernAgentOutput/InlineSlideInPanel.js.map +1 -1
  89. package/lib/features/agent/chat/ModernAgentOutput/MessageInput.js +1 -1
  90. package/lib/features/agent/chat/ModernAgentOutput/MessageInput.js.map +1 -1
  91. package/lib/features/agent/chat/ModernAgentOutput/MessageItem.d.ts.map +1 -1
  92. package/lib/features/agent/chat/ModernAgentOutput/MessageItem.js +7 -7
  93. package/lib/features/agent/chat/ModernAgentOutput/MessageItem.js.map +1 -1
  94. package/lib/features/agent/chat/ModernAgentOutput/MessagesContainer.js +1 -1
  95. package/lib/features/agent/chat/ModernAgentOutput/MessagesContainer.js.map +1 -1
  96. package/lib/features/agent/chat/ModernAgentOutput/PlanPanel.d.ts.map +1 -1
  97. package/lib/features/agent/chat/ModernAgentOutput/PlanPanel.js +10 -10
  98. package/lib/features/agent/chat/ModernAgentOutput/PlanPanel.js.map +1 -1
  99. package/lib/features/agent/chat/ModernAgentOutput/SlideInPanel.js +1 -1
  100. package/lib/features/agent/chat/ModernAgentOutput/SlideInPanel.js.map +1 -1
  101. package/lib/features/agent/chat/ModernAgentOutput/SlidingMessages.d.ts.map +1 -1
  102. package/lib/features/agent/chat/ModernAgentOutput/SlidingMessages.js +1 -1
  103. package/lib/features/agent/chat/ModernAgentOutput/SlidingMessages.js.map +1 -1
  104. package/lib/features/agent/chat/ModernAgentOutput/SlidingPlanPanel.js +17 -17
  105. package/lib/features/agent/chat/ModernAgentOutput/SlidingPlanPanel.js.map +1 -1
  106. package/lib/features/agent/chat/ModernAgentOutput/StreamingMessage.js +1 -1
  107. package/lib/features/agent/chat/ModernAgentOutput/StreamingMessage.js.map +1 -1
  108. package/lib/features/agent/chat/ModernAgentOutput/SummaryConversation.d.ts.map +1 -1
  109. package/lib/features/agent/chat/ModernAgentOutput/SummaryConversation.js +14 -2
  110. package/lib/features/agent/chat/ModernAgentOutput/SummaryConversation.js.map +1 -1
  111. package/lib/features/agent/chat/ModernAgentOutput/ToolCallGroup.d.ts.map +1 -1
  112. package/lib/features/agent/chat/ModernAgentOutput/ToolCallGroup.js +15 -15
  113. package/lib/features/agent/chat/ModernAgentOutput/ToolCallGroup.js.map +1 -1
  114. package/lib/features/agent/chat/ModernAgentOutput/requestInputMessages.d.ts.map +1 -1
  115. package/lib/features/agent/chat/ModernAgentOutput/requestInputMessages.js +18 -0
  116. package/lib/features/agent/chat/ModernAgentOutput/requestInputMessages.js.map +1 -1
  117. package/lib/features/agent/chat/SlidingThinkingIndicator.d.ts.map +1 -1
  118. package/lib/features/agent/chat/SlidingThinkingIndicator.js +5 -2
  119. package/lib/features/agent/chat/SlidingThinkingIndicator.js.map +1 -1
  120. package/lib/features/agent/chat/VegaLiteChart.d.ts.map +1 -1
  121. package/lib/features/agent/chat/VegaLiteChart.js +6 -2
  122. package/lib/features/agent/chat/VegaLiteChart.js.map +1 -1
  123. package/lib/features/agent/chat/hooks/useDocumentPanel.d.ts +2 -2
  124. package/lib/features/agent/chat/hooks/useDocumentPanel.d.ts.map +1 -1
  125. package/lib/features/agent/chat/hooks/useDocumentPanel.js +0 -18
  126. package/lib/features/agent/chat/hooks/useDocumentPanel.js.map +1 -1
  127. package/lib/features/errors/RowErrorBoundary.js +1 -1
  128. package/lib/features/errors/RowErrorBoundary.js.map +1 -1
  129. package/lib/features/facets/AgentRunnerFacetsNav.js +1 -1
  130. package/lib/features/facets/AgentRunnerFacetsNav.js.map +1 -1
  131. package/lib/features/facets/utils/VInteractionFacet.d.ts +3 -5
  132. package/lib/features/facets/utils/VInteractionFacet.d.ts.map +1 -1
  133. package/lib/features/facets/utils/VInteractionFacet.js +10 -23
  134. package/lib/features/facets/utils/VInteractionFacet.js.map +1 -1
  135. package/lib/features/facets/utils/VUserFacet.js +1 -1
  136. package/lib/features/facets/utils/VUserFacet.js.map +1 -1
  137. package/lib/features/layout/GenericPageNavHeader.d.ts.map +1 -1
  138. package/lib/features/layout/GenericPageNavHeader.js +4 -1
  139. package/lib/features/layout/GenericPageNavHeader.js.map +1 -1
  140. package/lib/features/layout/NotFoundView.js +1 -1
  141. package/lib/features/layout/NotFoundView.js.map +1 -1
  142. package/lib/features/magic-pdf/AnnotatedImageSlider.js +4 -12
  143. package/lib/features/magic-pdf/AnnotatedImageSlider.js.map +1 -1
  144. package/lib/features/magic-pdf/ExtractedContentView.js +4 -4
  145. package/lib/features/magic-pdf/ExtractedContentView.js.map +1 -1
  146. package/lib/features/magic-pdf/MagicPdfView.js +1 -1
  147. package/lib/features/magic-pdf/MagicPdfView.js.map +1 -1
  148. package/lib/features/oauth/McpConnectionsButton.d.ts.map +1 -1
  149. package/lib/features/oauth/McpConnectionsButton.js +4 -1
  150. package/lib/features/oauth/McpConnectionsButton.js.map +1 -1
  151. package/lib/features/oauth/McpConnectionsDialog.d.ts.map +1 -1
  152. package/lib/features/oauth/McpConnectionsDialog.js +3 -2
  153. package/lib/features/oauth/McpConnectionsDialog.js.map +1 -1
  154. package/lib/features/oauth/useMcpConnections.d.ts +6 -7
  155. package/lib/features/oauth/useMcpConnections.d.ts.map +1 -1
  156. package/lib/features/oauth/useMcpConnections.js +27 -20
  157. package/lib/features/oauth/useMcpConnections.js.map +1 -1
  158. package/lib/features/pdf-viewer/PdfPageRenderer.js +2 -2
  159. package/lib/features/pdf-viewer/PdfPageRenderer.js.map +1 -1
  160. package/lib/features/pdf-viewer/PdfPageSlider.js +3 -3
  161. package/lib/features/pdf-viewer/PdfPageSlider.js.map +1 -1
  162. package/lib/features/pdf-viewer/SimplePdfViewer.js +1 -1
  163. package/lib/features/pdf-viewer/SimplePdfViewer.js.map +1 -1
  164. package/lib/features/permissions/UserPermissionsProvider.d.ts +2 -1
  165. package/lib/features/permissions/UserPermissionsProvider.d.ts.map +1 -1
  166. package/lib/features/permissions/UserPermissionsProvider.js +35 -22
  167. package/lib/features/permissions/UserPermissionsProvider.js.map +1 -1
  168. package/lib/features/permissions/useRoleMappings.d.ts +19 -0
  169. package/lib/features/permissions/useRoleMappings.d.ts.map +1 -0
  170. package/lib/features/permissions/useRoleMappings.js +87 -0
  171. package/lib/features/permissions/useRoleMappings.js.map +1 -0
  172. package/lib/features/store/collections/SelectCollection.js +1 -1
  173. package/lib/features/store/collections/SelectCollection.js.map +1 -1
  174. package/lib/features/store/objects/DocumentPreviewPanel.d.ts.map +1 -1
  175. package/lib/features/store/objects/DocumentPreviewPanel.js +9 -9
  176. package/lib/features/store/objects/DocumentPreviewPanel.js.map +1 -1
  177. package/lib/features/store/objects/DocumentTable.js +1 -1
  178. package/lib/features/store/objects/DocumentTable.js.map +1 -1
  179. package/lib/features/store/objects/components/DocumentIcon.js +2 -2
  180. package/lib/features/store/objects/components/DocumentIcon.js.map +1 -1
  181. package/lib/features/store/objects/components/DocumentInput.js +1 -1
  182. package/lib/features/store/objects/components/DocumentInput.js.map +1 -1
  183. package/lib/features/store/objects/components/PropertiesEditorModal.js +1 -1
  184. package/lib/features/store/objects/components/PropertiesEditorModal.js.map +1 -1
  185. package/lib/features/store/objects/components/SaveVersionConfirmModal.js +1 -1
  186. package/lib/features/store/objects/components/SaveVersionConfirmModal.js.map +1 -1
  187. package/lib/features/store/objects/layout/documentLayout.d.ts.map +1 -1
  188. package/lib/features/store/objects/layout/documentLayout.js +2 -2
  189. package/lib/features/store/objects/layout/documentLayout.js.map +1 -1
  190. package/lib/features/store/objects/selection/SelectionActions.js +1 -1
  191. package/lib/features/store/objects/selection/SelectionActions.js.map +1 -1
  192. package/lib/features/store/types/IntakePolicyEditor.d.ts +10 -1
  193. package/lib/features/store/types/IntakePolicyEditor.d.ts.map +1 -1
  194. package/lib/features/store/types/IntakePolicyEditor.js +29 -19
  195. package/lib/features/store/types/IntakePolicyEditor.js.map +1 -1
  196. package/lib/features/store/types/IntakePolicyForm.d.ts +1 -1
  197. package/lib/features/store/types/IntakePolicyForm.d.ts.map +1 -1
  198. package/lib/features/store/types/IntakePolicyForm.js +5 -3
  199. package/lib/features/store/types/IntakePolicyForm.js.map +1 -1
  200. package/lib/features/store/types/SelectContentTypeModal.js +1 -1
  201. package/lib/features/store/types/SelectContentTypeModal.js.map +1 -1
  202. package/lib/features/store/types/TypeRegistry.d.ts +10 -5
  203. package/lib/features/store/types/TypeRegistry.d.ts.map +1 -1
  204. package/lib/features/store/types/search/ObjectTypeSearchContext.d.ts +10 -5
  205. package/lib/features/store/types/search/ObjectTypeSearchContext.d.ts.map +1 -1
  206. package/lib/features/user/UserAvatar.js +2 -2
  207. package/lib/features/user/UserAvatar.js.map +1 -1
  208. package/lib/features/user/UserInfo.d.ts.map +1 -1
  209. package/lib/features/user/UserInfo.js +7 -7
  210. package/lib/features/user/UserInfo.js.map +1 -1
  211. package/lib/features/utils/index.d.ts +1 -0
  212. package/lib/features/utils/index.d.ts.map +1 -1
  213. package/lib/features/utils/index.js +1 -0
  214. package/lib/features/utils/index.js.map +1 -1
  215. package/lib/features/utils/interaction.d.ts +55 -0
  216. package/lib/features/utils/interaction.d.ts.map +1 -0
  217. package/lib/features/utils/interaction.js +77 -0
  218. package/lib/features/utils/interaction.js.map +1 -0
  219. package/lib/features/views/ViewResults.js +2 -2
  220. package/lib/features/views/ViewResults.js.map +1 -1
  221. package/lib/i18n/locales/ar.json +17 -1
  222. package/lib/i18n/locales/de.json +13 -1
  223. package/lib/i18n/locales/en.json +13 -1
  224. package/lib/i18n/locales/es.json +13 -1
  225. package/lib/i18n/locales/fr.json +13 -1
  226. package/lib/i18n/locales/it.json +13 -1
  227. package/lib/i18n/locales/ja.json +13 -1
  228. package/lib/i18n/locales/ko.json +13 -1
  229. package/lib/i18n/locales/pt.json +13 -1
  230. package/lib/i18n/locales/ru.json +15 -1
  231. package/lib/i18n/locales/tr.json +13 -1
  232. package/lib/i18n/locales/zh-TW.json +13 -1
  233. package/lib/i18n/locales/zh.json +13 -1
  234. package/lib/layout/FullHeightLayout.js +2 -2
  235. package/lib/layout/FullHeightLayout.js.map +1 -1
  236. package/lib/layout/Navbar.js +4 -4
  237. package/lib/layout/Navbar.js.map +1 -1
  238. package/lib/layout/Sidebar.js +1 -1
  239. package/lib/layout/Sidebar.js.map +1 -1
  240. package/lib/router/NestedNavigationContext.d.ts +3 -1
  241. package/lib/router/NestedNavigationContext.d.ts.map +1 -1
  242. package/lib/router/NestedNavigationContext.js +2 -2
  243. package/lib/router/NestedNavigationContext.js.map +1 -1
  244. package/lib/session/UserSessionProvider.d.ts.map +1 -1
  245. package/lib/session/UserSessionProvider.js +2 -13
  246. package/lib/session/UserSessionProvider.js.map +1 -1
  247. package/lib/session/auth/authState.d.ts +13 -0
  248. package/lib/session/auth/authState.d.ts.map +1 -0
  249. package/lib/session/auth/authState.js +37 -0
  250. package/lib/session/auth/authState.js.map +1 -0
  251. package/lib/session/auth/domainRouting.d.ts +39 -0
  252. package/lib/session/auth/domainRouting.d.ts.map +1 -1
  253. package/lib/session/auth/domainRouting.js +85 -0
  254. package/lib/session/auth/domainRouting.js.map +1 -1
  255. package/lib/session/auth/useAuthState.d.ts +4 -7
  256. package/lib/session/auth/useAuthState.d.ts.map +1 -1
  257. package/lib/session/auth/useAuthState.js +5 -41
  258. package/lib/session/auth/useAuthState.js.map +1 -1
  259. package/lib/session/index.d.ts +1 -0
  260. package/lib/session/index.d.ts.map +1 -1
  261. package/lib/session/index.js +2 -0
  262. package/lib/session/index.js.map +1 -1
  263. package/lib/shell/SplashScreen.d.ts +1 -1
  264. package/lib/shell/SplashScreen.d.ts.map +1 -1
  265. package/lib/shell/SplashScreen.js +6 -2
  266. package/lib/shell/SplashScreen.js.map +1 -1
  267. package/lib/shell/VertesiaShell.js +1 -1
  268. package/lib/shell/VertesiaShell.js.map +1 -1
  269. package/lib/shell/apps/AppProjectSelector.js +1 -1
  270. package/lib/shell/apps/AppProjectSelector.js.map +1 -1
  271. package/lib/shell/apps/StandaloneApp.js +2 -2
  272. package/lib/shell/apps/StandaloneApp.js.map +1 -1
  273. package/lib/shell/login/SignInPrimitives.js +2 -2
  274. package/lib/shell/login/SignInPrimitives.js.map +1 -1
  275. package/lib/shell/login/SigninScreen.js +1 -1
  276. package/lib/shell/login/SigninScreen.js.map +1 -1
  277. package/lib/shell/login/SignupForm.js +1 -1
  278. package/lib/shell/login/SignupForm.js.map +1 -1
  279. package/lib/shell/login/TerminalLogin.js +2 -2
  280. package/lib/shell/login/TerminalLogin.js.map +1 -1
  281. package/lib/shell/login/UserInfo.d.ts.map +1 -1
  282. package/lib/shell/login/UserInfo.js +1 -1
  283. package/lib/shell/login/UserInfo.js.map +1 -1
  284. package/lib/shell/login/UserSessionMenu.js +1 -1
  285. package/lib/shell/login/UserSessionMenu.js.map +1 -1
  286. package/lib/vertesia-ui-core.js +7 -7
  287. package/lib/vertesia-ui-core.js.map +1 -1
  288. package/lib/vertesia-ui-features.js +179 -182
  289. package/lib/vertesia-ui-features.js.map +1 -1
  290. package/lib/vertesia-ui-i18n.BfN7iOHb.chunk.js +5 -0
  291. package/lib/vertesia-ui-i18n.BfN7iOHb.chunk.js.map +1 -0
  292. package/lib/vertesia-ui-i18n.BjH2zEZw.chunk.js +5 -0
  293. package/lib/vertesia-ui-i18n.BjH2zEZw.chunk.js.map +1 -0
  294. package/lib/vertesia-ui-i18n.BjSwAZXl.chunk.js +5 -0
  295. package/lib/vertesia-ui-i18n.BjSwAZXl.chunk.js.map +1 -0
  296. package/lib/vertesia-ui-i18n.C7PUm5Au.chunk.js +5 -0
  297. package/lib/vertesia-ui-i18n.C7PUm5Au.chunk.js.map +1 -0
  298. package/lib/vertesia-ui-i18n.CF_1mUS5.chunk.js +5 -0
  299. package/lib/vertesia-ui-i18n.CF_1mUS5.chunk.js.map +1 -0
  300. package/lib/vertesia-ui-i18n.ChfUl3_-.chunk.js +5 -0
  301. package/lib/vertesia-ui-i18n.ChfUl3_-.chunk.js.map +1 -0
  302. package/lib/vertesia-ui-i18n.D-Sk-5d1.chunk.js +5 -0
  303. package/lib/vertesia-ui-i18n.D-Sk-5d1.chunk.js.map +1 -0
  304. package/lib/vertesia-ui-i18n.D4rnu1_S.chunk.js +5 -0
  305. package/lib/vertesia-ui-i18n.D4rnu1_S.chunk.js.map +1 -0
  306. package/lib/vertesia-ui-i18n.DDf0-laK.chunk.js +5 -0
  307. package/lib/vertesia-ui-i18n.DDf0-laK.chunk.js.map +1 -0
  308. package/lib/vertesia-ui-i18n.DN79y06J.chunk.js +5 -0
  309. package/lib/vertesia-ui-i18n.DN79y06J.chunk.js.map +1 -0
  310. package/lib/vertesia-ui-i18n.DWLIciYQ.chunk.js +5 -0
  311. package/lib/vertesia-ui-i18n.DWLIciYQ.chunk.js.map +1 -0
  312. package/lib/vertesia-ui-i18n.DvF_YaAJ.chunk.js +5 -0
  313. package/lib/vertesia-ui-i18n.DvF_YaAJ.chunk.js.map +1 -0
  314. package/lib/vertesia-ui-i18n.js +2 -2
  315. package/lib/vertesia-ui-layout.js +1 -1
  316. package/lib/vertesia-ui-layout.js.map +1 -1
  317. package/lib/vertesia-ui-rich-text.js +24 -24
  318. package/lib/vertesia-ui-rich-text.js.map +1 -1
  319. package/lib/vertesia-ui-router.js +1 -1
  320. package/lib/vertesia-ui-router.js.map +1 -1
  321. package/lib/vertesia-ui-session.js +1 -1
  322. package/lib/vertesia-ui-session.js.map +1 -1
  323. package/lib/vertesia-ui-shell.js +3 -3
  324. package/lib/vertesia-ui-shell.js.map +1 -1
  325. package/lib/vertesia-ui-widgets.js +54 -54
  326. package/lib/vertesia-ui-widgets.js.map +1 -1
  327. package/lib/widgets/Progress.js +1 -1
  328. package/lib/widgets/Progress.js.map +1 -1
  329. package/lib/widgets/form/Form.js +2 -2
  330. package/lib/widgets/form/Form.js.map +1 -1
  331. package/lib/widgets/form/fields.js +2 -2
  332. package/lib/widgets/form/fields.js.map +1 -1
  333. package/lib/widgets/json-view/JSONView.js +1 -1
  334. package/lib/widgets/json-view/JSONView.js.map +1 -1
  335. package/lib/widgets/markdown/MermaidDiagram.js +1 -1
  336. package/lib/widgets/markdown/MermaidDiagram.js.map +1 -1
  337. package/lib/widgets/markdown/remarkDirectiveHandler.d.ts +7 -2
  338. package/lib/widgets/markdown/remarkDirectiveHandler.d.ts.map +1 -1
  339. package/lib/widgets/markdown/remarkDirectiveHandler.js +19 -4
  340. package/lib/widgets/markdown/remarkDirectiveHandler.js.map +1 -1
  341. package/lib/widgets/monacoEditor/MonacoEditor.d.ts.map +1 -1
  342. package/lib/widgets/monacoEditor/MonacoEditor.js +4 -2
  343. package/lib/widgets/monacoEditor/MonacoEditor.js.map +1 -1
  344. package/lib/widgets/monacoEditor/index.d.ts +1 -0
  345. package/lib/widgets/monacoEditor/index.d.ts.map +1 -1
  346. package/lib/widgets/monacoEditor/index.js +1 -0
  347. package/lib/widgets/monacoEditor/index.js.map +1 -1
  348. package/lib/widgets/monacoEditor/loadMonaco.d.ts +45 -0
  349. package/lib/widgets/monacoEditor/loadMonaco.d.ts.map +1 -0
  350. package/lib/widgets/monacoEditor/loadMonaco.js +62 -0
  351. package/lib/widgets/monacoEditor/loadMonaco.js.map +1 -0
  352. package/lib/widgets/properties/PropertiesView.js +1 -1
  353. package/lib/widgets/properties/PropertiesView.js.map +1 -1
  354. package/lib/widgets/schema-editor/editor/Editable.js +2 -2
  355. package/lib/widgets/schema-editor/editor/Editable.js.map +1 -1
  356. package/lib/widgets/schema-editor/editor/PropertyEditor.js +1 -1
  357. package/lib/widgets/schema-editor/editor/PropertyEditor.js.map +1 -1
  358. package/lib/widgets/schema-editor/editor/SchemaEditor.js +2 -2
  359. package/lib/widgets/schema-editor/editor/SchemaEditor.js.map +1 -1
  360. package/lib/widgets/upload/DropZone.js +1 -1
  361. package/lib/widgets/upload/DropZone.js.map +1 -1
  362. package/lib/widgets/upload/UploadResultCategory.d.ts +1 -1
  363. package/lib/widgets/upload/UploadResultCategory.d.ts.map +1 -1
  364. package/lib/widgets/upload/UploadResultCategory.js +3 -3
  365. package/lib/widgets/upload/UploadResultCategory.js.map +1 -1
  366. package/lib/widgets/upload/UploadSummary.js +1 -1
  367. package/lib/widgets/upload/UploadSummary.js.map +1 -1
  368. package/lib/widgets/xml-viewer/components/XMLViewer.d.ts.map +1 -1
  369. package/lib/widgets/xml-viewer/components/XMLViewer.js +7 -3
  370. package/lib/widgets/xml-viewer/components/XMLViewer.js.map +1 -1
  371. package/lib/widgets/xml-viewer/hooks/useCollapsible.d.ts +1 -1
  372. package/lib/widgets/xml-viewer/hooks/useXMLViewer.d.ts +11 -13
  373. package/lib/widgets/xml-viewer/hooks/useXMLViewer.d.ts.map +1 -1
  374. package/lib/widgets/xml-viewer/hooks/useXMLViewer.js +41 -14
  375. package/lib/widgets/xml-viewer/hooks/useXMLViewer.js.map +1 -1
  376. package/package.json +7 -7
  377. package/src/__tests__/contrast.test.ts +1 -0
  378. package/src/core/components/Avatar.tsx +3 -3
  379. package/src/core/components/ComboBox.tsx +1 -1
  380. package/src/core/components/FileUpload.tsx +4 -4
  381. package/src/core/components/Link.tsx +1 -1
  382. package/src/core/components/SelectList.tsx +1 -1
  383. package/src/core/components/SidePanel.tsx +1 -1
  384. package/src/core/components/Spinner.tsx +1 -1
  385. package/src/core/components/TagsInput.tsx +8 -8
  386. package/src/core/components/shadcn/MessageBox.tsx +1 -1
  387. package/src/core/components/shadcn/button.tsx +1 -1
  388. package/src/core/components/shadcn/card.tsx +1 -3
  389. package/src/core/components/shadcn/command.tsx +5 -5
  390. package/src/core/components/shadcn/filters/DynamicLabel.tsx +1 -1
  391. package/src/core/components/shadcn/filters/comboBox/DateCombobox.tsx +3 -3
  392. package/src/core/components/shadcn/input.tsx +3 -3
  393. package/src/core/components/shadcn/modal/ConfirmModal.tsx +3 -3
  394. package/src/core/components/shadcn/modal/dialog.tsx +2 -4
  395. package/src/core/components/shadcn/overflowTabs.tsx +2 -2
  396. package/src/core/components/shadcn/popover.tsx +1 -1
  397. package/src/core/components/shadcn/radioGroup.tsx +5 -7
  398. package/src/core/components/shadcn/selectBox.tsx +1 -1
  399. package/src/core/components/shadcn/tabs.tsx +4 -2
  400. package/src/core/components/styles.ts +1 -1
  401. package/src/core/components/table/index.tsx +1 -1
  402. package/src/core/hooks/useFetch.test.ts +20 -0
  403. package/src/core/hooks/useFetch.ts +2 -0
  404. package/src/css/base.css +1 -1
  405. package/src/css/color.css +4 -0
  406. package/src/css/theme.css +1 -0
  407. package/src/css/typography.css +2 -2
  408. package/src/features/activity-doc/ActivityDoc.tsx +11 -11
  409. package/src/features/agent/chat/AgentChart.tsx +1 -1
  410. package/src/features/agent/chat/AgentRightPanel.tsx +4 -8
  411. package/src/features/agent/chat/AskUserWidget.tsx +19 -23
  412. package/src/features/agent/chat/DocumentPanel.tsx +39 -48
  413. package/src/features/agent/chat/DocumentsTab.test.tsx +87 -0
  414. package/src/features/agent/chat/DocumentsTab.tsx +124 -0
  415. package/src/features/agent/chat/JumpingDots.tsx +3 -3
  416. package/src/features/agent/chat/ModernAgentConversation.test.tsx +0 -1
  417. package/src/features/agent/chat/ModernAgentConversation.tsx +3 -5
  418. package/src/features/agent/chat/ModernAgentOutput/AllMessagesMixed.test.tsx +60 -1
  419. package/src/features/agent/chat/ModernAgentOutput/AllMessagesMixed.tsx +44 -24
  420. package/src/features/agent/chat/ModernAgentOutput/BatchProgressPanel.tsx +12 -12
  421. package/src/features/agent/chat/ModernAgentOutput/Header.tsx +28 -15
  422. package/src/features/agent/chat/ModernAgentOutput/InlineSlideInPanel.tsx +4 -4
  423. package/src/features/agent/chat/ModernAgentOutput/MessageInput.tsx +2 -2
  424. package/src/features/agent/chat/ModernAgentOutput/MessageItem.tsx +7 -12
  425. package/src/features/agent/chat/ModernAgentOutput/MessagesContainer.tsx +1 -1
  426. package/src/features/agent/chat/ModernAgentOutput/PlanPanel.tsx +16 -22
  427. package/src/features/agent/chat/ModernAgentOutput/SlideInPanel.tsx +4 -4
  428. package/src/features/agent/chat/ModernAgentOutput/SlidingMessages.tsx +2 -4
  429. package/src/features/agent/chat/ModernAgentOutput/SlidingPlanPanel.tsx +21 -21
  430. package/src/features/agent/chat/ModernAgentOutput/StreamingMessage.tsx +4 -4
  431. package/src/features/agent/chat/ModernAgentOutput/SummaryConversation.ts +16 -1
  432. package/src/features/agent/chat/ModernAgentOutput/ToolCallGroup.tsx +19 -40
  433. package/src/features/agent/chat/ModernAgentOutput/requestInputMessages.test.ts +41 -0
  434. package/src/features/agent/chat/ModernAgentOutput/requestInputMessages.ts +19 -0
  435. package/src/features/agent/chat/ModernAgentOutput/utils.test.ts +93 -0
  436. package/src/features/agent/chat/SlidingThinkingIndicator.tsx +5 -2
  437. package/src/features/agent/chat/VegaLiteChart.tsx +6 -2
  438. package/src/features/agent/chat/hooks/useDocumentPanel.test.tsx +33 -0
  439. package/src/features/agent/chat/hooks/useDocumentPanel.ts +3 -20
  440. package/src/features/errors/RowErrorBoundary.tsx +1 -1
  441. package/src/features/facets/AgentRunnerFacetsNav.tsx +1 -1
  442. package/src/features/facets/utils/VInteractionFacet.tsx +22 -34
  443. package/src/features/facets/utils/VUserFacet.tsx +1 -1
  444. package/src/features/layout/GenericPageNavHeader.tsx +9 -1
  445. package/src/features/layout/NotFoundView.tsx +1 -1
  446. package/src/features/magic-pdf/AnnotatedImageSlider.tsx +8 -16
  447. package/src/features/magic-pdf/ExtractedContentView.tsx +4 -4
  448. package/src/features/magic-pdf/MagicPdfView.tsx +1 -1
  449. package/src/features/oauth/McpConnectionsButton.test.tsx +79 -8
  450. package/src/features/oauth/McpConnectionsButton.tsx +6 -3
  451. package/src/features/oauth/McpConnectionsDialog.tsx +9 -3
  452. package/src/features/oauth/useMcpConnections.ts +33 -27
  453. package/src/features/pdf-viewer/PdfPageRenderer.tsx +2 -2
  454. package/src/features/pdf-viewer/PdfPageSlider.tsx +4 -4
  455. package/src/features/pdf-viewer/SimplePdfViewer.tsx +1 -1
  456. package/src/features/permissions/UserPermissionsProvider.test.tsx +172 -0
  457. package/src/features/permissions/UserPermissionsProvider.tsx +68 -21
  458. package/src/features/permissions/useRoleMappings.ts +105 -0
  459. package/src/features/store/collections/SelectCollection.tsx +1 -1
  460. package/src/features/store/objects/DocumentPreviewPanel.tsx +43 -53
  461. package/src/features/store/objects/DocumentTable.tsx +2 -2
  462. package/src/features/store/objects/components/DocumentIcon.tsx +4 -4
  463. package/src/features/store/objects/components/DocumentInput.tsx +3 -3
  464. package/src/features/store/objects/components/PropertiesEditorModal.tsx +2 -2
  465. package/src/features/store/objects/components/SaveVersionConfirmModal.tsx +2 -2
  466. package/src/features/store/objects/layout/documentLayout.tsx +2 -4
  467. package/src/features/store/objects/selection/SelectionActions.tsx +1 -1
  468. package/src/features/store/types/IntakePolicyEditor.tsx +70 -36
  469. package/src/features/store/types/IntakePolicyForm.tsx +11 -3
  470. package/src/features/store/types/SelectContentTypeModal.tsx +1 -1
  471. package/src/features/user/UserAvatar.tsx +3 -3
  472. package/src/features/user/UserInfo.tsx +11 -16
  473. package/src/features/utils/index.ts +1 -0
  474. package/src/features/utils/interaction.test.tsx +93 -0
  475. package/src/features/utils/interaction.tsx +125 -0
  476. package/src/features/views/ViewResults.tsx +3 -3
  477. package/src/i18n/locales/ar.json +17 -1
  478. package/src/i18n/locales/de.json +13 -1
  479. package/src/i18n/locales/en.json +13 -1
  480. package/src/i18n/locales/es.json +13 -1
  481. package/src/i18n/locales/fr.json +13 -1
  482. package/src/i18n/locales/it.json +13 -1
  483. package/src/i18n/locales/ja.json +13 -1
  484. package/src/i18n/locales/ko.json +13 -1
  485. package/src/i18n/locales/pt.json +13 -1
  486. package/src/i18n/locales/ru.json +15 -1
  487. package/src/i18n/locales/tr.json +13 -1
  488. package/src/i18n/locales/zh-TW.json +13 -1
  489. package/src/i18n/locales/zh.json +13 -1
  490. package/src/layout/FullHeightLayout.tsx +2 -2
  491. package/src/layout/Navbar.tsx +5 -5
  492. package/src/layout/Sidebar.tsx +1 -1
  493. package/src/router/NestedNavigationContext.test.tsx +54 -0
  494. package/src/router/NestedNavigationContext.tsx +9 -2
  495. package/src/session/UserSessionProvider.tsx +2 -15
  496. package/src/session/auth/authState.test.ts +35 -0
  497. package/src/session/auth/authState.ts +42 -0
  498. package/src/session/auth/domainRouting.test.ts +169 -1
  499. package/src/session/auth/domainRouting.ts +89 -0
  500. package/src/session/auth/useAuthState.ts +5 -49
  501. package/src/session/index.ts +6 -0
  502. package/src/shell/SplashScreen.test.tsx +22 -0
  503. package/src/shell/SplashScreen.tsx +6 -2
  504. package/src/shell/VertesiaShell.tsx +1 -1
  505. package/src/shell/apps/AppProjectSelector.tsx +1 -1
  506. package/src/shell/apps/StandaloneApp.tsx +9 -9
  507. package/src/shell/login/SignInPrimitives.tsx +2 -2
  508. package/src/shell/login/SigninScreen.tsx +1 -1
  509. package/src/shell/login/SignupForm.tsx +2 -2
  510. package/src/shell/login/TerminalLogin.tsx +5 -5
  511. package/src/shell/login/UserInfo.tsx +2 -5
  512. package/src/shell/login/UserSessionMenu.tsx +2 -2
  513. package/src/widgets/Progress.tsx +2 -2
  514. package/src/widgets/form/Form.tsx +4 -4
  515. package/src/widgets/form/fields.tsx +2 -2
  516. package/src/widgets/json-view/JSONView.tsx +1 -6
  517. package/src/widgets/markdown/ArtifactEditingSurface.test.tsx +33 -29
  518. package/src/widgets/markdown/MarkdownRenderer.test.tsx +52 -0
  519. package/src/widgets/markdown/MermaidDiagram.tsx +2 -2
  520. package/src/widgets/markdown/remarkDirectiveHandler.ts +21 -5
  521. package/src/widgets/monacoEditor/MonacoEditor.tsx +4 -2
  522. package/src/widgets/monacoEditor/index.ts +1 -0
  523. package/src/widgets/monacoEditor/loadMonaco.test.ts +63 -0
  524. package/src/widgets/monacoEditor/loadMonaco.ts +70 -0
  525. package/src/widgets/properties/PropertiesView.tsx +1 -1
  526. package/src/widgets/schema-editor/editor/Editable.tsx +2 -2
  527. package/src/widgets/schema-editor/editor/PropertyEditor.tsx +1 -1
  528. package/src/widgets/schema-editor/editor/SchemaEditor.tsx +2 -2
  529. package/src/widgets/upload/DropZone.tsx +1 -1
  530. package/src/widgets/upload/UploadResultCategory.tsx +7 -7
  531. package/src/widgets/upload/UploadSummary.tsx +4 -4
  532. package/src/widgets/xml-viewer/components/XMLViewer.tsx +7 -3
  533. package/src/widgets/xml-viewer/hooks/useXMLViewer.test.ts +60 -7
  534. package/src/widgets/xml-viewer/hooks/useXMLViewer.ts +70 -16
  535. package/lib/features/agent/chat/DocumentTabBar.d.ts +0 -9
  536. package/lib/features/agent/chat/DocumentTabBar.d.ts.map +0 -1
  537. package/lib/features/agent/chat/DocumentTabBar.js +0 -9
  538. package/lib/features/agent/chat/DocumentTabBar.js.map +0 -1
  539. package/lib/vertesia-ui-i18n.BJBGsq-8.chunk.js +0 -5
  540. package/lib/vertesia-ui-i18n.BJBGsq-8.chunk.js.map +0 -1
  541. package/lib/vertesia-ui-i18n.BY5YG5cX.chunk.js +0 -5
  542. package/lib/vertesia-ui-i18n.BY5YG5cX.chunk.js.map +0 -1
  543. package/lib/vertesia-ui-i18n.Bd5_1BXO.chunk.js +0 -5
  544. package/lib/vertesia-ui-i18n.Bd5_1BXO.chunk.js.map +0 -1
  545. package/lib/vertesia-ui-i18n.Bvwej2HH.chunk.js +0 -5
  546. package/lib/vertesia-ui-i18n.Bvwej2HH.chunk.js.map +0 -1
  547. package/lib/vertesia-ui-i18n.CMT3f4gf.chunk.js +0 -5
  548. package/lib/vertesia-ui-i18n.CMT3f4gf.chunk.js.map +0 -1
  549. package/lib/vertesia-ui-i18n.D56DNPJW.chunk.js +0 -5
  550. package/lib/vertesia-ui-i18n.D56DNPJW.chunk.js.map +0 -1
  551. package/lib/vertesia-ui-i18n.DDzKLNx6.chunk.js +0 -5
  552. package/lib/vertesia-ui-i18n.DDzKLNx6.chunk.js.map +0 -1
  553. package/lib/vertesia-ui-i18n.D_Am1LpF.chunk.js +0 -5
  554. package/lib/vertesia-ui-i18n.D_Am1LpF.chunk.js.map +0 -1
  555. package/lib/vertesia-ui-i18n.DrZizgGV.chunk.js +0 -5
  556. package/lib/vertesia-ui-i18n.DrZizgGV.chunk.js.map +0 -1
  557. package/lib/vertesia-ui-i18n.DwHsq86z.chunk.js +0 -5
  558. package/lib/vertesia-ui-i18n.DwHsq86z.chunk.js.map +0 -1
  559. package/lib/vertesia-ui-i18n.PLpo0Bbz.chunk.js +0 -5
  560. package/lib/vertesia-ui-i18n.PLpo0Bbz.chunk.js.map +0 -1
  561. package/lib/vertesia-ui-i18n.xVbXALqz.chunk.js +0 -5
  562. package/lib/vertesia-ui-i18n.xVbXALqz.chunk.js.map +0 -1
  563. package/src/features/agent/chat/DocumentTabBar.tsx +0 -41
@@ -83,7 +83,7 @@ function BatchProgressPanelComponent({
83
83
  if (overallStatus === 'error' || overallStatus === 'warning') {
84
84
  return <AlertCircle className="size-4 text-destructive" />;
85
85
  }
86
- return <Layers className="size-4 text-purple-600" />;
86
+ return <Layers className="size-4 text-done" />;
87
87
  };
88
88
 
89
89
  // Border color based on status
@@ -91,14 +91,14 @@ function BatchProgressPanelComponent({
91
91
  if (overallStatus === 'completed') return 'border-s-success';
92
92
  if (overallStatus === 'error') return 'border-s-destructive';
93
93
  if (overallStatus === 'warning') return 'border-s-attention';
94
- return 'border-s-blue-500';
94
+ return 'border-s-info';
95
95
  };
96
96
 
97
97
  // Progress bar color
98
98
  const getProgressColor = () => {
99
99
  if (hasErrors) return 'bg-attention';
100
100
  if (isComplete) return 'bg-success';
101
- return 'bg-blue-500';
101
+ return 'bg-primary';
102
102
  };
103
103
 
104
104
  const copyToClipboard = () => {
@@ -118,7 +118,7 @@ function BatchProgressPanelComponent({
118
118
  return (
119
119
  <div
120
120
  className={cn(
121
- 'border-s-4 shadow-md overflow-hidden bg-white dark:bg-gray-900 mb-5',
121
+ 'border-s-4 shadow-md overflow-hidden bg-white dark:bg-muted mb-5',
122
122
  getBorderColor(),
123
123
  className,
124
124
  )}
@@ -130,7 +130,7 @@ function BatchProgressPanelComponent({
130
130
  tabIndex={0}
131
131
  aria-expanded={isExpanded}
132
132
  className={cn(
133
- 'flex items-center justify-between px-4 py-2 border-b border-gray-100/80 dark:border-gray-800/80 bg-blue-50/50 dark:bg-blue-900/10 cursor-pointer',
133
+ 'flex items-center justify-between px-4 py-2 border-b border-border/80 bg-info/50 dark:bg-info/10 cursor-pointer',
134
134
  headerClassName,
135
135
  )}
136
136
  onClick={() => setIsExpanded(!isExpanded)}
@@ -139,7 +139,7 @@ function BatchProgressPanelComponent({
139
139
  <div className="flex items-center gap-2">
140
140
  {renderStatusIndicator()}
141
141
  <span className={cn('text-xs font-medium text-muted', senderClassName)}>{t('agent.batch')}</span>
142
- <span className="text-xs text-blue-600 dark:text-blue-400 font-medium">{tool_name}</span>
142
+ <span className="text-xs text-info font-medium">{tool_name}</span>
143
143
  <span className="text-xs text-muted">
144
144
  {completed}/{total}
145
145
  </span>
@@ -169,9 +169,9 @@ function BatchProgressPanelComponent({
169
169
  </div>
170
170
 
171
171
  {/* Progress bar */}
172
- <div className={cn('px-4 py-2 bg-gray-50/50 dark:bg-gray-800/30', progressBarClassName)}>
172
+ <div className={cn('px-4 py-2 bg-muted/50 dark:bg-muted/30', progressBarClassName)}>
173
173
  <div className="flex items-center gap-3">
174
- <div className="flex-1 h-2 bg-gray-200 dark:bg-gray-700 rounded-full overflow-hidden">
174
+ <div className="flex-1 h-2 bg-muted rounded-full overflow-hidden">
175
175
  <div
176
176
  className={`h-full ${getProgressColor()} transition-all duration-300 ease-out`}
177
177
  style={{ width: `${progress}%` }}
@@ -191,7 +191,7 @@ function BatchProgressPanelComponent({
191
191
  </span>
192
192
  )}
193
193
  {isRunning && completed < total && (
194
- <span className="text-blue-500 flex items-center gap-1">
194
+ <span className="text-info flex items-center gap-1">
195
195
  <Loader2 className="size-3 animate-spin" />
196
196
  {total - completed}
197
197
  </span>
@@ -207,7 +207,7 @@ function BatchProgressPanelComponent({
207
207
  <div
208
208
  key={item.id}
209
209
  className={cn(
210
- 'flex items-center gap-2 px-4 py-1.5 text-xs border-b border-gray-100 dark:border-gray-800 last:border-b-0 hover:bg-gray-50 dark:hover:bg-gray-800/50',
210
+ 'flex items-center gap-2 px-4 py-1.5 text-xs border-b border-border last:border-b-0 hover:bg-muted',
211
211
  itemClassName,
212
212
  )}
213
213
  >
@@ -215,9 +215,9 @@ function BatchProgressPanelComponent({
215
215
  <div className="w-4 flex-shrink-0">
216
216
  {item.status === 'success' && <CheckCircle className="size-3 text-success" />}
217
217
  {item.status === 'error' && <AlertCircle className="size-3 text-destructive" />}
218
- {item.status === 'running' && <Loader2 className="size-3 text-blue-500 animate-spin" />}
218
+ {item.status === 'running' && <Loader2 className="size-3 text-info animate-spin" />}
219
219
  {item.status === 'pending' && (
220
- <div className="size-3 rounded-full border border-gray-300 dark:border-gray-600" />
220
+ <div className="size-3 rounded-full border border-border" />
221
221
  )}
222
222
  </div>
223
223
 
@@ -65,6 +65,19 @@ export interface HeaderProps {
65
65
  className?: string;
66
66
  }
67
67
 
68
+ /**
69
+ * Opens an internal route in a new browser tab, carrying the active tenant sticky params (a/p) so
70
+ * the new tab keeps the current account/project; absolute/external URLs are left untouched.
71
+ */
72
+ function useOpenInNewTab() {
73
+ const { router } = useRouterContext();
74
+ return (url: string) => {
75
+ const href = url.startsWith('/') ? router.getTopRouter().navigator.addStickyParams(url) : url;
76
+ window.open(href, '_blank', 'noopener,noreferrer');
77
+ return href;
78
+ };
79
+ }
80
+
68
81
  export default function Header({
69
82
  title,
70
83
  variant = 'full',
@@ -93,6 +106,7 @@ export default function Header({
93
106
  className,
94
107
  }: HeaderProps) {
95
108
  const { t } = useUITranslation();
109
+ const openInNewTab = useOpenInNewTab();
96
110
  const isCompact = variant === 'compact';
97
111
  const nextViewMode: AgentConversationViewMode = viewMode === 'sliding' ? 'stacked' : 'sliding';
98
112
  const verboseLabel = t('agent.verbose');
@@ -195,6 +209,19 @@ export default function Header({
195
209
  </Button>
196
210
  )}
197
211
 
212
+ {agentRunId && (
213
+ <Button
214
+ type="button"
215
+ size={isCompact ? 'icon' : 'xs'}
216
+ variant="ghost"
217
+ onClick={() => openInNewTab(`/store/agent-runner/${agentRunId}`)}
218
+ title={t('agent.openInNewTab')}
219
+ className={cn('transition-all duration-200 rounded-md', isCompact && 'size-8 rounded-lg')}
220
+ >
221
+ <ExternalLink className="size-4" />
222
+ </Button>
223
+ )}
224
+
198
225
  {resetWorkflow && (
199
226
  <Button
200
227
  type="button"
@@ -271,7 +298,7 @@ export default function Header({
271
298
  'w-2 h-2 rounded-full transition-colors duration-200',
272
299
  isReceivingChunks
273
300
  ? 'bg-purple-500 shadow-[0_0_6px_2px_rgba(168,85,247,0.6)]'
274
- : 'bg-gray-400',
301
+ : 'bg-muted',
275
302
  )}
276
303
  />
277
304
  </span>
@@ -316,7 +343,6 @@ function MoreDropdown({
316
343
  const toast = useToast();
317
344
  const { client } = useUserSession();
318
345
  const builder = usePayloadBuilder();
319
- const { router } = useRouterContext();
320
346
 
321
347
  const cancelWorkflow = async () => {
322
348
  try {
@@ -360,14 +386,6 @@ function MoreDropdown({
360
386
  }
361
387
  };
362
388
 
363
- const openUrl = (url: string) => {
364
- // Carry the active tenant sticky params (a/p) on internal routes so the new tab keeps the
365
- // current account/project; leave absolute/external URLs untouched.
366
- const href = url.startsWith('/') ? router.getTopRouter().navigator.addStickyParams(url) : url;
367
- window.open(href, '_blank');
368
- return href;
369
- };
370
-
371
389
  const copyAgentRunId = () => {
372
390
  navigator.clipboard.writeText(agentRunId);
373
391
  toast({
@@ -401,11 +419,6 @@ function MoreDropdown({
401
419
  }
402
420
  >
403
421
  <MenuGroup label="Actions">
404
- {isModal && (
405
- <MenuItem onClick={() => openUrl(`/store/agent-runner/${agentRunId}`)}>
406
- <ExternalLink className="size-3.5 text-muted" /> {t('agent.openInNewTab')}
407
- </MenuItem>
408
- )}
409
422
  <MenuItem onClick={copyAgentRunId}>
410
423
  <CopyIcon className="size-3.5 text-muted" /> {t('agent.copyAgentRunId')}
411
424
  </MenuItem>
@@ -45,15 +45,15 @@ export default function InlineSlideInPanel({
45
45
 
46
46
  return (
47
47
  <div
48
- className={`absolute top-12 end-0 bottom-0 z-40 bg-white dark:bg-gray-900 shadow-lg border-s border-gray-200 dark:border-gray-800 border-4 border-red-500`}
48
+ className={`absolute top-12 end-0 bottom-0 z-40 bg-white dark:bg-muted shadow-lg border-s border-border border-4 border-destructive`}
49
49
  style={{ width, transform: 'none' }}
50
50
  >
51
51
  {/* Header */}
52
- <div className="flex items-center justify-between p-3 border-b border-gray-200 dark:border-gray-800">
53
- <h3 className="font-medium text-gray-800 dark:text-gray-200 text-sm">{title}</h3>
52
+ <div className="flex items-center justify-between p-3 border-b border-border">
53
+ <h3 className="font-medium text-foreground text-sm">{title}</h3>
54
54
  <Button
55
55
  variant="unstyled"
56
- className="p-1 text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-200 rounded-full"
56
+ className="p-1 text-muted hover:text-foreground rounded-full"
57
57
  onClick={onClose}
58
58
  aria-label="Close"
59
59
  >
@@ -456,8 +456,8 @@ export default function MessageInput({
456
456
  >
457
457
  {/* Drag overlay */}
458
458
  {isDragOver && canDropFiles && (
459
- <div className="absolute inset-0 flex items-center justify-center bg-blue-100/80 dark:bg-blue-900/40 rounded-lg z-10 pointer-events-none">
460
- <div className="text-blue-600 dark:text-blue-400 font-medium flex items-center gap-2">
459
+ <div className="absolute inset-0 flex items-center justify-center bg-info/80 dark:bg-info/40 rounded-lg z-10 pointer-events-none">
460
+ <div className="text-info font-medium flex items-center gap-2">
461
461
  <UploadIcon className="size-5" />
462
462
  {t('agent.dropFilesToUpload')}
463
463
  </div>
@@ -140,8 +140,8 @@ export const MESSAGE_STYLES: Record<AgentMessageType | 'default', MessageStyleCo
140
140
  },
141
141
  [AgentMessageType.QUESTION]: { borderColor: 'border-s-muted', iconColor: 'text-muted', sender: 'User', Icon: User },
142
142
  [AgentMessageType.THOUGHT]: {
143
- borderColor: 'border-s-purple-500',
144
- iconColor: 'text-purple-600 dark:text-purple-400',
143
+ borderColor: 'border-s-done',
144
+ iconColor: 'text-done',
145
145
  sender: 'Agent',
146
146
  Icon: Bot,
147
147
  },
@@ -183,8 +183,8 @@ export const MESSAGE_STYLES: Record<AgentMessageType | 'default', MessageStyleCo
183
183
  Icon: Bot,
184
184
  },
185
185
  [AgentMessageType.BATCH_PROGRESS]: {
186
- borderColor: 'border-s-blue-500',
187
- iconColor: 'text-blue-600 dark:text-blue-400',
186
+ borderColor: 'border-s-info',
187
+ iconColor: 'text-info',
188
188
  sender: 'Batch',
189
189
  Icon: Layers,
190
190
  },
@@ -412,7 +412,7 @@ function MessageItemComponent({
412
412
  // Handle object content (JSON)
413
413
  if (typeof content === 'object') {
414
414
  return (
415
- <pre className="text-xs font-mono whitespace-pre-wrap overflow-x-auto bg-gray-100 dark:bg-gray-800 p-2 rounded text-gray-700">
415
+ <pre className="text-xs font-mono whitespace-pre-wrap overflow-x-auto bg-muted p-2 rounded text-foreground">
416
416
  {JSON.stringify(content, null, 2)}
417
417
  </pre>
418
418
  );
@@ -548,7 +548,7 @@ function MessageItemComponent({
548
548
  <div className={cn('w-full max-w-full', resolvedStyle.className)}>
549
549
  <div
550
550
  className={cn(
551
- 'border-s-4 bg-white dark:bg-gray-900 mb-4 w-full max-w-full overflow-hidden',
551
+ 'border-s-4 bg-white dark:bg-muted mb-4 w-full max-w-full overflow-hidden',
552
552
  resolvedStyle.borderColor,
553
553
  resolvedStyle.cardClassName,
554
554
  )}
@@ -611,12 +611,7 @@ function MessageItemComponent({
611
611
  </div>
612
612
 
613
613
  {/* Message content */}
614
- <div
615
- className={cn(
616
- 'px-4 pb-3 bg-white dark:bg-gray-900 overflow-hidden',
617
- resolvedStyle.contentClassName,
618
- )}
619
- >
614
+ <div className={cn('px-4 pb-3 bg-white dark:bg-muted overflow-hidden', resolvedStyle.contentClassName)}>
620
615
  {/* Check for REQUEST_INPUT with UX config - render AskUserWidget instead of plain text */}
621
616
  {askUserUx ? (
622
617
  <AskUserWidget
@@ -50,7 +50,7 @@ export default function MessagesContainer({
50
50
  >
51
51
  {sortedMessages.length === 0 ? (
52
52
  <div className={`flex items-center justify-center h-full text-center py-8 ${emptyClassName || ''}`}>
53
- <div className="flex items-center px-4 py-3 text-gray-500">Waiting for agent response...</div>
53
+ <div className="flex items-center px-4 py-3 text-muted">Waiting for agent response...</div>
54
54
  </div>
55
55
  ) : (
56
56
  <div className={`flex-1 flex flex-col justify-start h-full min-h-0 ${messagesClassName || ''}`}>
@@ -14,8 +14,8 @@ export default function PlanPanel({ plan, workstreamStatus, isVisible }: PlanPan
14
14
  if (!isVisible) return null;
15
15
 
16
16
  return (
17
- <div className="border-b border-gray-200 dark:border-gray-800 bg-gray-50 dark:bg-gray-900 p-3 shadow-sm transition-all duration-300 ease-in-out transform">
18
- <div className="text-xs font-medium mb-2 text-gray-800 dark:text-gray-200">{t('agent.agentPlan')}</div>
17
+ <div className="border-b border-border bg-muted p-3 shadow-sm transition-all duration-300 ease-in-out transform">
18
+ <div className="text-xs font-medium mb-2 text-foreground">{t('agent.agentPlan')}</div>
19
19
 
20
20
  {/* Plan Steps */}
21
21
  {plan.plan && plan.plan.length > 0 ? (
@@ -34,14 +34,14 @@ export default function PlanPanel({ plan, workstreamStatus, isVisible }: PlanPan
34
34
 
35
35
  // Determine status icon and style
36
36
  let StatusIcon = Circle;
37
- let statusColor = 'text-gray-400';
37
+ let statusColor = 'text-muted';
38
38
 
39
39
  if (status === 'in_progress') {
40
40
  StatusIcon = Clock;
41
- statusColor = 'text-blue-500';
41
+ statusColor = 'text-info';
42
42
  } else if (status === 'completed') {
43
43
  StatusIcon = CheckCircle;
44
- statusColor = 'text-green-500';
44
+ statusColor = 'text-success';
45
45
  }
46
46
 
47
47
  return (
@@ -50,8 +50,8 @@ export default function PlanPanel({ plan, workstreamStatus, isVisible }: PlanPan
50
50
  <StatusIcon className="h-3.5 w-3.5" />
51
51
  </div>
52
52
  <div className="text-xs">
53
- <span className="text-gray-700 dark:text-gray-300">{taskGoal}</span>
54
- <span className="ms-1 bg-gray-200 dark:bg-gray-700 px-1 py-0.5 rounded text-[10px] font-mono">
53
+ <span className="text-foreground">{taskGoal}</span>
54
+ <span className="ms-1 bg-muted px-1 py-0.5 rounded text-[10px] font-mono">
55
55
  {taskId}
56
56
  </span>
57
57
  </div>
@@ -60,18 +60,16 @@ export default function PlanPanel({ plan, workstreamStatus, isVisible }: PlanPan
60
60
  })}
61
61
  </div>
62
62
  ) : (
63
- <div className="text-xs text-gray-500 dark:text-gray-400 italic flex items-center">
64
- <AlertCircle className="h-3.5 w-3.5 me-1.5 text-amber-500" />
63
+ <div className="text-xs text-muted italic flex items-center">
64
+ <AlertCircle className="h-3.5 w-3.5 me-1.5 text-attention" />
65
65
  {t('agent.noPlanDetected')}
66
66
  </div>
67
67
  )}
68
68
 
69
69
  {/* Workstream Status Summary */}
70
70
  {workstreamStatus.size > 1 && (
71
- <div className="mt-3 pt-2 border-t border-gray-200 dark:border-gray-700">
72
- <div className="text-xs font-medium mb-1.5 text-gray-800 dark:text-gray-200">
73
- {t('agent.workstreams')}
74
- </div>
71
+ <div className="mt-3 pt-2 border-t border-border">
72
+ <div className="text-xs font-medium mb-1.5 text-foreground">{t('agent.workstreams')}</div>
75
73
  <div className="grid grid-cols-2 gap-1.5">
76
74
  {Array.from(workstreamStatus.entries())
77
75
  // Filter to only show real workstreams (main or those with valid names - not numeric IDs)
@@ -91,16 +89,16 @@ export default function PlanPanel({ plan, workstreamStatus, isVisible }: PlanPan
91
89
  })
92
90
  .map(([id, status]) => {
93
91
  let StatusIcon = Circle;
94
- let statusColor = 'text-gray-400';
92
+ let statusColor = 'text-muted';
95
93
  let statusText = t('agent.pending');
96
94
 
97
95
  if (status === 'in_progress') {
98
96
  StatusIcon = Clock;
99
- statusColor = 'text-blue-500';
97
+ statusColor = 'text-info';
100
98
  statusText = t('agent.inProgress');
101
99
  } else if (status === 'completed') {
102
100
  StatusIcon = CheckCircle;
103
- statusColor = 'text-green-500';
101
+ statusColor = 'text-success';
104
102
  statusText = t('agent.completed');
105
103
  }
106
104
 
@@ -112,12 +110,8 @@ export default function PlanPanel({ plan, workstreamStatus, isVisible }: PlanPan
112
110
  <div className={`me-1.5 ${statusColor}`}>
113
111
  <StatusIcon className="h-3 w-3" />
114
112
  </div>
115
- <span className="text-[10px] font-medium text-gray-600 dark:text-gray-400">
116
- {displayId}
117
- </span>
118
- <span className="text-[10px] text-gray-500 dark:text-gray-500 ms-1">
119
- {statusText}
120
- </span>
113
+ <span className="text-[10px] font-medium text-muted">{displayId}</span>
114
+ <span className="text-[10px] text-muted ms-1">{statusText}</span>
121
115
  </div>
122
116
  );
123
117
  })}
@@ -48,15 +48,15 @@ export default function SlideInPanel({ isOpen, onClose, title, children, width =
48
48
 
49
49
  {/* Slide-in panel */}
50
50
  <div
51
- className={`fixed top-0 end-0 bottom-0 z-50 bg-white dark:bg-gray-900 shadow-lg border-s border-gray-200 dark:border-gray-800 transition-transform duration-300 ease-in-out ${panelTranslateClass}`}
51
+ className={`fixed top-0 end-0 bottom-0 z-50 bg-white dark:bg-muted shadow-lg border-s border-border transition-transform duration-300 ease-in-out ${panelTranslateClass}`}
52
52
  style={{ width }}
53
53
  >
54
54
  {/* Header */}
55
- <div className="flex items-center justify-between p-4 border-b border-gray-200 dark:border-gray-800">
56
- <h3 className="font-medium text-gray-800 dark:text-gray-200">{title}</h3>
55
+ <div className="flex items-center justify-between p-4 border-b border-border">
56
+ <h3 className="font-medium text-foreground">{title}</h3>
57
57
  <Button
58
58
  variant="unstyled"
59
- className="p-1 text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-200 rounded-full"
59
+ className="p-1 text-muted hover:text-foreground rounded-full"
60
60
  onClick={onClose}
61
61
  aria-label="Close"
62
62
  >
@@ -82,10 +82,8 @@ export default function SlidingMessages({ messages, isCompleted }: SlidingMessag
82
82
  {/* If no messages and not completed, show a placeholder thinking message */}
83
83
  {messages.length === 0 && !isCompleted && (
84
84
  <div className="flex items-center justify-center flex-1 text-center py-8">
85
- <div className="flex items-center gap-3 bg-blue-50 rounded-lg border border-blue-100 px-4 py-3">
86
- <div className="text-sm text-blue-700 font-medium">
87
- {ThinkingMessages[thinkingMessageIndex]}
88
- </div>
85
+ <div className="flex items-center gap-3 bg-info rounded-lg border border-info px-4 py-3">
86
+ <div className="text-sm text-info font-medium">{ThinkingMessages[thinkingMessageIndex]}</div>
89
87
  </div>
90
88
  </div>
91
89
  )}
@@ -51,7 +51,7 @@ export default function SlidingPlanPanel({ plan, workstreamStatus, isOpen, onClo
51
51
  <div className="font-medium text-sm">{t('agent.stepByStepPlan')}</div>
52
52
  </div>
53
53
 
54
- <div className="divide-y divide-gray-100 dark:divide-gray-800">
54
+ <div className="divide-y divide-border">
55
55
  {plan.plan && plan.plan.length > 0 ? (
56
56
  plan.plan.map((task, index) => {
57
57
  // Extract task info with null checks
@@ -68,16 +68,16 @@ export default function SlidingPlanPanel({ plan, workstreamStatus, isOpen, onClo
68
68
 
69
69
  // Determine status icon and style
70
70
  let StatusIcon = Circle;
71
- let statusColor = 'text-gray-400';
71
+ let statusColor = 'text-muted';
72
72
  let bgColor = '';
73
73
 
74
74
  if (status === 'in_progress') {
75
75
  StatusIcon = Clock;
76
- statusColor = 'text-blue-500';
77
- bgColor = 'bg-blue-50/50 dark:bg-blue-900/10';
76
+ statusColor = 'text-info';
77
+ bgColor = 'bg-info/50 dark:bg-info/10';
78
78
  } else if (status === 'completed') {
79
79
  StatusIcon = CheckCircle;
80
- statusColor = 'text-green-500';
80
+ statusColor = 'text-success';
81
81
  }
82
82
 
83
83
  return (
@@ -86,18 +86,18 @@ export default function SlidingPlanPanel({ plan, workstreamStatus, isOpen, onClo
86
86
  <StatusIcon className="h-4 w-4" />
87
87
  </div>
88
88
  <div>
89
- <div className="text-sm text-gray-800 dark:text-gray-200">{taskGoal}</div>
89
+ <div className="text-sm text-foreground">{taskGoal}</div>
90
90
  <div className="mt-1">
91
- <span className="inline-flex items-center px-2 py-0.5 rounded text-xs font-medium bg-gray-100 dark:bg-gray-800 text-gray-700 dark:text-gray-300">
91
+ <span className="inline-flex items-center px-2 py-0.5 rounded text-xs font-medium bg-muted text-foreground">
92
92
  {taskId}
93
93
  </span>
94
94
  <span
95
95
  className={`ms-2 text-xs ${
96
96
  status === 'completed'
97
- ? 'text-green-600 dark:text-green-400'
97
+ ? 'text-success'
98
98
  : status === 'in_progress'
99
- ? 'text-blue-600 dark:text-blue-400'
100
- : 'text-gray-500 dark:text-gray-400'
99
+ ? 'text-info'
100
+ : 'text-muted'
101
101
  }`}
102
102
  >
103
103
  {status === 'completed'
@@ -112,8 +112,8 @@ export default function SlidingPlanPanel({ plan, workstreamStatus, isOpen, onClo
112
112
  );
113
113
  })
114
114
  ) : (
115
- <div className="p-4 text-center text-gray-500 dark:text-gray-400 italic">
116
- <AlertCircle className="h-5 w-5 mx-auto mb-2 text-amber-500" />
115
+ <div className="p-4 text-center text-muted italic">
116
+ <AlertCircle className="h-5 w-5 mx-auto mb-2 text-attention" />
117
117
  <p>{t('agent.noPlanDetected')}</p>
118
118
  <p className="text-xs mt-1">{t('agent.plansWillAppear')}</p>
119
119
  </div>
@@ -123,8 +123,8 @@ export default function SlidingPlanPanel({ plan, workstreamStatus, isOpen, onClo
123
123
 
124
124
  {/* Workstream Status Summary */}
125
125
  {workstreamStatus.size > 1 && (
126
- <div className="mt-4 rounded-md border border-gray-200 dark:border-gray-800">
127
- <div className="p-3 border-b border-gray-200 dark:border-gray-800 bg-gray-50 dark:bg-gray-900/50">
126
+ <div className="mt-4 rounded-md border border-border">
127
+ <div className="p-3 border-b border-border bg-muted">
128
128
  <div className="font-medium text-sm">{t('agent.workstreams')}</div>
129
129
  </div>
130
130
  <div className="p-3">
@@ -147,19 +147,19 @@ export default function SlidingPlanPanel({ plan, workstreamStatus, isOpen, onClo
147
147
  })
148
148
  .map(([id, status]) => {
149
149
  let StatusIcon = Circle;
150
- let statusColor = 'text-gray-400';
151
- let statusBg = 'bg-gray-100 dark:bg-gray-800';
150
+ let statusColor = 'text-muted';
151
+ let statusBg = 'bg-muted';
152
152
  let statusText = t('agent.pending');
153
153
 
154
154
  if (status === 'in_progress') {
155
155
  StatusIcon = Clock;
156
- statusColor = 'text-blue-500';
157
- statusBg = 'bg-blue-100 dark:bg-blue-800/30';
156
+ statusColor = 'text-info';
157
+ statusBg = 'bg-info';
158
158
  statusText = t('agent.inProgress');
159
159
  } else if (status === 'completed') {
160
160
  StatusIcon = CheckCircle;
161
- statusColor = 'text-green-500';
162
- statusBg = 'bg-green-100 dark:bg-green-800/30';
161
+ statusColor = 'text-success';
162
+ statusBg = 'bg-success';
163
163
  statusText = t('agent.completed');
164
164
  }
165
165
 
@@ -172,7 +172,7 @@ export default function SlidingPlanPanel({ plan, workstreamStatus, isOpen, onClo
172
172
  <StatusIcon className="h-4 w-4" />
173
173
  </div>
174
174
  <div className="flex-1">
175
- <span className="text-sm font-medium text-gray-800 dark:text-gray-300">
175
+ <span className="text-sm font-medium text-foreground">
176
176
  {displayId}
177
177
  </span>
178
178
  </div>
@@ -273,7 +273,7 @@ function StreamingMessageComponent({
273
273
  {/* Card wrapper matching MessageItem structure */}
274
274
  <div
275
275
  className={cn(
276
- 'border-s-4 bg-white dark:bg-gray-900 mb-4 border-s-purple-500 w-full max-w-full overflow-hidden',
276
+ 'border-s-4 bg-white dark:bg-muted mb-4 border-s-done w-full max-w-full overflow-hidden',
277
277
  cardClassName,
278
278
  )}
279
279
  data-workstream-id={workstreamId}
@@ -283,9 +283,9 @@ function StreamingMessageComponent({
283
283
  <div className="flex items-center gap-1.5">
284
284
  <div className={cn('animate-fadeIn', iconClassName)}>
285
285
  {isTyping ? (
286
- <span className="size-2 rounded-full bg-blue-500 animate-pulse inline-block" />
286
+ <span className="size-2 rounded-full bg-primary animate-pulse inline-block" />
287
287
  ) : (
288
- <Bot className="size-4 text-purple-600 dark:text-purple-400" />
288
+ <Bot className="size-4 text-done" />
289
289
  )}
290
290
  </div>
291
291
  <span className={cn('text-xs font-medium text-muted', senderClassName)}>Agent</span>
@@ -299,7 +299,7 @@ function StreamingMessageComponent({
299
299
  variant="ghost"
300
300
  size="xs"
301
301
  onClick={copyToClipboard}
302
- className="size-6 p-0 hover:bg-gray-100 dark:hover:bg-gray-800"
302
+ className="size-6 p-0 hover:bg-muted"
303
303
  title={t('agent.copyMessage')}
304
304
  >
305
305
  <CopyIcon className="size-3" />
@@ -133,7 +133,22 @@ export function isSummaryAssistantProseMessage(message: AgentMessage): boolean {
133
133
 
134
134
  if (message.type === AgentMessageType.ANSWER) return true;
135
135
 
136
- if (isToolPreambleMessage(message)) return false;
136
+ if (isToolPreambleMessage(message)) {
137
+ // Text accompanying ask_user can be the draft the question asks the user to review.
138
+ // Keep it visible for both persisted messages and reconstructed streaming messages.
139
+ return (
140
+ message.details?.display_role === 'tool_preamble' &&
141
+ (message.details.tool === 'ask_user' ||
142
+ (Array.isArray(message.details.tools) &&
143
+ message.details.tools.some((tool: unknown) => {
144
+ if (typeof tool === 'string') return tool === 'ask_user';
145
+ if (!tool || typeof tool !== 'object') return false;
146
+ return (
147
+ ('name' in tool && tool.name === 'ask_user') || ('tool' in tool && tool.tool === 'ask_user')
148
+ );
149
+ })))
150
+ );
151
+ }
137
152
 
138
153
  // Streamed thoughts without tool metadata are model-visible prose. They remain
139
154
  // in the conversation unless buildSummaryDisplayMessages classifies them as