@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.
- package/lib/esm/core/components/SelectList.js +3 -1
- package/lib/esm/core/components/SelectList.js.map +1 -1
- package/lib/esm/core/components/SidePanel.js +2 -2
- package/lib/esm/core/components/SidePanel.js.map +1 -1
- package/lib/esm/core/components/index.js +0 -5
- package/lib/esm/core/components/index.js.map +1 -1
- package/lib/esm/core/components/shadcn/breadcrumb.js +11 -7
- package/lib/esm/core/components/shadcn/breadcrumb.js.map +1 -1
- package/lib/esm/core/components/shadcn/button.js +5 -3
- package/lib/esm/core/components/shadcn/button.js.map +1 -1
- package/lib/esm/core/components/shadcn/collaspible.js +14 -0
- package/lib/esm/core/components/shadcn/collaspible.js.map +1 -0
- package/lib/esm/core/components/shadcn/dropdown.js +64 -0
- package/lib/esm/core/components/shadcn/dropdown.js.map +1 -0
- package/lib/esm/core/components/shadcn/filters/comboBox/DateCombobox.js +3 -1
- package/lib/esm/core/components/shadcn/filters/comboBox/DateCombobox.js.map +1 -1
- package/lib/esm/core/components/shadcn/filters/comboBox/SelectCombobox.js +3 -1
- package/lib/esm/core/components/shadcn/filters/comboBox/SelectCombobox.js.map +1 -1
- package/lib/esm/core/components/shadcn/filters/comboBox/StringListCombobox.js +1 -1
- package/lib/esm/core/components/shadcn/filters/comboBox/StringListCombobox.js.map +1 -1
- package/lib/esm/core/components/shadcn/filters/filter/StringListFilter.js +1 -1
- package/lib/esm/core/components/shadcn/filters/filter/StringListFilter.js.map +1 -1
- package/lib/esm/core/components/shadcn/filters/filter/dateFilter.js +4 -2
- package/lib/esm/core/components/shadcn/filters/filter/dateFilter.js.map +1 -1
- package/lib/esm/core/components/shadcn/filters/filterBar.js +7 -4
- package/lib/esm/core/components/shadcn/filters/filterBar.js.map +1 -1
- package/lib/esm/core/components/shadcn/index.js +4 -0
- package/lib/esm/core/components/shadcn/index.js.map +1 -1
- package/lib/esm/core/components/shadcn/modal/ConfirmModal.js +4 -2
- package/lib/esm/core/components/shadcn/modal/ConfirmModal.js.map +1 -1
- package/lib/esm/core/components/shadcn/modal/DeleteModal.js +5 -3
- package/lib/esm/core/components/shadcn/modal/DeleteModal.js.map +1 -1
- package/lib/esm/core/components/shadcn/popover.js +11 -7
- package/lib/esm/core/components/shadcn/popover.js.map +1 -1
- package/lib/esm/core/components/shadcn/radioGroup.js +29 -0
- package/lib/esm/core/components/shadcn/radioGroup.js.map +1 -0
- package/lib/esm/core/components/shadcn/selectBox.js +1 -1
- package/lib/esm/core/components/shadcn/switch.js +19 -0
- package/lib/esm/core/components/shadcn/switch.js.map +1 -0
- package/lib/esm/core/components/shadcn/tabs.js +6 -6
- package/lib/esm/core/components/shadcn/tabs.js.map +1 -1
- package/lib/esm/core/components/shadcn/theme/ThemeSwitcher.js +8 -6
- package/lib/esm/core/components/shadcn/theme/ThemeSwitcher.js.map +1 -1
- package/lib/esm/core/components/shadcn/tooltip.js +1 -1
- package/lib/esm/core/components/shadcn/tooltip.js.map +1 -1
- package/lib/esm/core/components/toast/NotificationPanel.js +3 -3
- package/lib/esm/core/components/toast/NotificationPanel.js.map +1 -1
- package/lib/esm/core/hooks/PortalContainerProvider.js +9 -3
- package/lib/esm/core/hooks/PortalContainerProvider.js.map +1 -1
- package/lib/esm/env/index.js +16 -9
- package/lib/esm/env/index.js.map +1 -1
- package/lib/esm/features/agent/PayloadBuilder.js +87 -15
- package/lib/esm/features/agent/PayloadBuilder.js.map +1 -1
- package/lib/esm/features/agent/chat/AgentRightPanel.js +159 -0
- package/lib/esm/features/agent/chat/AgentRightPanel.js.map +1 -0
- package/lib/esm/features/agent/chat/ArtifactsTab.js +69 -0
- package/lib/esm/features/agent/chat/ArtifactsTab.js.map +1 -0
- package/lib/esm/features/agent/chat/AskUserWidget.js +12 -6
- package/lib/esm/features/agent/chat/AskUserWidget.js.map +1 -1
- package/lib/esm/features/agent/chat/DocumentPanel.js +6 -3
- package/lib/esm/features/agent/chat/DocumentPanel.js.map +1 -1
- package/lib/esm/features/agent/chat/ImageLightbox.js +3 -1
- package/lib/esm/features/agent/chat/ImageLightbox.js.map +1 -1
- package/lib/esm/features/agent/chat/ModernAgentConversation.js +241 -113
- package/lib/esm/features/agent/chat/ModernAgentConversation.js.map +1 -1
- package/lib/esm/features/agent/chat/ModernAgentOutput/AllMessagesMixed.js +122 -52
- package/lib/esm/features/agent/chat/ModernAgentOutput/AllMessagesMixed.js.map +1 -1
- package/lib/esm/features/agent/chat/ModernAgentOutput/BatchProgressPanel.js +5 -3
- package/lib/esm/features/agent/chat/ModernAgentOutput/BatchProgressPanel.js.map +1 -1
- package/lib/esm/features/agent/chat/ModernAgentOutput/Header.js +76 -33
- package/lib/esm/features/agent/chat/ModernAgentOutput/Header.js.map +1 -1
- package/lib/esm/features/agent/chat/ModernAgentOutput/InlineSlidingPlanPanel.js +82 -83
- package/lib/esm/features/agent/chat/ModernAgentOutput/InlineSlidingPlanPanel.js.map +1 -1
- package/lib/esm/features/agent/chat/ModernAgentOutput/MessageInput.js +16 -14
- package/lib/esm/features/agent/chat/ModernAgentOutput/MessageInput.js.map +1 -1
- package/lib/esm/features/agent/chat/ModernAgentOutput/MessageItem.js +20 -5
- package/lib/esm/features/agent/chat/ModernAgentOutput/MessageItem.js.map +1 -1
- package/lib/esm/features/agent/chat/ModernAgentOutput/PlanPanel.js +8 -6
- package/lib/esm/features/agent/chat/ModernAgentOutput/PlanPanel.js.map +1 -1
- package/lib/esm/features/agent/chat/ModernAgentOutput/SlidingPlanPanel.js +12 -10
- package/lib/esm/features/agent/chat/ModernAgentOutput/SlidingPlanPanel.js.map +1 -1
- package/lib/esm/features/agent/chat/ModernAgentOutput/StreamingMessage.js +5 -3
- package/lib/esm/features/agent/chat/ModernAgentOutput/StreamingMessage.js.map +1 -1
- package/lib/esm/features/agent/chat/ModernAgentOutput/ToolCallGroup.js +104 -13
- package/lib/esm/features/agent/chat/ModernAgentOutput/ToolCallGroup.js.map +1 -1
- package/lib/esm/features/agent/chat/ModernAgentOutput/WorkstreamTabs.js +9 -5
- package/lib/esm/features/agent/chat/ModernAgentOutput/WorkstreamTabs.js.map +1 -1
- package/lib/esm/features/agent/chat/ModernAgentOutput/utils.js +160 -76
- package/lib/esm/features/agent/chat/ModernAgentOutput/utils.js.map +1 -1
- package/lib/esm/features/agent/chat/SlidingThinkingIndicator.js +3 -1
- package/lib/esm/features/agent/chat/SlidingThinkingIndicator.js.map +1 -1
- package/lib/esm/features/agent/chat/VegaLiteChart.js +14 -2
- package/lib/esm/features/agent/chat/VegaLiteChart.js.map +1 -1
- package/lib/esm/features/agent/chat/hooks/useAgentPlans.js +3 -8
- package/lib/esm/features/agent/chat/hooks/useAgentPlans.js.map +1 -1
- package/lib/esm/features/agent/chat/hooks/useAgentStream.js +79 -16
- package/lib/esm/features/agent/chat/hooks/useAgentStream.js.map +1 -1
- package/lib/esm/features/agent/chat/hooks/useArtifacts.js +108 -0
- package/lib/esm/features/agent/chat/hooks/useArtifacts.js.map +1 -0
- package/lib/esm/features/agent/chat/hooks/useDocumentPanel.js +56 -5
- package/lib/esm/features/agent/chat/hooks/useDocumentPanel.js.map +1 -1
- package/lib/esm/features/agent/chat/hooks/useFileProcessing.js +12 -10
- package/lib/esm/features/agent/chat/hooks/useFileProcessing.js.map +1 -1
- package/lib/esm/features/errors/PanelErrorBoundary.js +3 -1
- package/lib/esm/features/errors/PanelErrorBoundary.js.map +1 -1
- package/lib/esm/features/facets/AgentRunnerFacetsNav.js +45 -33
- package/lib/esm/features/facets/AgentRunnerFacetsNav.js.map +1 -1
- package/lib/esm/features/facets/RunsFacetsNav.js +9 -2
- package/lib/esm/features/facets/RunsFacetsNav.js.map +1 -1
- package/lib/esm/features/facets/index.js +1 -1
- package/lib/esm/features/facets/index.js.map +1 -1
- package/lib/esm/features/layout/GenericPageNavHeader.js +40 -28
- package/lib/esm/features/layout/GenericPageNavHeader.js.map +1 -1
- package/lib/esm/features/layout/NotFoundView.js +3 -1
- package/lib/esm/features/layout/NotFoundView.js.map +1 -1
- package/lib/esm/features/magic-pdf/AnnotatedImageSlider.js +9 -5
- package/lib/esm/features/magic-pdf/AnnotatedImageSlider.js.map +1 -1
- package/lib/esm/features/magic-pdf/DownloadPopover.js +5 -4
- package/lib/esm/features/magic-pdf/DownloadPopover.js.map +1 -1
- package/lib/esm/features/magic-pdf/MagicPdfView.js +8 -5
- package/lib/esm/features/magic-pdf/MagicPdfView.js.map +1 -1
- package/lib/esm/features/pdf-viewer/PdfPageSlider.js +9 -5
- package/lib/esm/features/pdf-viewer/PdfPageSlider.js.map +1 -1
- package/lib/esm/features/pdf-viewer/SimplePdfViewer.js +5 -3
- package/lib/esm/features/pdf-viewer/SimplePdfViewer.js.map +1 -1
- package/lib/esm/features/permissions/UserPermissionsProvider.js +3 -1
- package/lib/esm/features/permissions/UserPermissionsProvider.js.map +1 -1
- package/lib/esm/features/store/collections/BrowseCollectionView.js +9 -1
- package/lib/esm/features/store/collections/BrowseCollectionView.js.map +1 -1
- package/lib/esm/features/store/collections/CollectionsTable.js +14 -7
- package/lib/esm/features/store/collections/CollectionsTable.js.map +1 -1
- package/lib/esm/features/store/collections/CreateCollection.js +21 -18
- package/lib/esm/features/store/collections/CreateCollection.js.map +1 -1
- package/lib/esm/features/store/collections/EditCollectionView.js +23 -19
- package/lib/esm/features/store/collections/EditCollectionView.js.map +1 -1
- package/lib/esm/features/store/collections/SelectCollection.js +25 -10
- package/lib/esm/features/store/collections/SelectCollection.js.map +1 -1
- package/lib/esm/features/store/collections/SharedPropsEditor.js +5 -3
- package/lib/esm/features/store/collections/SharedPropsEditor.js.map +1 -1
- package/lib/esm/features/store/collections/SyncMemberHeadsToggle.js +5 -3
- package/lib/esm/features/store/collections/SyncMemberHeadsToggle.js.map +1 -1
- package/lib/esm/features/store/objects/DocumentPreviewPanel.js +14 -12
- package/lib/esm/features/store/objects/DocumentPreviewPanel.js.map +1 -1
- package/lib/esm/features/store/objects/DocumentSearchResults.js +15 -5
- package/lib/esm/features/store/objects/DocumentSearchResults.js.map +1 -1
- package/lib/esm/features/store/objects/DocumentTable.js +10 -7
- package/lib/esm/features/store/objects/DocumentTable.js.map +1 -1
- package/lib/esm/features/store/objects/ExportPropertiesModal.js +5 -2
- package/lib/esm/features/store/objects/ExportPropertiesModal.js.map +1 -1
- package/lib/esm/features/store/objects/components/ContentDispositionButton.js +3 -1
- package/lib/esm/features/store/objects/components/ContentDispositionButton.js.map +1 -1
- package/lib/esm/features/store/objects/components/ContentOverview.js +55 -40
- package/lib/esm/features/store/objects/components/ContentOverview.js.map +1 -1
- package/lib/esm/features/store/objects/components/DocumentIcon.js +4 -3
- package/lib/esm/features/store/objects/components/DocumentIcon.js.map +1 -1
- package/lib/esm/features/store/objects/components/PropertiesEditorModal.js +13 -11
- package/lib/esm/features/store/objects/components/PropertiesEditorModal.js.map +1 -1
- package/lib/esm/features/store/objects/components/SaveVersionConfirmModal.js +15 -18
- package/lib/esm/features/store/objects/components/SaveVersionConfirmModal.js.map +1 -1
- package/lib/esm/features/store/objects/components/SelectDocument.js +9 -6
- package/lib/esm/features/store/objects/components/SelectDocument.js.map +1 -1
- package/lib/esm/features/store/objects/components/TextEditorPanel.js +97 -0
- package/lib/esm/features/store/objects/components/TextEditorPanel.js.map +1 -0
- package/lib/esm/features/store/objects/components/VectorSearchWidget.js +3 -1
- package/lib/esm/features/store/objects/components/VectorSearchWidget.js.map +1 -1
- package/lib/esm/features/store/objects/components/useContentPanelHooks.js +4 -2
- package/lib/esm/features/store/objects/components/useContentPanelHooks.js.map +1 -1
- package/lib/esm/features/store/objects/components/useDownloadFile.js +12 -10
- package/lib/esm/features/store/objects/components/useDownloadFile.js.map +1 -1
- package/lib/esm/features/store/objects/layout/documentLayout.js +10 -6
- package/lib/esm/features/store/objects/layout/documentLayout.js.map +1 -1
- package/lib/esm/features/store/objects/layout/renderers.js +10 -1
- package/lib/esm/features/store/objects/layout/renderers.js.map +1 -1
- package/lib/esm/features/store/objects/search/DocumentSearchContext.js +3 -2
- package/lib/esm/features/store/objects/search/DocumentSearchContext.js.map +1 -1
- package/lib/esm/features/store/objects/search/DocumentSearchProvider.js +3 -0
- package/lib/esm/features/store/objects/search/DocumentSearchProvider.js.map +1 -1
- package/lib/esm/features/store/objects/selection/ObjectsActionContext.js +22 -109
- package/lib/esm/features/store/objects/selection/ObjectsActionContext.js.map +1 -1
- package/lib/esm/features/store/objects/selection/ObjectsActionContextClass.js +50 -0
- package/lib/esm/features/store/objects/selection/ObjectsActionContextClass.js.map +1 -0
- package/lib/esm/features/store/objects/selection/ObjectsActionHooks.js +27 -0
- package/lib/esm/features/store/objects/selection/ObjectsActionHooks.js.map +1 -0
- package/lib/esm/features/store/objects/selection/SelectionActions.js +10 -6
- package/lib/esm/features/store/objects/selection/SelectionActions.js.map +1 -1
- package/lib/esm/features/store/objects/selection/actions/AddToCollectionAction.js +17 -12
- package/lib/esm/features/store/objects/selection/actions/AddToCollectionAction.js.map +1 -1
- package/lib/esm/features/store/objects/selection/actions/ChangeTypeAction.js +9 -5
- package/lib/esm/features/store/objects/selection/actions/ChangeTypeAction.js.map +1 -1
- package/lib/esm/features/store/objects/selection/actions/ConfirmAction.js +4 -2
- package/lib/esm/features/store/objects/selection/actions/ConfirmAction.js.map +1 -1
- package/lib/esm/features/store/objects/selection/actions/DeleteObjectsAction.js +24 -23
- package/lib/esm/features/store/objects/selection/actions/DeleteObjectsAction.js.map +1 -1
- package/lib/esm/features/store/objects/selection/actions/ExportPropertiesAction.js +10 -5
- package/lib/esm/features/store/objects/selection/actions/ExportPropertiesAction.js.map +1 -1
- package/lib/esm/features/store/objects/selection/actions/RemoveFromCollectionAction.js +13 -9
- package/lib/esm/features/store/objects/selection/actions/RemoveFromCollectionAction.js.map +1 -1
- package/lib/esm/features/store/objects/selection/actions/StartWorkflowComponent.js +14 -8
- package/lib/esm/features/store/objects/selection/actions/StartWorkflowComponent.js.map +1 -1
- package/lib/esm/features/store/objects/upload/DocumentUploadModal.js +42 -39
- package/lib/esm/features/store/objects/upload/DocumentUploadModal.js.map +1 -1
- package/lib/esm/features/store/objects/upload/useSmartFileUploadProcessing.js +4 -2
- package/lib/esm/features/store/objects/upload/useSmartFileUploadProcessing.js.map +1 -1
- package/lib/esm/features/store/objects/upload/useUploadHandler.js +9 -7
- package/lib/esm/features/store/objects/upload/useUploadHandler.js.map +1 -1
- package/lib/esm/features/store/types/ContentObjectTypesSearch.js +6 -4
- package/lib/esm/features/store/types/ContentObjectTypesSearch.js.map +1 -1
- package/lib/esm/features/store/types/ContentObjectTypesTable.js +3 -1
- package/lib/esm/features/store/types/ContentObjectTypesTable.js.map +1 -1
- package/lib/esm/features/store/types/CreateOrUpdateTypeModal.js +6 -7
- package/lib/esm/features/store/types/CreateOrUpdateTypeModal.js.map +1 -1
- package/lib/esm/features/store/types/ObjectSchemaEditor.js +9 -7
- package/lib/esm/features/store/types/ObjectSchemaEditor.js.map +1 -1
- package/lib/esm/features/store/types/SelectContentType.js +9 -7
- package/lib/esm/features/store/types/SelectContentType.js.map +1 -1
- package/lib/esm/features/store/types/SelectContentTypeModal.js +5 -2
- package/lib/esm/features/store/types/SelectContentTypeModal.js.map +1 -1
- package/lib/esm/features/store/types/TableLayoutEditor.js +6 -4
- package/lib/esm/features/store/types/TableLayoutEditor.js.map +1 -1
- package/lib/esm/features/user/UserInfo.js +40 -50
- package/lib/esm/features/user/UserInfo.js.map +1 -1
- package/lib/esm/i18n/index.js +31 -0
- package/lib/esm/i18n/index.js.map +1 -0
- package/lib/esm/i18n/instance.js +46 -0
- package/lib/esm/i18n/instance.js.map +1 -0
- package/lib/esm/i18n/locales/ar.json +696 -0
- package/lib/esm/i18n/locales/de.json +664 -0
- package/lib/esm/i18n/locales/en.json +665 -0
- package/lib/esm/i18n/locales/es.json +670 -0
- package/lib/esm/i18n/locales/fr.json +672 -0
- package/lib/esm/i18n/locales/it.json +670 -0
- package/lib/esm/i18n/locales/ja.json +664 -0
- package/lib/esm/i18n/locales/ko.json +664 -0
- package/lib/esm/i18n/locales/pt.json +670 -0
- package/lib/esm/i18n/locales/ru.json +680 -0
- package/lib/esm/i18n/locales/tr.json +664 -0
- package/lib/esm/i18n/locales/zh-TW.json +664 -0
- package/lib/esm/i18n/locales/zh.json +664 -0
- package/lib/esm/layout/FullHeightLayout.js +3 -0
- package/lib/esm/layout/FullHeightLayout.js.map +1 -1
- package/lib/esm/layout/Navbar.js +3 -1
- package/lib/esm/layout/Navbar.js.map +1 -1
- package/lib/esm/layout/RegionTag.js +15 -0
- package/lib/esm/layout/RegionTag.js.map +1 -0
- package/lib/esm/layout/Sidebar.js +2 -2
- package/lib/esm/layout/Sidebar.js.map +1 -1
- package/lib/esm/layout/index.js +1 -0
- package/lib/esm/layout/index.js.map +1 -1
- package/lib/esm/router/HistoryNavigator.js +1 -1
- package/lib/esm/router/HistoryNavigator.js.map +1 -1
- package/lib/esm/router/Nav.js +5 -3
- package/lib/esm/router/Nav.js.map +1 -1
- package/lib/esm/router/NestedNavigationContext.js +4 -0
- package/lib/esm/router/NestedNavigationContext.js.map +1 -1
- package/lib/esm/router/NestedRouterProvider.js +3 -1
- package/lib/esm/router/NestedRouterProvider.js.map +1 -1
- package/lib/esm/router/Router.js +21 -6
- package/lib/esm/router/Router.js.map +1 -1
- package/lib/esm/session/UserSession.js +33 -4
- package/lib/esm/session/UserSession.js.map +1 -1
- package/lib/esm/session/UserSessionProvider.js +6 -13
- package/lib/esm/session/UserSessionProvider.js.map +1 -1
- package/lib/esm/session/auth/composable.js +1 -1
- package/lib/esm/session/auth/composable.js.map +1 -1
- package/lib/esm/session/auth/domainRouting.js +17 -0
- package/lib/esm/session/auth/domainRouting.js.map +1 -0
- package/lib/esm/session/auth/firebase.js +1 -1
- package/lib/esm/session/auth/firebase.js.map +1 -1
- package/lib/esm/session/auth/useCurrentTenant.js +3 -1
- package/lib/esm/session/auth/useCurrentTenant.js.map +1 -1
- package/lib/esm/shell/SplashScreen.js +3 -7
- package/lib/esm/shell/SplashScreen.js.map +1 -1
- package/lib/esm/shell/apps/StandaloneApp.js +5 -2
- package/lib/esm/shell/apps/StandaloneApp.js.map +1 -1
- package/lib/esm/shell/login/EnterpriseSigninButton.js +5 -3
- package/lib/esm/shell/login/EnterpriseSigninButton.js.map +1 -1
- package/lib/esm/shell/login/GitHubSignInButton.js +3 -7
- package/lib/esm/shell/login/GitHubSignInButton.js.map +1 -1
- package/lib/esm/shell/login/GoogleSignInButton.js +3 -1
- package/lib/esm/shell/login/GoogleSignInButton.js.map +1 -1
- package/lib/esm/shell/login/InviteAcceptModal.js +5 -2
- package/lib/esm/shell/login/InviteAcceptModal.js.map +1 -1
- package/lib/esm/shell/login/MicrosoftSigninButton.js +4 -6
- package/lib/esm/shell/login/MicrosoftSigninButton.js.map +1 -1
- package/lib/esm/shell/login/SigninScreen.js +6 -2
- package/lib/esm/shell/login/SigninScreen.js.map +1 -1
- package/lib/esm/shell/login/SignupForm.js +36 -34
- package/lib/esm/shell/login/SignupForm.js.map +1 -1
- package/lib/esm/shell/login/TerminalLogin.js +29 -22
- package/lib/esm/shell/login/TerminalLogin.js.map +1 -1
- package/lib/esm/shell/login/UserInfo.js +6 -4
- package/lib/esm/shell/login/UserInfo.js.map +1 -1
- package/lib/esm/shell/login/UserSessionMenu.js +3 -4
- package/lib/esm/shell/login/UserSessionMenu.js.map +1 -1
- package/lib/esm/widgets/index.js +0 -1
- package/lib/esm/widgets/index.js.map +1 -1
- package/lib/esm/widgets/json-view/JSONCode.js +1 -1
- package/lib/esm/widgets/json-view/JSONCode.js.map +1 -1
- package/lib/esm/widgets/json-view/JSONDisplay.js +6 -2
- package/lib/esm/widgets/json-view/JSONDisplay.js.map +1 -1
- package/lib/esm/widgets/json-view/JSONSwitcher.js +6 -0
- package/lib/esm/widgets/json-view/JSONSwitcher.js.map +1 -0
- package/lib/esm/widgets/json-view/JSONView.js +1 -1
- package/lib/esm/widgets/json-view/JSONView.js.map +1 -1
- package/lib/esm/widgets/json-view/index.js +1 -0
- package/lib/esm/widgets/json-view/index.js.map +1 -1
- package/lib/esm/widgets/markdown/ArtifactContentRenderer.js +6 -5
- package/lib/esm/widgets/markdown/ArtifactContentRenderer.js.map +1 -1
- package/lib/esm/widgets/markdown/CodeBlockContext.js +11 -0
- package/lib/esm/widgets/markdown/CodeBlockContext.js.map +1 -0
- package/lib/esm/widgets/markdown/MarkdownRenderer.js +11 -10
- package/lib/esm/widgets/markdown/MarkdownRenderer.js.map +1 -1
- package/lib/esm/widgets/markdown/codeBlockHandlers.js +11 -12
- package/lib/esm/widgets/markdown/codeBlockHandlers.js.map +1 -1
- package/lib/esm/widgets/markdown/index.js +10 -9
- package/lib/esm/widgets/markdown/index.js.map +1 -1
- package/lib/esm/widgets/markdown/remarkDirectiveHandler.js +0 -1
- package/lib/esm/widgets/markdown/remarkDirectiveHandler.js.map +1 -1
- package/lib/esm/widgets/schema-editor/ManagedSchema.js +6 -5
- package/lib/esm/widgets/schema-editor/ManagedSchema.js.map +1 -1
- package/lib/esm/widgets/schema-editor/editor/PropertyEditor.js +7 -3
- package/lib/esm/widgets/schema-editor/editor/PropertyEditor.js.map +1 -1
- package/lib/esm/widgets/schema-editor/editor/SchemaEditor.js +3 -1
- package/lib/esm/widgets/schema-editor/editor/SchemaEditor.js.map +1 -1
- package/lib/esm/widgets/upload/DropZone.js +9 -11
- package/lib/esm/widgets/upload/DropZone.js.map +1 -1
- package/lib/esm/widgets/upload/UploadResultCategory.js +3 -1
- package/lib/esm/widgets/upload/UploadResultCategory.js.map +1 -1
- package/lib/esm/widgets/upload/UploadSummary.js +3 -1
- package/lib/esm/widgets/upload/UploadSummary.js.map +1 -1
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/lib/types/core/components/SelectList.d.ts.map +1 -1
- package/lib/types/core/components/SidePanel.d.ts +4 -2
- package/lib/types/core/components/SidePanel.d.ts.map +1 -1
- package/lib/types/core/components/index.d.ts +0 -5
- package/lib/types/core/components/index.d.ts.map +1 -1
- package/lib/types/core/components/shadcn/badge.d.ts +2 -2
- package/lib/types/core/components/shadcn/breadcrumb.d.ts +1 -1
- package/lib/types/core/components/shadcn/breadcrumb.d.ts.map +1 -1
- package/lib/types/core/components/shadcn/button.d.ts.map +1 -1
- package/lib/types/core/components/shadcn/collaspible.d.ts +6 -0
- package/lib/types/core/components/shadcn/collaspible.d.ts.map +1 -0
- package/lib/types/core/components/shadcn/dropdown.d.ts +51 -0
- package/lib/types/core/components/shadcn/dropdown.d.ts.map +1 -0
- package/lib/types/core/components/shadcn/filters/comboBox/DateCombobox.d.ts.map +1 -1
- package/lib/types/core/components/shadcn/filters/comboBox/SelectCombobox.d.ts.map +1 -1
- package/lib/types/core/components/shadcn/filters/filter/dateFilter.d.ts.map +1 -1
- package/lib/types/core/components/shadcn/filters/filterBar.d.ts.map +1 -1
- package/lib/types/core/components/shadcn/index.d.ts +4 -0
- package/lib/types/core/components/shadcn/index.d.ts.map +1 -1
- package/lib/types/core/components/shadcn/input.d.ts +1 -1
- package/lib/types/core/components/shadcn/modal/ConfirmModal.d.ts +2 -1
- package/lib/types/core/components/shadcn/modal/ConfirmModal.d.ts.map +1 -1
- package/lib/types/core/components/shadcn/modal/DeleteModal.d.ts.map +1 -1
- package/lib/types/core/components/shadcn/popover.d.ts +11 -3
- package/lib/types/core/components/shadcn/popover.d.ts.map +1 -1
- package/lib/types/core/components/shadcn/radioGroup.d.ts +26 -0
- package/lib/types/core/components/shadcn/radioGroup.d.ts.map +1 -0
- package/lib/types/core/components/shadcn/switch.d.ts +12 -0
- package/lib/types/core/components/shadcn/switch.d.ts.map +1 -0
- package/lib/types/core/components/shadcn/tabs.d.ts +4 -2
- package/lib/types/core/components/shadcn/tabs.d.ts.map +1 -1
- package/lib/types/core/components/shadcn/theme/ThemeSwitcher.d.ts +8 -2
- package/lib/types/core/components/shadcn/theme/ThemeSwitcher.d.ts.map +1 -1
- package/lib/types/core/components/toast/NotificationPanel.d.ts.map +1 -1
- package/lib/types/core/hooks/PortalContainerProvider.d.ts +1 -0
- package/lib/types/core/hooks/PortalContainerProvider.d.ts.map +1 -1
- package/lib/types/env/index.d.ts +12 -3
- package/lib/types/env/index.d.ts.map +1 -1
- package/lib/types/features/agent/PayloadBuilder.d.ts +31 -3
- package/lib/types/features/agent/PayloadBuilder.d.ts.map +1 -1
- package/lib/types/features/agent/chat/AgentRightPanel.d.ts +50 -0
- package/lib/types/features/agent/chat/AgentRightPanel.d.ts.map +1 -0
- package/lib/types/features/agent/chat/ArtifactsTab.d.ts +9 -0
- package/lib/types/features/agent/chat/ArtifactsTab.d.ts.map +1 -0
- package/lib/types/features/agent/chat/AskUserWidget.d.ts.map +1 -1
- package/lib/types/features/agent/chat/DocumentPanel.d.ts.map +1 -1
- package/lib/types/features/agent/chat/ImageLightbox.d.ts.map +1 -1
- package/lib/types/features/agent/chat/ModernAgentConversation.d.ts +22 -9
- package/lib/types/features/agent/chat/ModernAgentConversation.d.ts.map +1 -1
- package/lib/types/features/agent/chat/ModernAgentOutput/AllMessagesMixed.d.ts +3 -1
- package/lib/types/features/agent/chat/ModernAgentOutput/AllMessagesMixed.d.ts.map +1 -1
- package/lib/types/features/agent/chat/ModernAgentOutput/BatchProgressPanel.d.ts.map +1 -1
- package/lib/types/features/agent/chat/ModernAgentOutput/Header.d.ts +13 -4
- package/lib/types/features/agent/chat/ModernAgentOutput/Header.d.ts.map +1 -1
- package/lib/types/features/agent/chat/ModernAgentOutput/InlineSlidingPlanPanel.d.ts +1 -1
- package/lib/types/features/agent/chat/ModernAgentOutput/InlineSlidingPlanPanel.d.ts.map +1 -1
- package/lib/types/features/agent/chat/ModernAgentOutput/MessageInput.d.ts.map +1 -1
- package/lib/types/features/agent/chat/ModernAgentOutput/MessageItem.d.ts.map +1 -1
- package/lib/types/features/agent/chat/ModernAgentOutput/PlanPanel.d.ts.map +1 -1
- package/lib/types/features/agent/chat/ModernAgentOutput/SlidingPlanPanel.d.ts.map +1 -1
- package/lib/types/features/agent/chat/ModernAgentOutput/StreamingMessage.d.ts +3 -1
- package/lib/types/features/agent/chat/ModernAgentOutput/StreamingMessage.d.ts.map +1 -1
- package/lib/types/features/agent/chat/ModernAgentOutput/ToolCallGroup.d.ts +5 -1
- package/lib/types/features/agent/chat/ModernAgentOutput/ToolCallGroup.d.ts.map +1 -1
- package/lib/types/features/agent/chat/ModernAgentOutput/WorkstreamTabs.d.ts.map +1 -1
- package/lib/types/features/agent/chat/ModernAgentOutput/utils.d.ts +16 -1
- package/lib/types/features/agent/chat/ModernAgentOutput/utils.d.ts.map +1 -1
- package/lib/types/features/agent/chat/SlidingThinkingIndicator.d.ts.map +1 -1
- package/lib/types/features/agent/chat/VegaLiteChart.d.ts.map +1 -1
- package/lib/types/features/agent/chat/hooks/useAgentPlans.d.ts.map +1 -1
- package/lib/types/features/agent/chat/hooks/useAgentStream.d.ts +5 -3
- package/lib/types/features/agent/chat/hooks/useAgentStream.d.ts.map +1 -1
- package/lib/types/features/agent/chat/hooks/useArtifacts.d.ts +18 -0
- package/lib/types/features/agent/chat/hooks/useArtifacts.d.ts.map +1 -0
- package/lib/types/features/agent/chat/hooks/useDocumentPanel.d.ts.map +1 -1
- package/lib/types/features/agent/chat/hooks/useFileProcessing.d.ts +4 -4
- package/lib/types/features/agent/chat/hooks/useFileProcessing.d.ts.map +1 -1
- package/lib/types/features/agent/chat/types/document.d.ts +2 -0
- package/lib/types/features/agent/chat/types/document.d.ts.map +1 -1
- package/lib/types/features/errors/PanelErrorBoundary.d.ts.map +1 -1
- package/lib/types/features/facets/AgentRunnerFacetsNav.d.ts +2 -1
- package/lib/types/features/facets/AgentRunnerFacetsNav.d.ts.map +1 -1
- package/lib/types/features/facets/RunsFacetsNav.d.ts.map +1 -1
- package/lib/types/features/facets/index.d.ts +1 -1
- package/lib/types/features/facets/index.d.ts.map +1 -1
- package/lib/types/features/layout/GenericPageNavHeader.d.ts +2 -2
- package/lib/types/features/layout/GenericPageNavHeader.d.ts.map +1 -1
- package/lib/types/features/layout/NotFoundView.d.ts.map +1 -1
- package/lib/types/features/magic-pdf/AnnotatedImageSlider.d.ts.map +1 -1
- package/lib/types/features/magic-pdf/DownloadPopover.d.ts.map +1 -1
- package/lib/types/features/magic-pdf/MagicPdfView.d.ts.map +1 -1
- package/lib/types/features/pdf-viewer/PdfPageSlider.d.ts.map +1 -1
- package/lib/types/features/pdf-viewer/SimplePdfViewer.d.ts.map +1 -1
- package/lib/types/features/permissions/UserPermissionsProvider.d.ts.map +1 -1
- package/lib/types/features/store/collections/BrowseCollectionView.d.ts.map +1 -1
- package/lib/types/features/store/collections/CollectionsTable.d.ts +4 -0
- package/lib/types/features/store/collections/CollectionsTable.d.ts.map +1 -1
- package/lib/types/features/store/collections/CreateCollection.d.ts.map +1 -1
- package/lib/types/features/store/collections/EditCollectionView.d.ts.map +1 -1
- package/lib/types/features/store/collections/SelectCollection.d.ts.map +1 -1
- package/lib/types/features/store/collections/SharedPropsEditor.d.ts.map +1 -1
- package/lib/types/features/store/collections/SyncMemberHeadsToggle.d.ts.map +1 -1
- package/lib/types/features/store/objects/DocumentPreviewPanel.d.ts.map +1 -1
- package/lib/types/features/store/objects/DocumentSearchResults.d.ts.map +1 -1
- package/lib/types/features/store/objects/DocumentTable.d.ts.map +1 -1
- package/lib/types/features/store/objects/ExportPropertiesModal.d.ts.map +1 -1
- package/lib/types/features/store/objects/components/ContentDispositionButton.d.ts.map +1 -1
- package/lib/types/features/store/objects/components/ContentOverview.d.ts.map +1 -1
- package/lib/types/features/store/objects/components/DocumentIcon.d.ts +2 -1
- package/lib/types/features/store/objects/components/DocumentIcon.d.ts.map +1 -1
- package/lib/types/features/store/objects/components/PropertiesEditorModal.d.ts.map +1 -1
- package/lib/types/features/store/objects/components/SaveVersionConfirmModal.d.ts.map +1 -1
- package/lib/types/features/store/objects/components/SelectDocument.d.ts +3 -1
- package/lib/types/features/store/objects/components/SelectDocument.d.ts.map +1 -1
- package/lib/types/features/store/objects/components/TextEditorPanel.d.ts +10 -0
- package/lib/types/features/store/objects/components/TextEditorPanel.d.ts.map +1 -0
- package/lib/types/features/store/objects/components/VectorSearchWidget.d.ts.map +1 -1
- package/lib/types/features/store/objects/components/useContentPanelHooks.d.ts.map +1 -1
- package/lib/types/features/store/objects/components/useDownloadFile.d.ts.map +1 -1
- package/lib/types/features/store/objects/layout/documentLayout.d.ts +3 -2
- package/lib/types/features/store/objects/layout/documentLayout.d.ts.map +1 -1
- package/lib/types/features/store/objects/layout/renderers.d.ts.map +1 -1
- package/lib/types/features/store/objects/search/DocumentSearchContext.d.ts.map +1 -1
- package/lib/types/features/store/objects/search/DocumentSearchProvider.d.ts.map +1 -1
- package/lib/types/features/store/objects/selection/ObjectsActionContext.d.ts +3 -20
- package/lib/types/features/store/objects/selection/ObjectsActionContext.d.ts.map +1 -1
- package/lib/types/features/store/objects/selection/ObjectsActionContextClass.d.ts +16 -0
- package/lib/types/features/store/objects/selection/ObjectsActionContextClass.d.ts.map +1 -0
- package/lib/types/features/store/objects/selection/ObjectsActionHooks.d.ts +7 -0
- package/lib/types/features/store/objects/selection/ObjectsActionHooks.d.ts.map +1 -0
- package/lib/types/features/store/objects/selection/ObjectsActionSpec.d.ts +4 -1
- package/lib/types/features/store/objects/selection/ObjectsActionSpec.d.ts.map +1 -1
- package/lib/types/features/store/objects/selection/SelectionActions.d.ts +6 -1
- package/lib/types/features/store/objects/selection/SelectionActions.d.ts.map +1 -1
- package/lib/types/features/store/objects/selection/actions/AddToCollectionAction.d.ts.map +1 -1
- package/lib/types/features/store/objects/selection/actions/ChangeTypeAction.d.ts.map +1 -1
- package/lib/types/features/store/objects/selection/actions/ConfirmAction.d.ts +1 -1
- package/lib/types/features/store/objects/selection/actions/ConfirmAction.d.ts.map +1 -1
- package/lib/types/features/store/objects/selection/actions/DeleteObjectsAction.d.ts.map +1 -1
- package/lib/types/features/store/objects/selection/actions/ExportPropertiesAction.d.ts.map +1 -1
- package/lib/types/features/store/objects/selection/actions/RemoveFromCollectionAction.d.ts.map +1 -1
- package/lib/types/features/store/objects/selection/actions/StartWorkflowComponent.d.ts.map +1 -1
- package/lib/types/features/store/objects/upload/DocumentUploadModal.d.ts.map +1 -1
- package/lib/types/features/store/objects/upload/useSmartFileUploadProcessing.d.ts.map +1 -1
- package/lib/types/features/store/objects/upload/useUploadHandler.d.ts.map +1 -1
- package/lib/types/features/store/types/ContentObjectTypesSearch.d.ts.map +1 -1
- package/lib/types/features/store/types/ContentObjectTypesTable.d.ts.map +1 -1
- package/lib/types/features/store/types/CreateOrUpdateTypeModal.d.ts +2 -1
- package/lib/types/features/store/types/CreateOrUpdateTypeModal.d.ts.map +1 -1
- package/lib/types/features/store/types/ObjectSchemaEditor.d.ts.map +1 -1
- package/lib/types/features/store/types/SelectContentType.d.ts.map +1 -1
- package/lib/types/features/store/types/SelectContentTypeModal.d.ts.map +1 -1
- package/lib/types/features/store/types/TableLayoutEditor.d.ts.map +1 -1
- package/lib/types/features/user/UserInfo.d.ts +2 -2
- package/lib/types/features/user/UserInfo.d.ts.map +1 -1
- package/lib/types/i18n/index.d.ts +14 -0
- package/lib/types/i18n/index.d.ts.map +1 -0
- package/lib/types/i18n/instance.d.ts +5 -0
- package/lib/types/i18n/instance.d.ts.map +1 -0
- package/lib/types/layout/FullHeightLayout.d.ts +3 -0
- package/lib/types/layout/FullHeightLayout.d.ts.map +1 -1
- package/lib/types/layout/Navbar.d.ts.map +1 -1
- package/lib/types/layout/RegionTag.d.ts +4 -0
- package/lib/types/layout/RegionTag.d.ts.map +1 -0
- package/lib/types/layout/Sidebar.d.ts +2 -1
- package/lib/types/layout/Sidebar.d.ts.map +1 -1
- package/lib/types/layout/index.d.ts +1 -0
- package/lib/types/layout/index.d.ts.map +1 -1
- package/lib/types/router/Nav.d.ts +5 -1
- package/lib/types/router/Nav.d.ts.map +1 -1
- package/lib/types/router/NestedNavigationContext.d.ts.map +1 -1
- package/lib/types/router/NestedRouterProvider.d.ts.map +1 -1
- package/lib/types/router/Router.d.ts +2 -0
- package/lib/types/router/Router.d.ts.map +1 -1
- package/lib/types/session/UserSession.d.ts +1 -0
- package/lib/types/session/UserSession.d.ts.map +1 -1
- package/lib/types/session/UserSessionProvider.d.ts +0 -1
- package/lib/types/session/UserSessionProvider.d.ts.map +1 -1
- package/lib/types/session/auth/domainRouting.d.ts +3 -0
- package/lib/types/session/auth/domainRouting.d.ts.map +1 -0
- package/lib/types/session/auth/useCurrentTenant.d.ts.map +1 -1
- package/lib/types/shell/SplashScreen.d.ts.map +1 -1
- package/lib/types/shell/apps/StandaloneApp.d.ts.map +1 -1
- package/lib/types/shell/login/EnterpriseSigninButton.d.ts.map +1 -1
- package/lib/types/shell/login/GitHubSignInButton.d.ts.map +1 -1
- package/lib/types/shell/login/GoogleSignInButton.d.ts.map +1 -1
- package/lib/types/shell/login/InviteAcceptModal.d.ts.map +1 -1
- package/lib/types/shell/login/MicrosoftSigninButton.d.ts +1 -1
- package/lib/types/shell/login/MicrosoftSigninButton.d.ts.map +1 -1
- package/lib/types/shell/login/SigninScreen.d.ts.map +1 -1
- package/lib/types/shell/login/SignupForm.d.ts.map +1 -1
- package/lib/types/shell/login/TerminalLogin.d.ts.map +1 -1
- package/lib/types/shell/login/UserInfo.d.ts.map +1 -1
- package/lib/types/shell/login/UserSessionMenu.d.ts.map +1 -1
- package/lib/types/widgets/index.d.ts +0 -1
- package/lib/types/widgets/index.d.ts.map +1 -1
- package/lib/types/widgets/json-view/JSONDisplay.d.ts.map +1 -1
- package/lib/types/widgets/json-view/JSONSwitcher.d.ts +6 -0
- package/lib/types/widgets/json-view/JSONSwitcher.d.ts.map +1 -0
- package/lib/types/widgets/json-view/index.d.ts +1 -0
- package/lib/types/widgets/json-view/index.d.ts.map +1 -1
- package/lib/types/widgets/markdown/ArtifactContentRenderer.d.ts.map +1 -1
- package/lib/types/widgets/markdown/CodeBlockContext.d.ts +21 -0
- package/lib/types/widgets/markdown/CodeBlockContext.d.ts.map +1 -0
- package/lib/types/widgets/markdown/MarkdownRenderer.d.ts.map +1 -1
- package/lib/types/widgets/markdown/codeBlockHandlers.d.ts +0 -12
- package/lib/types/widgets/markdown/codeBlockHandlers.d.ts.map +1 -1
- package/lib/types/widgets/markdown/index.d.ts +10 -9
- package/lib/types/widgets/markdown/index.d.ts.map +1 -1
- package/lib/types/widgets/schema-editor/ManagedSchema.d.ts +1 -1
- package/lib/types/widgets/schema-editor/ManagedSchema.d.ts.map +1 -1
- package/lib/types/widgets/schema-editor/editor/PropertyEditor.d.ts.map +1 -1
- package/lib/types/widgets/schema-editor/editor/SchemaEditor.d.ts.map +1 -1
- package/lib/types/widgets/upload/DropZone.d.ts.map +1 -1
- package/lib/types/widgets/upload/UploadResultCategory.d.ts.map +1 -1
- package/lib/types/widgets/upload/UploadSummary.d.ts.map +1 -1
- package/lib/vertesia-ui-core.js +1 -1
- package/lib/vertesia-ui-core.js.map +1 -1
- package/lib/vertesia-ui-env.js +1 -1
- package/lib/vertesia-ui-env.js.map +1 -1
- package/lib/vertesia-ui-features.js +1 -1
- package/lib/vertesia-ui-features.js.map +1 -1
- package/lib/vertesia-ui-i18n.js +2 -0
- package/lib/vertesia-ui-i18n.js.map +1 -0
- package/lib/vertesia-ui-layout.js +1 -1
- package/lib/vertesia-ui-layout.js.map +1 -1
- package/lib/vertesia-ui-router.js +1 -1
- package/lib/vertesia-ui-router.js.map +1 -1
- package/lib/vertesia-ui-session.js +1 -1
- package/lib/vertesia-ui-session.js.map +1 -1
- package/lib/vertesia-ui-shell.js +1 -1
- package/lib/vertesia-ui-shell.js.map +1 -1
- package/lib/vertesia-ui-widgets.js +1 -1
- package/lib/vertesia-ui-widgets.js.map +1 -1
- package/llms.txt +124 -4
- package/package.json +50 -22
- package/src/core/components/SelectList.tsx +3 -1
- package/src/core/components/SidePanel.tsx +5 -4
- package/src/core/components/index.ts +0 -5
- package/src/core/components/shadcn/breadcrumb.tsx +16 -9
- package/src/core/components/shadcn/button.tsx +5 -3
- package/src/core/components/shadcn/collaspible.tsx +33 -0
- package/src/core/components/shadcn/dropdown.tsx +325 -0
- package/src/core/components/shadcn/filters/comboBox/DateCombobox.tsx +3 -1
- package/src/core/components/shadcn/filters/comboBox/SelectCombobox.tsx +3 -1
- package/src/core/components/shadcn/filters/comboBox/StringListCombobox.tsx +1 -1
- package/src/core/components/shadcn/filters/filter/StringListFilter.tsx +1 -1
- package/src/core/components/shadcn/filters/filter/dateFilter.tsx +5 -3
- package/src/core/components/shadcn/filters/filterBar.tsx +8 -5
- package/src/core/components/shadcn/index.ts +5 -1
- package/src/core/components/shadcn/modal/ConfirmModal.tsx +7 -3
- package/src/core/components/shadcn/modal/DeleteModal.tsx +5 -3
- package/src/core/components/shadcn/popover.tsx +12 -7
- package/src/core/components/shadcn/radioGroup.tsx +100 -0
- package/src/core/components/shadcn/selectBox.tsx +1 -1
- package/src/core/components/shadcn/switch.tsx +60 -0
- package/src/core/components/shadcn/tabs.tsx +29 -27
- package/src/core/components/shadcn/theme/ThemeSwitcher.tsx +19 -10
- package/src/core/components/shadcn/tooltip.tsx +1 -1
- package/src/core/components/toast/NotificationPanel.tsx +38 -44
- package/src/core/hooks/PortalContainerProvider.tsx +11 -3
- package/src/css/base.css +31 -0
- package/src/css/color.css +136 -0
- package/src/css/custom-tooltips.css +64 -0
- package/src/css/index.css +27 -0
- package/src/css/theme.css +86 -0
- package/src/css/typography.css +88 -0
- package/src/css/utilities.css +72 -0
- package/src/env/index.ts +24 -13
- package/src/features/agent/PayloadBuilder.tsx +100 -13
- package/src/features/agent/chat/AgentRightPanel.tsx +424 -0
- package/src/features/agent/chat/ArtifactsTab.tsx +197 -0
- package/src/features/agent/chat/AskUserWidget.tsx +14 -8
- package/src/features/agent/chat/DocumentPanel.tsx +24 -9
- package/src/features/agent/chat/ImageLightbox.tsx +6 -3
- package/src/features/agent/chat/ModernAgentConversation.tsx +538 -364
- package/src/features/agent/chat/ModernAgentOutput/AllMessagesMixed.tsx +151 -55
- package/src/features/agent/chat/ModernAgentOutput/BatchProgressPanel.tsx +6 -4
- package/src/features/agent/chat/ModernAgentOutput/Header.tsx +183 -105
- package/src/features/agent/chat/ModernAgentOutput/InlineSlidingPlanPanel.tsx +21 -31
- package/src/features/agent/chat/ModernAgentOutput/MessageInput.tsx +119 -114
- package/src/features/agent/chat/ModernAgentOutput/MessageItem.tsx +26 -9
- package/src/features/agent/chat/ModernAgentOutput/PlanPanel.tsx +9 -7
- package/src/features/agent/chat/ModernAgentOutput/SlidingPlanPanel.tsx +15 -13
- package/src/features/agent/chat/ModernAgentOutput/StreamingMessage.tsx +8 -3
- package/src/features/agent/chat/ModernAgentOutput/ToolCallGroup.tsx +149 -49
- package/src/features/agent/chat/ModernAgentOutput/WorkstreamTabs.tsx +9 -5
- package/src/features/agent/chat/ModernAgentOutput/utils.test.ts +229 -0
- package/src/features/agent/chat/ModernAgentOutput/utils.ts +202 -97
- package/src/features/agent/chat/SlidingThinkingIndicator.tsx +5 -3
- package/src/features/agent/chat/VegaLiteChart.tsx +20 -8
- package/src/features/agent/chat/hooks/useAgentPlans.ts +3 -9
- package/src/features/agent/chat/hooks/useAgentStream.ts +86 -19
- package/src/features/agent/chat/hooks/useArtifacts.ts +151 -0
- package/src/features/agent/chat/hooks/useDocumentPanel.ts +65 -5
- package/src/features/agent/chat/hooks/useFileProcessing.ts +14 -13
- package/src/features/agent/chat/types/document.ts +2 -0
- package/src/features/errors/PanelErrorBoundary.tsx +5 -3
- package/src/features/facets/AgentRunnerFacetsNav.tsx +54 -35
- package/src/features/facets/RunsFacetsNav.tsx +15 -7
- package/src/features/facets/index.ts +1 -1
- package/src/features/layout/GenericPageNavHeader.tsx +64 -41
- package/src/features/layout/NotFoundView.tsx +4 -1
- package/src/features/magic-pdf/AnnotatedImageSlider.tsx +12 -8
- package/src/features/magic-pdf/DownloadPopover.tsx +11 -10
- package/src/features/magic-pdf/MagicPdfView.tsx +10 -7
- package/src/features/pdf-viewer/PdfPageSlider.tsx +10 -6
- package/src/features/pdf-viewer/SimplePdfViewer.tsx +5 -3
- package/src/features/permissions/UserPermissionsProvider.tsx +3 -1
- package/src/features/store/collections/BrowseCollectionView.tsx +11 -1
- package/src/features/store/collections/CollectionsTable.tsx +20 -12
- package/src/features/store/collections/CreateCollection.tsx +45 -40
- package/src/features/store/collections/EditCollectionView.tsx +31 -28
- package/src/features/store/collections/SelectCollection.tsx +50 -14
- package/src/features/store/collections/SharedPropsEditor.tsx +7 -5
- package/src/features/store/collections/SyncMemberHeadsToggle.tsx +6 -4
- package/src/features/store/objects/DocumentPreviewPanel.tsx +30 -28
- package/src/features/store/objects/DocumentSearchResults.tsx +31 -21
- package/src/features/store/objects/DocumentTable.tsx +11 -5
- package/src/features/store/objects/ExportPropertiesModal.tsx +8 -5
- package/src/features/store/objects/components/ContentDispositionButton.tsx +3 -1
- package/src/features/store/objects/components/ContentOverview.tsx +96 -50
- package/src/features/store/objects/components/DocumentIcon.tsx +11 -3
- package/src/features/store/objects/components/PropertiesEditorModal.tsx +14 -12
- package/src/features/store/objects/components/SaveVersionConfirmModal.tsx +24 -37
- package/src/features/store/objects/components/SelectDocument.tsx +15 -6
- package/src/features/store/objects/components/TextEditorPanel.tsx +143 -0
- package/src/features/store/objects/components/VectorSearchWidget.tsx +11 -8
- package/src/features/store/objects/components/useContentPanelHooks.ts +4 -2
- package/src/features/store/objects/components/useDownloadFile.ts +12 -10
- package/src/features/store/objects/layout/documentLayout.tsx +16 -6
- package/src/features/store/objects/layout/renderers.tsx +27 -1
- package/src/features/store/objects/search/DocumentSearchContext.ts +3 -2
- package/src/features/store/objects/search/DocumentSearchProvider.tsx +3 -0
- package/src/features/store/objects/selection/ObjectsActionContext.tsx +26 -128
- package/src/features/store/objects/selection/ObjectsActionContextClass.ts +59 -0
- package/src/features/store/objects/selection/ObjectsActionHooks.ts +33 -0
- package/src/features/store/objects/selection/ObjectsActionSpec.ts +4 -1
- package/src/features/store/objects/selection/SelectionActions.tsx +14 -6
- package/src/features/store/objects/selection/actions/AddToCollectionAction.tsx +19 -14
- package/src/features/store/objects/selection/actions/ChangeTypeAction.tsx +9 -5
- package/src/features/store/objects/selection/actions/ConfirmAction.tsx +4 -3
- package/src/features/store/objects/selection/actions/DeleteObjectsAction.tsx +24 -23
- package/src/features/store/objects/selection/actions/ExportPropertiesAction.tsx +10 -5
- package/src/features/store/objects/selection/actions/RemoveFromCollectionAction.tsx +13 -9
- package/src/features/store/objects/selection/actions/StartWorkflowComponent.tsx +14 -8
- package/src/features/store/objects/upload/DocumentUploadModal.tsx +56 -55
- package/src/features/store/objects/upload/useSmartFileUploadProcessing.ts +4 -2
- package/src/features/store/objects/upload/useUploadHandler.ts +9 -7
- package/src/features/store/types/ContentObjectTypesSearch.tsx +10 -8
- package/src/features/store/types/ContentObjectTypesTable.tsx +6 -4
- package/src/features/store/types/CreateOrUpdateTypeModal.tsx +11 -12
- package/src/features/store/types/ObjectSchemaEditor.tsx +11 -9
- package/src/features/store/types/SelectContentType.tsx +15 -13
- package/src/features/store/types/SelectContentTypeModal.tsx +16 -13
- package/src/features/store/types/TableLayoutEditor.tsx +16 -12
- package/src/features/user/UserInfo.tsx +47 -56
- package/src/i18n/index.tsx +45 -0
- package/src/i18n/instance.ts +49 -0
- package/src/i18n/locales/ar.json +696 -0
- package/src/i18n/locales/de.json +664 -0
- package/src/i18n/locales/en.json +665 -0
- package/src/i18n/locales/es.json +670 -0
- package/src/i18n/locales/fr.json +672 -0
- package/src/i18n/locales/it.json +670 -0
- package/src/i18n/locales/ja.json +664 -0
- package/src/i18n/locales/ko.json +664 -0
- package/src/i18n/locales/pt.json +670 -0
- package/src/i18n/locales/ru.json +680 -0
- package/src/i18n/locales/tr.json +664 -0
- package/src/i18n/locales/zh-TW.json +664 -0
- package/src/i18n/locales/zh.json +664 -0
- package/src/layout/FullHeightLayout.tsx +8 -0
- package/src/layout/Navbar.tsx +4 -2
- package/src/layout/RegionTag.tsx +25 -0
- package/src/layout/Sidebar.tsx +4 -3
- package/src/layout/index.ts +2 -1
- package/src/router/HistoryNavigator.ts +10 -10
- package/src/router/Nav.tsx +9 -3
- package/src/router/NestedNavigationContext.tsx +4 -0
- package/src/router/NestedRouterProvider.tsx +3 -1
- package/src/router/Router.tsx +23 -7
- package/src/session/UserSession.ts +34 -5
- package/src/session/UserSessionProvider.tsx +6 -14
- package/src/session/auth/composable.ts +1 -1
- package/src/session/auth/domainRouting.test.ts +110 -0
- package/src/session/auth/domainRouting.ts +22 -0
- package/src/session/auth/firebase.ts +1 -1
- package/src/session/auth/useCurrentTenant.ts +3 -1
- package/src/shell/SplashScreen.tsx +22 -26
- package/src/shell/apps/StandaloneApp.tsx +9 -6
- package/src/shell/login/EnterpriseSigninButton.tsx +6 -4
- package/src/shell/login/GitHubSignInButton.tsx +3 -7
- package/src/shell/login/GoogleSignInButton.tsx +3 -1
- package/src/shell/login/InviteAcceptModal.tsx +5 -2
- package/src/shell/login/MicrosoftSigninButton.tsx +4 -6
- package/src/shell/login/SigninScreen.tsx +18 -13
- package/src/shell/login/SignupForm.tsx +46 -46
- package/src/shell/login/TerminalLogin.tsx +36 -33
- package/src/shell/login/UserInfo.tsx +15 -13
- package/src/shell/login/UserSessionMenu.tsx +28 -31
- package/src/widgets/index.ts +0 -1
- package/src/widgets/json-view/JSONCode.tsx +1 -1
- package/src/widgets/json-view/JSONDisplay.tsx +8 -3
- package/src/widgets/json-view/JSONSwitcher.tsx +24 -0
- package/src/widgets/json-view/JSONView.tsx +1 -1
- package/src/widgets/json-view/index.ts +1 -0
- package/src/widgets/markdown/ArtifactContentRenderer.tsx +15 -7
- package/src/widgets/markdown/CodeBlockContext.tsx +34 -0
- package/src/widgets/markdown/MarkdownRenderer.tsx +14 -13
- package/src/widgets/markdown/codeBlockHandlers.tsx +17 -36
- package/src/widgets/markdown/index.ts +27 -34
- package/src/widgets/markdown/remarkDirectiveHandler.ts +1 -1
- package/src/widgets/schema-editor/ManagedSchema.ts +6 -5
- package/src/widgets/schema-editor/editor/PropertyEditor.tsx +7 -3
- package/src/widgets/schema-editor/editor/SchemaEditor.tsx +3 -1
- package/src/widgets/upload/DropZone.tsx +10 -13
- package/src/widgets/upload/UploadResultCategory.tsx +3 -1
- package/src/widgets/upload/UploadSummary.tsx +13 -11
- package/tsconfig.dist.json +1 -1
- package/lib/esm/core/components/Dropdown.js +0 -16
- package/lib/esm/core/components/Dropdown.js.map +0 -1
- package/lib/esm/core/components/DropdownList.js +0 -9
- package/lib/esm/core/components/DropdownList.js.map +0 -1
- package/lib/esm/core/components/RadioGroup.js +0 -34
- package/lib/esm/core/components/RadioGroup.js.map +0 -1
- package/lib/esm/core/components/SelectStack.js +0 -8
- package/lib/esm/core/components/SelectStack.js.map +0 -1
- package/lib/esm/core/components/Switch.js +0 -12
- package/lib/esm/core/components/Switch.js.map +0 -1
- package/lib/esm/widgets/popover/Popover.js +0 -73
- package/lib/esm/widgets/popover/Popover.js.map +0 -1
- package/lib/esm/widgets/popover/context.js +0 -7
- package/lib/esm/widgets/popover/context.js.map +0 -1
- package/lib/esm/widgets/popover/index.js +0 -3
- package/lib/esm/widgets/popover/index.js.map +0 -1
- package/lib/esm/widgets/popover/slots.js +0 -22
- package/lib/esm/widgets/popover/slots.js.map +0 -1
- package/lib/types/core/components/Dropdown.d.ts +0 -15
- package/lib/types/core/components/Dropdown.d.ts.map +0 -1
- package/lib/types/core/components/DropdownList.d.ts +0 -13
- package/lib/types/core/components/DropdownList.d.ts.map +0 -1
- package/lib/types/core/components/RadioGroup.d.ts +0 -26
- package/lib/types/core/components/RadioGroup.d.ts.map +0 -1
- package/lib/types/core/components/SelectStack.d.ts +0 -13
- package/lib/types/core/components/SelectStack.d.ts.map +0 -1
- package/lib/types/core/components/Switch.d.ts +0 -11
- package/lib/types/core/components/Switch.d.ts.map +0 -1
- package/lib/types/widgets/popover/Popover.d.ts +0 -38
- package/lib/types/widgets/popover/Popover.d.ts.map +0 -1
- package/lib/types/widgets/popover/context.d.ts +0 -8
- package/lib/types/widgets/popover/context.d.ts.map +0 -1
- package/lib/types/widgets/popover/index.d.ts +0 -3
- package/lib/types/widgets/popover/index.d.ts.map +0 -1
- package/lib/types/widgets/popover/slots.d.ts +0 -5
- package/lib/types/widgets/popover/slots.d.ts.map +0 -1
- package/src/core/components/Dropdown.tsx +0 -63
- package/src/core/components/DropdownList.tsx +0 -72
- package/src/core/components/RadioGroup.tsx +0 -100
- package/src/core/components/SelectStack.tsx +0 -63
- package/src/core/components/Switch.tsx +0 -30
- package/src/widgets/popover/Popover.tsx +0 -171
- package/src/widgets/popover/context.ts +0 -15
- package/src/widgets/popover/index.ts +0 -2
- 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 {
|
|
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<{
|
|
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
|
-
|
|
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 {
|
|
215
|
-
|
|
216
|
-
if (
|
|
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}
|
|
240
|
+
<ModernAgentConversationInner {...props} agentRunId={agentRunId} />
|
|
228
241
|
</SkillWidgetProvider>
|
|
229
242
|
);
|
|
230
243
|
} else if (startWorkflow) {
|
|
231
|
-
// If we have startWorkflow capability but no
|
|
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
|
-
|
|
261
|
+
{t('agent.noAgentRunning')}
|
|
248
262
|
</div>
|
|
249
263
|
<div className="mt-3 text-sm text-muted">
|
|
250
|
-
|
|
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
|
|
265
|
-
startButtonText
|
|
266
|
-
title
|
|
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
|
|
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 [
|
|
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 ?
|
|
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
|
-
|
|
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.
|
|
417
|
+
await client.agents.uploadArtifact(agentId, artifactPath, file);
|
|
398
418
|
|
|
399
|
-
// Signal
|
|
400
|
-
await client.
|
|
401
|
-
|
|
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.
|
|
423
|
-
|
|
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
|
-
|
|
445
|
-
runId: newRun.run_id,
|
|
446
|
-
workflowId: newRun.workflow_id,
|
|
447
|
-
});
|
|
462
|
+
setStartedAgentRunId(agentId);
|
|
448
463
|
setInputValue("");
|
|
449
464
|
toast({
|
|
450
|
-
title:
|
|
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:
|
|
472
|
+
title: t('agent.errorStarting'),
|
|
458
473
|
status: "error",
|
|
459
474
|
duration: 3000,
|
|
460
|
-
description: err instanceof Error ? err.message :
|
|
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 (
|
|
504
|
+
if (startedAgentRunId) {
|
|
490
505
|
return (
|
|
491
506
|
<ModernAgentConversationInner
|
|
492
507
|
{...{ onClose, isModal, initialMessage, placeholder }}
|
|
493
|
-
|
|
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={
|
|
555
|
-
|
|
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
|
-
{
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
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
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
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
|
-
|
|
577
|
-
|
|
578
|
-
|
|
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
|
-
|
|
584
|
-
|
|
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">
|
|
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
|
-
|
|
625
|
+
{t('agent.upload')}
|
|
618
626
|
</Button>
|
|
619
627
|
</div>
|
|
620
628
|
|
|
621
629
|
<div className="flex items-end gap-2">
|
|
622
|
-
<
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
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
|
|
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
|
-
{
|
|
651
|
+
{resolvedStartButtonText}
|
|
646
652
|
</Button>
|
|
647
653
|
</div>
|
|
648
|
-
<div className="text-xs text-
|
|
654
|
+
<div className="text-xs text-muted mt-2 text-center">
|
|
649
655
|
{stagedFiles.length > 0
|
|
650
|
-
?
|
|
651
|
-
: '
|
|
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
|
-
|
|
667
|
+
agentRunId,
|
|
661
668
|
title,
|
|
662
669
|
interactive = true,
|
|
663
670
|
onClose,
|
|
664
671
|
isModal = false,
|
|
665
672
|
fullWidth = false,
|
|
666
|
-
placeholder
|
|
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
|
-
|
|
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
|
-
|
|
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,
|
|
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,
|
|
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
|
|
823
|
+
// Derive effective workflow status — only main workstream TERMINATED overrides API status.
|
|
800
824
|
const effectiveWorkflowStatus = useMemo(() => {
|
|
801
|
-
const
|
|
802
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
<
|
|
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={() =>
|
|
963
|
+
onClick={(e) => {
|
|
964
|
+
e.preventDefault();
|
|
965
|
+
e.stopPropagation();
|
|
966
|
+
openDocInPanel(documentId);
|
|
967
|
+
}}
|
|
848
968
|
>
|
|
849
969
|
{children}
|
|
850
|
-
</
|
|
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:
|
|
924
|
-
description:
|
|
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:
|
|
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.
|
|
961
|
-
.sendSignal(
|
|
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:
|
|
975
|
-
description: err instanceof Error ? err.message :
|
|
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
|
-
}, [
|
|
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 (
|
|
1144
|
+
if (e.dataTransfer?.types?.includes('Files')) {
|
|
990
1145
|
setIsDragOver(true);
|
|
991
1146
|
}
|
|
992
|
-
}, [
|
|
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 (
|
|
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
|
-
}, [
|
|
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.
|
|
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:
|
|
1033
|
-
description:
|
|
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:
|
|
1040
|
-
description: err instanceof Error ? err.message :
|
|
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,
|
|
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)
|
|
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,
|
|
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:
|
|
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:
|
|
1131
|
-
description:
|
|
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:
|
|
1144
|
-
description:
|
|
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} - ${
|
|
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:
|
|
1157
|
-
description:
|
|
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:
|
|
1166
|
-
description:
|
|
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
|
-
|
|
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
|
|
1201
|
-
|
|
1202
|
-
|
|
1203
|
-
|
|
1204
|
-
|
|
1205
|
-
|
|
1206
|
-
|
|
1207
|
-
|
|
1208
|
-
|
|
1209
|
-
|
|
1210
|
-
|
|
1211
|
-
|
|
1212
|
-
|
|
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
|
-
|
|
1235
|
-
|
|
1236
|
-
|
|
1237
|
-
|
|
1238
|
-
|
|
1239
|
-
|
|
1240
|
-
|
|
1241
|
-
|
|
1242
|
-
|
|
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
|
-
|
|
1345
|
-
|
|
1346
|
-
|
|
1347
|
-
|
|
1348
|
-
|
|
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
|
-
|
|
1361
|
-
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
|
-
|
|
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={
|
|
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
|
-
}
|