@vertesia/ui 1.0.0-dev.20260305.083323Z → 1.0.0-dev.20260331.091034Z

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 (783) hide show
  1. package/lib/esm/core/components/SelectList.js +3 -1
  2. package/lib/esm/core/components/SelectList.js.map +1 -1
  3. package/lib/esm/core/components/SidePanel.js +2 -2
  4. package/lib/esm/core/components/SidePanel.js.map +1 -1
  5. package/lib/esm/core/components/index.js +0 -5
  6. package/lib/esm/core/components/index.js.map +1 -1
  7. package/lib/esm/core/components/shadcn/breadcrumb.js +11 -7
  8. package/lib/esm/core/components/shadcn/breadcrumb.js.map +1 -1
  9. package/lib/esm/core/components/shadcn/button.js +5 -3
  10. package/lib/esm/core/components/shadcn/button.js.map +1 -1
  11. package/lib/esm/core/components/shadcn/collaspible.js +14 -0
  12. package/lib/esm/core/components/shadcn/collaspible.js.map +1 -0
  13. package/lib/esm/core/components/shadcn/dropdown.js +64 -0
  14. package/lib/esm/core/components/shadcn/dropdown.js.map +1 -0
  15. package/lib/esm/core/components/shadcn/filters/comboBox/DateCombobox.js +3 -1
  16. package/lib/esm/core/components/shadcn/filters/comboBox/DateCombobox.js.map +1 -1
  17. package/lib/esm/core/components/shadcn/filters/comboBox/SelectCombobox.js +3 -1
  18. package/lib/esm/core/components/shadcn/filters/comboBox/SelectCombobox.js.map +1 -1
  19. package/lib/esm/core/components/shadcn/filters/comboBox/StringListCombobox.js +1 -1
  20. package/lib/esm/core/components/shadcn/filters/comboBox/StringListCombobox.js.map +1 -1
  21. package/lib/esm/core/components/shadcn/filters/filter/StringListFilter.js +1 -1
  22. package/lib/esm/core/components/shadcn/filters/filter/StringListFilter.js.map +1 -1
  23. package/lib/esm/core/components/shadcn/filters/filter/dateFilter.js +4 -2
  24. package/lib/esm/core/components/shadcn/filters/filter/dateFilter.js.map +1 -1
  25. package/lib/esm/core/components/shadcn/filters/filterBar.js +7 -4
  26. package/lib/esm/core/components/shadcn/filters/filterBar.js.map +1 -1
  27. package/lib/esm/core/components/shadcn/index.js +4 -0
  28. package/lib/esm/core/components/shadcn/index.js.map +1 -1
  29. package/lib/esm/core/components/shadcn/modal/ConfirmModal.js +4 -2
  30. package/lib/esm/core/components/shadcn/modal/ConfirmModal.js.map +1 -1
  31. package/lib/esm/core/components/shadcn/modal/DeleteModal.js +5 -3
  32. package/lib/esm/core/components/shadcn/modal/DeleteModal.js.map +1 -1
  33. package/lib/esm/core/components/shadcn/popover.js +11 -7
  34. package/lib/esm/core/components/shadcn/popover.js.map +1 -1
  35. package/lib/esm/core/components/shadcn/radioGroup.js +29 -0
  36. package/lib/esm/core/components/shadcn/radioGroup.js.map +1 -0
  37. package/lib/esm/core/components/shadcn/switch.js +19 -0
  38. package/lib/esm/core/components/shadcn/switch.js.map +1 -0
  39. package/lib/esm/core/components/shadcn/tabs.js +6 -6
  40. package/lib/esm/core/components/shadcn/tabs.js.map +1 -1
  41. package/lib/esm/core/components/shadcn/theme/ThemeSwitcher.js +7 -4
  42. package/lib/esm/core/components/shadcn/theme/ThemeSwitcher.js.map +1 -1
  43. package/lib/esm/core/components/toast/NotificationPanel.js +3 -3
  44. package/lib/esm/core/components/toast/NotificationPanel.js.map +1 -1
  45. package/lib/esm/core/hooks/PortalContainerProvider.js +9 -3
  46. package/lib/esm/core/hooks/PortalContainerProvider.js.map +1 -1
  47. package/lib/esm/env/index.js +16 -9
  48. package/lib/esm/env/index.js.map +1 -1
  49. package/lib/esm/features/agent/PayloadBuilder.js +87 -15
  50. package/lib/esm/features/agent/PayloadBuilder.js.map +1 -1
  51. package/lib/esm/features/agent/chat/AgentRightPanel.js +159 -0
  52. package/lib/esm/features/agent/chat/AgentRightPanel.js.map +1 -0
  53. package/lib/esm/features/agent/chat/ArtifactsTab.js +69 -0
  54. package/lib/esm/features/agent/chat/ArtifactsTab.js.map +1 -0
  55. package/lib/esm/features/agent/chat/AskUserWidget.js +12 -6
  56. package/lib/esm/features/agent/chat/AskUserWidget.js.map +1 -1
  57. package/lib/esm/features/agent/chat/DocumentPanel.js +6 -3
  58. package/lib/esm/features/agent/chat/DocumentPanel.js.map +1 -1
  59. package/lib/esm/features/agent/chat/ImageLightbox.js +3 -1
  60. package/lib/esm/features/agent/chat/ImageLightbox.js.map +1 -1
  61. package/lib/esm/features/agent/chat/ModernAgentConversation.js +241 -113
  62. package/lib/esm/features/agent/chat/ModernAgentConversation.js.map +1 -1
  63. package/lib/esm/features/agent/chat/ModernAgentOutput/AllMessagesMixed.js +122 -52
  64. package/lib/esm/features/agent/chat/ModernAgentOutput/AllMessagesMixed.js.map +1 -1
  65. package/lib/esm/features/agent/chat/ModernAgentOutput/BatchProgressPanel.js +5 -3
  66. package/lib/esm/features/agent/chat/ModernAgentOutput/BatchProgressPanel.js.map +1 -1
  67. package/lib/esm/features/agent/chat/ModernAgentOutput/Header.js +76 -33
  68. package/lib/esm/features/agent/chat/ModernAgentOutput/Header.js.map +1 -1
  69. package/lib/esm/features/agent/chat/ModernAgentOutput/InlineSlidingPlanPanel.js +82 -83
  70. package/lib/esm/features/agent/chat/ModernAgentOutput/InlineSlidingPlanPanel.js.map +1 -1
  71. package/lib/esm/features/agent/chat/ModernAgentOutput/MessageInput.js +16 -14
  72. package/lib/esm/features/agent/chat/ModernAgentOutput/MessageInput.js.map +1 -1
  73. package/lib/esm/features/agent/chat/ModernAgentOutput/MessageItem.js +20 -5
  74. package/lib/esm/features/agent/chat/ModernAgentOutput/MessageItem.js.map +1 -1
  75. package/lib/esm/features/agent/chat/ModernAgentOutput/PlanPanel.js +8 -6
  76. package/lib/esm/features/agent/chat/ModernAgentOutput/PlanPanel.js.map +1 -1
  77. package/lib/esm/features/agent/chat/ModernAgentOutput/SlidingPlanPanel.js +12 -10
  78. package/lib/esm/features/agent/chat/ModernAgentOutput/SlidingPlanPanel.js.map +1 -1
  79. package/lib/esm/features/agent/chat/ModernAgentOutput/StreamingMessage.js +5 -3
  80. package/lib/esm/features/agent/chat/ModernAgentOutput/StreamingMessage.js.map +1 -1
  81. package/lib/esm/features/agent/chat/ModernAgentOutput/ToolCallGroup.js +104 -13
  82. package/lib/esm/features/agent/chat/ModernAgentOutput/ToolCallGroup.js.map +1 -1
  83. package/lib/esm/features/agent/chat/ModernAgentOutput/WorkstreamTabs.js +9 -5
  84. package/lib/esm/features/agent/chat/ModernAgentOutput/WorkstreamTabs.js.map +1 -1
  85. package/lib/esm/features/agent/chat/ModernAgentOutput/utils.js +160 -76
  86. package/lib/esm/features/agent/chat/ModernAgentOutput/utils.js.map +1 -1
  87. package/lib/esm/features/agent/chat/SlidingThinkingIndicator.js +3 -1
  88. package/lib/esm/features/agent/chat/SlidingThinkingIndicator.js.map +1 -1
  89. package/lib/esm/features/agent/chat/VegaLiteChart.js +14 -2
  90. package/lib/esm/features/agent/chat/VegaLiteChart.js.map +1 -1
  91. package/lib/esm/features/agent/chat/hooks/useAgentPlans.js +3 -8
  92. package/lib/esm/features/agent/chat/hooks/useAgentPlans.js.map +1 -1
  93. package/lib/esm/features/agent/chat/hooks/useAgentStream.js +79 -16
  94. package/lib/esm/features/agent/chat/hooks/useAgentStream.js.map +1 -1
  95. package/lib/esm/features/agent/chat/hooks/useArtifacts.js +108 -0
  96. package/lib/esm/features/agent/chat/hooks/useArtifacts.js.map +1 -0
  97. package/lib/esm/features/agent/chat/hooks/useDocumentPanel.js +56 -5
  98. package/lib/esm/features/agent/chat/hooks/useDocumentPanel.js.map +1 -1
  99. package/lib/esm/features/agent/chat/hooks/useFileProcessing.js +12 -10
  100. package/lib/esm/features/agent/chat/hooks/useFileProcessing.js.map +1 -1
  101. package/lib/esm/features/errors/PanelErrorBoundary.js +3 -1
  102. package/lib/esm/features/errors/PanelErrorBoundary.js.map +1 -1
  103. package/lib/esm/features/facets/AgentRunnerFacetsNav.js +45 -33
  104. package/lib/esm/features/facets/AgentRunnerFacetsNav.js.map +1 -1
  105. package/lib/esm/features/facets/RunsFacetsNav.js +9 -2
  106. package/lib/esm/features/facets/RunsFacetsNav.js.map +1 -1
  107. package/lib/esm/features/facets/index.js +1 -1
  108. package/lib/esm/features/facets/index.js.map +1 -1
  109. package/lib/esm/features/layout/GenericPageNavHeader.js +40 -28
  110. package/lib/esm/features/layout/GenericPageNavHeader.js.map +1 -1
  111. package/lib/esm/features/layout/NotFoundView.js +3 -1
  112. package/lib/esm/features/layout/NotFoundView.js.map +1 -1
  113. package/lib/esm/features/magic-pdf/AnnotatedImageSlider.js +9 -5
  114. package/lib/esm/features/magic-pdf/AnnotatedImageSlider.js.map +1 -1
  115. package/lib/esm/features/magic-pdf/DownloadPopover.js +5 -4
  116. package/lib/esm/features/magic-pdf/DownloadPopover.js.map +1 -1
  117. package/lib/esm/features/magic-pdf/MagicPdfView.js +8 -5
  118. package/lib/esm/features/magic-pdf/MagicPdfView.js.map +1 -1
  119. package/lib/esm/features/pdf-viewer/PdfPageSlider.js +9 -5
  120. package/lib/esm/features/pdf-viewer/PdfPageSlider.js.map +1 -1
  121. package/lib/esm/features/pdf-viewer/SimplePdfViewer.js +5 -3
  122. package/lib/esm/features/pdf-viewer/SimplePdfViewer.js.map +1 -1
  123. package/lib/esm/features/permissions/UserPermissionsProvider.js +3 -1
  124. package/lib/esm/features/permissions/UserPermissionsProvider.js.map +1 -1
  125. package/lib/esm/features/store/collections/BrowseCollectionView.js +9 -1
  126. package/lib/esm/features/store/collections/BrowseCollectionView.js.map +1 -1
  127. package/lib/esm/features/store/collections/CollectionsTable.js +14 -7
  128. package/lib/esm/features/store/collections/CollectionsTable.js.map +1 -1
  129. package/lib/esm/features/store/collections/CreateCollection.js +12 -9
  130. package/lib/esm/features/store/collections/CreateCollection.js.map +1 -1
  131. package/lib/esm/features/store/collections/EditCollectionView.js +23 -19
  132. package/lib/esm/features/store/collections/EditCollectionView.js.map +1 -1
  133. package/lib/esm/features/store/collections/SelectCollection.js +25 -10
  134. package/lib/esm/features/store/collections/SelectCollection.js.map +1 -1
  135. package/lib/esm/features/store/collections/SharedPropsEditor.js +5 -3
  136. package/lib/esm/features/store/collections/SharedPropsEditor.js.map +1 -1
  137. package/lib/esm/features/store/collections/SyncMemberHeadsToggle.js +5 -3
  138. package/lib/esm/features/store/collections/SyncMemberHeadsToggle.js.map +1 -1
  139. package/lib/esm/features/store/objects/DocumentPreviewPanel.js +14 -12
  140. package/lib/esm/features/store/objects/DocumentPreviewPanel.js.map +1 -1
  141. package/lib/esm/features/store/objects/DocumentSearchResults.js +15 -5
  142. package/lib/esm/features/store/objects/DocumentSearchResults.js.map +1 -1
  143. package/lib/esm/features/store/objects/DocumentTable.js +10 -7
  144. package/lib/esm/features/store/objects/DocumentTable.js.map +1 -1
  145. package/lib/esm/features/store/objects/ExportPropertiesModal.js +5 -2
  146. package/lib/esm/features/store/objects/ExportPropertiesModal.js.map +1 -1
  147. package/lib/esm/features/store/objects/components/ContentDispositionButton.js +3 -1
  148. package/lib/esm/features/store/objects/components/ContentDispositionButton.js.map +1 -1
  149. package/lib/esm/features/store/objects/components/ContentOverview.js +55 -40
  150. package/lib/esm/features/store/objects/components/ContentOverview.js.map +1 -1
  151. package/lib/esm/features/store/objects/components/DocumentIcon.js +4 -3
  152. package/lib/esm/features/store/objects/components/DocumentIcon.js.map +1 -1
  153. package/lib/esm/features/store/objects/components/PropertiesEditorModal.js +13 -11
  154. package/lib/esm/features/store/objects/components/PropertiesEditorModal.js.map +1 -1
  155. package/lib/esm/features/store/objects/components/SaveVersionConfirmModal.js +15 -18
  156. package/lib/esm/features/store/objects/components/SaveVersionConfirmModal.js.map +1 -1
  157. package/lib/esm/features/store/objects/components/SelectDocument.js +9 -6
  158. package/lib/esm/features/store/objects/components/SelectDocument.js.map +1 -1
  159. package/lib/esm/features/store/objects/components/TextEditorPanel.js +97 -0
  160. package/lib/esm/features/store/objects/components/TextEditorPanel.js.map +1 -0
  161. package/lib/esm/features/store/objects/components/VectorSearchWidget.js +3 -1
  162. package/lib/esm/features/store/objects/components/VectorSearchWidget.js.map +1 -1
  163. package/lib/esm/features/store/objects/components/useContentPanelHooks.js +4 -2
  164. package/lib/esm/features/store/objects/components/useContentPanelHooks.js.map +1 -1
  165. package/lib/esm/features/store/objects/components/useDownloadFile.js +12 -10
  166. package/lib/esm/features/store/objects/components/useDownloadFile.js.map +1 -1
  167. package/lib/esm/features/store/objects/layout/documentLayout.js +10 -6
  168. package/lib/esm/features/store/objects/layout/documentLayout.js.map +1 -1
  169. package/lib/esm/features/store/objects/layout/renderers.js +10 -1
  170. package/lib/esm/features/store/objects/layout/renderers.js.map +1 -1
  171. package/lib/esm/features/store/objects/search/DocumentSearchContext.js +3 -2
  172. package/lib/esm/features/store/objects/search/DocumentSearchContext.js.map +1 -1
  173. package/lib/esm/features/store/objects/search/DocumentSearchProvider.js +3 -0
  174. package/lib/esm/features/store/objects/search/DocumentSearchProvider.js.map +1 -1
  175. package/lib/esm/features/store/objects/selection/ObjectsActionContext.js +22 -109
  176. package/lib/esm/features/store/objects/selection/ObjectsActionContext.js.map +1 -1
  177. package/lib/esm/features/store/objects/selection/ObjectsActionContextClass.js +50 -0
  178. package/lib/esm/features/store/objects/selection/ObjectsActionContextClass.js.map +1 -0
  179. package/lib/esm/features/store/objects/selection/ObjectsActionHooks.js +27 -0
  180. package/lib/esm/features/store/objects/selection/ObjectsActionHooks.js.map +1 -0
  181. package/lib/esm/features/store/objects/selection/SelectionActions.js +10 -6
  182. package/lib/esm/features/store/objects/selection/SelectionActions.js.map +1 -1
  183. package/lib/esm/features/store/objects/selection/actions/AddToCollectionAction.js +17 -12
  184. package/lib/esm/features/store/objects/selection/actions/AddToCollectionAction.js.map +1 -1
  185. package/lib/esm/features/store/objects/selection/actions/ChangeTypeAction.js +9 -5
  186. package/lib/esm/features/store/objects/selection/actions/ChangeTypeAction.js.map +1 -1
  187. package/lib/esm/features/store/objects/selection/actions/ConfirmAction.js +4 -2
  188. package/lib/esm/features/store/objects/selection/actions/ConfirmAction.js.map +1 -1
  189. package/lib/esm/features/store/objects/selection/actions/DeleteObjectsAction.js +24 -23
  190. package/lib/esm/features/store/objects/selection/actions/DeleteObjectsAction.js.map +1 -1
  191. package/lib/esm/features/store/objects/selection/actions/ExportPropertiesAction.js +10 -5
  192. package/lib/esm/features/store/objects/selection/actions/ExportPropertiesAction.js.map +1 -1
  193. package/lib/esm/features/store/objects/selection/actions/RemoveFromCollectionAction.js +13 -9
  194. package/lib/esm/features/store/objects/selection/actions/RemoveFromCollectionAction.js.map +1 -1
  195. package/lib/esm/features/store/objects/selection/actions/StartWorkflowComponent.js +14 -8
  196. package/lib/esm/features/store/objects/selection/actions/StartWorkflowComponent.js.map +1 -1
  197. package/lib/esm/features/store/objects/upload/DocumentUploadModal.js +42 -39
  198. package/lib/esm/features/store/objects/upload/DocumentUploadModal.js.map +1 -1
  199. package/lib/esm/features/store/objects/upload/useSmartFileUploadProcessing.js +4 -2
  200. package/lib/esm/features/store/objects/upload/useSmartFileUploadProcessing.js.map +1 -1
  201. package/lib/esm/features/store/objects/upload/useUploadHandler.js +9 -7
  202. package/lib/esm/features/store/objects/upload/useUploadHandler.js.map +1 -1
  203. package/lib/esm/features/store/types/ContentObjectTypesSearch.js +6 -4
  204. package/lib/esm/features/store/types/ContentObjectTypesSearch.js.map +1 -1
  205. package/lib/esm/features/store/types/ContentObjectTypesTable.js +3 -1
  206. package/lib/esm/features/store/types/ContentObjectTypesTable.js.map +1 -1
  207. package/lib/esm/features/store/types/CreateOrUpdateTypeModal.js +6 -7
  208. package/lib/esm/features/store/types/CreateOrUpdateTypeModal.js.map +1 -1
  209. package/lib/esm/features/store/types/ObjectSchemaEditor.js +9 -7
  210. package/lib/esm/features/store/types/ObjectSchemaEditor.js.map +1 -1
  211. package/lib/esm/features/store/types/SelectContentType.js +9 -7
  212. package/lib/esm/features/store/types/SelectContentType.js.map +1 -1
  213. package/lib/esm/features/store/types/SelectContentTypeModal.js +5 -2
  214. package/lib/esm/features/store/types/SelectContentTypeModal.js.map +1 -1
  215. package/lib/esm/features/store/types/TableLayoutEditor.js +6 -4
  216. package/lib/esm/features/store/types/TableLayoutEditor.js.map +1 -1
  217. package/lib/esm/features/user/UserInfo.js +40 -50
  218. package/lib/esm/features/user/UserInfo.js.map +1 -1
  219. package/lib/esm/i18n/index.js +31 -0
  220. package/lib/esm/i18n/index.js.map +1 -0
  221. package/lib/esm/i18n/instance.js +46 -0
  222. package/lib/esm/i18n/instance.js.map +1 -0
  223. package/lib/esm/i18n/locales/ar.json +696 -0
  224. package/lib/esm/i18n/locales/de.json +664 -0
  225. package/lib/esm/i18n/locales/en.json +665 -0
  226. package/lib/esm/i18n/locales/es.json +670 -0
  227. package/lib/esm/i18n/locales/fr.json +672 -0
  228. package/lib/esm/i18n/locales/it.json +670 -0
  229. package/lib/esm/i18n/locales/ja.json +664 -0
  230. package/lib/esm/i18n/locales/ko.json +664 -0
  231. package/lib/esm/i18n/locales/pt.json +670 -0
  232. package/lib/esm/i18n/locales/ru.json +680 -0
  233. package/lib/esm/i18n/locales/tr.json +664 -0
  234. package/lib/esm/i18n/locales/zh-TW.json +664 -0
  235. package/lib/esm/i18n/locales/zh.json +664 -0
  236. package/lib/esm/layout/FullHeightLayout.js +3 -0
  237. package/lib/esm/layout/FullHeightLayout.js.map +1 -1
  238. package/lib/esm/layout/Navbar.js +3 -1
  239. package/lib/esm/layout/Navbar.js.map +1 -1
  240. package/lib/esm/layout/RegionTag.js +15 -0
  241. package/lib/esm/layout/RegionTag.js.map +1 -0
  242. package/lib/esm/layout/Sidebar.js +2 -2
  243. package/lib/esm/layout/Sidebar.js.map +1 -1
  244. package/lib/esm/layout/index.js +1 -0
  245. package/lib/esm/layout/index.js.map +1 -1
  246. package/lib/esm/router/HistoryNavigator.js +1 -1
  247. package/lib/esm/router/HistoryNavigator.js.map +1 -1
  248. package/lib/esm/router/Nav.js +5 -3
  249. package/lib/esm/router/Nav.js.map +1 -1
  250. package/lib/esm/router/NestedNavigationContext.js +4 -0
  251. package/lib/esm/router/NestedNavigationContext.js.map +1 -1
  252. package/lib/esm/router/NestedRouterProvider.js +3 -1
  253. package/lib/esm/router/NestedRouterProvider.js.map +1 -1
  254. package/lib/esm/router/Router.js +21 -6
  255. package/lib/esm/router/Router.js.map +1 -1
  256. package/lib/esm/session/UserSession.js +25 -4
  257. package/lib/esm/session/UserSession.js.map +1 -1
  258. package/lib/esm/session/UserSessionProvider.js +6 -13
  259. package/lib/esm/session/UserSessionProvider.js.map +1 -1
  260. package/lib/esm/session/auth/composable.js +1 -1
  261. package/lib/esm/session/auth/composable.js.map +1 -1
  262. package/lib/esm/session/auth/domainRouting.js +17 -0
  263. package/lib/esm/session/auth/domainRouting.js.map +1 -0
  264. package/lib/esm/session/auth/firebase.js +1 -1
  265. package/lib/esm/session/auth/firebase.js.map +1 -1
  266. package/lib/esm/session/auth/useCurrentTenant.js +3 -1
  267. package/lib/esm/session/auth/useCurrentTenant.js.map +1 -1
  268. package/lib/esm/shell/SplashScreen.js +3 -7
  269. package/lib/esm/shell/SplashScreen.js.map +1 -1
  270. package/lib/esm/shell/apps/StandaloneApp.js +5 -2
  271. package/lib/esm/shell/apps/StandaloneApp.js.map +1 -1
  272. package/lib/esm/shell/login/EnterpriseSigninButton.js +5 -3
  273. package/lib/esm/shell/login/EnterpriseSigninButton.js.map +1 -1
  274. package/lib/esm/shell/login/GitHubSignInButton.js +3 -7
  275. package/lib/esm/shell/login/GitHubSignInButton.js.map +1 -1
  276. package/lib/esm/shell/login/GoogleSignInButton.js +3 -1
  277. package/lib/esm/shell/login/GoogleSignInButton.js.map +1 -1
  278. package/lib/esm/shell/login/InviteAcceptModal.js +5 -2
  279. package/lib/esm/shell/login/InviteAcceptModal.js.map +1 -1
  280. package/lib/esm/shell/login/MicrosoftSigninButton.js +4 -6
  281. package/lib/esm/shell/login/MicrosoftSigninButton.js.map +1 -1
  282. package/lib/esm/shell/login/SigninScreen.js +6 -2
  283. package/lib/esm/shell/login/SigninScreen.js.map +1 -1
  284. package/lib/esm/shell/login/SignupForm.js +36 -34
  285. package/lib/esm/shell/login/SignupForm.js.map +1 -1
  286. package/lib/esm/shell/login/TerminalLogin.js +28 -21
  287. package/lib/esm/shell/login/TerminalLogin.js.map +1 -1
  288. package/lib/esm/shell/login/UserInfo.js +6 -4
  289. package/lib/esm/shell/login/UserInfo.js.map +1 -1
  290. package/lib/esm/shell/login/UserSessionMenu.js +3 -4
  291. package/lib/esm/shell/login/UserSessionMenu.js.map +1 -1
  292. package/lib/esm/widgets/index.js +0 -1
  293. package/lib/esm/widgets/index.js.map +1 -1
  294. package/lib/esm/widgets/json-view/JSONCode.js +1 -1
  295. package/lib/esm/widgets/json-view/JSONCode.js.map +1 -1
  296. package/lib/esm/widgets/json-view/JSONDisplay.js +6 -2
  297. package/lib/esm/widgets/json-view/JSONDisplay.js.map +1 -1
  298. package/lib/esm/widgets/json-view/JSONSwitcher.js +6 -0
  299. package/lib/esm/widgets/json-view/JSONSwitcher.js.map +1 -0
  300. package/lib/esm/widgets/json-view/JSONView.js +1 -1
  301. package/lib/esm/widgets/json-view/JSONView.js.map +1 -1
  302. package/lib/esm/widgets/json-view/index.js +1 -0
  303. package/lib/esm/widgets/json-view/index.js.map +1 -1
  304. package/lib/esm/widgets/markdown/ArtifactContentRenderer.js +6 -5
  305. package/lib/esm/widgets/markdown/ArtifactContentRenderer.js.map +1 -1
  306. package/lib/esm/widgets/markdown/CodeBlockContext.js +11 -0
  307. package/lib/esm/widgets/markdown/CodeBlockContext.js.map +1 -0
  308. package/lib/esm/widgets/markdown/MarkdownRenderer.js +11 -10
  309. package/lib/esm/widgets/markdown/MarkdownRenderer.js.map +1 -1
  310. package/lib/esm/widgets/markdown/codeBlockHandlers.js +11 -12
  311. package/lib/esm/widgets/markdown/codeBlockHandlers.js.map +1 -1
  312. package/lib/esm/widgets/markdown/index.js +10 -9
  313. package/lib/esm/widgets/markdown/index.js.map +1 -1
  314. package/lib/esm/widgets/markdown/remarkDirectiveHandler.js +0 -1
  315. package/lib/esm/widgets/markdown/remarkDirectiveHandler.js.map +1 -1
  316. package/lib/esm/widgets/schema-editor/ManagedSchema.js +6 -5
  317. package/lib/esm/widgets/schema-editor/ManagedSchema.js.map +1 -1
  318. package/lib/esm/widgets/schema-editor/editor/PropertyEditor.js +7 -3
  319. package/lib/esm/widgets/schema-editor/editor/PropertyEditor.js.map +1 -1
  320. package/lib/esm/widgets/schema-editor/editor/SchemaEditor.js +3 -1
  321. package/lib/esm/widgets/schema-editor/editor/SchemaEditor.js.map +1 -1
  322. package/lib/esm/widgets/upload/DropZone.js +9 -11
  323. package/lib/esm/widgets/upload/DropZone.js.map +1 -1
  324. package/lib/esm/widgets/upload/UploadResultCategory.js +3 -1
  325. package/lib/esm/widgets/upload/UploadResultCategory.js.map +1 -1
  326. package/lib/esm/widgets/upload/UploadSummary.js +3 -1
  327. package/lib/esm/widgets/upload/UploadSummary.js.map +1 -1
  328. package/lib/tsconfig.tsbuildinfo +1 -1
  329. package/lib/types/core/components/SelectList.d.ts.map +1 -1
  330. package/lib/types/core/components/SidePanel.d.ts +4 -2
  331. package/lib/types/core/components/SidePanel.d.ts.map +1 -1
  332. package/lib/types/core/components/index.d.ts +0 -5
  333. package/lib/types/core/components/index.d.ts.map +1 -1
  334. package/lib/types/core/components/shadcn/badge.d.ts +2 -2
  335. package/lib/types/core/components/shadcn/breadcrumb.d.ts +1 -1
  336. package/lib/types/core/components/shadcn/breadcrumb.d.ts.map +1 -1
  337. package/lib/types/core/components/shadcn/button.d.ts.map +1 -1
  338. package/lib/types/core/components/shadcn/collaspible.d.ts +6 -0
  339. package/lib/types/core/components/shadcn/collaspible.d.ts.map +1 -0
  340. package/lib/types/core/components/shadcn/dropdown.d.ts +51 -0
  341. package/lib/types/core/components/shadcn/dropdown.d.ts.map +1 -0
  342. package/lib/types/core/components/shadcn/filters/comboBox/DateCombobox.d.ts.map +1 -1
  343. package/lib/types/core/components/shadcn/filters/comboBox/SelectCombobox.d.ts.map +1 -1
  344. package/lib/types/core/components/shadcn/filters/filter/dateFilter.d.ts.map +1 -1
  345. package/lib/types/core/components/shadcn/filters/filterBar.d.ts.map +1 -1
  346. package/lib/types/core/components/shadcn/index.d.ts +4 -0
  347. package/lib/types/core/components/shadcn/index.d.ts.map +1 -1
  348. package/lib/types/core/components/shadcn/input.d.ts +1 -1
  349. package/lib/types/core/components/shadcn/modal/ConfirmModal.d.ts +2 -1
  350. package/lib/types/core/components/shadcn/modal/ConfirmModal.d.ts.map +1 -1
  351. package/lib/types/core/components/shadcn/modal/DeleteModal.d.ts.map +1 -1
  352. package/lib/types/core/components/shadcn/popover.d.ts +11 -3
  353. package/lib/types/core/components/shadcn/popover.d.ts.map +1 -1
  354. package/lib/types/core/components/shadcn/radioGroup.d.ts +26 -0
  355. package/lib/types/core/components/shadcn/radioGroup.d.ts.map +1 -0
  356. package/lib/types/core/components/shadcn/switch.d.ts +12 -0
  357. package/lib/types/core/components/shadcn/switch.d.ts.map +1 -0
  358. package/lib/types/core/components/shadcn/tabs.d.ts +4 -2
  359. package/lib/types/core/components/shadcn/tabs.d.ts.map +1 -1
  360. package/lib/types/core/components/shadcn/theme/ThemeSwitcher.d.ts +3 -2
  361. package/lib/types/core/components/shadcn/theme/ThemeSwitcher.d.ts.map +1 -1
  362. package/lib/types/core/components/toast/NotificationPanel.d.ts.map +1 -1
  363. package/lib/types/core/hooks/PortalContainerProvider.d.ts +1 -0
  364. package/lib/types/core/hooks/PortalContainerProvider.d.ts.map +1 -1
  365. package/lib/types/env/index.d.ts +12 -3
  366. package/lib/types/env/index.d.ts.map +1 -1
  367. package/lib/types/features/agent/PayloadBuilder.d.ts +31 -3
  368. package/lib/types/features/agent/PayloadBuilder.d.ts.map +1 -1
  369. package/lib/types/features/agent/chat/AgentRightPanel.d.ts +50 -0
  370. package/lib/types/features/agent/chat/AgentRightPanel.d.ts.map +1 -0
  371. package/lib/types/features/agent/chat/ArtifactsTab.d.ts +9 -0
  372. package/lib/types/features/agent/chat/ArtifactsTab.d.ts.map +1 -0
  373. package/lib/types/features/agent/chat/AskUserWidget.d.ts.map +1 -1
  374. package/lib/types/features/agent/chat/DocumentPanel.d.ts.map +1 -1
  375. package/lib/types/features/agent/chat/ImageLightbox.d.ts.map +1 -1
  376. package/lib/types/features/agent/chat/ModernAgentConversation.d.ts +22 -9
  377. package/lib/types/features/agent/chat/ModernAgentConversation.d.ts.map +1 -1
  378. package/lib/types/features/agent/chat/ModernAgentOutput/AllMessagesMixed.d.ts +3 -1
  379. package/lib/types/features/agent/chat/ModernAgentOutput/AllMessagesMixed.d.ts.map +1 -1
  380. package/lib/types/features/agent/chat/ModernAgentOutput/BatchProgressPanel.d.ts.map +1 -1
  381. package/lib/types/features/agent/chat/ModernAgentOutput/Header.d.ts +13 -4
  382. package/lib/types/features/agent/chat/ModernAgentOutput/Header.d.ts.map +1 -1
  383. package/lib/types/features/agent/chat/ModernAgentOutput/InlineSlidingPlanPanel.d.ts +1 -1
  384. package/lib/types/features/agent/chat/ModernAgentOutput/InlineSlidingPlanPanel.d.ts.map +1 -1
  385. package/lib/types/features/agent/chat/ModernAgentOutput/MessageInput.d.ts.map +1 -1
  386. package/lib/types/features/agent/chat/ModernAgentOutput/MessageItem.d.ts.map +1 -1
  387. package/lib/types/features/agent/chat/ModernAgentOutput/PlanPanel.d.ts.map +1 -1
  388. package/lib/types/features/agent/chat/ModernAgentOutput/SlidingPlanPanel.d.ts.map +1 -1
  389. package/lib/types/features/agent/chat/ModernAgentOutput/StreamingMessage.d.ts +3 -1
  390. package/lib/types/features/agent/chat/ModernAgentOutput/StreamingMessage.d.ts.map +1 -1
  391. package/lib/types/features/agent/chat/ModernAgentOutput/ToolCallGroup.d.ts +5 -1
  392. package/lib/types/features/agent/chat/ModernAgentOutput/ToolCallGroup.d.ts.map +1 -1
  393. package/lib/types/features/agent/chat/ModernAgentOutput/WorkstreamTabs.d.ts.map +1 -1
  394. package/lib/types/features/agent/chat/ModernAgentOutput/utils.d.ts +16 -1
  395. package/lib/types/features/agent/chat/ModernAgentOutput/utils.d.ts.map +1 -1
  396. package/lib/types/features/agent/chat/SlidingThinkingIndicator.d.ts.map +1 -1
  397. package/lib/types/features/agent/chat/VegaLiteChart.d.ts.map +1 -1
  398. package/lib/types/features/agent/chat/hooks/useAgentPlans.d.ts.map +1 -1
  399. package/lib/types/features/agent/chat/hooks/useAgentStream.d.ts +5 -3
  400. package/lib/types/features/agent/chat/hooks/useAgentStream.d.ts.map +1 -1
  401. package/lib/types/features/agent/chat/hooks/useArtifacts.d.ts +18 -0
  402. package/lib/types/features/agent/chat/hooks/useArtifacts.d.ts.map +1 -0
  403. package/lib/types/features/agent/chat/hooks/useDocumentPanel.d.ts.map +1 -1
  404. package/lib/types/features/agent/chat/hooks/useFileProcessing.d.ts +4 -4
  405. package/lib/types/features/agent/chat/hooks/useFileProcessing.d.ts.map +1 -1
  406. package/lib/types/features/agent/chat/types/document.d.ts +2 -0
  407. package/lib/types/features/agent/chat/types/document.d.ts.map +1 -1
  408. package/lib/types/features/errors/PanelErrorBoundary.d.ts.map +1 -1
  409. package/lib/types/features/facets/AgentRunnerFacetsNav.d.ts +2 -1
  410. package/lib/types/features/facets/AgentRunnerFacetsNav.d.ts.map +1 -1
  411. package/lib/types/features/facets/RunsFacetsNav.d.ts.map +1 -1
  412. package/lib/types/features/facets/index.d.ts +1 -1
  413. package/lib/types/features/facets/index.d.ts.map +1 -1
  414. package/lib/types/features/layout/GenericPageNavHeader.d.ts +2 -2
  415. package/lib/types/features/layout/GenericPageNavHeader.d.ts.map +1 -1
  416. package/lib/types/features/layout/NotFoundView.d.ts.map +1 -1
  417. package/lib/types/features/magic-pdf/AnnotatedImageSlider.d.ts.map +1 -1
  418. package/lib/types/features/magic-pdf/DownloadPopover.d.ts.map +1 -1
  419. package/lib/types/features/magic-pdf/MagicPdfView.d.ts.map +1 -1
  420. package/lib/types/features/pdf-viewer/PdfPageSlider.d.ts.map +1 -1
  421. package/lib/types/features/pdf-viewer/SimplePdfViewer.d.ts.map +1 -1
  422. package/lib/types/features/permissions/UserPermissionsProvider.d.ts.map +1 -1
  423. package/lib/types/features/store/collections/BrowseCollectionView.d.ts.map +1 -1
  424. package/lib/types/features/store/collections/CollectionsTable.d.ts +4 -0
  425. package/lib/types/features/store/collections/CollectionsTable.d.ts.map +1 -1
  426. package/lib/types/features/store/collections/CreateCollection.d.ts.map +1 -1
  427. package/lib/types/features/store/collections/EditCollectionView.d.ts.map +1 -1
  428. package/lib/types/features/store/collections/SelectCollection.d.ts.map +1 -1
  429. package/lib/types/features/store/collections/SharedPropsEditor.d.ts.map +1 -1
  430. package/lib/types/features/store/collections/SyncMemberHeadsToggle.d.ts.map +1 -1
  431. package/lib/types/features/store/objects/DocumentPreviewPanel.d.ts.map +1 -1
  432. package/lib/types/features/store/objects/DocumentSearchResults.d.ts.map +1 -1
  433. package/lib/types/features/store/objects/DocumentTable.d.ts.map +1 -1
  434. package/lib/types/features/store/objects/ExportPropertiesModal.d.ts.map +1 -1
  435. package/lib/types/features/store/objects/components/ContentDispositionButton.d.ts.map +1 -1
  436. package/lib/types/features/store/objects/components/ContentOverview.d.ts.map +1 -1
  437. package/lib/types/features/store/objects/components/DocumentIcon.d.ts +2 -1
  438. package/lib/types/features/store/objects/components/DocumentIcon.d.ts.map +1 -1
  439. package/lib/types/features/store/objects/components/PropertiesEditorModal.d.ts.map +1 -1
  440. package/lib/types/features/store/objects/components/SaveVersionConfirmModal.d.ts.map +1 -1
  441. package/lib/types/features/store/objects/components/SelectDocument.d.ts +3 -1
  442. package/lib/types/features/store/objects/components/SelectDocument.d.ts.map +1 -1
  443. package/lib/types/features/store/objects/components/TextEditorPanel.d.ts +10 -0
  444. package/lib/types/features/store/objects/components/TextEditorPanel.d.ts.map +1 -0
  445. package/lib/types/features/store/objects/components/VectorSearchWidget.d.ts.map +1 -1
  446. package/lib/types/features/store/objects/components/useContentPanelHooks.d.ts.map +1 -1
  447. package/lib/types/features/store/objects/components/useDownloadFile.d.ts.map +1 -1
  448. package/lib/types/features/store/objects/layout/documentLayout.d.ts +3 -2
  449. package/lib/types/features/store/objects/layout/documentLayout.d.ts.map +1 -1
  450. package/lib/types/features/store/objects/layout/renderers.d.ts.map +1 -1
  451. package/lib/types/features/store/objects/search/DocumentSearchContext.d.ts.map +1 -1
  452. package/lib/types/features/store/objects/search/DocumentSearchProvider.d.ts.map +1 -1
  453. package/lib/types/features/store/objects/selection/ObjectsActionContext.d.ts +3 -20
  454. package/lib/types/features/store/objects/selection/ObjectsActionContext.d.ts.map +1 -1
  455. package/lib/types/features/store/objects/selection/ObjectsActionContextClass.d.ts +16 -0
  456. package/lib/types/features/store/objects/selection/ObjectsActionContextClass.d.ts.map +1 -0
  457. package/lib/types/features/store/objects/selection/ObjectsActionHooks.d.ts +7 -0
  458. package/lib/types/features/store/objects/selection/ObjectsActionHooks.d.ts.map +1 -0
  459. package/lib/types/features/store/objects/selection/ObjectsActionSpec.d.ts +4 -1
  460. package/lib/types/features/store/objects/selection/ObjectsActionSpec.d.ts.map +1 -1
  461. package/lib/types/features/store/objects/selection/SelectionActions.d.ts +6 -1
  462. package/lib/types/features/store/objects/selection/SelectionActions.d.ts.map +1 -1
  463. package/lib/types/features/store/objects/selection/actions/AddToCollectionAction.d.ts.map +1 -1
  464. package/lib/types/features/store/objects/selection/actions/ChangeTypeAction.d.ts.map +1 -1
  465. package/lib/types/features/store/objects/selection/actions/ConfirmAction.d.ts +1 -1
  466. package/lib/types/features/store/objects/selection/actions/ConfirmAction.d.ts.map +1 -1
  467. package/lib/types/features/store/objects/selection/actions/DeleteObjectsAction.d.ts.map +1 -1
  468. package/lib/types/features/store/objects/selection/actions/ExportPropertiesAction.d.ts.map +1 -1
  469. package/lib/types/features/store/objects/selection/actions/RemoveFromCollectionAction.d.ts.map +1 -1
  470. package/lib/types/features/store/objects/selection/actions/StartWorkflowComponent.d.ts.map +1 -1
  471. package/lib/types/features/store/objects/upload/DocumentUploadModal.d.ts.map +1 -1
  472. package/lib/types/features/store/objects/upload/useSmartFileUploadProcessing.d.ts.map +1 -1
  473. package/lib/types/features/store/objects/upload/useUploadHandler.d.ts.map +1 -1
  474. package/lib/types/features/store/types/ContentObjectTypesSearch.d.ts.map +1 -1
  475. package/lib/types/features/store/types/ContentObjectTypesTable.d.ts.map +1 -1
  476. package/lib/types/features/store/types/CreateOrUpdateTypeModal.d.ts +2 -1
  477. package/lib/types/features/store/types/CreateOrUpdateTypeModal.d.ts.map +1 -1
  478. package/lib/types/features/store/types/ObjectSchemaEditor.d.ts.map +1 -1
  479. package/lib/types/features/store/types/SelectContentType.d.ts.map +1 -1
  480. package/lib/types/features/store/types/SelectContentTypeModal.d.ts.map +1 -1
  481. package/lib/types/features/store/types/TableLayoutEditor.d.ts.map +1 -1
  482. package/lib/types/features/user/UserInfo.d.ts +2 -2
  483. package/lib/types/features/user/UserInfo.d.ts.map +1 -1
  484. package/lib/types/i18n/index.d.ts +14 -0
  485. package/lib/types/i18n/index.d.ts.map +1 -0
  486. package/lib/types/i18n/instance.d.ts +5 -0
  487. package/lib/types/i18n/instance.d.ts.map +1 -0
  488. package/lib/types/layout/FullHeightLayout.d.ts +3 -0
  489. package/lib/types/layout/FullHeightLayout.d.ts.map +1 -1
  490. package/lib/types/layout/Navbar.d.ts.map +1 -1
  491. package/lib/types/layout/RegionTag.d.ts +4 -0
  492. package/lib/types/layout/RegionTag.d.ts.map +1 -0
  493. package/lib/types/layout/Sidebar.d.ts +2 -1
  494. package/lib/types/layout/Sidebar.d.ts.map +1 -1
  495. package/lib/types/layout/index.d.ts +1 -0
  496. package/lib/types/layout/index.d.ts.map +1 -1
  497. package/lib/types/router/Nav.d.ts +5 -1
  498. package/lib/types/router/Nav.d.ts.map +1 -1
  499. package/lib/types/router/NestedNavigationContext.d.ts.map +1 -1
  500. package/lib/types/router/NestedRouterProvider.d.ts.map +1 -1
  501. package/lib/types/router/Router.d.ts +2 -0
  502. package/lib/types/router/Router.d.ts.map +1 -1
  503. package/lib/types/session/UserSession.d.ts +1 -0
  504. package/lib/types/session/UserSession.d.ts.map +1 -1
  505. package/lib/types/session/UserSessionProvider.d.ts +0 -1
  506. package/lib/types/session/UserSessionProvider.d.ts.map +1 -1
  507. package/lib/types/session/auth/domainRouting.d.ts +3 -0
  508. package/lib/types/session/auth/domainRouting.d.ts.map +1 -0
  509. package/lib/types/session/auth/useCurrentTenant.d.ts.map +1 -1
  510. package/lib/types/shell/SplashScreen.d.ts.map +1 -1
  511. package/lib/types/shell/apps/StandaloneApp.d.ts.map +1 -1
  512. package/lib/types/shell/login/EnterpriseSigninButton.d.ts.map +1 -1
  513. package/lib/types/shell/login/GitHubSignInButton.d.ts.map +1 -1
  514. package/lib/types/shell/login/GoogleSignInButton.d.ts.map +1 -1
  515. package/lib/types/shell/login/InviteAcceptModal.d.ts.map +1 -1
  516. package/lib/types/shell/login/MicrosoftSigninButton.d.ts +1 -1
  517. package/lib/types/shell/login/MicrosoftSigninButton.d.ts.map +1 -1
  518. package/lib/types/shell/login/SigninScreen.d.ts.map +1 -1
  519. package/lib/types/shell/login/SignupForm.d.ts.map +1 -1
  520. package/lib/types/shell/login/TerminalLogin.d.ts.map +1 -1
  521. package/lib/types/shell/login/UserInfo.d.ts.map +1 -1
  522. package/lib/types/shell/login/UserSessionMenu.d.ts.map +1 -1
  523. package/lib/types/widgets/index.d.ts +0 -1
  524. package/lib/types/widgets/index.d.ts.map +1 -1
  525. package/lib/types/widgets/json-view/JSONDisplay.d.ts.map +1 -1
  526. package/lib/types/widgets/json-view/JSONSwitcher.d.ts +6 -0
  527. package/lib/types/widgets/json-view/JSONSwitcher.d.ts.map +1 -0
  528. package/lib/types/widgets/json-view/index.d.ts +1 -0
  529. package/lib/types/widgets/json-view/index.d.ts.map +1 -1
  530. package/lib/types/widgets/markdown/ArtifactContentRenderer.d.ts.map +1 -1
  531. package/lib/types/widgets/markdown/CodeBlockContext.d.ts +21 -0
  532. package/lib/types/widgets/markdown/CodeBlockContext.d.ts.map +1 -0
  533. package/lib/types/widgets/markdown/MarkdownRenderer.d.ts.map +1 -1
  534. package/lib/types/widgets/markdown/codeBlockHandlers.d.ts +0 -12
  535. package/lib/types/widgets/markdown/codeBlockHandlers.d.ts.map +1 -1
  536. package/lib/types/widgets/markdown/index.d.ts +10 -9
  537. package/lib/types/widgets/markdown/index.d.ts.map +1 -1
  538. package/lib/types/widgets/schema-editor/ManagedSchema.d.ts +1 -1
  539. package/lib/types/widgets/schema-editor/ManagedSchema.d.ts.map +1 -1
  540. package/lib/types/widgets/schema-editor/editor/PropertyEditor.d.ts.map +1 -1
  541. package/lib/types/widgets/schema-editor/editor/SchemaEditor.d.ts.map +1 -1
  542. package/lib/types/widgets/upload/DropZone.d.ts.map +1 -1
  543. package/lib/types/widgets/upload/UploadResultCategory.d.ts.map +1 -1
  544. package/lib/types/widgets/upload/UploadSummary.d.ts.map +1 -1
  545. package/lib/vertesia-ui-core.js +1 -1
  546. package/lib/vertesia-ui-core.js.map +1 -1
  547. package/lib/vertesia-ui-env.js +1 -1
  548. package/lib/vertesia-ui-env.js.map +1 -1
  549. package/lib/vertesia-ui-features.js +1 -1
  550. package/lib/vertesia-ui-features.js.map +1 -1
  551. package/lib/vertesia-ui-i18n.js +2 -0
  552. package/lib/vertesia-ui-i18n.js.map +1 -0
  553. package/lib/vertesia-ui-layout.js +1 -1
  554. package/lib/vertesia-ui-layout.js.map +1 -1
  555. package/lib/vertesia-ui-router.js +1 -1
  556. package/lib/vertesia-ui-router.js.map +1 -1
  557. package/lib/vertesia-ui-session.js +1 -1
  558. package/lib/vertesia-ui-session.js.map +1 -1
  559. package/lib/vertesia-ui-shell.js +1 -1
  560. package/lib/vertesia-ui-shell.js.map +1 -1
  561. package/lib/vertesia-ui-widgets.js +1 -1
  562. package/lib/vertesia-ui-widgets.js.map +1 -1
  563. package/package.json +36 -22
  564. package/src/core/components/SelectList.tsx +3 -1
  565. package/src/core/components/SidePanel.tsx +5 -4
  566. package/src/core/components/index.ts +0 -5
  567. package/src/core/components/shadcn/breadcrumb.tsx +16 -9
  568. package/src/core/components/shadcn/button.tsx +5 -3
  569. package/src/core/components/shadcn/collaspible.tsx +33 -0
  570. package/src/core/components/shadcn/dropdown.tsx +325 -0
  571. package/src/core/components/shadcn/filters/comboBox/DateCombobox.tsx +3 -1
  572. package/src/core/components/shadcn/filters/comboBox/SelectCombobox.tsx +3 -1
  573. package/src/core/components/shadcn/filters/comboBox/StringListCombobox.tsx +1 -1
  574. package/src/core/components/shadcn/filters/filter/StringListFilter.tsx +1 -1
  575. package/src/core/components/shadcn/filters/filter/dateFilter.tsx +5 -3
  576. package/src/core/components/shadcn/filters/filterBar.tsx +8 -5
  577. package/src/core/components/shadcn/index.ts +5 -1
  578. package/src/core/components/shadcn/modal/ConfirmModal.tsx +7 -3
  579. package/src/core/components/shadcn/modal/DeleteModal.tsx +5 -3
  580. package/src/core/components/shadcn/popover.tsx +12 -7
  581. package/src/core/components/shadcn/radioGroup.tsx +100 -0
  582. package/src/core/components/shadcn/switch.tsx +60 -0
  583. package/src/core/components/shadcn/tabs.tsx +29 -27
  584. package/src/core/components/shadcn/theme/ThemeSwitcher.tsx +13 -9
  585. package/src/core/components/toast/NotificationPanel.tsx +38 -44
  586. package/src/core/hooks/PortalContainerProvider.tsx +11 -3
  587. package/src/env/index.ts +24 -13
  588. package/src/features/agent/PayloadBuilder.tsx +100 -13
  589. package/src/features/agent/chat/AgentRightPanel.tsx +424 -0
  590. package/src/features/agent/chat/ArtifactsTab.tsx +197 -0
  591. package/src/features/agent/chat/AskUserWidget.tsx +14 -8
  592. package/src/features/agent/chat/DocumentPanel.tsx +24 -9
  593. package/src/features/agent/chat/ImageLightbox.tsx +6 -3
  594. package/src/features/agent/chat/ModernAgentConversation.tsx +460 -279
  595. package/src/features/agent/chat/ModernAgentOutput/AllMessagesMixed.tsx +151 -55
  596. package/src/features/agent/chat/ModernAgentOutput/BatchProgressPanel.tsx +6 -4
  597. package/src/features/agent/chat/ModernAgentOutput/Header.tsx +183 -105
  598. package/src/features/agent/chat/ModernAgentOutput/InlineSlidingPlanPanel.tsx +21 -31
  599. package/src/features/agent/chat/ModernAgentOutput/MessageInput.tsx +119 -114
  600. package/src/features/agent/chat/ModernAgentOutput/MessageItem.tsx +26 -9
  601. package/src/features/agent/chat/ModernAgentOutput/PlanPanel.tsx +9 -7
  602. package/src/features/agent/chat/ModernAgentOutput/SlidingPlanPanel.tsx +15 -13
  603. package/src/features/agent/chat/ModernAgentOutput/StreamingMessage.tsx +8 -3
  604. package/src/features/agent/chat/ModernAgentOutput/ToolCallGroup.tsx +149 -49
  605. package/src/features/agent/chat/ModernAgentOutput/WorkstreamTabs.tsx +9 -5
  606. package/src/features/agent/chat/ModernAgentOutput/utils.test.ts +229 -0
  607. package/src/features/agent/chat/ModernAgentOutput/utils.ts +202 -97
  608. package/src/features/agent/chat/SlidingThinkingIndicator.tsx +5 -3
  609. package/src/features/agent/chat/VegaLiteChart.tsx +20 -8
  610. package/src/features/agent/chat/hooks/useAgentPlans.ts +3 -9
  611. package/src/features/agent/chat/hooks/useAgentStream.ts +86 -19
  612. package/src/features/agent/chat/hooks/useArtifacts.ts +151 -0
  613. package/src/features/agent/chat/hooks/useDocumentPanel.ts +65 -5
  614. package/src/features/agent/chat/hooks/useFileProcessing.ts +14 -13
  615. package/src/features/agent/chat/types/document.ts +2 -0
  616. package/src/features/errors/PanelErrorBoundary.tsx +5 -3
  617. package/src/features/facets/AgentRunnerFacetsNav.tsx +54 -35
  618. package/src/features/facets/RunsFacetsNav.tsx +15 -7
  619. package/src/features/facets/index.ts +1 -1
  620. package/src/features/layout/GenericPageNavHeader.tsx +64 -41
  621. package/src/features/layout/NotFoundView.tsx +4 -1
  622. package/src/features/magic-pdf/AnnotatedImageSlider.tsx +12 -8
  623. package/src/features/magic-pdf/DownloadPopover.tsx +11 -10
  624. package/src/features/magic-pdf/MagicPdfView.tsx +10 -7
  625. package/src/features/pdf-viewer/PdfPageSlider.tsx +10 -6
  626. package/src/features/pdf-viewer/SimplePdfViewer.tsx +5 -3
  627. package/src/features/permissions/UserPermissionsProvider.tsx +3 -1
  628. package/src/features/store/collections/BrowseCollectionView.tsx +11 -1
  629. package/src/features/store/collections/CollectionsTable.tsx +20 -12
  630. package/src/features/store/collections/CreateCollection.tsx +14 -11
  631. package/src/features/store/collections/EditCollectionView.tsx +31 -28
  632. package/src/features/store/collections/SelectCollection.tsx +50 -14
  633. package/src/features/store/collections/SharedPropsEditor.tsx +7 -5
  634. package/src/features/store/collections/SyncMemberHeadsToggle.tsx +6 -4
  635. package/src/features/store/objects/DocumentPreviewPanel.tsx +30 -28
  636. package/src/features/store/objects/DocumentSearchResults.tsx +31 -21
  637. package/src/features/store/objects/DocumentTable.tsx +11 -5
  638. package/src/features/store/objects/ExportPropertiesModal.tsx +8 -5
  639. package/src/features/store/objects/components/ContentDispositionButton.tsx +3 -1
  640. package/src/features/store/objects/components/ContentOverview.tsx +96 -50
  641. package/src/features/store/objects/components/DocumentIcon.tsx +11 -3
  642. package/src/features/store/objects/components/PropertiesEditorModal.tsx +14 -12
  643. package/src/features/store/objects/components/SaveVersionConfirmModal.tsx +24 -37
  644. package/src/features/store/objects/components/SelectDocument.tsx +15 -6
  645. package/src/features/store/objects/components/TextEditorPanel.tsx +143 -0
  646. package/src/features/store/objects/components/VectorSearchWidget.tsx +11 -8
  647. package/src/features/store/objects/components/useContentPanelHooks.ts +4 -2
  648. package/src/features/store/objects/components/useDownloadFile.ts +12 -10
  649. package/src/features/store/objects/layout/documentLayout.tsx +16 -6
  650. package/src/features/store/objects/layout/renderers.tsx +27 -1
  651. package/src/features/store/objects/search/DocumentSearchContext.ts +3 -2
  652. package/src/features/store/objects/search/DocumentSearchProvider.tsx +3 -0
  653. package/src/features/store/objects/selection/ObjectsActionContext.tsx +26 -128
  654. package/src/features/store/objects/selection/ObjectsActionContextClass.ts +59 -0
  655. package/src/features/store/objects/selection/ObjectsActionHooks.ts +33 -0
  656. package/src/features/store/objects/selection/ObjectsActionSpec.ts +4 -1
  657. package/src/features/store/objects/selection/SelectionActions.tsx +14 -6
  658. package/src/features/store/objects/selection/actions/AddToCollectionAction.tsx +19 -14
  659. package/src/features/store/objects/selection/actions/ChangeTypeAction.tsx +9 -5
  660. package/src/features/store/objects/selection/actions/ConfirmAction.tsx +4 -3
  661. package/src/features/store/objects/selection/actions/DeleteObjectsAction.tsx +24 -23
  662. package/src/features/store/objects/selection/actions/ExportPropertiesAction.tsx +10 -5
  663. package/src/features/store/objects/selection/actions/RemoveFromCollectionAction.tsx +13 -9
  664. package/src/features/store/objects/selection/actions/StartWorkflowComponent.tsx +14 -8
  665. package/src/features/store/objects/upload/DocumentUploadModal.tsx +56 -55
  666. package/src/features/store/objects/upload/useSmartFileUploadProcessing.ts +4 -2
  667. package/src/features/store/objects/upload/useUploadHandler.ts +9 -7
  668. package/src/features/store/types/ContentObjectTypesSearch.tsx +10 -8
  669. package/src/features/store/types/ContentObjectTypesTable.tsx +6 -4
  670. package/src/features/store/types/CreateOrUpdateTypeModal.tsx +11 -12
  671. package/src/features/store/types/ObjectSchemaEditor.tsx +11 -9
  672. package/src/features/store/types/SelectContentType.tsx +15 -13
  673. package/src/features/store/types/SelectContentTypeModal.tsx +16 -13
  674. package/src/features/store/types/TableLayoutEditor.tsx +16 -12
  675. package/src/features/user/UserInfo.tsx +47 -56
  676. package/src/i18n/index.tsx +45 -0
  677. package/src/i18n/instance.ts +49 -0
  678. package/src/i18n/locales/ar.json +696 -0
  679. package/src/i18n/locales/de.json +664 -0
  680. package/src/i18n/locales/en.json +665 -0
  681. package/src/i18n/locales/es.json +670 -0
  682. package/src/i18n/locales/fr.json +672 -0
  683. package/src/i18n/locales/it.json +670 -0
  684. package/src/i18n/locales/ja.json +664 -0
  685. package/src/i18n/locales/ko.json +664 -0
  686. package/src/i18n/locales/pt.json +670 -0
  687. package/src/i18n/locales/ru.json +680 -0
  688. package/src/i18n/locales/tr.json +664 -0
  689. package/src/i18n/locales/zh-TW.json +664 -0
  690. package/src/i18n/locales/zh.json +664 -0
  691. package/src/layout/FullHeightLayout.tsx +8 -0
  692. package/src/layout/Navbar.tsx +4 -2
  693. package/src/layout/RegionTag.tsx +25 -0
  694. package/src/layout/Sidebar.tsx +4 -3
  695. package/src/layout/index.ts +2 -1
  696. package/src/router/HistoryNavigator.ts +10 -10
  697. package/src/router/Nav.tsx +9 -3
  698. package/src/router/NestedNavigationContext.tsx +4 -0
  699. package/src/router/NestedRouterProvider.tsx +3 -1
  700. package/src/router/Router.tsx +23 -7
  701. package/src/session/UserSession.ts +26 -5
  702. package/src/session/UserSessionProvider.tsx +6 -14
  703. package/src/session/auth/composable.ts +1 -1
  704. package/src/session/auth/domainRouting.test.ts +110 -0
  705. package/src/session/auth/domainRouting.ts +22 -0
  706. package/src/session/auth/firebase.ts +1 -1
  707. package/src/session/auth/useCurrentTenant.ts +3 -1
  708. package/src/shell/SplashScreen.tsx +22 -26
  709. package/src/shell/apps/StandaloneApp.tsx +9 -6
  710. package/src/shell/login/EnterpriseSigninButton.tsx +6 -4
  711. package/src/shell/login/GitHubSignInButton.tsx +3 -7
  712. package/src/shell/login/GoogleSignInButton.tsx +3 -1
  713. package/src/shell/login/InviteAcceptModal.tsx +5 -2
  714. package/src/shell/login/MicrosoftSigninButton.tsx +4 -6
  715. package/src/shell/login/SigninScreen.tsx +18 -13
  716. package/src/shell/login/SignupForm.tsx +46 -46
  717. package/src/shell/login/TerminalLogin.tsx +35 -31
  718. package/src/shell/login/UserInfo.tsx +15 -13
  719. package/src/shell/login/UserSessionMenu.tsx +28 -31
  720. package/src/widgets/index.ts +0 -1
  721. package/src/widgets/json-view/JSONCode.tsx +1 -1
  722. package/src/widgets/json-view/JSONDisplay.tsx +8 -3
  723. package/src/widgets/json-view/JSONSwitcher.tsx +24 -0
  724. package/src/widgets/json-view/JSONView.tsx +1 -1
  725. package/src/widgets/json-view/index.ts +1 -0
  726. package/src/widgets/markdown/ArtifactContentRenderer.tsx +15 -7
  727. package/src/widgets/markdown/CodeBlockContext.tsx +34 -0
  728. package/src/widgets/markdown/MarkdownRenderer.tsx +14 -13
  729. package/src/widgets/markdown/codeBlockHandlers.tsx +17 -36
  730. package/src/widgets/markdown/index.ts +27 -34
  731. package/src/widgets/markdown/remarkDirectiveHandler.ts +1 -1
  732. package/src/widgets/schema-editor/ManagedSchema.ts +6 -5
  733. package/src/widgets/schema-editor/editor/PropertyEditor.tsx +7 -3
  734. package/src/widgets/schema-editor/editor/SchemaEditor.tsx +3 -1
  735. package/src/widgets/upload/DropZone.tsx +10 -13
  736. package/src/widgets/upload/UploadResultCategory.tsx +3 -1
  737. package/src/widgets/upload/UploadSummary.tsx +13 -11
  738. package/tsconfig.dist.json +1 -1
  739. package/lib/esm/core/components/Dropdown.js +0 -16
  740. package/lib/esm/core/components/Dropdown.js.map +0 -1
  741. package/lib/esm/core/components/DropdownList.js +0 -9
  742. package/lib/esm/core/components/DropdownList.js.map +0 -1
  743. package/lib/esm/core/components/RadioGroup.js +0 -34
  744. package/lib/esm/core/components/RadioGroup.js.map +0 -1
  745. package/lib/esm/core/components/SelectStack.js +0 -8
  746. package/lib/esm/core/components/SelectStack.js.map +0 -1
  747. package/lib/esm/core/components/Switch.js +0 -12
  748. package/lib/esm/core/components/Switch.js.map +0 -1
  749. package/lib/esm/widgets/popover/Popover.js +0 -73
  750. package/lib/esm/widgets/popover/Popover.js.map +0 -1
  751. package/lib/esm/widgets/popover/context.js +0 -7
  752. package/lib/esm/widgets/popover/context.js.map +0 -1
  753. package/lib/esm/widgets/popover/index.js +0 -3
  754. package/lib/esm/widgets/popover/index.js.map +0 -1
  755. package/lib/esm/widgets/popover/slots.js +0 -22
  756. package/lib/esm/widgets/popover/slots.js.map +0 -1
  757. package/lib/types/core/components/Dropdown.d.ts +0 -15
  758. package/lib/types/core/components/Dropdown.d.ts.map +0 -1
  759. package/lib/types/core/components/DropdownList.d.ts +0 -13
  760. package/lib/types/core/components/DropdownList.d.ts.map +0 -1
  761. package/lib/types/core/components/RadioGroup.d.ts +0 -26
  762. package/lib/types/core/components/RadioGroup.d.ts.map +0 -1
  763. package/lib/types/core/components/SelectStack.d.ts +0 -13
  764. package/lib/types/core/components/SelectStack.d.ts.map +0 -1
  765. package/lib/types/core/components/Switch.d.ts +0 -11
  766. package/lib/types/core/components/Switch.d.ts.map +0 -1
  767. package/lib/types/widgets/popover/Popover.d.ts +0 -38
  768. package/lib/types/widgets/popover/Popover.d.ts.map +0 -1
  769. package/lib/types/widgets/popover/context.d.ts +0 -8
  770. package/lib/types/widgets/popover/context.d.ts.map +0 -1
  771. package/lib/types/widgets/popover/index.d.ts +0 -3
  772. package/lib/types/widgets/popover/index.d.ts.map +0 -1
  773. package/lib/types/widgets/popover/slots.d.ts +0 -5
  774. package/lib/types/widgets/popover/slots.d.ts.map +0 -1
  775. package/src/core/components/Dropdown.tsx +0 -63
  776. package/src/core/components/DropdownList.tsx +0 -72
  777. package/src/core/components/RadioGroup.tsx +0 -100
  778. package/src/core/components/SelectStack.tsx +0 -63
  779. package/src/core/components/Switch.tsx +0 -30
  780. package/src/widgets/popover/Popover.tsx +0 -171
  781. package/src/widgets/popover/context.ts +0 -15
  782. package/src/widgets/popover/index.ts +0 -2
  783. package/src/widgets/popover/slots.ts +0 -24
@@ -1,10 +1,11 @@
1
1
  import React, { useCallback, useEffect, useMemo, useRef, useState } from "react";
2
2
  import { Bot, Cpu, FileTextIcon, SendIcon, UploadIcon, XIcon } from "lucide-react";
3
3
  import { useUserSession } from "@vertesia/ui/session";
4
- import { AsyncExecutionResult, VertesiaClient } from "@vertesia/client";
5
4
  import {
5
+ ActiveWorkstreamEntry,
6
6
  AgentMessage,
7
7
  AgentMessageType,
8
+ AgentRun,
8
9
  ConversationFile,
9
10
  ConversationFileRef,
10
11
  Plan,
@@ -23,13 +24,13 @@ import { ImageLightboxProvider } from "./ImageLightbox";
23
24
  import AllMessagesMixed from "./ModernAgentOutput/AllMessagesMixed";
24
25
  import Header from "./ModernAgentOutput/Header";
25
26
  import MessageInput, { UploadedFile, SelectedDocument } from "./ModernAgentOutput/MessageInput";
26
- import { getWorkstreamId } from "./ModernAgentOutput/utils";
27
+ import { getConversationUrl, getWorkstreamId } from "./ModernAgentOutput/utils";
27
28
  import { ThinkingMessages } from "./WaitingMessages";
28
- import InlineSlidingPlanPanel from "./ModernAgentOutput/InlineSlidingPlanPanel";
29
29
  import { SkillWidgetProvider } from "./SkillWidgetProvider";
30
30
  import { ArtifactUrlCacheProvider } from "./useArtifactUrlCache.js";
31
+ import { useUITranslation } from "../../../i18n/index.js";
31
32
  import { VegaLiteChart } from "./VegaLiteChart";
32
- import { DocumentPanel } from "./DocumentPanel.js";
33
+ import { AgentRightPanel, type WorkstreamInfo } from "./AgentRightPanel.js";
33
34
  import { useAgentStream } from "./hooks/useAgentStream.js";
34
35
  import { useAgentPlans } from "./hooks/useAgentPlans.js";
35
36
  import { useDocumentPanel } from "./hooks/useDocumentPanel.js";
@@ -37,7 +38,7 @@ import { useFileProcessing } from "./hooks/useFileProcessing.js";
37
38
 
38
39
  export type StartWorkflowFn = (
39
40
  initialMessage?: string,
40
- ) => Promise<{ run_id: string; workflow_id: string } | undefined>;
41
+ ) => Promise<{ agent_run_id: string } | undefined>;
41
42
 
42
43
  function printElementToPdf(sourceElement: HTMLElement, title: string): boolean {
43
44
  if (typeof window === "undefined" || typeof document === "undefined") {
@@ -84,7 +85,8 @@ function printElementToPdf(sourceElement: HTMLElement, title: string): boolean {
84
85
  }
85
86
 
86
87
  interface ModernAgentConversationProps {
87
- run?: AsyncExecutionResult | { workflow_id: string; run_id: string };
88
+ /** Stable AgentRun ID the primary identifier for all runtime operations. */
89
+ agentRunId?: string;
88
90
  title?: string;
89
91
  interactive?: boolean;
90
92
  onClose?: () => void;
@@ -96,6 +98,12 @@ interface ModernAgentConversationProps {
96
98
  placeholder?: string;
97
99
  hideUserInput?: boolean;
98
100
  resetWorkflow?: () => void;
101
+ /** Called after a restart succeeds — receives the new AgentRun for navigation */
102
+ onRestart?: (newRun: AgentRun) => void;
103
+ /** Called after a fork succeeds — receives the new AgentRun for navigation */
104
+ onFork?: (newRun: AgentRun) => void;
105
+ /** Called to show run details/internals modal */
106
+ onShowDetails?: () => void;
99
107
 
100
108
  // File upload props - passed through to MessageInput
101
109
  /** Called when files are dropped/pasted/selected */
@@ -113,6 +121,8 @@ interface ModernAgentConversationProps {
113
121
  fileUploadRef?: React.MutableRefObject<((files: File[]) => void) | null>;
114
122
  /** Called when processingFiles state changes (for external progress display) */
115
123
  onProcessingFilesChange?: (files: Map<string, ConversationFile>) => void;
124
+ /** Processing files to display in the right panel Uploads tab */
125
+ processingFiles?: Map<string, ConversationFile>;
116
126
  /** Called when plans change (for external plan panel) */
117
127
  onPlansChange?: (plans: Array<{ plan: Plan; timestamp: number }>, activePlanIndex: number) => void;
118
128
  /** Called when workstream status changes (for external plan panel) */
@@ -151,8 +161,12 @@ interface ModernAgentConversationProps {
151
161
  hidePlanPanel?: boolean;
152
162
  /** Hide workstream tabs */
153
163
  hideWorkstreamTabs?: boolean;
164
+ /** Enable or disable the internal right panel (plan/workstreams/documents/uploads) */
165
+ showRightPanel?: boolean;
154
166
  /** Hide the default file upload */
155
167
  hideFileUpload?: boolean;
168
+ /** Show the Artifacts tab in the right panel (default false) */
169
+ showArtifacts?: boolean;
156
170
  /** Hide the document preview panel that auto-opens on create_document */
157
171
  hideDocumentPanel?: boolean;
158
172
 
@@ -206,29 +220,28 @@ interface ModernAgentConversationProps {
206
220
  * @example { fundName: "Tech Growth IV", vintage: 2024, totalCommitments: 500000000 }
207
221
  */
208
222
  fusionData?: Record<string, unknown>;
223
+
224
+ /** Optional payload content to show as a "Payload" tab in the right panel */
225
+ payloadContent?: React.ReactNode;
226
+ /** Optional conversation content to show as a "Conversation" tab in the right panel */
227
+ conversationContent?: React.ReactNode;
228
+ /** When true, renders the conversation inside the right panel as a "Conversation" tab */
229
+ conversationTab?: boolean;
209
230
  }
210
231
 
211
232
  export function ModernAgentConversation(
212
233
  props: ModernAgentConversationProps,
213
234
  ) {
214
- const { run, startWorkflow } = props;
215
-
216
- if (run) {
217
- // If we have a run, convert it to AsyncExecutionResult format if needed
218
- const execRun: AsyncExecutionResult =
219
- "runId" in run
220
- ? run
221
- : {
222
- runId: run.run_id,
223
- workflowId: run.workflow_id,
224
- };
235
+ const { agentRunId, startWorkflow } = props;
236
+
237
+ if (agentRunId) {
225
238
  return (
226
239
  <SkillWidgetProvider>
227
- <ModernAgentConversationInner {...props} run={execRun} />
240
+ <ModernAgentConversationInner {...props} agentRunId={agentRunId} />
228
241
  </SkillWidgetProvider>
229
242
  );
230
243
  } else if (startWorkflow) {
231
- // If we have startWorkflow capability but no run yet
244
+ // If we have startWorkflow capability but no agentRunId yet
232
245
  return <StartWorkflowView {...props} />;
233
246
  } else {
234
247
  // Empty state
@@ -238,16 +251,17 @@ export function ModernAgentConversation(
238
251
 
239
252
  // Empty state when no agent is running
240
253
  function EmptyState() {
254
+ const { t } = useUITranslation();
241
255
  return (
242
256
  <MessageBox
243
257
  status="info"
244
258
  icon={<Bot className="size-16 text-muted mb-4" />}
245
259
  >
246
260
  <div className="text-base font-medium text-muted">
247
- No agent currently running
261
+ {t('agent.noAgentRunning')}
248
262
  </div>
249
263
  <div className="mt-3 text-sm text-muted">
250
- Select an interaction and click Start to start an agent
264
+ {t('agent.selectInteraction')}
251
265
  </div>
252
266
  </MessageBox>
253
267
  );
@@ -261,20 +275,24 @@ function StartWorkflowView({
261
275
  onClose,
262
276
  isModal = false,
263
277
  fullWidth = false,
264
- placeholder = "Type your message...",
265
- startButtonText = "Start Agent",
266
- title = "Start New Conversation",
278
+ placeholder,
279
+ startButtonText,
280
+ title,
267
281
  // Attachment callback - used to include existing document attachments in the first message
268
282
  getAttachedDocs,
269
283
  onAttachmentsSent,
270
284
  // File upload props
271
- acceptedFileTypes = ".pdf,.doc,.docx,.txt,.csv,.xlsx,.xls,.png,.jpg,.jpeg,.gif,.webp",
285
+ acceptedFileTypes,
272
286
  maxFiles = 5,
273
287
  }: ModernAgentConversationProps) {
288
+ const { t } = useUITranslation();
289
+ const resolvedPlaceholder = placeholder ?? t('agent.typeYourMessage');
290
+ const resolvedStartButtonText = startButtonText ?? t('agent.startAgent');
291
+ const resolvedTitle = title ?? t('agent.startNewConversation');
274
292
  const { client } = useUserSession();
275
293
  const [inputValue, setInputValue] = useState<string>("");
276
294
  const [isSending, setIsSending] = useState(false);
277
- const [run, setRun] = useState<AsyncExecutionResult>();
295
+ const [startedAgentRunId, setStartedAgentRunId] = useState<string | null>(null);
278
296
  const toast = useToast();
279
297
  const inputRef = useRef<HTMLTextAreaElement>(null);
280
298
  const fileInputRef = useRef<HTMLInputElement>(null);
@@ -361,7 +379,7 @@ function StartWorkflowView({
361
379
  sessionStorage.removeItem("plan-panel-shown");
362
380
 
363
381
  toast({
364
- title: stagedFiles.length > 0 ? "Starting agent and uploading files..." : "Starting agent...",
382
+ title: stagedFiles.length > 0 ? t('agent.startingAgentUploading') : t('agent.startingAgent'),
365
383
  status: "info",
366
384
  duration: 3000,
367
385
  });
@@ -388,18 +406,19 @@ function StartWorkflowView({
388
406
 
389
407
  const newRun = await startWorkflow(messageContent);
390
408
  if (newRun) {
391
- // Upload staged files to the new run's artifact space and signal workflow
409
+ const agentId = newRun.agent_run_id;
410
+
411
+ // Upload staged files to the new run's artifact space and signal agent
392
412
  const uploadedFiles: string[] = [];
393
413
  if (stagedFiles.length > 0) {
394
414
  for (const file of stagedFiles) {
395
415
  try {
396
416
  const artifactPath = `files/${file.name}`;
397
- await client.files.uploadArtifact(newRun.run_id, artifactPath, file);
417
+ await client.agents.uploadArtifact(agentId, artifactPath, file);
398
418
 
399
- // Signal workflow that file was uploaded
400
- await client.store.workflows.sendSignal(
401
- newRun.workflow_id,
402
- newRun.run_id,
419
+ // Signal agent that file was uploaded
420
+ await client.agents.sendSignal(
421
+ agentId,
403
422
  "FileUploaded",
404
423
  {
405
424
  id: `file-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`,
@@ -419,9 +438,8 @@ function StartWorkflowView({
419
438
  // Send a follow-up message to notify the agent that all files are ready
420
439
  if (uploadedFiles.length > 0) {
421
440
  try {
422
- await client.store.workflows.sendSignal(
423
- newRun.workflow_id,
424
- newRun.run_id,
441
+ await client.agents.sendSignal(
442
+ agentId,
425
443
  "UserInput",
426
444
  {
427
445
  message: `[Files Ready] All ${uploadedFiles.length} file(s) have been uploaded and are now available: ${uploadedFiles.join(', ')}. You can now process them.`,
@@ -441,23 +459,20 @@ function StartWorkflowView({
441
459
 
442
460
  // Clear attachments after successful start
443
461
  onAttachmentsSent?.();
444
- setRun({
445
- runId: newRun.run_id,
446
- workflowId: newRun.workflow_id,
447
- });
462
+ setStartedAgentRunId(agentId);
448
463
  setInputValue("");
449
464
  toast({
450
- title: "Agent started",
465
+ title: t('agent.agentStarted'),
451
466
  status: "success",
452
467
  duration: 3000,
453
468
  });
454
469
  }
455
470
  } catch (err: any) {
456
471
  toast({
457
- title: "Error starting workflow",
472
+ title: t('agent.errorStarting'),
458
473
  status: "error",
459
474
  duration: 3000,
460
- description: err instanceof Error ? err.message : "Unknown error",
475
+ description: err instanceof Error ? err.message : t('agent.unknownError'),
461
476
  });
462
477
  } finally {
463
478
  setIsSending(false);
@@ -486,11 +501,11 @@ function StartWorkflowView({
486
501
  }, [inputValue, adjustTextareaHeight]);
487
502
 
488
503
  // If a run has been started, show the conversation
489
- if (run) {
504
+ if (startedAgentRunId) {
490
505
  return (
491
506
  <ModernAgentConversationInner
492
507
  {...{ onClose, isModal, initialMessage, placeholder }}
493
- run={run}
508
+ agentRunId={startedAgentRunId}
494
509
  title={title}
495
510
  />
496
511
  );
@@ -535,7 +550,7 @@ function StartWorkflowView({
535
550
  <Cpu className="size-3.5 text-muted" />
536
551
  </div>
537
552
  <span className="font-medium text-sm text-foreground">
538
- {title}
553
+ {resolvedTitle}
539
554
  </span>
540
555
  </div>
541
556
 
@@ -545,7 +560,7 @@ function StartWorkflowView({
545
560
  size="xs"
546
561
  variant="ghost"
547
562
  onClick={onClose}
548
- title="Close"
563
+ title={t('agent.close')}
549
564
  className="text-muted hover:text-foreground"
550
565
  >
551
566
  <XIcon className="size-4" />
@@ -564,11 +579,10 @@ function StartWorkflowView({
564
579
 
565
580
  <div className="bg-card p-4 border-l-2 border-info">
566
581
  <div className="text-base text-foreground font-medium">
567
- Enter a message to start a conversation
582
+ {t('agent.enterMessage')}
568
583
  </div>
569
584
  <div className="mt-3 text-sm text-muted">
570
- Type your question below and press Enter or click {startButtonText}{" "}
571
- to begin
585
+ {t('agent.typeQuestionBelow', { buttonText: resolvedStartButtonText })}
572
586
  </div>
573
587
  </div>
574
588
  </div>
@@ -586,7 +600,7 @@ function StartWorkflowView({
586
600
  >
587
601
  <FileTextIcon className="size-3.5" />
588
602
  <span className="max-w-[120px] truncate">{file.name}</span>
589
- <span className="text-xs opacity-70">Staged</span>
603
+ <span className="text-xs opacity-70">{t('agent.staged')}</span>
590
604
  <button
591
605
  onClick={() => removeStagedFile(index)}
592
606
  className="ml-1 p-0.5 hover:bg-attention/20 rounded"
@@ -608,7 +622,7 @@ function StartWorkflowView({
608
622
  className="text-xs"
609
623
  >
610
624
  <UploadIcon className="size-3.5 mr-1.5" />
611
- Upload
625
+ {t('agent.upload')}
612
626
  </Button>
613
627
  </div>
614
628
 
@@ -618,7 +632,7 @@ function StartWorkflowView({
618
632
  value={inputValue}
619
633
  onChange={(e) => setInputValue(e.target.value)}
620
634
  onKeyDown={handleKeyDown}
621
- placeholder={placeholder}
635
+ placeholder={resolvedPlaceholder}
622
636
  disabled={isSending}
623
637
  rows={2}
624
638
  className="flex-1 py-2.5 px-3 text-sm border border-border bg-background text-foreground focus:border-ring focus:outline-none focus:ring-1 focus:ring-ring rounded-md resize-none overflow-hidden"
@@ -634,13 +648,13 @@ function StartWorkflowView({
634
648
  ) : (
635
649
  <SendIcon className="size-3.5 mr-1.5" />
636
650
  )}
637
- {startButtonText}
651
+ {resolvedStartButtonText}
638
652
  </Button>
639
653
  </div>
640
654
  <div className="text-xs text-muted mt-2 text-center">
641
655
  {stagedFiles.length > 0
642
- ? `${stagedFiles.length} file${stagedFiles.length > 1 ? 's' : ''} staged - will upload when conversation starts`
643
- : 'Enter to send • Shift+Enter for new line'}
656
+ ? t('agent.filesStagedCount', { count: stagedFiles.length })
657
+ : t('agent.enterToSend')}
644
658
  </div>
645
659
  </div>
646
660
  </div>
@@ -650,14 +664,17 @@ function StartWorkflowView({
650
664
 
651
665
  // Inner component that handles the agent conversation - similar to ModernAgentOutput
652
666
  function ModernAgentConversationInner({
653
- run,
667
+ agentRunId,
654
668
  title,
655
669
  interactive = true,
656
670
  onClose,
657
671
  isModal = false,
658
672
  fullWidth = false,
659
- placeholder = "Type your message...",
673
+ placeholder,
660
674
  resetWorkflow,
675
+ onRestart,
676
+ onFork,
677
+ onShowDetails,
661
678
  // File upload props (onFilesSelected handled internally by handleFileUpload)
662
679
  uploadedFiles,
663
680
  onRemoveFile,
@@ -674,8 +691,10 @@ function ModernAgentConversationInner({
674
691
  hideMessageInput,
675
692
  hidePlanPanel,
676
693
  hideWorkstreamTabs,
694
+ showRightPanel: showRightPanelProp = true,
677
695
  hideFileUpload,
678
- hideDocumentPanel,
696
+ showArtifacts = false,
697
+ hideDocumentPanel: _hideDocumentPanel,
679
698
  // Attachment callback
680
699
  getAttachedDocs,
681
700
  onAttachmentsSent,
@@ -692,6 +711,7 @@ function ModernAgentConversationInner({
692
711
  // External file upload API
693
712
  fileUploadRef,
694
713
  onProcessingFilesChange,
714
+ processingFiles: processingFilesProp,
695
715
  // External plan panel API
696
716
  onPlansChange,
697
717
  onWorkstreamStatusChange,
@@ -718,9 +738,16 @@ function ModernAgentConversationInner({
718
738
  StoreLinkComponent,
719
739
  CollectionLinkComponent,
720
740
  prependFriendlyMessage,
721
- }: ModernAgentConversationProps & { run: AsyncExecutionResult }) {
741
+ payloadContent,
742
+ conversationContent,
743
+ conversationTab = false,
744
+ }: ModernAgentConversationProps & { agentRunId: string }) {
745
+ const { t } = useUITranslation();
722
746
  const { client } = useUserSession();
723
747
  const toast = useToast();
748
+ const instanceIdRef = useRef(
749
+ `mac-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 8)}`
750
+ );
724
751
 
725
752
  // ────────────────────────────────────────────
726
753
  // Extracted hooks
@@ -733,8 +760,9 @@ function ModernAgentConversationInner({
733
760
  addOptimisticMessage,
734
761
  removeOptimisticMessages,
735
762
  workflowStatus,
763
+ workflowRunId,
736
764
  serverFileUpdates,
737
- } = useAgentStream(client, run);
765
+ } = useAgentStream(client, agentRunId);
738
766
 
739
767
  const {
740
768
  plans,
@@ -761,13 +789,14 @@ function ModernAgentConversationInner({
761
789
  processingFiles,
762
790
  hasProcessingFiles,
763
791
  handleFileUpload,
764
- } = useFileProcessing(client, run, serverFileUpdates, toast);
792
+ } = useFileProcessing(client, agentRunId, serverFileUpdates, toast);
765
793
 
766
794
  // ────────────────────────────────────────────
767
795
  // Local state (UI-only concerns)
768
796
  // ────────────────────────────────────────────
769
797
  const bottomRef = useRef<HTMLDivElement | null>(null);
770
798
  const conversationRef = useRef<HTMLDivElement | null>(null);
799
+ const conversationLayoutRef = useRef<HTMLDivElement | null>(null);
771
800
  const [isSending, setIsSending] = useState(false);
772
801
  const [internalViewMode, setInternalViewMode] = useState<AgentConversationViewMode>("sliding");
773
802
  const viewMode = controlledViewMode ?? internalViewMode;
@@ -781,6 +810,8 @@ function ModernAgentConversationInner({
781
810
  const [isStopping, setIsStopping] = useState(false);
782
811
  const [thinkingMessageIndex, setThinkingMessageIndex] = useState(0);
783
812
  const [isDragOver, setIsDragOver] = useState(false);
813
+ const [activeWorkstreams, setActiveWorkstreams] = useState<ActiveWorkstreamEntry[]>([]);
814
+ const workstreamFetchFailedRef = useRef(false);
784
815
  const dragCounterRef = useRef(0);
785
816
 
786
817
  // PERFORMANCE: Refs for values used inside useCallback to avoid re-creating the callback
@@ -789,13 +820,35 @@ function ModernAgentConversationInner({
789
820
  const hasProcessingFilesRef = useRef(hasProcessingFiles);
790
821
  hasProcessingFilesRef.current = hasProcessingFiles;
791
822
 
792
- // Derive effective workflow status (API status + TERMINATED from messages)
823
+ // Derive effective workflow status only main workstream TERMINATED overrides API status.
793
824
  const effectiveWorkflowStatus = useMemo(() => {
794
- const lastMsg = messages[messages.length - 1];
795
- if (lastMsg?.type === AgentMessageType.TERMINATED) return "TERMINATED";
825
+ const mainMessages = messages.filter(m => (m.workstream_id || 'main') === 'main');
826
+ const lastMain = mainMessages[mainMessages.length - 1];
827
+ if (lastMain?.type === AgentMessageType.TERMINATED) return "TERMINATED";
796
828
  return workflowStatus;
797
829
  }, [messages, workflowStatus]);
798
830
 
831
+ console.debug("[ModernAgentConversation] render", {
832
+ agentRunId,
833
+ instanceId: instanceIdRef.current,
834
+ messageCount: messages.length,
835
+ activeWorkstreams: activeWorkstreams.length,
836
+ });
837
+
838
+ useEffect(() => {
839
+ console.debug("[ModernAgentConversation] mount", {
840
+ agentRunId,
841
+ instanceId: instanceIdRef.current,
842
+ });
843
+
844
+ return () => {
845
+ console.debug("[ModernAgentConversation] unmount", {
846
+ agentRunId,
847
+ instanceId: instanceIdRef.current,
848
+ });
849
+ };
850
+ }, [agentRunId]);
851
+
799
852
  // ────────────────────────────────────────────
800
853
  // Computed values
801
854
  // ────────────────────────────────────────────
@@ -812,6 +865,20 @@ function ModernAgentConversationInner({
812
865
  };
813
866
  }, [plans, activePlanIndex, workstreamStatusMap]);
814
867
 
868
+ const panelWorkstreams = useMemo<WorkstreamInfo[]>(() => {
869
+ return activeWorkstreams.map((ws) => ({
870
+ workstream_id: ws.workstream_id,
871
+ launch_id: ws.launch_id,
872
+ elapsed_ms: ws.elapsed_ms,
873
+ deadline_ms: ws.deadline_ms,
874
+ remaining_ms: Math.max(0, ws.deadline_ms - ws.elapsed_ms),
875
+ status: ws.status,
876
+ phase: ws.latest_progress?.phase,
877
+ child_workflow_id: ws.child_workflow_id,
878
+ child_workflow_run_id: ws.child_workflow_run_id,
879
+ }));
880
+ }, [activeWorkstreams]);
881
+
815
882
  // ────────────────────────────────────────────
816
883
  // Stable callbacks
817
884
  // ────────────────────────────────────────────
@@ -828,19 +895,79 @@ function ModernAgentConversationInner({
828
895
  setActivePlanIndex(index);
829
896
  }, [setActivePlanIndex]);
830
897
 
831
- const handleClosePlanPanel = useCallback(() => {
898
+ // ────────────────────────────────────────────
899
+ // Unified right panel state
900
+ // ────────────────────────────────────────────
901
+ type RightPanelTab = 'plan' | 'workstreams' | 'documents' | 'uploads' | 'artifacts' | 'conversation';
902
+ const [rightPanelTab, _setRightPanelTab] = useState<RightPanelTab>((conversationContent || conversationTab) ? 'conversation' : 'plan');
903
+ const [rightPanelWidth, setRightPanelWidth] = useState(400);
904
+ const [isRightPanelResizing, setIsRightPanelResizing] = useState(false);
905
+
906
+ const isRightPanelVisible = showRightPanelProp && (showSlidingPanel
907
+ || isDocPanelOpen
908
+ || (!hideWorkstreamTabs && panelWorkstreams.length > 0)
909
+ || !!conversationContent
910
+ || conversationTab);
911
+
912
+ useEffect(() => {
913
+ if (!isRightPanelVisible && isRightPanelResizing) {
914
+ setIsRightPanelResizing(false);
915
+ }
916
+ }, [isRightPanelVisible, isRightPanelResizing]);
917
+
918
+ useEffect(() => {
919
+ if (!isRightPanelResizing) return;
920
+
921
+ const minRightPanelWidth = 300;
922
+ const minConversationWidth = 420;
923
+
924
+ const handleMouseMove = (event: MouseEvent) => {
925
+ const container = conversationLayoutRef.current;
926
+ if (!container) return;
927
+
928
+ const containerRect = container.getBoundingClientRect();
929
+ const maxRightPanelWidth = Math.max(minRightPanelWidth, containerRect.width - minConversationWidth);
930
+ const nextWidth = containerRect.right - event.clientX;
931
+ const clampedWidth = Math.min(Math.max(nextWidth, minRightPanelWidth), maxRightPanelWidth);
932
+ setRightPanelWidth(clampedWidth);
933
+ };
934
+
935
+ const handleMouseUp = () => {
936
+ setIsRightPanelResizing(false);
937
+ };
938
+
939
+ window.addEventListener('mousemove', handleMouseMove);
940
+ window.addEventListener('mouseup', handleMouseUp);
941
+ document.body.style.cursor = 'col-resize';
942
+ document.body.style.userSelect = 'none';
943
+
944
+ return () => {
945
+ window.removeEventListener('mousemove', handleMouseMove);
946
+ window.removeEventListener('mouseup', handleMouseUp);
947
+ document.body.style.cursor = '';
948
+ document.body.style.userSelect = '';
949
+ };
950
+ }, [isRightPanelResizing]);
951
+
952
+ const handleCloseRightPanel = useCallback(() => {
832
953
  setShowSlidingPanel(false);
833
- }, [setShowSlidingPanel]);
954
+ handleCloseDocPanel();
955
+ }, [setShowSlidingPanel, handleCloseDocPanel]);
834
956
 
835
957
  // Default StoreLinkComponent that opens documents in the panel
836
958
  const internalStoreLinkComponent = useCallback(
837
- ({ documentId, children }: { href: string; documentId: string; children: React.ReactNode }) => (
838
- <button
959
+ ({ href, documentId, children }: { href: string; documentId: string; children: React.ReactNode }) => (
960
+ <a
961
+ href={href}
839
962
  className="text-info underline cursor-pointer hover:text-info/80"
840
- onClick={() => openDocInPanel(documentId)}
963
+ onClick={(e) => {
964
+ e.preventDefault();
965
+ e.stopPropagation();
966
+ openDocInPanel(documentId);
967
+ }}
841
968
  >
842
969
  {children}
843
- </button>
970
+ </a>
844
971
  ),
845
972
  [openDocInPanel]
846
973
  );
@@ -884,6 +1011,41 @@ function ModernAgentConversationInner({
884
1011
  onWorkstreamStatusChange?.(workstreamStatusMap);
885
1012
  }, [workstreamStatusMap, onWorkstreamStatusChange]);
886
1013
 
1014
+ // Poll active workstreams from backend query for right-panel visibility and details.
1015
+ useEffect(() => {
1016
+ const shouldPoll = !isCompleted || activeWorkstreams.length > 0;
1017
+ if (!shouldPoll) {
1018
+ setActiveWorkstreams((prev) => (prev.length === 0 ? prev : []));
1019
+ return;
1020
+ }
1021
+
1022
+ let isCancelled = false;
1023
+
1024
+ const fetchActiveWorkstreams = async () => {
1025
+ try {
1026
+ const result = await client.agents.getActiveWorkstreams(agentRunId);
1027
+ if (isCancelled) return;
1028
+ setActiveWorkstreams(result.running ?? []);
1029
+ workstreamFetchFailedRef.current = false;
1030
+ } catch (error) {
1031
+ if (isCancelled) return;
1032
+ setActiveWorkstreams([]);
1033
+ if (!workstreamFetchFailedRef.current) {
1034
+ console.warn("Failed to fetch active workstreams:", error);
1035
+ workstreamFetchFailedRef.current = true;
1036
+ }
1037
+ }
1038
+ };
1039
+
1040
+ fetchActiveWorkstreams();
1041
+ const pollHandle = window.setInterval(fetchActiveWorkstreams, 10000);
1042
+
1043
+ return () => {
1044
+ isCancelled = true;
1045
+ window.clearInterval(pollHandle);
1046
+ };
1047
+ }, [client.agents, agentRunId, isCompleted, activeWorkstreams.length]);
1048
+
887
1049
  // Notify parent when input availability is determined
888
1050
  useEffect(() => {
889
1051
  if (messages.length === 0) return;
@@ -913,8 +1075,8 @@ function ModernAgentConversationInner({
913
1075
  if (hasProcessingFilesRef.current) {
914
1076
  toast({
915
1077
  status: "warning",
916
- title: "Files Still Processing",
917
- description: "Please wait for all files to finish processing before sending",
1078
+ title: t('agent.filesProcessing'),
1079
+ description: t('agent.waitForFilesProcessing'),
918
1080
  duration: 3000,
919
1081
  });
920
1082
  return;
@@ -935,7 +1097,7 @@ function ModernAgentConversationInner({
935
1097
 
936
1098
  const optimisticMessage: AgentMessage = {
937
1099
  timestamp: Date.now(),
938
- workflow_run_id: run.runId,
1100
+ workflow_run_id: agentRunId,
939
1101
  type: AgentMessageType.QUESTION,
940
1102
  message: messageContent,
941
1103
  workstream_id: "main",
@@ -950,8 +1112,8 @@ function ModernAgentConversationInner({
950
1112
  _messageId: messageId,
951
1113
  };
952
1114
 
953
- client.store.workflows
954
- .sendSignal(run.workflowId, run.runId, "UserInput", {
1115
+ client.agents
1116
+ .sendSignal(agentRunId, "UserInput", {
955
1117
  message: messageContent,
956
1118
  metadata,
957
1119
  } as UserInputSignal)
@@ -964,25 +1126,25 @@ function ModernAgentConversationInner({
964
1126
  );
965
1127
  toast({
966
1128
  status: "error",
967
- title: "Failed to Send Message",
968
- description: err instanceof Error ? err.message : "Unknown error",
1129
+ title: t('agent.failedToSend'),
1130
+ description: err instanceof Error ? err.message : t('agent.unknownError'),
969
1131
  duration: 3000,
970
1132
  });
971
1133
  })
972
1134
  .finally(() => {
973
1135
  setIsSending(false);
974
1136
  });
975
- }, [run.runId, run.workflowId, client, toast, getAttachedDocs, getMessageContext, onAttachmentsSent, addOptimisticMessage, removeOptimisticMessages]);
1137
+ }, [agentRunId, client, toast, getAttachedDocs, getMessageContext, onAttachmentsSent, addOptimisticMessage, removeOptimisticMessages]);
976
1138
 
977
1139
  // Drag and drop handlers for full-panel file upload
978
1140
  const handleDragEnter = useCallback((e: React.DragEvent) => {
979
1141
  e.preventDefault();
980
1142
  e.stopPropagation();
981
1143
  dragCounterRef.current++;
982
- if (run && e.dataTransfer?.types?.includes('Files')) {
1144
+ if (e.dataTransfer?.types?.includes('Files')) {
983
1145
  setIsDragOver(true);
984
1146
  }
985
- }, [run]);
1147
+ }, []);
986
1148
 
987
1149
  const handleDragOver = useCallback((e: React.DragEvent) => {
988
1150
  e.preventDefault();
@@ -1004,11 +1166,11 @@ function ModernAgentConversationInner({
1004
1166
  dragCounterRef.current = 0;
1005
1167
  setIsDragOver(false);
1006
1168
 
1007
- if (run && e.dataTransfer?.files && e.dataTransfer.files.length > 0) {
1169
+ if (e.dataTransfer?.files && e.dataTransfer.files.length > 0) {
1008
1170
  const filesArray = Array.from(e.dataTransfer.files);
1009
1171
  handleFileUpload(filesArray);
1010
1172
  }
1011
- }, [run, handleFileUpload]);
1173
+ }, [handleFileUpload]);
1012
1174
 
1013
1175
  // Stop/interrupt the active workflow
1014
1176
  const handleStopWorkflow = useCallback(async () => {
@@ -1016,27 +1178,27 @@ function ModernAgentConversationInner({
1016
1178
 
1017
1179
  setIsStopping(true);
1018
1180
  try {
1019
- await client.store.workflows.sendSignal(run.workflowId, run.runId, "Stop", {
1181
+ await client.agents.sendSignal(agentRunId, "Stop", {
1020
1182
  message: "User requested stop",
1021
1183
  });
1022
1184
 
1023
1185
  toast({
1024
1186
  status: "info",
1025
- title: "Agent Interrupted",
1026
- description: "Type your message to give new instructions",
1187
+ title: t('agent.agentInterrupted'),
1188
+ description: t('agent.typeNewInstructions'),
1027
1189
  duration: 3000,
1028
1190
  });
1029
1191
  } catch (err) {
1030
1192
  toast({
1031
1193
  status: "error",
1032
- title: "Failed to Interrupt",
1033
- description: err instanceof Error ? err.message : "Unknown error",
1194
+ title: t('agent.failedToInterrupt'),
1195
+ description: err instanceof Error ? err.message : t('agent.unknownError'),
1034
1196
  duration: 3000,
1035
1197
  });
1036
1198
  } finally {
1037
1199
  setIsStopping(false);
1038
1200
  }
1039
- }, [isStopping, client, run.workflowId, run.runId, toast]);
1201
+ }, [isStopping, client, agentRunId, toast]);
1040
1202
 
1041
1203
  // Expose stop handler to external callers via ref
1042
1204
  useEffect(() => {
@@ -1051,6 +1213,10 @@ function ModernAgentConversationInner({
1051
1213
 
1052
1214
  // Calculate number of active tasks for the status indicator
1053
1215
  const getActiveTaskCount = (): number => {
1216
+ if (activeWorkstreams.length > 0) {
1217
+ return activeWorkstreams.filter((ws) => ws.status === "running").length;
1218
+ }
1219
+
1054
1220
  if (!messages.length) return 0;
1055
1221
 
1056
1222
  // Group messages by workstream
@@ -1062,7 +1228,7 @@ function ModernAgentConversationInner({
1062
1228
  if (!workstreamMessages.has(workstreamId)) {
1063
1229
  workstreamMessages.set(workstreamId, []);
1064
1230
  }
1065
- workstreamMessages.get(workstreamId)!.push(message);
1231
+ workstreamMessages.get(workstreamId)?.push(message);
1066
1232
  }
1067
1233
  });
1068
1234
 
@@ -1086,42 +1252,31 @@ function ModernAgentConversationInner({
1086
1252
  return activeCount;
1087
1253
  };
1088
1254
 
1089
- const actualTitle =
1090
- title || run.workflowId.split(":")[2] || "Agent Conversation";
1255
+ const actualTitle = title || t('agent.agentConversation');
1091
1256
 
1092
1257
  // Handle downloading conversation
1093
1258
  const downloadConversation = async () => {
1094
1259
  try {
1095
- const url = await getConversationUrl(client, run.runId);
1260
+ const url = await getConversationUrl(client, agentRunId);
1096
1261
  if (url) window.open(url, "_blank");
1097
1262
  } catch (err) {
1098
1263
  console.error("Failed to download conversation", err);
1099
1264
  toast({
1100
1265
  status: "error",
1101
- title: "Failed to download conversation",
1266
+ title: t('agent.failedToDownload'),
1102
1267
  duration: 3000,
1103
1268
  });
1104
1269
  }
1105
1270
  };
1106
1271
 
1107
- // Handle copying run ID
1108
- const copyRunId = () => {
1109
- navigator.clipboard.writeText(run.runId);
1110
- toast({
1111
- status: "success",
1112
- title: "Run ID copied",
1113
- duration: 2000,
1114
- });
1115
- };
1116
-
1117
1272
  const [isPdfModalOpen, setIsPdfModalOpen] = useState(false);
1118
1273
 
1119
1274
  const exportConversationPdf = () => {
1120
1275
  if (!conversationRef.current) {
1121
1276
  toast({
1122
1277
  status: "error",
1123
- title: "PDF export failed",
1124
- description: "No conversation content available to export",
1278
+ title: t('agent.pdfExportFailed'),
1279
+ description: t('agent.noConversationContent'),
1125
1280
  duration: 3000,
1126
1281
  });
1127
1282
  return;
@@ -1133,21 +1288,21 @@ function ModernAgentConversationInner({
1133
1288
  if (!conversationRef.current) {
1134
1289
  toast({
1135
1290
  status: "error",
1136
- title: "PDF export failed",
1137
- description: "No conversation content available to export",
1291
+ title: t('agent.pdfExportFailed'),
1292
+ description: t('agent.noConversationContent'),
1138
1293
  duration: 3000,
1139
1294
  });
1140
1295
  return;
1141
1296
  }
1142
1297
 
1143
- const pdfTitle = `${actualTitle} - ${run.runId}`;
1298
+ const pdfTitle = `${actualTitle} - ${agentRunId}`;
1144
1299
  const success = printElementToPdf(conversationRef.current, pdfTitle);
1145
1300
 
1146
1301
  if (!success) {
1147
1302
  toast({
1148
1303
  status: "error",
1149
- title: "PDF export failed",
1150
- description: "Unable to open print preview",
1304
+ title: t('agent.pdfExportFailed'),
1305
+ description: t('agent.unableToOpenPrint'),
1151
1306
  duration: 4000,
1152
1307
  });
1153
1308
  return;
@@ -1155,13 +1310,26 @@ function ModernAgentConversationInner({
1155
1310
 
1156
1311
  toast({
1157
1312
  status: "success",
1158
- title: "PDF export ready",
1159
- description: "Use your browser's Print dialog to save as PDF",
1313
+ title: t('agent.pdfExportReady'),
1314
+ description: t('agent.printDialogDescription'),
1160
1315
  duration: 4000,
1161
1316
  });
1162
1317
  setIsPdfModalOpen(false);
1163
1318
  };
1164
1319
 
1320
+ // Artifact refresh key — bumps when tool calls complete or conversation finishes,
1321
+ // which is when new artifacts are most likely to appear.
1322
+ const artifactRefreshKey = useMemo(() => {
1323
+ return messages.filter((m) => {
1324
+ if (m.type === AgentMessageType.COMPLETE) return true;
1325
+ if (m.type === AgentMessageType.THOUGHT) {
1326
+ const details = m.details as Record<string, unknown> | undefined;
1327
+ return details?.tool_status === 'completed';
1328
+ }
1329
+ return false;
1330
+ }).length;
1331
+ }, [messages]);
1332
+
1165
1333
  // PERFORMANCE: Memoize taskLabels to prevent AllMessagesMixed re-renders
1166
1334
  const taskLabels = useMemo(() =>
1167
1335
  getActivePlan.plan.plan?.reduce((acc, task) => {
@@ -1170,12 +1338,143 @@ function ModernAgentConversationInner({
1170
1338
  }, new Map<string, string>()),
1171
1339
  [getActivePlan.plan]);
1172
1340
 
1341
+ // Conversation area inner content — shared between main layout and conversationTab mode
1342
+ const conversationAreaJsx = (
1343
+ <div
1344
+ ref={conversationRef}
1345
+ className={cn(
1346
+ "flex flex-col min-h-0 min-w-0 border-0",
1347
+ conversationTab
1348
+ ? "flex-1 h-full"
1349
+ : isRightPanelVisible
1350
+ ? "w-full flex-1 min-h-[50vh]"
1351
+ : fullWidth
1352
+ ? "flex-1 w-full"
1353
+ : `flex-1 mx-auto ${!isModal ? "max-w-4xl" : ""}`
1354
+ )}
1355
+ >
1356
+ {!hideHeader && (
1357
+ <div className="flex-shrink-0">
1358
+ <Header
1359
+ title={actualTitle}
1360
+ isCompleted={isCompleted}
1361
+ onClose={onClose}
1362
+ isModal={isModal}
1363
+ agentRunId={agentRunId}
1364
+ workflowRunId={workflowRunId || ''}
1365
+ viewMode={viewMode}
1366
+ onViewModeChange={handleViewModeChange}
1367
+ showPlanPanel={showRightPanelProp && showSlidingPanel}
1368
+ hasPlan={showRightPanelProp && plans.length > 0}
1369
+ showPlanButton={showRightPanelProp && !conversationTab}
1370
+ onTogglePlanPanel={handleTogglePlanPanel}
1371
+ onDownload={downloadConversation}
1372
+ resetWorkflow={resetWorkflow}
1373
+ onRestart={onRestart}
1374
+ onFork={onFork}
1375
+ onShowDetails={onShowDetails}
1376
+ onExportPdf={exportConversationPdf}
1377
+ isReceivingChunks={debugChunkFlash}
1378
+ />
1379
+ </div>
1380
+ )}
1381
+
1382
+ {messages.length === 0 && !isCompleted ? (
1383
+ <div className="flex-1 flex flex-col items-center justify-center h-full text-center py-6">
1384
+ <div className="p-5 max-w-md border border-info rounded-lg shadow-sm">
1385
+ <div className="flex items-center space-x-3 mb-3">
1386
+ <PulsatingCircle size="sm" color="blue" />
1387
+ <div className="text-sm text-muted font-medium">
1388
+ {ThinkingMessages[thinkingMessageIndex]}
1389
+ </div>
1390
+ </div>
1391
+ <div className="mt-4 flex justify-center">
1392
+ <AnimatedThinkingDots color="blue" className="mt-1" />
1393
+ </div>
1394
+ </div>
1395
+ </div>
1396
+ ) : (
1397
+ <AllMessagesMixed
1398
+ messages={messages}
1399
+ bottomRef={bottomRef as React.RefObject<HTMLDivElement>}
1400
+ isCompleted={isCompleted}
1401
+ plan={getActivePlan.plan}
1402
+ workstreamStatus={getActivePlan.workstreamStatus}
1403
+ showPlanPanel={showRightPanelProp && showSlidingPanel}
1404
+ onTogglePlanPanel={handleTogglePlanPanel}
1405
+ plans={plans}
1406
+ activePlanIndex={activePlanIndex}
1407
+ onChangePlan={handleChangePlan}
1408
+ taskLabels={taskLabels}
1409
+ streamingMessages={streamingMessages}
1410
+ onSendMessage={handleSendMessage}
1411
+ thinkingMessageIndex={thinkingMessageIndex}
1412
+ messageItemClassNames={messageItemClassNames}
1413
+ messageStyleOverrides={messageStyleOverrides}
1414
+ toolCallGroupClassNames={toolCallGroupClassNames}
1415
+ hideToolCallsInViewMode={hideToolCallsInViewMode}
1416
+ streamingMessageClassNames={streamingMessageClassNames}
1417
+ batchProgressPanelClassNames={batchProgressPanelClassNames}
1418
+ artifactRunId={agentRunId}
1419
+ viewMode={viewMode}
1420
+ hideWorkstreamTabs={hideWorkstreamTabs}
1421
+ workingIndicatorClassName={workingIndicatorClassName}
1422
+ messageListClassName={messageListClassName}
1423
+ StoreLinkComponent={effectiveStoreLinkComponent}
1424
+ CollectionLinkComponent={CollectionLinkComponent}
1425
+ prependFriendlyMessage={prependFriendlyMessage}
1426
+ />
1427
+ )}
1428
+
1429
+ {!hideMessageInput && (
1430
+ <div className="flex-shrink-0" style={{ paddingBottom: 'env(safe-area-inset-bottom, 0px)' }}>
1431
+ {effectiveWorkflowStatus && effectiveWorkflowStatus !== "RUNNING" ? (
1432
+ <MessageBox
1433
+ status={effectiveWorkflowStatus === "COMPLETED" ? 'success' : 'done'}
1434
+ icon={null}
1435
+ className="m-2"
1436
+ >
1437
+ This Workflow is {effectiveWorkflowStatus}
1438
+ </MessageBox>
1439
+ ) : showInput && (
1440
+ <MessageInput
1441
+ onSend={handleSendMessage}
1442
+ onStop={handleStopWorkflow}
1443
+ disabled={isUploading}
1444
+ isSending={isSending || isUploading}
1445
+ isStopping={isStopping}
1446
+ isStreaming={!isCompleted}
1447
+ isCompleted={isCompleted}
1448
+ activeTaskCount={getActiveTaskCount()}
1449
+ placeholder={placeholder ?? 'Type your message...'}
1450
+ onFilesSelected={handleFileUpload}
1451
+ uploadedFiles={uploadedFiles}
1452
+ onRemoveFile={onRemoveFile}
1453
+ acceptedFileTypes={acceptedFileTypes}
1454
+ maxFiles={maxFiles}
1455
+ processingFiles={processingFiles}
1456
+ hasProcessingFiles={hasProcessingFiles}
1457
+ renderDocumentSearch={renderDocumentSearch}
1458
+ selectedDocuments={selectedDocuments}
1459
+ onRemoveDocument={onRemoveDocument}
1460
+ hideObjectLinking={hideObjectLinking}
1461
+ hideFileUpload={hideFileUpload}
1462
+ className={inputContainerClassName}
1463
+ inputClassName={inputClassName}
1464
+ />
1465
+ )}
1466
+ </div>
1467
+ )}
1468
+ </div>
1469
+ );
1470
+
1173
1471
  // Main content - wrapped with FusionFragmentProvider when fusionData is provided
1174
1472
  const mainContent = (
1175
1473
  <ArtifactUrlCacheProvider>
1176
1474
  <ImageLightboxProvider>
1177
1475
  <div
1178
- className={cn("flex flex-col lg:flex-row gap-2 h-full relative overflow-hidden", isDragOver && "ring-2 ring-blue-400 ring-inset", className)}
1476
+ ref={conversationLayoutRef}
1477
+ className={cn("flex flex-col lg:flex-row gap-2 w-full h-full relative overflow-hidden", isDragOver && "ring-2 ring-blue-400 ring-inset", className)}
1179
1478
  onDragEnter={handleDragEnter}
1180
1479
  onDragOver={handleDragOver}
1181
1480
  onDragLeave={handleDragLeave}
@@ -1190,170 +1489,62 @@ function ModernAgentConversationInner({
1190
1489
  </div>
1191
1490
  </div>
1192
1491
  )}
1193
- {/* Conversation Area - responsive width based on panel visibility */}
1194
- <div
1195
- ref={conversationRef}
1196
- className={cn(
1197
- "flex flex-col min-h-0 border-0",
1198
- (showSlidingPanel || isDocPanelOpen)
1199
- ? "w-full lg:w-3/5 flex-1 min-h-[50vh]"
1200
- : fullWidth
1201
- ? "flex-1 w-full"
1202
- : `flex-1 mx-auto ${!isModal ? "max-w-4xl" : ""}`
1203
- )}
1204
- >
1205
- {/* Streaming activity indicator moved to Header */}
1206
-
1207
- {/* Header - flex-shrink-0 to prevent shrinking */}
1208
- {!hideHeader && (
1209
- <div className="flex-shrink-0">
1210
- <Header
1211
- title={actualTitle}
1212
- isCompleted={isCompleted}
1213
- onClose={onClose}
1214
- isModal={isModal}
1215
- run={run}
1216
- viewMode={viewMode}
1217
- onViewModeChange={handleViewModeChange}
1218
- showPlanPanel={showSlidingPanel}
1219
- hasPlan={plans.length > 0}
1220
- onTogglePlanPanel={handleTogglePlanPanel}
1221
- onDownload={downloadConversation}
1222
- onCopyRunId={copyRunId}
1223
- resetWorkflow={resetWorkflow}
1224
- onExportPdf={exportConversationPdf}
1225
- isReceivingChunks={debugChunkFlash}
1492
+ {/* Conversation Area hidden when conversationTab moves it into the right panel */}
1493
+ {!conversationTab && conversationAreaJsx}
1494
+
1495
+ {/* Unified Right Panel — Plan | Workstreams | Documents | Uploads */}
1496
+ {isRightPanelVisible && (
1497
+ <>
1498
+ {!conversationTab && (
1499
+ <div
1500
+ className="hidden lg:block lg:w-1 lg:shrink-0 cursor-col-resize bg-border/70 hover:bg-border transition-colors"
1501
+ onMouseDown={() => setIsRightPanelResizing(true)}
1502
+ role="separator"
1503
+ aria-orientation="vertical"
1504
+ aria-label="Resize right panel"
1226
1505
  />
1227
- </div>
1228
- )}
1229
-
1230
- {messages.length === 0 && !isCompleted ? (
1231
- <div className="flex-1 flex flex-col items-center justify-center h-full text-center py-6">
1232
- <div className="p-5 max-w-md border border-info rounded-lg shadow-sm">
1233
- <div className="flex items-center space-x-3 mb-3">
1234
- <PulsatingCircle size="sm" color="blue" />
1235
- <div className="text-sm text-muted font-medium">
1236
- {ThinkingMessages[thinkingMessageIndex]}
1237
- </div>
1238
- </div>
1239
- <div className="mt-4 flex justify-center">
1240
- <AnimatedThinkingDots color="blue" className="mt-1" />
1241
- </div>
1242
- </div>
1243
- </div>
1244
- ) : (
1245
- <AllMessagesMixed
1246
- messages={messages}
1247
- bottomRef={bottomRef as React.RefObject<HTMLDivElement>}
1248
- isCompleted={isCompleted}
1249
- plan={getActivePlan.plan}
1250
- workstreamStatus={getActivePlan.workstreamStatus}
1251
- showPlanPanel={showSlidingPanel}
1252
- onTogglePlanPanel={handleTogglePlanPanel}
1253
- plans={plans}
1254
- activePlanIndex={activePlanIndex}
1255
- onChangePlan={handleChangePlan}
1256
- taskLabels={taskLabels}
1257
- streamingMessages={streamingMessages}
1258
- onSendMessage={handleSendMessage}
1259
- thinkingMessageIndex={thinkingMessageIndex}
1260
- messageItemClassNames={messageItemClassNames}
1261
- messageStyleOverrides={messageStyleOverrides}
1262
- toolCallGroupClassNames={toolCallGroupClassNames}
1263
- hideToolCallsInViewMode={hideToolCallsInViewMode}
1264
- streamingMessageClassNames={streamingMessageClassNames}
1265
- batchProgressPanelClassNames={batchProgressPanelClassNames}
1266
- viewMode={viewMode}
1267
- hideWorkstreamTabs={hideWorkstreamTabs}
1268
- workingIndicatorClassName={workingIndicatorClassName}
1269
- messageListClassName={messageListClassName}
1270
- StoreLinkComponent={effectiveStoreLinkComponent}
1271
- CollectionLinkComponent={CollectionLinkComponent}
1272
- prependFriendlyMessage={prependFriendlyMessage}
1273
- />
1274
- )}
1275
-
1276
- {/* Show workflow status message when not running, or show input when running/unknown */}
1277
- {/* Input area - flex-shrink-0 to stay pinned at bottom, with iOS safe area support */}
1278
- {!hideMessageInput && (
1279
- <div className="flex-shrink-0" style={{ paddingBottom: 'env(safe-area-inset-bottom, 0px)' }}>
1280
- {effectiveWorkflowStatus && effectiveWorkflowStatus !== "RUNNING" ? (
1281
- <MessageBox
1282
- status={effectiveWorkflowStatus === "COMPLETED" ? 'success' : 'done'}
1283
- icon={null}
1284
- className="m-2"
1285
- >
1286
- This Workflow is {effectiveWorkflowStatus}
1287
- </MessageBox>
1288
- ) : showInput && (
1289
- <MessageInput
1290
- onSend={handleSendMessage}
1291
- onStop={handleStopWorkflow}
1292
- disabled={isUploading}
1293
- isSending={isSending || isUploading}
1294
- isStopping={isStopping}
1295
- isStreaming={!isCompleted}
1296
- isCompleted={isCompleted}
1297
- activeTaskCount={getActiveTaskCount()}
1298
- placeholder={placeholder}
1299
- // File upload props - use internal handler that signals workflow
1300
- onFilesSelected={handleFileUpload}
1301
- uploadedFiles={uploadedFiles}
1302
- onRemoveFile={onRemoveFile}
1303
- acceptedFileTypes={acceptedFileTypes}
1304
- maxFiles={maxFiles}
1305
- // File processing state
1306
- processingFiles={processingFiles}
1307
- hasProcessingFiles={hasProcessingFiles}
1308
- // Document search props
1309
- renderDocumentSearch={renderDocumentSearch}
1310
- selectedDocuments={selectedDocuments}
1311
- onRemoveDocument={onRemoveDocument}
1312
- // Object linking
1313
- hideObjectLinking={hideObjectLinking}
1314
- // Files Uploaded
1315
- hideFileUpload={hideFileUpload}
1316
- // Styling props
1317
- className={inputContainerClassName}
1318
- inputClassName={inputClassName}
1319
- />
1320
- )}
1321
- </div>
1322
- )}
1323
- </div>
1324
-
1325
- {/* Plan Panel Area - only rendered when panel should be shown */}
1326
- {!hidePlanPanel && showSlidingPanel && (
1327
- <div className="w-full lg:w-1/3 min-h-[50vh] lg:h-full border-t lg:border-t-0 lg:border-l">
1328
- <InlineSlidingPlanPanel
1506
+ )}
1507
+ <div
1508
+ className={conversationTab
1509
+ ? "w-full h-full overflow-auto"
1510
+ : "w-full lg:w-[var(--agent-right-panel-width)] lg:shrink-0 min-h-[50vh] lg:h-full border-t lg:border-t-0 lg:border-l"}
1511
+ style={!conversationTab ? ({ ['--agent-right-panel-width' as string]: `${rightPanelWidth}px` } as React.CSSProperties) : undefined}
1512
+ >
1513
+ <AgentRightPanel
1514
+ // Plan
1329
1515
  plan={getActivePlan.plan}
1330
1516
  workstreamStatus={getActivePlan.workstreamStatus}
1331
- isOpen={showSlidingPanel}
1332
- onClose={handleClosePlanPanel}
1333
1517
  plans={plans}
1334
1518
  activePlanIndex={activePlanIndex}
1335
1519
  onChangePlan={handleChangePlan}
1336
- />
1337
- </div>
1338
- )}
1339
-
1340
- {/* Document Panel Area - slides in when documents are created/edited */}
1341
- {!hideDocumentPanel && isDocPanelOpen && openDocuments.length > 0 && (
1342
- <div className={cn(
1343
- "w-full lg:w-2/5 min-h-[50vh] lg:h-full border-t lg:border-t-0 lg:border-l",
1344
- showSlidingPanel && "lg:w-1/3"
1345
- )}>
1346
- <DocumentPanel
1347
- isOpen={isDocPanelOpen}
1348
- onClose={handleCloseDocPanel}
1349
- documents={openDocuments}
1520
+ showPlan={!hidePlanPanel && showSlidingPanel}
1521
+ // Workstreams
1522
+ activeWorkstreams={panelWorkstreams}
1523
+ hideWorkstreams={hideWorkstreamTabs}
1524
+ // Documents
1525
+ openDocuments={openDocuments}
1350
1526
  activeDocumentId={activeDocumentId}
1351
1527
  onSelectDocument={selectDocument}
1352
1528
  onCloseDocument={handleCloseDocument}
1353
- refreshKey={docRefreshKey}
1354
- runId={run.runId}
1529
+ docRefreshKey={docRefreshKey}
1530
+ runId={agentRunId}
1531
+ // Uploads
1532
+ processingFiles={processingFilesProp ?? processingFiles}
1533
+ // Artifacts
1534
+ showArtifacts={showArtifacts}
1535
+ artifactRefreshKey={artifactRefreshKey}
1536
+ // Messages (for workstreams tab context)
1537
+ messages={messages}
1538
+ // Payload content
1539
+ payloadContent={payloadContent}
1540
+ // Conversation content
1541
+ conversationContent={conversationTab ? conversationAreaJsx : conversationContent}
1542
+ // Panel control
1543
+ onClose={handleCloseRightPanel}
1544
+ defaultTab={rightPanelTab}
1355
1545
  />
1356
- </div>
1546
+ </div>
1547
+ </>
1357
1548
  )}
1358
1549
  <Modal isOpen={isPdfModalOpen} onClose={() => setIsPdfModalOpen(false)}>
1359
1550
  <ModalTitle>Export conversation as PDF</ModalTitle>
@@ -1388,7 +1579,7 @@ function ModernAgentConversationInner({
1388
1579
  data={fusionData}
1389
1580
  sendMessage={handleSendMessage}
1390
1581
  ChartComponent={VegaLiteChart}
1391
- artifactRunId={run.runId}
1582
+ artifactRunId={agentRunId}
1392
1583
  >
1393
1584
  {mainContent}
1394
1585
  </FusionFragmentProvider>
@@ -1397,13 +1588,3 @@ function ModernAgentConversationInner({
1397
1588
 
1398
1589
  return mainContent;
1399
1590
  }
1400
-
1401
- // Helper function to get conversation URL - used by other components
1402
- export async function getConversationUrl(
1403
- vertesia: VertesiaClient,
1404
- workflowRunId: string,
1405
- ): Promise<string> {
1406
- return vertesia.files
1407
- .getDownloadUrl(`agents/${workflowRunId}/conversation.json`)
1408
- .then((r) => r.url);
1409
- }