@vertesia/ui 1.0.0-dev.20260227.112605Z → 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 (796) 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/selectBox.js +1 -1
  38. package/lib/esm/core/components/shadcn/switch.js +19 -0
  39. package/lib/esm/core/components/shadcn/switch.js.map +1 -0
  40. package/lib/esm/core/components/shadcn/tabs.js +6 -6
  41. package/lib/esm/core/components/shadcn/tabs.js.map +1 -1
  42. package/lib/esm/core/components/shadcn/theme/ThemeSwitcher.js +8 -6
  43. package/lib/esm/core/components/shadcn/theme/ThemeSwitcher.js.map +1 -1
  44. package/lib/esm/core/components/shadcn/tooltip.js +1 -1
  45. package/lib/esm/core/components/shadcn/tooltip.js.map +1 -1
  46. package/lib/esm/core/components/toast/NotificationPanel.js +3 -3
  47. package/lib/esm/core/components/toast/NotificationPanel.js.map +1 -1
  48. package/lib/esm/core/hooks/PortalContainerProvider.js +9 -3
  49. package/lib/esm/core/hooks/PortalContainerProvider.js.map +1 -1
  50. package/lib/esm/env/index.js +16 -9
  51. package/lib/esm/env/index.js.map +1 -1
  52. package/lib/esm/features/agent/PayloadBuilder.js +87 -15
  53. package/lib/esm/features/agent/PayloadBuilder.js.map +1 -1
  54. package/lib/esm/features/agent/chat/AgentRightPanel.js +159 -0
  55. package/lib/esm/features/agent/chat/AgentRightPanel.js.map +1 -0
  56. package/lib/esm/features/agent/chat/ArtifactsTab.js +69 -0
  57. package/lib/esm/features/agent/chat/ArtifactsTab.js.map +1 -0
  58. package/lib/esm/features/agent/chat/AskUserWidget.js +12 -6
  59. package/lib/esm/features/agent/chat/AskUserWidget.js.map +1 -1
  60. package/lib/esm/features/agent/chat/DocumentPanel.js +6 -3
  61. package/lib/esm/features/agent/chat/DocumentPanel.js.map +1 -1
  62. package/lib/esm/features/agent/chat/ImageLightbox.js +3 -1
  63. package/lib/esm/features/agent/chat/ImageLightbox.js.map +1 -1
  64. package/lib/esm/features/agent/chat/ModernAgentConversation.js +241 -113
  65. package/lib/esm/features/agent/chat/ModernAgentConversation.js.map +1 -1
  66. package/lib/esm/features/agent/chat/ModernAgentOutput/AllMessagesMixed.js +122 -52
  67. package/lib/esm/features/agent/chat/ModernAgentOutput/AllMessagesMixed.js.map +1 -1
  68. package/lib/esm/features/agent/chat/ModernAgentOutput/BatchProgressPanel.js +5 -3
  69. package/lib/esm/features/agent/chat/ModernAgentOutput/BatchProgressPanel.js.map +1 -1
  70. package/lib/esm/features/agent/chat/ModernAgentOutput/Header.js +76 -33
  71. package/lib/esm/features/agent/chat/ModernAgentOutput/Header.js.map +1 -1
  72. package/lib/esm/features/agent/chat/ModernAgentOutput/InlineSlidingPlanPanel.js +82 -83
  73. package/lib/esm/features/agent/chat/ModernAgentOutput/InlineSlidingPlanPanel.js.map +1 -1
  74. package/lib/esm/features/agent/chat/ModernAgentOutput/MessageInput.js +16 -14
  75. package/lib/esm/features/agent/chat/ModernAgentOutput/MessageInput.js.map +1 -1
  76. package/lib/esm/features/agent/chat/ModernAgentOutput/MessageItem.js +20 -5
  77. package/lib/esm/features/agent/chat/ModernAgentOutput/MessageItem.js.map +1 -1
  78. package/lib/esm/features/agent/chat/ModernAgentOutput/PlanPanel.js +8 -6
  79. package/lib/esm/features/agent/chat/ModernAgentOutput/PlanPanel.js.map +1 -1
  80. package/lib/esm/features/agent/chat/ModernAgentOutput/SlidingPlanPanel.js +12 -10
  81. package/lib/esm/features/agent/chat/ModernAgentOutput/SlidingPlanPanel.js.map +1 -1
  82. package/lib/esm/features/agent/chat/ModernAgentOutput/StreamingMessage.js +5 -3
  83. package/lib/esm/features/agent/chat/ModernAgentOutput/StreamingMessage.js.map +1 -1
  84. package/lib/esm/features/agent/chat/ModernAgentOutput/ToolCallGroup.js +104 -13
  85. package/lib/esm/features/agent/chat/ModernAgentOutput/ToolCallGroup.js.map +1 -1
  86. package/lib/esm/features/agent/chat/ModernAgentOutput/WorkstreamTabs.js +9 -5
  87. package/lib/esm/features/agent/chat/ModernAgentOutput/WorkstreamTabs.js.map +1 -1
  88. package/lib/esm/features/agent/chat/ModernAgentOutput/utils.js +160 -76
  89. package/lib/esm/features/agent/chat/ModernAgentOutput/utils.js.map +1 -1
  90. package/lib/esm/features/agent/chat/SlidingThinkingIndicator.js +3 -1
  91. package/lib/esm/features/agent/chat/SlidingThinkingIndicator.js.map +1 -1
  92. package/lib/esm/features/agent/chat/VegaLiteChart.js +14 -2
  93. package/lib/esm/features/agent/chat/VegaLiteChart.js.map +1 -1
  94. package/lib/esm/features/agent/chat/hooks/useAgentPlans.js +3 -8
  95. package/lib/esm/features/agent/chat/hooks/useAgentPlans.js.map +1 -1
  96. package/lib/esm/features/agent/chat/hooks/useAgentStream.js +79 -16
  97. package/lib/esm/features/agent/chat/hooks/useAgentStream.js.map +1 -1
  98. package/lib/esm/features/agent/chat/hooks/useArtifacts.js +108 -0
  99. package/lib/esm/features/agent/chat/hooks/useArtifacts.js.map +1 -0
  100. package/lib/esm/features/agent/chat/hooks/useDocumentPanel.js +56 -5
  101. package/lib/esm/features/agent/chat/hooks/useDocumentPanel.js.map +1 -1
  102. package/lib/esm/features/agent/chat/hooks/useFileProcessing.js +12 -10
  103. package/lib/esm/features/agent/chat/hooks/useFileProcessing.js.map +1 -1
  104. package/lib/esm/features/errors/PanelErrorBoundary.js +3 -1
  105. package/lib/esm/features/errors/PanelErrorBoundary.js.map +1 -1
  106. package/lib/esm/features/facets/AgentRunnerFacetsNav.js +45 -33
  107. package/lib/esm/features/facets/AgentRunnerFacetsNav.js.map +1 -1
  108. package/lib/esm/features/facets/RunsFacetsNav.js +9 -2
  109. package/lib/esm/features/facets/RunsFacetsNav.js.map +1 -1
  110. package/lib/esm/features/facets/index.js +1 -1
  111. package/lib/esm/features/facets/index.js.map +1 -1
  112. package/lib/esm/features/layout/GenericPageNavHeader.js +40 -28
  113. package/lib/esm/features/layout/GenericPageNavHeader.js.map +1 -1
  114. package/lib/esm/features/layout/NotFoundView.js +3 -1
  115. package/lib/esm/features/layout/NotFoundView.js.map +1 -1
  116. package/lib/esm/features/magic-pdf/AnnotatedImageSlider.js +9 -5
  117. package/lib/esm/features/magic-pdf/AnnotatedImageSlider.js.map +1 -1
  118. package/lib/esm/features/magic-pdf/DownloadPopover.js +5 -4
  119. package/lib/esm/features/magic-pdf/DownloadPopover.js.map +1 -1
  120. package/lib/esm/features/magic-pdf/MagicPdfView.js +8 -5
  121. package/lib/esm/features/magic-pdf/MagicPdfView.js.map +1 -1
  122. package/lib/esm/features/pdf-viewer/PdfPageSlider.js +9 -5
  123. package/lib/esm/features/pdf-viewer/PdfPageSlider.js.map +1 -1
  124. package/lib/esm/features/pdf-viewer/SimplePdfViewer.js +5 -3
  125. package/lib/esm/features/pdf-viewer/SimplePdfViewer.js.map +1 -1
  126. package/lib/esm/features/permissions/UserPermissionsProvider.js +3 -1
  127. package/lib/esm/features/permissions/UserPermissionsProvider.js.map +1 -1
  128. package/lib/esm/features/store/collections/BrowseCollectionView.js +9 -1
  129. package/lib/esm/features/store/collections/BrowseCollectionView.js.map +1 -1
  130. package/lib/esm/features/store/collections/CollectionsTable.js +14 -7
  131. package/lib/esm/features/store/collections/CollectionsTable.js.map +1 -1
  132. package/lib/esm/features/store/collections/CreateCollection.js +21 -18
  133. package/lib/esm/features/store/collections/CreateCollection.js.map +1 -1
  134. package/lib/esm/features/store/collections/EditCollectionView.js +23 -19
  135. package/lib/esm/features/store/collections/EditCollectionView.js.map +1 -1
  136. package/lib/esm/features/store/collections/SelectCollection.js +25 -10
  137. package/lib/esm/features/store/collections/SelectCollection.js.map +1 -1
  138. package/lib/esm/features/store/collections/SharedPropsEditor.js +5 -3
  139. package/lib/esm/features/store/collections/SharedPropsEditor.js.map +1 -1
  140. package/lib/esm/features/store/collections/SyncMemberHeadsToggle.js +5 -3
  141. package/lib/esm/features/store/collections/SyncMemberHeadsToggle.js.map +1 -1
  142. package/lib/esm/features/store/objects/DocumentPreviewPanel.js +14 -12
  143. package/lib/esm/features/store/objects/DocumentPreviewPanel.js.map +1 -1
  144. package/lib/esm/features/store/objects/DocumentSearchResults.js +15 -5
  145. package/lib/esm/features/store/objects/DocumentSearchResults.js.map +1 -1
  146. package/lib/esm/features/store/objects/DocumentTable.js +10 -7
  147. package/lib/esm/features/store/objects/DocumentTable.js.map +1 -1
  148. package/lib/esm/features/store/objects/ExportPropertiesModal.js +5 -2
  149. package/lib/esm/features/store/objects/ExportPropertiesModal.js.map +1 -1
  150. package/lib/esm/features/store/objects/components/ContentDispositionButton.js +3 -1
  151. package/lib/esm/features/store/objects/components/ContentDispositionButton.js.map +1 -1
  152. package/lib/esm/features/store/objects/components/ContentOverview.js +55 -40
  153. package/lib/esm/features/store/objects/components/ContentOverview.js.map +1 -1
  154. package/lib/esm/features/store/objects/components/DocumentIcon.js +4 -3
  155. package/lib/esm/features/store/objects/components/DocumentIcon.js.map +1 -1
  156. package/lib/esm/features/store/objects/components/PropertiesEditorModal.js +13 -11
  157. package/lib/esm/features/store/objects/components/PropertiesEditorModal.js.map +1 -1
  158. package/lib/esm/features/store/objects/components/SaveVersionConfirmModal.js +15 -18
  159. package/lib/esm/features/store/objects/components/SaveVersionConfirmModal.js.map +1 -1
  160. package/lib/esm/features/store/objects/components/SelectDocument.js +9 -6
  161. package/lib/esm/features/store/objects/components/SelectDocument.js.map +1 -1
  162. package/lib/esm/features/store/objects/components/TextEditorPanel.js +97 -0
  163. package/lib/esm/features/store/objects/components/TextEditorPanel.js.map +1 -0
  164. package/lib/esm/features/store/objects/components/VectorSearchWidget.js +3 -1
  165. package/lib/esm/features/store/objects/components/VectorSearchWidget.js.map +1 -1
  166. package/lib/esm/features/store/objects/components/useContentPanelHooks.js +4 -2
  167. package/lib/esm/features/store/objects/components/useContentPanelHooks.js.map +1 -1
  168. package/lib/esm/features/store/objects/components/useDownloadFile.js +12 -10
  169. package/lib/esm/features/store/objects/components/useDownloadFile.js.map +1 -1
  170. package/lib/esm/features/store/objects/layout/documentLayout.js +10 -6
  171. package/lib/esm/features/store/objects/layout/documentLayout.js.map +1 -1
  172. package/lib/esm/features/store/objects/layout/renderers.js +10 -1
  173. package/lib/esm/features/store/objects/layout/renderers.js.map +1 -1
  174. package/lib/esm/features/store/objects/search/DocumentSearchContext.js +3 -2
  175. package/lib/esm/features/store/objects/search/DocumentSearchContext.js.map +1 -1
  176. package/lib/esm/features/store/objects/search/DocumentSearchProvider.js +3 -0
  177. package/lib/esm/features/store/objects/search/DocumentSearchProvider.js.map +1 -1
  178. package/lib/esm/features/store/objects/selection/ObjectsActionContext.js +22 -109
  179. package/lib/esm/features/store/objects/selection/ObjectsActionContext.js.map +1 -1
  180. package/lib/esm/features/store/objects/selection/ObjectsActionContextClass.js +50 -0
  181. package/lib/esm/features/store/objects/selection/ObjectsActionContextClass.js.map +1 -0
  182. package/lib/esm/features/store/objects/selection/ObjectsActionHooks.js +27 -0
  183. package/lib/esm/features/store/objects/selection/ObjectsActionHooks.js.map +1 -0
  184. package/lib/esm/features/store/objects/selection/SelectionActions.js +10 -6
  185. package/lib/esm/features/store/objects/selection/SelectionActions.js.map +1 -1
  186. package/lib/esm/features/store/objects/selection/actions/AddToCollectionAction.js +17 -12
  187. package/lib/esm/features/store/objects/selection/actions/AddToCollectionAction.js.map +1 -1
  188. package/lib/esm/features/store/objects/selection/actions/ChangeTypeAction.js +9 -5
  189. package/lib/esm/features/store/objects/selection/actions/ChangeTypeAction.js.map +1 -1
  190. package/lib/esm/features/store/objects/selection/actions/ConfirmAction.js +4 -2
  191. package/lib/esm/features/store/objects/selection/actions/ConfirmAction.js.map +1 -1
  192. package/lib/esm/features/store/objects/selection/actions/DeleteObjectsAction.js +24 -23
  193. package/lib/esm/features/store/objects/selection/actions/DeleteObjectsAction.js.map +1 -1
  194. package/lib/esm/features/store/objects/selection/actions/ExportPropertiesAction.js +10 -5
  195. package/lib/esm/features/store/objects/selection/actions/ExportPropertiesAction.js.map +1 -1
  196. package/lib/esm/features/store/objects/selection/actions/RemoveFromCollectionAction.js +13 -9
  197. package/lib/esm/features/store/objects/selection/actions/RemoveFromCollectionAction.js.map +1 -1
  198. package/lib/esm/features/store/objects/selection/actions/StartWorkflowComponent.js +14 -8
  199. package/lib/esm/features/store/objects/selection/actions/StartWorkflowComponent.js.map +1 -1
  200. package/lib/esm/features/store/objects/upload/DocumentUploadModal.js +42 -39
  201. package/lib/esm/features/store/objects/upload/DocumentUploadModal.js.map +1 -1
  202. package/lib/esm/features/store/objects/upload/useSmartFileUploadProcessing.js +4 -2
  203. package/lib/esm/features/store/objects/upload/useSmartFileUploadProcessing.js.map +1 -1
  204. package/lib/esm/features/store/objects/upload/useUploadHandler.js +9 -7
  205. package/lib/esm/features/store/objects/upload/useUploadHandler.js.map +1 -1
  206. package/lib/esm/features/store/types/ContentObjectTypesSearch.js +6 -4
  207. package/lib/esm/features/store/types/ContentObjectTypesSearch.js.map +1 -1
  208. package/lib/esm/features/store/types/ContentObjectTypesTable.js +3 -1
  209. package/lib/esm/features/store/types/ContentObjectTypesTable.js.map +1 -1
  210. package/lib/esm/features/store/types/CreateOrUpdateTypeModal.js +6 -7
  211. package/lib/esm/features/store/types/CreateOrUpdateTypeModal.js.map +1 -1
  212. package/lib/esm/features/store/types/ObjectSchemaEditor.js +9 -7
  213. package/lib/esm/features/store/types/ObjectSchemaEditor.js.map +1 -1
  214. package/lib/esm/features/store/types/SelectContentType.js +9 -7
  215. package/lib/esm/features/store/types/SelectContentType.js.map +1 -1
  216. package/lib/esm/features/store/types/SelectContentTypeModal.js +5 -2
  217. package/lib/esm/features/store/types/SelectContentTypeModal.js.map +1 -1
  218. package/lib/esm/features/store/types/TableLayoutEditor.js +6 -4
  219. package/lib/esm/features/store/types/TableLayoutEditor.js.map +1 -1
  220. package/lib/esm/features/user/UserInfo.js +40 -50
  221. package/lib/esm/features/user/UserInfo.js.map +1 -1
  222. package/lib/esm/i18n/index.js +31 -0
  223. package/lib/esm/i18n/index.js.map +1 -0
  224. package/lib/esm/i18n/instance.js +46 -0
  225. package/lib/esm/i18n/instance.js.map +1 -0
  226. package/lib/esm/i18n/locales/ar.json +696 -0
  227. package/lib/esm/i18n/locales/de.json +664 -0
  228. package/lib/esm/i18n/locales/en.json +665 -0
  229. package/lib/esm/i18n/locales/es.json +670 -0
  230. package/lib/esm/i18n/locales/fr.json +672 -0
  231. package/lib/esm/i18n/locales/it.json +670 -0
  232. package/lib/esm/i18n/locales/ja.json +664 -0
  233. package/lib/esm/i18n/locales/ko.json +664 -0
  234. package/lib/esm/i18n/locales/pt.json +670 -0
  235. package/lib/esm/i18n/locales/ru.json +680 -0
  236. package/lib/esm/i18n/locales/tr.json +664 -0
  237. package/lib/esm/i18n/locales/zh-TW.json +664 -0
  238. package/lib/esm/i18n/locales/zh.json +664 -0
  239. package/lib/esm/layout/FullHeightLayout.js +3 -0
  240. package/lib/esm/layout/FullHeightLayout.js.map +1 -1
  241. package/lib/esm/layout/Navbar.js +3 -1
  242. package/lib/esm/layout/Navbar.js.map +1 -1
  243. package/lib/esm/layout/RegionTag.js +15 -0
  244. package/lib/esm/layout/RegionTag.js.map +1 -0
  245. package/lib/esm/layout/Sidebar.js +2 -2
  246. package/lib/esm/layout/Sidebar.js.map +1 -1
  247. package/lib/esm/layout/index.js +1 -0
  248. package/lib/esm/layout/index.js.map +1 -1
  249. package/lib/esm/router/HistoryNavigator.js +1 -1
  250. package/lib/esm/router/HistoryNavigator.js.map +1 -1
  251. package/lib/esm/router/Nav.js +5 -3
  252. package/lib/esm/router/Nav.js.map +1 -1
  253. package/lib/esm/router/NestedNavigationContext.js +4 -0
  254. package/lib/esm/router/NestedNavigationContext.js.map +1 -1
  255. package/lib/esm/router/NestedRouterProvider.js +3 -1
  256. package/lib/esm/router/NestedRouterProvider.js.map +1 -1
  257. package/lib/esm/router/Router.js +21 -6
  258. package/lib/esm/router/Router.js.map +1 -1
  259. package/lib/esm/session/UserSession.js +33 -4
  260. package/lib/esm/session/UserSession.js.map +1 -1
  261. package/lib/esm/session/UserSessionProvider.js +6 -13
  262. package/lib/esm/session/UserSessionProvider.js.map +1 -1
  263. package/lib/esm/session/auth/composable.js +1 -1
  264. package/lib/esm/session/auth/composable.js.map +1 -1
  265. package/lib/esm/session/auth/domainRouting.js +17 -0
  266. package/lib/esm/session/auth/domainRouting.js.map +1 -0
  267. package/lib/esm/session/auth/firebase.js +1 -1
  268. package/lib/esm/session/auth/firebase.js.map +1 -1
  269. package/lib/esm/session/auth/useCurrentTenant.js +3 -1
  270. package/lib/esm/session/auth/useCurrentTenant.js.map +1 -1
  271. package/lib/esm/shell/SplashScreen.js +3 -7
  272. package/lib/esm/shell/SplashScreen.js.map +1 -1
  273. package/lib/esm/shell/apps/StandaloneApp.js +5 -2
  274. package/lib/esm/shell/apps/StandaloneApp.js.map +1 -1
  275. package/lib/esm/shell/login/EnterpriseSigninButton.js +5 -3
  276. package/lib/esm/shell/login/EnterpriseSigninButton.js.map +1 -1
  277. package/lib/esm/shell/login/GitHubSignInButton.js +3 -7
  278. package/lib/esm/shell/login/GitHubSignInButton.js.map +1 -1
  279. package/lib/esm/shell/login/GoogleSignInButton.js +3 -1
  280. package/lib/esm/shell/login/GoogleSignInButton.js.map +1 -1
  281. package/lib/esm/shell/login/InviteAcceptModal.js +5 -2
  282. package/lib/esm/shell/login/InviteAcceptModal.js.map +1 -1
  283. package/lib/esm/shell/login/MicrosoftSigninButton.js +4 -6
  284. package/lib/esm/shell/login/MicrosoftSigninButton.js.map +1 -1
  285. package/lib/esm/shell/login/SigninScreen.js +6 -2
  286. package/lib/esm/shell/login/SigninScreen.js.map +1 -1
  287. package/lib/esm/shell/login/SignupForm.js +36 -34
  288. package/lib/esm/shell/login/SignupForm.js.map +1 -1
  289. package/lib/esm/shell/login/TerminalLogin.js +29 -22
  290. package/lib/esm/shell/login/TerminalLogin.js.map +1 -1
  291. package/lib/esm/shell/login/UserInfo.js +6 -4
  292. package/lib/esm/shell/login/UserInfo.js.map +1 -1
  293. package/lib/esm/shell/login/UserSessionMenu.js +3 -4
  294. package/lib/esm/shell/login/UserSessionMenu.js.map +1 -1
  295. package/lib/esm/widgets/index.js +0 -1
  296. package/lib/esm/widgets/index.js.map +1 -1
  297. package/lib/esm/widgets/json-view/JSONCode.js +1 -1
  298. package/lib/esm/widgets/json-view/JSONCode.js.map +1 -1
  299. package/lib/esm/widgets/json-view/JSONDisplay.js +6 -2
  300. package/lib/esm/widgets/json-view/JSONDisplay.js.map +1 -1
  301. package/lib/esm/widgets/json-view/JSONSwitcher.js +6 -0
  302. package/lib/esm/widgets/json-view/JSONSwitcher.js.map +1 -0
  303. package/lib/esm/widgets/json-view/JSONView.js +1 -1
  304. package/lib/esm/widgets/json-view/JSONView.js.map +1 -1
  305. package/lib/esm/widgets/json-view/index.js +1 -0
  306. package/lib/esm/widgets/json-view/index.js.map +1 -1
  307. package/lib/esm/widgets/markdown/ArtifactContentRenderer.js +6 -5
  308. package/lib/esm/widgets/markdown/ArtifactContentRenderer.js.map +1 -1
  309. package/lib/esm/widgets/markdown/CodeBlockContext.js +11 -0
  310. package/lib/esm/widgets/markdown/CodeBlockContext.js.map +1 -0
  311. package/lib/esm/widgets/markdown/MarkdownRenderer.js +11 -10
  312. package/lib/esm/widgets/markdown/MarkdownRenderer.js.map +1 -1
  313. package/lib/esm/widgets/markdown/codeBlockHandlers.js +11 -12
  314. package/lib/esm/widgets/markdown/codeBlockHandlers.js.map +1 -1
  315. package/lib/esm/widgets/markdown/index.js +10 -9
  316. package/lib/esm/widgets/markdown/index.js.map +1 -1
  317. package/lib/esm/widgets/markdown/remarkDirectiveHandler.js +0 -1
  318. package/lib/esm/widgets/markdown/remarkDirectiveHandler.js.map +1 -1
  319. package/lib/esm/widgets/schema-editor/ManagedSchema.js +6 -5
  320. package/lib/esm/widgets/schema-editor/ManagedSchema.js.map +1 -1
  321. package/lib/esm/widgets/schema-editor/editor/PropertyEditor.js +7 -3
  322. package/lib/esm/widgets/schema-editor/editor/PropertyEditor.js.map +1 -1
  323. package/lib/esm/widgets/schema-editor/editor/SchemaEditor.js +3 -1
  324. package/lib/esm/widgets/schema-editor/editor/SchemaEditor.js.map +1 -1
  325. package/lib/esm/widgets/upload/DropZone.js +9 -11
  326. package/lib/esm/widgets/upload/DropZone.js.map +1 -1
  327. package/lib/esm/widgets/upload/UploadResultCategory.js +3 -1
  328. package/lib/esm/widgets/upload/UploadResultCategory.js.map +1 -1
  329. package/lib/esm/widgets/upload/UploadSummary.js +3 -1
  330. package/lib/esm/widgets/upload/UploadSummary.js.map +1 -1
  331. package/lib/tsconfig.tsbuildinfo +1 -1
  332. package/lib/types/core/components/SelectList.d.ts.map +1 -1
  333. package/lib/types/core/components/SidePanel.d.ts +4 -2
  334. package/lib/types/core/components/SidePanel.d.ts.map +1 -1
  335. package/lib/types/core/components/index.d.ts +0 -5
  336. package/lib/types/core/components/index.d.ts.map +1 -1
  337. package/lib/types/core/components/shadcn/badge.d.ts +2 -2
  338. package/lib/types/core/components/shadcn/breadcrumb.d.ts +1 -1
  339. package/lib/types/core/components/shadcn/breadcrumb.d.ts.map +1 -1
  340. package/lib/types/core/components/shadcn/button.d.ts.map +1 -1
  341. package/lib/types/core/components/shadcn/collaspible.d.ts +6 -0
  342. package/lib/types/core/components/shadcn/collaspible.d.ts.map +1 -0
  343. package/lib/types/core/components/shadcn/dropdown.d.ts +51 -0
  344. package/lib/types/core/components/shadcn/dropdown.d.ts.map +1 -0
  345. package/lib/types/core/components/shadcn/filters/comboBox/DateCombobox.d.ts.map +1 -1
  346. package/lib/types/core/components/shadcn/filters/comboBox/SelectCombobox.d.ts.map +1 -1
  347. package/lib/types/core/components/shadcn/filters/filter/dateFilter.d.ts.map +1 -1
  348. package/lib/types/core/components/shadcn/filters/filterBar.d.ts.map +1 -1
  349. package/lib/types/core/components/shadcn/index.d.ts +4 -0
  350. package/lib/types/core/components/shadcn/index.d.ts.map +1 -1
  351. package/lib/types/core/components/shadcn/input.d.ts +1 -1
  352. package/lib/types/core/components/shadcn/modal/ConfirmModal.d.ts +2 -1
  353. package/lib/types/core/components/shadcn/modal/ConfirmModal.d.ts.map +1 -1
  354. package/lib/types/core/components/shadcn/modal/DeleteModal.d.ts.map +1 -1
  355. package/lib/types/core/components/shadcn/popover.d.ts +11 -3
  356. package/lib/types/core/components/shadcn/popover.d.ts.map +1 -1
  357. package/lib/types/core/components/shadcn/radioGroup.d.ts +26 -0
  358. package/lib/types/core/components/shadcn/radioGroup.d.ts.map +1 -0
  359. package/lib/types/core/components/shadcn/switch.d.ts +12 -0
  360. package/lib/types/core/components/shadcn/switch.d.ts.map +1 -0
  361. package/lib/types/core/components/shadcn/tabs.d.ts +4 -2
  362. package/lib/types/core/components/shadcn/tabs.d.ts.map +1 -1
  363. package/lib/types/core/components/shadcn/theme/ThemeSwitcher.d.ts +8 -2
  364. package/lib/types/core/components/shadcn/theme/ThemeSwitcher.d.ts.map +1 -1
  365. package/lib/types/core/components/toast/NotificationPanel.d.ts.map +1 -1
  366. package/lib/types/core/hooks/PortalContainerProvider.d.ts +1 -0
  367. package/lib/types/core/hooks/PortalContainerProvider.d.ts.map +1 -1
  368. package/lib/types/env/index.d.ts +12 -3
  369. package/lib/types/env/index.d.ts.map +1 -1
  370. package/lib/types/features/agent/PayloadBuilder.d.ts +31 -3
  371. package/lib/types/features/agent/PayloadBuilder.d.ts.map +1 -1
  372. package/lib/types/features/agent/chat/AgentRightPanel.d.ts +50 -0
  373. package/lib/types/features/agent/chat/AgentRightPanel.d.ts.map +1 -0
  374. package/lib/types/features/agent/chat/ArtifactsTab.d.ts +9 -0
  375. package/lib/types/features/agent/chat/ArtifactsTab.d.ts.map +1 -0
  376. package/lib/types/features/agent/chat/AskUserWidget.d.ts.map +1 -1
  377. package/lib/types/features/agent/chat/DocumentPanel.d.ts.map +1 -1
  378. package/lib/types/features/agent/chat/ImageLightbox.d.ts.map +1 -1
  379. package/lib/types/features/agent/chat/ModernAgentConversation.d.ts +22 -9
  380. package/lib/types/features/agent/chat/ModernAgentConversation.d.ts.map +1 -1
  381. package/lib/types/features/agent/chat/ModernAgentOutput/AllMessagesMixed.d.ts +3 -1
  382. package/lib/types/features/agent/chat/ModernAgentOutput/AllMessagesMixed.d.ts.map +1 -1
  383. package/lib/types/features/agent/chat/ModernAgentOutput/BatchProgressPanel.d.ts.map +1 -1
  384. package/lib/types/features/agent/chat/ModernAgentOutput/Header.d.ts +13 -4
  385. package/lib/types/features/agent/chat/ModernAgentOutput/Header.d.ts.map +1 -1
  386. package/lib/types/features/agent/chat/ModernAgentOutput/InlineSlidingPlanPanel.d.ts +1 -1
  387. package/lib/types/features/agent/chat/ModernAgentOutput/InlineSlidingPlanPanel.d.ts.map +1 -1
  388. package/lib/types/features/agent/chat/ModernAgentOutput/MessageInput.d.ts.map +1 -1
  389. package/lib/types/features/agent/chat/ModernAgentOutput/MessageItem.d.ts.map +1 -1
  390. package/lib/types/features/agent/chat/ModernAgentOutput/PlanPanel.d.ts.map +1 -1
  391. package/lib/types/features/agent/chat/ModernAgentOutput/SlidingPlanPanel.d.ts.map +1 -1
  392. package/lib/types/features/agent/chat/ModernAgentOutput/StreamingMessage.d.ts +3 -1
  393. package/lib/types/features/agent/chat/ModernAgentOutput/StreamingMessage.d.ts.map +1 -1
  394. package/lib/types/features/agent/chat/ModernAgentOutput/ToolCallGroup.d.ts +5 -1
  395. package/lib/types/features/agent/chat/ModernAgentOutput/ToolCallGroup.d.ts.map +1 -1
  396. package/lib/types/features/agent/chat/ModernAgentOutput/WorkstreamTabs.d.ts.map +1 -1
  397. package/lib/types/features/agent/chat/ModernAgentOutput/utils.d.ts +16 -1
  398. package/lib/types/features/agent/chat/ModernAgentOutput/utils.d.ts.map +1 -1
  399. package/lib/types/features/agent/chat/SlidingThinkingIndicator.d.ts.map +1 -1
  400. package/lib/types/features/agent/chat/VegaLiteChart.d.ts.map +1 -1
  401. package/lib/types/features/agent/chat/hooks/useAgentPlans.d.ts.map +1 -1
  402. package/lib/types/features/agent/chat/hooks/useAgentStream.d.ts +5 -3
  403. package/lib/types/features/agent/chat/hooks/useAgentStream.d.ts.map +1 -1
  404. package/lib/types/features/agent/chat/hooks/useArtifacts.d.ts +18 -0
  405. package/lib/types/features/agent/chat/hooks/useArtifacts.d.ts.map +1 -0
  406. package/lib/types/features/agent/chat/hooks/useDocumentPanel.d.ts.map +1 -1
  407. package/lib/types/features/agent/chat/hooks/useFileProcessing.d.ts +4 -4
  408. package/lib/types/features/agent/chat/hooks/useFileProcessing.d.ts.map +1 -1
  409. package/lib/types/features/agent/chat/types/document.d.ts +2 -0
  410. package/lib/types/features/agent/chat/types/document.d.ts.map +1 -1
  411. package/lib/types/features/errors/PanelErrorBoundary.d.ts.map +1 -1
  412. package/lib/types/features/facets/AgentRunnerFacetsNav.d.ts +2 -1
  413. package/lib/types/features/facets/AgentRunnerFacetsNav.d.ts.map +1 -1
  414. package/lib/types/features/facets/RunsFacetsNav.d.ts.map +1 -1
  415. package/lib/types/features/facets/index.d.ts +1 -1
  416. package/lib/types/features/facets/index.d.ts.map +1 -1
  417. package/lib/types/features/layout/GenericPageNavHeader.d.ts +2 -2
  418. package/lib/types/features/layout/GenericPageNavHeader.d.ts.map +1 -1
  419. package/lib/types/features/layout/NotFoundView.d.ts.map +1 -1
  420. package/lib/types/features/magic-pdf/AnnotatedImageSlider.d.ts.map +1 -1
  421. package/lib/types/features/magic-pdf/DownloadPopover.d.ts.map +1 -1
  422. package/lib/types/features/magic-pdf/MagicPdfView.d.ts.map +1 -1
  423. package/lib/types/features/pdf-viewer/PdfPageSlider.d.ts.map +1 -1
  424. package/lib/types/features/pdf-viewer/SimplePdfViewer.d.ts.map +1 -1
  425. package/lib/types/features/permissions/UserPermissionsProvider.d.ts.map +1 -1
  426. package/lib/types/features/store/collections/BrowseCollectionView.d.ts.map +1 -1
  427. package/lib/types/features/store/collections/CollectionsTable.d.ts +4 -0
  428. package/lib/types/features/store/collections/CollectionsTable.d.ts.map +1 -1
  429. package/lib/types/features/store/collections/CreateCollection.d.ts.map +1 -1
  430. package/lib/types/features/store/collections/EditCollectionView.d.ts.map +1 -1
  431. package/lib/types/features/store/collections/SelectCollection.d.ts.map +1 -1
  432. package/lib/types/features/store/collections/SharedPropsEditor.d.ts.map +1 -1
  433. package/lib/types/features/store/collections/SyncMemberHeadsToggle.d.ts.map +1 -1
  434. package/lib/types/features/store/objects/DocumentPreviewPanel.d.ts.map +1 -1
  435. package/lib/types/features/store/objects/DocumentSearchResults.d.ts.map +1 -1
  436. package/lib/types/features/store/objects/DocumentTable.d.ts.map +1 -1
  437. package/lib/types/features/store/objects/ExportPropertiesModal.d.ts.map +1 -1
  438. package/lib/types/features/store/objects/components/ContentDispositionButton.d.ts.map +1 -1
  439. package/lib/types/features/store/objects/components/ContentOverview.d.ts.map +1 -1
  440. package/lib/types/features/store/objects/components/DocumentIcon.d.ts +2 -1
  441. package/lib/types/features/store/objects/components/DocumentIcon.d.ts.map +1 -1
  442. package/lib/types/features/store/objects/components/PropertiesEditorModal.d.ts.map +1 -1
  443. package/lib/types/features/store/objects/components/SaveVersionConfirmModal.d.ts.map +1 -1
  444. package/lib/types/features/store/objects/components/SelectDocument.d.ts +3 -1
  445. package/lib/types/features/store/objects/components/SelectDocument.d.ts.map +1 -1
  446. package/lib/types/features/store/objects/components/TextEditorPanel.d.ts +10 -0
  447. package/lib/types/features/store/objects/components/TextEditorPanel.d.ts.map +1 -0
  448. package/lib/types/features/store/objects/components/VectorSearchWidget.d.ts.map +1 -1
  449. package/lib/types/features/store/objects/components/useContentPanelHooks.d.ts.map +1 -1
  450. package/lib/types/features/store/objects/components/useDownloadFile.d.ts.map +1 -1
  451. package/lib/types/features/store/objects/layout/documentLayout.d.ts +3 -2
  452. package/lib/types/features/store/objects/layout/documentLayout.d.ts.map +1 -1
  453. package/lib/types/features/store/objects/layout/renderers.d.ts.map +1 -1
  454. package/lib/types/features/store/objects/search/DocumentSearchContext.d.ts.map +1 -1
  455. package/lib/types/features/store/objects/search/DocumentSearchProvider.d.ts.map +1 -1
  456. package/lib/types/features/store/objects/selection/ObjectsActionContext.d.ts +3 -20
  457. package/lib/types/features/store/objects/selection/ObjectsActionContext.d.ts.map +1 -1
  458. package/lib/types/features/store/objects/selection/ObjectsActionContextClass.d.ts +16 -0
  459. package/lib/types/features/store/objects/selection/ObjectsActionContextClass.d.ts.map +1 -0
  460. package/lib/types/features/store/objects/selection/ObjectsActionHooks.d.ts +7 -0
  461. package/lib/types/features/store/objects/selection/ObjectsActionHooks.d.ts.map +1 -0
  462. package/lib/types/features/store/objects/selection/ObjectsActionSpec.d.ts +4 -1
  463. package/lib/types/features/store/objects/selection/ObjectsActionSpec.d.ts.map +1 -1
  464. package/lib/types/features/store/objects/selection/SelectionActions.d.ts +6 -1
  465. package/lib/types/features/store/objects/selection/SelectionActions.d.ts.map +1 -1
  466. package/lib/types/features/store/objects/selection/actions/AddToCollectionAction.d.ts.map +1 -1
  467. package/lib/types/features/store/objects/selection/actions/ChangeTypeAction.d.ts.map +1 -1
  468. package/lib/types/features/store/objects/selection/actions/ConfirmAction.d.ts +1 -1
  469. package/lib/types/features/store/objects/selection/actions/ConfirmAction.d.ts.map +1 -1
  470. package/lib/types/features/store/objects/selection/actions/DeleteObjectsAction.d.ts.map +1 -1
  471. package/lib/types/features/store/objects/selection/actions/ExportPropertiesAction.d.ts.map +1 -1
  472. package/lib/types/features/store/objects/selection/actions/RemoveFromCollectionAction.d.ts.map +1 -1
  473. package/lib/types/features/store/objects/selection/actions/StartWorkflowComponent.d.ts.map +1 -1
  474. package/lib/types/features/store/objects/upload/DocumentUploadModal.d.ts.map +1 -1
  475. package/lib/types/features/store/objects/upload/useSmartFileUploadProcessing.d.ts.map +1 -1
  476. package/lib/types/features/store/objects/upload/useUploadHandler.d.ts.map +1 -1
  477. package/lib/types/features/store/types/ContentObjectTypesSearch.d.ts.map +1 -1
  478. package/lib/types/features/store/types/ContentObjectTypesTable.d.ts.map +1 -1
  479. package/lib/types/features/store/types/CreateOrUpdateTypeModal.d.ts +2 -1
  480. package/lib/types/features/store/types/CreateOrUpdateTypeModal.d.ts.map +1 -1
  481. package/lib/types/features/store/types/ObjectSchemaEditor.d.ts.map +1 -1
  482. package/lib/types/features/store/types/SelectContentType.d.ts.map +1 -1
  483. package/lib/types/features/store/types/SelectContentTypeModal.d.ts.map +1 -1
  484. package/lib/types/features/store/types/TableLayoutEditor.d.ts.map +1 -1
  485. package/lib/types/features/user/UserInfo.d.ts +2 -2
  486. package/lib/types/features/user/UserInfo.d.ts.map +1 -1
  487. package/lib/types/i18n/index.d.ts +14 -0
  488. package/lib/types/i18n/index.d.ts.map +1 -0
  489. package/lib/types/i18n/instance.d.ts +5 -0
  490. package/lib/types/i18n/instance.d.ts.map +1 -0
  491. package/lib/types/layout/FullHeightLayout.d.ts +3 -0
  492. package/lib/types/layout/FullHeightLayout.d.ts.map +1 -1
  493. package/lib/types/layout/Navbar.d.ts.map +1 -1
  494. package/lib/types/layout/RegionTag.d.ts +4 -0
  495. package/lib/types/layout/RegionTag.d.ts.map +1 -0
  496. package/lib/types/layout/Sidebar.d.ts +2 -1
  497. package/lib/types/layout/Sidebar.d.ts.map +1 -1
  498. package/lib/types/layout/index.d.ts +1 -0
  499. package/lib/types/layout/index.d.ts.map +1 -1
  500. package/lib/types/router/Nav.d.ts +5 -1
  501. package/lib/types/router/Nav.d.ts.map +1 -1
  502. package/lib/types/router/NestedNavigationContext.d.ts.map +1 -1
  503. package/lib/types/router/NestedRouterProvider.d.ts.map +1 -1
  504. package/lib/types/router/Router.d.ts +2 -0
  505. package/lib/types/router/Router.d.ts.map +1 -1
  506. package/lib/types/session/UserSession.d.ts +1 -0
  507. package/lib/types/session/UserSession.d.ts.map +1 -1
  508. package/lib/types/session/UserSessionProvider.d.ts +0 -1
  509. package/lib/types/session/UserSessionProvider.d.ts.map +1 -1
  510. package/lib/types/session/auth/domainRouting.d.ts +3 -0
  511. package/lib/types/session/auth/domainRouting.d.ts.map +1 -0
  512. package/lib/types/session/auth/useCurrentTenant.d.ts.map +1 -1
  513. package/lib/types/shell/SplashScreen.d.ts.map +1 -1
  514. package/lib/types/shell/apps/StandaloneApp.d.ts.map +1 -1
  515. package/lib/types/shell/login/EnterpriseSigninButton.d.ts.map +1 -1
  516. package/lib/types/shell/login/GitHubSignInButton.d.ts.map +1 -1
  517. package/lib/types/shell/login/GoogleSignInButton.d.ts.map +1 -1
  518. package/lib/types/shell/login/InviteAcceptModal.d.ts.map +1 -1
  519. package/lib/types/shell/login/MicrosoftSigninButton.d.ts +1 -1
  520. package/lib/types/shell/login/MicrosoftSigninButton.d.ts.map +1 -1
  521. package/lib/types/shell/login/SigninScreen.d.ts.map +1 -1
  522. package/lib/types/shell/login/SignupForm.d.ts.map +1 -1
  523. package/lib/types/shell/login/TerminalLogin.d.ts.map +1 -1
  524. package/lib/types/shell/login/UserInfo.d.ts.map +1 -1
  525. package/lib/types/shell/login/UserSessionMenu.d.ts.map +1 -1
  526. package/lib/types/widgets/index.d.ts +0 -1
  527. package/lib/types/widgets/index.d.ts.map +1 -1
  528. package/lib/types/widgets/json-view/JSONDisplay.d.ts.map +1 -1
  529. package/lib/types/widgets/json-view/JSONSwitcher.d.ts +6 -0
  530. package/lib/types/widgets/json-view/JSONSwitcher.d.ts.map +1 -0
  531. package/lib/types/widgets/json-view/index.d.ts +1 -0
  532. package/lib/types/widgets/json-view/index.d.ts.map +1 -1
  533. package/lib/types/widgets/markdown/ArtifactContentRenderer.d.ts.map +1 -1
  534. package/lib/types/widgets/markdown/CodeBlockContext.d.ts +21 -0
  535. package/lib/types/widgets/markdown/CodeBlockContext.d.ts.map +1 -0
  536. package/lib/types/widgets/markdown/MarkdownRenderer.d.ts.map +1 -1
  537. package/lib/types/widgets/markdown/codeBlockHandlers.d.ts +0 -12
  538. package/lib/types/widgets/markdown/codeBlockHandlers.d.ts.map +1 -1
  539. package/lib/types/widgets/markdown/index.d.ts +10 -9
  540. package/lib/types/widgets/markdown/index.d.ts.map +1 -1
  541. package/lib/types/widgets/schema-editor/ManagedSchema.d.ts +1 -1
  542. package/lib/types/widgets/schema-editor/ManagedSchema.d.ts.map +1 -1
  543. package/lib/types/widgets/schema-editor/editor/PropertyEditor.d.ts.map +1 -1
  544. package/lib/types/widgets/schema-editor/editor/SchemaEditor.d.ts.map +1 -1
  545. package/lib/types/widgets/upload/DropZone.d.ts.map +1 -1
  546. package/lib/types/widgets/upload/UploadResultCategory.d.ts.map +1 -1
  547. package/lib/types/widgets/upload/UploadSummary.d.ts.map +1 -1
  548. package/lib/vertesia-ui-core.js +1 -1
  549. package/lib/vertesia-ui-core.js.map +1 -1
  550. package/lib/vertesia-ui-env.js +1 -1
  551. package/lib/vertesia-ui-env.js.map +1 -1
  552. package/lib/vertesia-ui-features.js +1 -1
  553. package/lib/vertesia-ui-features.js.map +1 -1
  554. package/lib/vertesia-ui-i18n.js +2 -0
  555. package/lib/vertesia-ui-i18n.js.map +1 -0
  556. package/lib/vertesia-ui-layout.js +1 -1
  557. package/lib/vertesia-ui-layout.js.map +1 -1
  558. package/lib/vertesia-ui-router.js +1 -1
  559. package/lib/vertesia-ui-router.js.map +1 -1
  560. package/lib/vertesia-ui-session.js +1 -1
  561. package/lib/vertesia-ui-session.js.map +1 -1
  562. package/lib/vertesia-ui-shell.js +1 -1
  563. package/lib/vertesia-ui-shell.js.map +1 -1
  564. package/lib/vertesia-ui-widgets.js +1 -1
  565. package/lib/vertesia-ui-widgets.js.map +1 -1
  566. package/llms.txt +124 -4
  567. package/package.json +50 -22
  568. package/src/core/components/SelectList.tsx +3 -1
  569. package/src/core/components/SidePanel.tsx +5 -4
  570. package/src/core/components/index.ts +0 -5
  571. package/src/core/components/shadcn/breadcrumb.tsx +16 -9
  572. package/src/core/components/shadcn/button.tsx +5 -3
  573. package/src/core/components/shadcn/collaspible.tsx +33 -0
  574. package/src/core/components/shadcn/dropdown.tsx +325 -0
  575. package/src/core/components/shadcn/filters/comboBox/DateCombobox.tsx +3 -1
  576. package/src/core/components/shadcn/filters/comboBox/SelectCombobox.tsx +3 -1
  577. package/src/core/components/shadcn/filters/comboBox/StringListCombobox.tsx +1 -1
  578. package/src/core/components/shadcn/filters/filter/StringListFilter.tsx +1 -1
  579. package/src/core/components/shadcn/filters/filter/dateFilter.tsx +5 -3
  580. package/src/core/components/shadcn/filters/filterBar.tsx +8 -5
  581. package/src/core/components/shadcn/index.ts +5 -1
  582. package/src/core/components/shadcn/modal/ConfirmModal.tsx +7 -3
  583. package/src/core/components/shadcn/modal/DeleteModal.tsx +5 -3
  584. package/src/core/components/shadcn/popover.tsx +12 -7
  585. package/src/core/components/shadcn/radioGroup.tsx +100 -0
  586. package/src/core/components/shadcn/selectBox.tsx +1 -1
  587. package/src/core/components/shadcn/switch.tsx +60 -0
  588. package/src/core/components/shadcn/tabs.tsx +29 -27
  589. package/src/core/components/shadcn/theme/ThemeSwitcher.tsx +19 -10
  590. package/src/core/components/shadcn/tooltip.tsx +1 -1
  591. package/src/core/components/toast/NotificationPanel.tsx +38 -44
  592. package/src/core/hooks/PortalContainerProvider.tsx +11 -3
  593. package/src/css/base.css +31 -0
  594. package/src/css/color.css +136 -0
  595. package/src/css/custom-tooltips.css +64 -0
  596. package/src/css/index.css +27 -0
  597. package/src/css/theme.css +86 -0
  598. package/src/css/typography.css +88 -0
  599. package/src/css/utilities.css +72 -0
  600. package/src/env/index.ts +24 -13
  601. package/src/features/agent/PayloadBuilder.tsx +100 -13
  602. package/src/features/agent/chat/AgentRightPanel.tsx +424 -0
  603. package/src/features/agent/chat/ArtifactsTab.tsx +197 -0
  604. package/src/features/agent/chat/AskUserWidget.tsx +14 -8
  605. package/src/features/agent/chat/DocumentPanel.tsx +24 -9
  606. package/src/features/agent/chat/ImageLightbox.tsx +6 -3
  607. package/src/features/agent/chat/ModernAgentConversation.tsx +538 -364
  608. package/src/features/agent/chat/ModernAgentOutput/AllMessagesMixed.tsx +151 -55
  609. package/src/features/agent/chat/ModernAgentOutput/BatchProgressPanel.tsx +6 -4
  610. package/src/features/agent/chat/ModernAgentOutput/Header.tsx +183 -105
  611. package/src/features/agent/chat/ModernAgentOutput/InlineSlidingPlanPanel.tsx +21 -31
  612. package/src/features/agent/chat/ModernAgentOutput/MessageInput.tsx +119 -114
  613. package/src/features/agent/chat/ModernAgentOutput/MessageItem.tsx +26 -9
  614. package/src/features/agent/chat/ModernAgentOutput/PlanPanel.tsx +9 -7
  615. package/src/features/agent/chat/ModernAgentOutput/SlidingPlanPanel.tsx +15 -13
  616. package/src/features/agent/chat/ModernAgentOutput/StreamingMessage.tsx +8 -3
  617. package/src/features/agent/chat/ModernAgentOutput/ToolCallGroup.tsx +149 -49
  618. package/src/features/agent/chat/ModernAgentOutput/WorkstreamTabs.tsx +9 -5
  619. package/src/features/agent/chat/ModernAgentOutput/utils.test.ts +229 -0
  620. package/src/features/agent/chat/ModernAgentOutput/utils.ts +202 -97
  621. package/src/features/agent/chat/SlidingThinkingIndicator.tsx +5 -3
  622. package/src/features/agent/chat/VegaLiteChart.tsx +20 -8
  623. package/src/features/agent/chat/hooks/useAgentPlans.ts +3 -9
  624. package/src/features/agent/chat/hooks/useAgentStream.ts +86 -19
  625. package/src/features/agent/chat/hooks/useArtifacts.ts +151 -0
  626. package/src/features/agent/chat/hooks/useDocumentPanel.ts +65 -5
  627. package/src/features/agent/chat/hooks/useFileProcessing.ts +14 -13
  628. package/src/features/agent/chat/types/document.ts +2 -0
  629. package/src/features/errors/PanelErrorBoundary.tsx +5 -3
  630. package/src/features/facets/AgentRunnerFacetsNav.tsx +54 -35
  631. package/src/features/facets/RunsFacetsNav.tsx +15 -7
  632. package/src/features/facets/index.ts +1 -1
  633. package/src/features/layout/GenericPageNavHeader.tsx +64 -41
  634. package/src/features/layout/NotFoundView.tsx +4 -1
  635. package/src/features/magic-pdf/AnnotatedImageSlider.tsx +12 -8
  636. package/src/features/magic-pdf/DownloadPopover.tsx +11 -10
  637. package/src/features/magic-pdf/MagicPdfView.tsx +10 -7
  638. package/src/features/pdf-viewer/PdfPageSlider.tsx +10 -6
  639. package/src/features/pdf-viewer/SimplePdfViewer.tsx +5 -3
  640. package/src/features/permissions/UserPermissionsProvider.tsx +3 -1
  641. package/src/features/store/collections/BrowseCollectionView.tsx +11 -1
  642. package/src/features/store/collections/CollectionsTable.tsx +20 -12
  643. package/src/features/store/collections/CreateCollection.tsx +45 -40
  644. package/src/features/store/collections/EditCollectionView.tsx +31 -28
  645. package/src/features/store/collections/SelectCollection.tsx +50 -14
  646. package/src/features/store/collections/SharedPropsEditor.tsx +7 -5
  647. package/src/features/store/collections/SyncMemberHeadsToggle.tsx +6 -4
  648. package/src/features/store/objects/DocumentPreviewPanel.tsx +30 -28
  649. package/src/features/store/objects/DocumentSearchResults.tsx +31 -21
  650. package/src/features/store/objects/DocumentTable.tsx +11 -5
  651. package/src/features/store/objects/ExportPropertiesModal.tsx +8 -5
  652. package/src/features/store/objects/components/ContentDispositionButton.tsx +3 -1
  653. package/src/features/store/objects/components/ContentOverview.tsx +96 -50
  654. package/src/features/store/objects/components/DocumentIcon.tsx +11 -3
  655. package/src/features/store/objects/components/PropertiesEditorModal.tsx +14 -12
  656. package/src/features/store/objects/components/SaveVersionConfirmModal.tsx +24 -37
  657. package/src/features/store/objects/components/SelectDocument.tsx +15 -6
  658. package/src/features/store/objects/components/TextEditorPanel.tsx +143 -0
  659. package/src/features/store/objects/components/VectorSearchWidget.tsx +11 -8
  660. package/src/features/store/objects/components/useContentPanelHooks.ts +4 -2
  661. package/src/features/store/objects/components/useDownloadFile.ts +12 -10
  662. package/src/features/store/objects/layout/documentLayout.tsx +16 -6
  663. package/src/features/store/objects/layout/renderers.tsx +27 -1
  664. package/src/features/store/objects/search/DocumentSearchContext.ts +3 -2
  665. package/src/features/store/objects/search/DocumentSearchProvider.tsx +3 -0
  666. package/src/features/store/objects/selection/ObjectsActionContext.tsx +26 -128
  667. package/src/features/store/objects/selection/ObjectsActionContextClass.ts +59 -0
  668. package/src/features/store/objects/selection/ObjectsActionHooks.ts +33 -0
  669. package/src/features/store/objects/selection/ObjectsActionSpec.ts +4 -1
  670. package/src/features/store/objects/selection/SelectionActions.tsx +14 -6
  671. package/src/features/store/objects/selection/actions/AddToCollectionAction.tsx +19 -14
  672. package/src/features/store/objects/selection/actions/ChangeTypeAction.tsx +9 -5
  673. package/src/features/store/objects/selection/actions/ConfirmAction.tsx +4 -3
  674. package/src/features/store/objects/selection/actions/DeleteObjectsAction.tsx +24 -23
  675. package/src/features/store/objects/selection/actions/ExportPropertiesAction.tsx +10 -5
  676. package/src/features/store/objects/selection/actions/RemoveFromCollectionAction.tsx +13 -9
  677. package/src/features/store/objects/selection/actions/StartWorkflowComponent.tsx +14 -8
  678. package/src/features/store/objects/upload/DocumentUploadModal.tsx +56 -55
  679. package/src/features/store/objects/upload/useSmartFileUploadProcessing.ts +4 -2
  680. package/src/features/store/objects/upload/useUploadHandler.ts +9 -7
  681. package/src/features/store/types/ContentObjectTypesSearch.tsx +10 -8
  682. package/src/features/store/types/ContentObjectTypesTable.tsx +6 -4
  683. package/src/features/store/types/CreateOrUpdateTypeModal.tsx +11 -12
  684. package/src/features/store/types/ObjectSchemaEditor.tsx +11 -9
  685. package/src/features/store/types/SelectContentType.tsx +15 -13
  686. package/src/features/store/types/SelectContentTypeModal.tsx +16 -13
  687. package/src/features/store/types/TableLayoutEditor.tsx +16 -12
  688. package/src/features/user/UserInfo.tsx +47 -56
  689. package/src/i18n/index.tsx +45 -0
  690. package/src/i18n/instance.ts +49 -0
  691. package/src/i18n/locales/ar.json +696 -0
  692. package/src/i18n/locales/de.json +664 -0
  693. package/src/i18n/locales/en.json +665 -0
  694. package/src/i18n/locales/es.json +670 -0
  695. package/src/i18n/locales/fr.json +672 -0
  696. package/src/i18n/locales/it.json +670 -0
  697. package/src/i18n/locales/ja.json +664 -0
  698. package/src/i18n/locales/ko.json +664 -0
  699. package/src/i18n/locales/pt.json +670 -0
  700. package/src/i18n/locales/ru.json +680 -0
  701. package/src/i18n/locales/tr.json +664 -0
  702. package/src/i18n/locales/zh-TW.json +664 -0
  703. package/src/i18n/locales/zh.json +664 -0
  704. package/src/layout/FullHeightLayout.tsx +8 -0
  705. package/src/layout/Navbar.tsx +4 -2
  706. package/src/layout/RegionTag.tsx +25 -0
  707. package/src/layout/Sidebar.tsx +4 -3
  708. package/src/layout/index.ts +2 -1
  709. package/src/router/HistoryNavigator.ts +10 -10
  710. package/src/router/Nav.tsx +9 -3
  711. package/src/router/NestedNavigationContext.tsx +4 -0
  712. package/src/router/NestedRouterProvider.tsx +3 -1
  713. package/src/router/Router.tsx +23 -7
  714. package/src/session/UserSession.ts +34 -5
  715. package/src/session/UserSessionProvider.tsx +6 -14
  716. package/src/session/auth/composable.ts +1 -1
  717. package/src/session/auth/domainRouting.test.ts +110 -0
  718. package/src/session/auth/domainRouting.ts +22 -0
  719. package/src/session/auth/firebase.ts +1 -1
  720. package/src/session/auth/useCurrentTenant.ts +3 -1
  721. package/src/shell/SplashScreen.tsx +22 -26
  722. package/src/shell/apps/StandaloneApp.tsx +9 -6
  723. package/src/shell/login/EnterpriseSigninButton.tsx +6 -4
  724. package/src/shell/login/GitHubSignInButton.tsx +3 -7
  725. package/src/shell/login/GoogleSignInButton.tsx +3 -1
  726. package/src/shell/login/InviteAcceptModal.tsx +5 -2
  727. package/src/shell/login/MicrosoftSigninButton.tsx +4 -6
  728. package/src/shell/login/SigninScreen.tsx +18 -13
  729. package/src/shell/login/SignupForm.tsx +46 -46
  730. package/src/shell/login/TerminalLogin.tsx +36 -33
  731. package/src/shell/login/UserInfo.tsx +15 -13
  732. package/src/shell/login/UserSessionMenu.tsx +28 -31
  733. package/src/widgets/index.ts +0 -1
  734. package/src/widgets/json-view/JSONCode.tsx +1 -1
  735. package/src/widgets/json-view/JSONDisplay.tsx +8 -3
  736. package/src/widgets/json-view/JSONSwitcher.tsx +24 -0
  737. package/src/widgets/json-view/JSONView.tsx +1 -1
  738. package/src/widgets/json-view/index.ts +1 -0
  739. package/src/widgets/markdown/ArtifactContentRenderer.tsx +15 -7
  740. package/src/widgets/markdown/CodeBlockContext.tsx +34 -0
  741. package/src/widgets/markdown/MarkdownRenderer.tsx +14 -13
  742. package/src/widgets/markdown/codeBlockHandlers.tsx +17 -36
  743. package/src/widgets/markdown/index.ts +27 -34
  744. package/src/widgets/markdown/remarkDirectiveHandler.ts +1 -1
  745. package/src/widgets/schema-editor/ManagedSchema.ts +6 -5
  746. package/src/widgets/schema-editor/editor/PropertyEditor.tsx +7 -3
  747. package/src/widgets/schema-editor/editor/SchemaEditor.tsx +3 -1
  748. package/src/widgets/upload/DropZone.tsx +10 -13
  749. package/src/widgets/upload/UploadResultCategory.tsx +3 -1
  750. package/src/widgets/upload/UploadSummary.tsx +13 -11
  751. package/tsconfig.dist.json +1 -1
  752. package/lib/esm/core/components/Dropdown.js +0 -16
  753. package/lib/esm/core/components/Dropdown.js.map +0 -1
  754. package/lib/esm/core/components/DropdownList.js +0 -9
  755. package/lib/esm/core/components/DropdownList.js.map +0 -1
  756. package/lib/esm/core/components/RadioGroup.js +0 -34
  757. package/lib/esm/core/components/RadioGroup.js.map +0 -1
  758. package/lib/esm/core/components/SelectStack.js +0 -8
  759. package/lib/esm/core/components/SelectStack.js.map +0 -1
  760. package/lib/esm/core/components/Switch.js +0 -12
  761. package/lib/esm/core/components/Switch.js.map +0 -1
  762. package/lib/esm/widgets/popover/Popover.js +0 -73
  763. package/lib/esm/widgets/popover/Popover.js.map +0 -1
  764. package/lib/esm/widgets/popover/context.js +0 -7
  765. package/lib/esm/widgets/popover/context.js.map +0 -1
  766. package/lib/esm/widgets/popover/index.js +0 -3
  767. package/lib/esm/widgets/popover/index.js.map +0 -1
  768. package/lib/esm/widgets/popover/slots.js +0 -22
  769. package/lib/esm/widgets/popover/slots.js.map +0 -1
  770. package/lib/types/core/components/Dropdown.d.ts +0 -15
  771. package/lib/types/core/components/Dropdown.d.ts.map +0 -1
  772. package/lib/types/core/components/DropdownList.d.ts +0 -13
  773. package/lib/types/core/components/DropdownList.d.ts.map +0 -1
  774. package/lib/types/core/components/RadioGroup.d.ts +0 -26
  775. package/lib/types/core/components/RadioGroup.d.ts.map +0 -1
  776. package/lib/types/core/components/SelectStack.d.ts +0 -13
  777. package/lib/types/core/components/SelectStack.d.ts.map +0 -1
  778. package/lib/types/core/components/Switch.d.ts +0 -11
  779. package/lib/types/core/components/Switch.d.ts.map +0 -1
  780. package/lib/types/widgets/popover/Popover.d.ts +0 -38
  781. package/lib/types/widgets/popover/Popover.d.ts.map +0 -1
  782. package/lib/types/widgets/popover/context.d.ts +0 -8
  783. package/lib/types/widgets/popover/context.d.ts.map +0 -1
  784. package/lib/types/widgets/popover/index.d.ts +0 -3
  785. package/lib/types/widgets/popover/index.d.ts.map +0 -1
  786. package/lib/types/widgets/popover/slots.d.ts +0 -5
  787. package/lib/types/widgets/popover/slots.d.ts.map +0 -1
  788. package/src/core/components/Dropdown.tsx +0 -63
  789. package/src/core/components/DropdownList.tsx +0 -72
  790. package/src/core/components/RadioGroup.tsx +0 -100
  791. package/src/core/components/SelectStack.tsx +0 -63
  792. package/src/core/components/Switch.tsx +0 -30
  793. package/src/widgets/popover/Popover.tsx +0 -171
  794. package/src/widgets/popover/context.ts +0 -15
  795. package/src/widgets/popover/index.ts +0 -2
  796. 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,102 +501,95 @@ 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
  );
497
512
  }
498
513
 
499
514
  return (
500
- <div
501
- className={`flex flex-col h-full bg-white dark:bg-gray-900 overflow-hidden border-0 relative ${isDragOver ? 'ring-2 ring-blue-400 ring-inset' : ''}`}
502
- onDragEnter={handleDragEnter}
503
- onDragOver={handleDragOver}
504
- onDragLeave={handleDragLeave}
505
- onDrop={handleDrop}
506
- >
507
- {/* Drag overlay for full-panel file drop */}
508
- {isDragOver && (
509
- <div className="absolute inset-0 flex items-center justify-center bg-blue-100/80 dark:bg-blue-900/40 z-50 pointer-events-none rounded-lg">
510
- <div className="text-blue-600 dark:text-blue-400 font-medium flex items-center gap-2 text-lg">
511
- <UploadIcon className="size-6" />
512
- Drop files to stage for upload
513
- </div>
514
- </div>
515
- )}
516
-
517
- {/* Hidden file input */}
518
- <input
519
- ref={fileInputRef}
520
- type="file"
521
- multiple
522
- accept={acceptedFileTypes}
523
- onChange={handleFileInputChange}
524
- className="hidden"
525
- />
526
-
527
- {/* Header */}
528
- <div className="flex items-center justify-between py-2 px-3 border-b border-gray-100 dark:border-gray-800 bg-white dark:bg-gray-900">
529
- <div className="flex items-center space-x-2">
530
- <div className="p-1">
531
- <Cpu className="size-3.5 text-muted" />
532
- </div>
533
- <span className="font-medium text-sm text-gray-700 dark:text-gray-300">
534
- {title}
535
- </span>
536
- </div>
537
-
538
- {/* Close button if needed */}
539
- {onClose && !isModal && (
540
- <Button
541
- size="xs"
542
- variant="ghost"
543
- onClick={onClose}
544
- title="Close"
545
- className="text-slate-500 hover:text-slate-700"
546
- >
547
- <XIcon className="size-4" />
548
- </Button>
549
- )}
550
- </div>
551
-
552
- {/* Empty conversation area with instructions */}
515
+ <div className="flex flex-col h-full bg-background items-center">
553
516
  <div
554
- className={`flex-1 overflow-y-auto px-4 py-6 bg-white dark:bg-gray-900 flex flex-col ${
555
- fullWidth ? 'items-start justify-start' : 'items-center justify-center'
556
- }`}
517
+ className={cn(
518
+ "flex flex-col h-full w-full overflow-hidden border-0 relative",
519
+ fullWidth ? "" : "max-w-4xl"
520
+ )}
521
+ onDragEnter={handleDragEnter}
522
+ onDragOver={handleDragOver}
523
+ onDragLeave={handleDragLeave}
524
+ onDrop={handleDrop}
557
525
  >
558
- {initialMessage && (
559
- <div
560
- className={`px-4 py-3 mb-4 bg-blue-50/80 dark:bg-blue-900/30 border-l-2 border-blue-400 dark:border-blue-500 text-blue-700 dark:text-blue-300 ${
561
- fullWidth ? 'w-full' : 'max-w-md'
562
- }`}
563
- >
564
- {initialMessage}
526
+ {/* Drag overlay for full-panel file drop */}
527
+ {isDragOver && (
528
+ <div className="absolute inset-0 flex items-center justify-center bg-info-background z-50 pointer-events-none rounded-lg">
529
+ <div className="text-info font-medium flex items-center gap-2 text-lg">
530
+ <UploadIcon className="size-6" />
531
+ Drop files to stage for upload
532
+ </div>
565
533
  </div>
566
534
  )}
567
535
 
568
- <div
569
- className={`bg-white dark:bg-slate-800 p-4 border-l-2 border-blue-400 dark:border-blue-500 ${
570
- fullWidth ? 'w-full' : 'max-w-md'
571
- }`}
572
- >
573
- <div className="text-base text-slate-600 dark:text-slate-300 font-medium">
574
- Enter a message to start a conversation
536
+ {/* Hidden file input */}
537
+ <input
538
+ ref={fileInputRef}
539
+ type="file"
540
+ multiple
541
+ accept={acceptedFileTypes}
542
+ onChange={handleFileInputChange}
543
+ className="hidden"
544
+ />
545
+
546
+ {/* Header */}
547
+ <div className="flex items-center justify-between py-2 px-3 border-b border-border bg-background">
548
+ <div className="flex items-center space-x-2">
549
+ <div className="p-1">
550
+ <Cpu className="size-3.5 text-muted" />
551
+ </div>
552
+ <span className="font-medium text-sm text-foreground">
553
+ {resolvedTitle}
554
+ </span>
575
555
  </div>
576
- <div className="mt-3 text-sm text-slate-500 dark:text-slate-400">
577
- Type your question below and press Enter or click {startButtonText}{" "}
578
- to begin
556
+
557
+ {/* Close button if needed */}
558
+ {onClose && !isModal && (
559
+ <Button
560
+ size="xs"
561
+ variant="ghost"
562
+ onClick={onClose}
563
+ title={t('agent.close')}
564
+ className="text-muted hover:text-foreground"
565
+ >
566
+ <XIcon className="size-4" />
567
+ </Button>
568
+ )}
569
+ </div>
570
+
571
+ {/* Empty conversation area with instructions */}
572
+ <div className="flex-1 overflow-y-auto bg-background flex flex-col items-center justify-end">
573
+ <div className="w-full px-4 py-6">
574
+ {initialMessage && (
575
+ <div className="px-4 py-3 mb-4 bg-info-background border-l-2 border-info text-info">
576
+ {initialMessage}
577
+ </div>
578
+ )}
579
+
580
+ <div className="bg-card p-4 border-l-2 border-info">
581
+ <div className="text-base text-foreground font-medium">
582
+ {t('agent.enterMessage')}
583
+ </div>
584
+ <div className="mt-3 text-sm text-muted">
585
+ {t('agent.typeQuestionBelow', { buttonText: resolvedStartButtonText })}
586
+ </div>
587
+ </div>
579
588
  </div>
580
589
  </div>
581
- </div>
582
590
 
583
- {/* Input Area */}
584
- <div className="py-3 px-3 border-t border-gray-100 dark:border-gray-800 bg-white dark:bg-gray-900">
591
+ {/* Input Area */}
592
+ <div className="py-3 px-3 border-t border-border bg-background">
585
593
  {/* Staged files display */}
586
594
  {stagedFiles.length > 0 && (
587
595
  <div className="flex flex-wrap gap-2 mb-3">
@@ -592,7 +600,7 @@ function StartWorkflowView({
592
600
  >
593
601
  <FileTextIcon className="size-3.5" />
594
602
  <span className="max-w-[120px] truncate">{file.name}</span>
595
- <span className="text-xs opacity-70">Staged</span>
603
+ <span className="text-xs opacity-70">{t('agent.staged')}</span>
596
604
  <button
597
605
  onClick={() => removeStagedFile(index)}
598
606
  className="ml-1 p-0.5 hover:bg-attention/20 rounded"
@@ -614,57 +622,59 @@ function StartWorkflowView({
614
622
  className="text-xs"
615
623
  >
616
624
  <UploadIcon className="size-3.5 mr-1.5" />
617
- Upload
625
+ {t('agent.upload')}
618
626
  </Button>
619
627
  </div>
620
628
 
621
629
  <div className="flex items-end gap-2">
622
- <div className="flex-1">
623
- <textarea
624
- ref={inputRef}
625
- value={inputValue}
626
- onChange={(e) => setInputValue(e.target.value)}
627
- onKeyDown={handleKeyDown}
628
- placeholder={placeholder}
629
- disabled={isSending}
630
- rows={2}
631
- className="w-full py-2.5 px-3 text-sm border border-gray-200 dark:border-gray-700 dark:bg-gray-800 dark:text-white focus:border-gray-300 dark:focus:border-gray-600 focus:outline-none focus:ring-1 focus:ring-gray-300 dark:focus:ring-gray-600 rounded-md resize-none overflow-hidden"
632
- style={{ minHeight: '60px', maxHeight: '200px' }}
633
- />
634
- </div>
630
+ <textarea
631
+ ref={inputRef}
632
+ value={inputValue}
633
+ onChange={(e) => setInputValue(e.target.value)}
634
+ onKeyDown={handleKeyDown}
635
+ placeholder={resolvedPlaceholder}
636
+ disabled={isSending}
637
+ rows={2}
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"
639
+ style={{ minHeight: '60px', maxHeight: '200px' }}
640
+ />
635
641
  <Button
636
642
  onClick={startWorkflowWithMessage}
637
643
  disabled={!inputValue.trim() || isSending}
638
- className="px-3 py-2.5 bg-gray-800 dark:bg-gray-700 hover:bg-gray-700 dark:hover:bg-gray-600 text-white text-xs rounded-md transition-colors"
644
+ className="px-3 py-2.5 text-xs rounded-md transition-colors"
639
645
  >
640
646
  {isSending ? (
641
647
  <Spinner size="sm" className="mr-1.5" />
642
648
  ) : (
643
649
  <SendIcon className="size-3.5 mr-1.5" />
644
650
  )}
645
- {startButtonText}
651
+ {resolvedStartButtonText}
646
652
  </Button>
647
653
  </div>
648
- <div className="text-xs text-gray-400 dark:text-gray-500 mt-2 text-center">
654
+ <div className="text-xs text-muted mt-2 text-center">
649
655
  {stagedFiles.length > 0
650
- ? `${stagedFiles.length} file${stagedFiles.length > 1 ? 's' : ''} staged - will upload when conversation starts`
651
- : 'Enter to send • Shift+Enter for new line'}
656
+ ? t('agent.filesStagedCount', { count: stagedFiles.length })
657
+ : t('agent.enterToSend')}
652
658
  </div>
653
659
  </div>
654
660
  </div>
661
+ </div>
655
662
  );
656
663
  }
657
664
 
658
665
  // Inner component that handles the agent conversation - similar to ModernAgentOutput
659
666
  function ModernAgentConversationInner({
660
- run,
667
+ agentRunId,
661
668
  title,
662
669
  interactive = true,
663
670
  onClose,
664
671
  isModal = false,
665
672
  fullWidth = false,
666
- placeholder = "Type your message...",
673
+ placeholder,
667
674
  resetWorkflow,
675
+ onRestart,
676
+ onFork,
677
+ onShowDetails,
668
678
  // File upload props (onFilesSelected handled internally by handleFileUpload)
669
679
  uploadedFiles,
670
680
  onRemoveFile,
@@ -681,8 +691,10 @@ function ModernAgentConversationInner({
681
691
  hideMessageInput,
682
692
  hidePlanPanel,
683
693
  hideWorkstreamTabs,
694
+ showRightPanel: showRightPanelProp = true,
684
695
  hideFileUpload,
685
- hideDocumentPanel,
696
+ showArtifacts = false,
697
+ hideDocumentPanel: _hideDocumentPanel,
686
698
  // Attachment callback
687
699
  getAttachedDocs,
688
700
  onAttachmentsSent,
@@ -699,6 +711,7 @@ function ModernAgentConversationInner({
699
711
  // External file upload API
700
712
  fileUploadRef,
701
713
  onProcessingFilesChange,
714
+ processingFiles: processingFilesProp,
702
715
  // External plan panel API
703
716
  onPlansChange,
704
717
  onWorkstreamStatusChange,
@@ -725,9 +738,16 @@ function ModernAgentConversationInner({
725
738
  StoreLinkComponent,
726
739
  CollectionLinkComponent,
727
740
  prependFriendlyMessage,
728
- }: ModernAgentConversationProps & { run: AsyncExecutionResult }) {
741
+ payloadContent,
742
+ conversationContent,
743
+ conversationTab = false,
744
+ }: ModernAgentConversationProps & { agentRunId: string }) {
745
+ const { t } = useUITranslation();
729
746
  const { client } = useUserSession();
730
747
  const toast = useToast();
748
+ const instanceIdRef = useRef(
749
+ `mac-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 8)}`
750
+ );
731
751
 
732
752
  // ────────────────────────────────────────────
733
753
  // Extracted hooks
@@ -740,8 +760,9 @@ function ModernAgentConversationInner({
740
760
  addOptimisticMessage,
741
761
  removeOptimisticMessages,
742
762
  workflowStatus,
763
+ workflowRunId,
743
764
  serverFileUpdates,
744
- } = useAgentStream(client, run);
765
+ } = useAgentStream(client, agentRunId);
745
766
 
746
767
  const {
747
768
  plans,
@@ -768,13 +789,14 @@ function ModernAgentConversationInner({
768
789
  processingFiles,
769
790
  hasProcessingFiles,
770
791
  handleFileUpload,
771
- } = useFileProcessing(client, run, serverFileUpdates, toast);
792
+ } = useFileProcessing(client, agentRunId, serverFileUpdates, toast);
772
793
 
773
794
  // ────────────────────────────────────────────
774
795
  // Local state (UI-only concerns)
775
796
  // ────────────────────────────────────────────
776
797
  const bottomRef = useRef<HTMLDivElement | null>(null);
777
798
  const conversationRef = useRef<HTMLDivElement | null>(null);
799
+ const conversationLayoutRef = useRef<HTMLDivElement | null>(null);
778
800
  const [isSending, setIsSending] = useState(false);
779
801
  const [internalViewMode, setInternalViewMode] = useState<AgentConversationViewMode>("sliding");
780
802
  const viewMode = controlledViewMode ?? internalViewMode;
@@ -788,6 +810,8 @@ function ModernAgentConversationInner({
788
810
  const [isStopping, setIsStopping] = useState(false);
789
811
  const [thinkingMessageIndex, setThinkingMessageIndex] = useState(0);
790
812
  const [isDragOver, setIsDragOver] = useState(false);
813
+ const [activeWorkstreams, setActiveWorkstreams] = useState<ActiveWorkstreamEntry[]>([]);
814
+ const workstreamFetchFailedRef = useRef(false);
791
815
  const dragCounterRef = useRef(0);
792
816
 
793
817
  // PERFORMANCE: Refs for values used inside useCallback to avoid re-creating the callback
@@ -796,13 +820,35 @@ function ModernAgentConversationInner({
796
820
  const hasProcessingFilesRef = useRef(hasProcessingFiles);
797
821
  hasProcessingFilesRef.current = hasProcessingFiles;
798
822
 
799
- // Derive effective workflow status (API status + TERMINATED from messages)
823
+ // Derive effective workflow status only main workstream TERMINATED overrides API status.
800
824
  const effectiveWorkflowStatus = useMemo(() => {
801
- const lastMsg = messages[messages.length - 1];
802
- 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";
803
828
  return workflowStatus;
804
829
  }, [messages, workflowStatus]);
805
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
+
806
852
  // ────────────────────────────────────────────
807
853
  // Computed values
808
854
  // ────────────────────────────────────────────
@@ -819,6 +865,20 @@ function ModernAgentConversationInner({
819
865
  };
820
866
  }, [plans, activePlanIndex, workstreamStatusMap]);
821
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
+
822
882
  // ────────────────────────────────────────────
823
883
  // Stable callbacks
824
884
  // ────────────────────────────────────────────
@@ -835,19 +895,79 @@ function ModernAgentConversationInner({
835
895
  setActivePlanIndex(index);
836
896
  }, [setActivePlanIndex]);
837
897
 
838
- 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(() => {
839
953
  setShowSlidingPanel(false);
840
- }, [setShowSlidingPanel]);
954
+ handleCloseDocPanel();
955
+ }, [setShowSlidingPanel, handleCloseDocPanel]);
841
956
 
842
957
  // Default StoreLinkComponent that opens documents in the panel
843
958
  const internalStoreLinkComponent = useCallback(
844
- ({ documentId, children }: { href: string; documentId: string; children: React.ReactNode }) => (
845
- <button
959
+ ({ href, documentId, children }: { href: string; documentId: string; children: React.ReactNode }) => (
960
+ <a
961
+ href={href}
846
962
  className="text-info underline cursor-pointer hover:text-info/80"
847
- onClick={() => openDocInPanel(documentId)}
963
+ onClick={(e) => {
964
+ e.preventDefault();
965
+ e.stopPropagation();
966
+ openDocInPanel(documentId);
967
+ }}
848
968
  >
849
969
  {children}
850
- </button>
970
+ </a>
851
971
  ),
852
972
  [openDocInPanel]
853
973
  );
@@ -891,6 +1011,41 @@ function ModernAgentConversationInner({
891
1011
  onWorkstreamStatusChange?.(workstreamStatusMap);
892
1012
  }, [workstreamStatusMap, onWorkstreamStatusChange]);
893
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
+
894
1049
  // Notify parent when input availability is determined
895
1050
  useEffect(() => {
896
1051
  if (messages.length === 0) return;
@@ -920,8 +1075,8 @@ function ModernAgentConversationInner({
920
1075
  if (hasProcessingFilesRef.current) {
921
1076
  toast({
922
1077
  status: "warning",
923
- title: "Files Still Processing",
924
- description: "Please wait for all files to finish processing before sending",
1078
+ title: t('agent.filesProcessing'),
1079
+ description: t('agent.waitForFilesProcessing'),
925
1080
  duration: 3000,
926
1081
  });
927
1082
  return;
@@ -942,7 +1097,7 @@ function ModernAgentConversationInner({
942
1097
 
943
1098
  const optimisticMessage: AgentMessage = {
944
1099
  timestamp: Date.now(),
945
- workflow_run_id: run.runId,
1100
+ workflow_run_id: agentRunId,
946
1101
  type: AgentMessageType.QUESTION,
947
1102
  message: messageContent,
948
1103
  workstream_id: "main",
@@ -957,8 +1112,8 @@ function ModernAgentConversationInner({
957
1112
  _messageId: messageId,
958
1113
  };
959
1114
 
960
- client.store.workflows
961
- .sendSignal(run.workflowId, run.runId, "UserInput", {
1115
+ client.agents
1116
+ .sendSignal(agentRunId, "UserInput", {
962
1117
  message: messageContent,
963
1118
  metadata,
964
1119
  } as UserInputSignal)
@@ -971,25 +1126,25 @@ function ModernAgentConversationInner({
971
1126
  );
972
1127
  toast({
973
1128
  status: "error",
974
- title: "Failed to Send Message",
975
- description: err instanceof Error ? err.message : "Unknown error",
1129
+ title: t('agent.failedToSend'),
1130
+ description: err instanceof Error ? err.message : t('agent.unknownError'),
976
1131
  duration: 3000,
977
1132
  });
978
1133
  })
979
1134
  .finally(() => {
980
1135
  setIsSending(false);
981
1136
  });
982
- }, [run.runId, run.workflowId, client, toast, getAttachedDocs, getMessageContext, onAttachmentsSent, addOptimisticMessage, removeOptimisticMessages]);
1137
+ }, [agentRunId, client, toast, getAttachedDocs, getMessageContext, onAttachmentsSent, addOptimisticMessage, removeOptimisticMessages]);
983
1138
 
984
1139
  // Drag and drop handlers for full-panel file upload
985
1140
  const handleDragEnter = useCallback((e: React.DragEvent) => {
986
1141
  e.preventDefault();
987
1142
  e.stopPropagation();
988
1143
  dragCounterRef.current++;
989
- if (run && e.dataTransfer?.types?.includes('Files')) {
1144
+ if (e.dataTransfer?.types?.includes('Files')) {
990
1145
  setIsDragOver(true);
991
1146
  }
992
- }, [run]);
1147
+ }, []);
993
1148
 
994
1149
  const handleDragOver = useCallback((e: React.DragEvent) => {
995
1150
  e.preventDefault();
@@ -1011,11 +1166,11 @@ function ModernAgentConversationInner({
1011
1166
  dragCounterRef.current = 0;
1012
1167
  setIsDragOver(false);
1013
1168
 
1014
- if (run && e.dataTransfer?.files && e.dataTransfer.files.length > 0) {
1169
+ if (e.dataTransfer?.files && e.dataTransfer.files.length > 0) {
1015
1170
  const filesArray = Array.from(e.dataTransfer.files);
1016
1171
  handleFileUpload(filesArray);
1017
1172
  }
1018
- }, [run, handleFileUpload]);
1173
+ }, [handleFileUpload]);
1019
1174
 
1020
1175
  // Stop/interrupt the active workflow
1021
1176
  const handleStopWorkflow = useCallback(async () => {
@@ -1023,27 +1178,27 @@ function ModernAgentConversationInner({
1023
1178
 
1024
1179
  setIsStopping(true);
1025
1180
  try {
1026
- await client.store.workflows.sendSignal(run.workflowId, run.runId, "Stop", {
1181
+ await client.agents.sendSignal(agentRunId, "Stop", {
1027
1182
  message: "User requested stop",
1028
1183
  });
1029
1184
 
1030
1185
  toast({
1031
1186
  status: "info",
1032
- title: "Agent Interrupted",
1033
- description: "Type your message to give new instructions",
1187
+ title: t('agent.agentInterrupted'),
1188
+ description: t('agent.typeNewInstructions'),
1034
1189
  duration: 3000,
1035
1190
  });
1036
1191
  } catch (err) {
1037
1192
  toast({
1038
1193
  status: "error",
1039
- title: "Failed to Interrupt",
1040
- description: err instanceof Error ? err.message : "Unknown error",
1194
+ title: t('agent.failedToInterrupt'),
1195
+ description: err instanceof Error ? err.message : t('agent.unknownError'),
1041
1196
  duration: 3000,
1042
1197
  });
1043
1198
  } finally {
1044
1199
  setIsStopping(false);
1045
1200
  }
1046
- }, [isStopping, client, run.workflowId, run.runId, toast]);
1201
+ }, [isStopping, client, agentRunId, toast]);
1047
1202
 
1048
1203
  // Expose stop handler to external callers via ref
1049
1204
  useEffect(() => {
@@ -1058,6 +1213,10 @@ function ModernAgentConversationInner({
1058
1213
 
1059
1214
  // Calculate number of active tasks for the status indicator
1060
1215
  const getActiveTaskCount = (): number => {
1216
+ if (activeWorkstreams.length > 0) {
1217
+ return activeWorkstreams.filter((ws) => ws.status === "running").length;
1218
+ }
1219
+
1061
1220
  if (!messages.length) return 0;
1062
1221
 
1063
1222
  // Group messages by workstream
@@ -1069,7 +1228,7 @@ function ModernAgentConversationInner({
1069
1228
  if (!workstreamMessages.has(workstreamId)) {
1070
1229
  workstreamMessages.set(workstreamId, []);
1071
1230
  }
1072
- workstreamMessages.get(workstreamId)!.push(message);
1231
+ workstreamMessages.get(workstreamId)?.push(message);
1073
1232
  }
1074
1233
  });
1075
1234
 
@@ -1093,42 +1252,31 @@ function ModernAgentConversationInner({
1093
1252
  return activeCount;
1094
1253
  };
1095
1254
 
1096
- const actualTitle =
1097
- title || run.workflowId.split(":")[2] || "Agent Conversation";
1255
+ const actualTitle = title || t('agent.agentConversation');
1098
1256
 
1099
1257
  // Handle downloading conversation
1100
1258
  const downloadConversation = async () => {
1101
1259
  try {
1102
- const url = await getConversationUrl(client, run.runId);
1260
+ const url = await getConversationUrl(client, agentRunId);
1103
1261
  if (url) window.open(url, "_blank");
1104
1262
  } catch (err) {
1105
1263
  console.error("Failed to download conversation", err);
1106
1264
  toast({
1107
1265
  status: "error",
1108
- title: "Failed to download conversation",
1266
+ title: t('agent.failedToDownload'),
1109
1267
  duration: 3000,
1110
1268
  });
1111
1269
  }
1112
1270
  };
1113
1271
 
1114
- // Handle copying run ID
1115
- const copyRunId = () => {
1116
- navigator.clipboard.writeText(run.runId);
1117
- toast({
1118
- status: "success",
1119
- title: "Run ID copied",
1120
- duration: 2000,
1121
- });
1122
- };
1123
-
1124
1272
  const [isPdfModalOpen, setIsPdfModalOpen] = useState(false);
1125
1273
 
1126
1274
  const exportConversationPdf = () => {
1127
1275
  if (!conversationRef.current) {
1128
1276
  toast({
1129
1277
  status: "error",
1130
- title: "PDF export failed",
1131
- description: "No conversation content available to export",
1278
+ title: t('agent.pdfExportFailed'),
1279
+ description: t('agent.noConversationContent'),
1132
1280
  duration: 3000,
1133
1281
  });
1134
1282
  return;
@@ -1140,21 +1288,21 @@ function ModernAgentConversationInner({
1140
1288
  if (!conversationRef.current) {
1141
1289
  toast({
1142
1290
  status: "error",
1143
- title: "PDF export failed",
1144
- description: "No conversation content available to export",
1291
+ title: t('agent.pdfExportFailed'),
1292
+ description: t('agent.noConversationContent'),
1145
1293
  duration: 3000,
1146
1294
  });
1147
1295
  return;
1148
1296
  }
1149
1297
 
1150
- const pdfTitle = `${actualTitle} - ${run.runId}`;
1298
+ const pdfTitle = `${actualTitle} - ${agentRunId}`;
1151
1299
  const success = printElementToPdf(conversationRef.current, pdfTitle);
1152
1300
 
1153
1301
  if (!success) {
1154
1302
  toast({
1155
1303
  status: "error",
1156
- title: "PDF export failed",
1157
- description: "Unable to open print preview",
1304
+ title: t('agent.pdfExportFailed'),
1305
+ description: t('agent.unableToOpenPrint'),
1158
1306
  duration: 4000,
1159
1307
  });
1160
1308
  return;
@@ -1162,13 +1310,26 @@ function ModernAgentConversationInner({
1162
1310
 
1163
1311
  toast({
1164
1312
  status: "success",
1165
- title: "PDF export ready",
1166
- description: "Use your browser's Print dialog to save as PDF",
1313
+ title: t('agent.pdfExportReady'),
1314
+ description: t('agent.printDialogDescription'),
1167
1315
  duration: 4000,
1168
1316
  });
1169
1317
  setIsPdfModalOpen(false);
1170
1318
  };
1171
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
+
1172
1333
  // PERFORMANCE: Memoize taskLabels to prevent AllMessagesMixed re-renders
1173
1334
  const taskLabels = useMemo(() =>
1174
1335
  getActivePlan.plan.plan?.reduce((acc, task) => {
@@ -1177,12 +1338,143 @@ function ModernAgentConversationInner({
1177
1338
  }, new Map<string, string>()),
1178
1339
  [getActivePlan.plan]);
1179
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
+
1180
1471
  // Main content - wrapped with FusionFragmentProvider when fusionData is provided
1181
1472
  const mainContent = (
1182
1473
  <ArtifactUrlCacheProvider>
1183
1474
  <ImageLightboxProvider>
1184
1475
  <div
1185
- 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)}
1186
1478
  onDragEnter={handleDragEnter}
1187
1479
  onDragOver={handleDragOver}
1188
1480
  onDragLeave={handleDragLeave}
@@ -1197,170 +1489,62 @@ function ModernAgentConversationInner({
1197
1489
  </div>
1198
1490
  </div>
1199
1491
  )}
1200
- {/* Conversation Area - responsive width based on panel visibility */}
1201
- <div
1202
- ref={conversationRef}
1203
- className={cn(
1204
- "flex flex-col min-h-0 border-0",
1205
- (showSlidingPanel || isDocPanelOpen)
1206
- ? "w-full lg:w-3/5 flex-1 min-h-[50vh]"
1207
- : fullWidth
1208
- ? "flex-1 w-full"
1209
- : `flex-1 mx-auto ${!isModal ? "max-w-4xl" : ""}`
1210
- )}
1211
- >
1212
- {/* Streaming activity indicator moved to Header */}
1213
-
1214
- {/* Header - flex-shrink-0 to prevent shrinking */}
1215
- {!hideHeader && (
1216
- <div className="flex-shrink-0">
1217
- <Header
1218
- title={actualTitle}
1219
- isCompleted={isCompleted}
1220
- onClose={onClose}
1221
- isModal={isModal}
1222
- run={run}
1223
- viewMode={viewMode}
1224
- onViewModeChange={handleViewModeChange}
1225
- showPlanPanel={showSlidingPanel}
1226
- hasPlan={plans.length > 0}
1227
- onTogglePlanPanel={handleTogglePlanPanel}
1228
- onDownload={downloadConversation}
1229
- onCopyRunId={copyRunId}
1230
- resetWorkflow={resetWorkflow}
1231
- onExportPdf={exportConversationPdf}
1232
- 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"
1233
1505
  />
1234
- </div>
1235
- )}
1236
-
1237
- {messages.length === 0 && !isCompleted ? (
1238
- <div className="flex-1 flex flex-col items-center justify-center h-full text-center py-6">
1239
- <div className="p-5 max-w-md border border-info rounded-lg shadow-sm">
1240
- <div className="flex items-center space-x-3 mb-3">
1241
- <PulsatingCircle size="sm" color="blue" />
1242
- <div className="text-sm text-muted font-medium">
1243
- {ThinkingMessages[thinkingMessageIndex]}
1244
- </div>
1245
- </div>
1246
- <div className="mt-4 flex justify-center">
1247
- <AnimatedThinkingDots color="blue" className="mt-1" />
1248
- </div>
1249
- </div>
1250
- </div>
1251
- ) : (
1252
- <AllMessagesMixed
1253
- messages={messages}
1254
- bottomRef={bottomRef as React.RefObject<HTMLDivElement>}
1255
- isCompleted={isCompleted}
1256
- plan={getActivePlan.plan}
1257
- workstreamStatus={getActivePlan.workstreamStatus}
1258
- showPlanPanel={showSlidingPanel}
1259
- onTogglePlanPanel={handleTogglePlanPanel}
1260
- plans={plans}
1261
- activePlanIndex={activePlanIndex}
1262
- onChangePlan={handleChangePlan}
1263
- taskLabels={taskLabels}
1264
- streamingMessages={streamingMessages}
1265
- onSendMessage={handleSendMessage}
1266
- thinkingMessageIndex={thinkingMessageIndex}
1267
- messageItemClassNames={messageItemClassNames}
1268
- messageStyleOverrides={messageStyleOverrides}
1269
- toolCallGroupClassNames={toolCallGroupClassNames}
1270
- hideToolCallsInViewMode={hideToolCallsInViewMode}
1271
- streamingMessageClassNames={streamingMessageClassNames}
1272
- batchProgressPanelClassNames={batchProgressPanelClassNames}
1273
- viewMode={viewMode}
1274
- hideWorkstreamTabs={hideWorkstreamTabs}
1275
- workingIndicatorClassName={workingIndicatorClassName}
1276
- messageListClassName={messageListClassName}
1277
- StoreLinkComponent={effectiveStoreLinkComponent}
1278
- CollectionLinkComponent={CollectionLinkComponent}
1279
- prependFriendlyMessage={prependFriendlyMessage}
1280
- />
1281
- )}
1282
-
1283
- {/* Show workflow status message when not running, or show input when running/unknown */}
1284
- {/* Input area - flex-shrink-0 to stay pinned at bottom, with iOS safe area support */}
1285
- {!hideMessageInput && (
1286
- <div className="flex-shrink-0" style={{ paddingBottom: 'env(safe-area-inset-bottom, 0px)' }}>
1287
- {effectiveWorkflowStatus && effectiveWorkflowStatus !== "RUNNING" ? (
1288
- <MessageBox
1289
- status={effectiveWorkflowStatus === "COMPLETED" ? 'success' : 'done'}
1290
- icon={null}
1291
- className="m-2"
1292
- >
1293
- This Workflow is {effectiveWorkflowStatus}
1294
- </MessageBox>
1295
- ) : showInput && (
1296
- <MessageInput
1297
- onSend={handleSendMessage}
1298
- onStop={handleStopWorkflow}
1299
- disabled={isUploading}
1300
- isSending={isSending || isUploading}
1301
- isStopping={isStopping}
1302
- isStreaming={!isCompleted}
1303
- isCompleted={isCompleted}
1304
- activeTaskCount={getActiveTaskCount()}
1305
- placeholder={placeholder}
1306
- // File upload props - use internal handler that signals workflow
1307
- onFilesSelected={handleFileUpload}
1308
- uploadedFiles={uploadedFiles}
1309
- onRemoveFile={onRemoveFile}
1310
- acceptedFileTypes={acceptedFileTypes}
1311
- maxFiles={maxFiles}
1312
- // File processing state
1313
- processingFiles={processingFiles}
1314
- hasProcessingFiles={hasProcessingFiles}
1315
- // Document search props
1316
- renderDocumentSearch={renderDocumentSearch}
1317
- selectedDocuments={selectedDocuments}
1318
- onRemoveDocument={onRemoveDocument}
1319
- // Object linking
1320
- hideObjectLinking={hideObjectLinking}
1321
- // Files Uploaded
1322
- hideFileUpload={hideFileUpload}
1323
- // Styling props
1324
- className={inputContainerClassName}
1325
- inputClassName={inputClassName}
1326
- />
1327
- )}
1328
- </div>
1329
- )}
1330
- </div>
1331
-
1332
- {/* Plan Panel Area - only rendered when panel should be shown */}
1333
- {!hidePlanPanel && showSlidingPanel && (
1334
- <div className="w-full lg:w-1/3 min-h-[50vh] lg:h-full border-t lg:border-t-0 lg:border-l">
1335
- <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
1336
1515
  plan={getActivePlan.plan}
1337
1516
  workstreamStatus={getActivePlan.workstreamStatus}
1338
- isOpen={showSlidingPanel}
1339
- onClose={handleClosePlanPanel}
1340
1517
  plans={plans}
1341
1518
  activePlanIndex={activePlanIndex}
1342
1519
  onChangePlan={handleChangePlan}
1343
- />
1344
- </div>
1345
- )}
1346
-
1347
- {/* Document Panel Area - slides in when documents are created/edited */}
1348
- {!hideDocumentPanel && isDocPanelOpen && openDocuments.length > 0 && (
1349
- <div className={cn(
1350
- "w-full lg:w-2/5 min-h-[50vh] lg:h-full border-t lg:border-t-0 lg:border-l",
1351
- showSlidingPanel && "lg:w-1/3"
1352
- )}>
1353
- <DocumentPanel
1354
- isOpen={isDocPanelOpen}
1355
- onClose={handleCloseDocPanel}
1356
- documents={openDocuments}
1520
+ showPlan={!hidePlanPanel && showSlidingPanel}
1521
+ // Workstreams
1522
+ activeWorkstreams={panelWorkstreams}
1523
+ hideWorkstreams={hideWorkstreamTabs}
1524
+ // Documents
1525
+ openDocuments={openDocuments}
1357
1526
  activeDocumentId={activeDocumentId}
1358
1527
  onSelectDocument={selectDocument}
1359
1528
  onCloseDocument={handleCloseDocument}
1360
- refreshKey={docRefreshKey}
1361
- 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}
1362
1545
  />
1363
- </div>
1546
+ </div>
1547
+ </>
1364
1548
  )}
1365
1549
  <Modal isOpen={isPdfModalOpen} onClose={() => setIsPdfModalOpen(false)}>
1366
1550
  <ModalTitle>Export conversation as PDF</ModalTitle>
@@ -1395,7 +1579,7 @@ function ModernAgentConversationInner({
1395
1579
  data={fusionData}
1396
1580
  sendMessage={handleSendMessage}
1397
1581
  ChartComponent={VegaLiteChart}
1398
- artifactRunId={run.runId}
1582
+ artifactRunId={agentRunId}
1399
1583
  >
1400
1584
  {mainContent}
1401
1585
  </FusionFragmentProvider>
@@ -1404,13 +1588,3 @@ function ModernAgentConversationInner({
1404
1588
 
1405
1589
  return mainContent;
1406
1590
  }
1407
-
1408
- // Helper function to get conversation URL - used by other components
1409
- export async function getConversationUrl(
1410
- vertesia: VertesiaClient,
1411
- workflowRunId: string,
1412
- ): Promise<string> {
1413
- return vertesia.files
1414
- .getDownloadUrl(`agents/${workflowRunId}/conversation.json`)
1415
- .then((r) => r.url);
1416
- }