@vertesia/ui 1.0.0-dev.20260305.083323Z → 1.0.0-dev.20260331.091034Z
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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/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 +7 -4
- package/lib/esm/core/components/shadcn/theme/ThemeSwitcher.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 +12 -9
- 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 +25 -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 +28 -21
- 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 +3 -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/package.json +36 -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/switch.tsx +60 -0
- package/src/core/components/shadcn/tabs.tsx +29 -27
- package/src/core/components/shadcn/theme/ThemeSwitcher.tsx +13 -9
- package/src/core/components/toast/NotificationPanel.tsx +38 -44
- package/src/core/hooks/PortalContainerProvider.tsx +11 -3
- 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 +460 -279
- 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 +14 -11
- 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 +26 -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 +35 -31
- 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,11 +501,11 @@ 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
|
);
|
|
@@ -535,7 +550,7 @@ function StartWorkflowView({
|
|
|
535
550
|
<Cpu className="size-3.5 text-muted" />
|
|
536
551
|
</div>
|
|
537
552
|
<span className="font-medium text-sm text-foreground">
|
|
538
|
-
{
|
|
553
|
+
{resolvedTitle}
|
|
539
554
|
</span>
|
|
540
555
|
</div>
|
|
541
556
|
|
|
@@ -545,7 +560,7 @@ function StartWorkflowView({
|
|
|
545
560
|
size="xs"
|
|
546
561
|
variant="ghost"
|
|
547
562
|
onClick={onClose}
|
|
548
|
-
title=
|
|
563
|
+
title={t('agent.close')}
|
|
549
564
|
className="text-muted hover:text-foreground"
|
|
550
565
|
>
|
|
551
566
|
<XIcon className="size-4" />
|
|
@@ -564,11 +579,10 @@ function StartWorkflowView({
|
|
|
564
579
|
|
|
565
580
|
<div className="bg-card p-4 border-l-2 border-info">
|
|
566
581
|
<div className="text-base text-foreground font-medium">
|
|
567
|
-
|
|
582
|
+
{t('agent.enterMessage')}
|
|
568
583
|
</div>
|
|
569
584
|
<div className="mt-3 text-sm text-muted">
|
|
570
|
-
|
|
571
|
-
to begin
|
|
585
|
+
{t('agent.typeQuestionBelow', { buttonText: resolvedStartButtonText })}
|
|
572
586
|
</div>
|
|
573
587
|
</div>
|
|
574
588
|
</div>
|
|
@@ -586,7 +600,7 @@ function StartWorkflowView({
|
|
|
586
600
|
>
|
|
587
601
|
<FileTextIcon className="size-3.5" />
|
|
588
602
|
<span className="max-w-[120px] truncate">{file.name}</span>
|
|
589
|
-
<span className="text-xs opacity-70">
|
|
603
|
+
<span className="text-xs opacity-70">{t('agent.staged')}</span>
|
|
590
604
|
<button
|
|
591
605
|
onClick={() => removeStagedFile(index)}
|
|
592
606
|
className="ml-1 p-0.5 hover:bg-attention/20 rounded"
|
|
@@ -608,7 +622,7 @@ function StartWorkflowView({
|
|
|
608
622
|
className="text-xs"
|
|
609
623
|
>
|
|
610
624
|
<UploadIcon className="size-3.5 mr-1.5" />
|
|
611
|
-
|
|
625
|
+
{t('agent.upload')}
|
|
612
626
|
</Button>
|
|
613
627
|
</div>
|
|
614
628
|
|
|
@@ -618,7 +632,7 @@ function StartWorkflowView({
|
|
|
618
632
|
value={inputValue}
|
|
619
633
|
onChange={(e) => setInputValue(e.target.value)}
|
|
620
634
|
onKeyDown={handleKeyDown}
|
|
621
|
-
placeholder={
|
|
635
|
+
placeholder={resolvedPlaceholder}
|
|
622
636
|
disabled={isSending}
|
|
623
637
|
rows={2}
|
|
624
638
|
className="flex-1 py-2.5 px-3 text-sm border border-border bg-background text-foreground focus:border-ring focus:outline-none focus:ring-1 focus:ring-ring rounded-md resize-none overflow-hidden"
|
|
@@ -634,13 +648,13 @@ function StartWorkflowView({
|
|
|
634
648
|
) : (
|
|
635
649
|
<SendIcon className="size-3.5 mr-1.5" />
|
|
636
650
|
)}
|
|
637
|
-
{
|
|
651
|
+
{resolvedStartButtonText}
|
|
638
652
|
</Button>
|
|
639
653
|
</div>
|
|
640
654
|
<div className="text-xs text-muted mt-2 text-center">
|
|
641
655
|
{stagedFiles.length > 0
|
|
642
|
-
?
|
|
643
|
-
: '
|
|
656
|
+
? t('agent.filesStagedCount', { count: stagedFiles.length })
|
|
657
|
+
: t('agent.enterToSend')}
|
|
644
658
|
</div>
|
|
645
659
|
</div>
|
|
646
660
|
</div>
|
|
@@ -650,14 +664,17 @@ function StartWorkflowView({
|
|
|
650
664
|
|
|
651
665
|
// Inner component that handles the agent conversation - similar to ModernAgentOutput
|
|
652
666
|
function ModernAgentConversationInner({
|
|
653
|
-
|
|
667
|
+
agentRunId,
|
|
654
668
|
title,
|
|
655
669
|
interactive = true,
|
|
656
670
|
onClose,
|
|
657
671
|
isModal = false,
|
|
658
672
|
fullWidth = false,
|
|
659
|
-
placeholder
|
|
673
|
+
placeholder,
|
|
660
674
|
resetWorkflow,
|
|
675
|
+
onRestart,
|
|
676
|
+
onFork,
|
|
677
|
+
onShowDetails,
|
|
661
678
|
// File upload props (onFilesSelected handled internally by handleFileUpload)
|
|
662
679
|
uploadedFiles,
|
|
663
680
|
onRemoveFile,
|
|
@@ -674,8 +691,10 @@ function ModernAgentConversationInner({
|
|
|
674
691
|
hideMessageInput,
|
|
675
692
|
hidePlanPanel,
|
|
676
693
|
hideWorkstreamTabs,
|
|
694
|
+
showRightPanel: showRightPanelProp = true,
|
|
677
695
|
hideFileUpload,
|
|
678
|
-
|
|
696
|
+
showArtifacts = false,
|
|
697
|
+
hideDocumentPanel: _hideDocumentPanel,
|
|
679
698
|
// Attachment callback
|
|
680
699
|
getAttachedDocs,
|
|
681
700
|
onAttachmentsSent,
|
|
@@ -692,6 +711,7 @@ function ModernAgentConversationInner({
|
|
|
692
711
|
// External file upload API
|
|
693
712
|
fileUploadRef,
|
|
694
713
|
onProcessingFilesChange,
|
|
714
|
+
processingFiles: processingFilesProp,
|
|
695
715
|
// External plan panel API
|
|
696
716
|
onPlansChange,
|
|
697
717
|
onWorkstreamStatusChange,
|
|
@@ -718,9 +738,16 @@ function ModernAgentConversationInner({
|
|
|
718
738
|
StoreLinkComponent,
|
|
719
739
|
CollectionLinkComponent,
|
|
720
740
|
prependFriendlyMessage,
|
|
721
|
-
|
|
741
|
+
payloadContent,
|
|
742
|
+
conversationContent,
|
|
743
|
+
conversationTab = false,
|
|
744
|
+
}: ModernAgentConversationProps & { agentRunId: string }) {
|
|
745
|
+
const { t } = useUITranslation();
|
|
722
746
|
const { client } = useUserSession();
|
|
723
747
|
const toast = useToast();
|
|
748
|
+
const instanceIdRef = useRef(
|
|
749
|
+
`mac-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 8)}`
|
|
750
|
+
);
|
|
724
751
|
|
|
725
752
|
// ────────────────────────────────────────────
|
|
726
753
|
// Extracted hooks
|
|
@@ -733,8 +760,9 @@ function ModernAgentConversationInner({
|
|
|
733
760
|
addOptimisticMessage,
|
|
734
761
|
removeOptimisticMessages,
|
|
735
762
|
workflowStatus,
|
|
763
|
+
workflowRunId,
|
|
736
764
|
serverFileUpdates,
|
|
737
|
-
} = useAgentStream(client,
|
|
765
|
+
} = useAgentStream(client, agentRunId);
|
|
738
766
|
|
|
739
767
|
const {
|
|
740
768
|
plans,
|
|
@@ -761,13 +789,14 @@ function ModernAgentConversationInner({
|
|
|
761
789
|
processingFiles,
|
|
762
790
|
hasProcessingFiles,
|
|
763
791
|
handleFileUpload,
|
|
764
|
-
} = useFileProcessing(client,
|
|
792
|
+
} = useFileProcessing(client, agentRunId, serverFileUpdates, toast);
|
|
765
793
|
|
|
766
794
|
// ────────────────────────────────────────────
|
|
767
795
|
// Local state (UI-only concerns)
|
|
768
796
|
// ────────────────────────────────────────────
|
|
769
797
|
const bottomRef = useRef<HTMLDivElement | null>(null);
|
|
770
798
|
const conversationRef = useRef<HTMLDivElement | null>(null);
|
|
799
|
+
const conversationLayoutRef = useRef<HTMLDivElement | null>(null);
|
|
771
800
|
const [isSending, setIsSending] = useState(false);
|
|
772
801
|
const [internalViewMode, setInternalViewMode] = useState<AgentConversationViewMode>("sliding");
|
|
773
802
|
const viewMode = controlledViewMode ?? internalViewMode;
|
|
@@ -781,6 +810,8 @@ function ModernAgentConversationInner({
|
|
|
781
810
|
const [isStopping, setIsStopping] = useState(false);
|
|
782
811
|
const [thinkingMessageIndex, setThinkingMessageIndex] = useState(0);
|
|
783
812
|
const [isDragOver, setIsDragOver] = useState(false);
|
|
813
|
+
const [activeWorkstreams, setActiveWorkstreams] = useState<ActiveWorkstreamEntry[]>([]);
|
|
814
|
+
const workstreamFetchFailedRef = useRef(false);
|
|
784
815
|
const dragCounterRef = useRef(0);
|
|
785
816
|
|
|
786
817
|
// PERFORMANCE: Refs for values used inside useCallback to avoid re-creating the callback
|
|
@@ -789,13 +820,35 @@ function ModernAgentConversationInner({
|
|
|
789
820
|
const hasProcessingFilesRef = useRef(hasProcessingFiles);
|
|
790
821
|
hasProcessingFilesRef.current = hasProcessingFiles;
|
|
791
822
|
|
|
792
|
-
// Derive effective workflow status
|
|
823
|
+
// Derive effective workflow status — only main workstream TERMINATED overrides API status.
|
|
793
824
|
const effectiveWorkflowStatus = useMemo(() => {
|
|
794
|
-
const
|
|
795
|
-
|
|
825
|
+
const mainMessages = messages.filter(m => (m.workstream_id || 'main') === 'main');
|
|
826
|
+
const lastMain = mainMessages[mainMessages.length - 1];
|
|
827
|
+
if (lastMain?.type === AgentMessageType.TERMINATED) return "TERMINATED";
|
|
796
828
|
return workflowStatus;
|
|
797
829
|
}, [messages, workflowStatus]);
|
|
798
830
|
|
|
831
|
+
console.debug("[ModernAgentConversation] render", {
|
|
832
|
+
agentRunId,
|
|
833
|
+
instanceId: instanceIdRef.current,
|
|
834
|
+
messageCount: messages.length,
|
|
835
|
+
activeWorkstreams: activeWorkstreams.length,
|
|
836
|
+
});
|
|
837
|
+
|
|
838
|
+
useEffect(() => {
|
|
839
|
+
console.debug("[ModernAgentConversation] mount", {
|
|
840
|
+
agentRunId,
|
|
841
|
+
instanceId: instanceIdRef.current,
|
|
842
|
+
});
|
|
843
|
+
|
|
844
|
+
return () => {
|
|
845
|
+
console.debug("[ModernAgentConversation] unmount", {
|
|
846
|
+
agentRunId,
|
|
847
|
+
instanceId: instanceIdRef.current,
|
|
848
|
+
});
|
|
849
|
+
};
|
|
850
|
+
}, [agentRunId]);
|
|
851
|
+
|
|
799
852
|
// ────────────────────────────────────────────
|
|
800
853
|
// Computed values
|
|
801
854
|
// ────────────────────────────────────────────
|
|
@@ -812,6 +865,20 @@ function ModernAgentConversationInner({
|
|
|
812
865
|
};
|
|
813
866
|
}, [plans, activePlanIndex, workstreamStatusMap]);
|
|
814
867
|
|
|
868
|
+
const panelWorkstreams = useMemo<WorkstreamInfo[]>(() => {
|
|
869
|
+
return activeWorkstreams.map((ws) => ({
|
|
870
|
+
workstream_id: ws.workstream_id,
|
|
871
|
+
launch_id: ws.launch_id,
|
|
872
|
+
elapsed_ms: ws.elapsed_ms,
|
|
873
|
+
deadline_ms: ws.deadline_ms,
|
|
874
|
+
remaining_ms: Math.max(0, ws.deadline_ms - ws.elapsed_ms),
|
|
875
|
+
status: ws.status,
|
|
876
|
+
phase: ws.latest_progress?.phase,
|
|
877
|
+
child_workflow_id: ws.child_workflow_id,
|
|
878
|
+
child_workflow_run_id: ws.child_workflow_run_id,
|
|
879
|
+
}));
|
|
880
|
+
}, [activeWorkstreams]);
|
|
881
|
+
|
|
815
882
|
// ────────────────────────────────────────────
|
|
816
883
|
// Stable callbacks
|
|
817
884
|
// ────────────────────────────────────────────
|
|
@@ -828,19 +895,79 @@ function ModernAgentConversationInner({
|
|
|
828
895
|
setActivePlanIndex(index);
|
|
829
896
|
}, [setActivePlanIndex]);
|
|
830
897
|
|
|
831
|
-
|
|
898
|
+
// ────────────────────────────────────────────
|
|
899
|
+
// Unified right panel state
|
|
900
|
+
// ────────────────────────────────────────────
|
|
901
|
+
type RightPanelTab = 'plan' | 'workstreams' | 'documents' | 'uploads' | 'artifacts' | 'conversation';
|
|
902
|
+
const [rightPanelTab, _setRightPanelTab] = useState<RightPanelTab>((conversationContent || conversationTab) ? 'conversation' : 'plan');
|
|
903
|
+
const [rightPanelWidth, setRightPanelWidth] = useState(400);
|
|
904
|
+
const [isRightPanelResizing, setIsRightPanelResizing] = useState(false);
|
|
905
|
+
|
|
906
|
+
const isRightPanelVisible = showRightPanelProp && (showSlidingPanel
|
|
907
|
+
|| isDocPanelOpen
|
|
908
|
+
|| (!hideWorkstreamTabs && panelWorkstreams.length > 0)
|
|
909
|
+
|| !!conversationContent
|
|
910
|
+
|| conversationTab);
|
|
911
|
+
|
|
912
|
+
useEffect(() => {
|
|
913
|
+
if (!isRightPanelVisible && isRightPanelResizing) {
|
|
914
|
+
setIsRightPanelResizing(false);
|
|
915
|
+
}
|
|
916
|
+
}, [isRightPanelVisible, isRightPanelResizing]);
|
|
917
|
+
|
|
918
|
+
useEffect(() => {
|
|
919
|
+
if (!isRightPanelResizing) return;
|
|
920
|
+
|
|
921
|
+
const minRightPanelWidth = 300;
|
|
922
|
+
const minConversationWidth = 420;
|
|
923
|
+
|
|
924
|
+
const handleMouseMove = (event: MouseEvent) => {
|
|
925
|
+
const container = conversationLayoutRef.current;
|
|
926
|
+
if (!container) return;
|
|
927
|
+
|
|
928
|
+
const containerRect = container.getBoundingClientRect();
|
|
929
|
+
const maxRightPanelWidth = Math.max(minRightPanelWidth, containerRect.width - minConversationWidth);
|
|
930
|
+
const nextWidth = containerRect.right - event.clientX;
|
|
931
|
+
const clampedWidth = Math.min(Math.max(nextWidth, minRightPanelWidth), maxRightPanelWidth);
|
|
932
|
+
setRightPanelWidth(clampedWidth);
|
|
933
|
+
};
|
|
934
|
+
|
|
935
|
+
const handleMouseUp = () => {
|
|
936
|
+
setIsRightPanelResizing(false);
|
|
937
|
+
};
|
|
938
|
+
|
|
939
|
+
window.addEventListener('mousemove', handleMouseMove);
|
|
940
|
+
window.addEventListener('mouseup', handleMouseUp);
|
|
941
|
+
document.body.style.cursor = 'col-resize';
|
|
942
|
+
document.body.style.userSelect = 'none';
|
|
943
|
+
|
|
944
|
+
return () => {
|
|
945
|
+
window.removeEventListener('mousemove', handleMouseMove);
|
|
946
|
+
window.removeEventListener('mouseup', handleMouseUp);
|
|
947
|
+
document.body.style.cursor = '';
|
|
948
|
+
document.body.style.userSelect = '';
|
|
949
|
+
};
|
|
950
|
+
}, [isRightPanelResizing]);
|
|
951
|
+
|
|
952
|
+
const handleCloseRightPanel = useCallback(() => {
|
|
832
953
|
setShowSlidingPanel(false);
|
|
833
|
-
|
|
954
|
+
handleCloseDocPanel();
|
|
955
|
+
}, [setShowSlidingPanel, handleCloseDocPanel]);
|
|
834
956
|
|
|
835
957
|
// Default StoreLinkComponent that opens documents in the panel
|
|
836
958
|
const internalStoreLinkComponent = useCallback(
|
|
837
|
-
({ documentId, children }: { href: string; documentId: string; children: React.ReactNode }) => (
|
|
838
|
-
<
|
|
959
|
+
({ href, documentId, children }: { href: string; documentId: string; children: React.ReactNode }) => (
|
|
960
|
+
<a
|
|
961
|
+
href={href}
|
|
839
962
|
className="text-info underline cursor-pointer hover:text-info/80"
|
|
840
|
-
onClick={() =>
|
|
963
|
+
onClick={(e) => {
|
|
964
|
+
e.preventDefault();
|
|
965
|
+
e.stopPropagation();
|
|
966
|
+
openDocInPanel(documentId);
|
|
967
|
+
}}
|
|
841
968
|
>
|
|
842
969
|
{children}
|
|
843
|
-
</
|
|
970
|
+
</a>
|
|
844
971
|
),
|
|
845
972
|
[openDocInPanel]
|
|
846
973
|
);
|
|
@@ -884,6 +1011,41 @@ function ModernAgentConversationInner({
|
|
|
884
1011
|
onWorkstreamStatusChange?.(workstreamStatusMap);
|
|
885
1012
|
}, [workstreamStatusMap, onWorkstreamStatusChange]);
|
|
886
1013
|
|
|
1014
|
+
// Poll active workstreams from backend query for right-panel visibility and details.
|
|
1015
|
+
useEffect(() => {
|
|
1016
|
+
const shouldPoll = !isCompleted || activeWorkstreams.length > 0;
|
|
1017
|
+
if (!shouldPoll) {
|
|
1018
|
+
setActiveWorkstreams((prev) => (prev.length === 0 ? prev : []));
|
|
1019
|
+
return;
|
|
1020
|
+
}
|
|
1021
|
+
|
|
1022
|
+
let isCancelled = false;
|
|
1023
|
+
|
|
1024
|
+
const fetchActiveWorkstreams = async () => {
|
|
1025
|
+
try {
|
|
1026
|
+
const result = await client.agents.getActiveWorkstreams(agentRunId);
|
|
1027
|
+
if (isCancelled) return;
|
|
1028
|
+
setActiveWorkstreams(result.running ?? []);
|
|
1029
|
+
workstreamFetchFailedRef.current = false;
|
|
1030
|
+
} catch (error) {
|
|
1031
|
+
if (isCancelled) return;
|
|
1032
|
+
setActiveWorkstreams([]);
|
|
1033
|
+
if (!workstreamFetchFailedRef.current) {
|
|
1034
|
+
console.warn("Failed to fetch active workstreams:", error);
|
|
1035
|
+
workstreamFetchFailedRef.current = true;
|
|
1036
|
+
}
|
|
1037
|
+
}
|
|
1038
|
+
};
|
|
1039
|
+
|
|
1040
|
+
fetchActiveWorkstreams();
|
|
1041
|
+
const pollHandle = window.setInterval(fetchActiveWorkstreams, 10000);
|
|
1042
|
+
|
|
1043
|
+
return () => {
|
|
1044
|
+
isCancelled = true;
|
|
1045
|
+
window.clearInterval(pollHandle);
|
|
1046
|
+
};
|
|
1047
|
+
}, [client.agents, agentRunId, isCompleted, activeWorkstreams.length]);
|
|
1048
|
+
|
|
887
1049
|
// Notify parent when input availability is determined
|
|
888
1050
|
useEffect(() => {
|
|
889
1051
|
if (messages.length === 0) return;
|
|
@@ -913,8 +1075,8 @@ function ModernAgentConversationInner({
|
|
|
913
1075
|
if (hasProcessingFilesRef.current) {
|
|
914
1076
|
toast({
|
|
915
1077
|
status: "warning",
|
|
916
|
-
title:
|
|
917
|
-
description:
|
|
1078
|
+
title: t('agent.filesProcessing'),
|
|
1079
|
+
description: t('agent.waitForFilesProcessing'),
|
|
918
1080
|
duration: 3000,
|
|
919
1081
|
});
|
|
920
1082
|
return;
|
|
@@ -935,7 +1097,7 @@ function ModernAgentConversationInner({
|
|
|
935
1097
|
|
|
936
1098
|
const optimisticMessage: AgentMessage = {
|
|
937
1099
|
timestamp: Date.now(),
|
|
938
|
-
workflow_run_id:
|
|
1100
|
+
workflow_run_id: agentRunId,
|
|
939
1101
|
type: AgentMessageType.QUESTION,
|
|
940
1102
|
message: messageContent,
|
|
941
1103
|
workstream_id: "main",
|
|
@@ -950,8 +1112,8 @@ function ModernAgentConversationInner({
|
|
|
950
1112
|
_messageId: messageId,
|
|
951
1113
|
};
|
|
952
1114
|
|
|
953
|
-
client.
|
|
954
|
-
.sendSignal(
|
|
1115
|
+
client.agents
|
|
1116
|
+
.sendSignal(agentRunId, "UserInput", {
|
|
955
1117
|
message: messageContent,
|
|
956
1118
|
metadata,
|
|
957
1119
|
} as UserInputSignal)
|
|
@@ -964,25 +1126,25 @@ function ModernAgentConversationInner({
|
|
|
964
1126
|
);
|
|
965
1127
|
toast({
|
|
966
1128
|
status: "error",
|
|
967
|
-
title:
|
|
968
|
-
description: err instanceof Error ? err.message :
|
|
1129
|
+
title: t('agent.failedToSend'),
|
|
1130
|
+
description: err instanceof Error ? err.message : t('agent.unknownError'),
|
|
969
1131
|
duration: 3000,
|
|
970
1132
|
});
|
|
971
1133
|
})
|
|
972
1134
|
.finally(() => {
|
|
973
1135
|
setIsSending(false);
|
|
974
1136
|
});
|
|
975
|
-
}, [
|
|
1137
|
+
}, [agentRunId, client, toast, getAttachedDocs, getMessageContext, onAttachmentsSent, addOptimisticMessage, removeOptimisticMessages]);
|
|
976
1138
|
|
|
977
1139
|
// Drag and drop handlers for full-panel file upload
|
|
978
1140
|
const handleDragEnter = useCallback((e: React.DragEvent) => {
|
|
979
1141
|
e.preventDefault();
|
|
980
1142
|
e.stopPropagation();
|
|
981
1143
|
dragCounterRef.current++;
|
|
982
|
-
if (
|
|
1144
|
+
if (e.dataTransfer?.types?.includes('Files')) {
|
|
983
1145
|
setIsDragOver(true);
|
|
984
1146
|
}
|
|
985
|
-
}, [
|
|
1147
|
+
}, []);
|
|
986
1148
|
|
|
987
1149
|
const handleDragOver = useCallback((e: React.DragEvent) => {
|
|
988
1150
|
e.preventDefault();
|
|
@@ -1004,11 +1166,11 @@ function ModernAgentConversationInner({
|
|
|
1004
1166
|
dragCounterRef.current = 0;
|
|
1005
1167
|
setIsDragOver(false);
|
|
1006
1168
|
|
|
1007
|
-
if (
|
|
1169
|
+
if (e.dataTransfer?.files && e.dataTransfer.files.length > 0) {
|
|
1008
1170
|
const filesArray = Array.from(e.dataTransfer.files);
|
|
1009
1171
|
handleFileUpload(filesArray);
|
|
1010
1172
|
}
|
|
1011
|
-
}, [
|
|
1173
|
+
}, [handleFileUpload]);
|
|
1012
1174
|
|
|
1013
1175
|
// Stop/interrupt the active workflow
|
|
1014
1176
|
const handleStopWorkflow = useCallback(async () => {
|
|
@@ -1016,27 +1178,27 @@ function ModernAgentConversationInner({
|
|
|
1016
1178
|
|
|
1017
1179
|
setIsStopping(true);
|
|
1018
1180
|
try {
|
|
1019
|
-
await client.
|
|
1181
|
+
await client.agents.sendSignal(agentRunId, "Stop", {
|
|
1020
1182
|
message: "User requested stop",
|
|
1021
1183
|
});
|
|
1022
1184
|
|
|
1023
1185
|
toast({
|
|
1024
1186
|
status: "info",
|
|
1025
|
-
title:
|
|
1026
|
-
description:
|
|
1187
|
+
title: t('agent.agentInterrupted'),
|
|
1188
|
+
description: t('agent.typeNewInstructions'),
|
|
1027
1189
|
duration: 3000,
|
|
1028
1190
|
});
|
|
1029
1191
|
} catch (err) {
|
|
1030
1192
|
toast({
|
|
1031
1193
|
status: "error",
|
|
1032
|
-
title:
|
|
1033
|
-
description: err instanceof Error ? err.message :
|
|
1194
|
+
title: t('agent.failedToInterrupt'),
|
|
1195
|
+
description: err instanceof Error ? err.message : t('agent.unknownError'),
|
|
1034
1196
|
duration: 3000,
|
|
1035
1197
|
});
|
|
1036
1198
|
} finally {
|
|
1037
1199
|
setIsStopping(false);
|
|
1038
1200
|
}
|
|
1039
|
-
}, [isStopping, client,
|
|
1201
|
+
}, [isStopping, client, agentRunId, toast]);
|
|
1040
1202
|
|
|
1041
1203
|
// Expose stop handler to external callers via ref
|
|
1042
1204
|
useEffect(() => {
|
|
@@ -1051,6 +1213,10 @@ function ModernAgentConversationInner({
|
|
|
1051
1213
|
|
|
1052
1214
|
// Calculate number of active tasks for the status indicator
|
|
1053
1215
|
const getActiveTaskCount = (): number => {
|
|
1216
|
+
if (activeWorkstreams.length > 0) {
|
|
1217
|
+
return activeWorkstreams.filter((ws) => ws.status === "running").length;
|
|
1218
|
+
}
|
|
1219
|
+
|
|
1054
1220
|
if (!messages.length) return 0;
|
|
1055
1221
|
|
|
1056
1222
|
// Group messages by workstream
|
|
@@ -1062,7 +1228,7 @@ function ModernAgentConversationInner({
|
|
|
1062
1228
|
if (!workstreamMessages.has(workstreamId)) {
|
|
1063
1229
|
workstreamMessages.set(workstreamId, []);
|
|
1064
1230
|
}
|
|
1065
|
-
workstreamMessages.get(workstreamId)
|
|
1231
|
+
workstreamMessages.get(workstreamId)?.push(message);
|
|
1066
1232
|
}
|
|
1067
1233
|
});
|
|
1068
1234
|
|
|
@@ -1086,42 +1252,31 @@ function ModernAgentConversationInner({
|
|
|
1086
1252
|
return activeCount;
|
|
1087
1253
|
};
|
|
1088
1254
|
|
|
1089
|
-
const actualTitle =
|
|
1090
|
-
title || run.workflowId.split(":")[2] || "Agent Conversation";
|
|
1255
|
+
const actualTitle = title || t('agent.agentConversation');
|
|
1091
1256
|
|
|
1092
1257
|
// Handle downloading conversation
|
|
1093
1258
|
const downloadConversation = async () => {
|
|
1094
1259
|
try {
|
|
1095
|
-
const url = await getConversationUrl(client,
|
|
1260
|
+
const url = await getConversationUrl(client, agentRunId);
|
|
1096
1261
|
if (url) window.open(url, "_blank");
|
|
1097
1262
|
} catch (err) {
|
|
1098
1263
|
console.error("Failed to download conversation", err);
|
|
1099
1264
|
toast({
|
|
1100
1265
|
status: "error",
|
|
1101
|
-
title:
|
|
1266
|
+
title: t('agent.failedToDownload'),
|
|
1102
1267
|
duration: 3000,
|
|
1103
1268
|
});
|
|
1104
1269
|
}
|
|
1105
1270
|
};
|
|
1106
1271
|
|
|
1107
|
-
// Handle copying run ID
|
|
1108
|
-
const copyRunId = () => {
|
|
1109
|
-
navigator.clipboard.writeText(run.runId);
|
|
1110
|
-
toast({
|
|
1111
|
-
status: "success",
|
|
1112
|
-
title: "Run ID copied",
|
|
1113
|
-
duration: 2000,
|
|
1114
|
-
});
|
|
1115
|
-
};
|
|
1116
|
-
|
|
1117
1272
|
const [isPdfModalOpen, setIsPdfModalOpen] = useState(false);
|
|
1118
1273
|
|
|
1119
1274
|
const exportConversationPdf = () => {
|
|
1120
1275
|
if (!conversationRef.current) {
|
|
1121
1276
|
toast({
|
|
1122
1277
|
status: "error",
|
|
1123
|
-
title:
|
|
1124
|
-
description:
|
|
1278
|
+
title: t('agent.pdfExportFailed'),
|
|
1279
|
+
description: t('agent.noConversationContent'),
|
|
1125
1280
|
duration: 3000,
|
|
1126
1281
|
});
|
|
1127
1282
|
return;
|
|
@@ -1133,21 +1288,21 @@ function ModernAgentConversationInner({
|
|
|
1133
1288
|
if (!conversationRef.current) {
|
|
1134
1289
|
toast({
|
|
1135
1290
|
status: "error",
|
|
1136
|
-
title:
|
|
1137
|
-
description:
|
|
1291
|
+
title: t('agent.pdfExportFailed'),
|
|
1292
|
+
description: t('agent.noConversationContent'),
|
|
1138
1293
|
duration: 3000,
|
|
1139
1294
|
});
|
|
1140
1295
|
return;
|
|
1141
1296
|
}
|
|
1142
1297
|
|
|
1143
|
-
const pdfTitle = `${actualTitle} - ${
|
|
1298
|
+
const pdfTitle = `${actualTitle} - ${agentRunId}`;
|
|
1144
1299
|
const success = printElementToPdf(conversationRef.current, pdfTitle);
|
|
1145
1300
|
|
|
1146
1301
|
if (!success) {
|
|
1147
1302
|
toast({
|
|
1148
1303
|
status: "error",
|
|
1149
|
-
title:
|
|
1150
|
-
description:
|
|
1304
|
+
title: t('agent.pdfExportFailed'),
|
|
1305
|
+
description: t('agent.unableToOpenPrint'),
|
|
1151
1306
|
duration: 4000,
|
|
1152
1307
|
});
|
|
1153
1308
|
return;
|
|
@@ -1155,13 +1310,26 @@ function ModernAgentConversationInner({
|
|
|
1155
1310
|
|
|
1156
1311
|
toast({
|
|
1157
1312
|
status: "success",
|
|
1158
|
-
title:
|
|
1159
|
-
description:
|
|
1313
|
+
title: t('agent.pdfExportReady'),
|
|
1314
|
+
description: t('agent.printDialogDescription'),
|
|
1160
1315
|
duration: 4000,
|
|
1161
1316
|
});
|
|
1162
1317
|
setIsPdfModalOpen(false);
|
|
1163
1318
|
};
|
|
1164
1319
|
|
|
1320
|
+
// Artifact refresh key — bumps when tool calls complete or conversation finishes,
|
|
1321
|
+
// which is when new artifacts are most likely to appear.
|
|
1322
|
+
const artifactRefreshKey = useMemo(() => {
|
|
1323
|
+
return messages.filter((m) => {
|
|
1324
|
+
if (m.type === AgentMessageType.COMPLETE) return true;
|
|
1325
|
+
if (m.type === AgentMessageType.THOUGHT) {
|
|
1326
|
+
const details = m.details as Record<string, unknown> | undefined;
|
|
1327
|
+
return details?.tool_status === 'completed';
|
|
1328
|
+
}
|
|
1329
|
+
return false;
|
|
1330
|
+
}).length;
|
|
1331
|
+
}, [messages]);
|
|
1332
|
+
|
|
1165
1333
|
// PERFORMANCE: Memoize taskLabels to prevent AllMessagesMixed re-renders
|
|
1166
1334
|
const taskLabels = useMemo(() =>
|
|
1167
1335
|
getActivePlan.plan.plan?.reduce((acc, task) => {
|
|
@@ -1170,12 +1338,143 @@ function ModernAgentConversationInner({
|
|
|
1170
1338
|
}, new Map<string, string>()),
|
|
1171
1339
|
[getActivePlan.plan]);
|
|
1172
1340
|
|
|
1341
|
+
// Conversation area inner content — shared between main layout and conversationTab mode
|
|
1342
|
+
const conversationAreaJsx = (
|
|
1343
|
+
<div
|
|
1344
|
+
ref={conversationRef}
|
|
1345
|
+
className={cn(
|
|
1346
|
+
"flex flex-col min-h-0 min-w-0 border-0",
|
|
1347
|
+
conversationTab
|
|
1348
|
+
? "flex-1 h-full"
|
|
1349
|
+
: isRightPanelVisible
|
|
1350
|
+
? "w-full flex-1 min-h-[50vh]"
|
|
1351
|
+
: fullWidth
|
|
1352
|
+
? "flex-1 w-full"
|
|
1353
|
+
: `flex-1 mx-auto ${!isModal ? "max-w-4xl" : ""}`
|
|
1354
|
+
)}
|
|
1355
|
+
>
|
|
1356
|
+
{!hideHeader && (
|
|
1357
|
+
<div className="flex-shrink-0">
|
|
1358
|
+
<Header
|
|
1359
|
+
title={actualTitle}
|
|
1360
|
+
isCompleted={isCompleted}
|
|
1361
|
+
onClose={onClose}
|
|
1362
|
+
isModal={isModal}
|
|
1363
|
+
agentRunId={agentRunId}
|
|
1364
|
+
workflowRunId={workflowRunId || ''}
|
|
1365
|
+
viewMode={viewMode}
|
|
1366
|
+
onViewModeChange={handleViewModeChange}
|
|
1367
|
+
showPlanPanel={showRightPanelProp && showSlidingPanel}
|
|
1368
|
+
hasPlan={showRightPanelProp && plans.length > 0}
|
|
1369
|
+
showPlanButton={showRightPanelProp && !conversationTab}
|
|
1370
|
+
onTogglePlanPanel={handleTogglePlanPanel}
|
|
1371
|
+
onDownload={downloadConversation}
|
|
1372
|
+
resetWorkflow={resetWorkflow}
|
|
1373
|
+
onRestart={onRestart}
|
|
1374
|
+
onFork={onFork}
|
|
1375
|
+
onShowDetails={onShowDetails}
|
|
1376
|
+
onExportPdf={exportConversationPdf}
|
|
1377
|
+
isReceivingChunks={debugChunkFlash}
|
|
1378
|
+
/>
|
|
1379
|
+
</div>
|
|
1380
|
+
)}
|
|
1381
|
+
|
|
1382
|
+
{messages.length === 0 && !isCompleted ? (
|
|
1383
|
+
<div className="flex-1 flex flex-col items-center justify-center h-full text-center py-6">
|
|
1384
|
+
<div className="p-5 max-w-md border border-info rounded-lg shadow-sm">
|
|
1385
|
+
<div className="flex items-center space-x-3 mb-3">
|
|
1386
|
+
<PulsatingCircle size="sm" color="blue" />
|
|
1387
|
+
<div className="text-sm text-muted font-medium">
|
|
1388
|
+
{ThinkingMessages[thinkingMessageIndex]}
|
|
1389
|
+
</div>
|
|
1390
|
+
</div>
|
|
1391
|
+
<div className="mt-4 flex justify-center">
|
|
1392
|
+
<AnimatedThinkingDots color="blue" className="mt-1" />
|
|
1393
|
+
</div>
|
|
1394
|
+
</div>
|
|
1395
|
+
</div>
|
|
1396
|
+
) : (
|
|
1397
|
+
<AllMessagesMixed
|
|
1398
|
+
messages={messages}
|
|
1399
|
+
bottomRef={bottomRef as React.RefObject<HTMLDivElement>}
|
|
1400
|
+
isCompleted={isCompleted}
|
|
1401
|
+
plan={getActivePlan.plan}
|
|
1402
|
+
workstreamStatus={getActivePlan.workstreamStatus}
|
|
1403
|
+
showPlanPanel={showRightPanelProp && showSlidingPanel}
|
|
1404
|
+
onTogglePlanPanel={handleTogglePlanPanel}
|
|
1405
|
+
plans={plans}
|
|
1406
|
+
activePlanIndex={activePlanIndex}
|
|
1407
|
+
onChangePlan={handleChangePlan}
|
|
1408
|
+
taskLabels={taskLabels}
|
|
1409
|
+
streamingMessages={streamingMessages}
|
|
1410
|
+
onSendMessage={handleSendMessage}
|
|
1411
|
+
thinkingMessageIndex={thinkingMessageIndex}
|
|
1412
|
+
messageItemClassNames={messageItemClassNames}
|
|
1413
|
+
messageStyleOverrides={messageStyleOverrides}
|
|
1414
|
+
toolCallGroupClassNames={toolCallGroupClassNames}
|
|
1415
|
+
hideToolCallsInViewMode={hideToolCallsInViewMode}
|
|
1416
|
+
streamingMessageClassNames={streamingMessageClassNames}
|
|
1417
|
+
batchProgressPanelClassNames={batchProgressPanelClassNames}
|
|
1418
|
+
artifactRunId={agentRunId}
|
|
1419
|
+
viewMode={viewMode}
|
|
1420
|
+
hideWorkstreamTabs={hideWorkstreamTabs}
|
|
1421
|
+
workingIndicatorClassName={workingIndicatorClassName}
|
|
1422
|
+
messageListClassName={messageListClassName}
|
|
1423
|
+
StoreLinkComponent={effectiveStoreLinkComponent}
|
|
1424
|
+
CollectionLinkComponent={CollectionLinkComponent}
|
|
1425
|
+
prependFriendlyMessage={prependFriendlyMessage}
|
|
1426
|
+
/>
|
|
1427
|
+
)}
|
|
1428
|
+
|
|
1429
|
+
{!hideMessageInput && (
|
|
1430
|
+
<div className="flex-shrink-0" style={{ paddingBottom: 'env(safe-area-inset-bottom, 0px)' }}>
|
|
1431
|
+
{effectiveWorkflowStatus && effectiveWorkflowStatus !== "RUNNING" ? (
|
|
1432
|
+
<MessageBox
|
|
1433
|
+
status={effectiveWorkflowStatus === "COMPLETED" ? 'success' : 'done'}
|
|
1434
|
+
icon={null}
|
|
1435
|
+
className="m-2"
|
|
1436
|
+
>
|
|
1437
|
+
This Workflow is {effectiveWorkflowStatus}
|
|
1438
|
+
</MessageBox>
|
|
1439
|
+
) : showInput && (
|
|
1440
|
+
<MessageInput
|
|
1441
|
+
onSend={handleSendMessage}
|
|
1442
|
+
onStop={handleStopWorkflow}
|
|
1443
|
+
disabled={isUploading}
|
|
1444
|
+
isSending={isSending || isUploading}
|
|
1445
|
+
isStopping={isStopping}
|
|
1446
|
+
isStreaming={!isCompleted}
|
|
1447
|
+
isCompleted={isCompleted}
|
|
1448
|
+
activeTaskCount={getActiveTaskCount()}
|
|
1449
|
+
placeholder={placeholder ?? 'Type your message...'}
|
|
1450
|
+
onFilesSelected={handleFileUpload}
|
|
1451
|
+
uploadedFiles={uploadedFiles}
|
|
1452
|
+
onRemoveFile={onRemoveFile}
|
|
1453
|
+
acceptedFileTypes={acceptedFileTypes}
|
|
1454
|
+
maxFiles={maxFiles}
|
|
1455
|
+
processingFiles={processingFiles}
|
|
1456
|
+
hasProcessingFiles={hasProcessingFiles}
|
|
1457
|
+
renderDocumentSearch={renderDocumentSearch}
|
|
1458
|
+
selectedDocuments={selectedDocuments}
|
|
1459
|
+
onRemoveDocument={onRemoveDocument}
|
|
1460
|
+
hideObjectLinking={hideObjectLinking}
|
|
1461
|
+
hideFileUpload={hideFileUpload}
|
|
1462
|
+
className={inputContainerClassName}
|
|
1463
|
+
inputClassName={inputClassName}
|
|
1464
|
+
/>
|
|
1465
|
+
)}
|
|
1466
|
+
</div>
|
|
1467
|
+
)}
|
|
1468
|
+
</div>
|
|
1469
|
+
);
|
|
1470
|
+
|
|
1173
1471
|
// Main content - wrapped with FusionFragmentProvider when fusionData is provided
|
|
1174
1472
|
const mainContent = (
|
|
1175
1473
|
<ArtifactUrlCacheProvider>
|
|
1176
1474
|
<ImageLightboxProvider>
|
|
1177
1475
|
<div
|
|
1178
|
-
|
|
1476
|
+
ref={conversationLayoutRef}
|
|
1477
|
+
className={cn("flex flex-col lg:flex-row gap-2 w-full h-full relative overflow-hidden", isDragOver && "ring-2 ring-blue-400 ring-inset", className)}
|
|
1179
1478
|
onDragEnter={handleDragEnter}
|
|
1180
1479
|
onDragOver={handleDragOver}
|
|
1181
1480
|
onDragLeave={handleDragLeave}
|
|
@@ -1190,170 +1489,62 @@ function ModernAgentConversationInner({
|
|
|
1190
1489
|
</div>
|
|
1191
1490
|
</div>
|
|
1192
1491
|
)}
|
|
1193
|
-
{/* Conversation Area
|
|
1194
|
-
|
|
1195
|
-
|
|
1196
|
-
|
|
1197
|
-
|
|
1198
|
-
|
|
1199
|
-
|
|
1200
|
-
|
|
1201
|
-
|
|
1202
|
-
|
|
1203
|
-
|
|
1204
|
-
|
|
1205
|
-
|
|
1206
|
-
|
|
1207
|
-
{/* Header - flex-shrink-0 to prevent shrinking */}
|
|
1208
|
-
{!hideHeader && (
|
|
1209
|
-
<div className="flex-shrink-0">
|
|
1210
|
-
<Header
|
|
1211
|
-
title={actualTitle}
|
|
1212
|
-
isCompleted={isCompleted}
|
|
1213
|
-
onClose={onClose}
|
|
1214
|
-
isModal={isModal}
|
|
1215
|
-
run={run}
|
|
1216
|
-
viewMode={viewMode}
|
|
1217
|
-
onViewModeChange={handleViewModeChange}
|
|
1218
|
-
showPlanPanel={showSlidingPanel}
|
|
1219
|
-
hasPlan={plans.length > 0}
|
|
1220
|
-
onTogglePlanPanel={handleTogglePlanPanel}
|
|
1221
|
-
onDownload={downloadConversation}
|
|
1222
|
-
onCopyRunId={copyRunId}
|
|
1223
|
-
resetWorkflow={resetWorkflow}
|
|
1224
|
-
onExportPdf={exportConversationPdf}
|
|
1225
|
-
isReceivingChunks={debugChunkFlash}
|
|
1492
|
+
{/* Conversation Area — hidden when conversationTab moves it into the right panel */}
|
|
1493
|
+
{!conversationTab && conversationAreaJsx}
|
|
1494
|
+
|
|
1495
|
+
{/* Unified Right Panel — Plan | Workstreams | Documents | Uploads */}
|
|
1496
|
+
{isRightPanelVisible && (
|
|
1497
|
+
<>
|
|
1498
|
+
{!conversationTab && (
|
|
1499
|
+
<div
|
|
1500
|
+
className="hidden lg:block lg:w-1 lg:shrink-0 cursor-col-resize bg-border/70 hover:bg-border transition-colors"
|
|
1501
|
+
onMouseDown={() => setIsRightPanelResizing(true)}
|
|
1502
|
+
role="separator"
|
|
1503
|
+
aria-orientation="vertical"
|
|
1504
|
+
aria-label="Resize right panel"
|
|
1226
1505
|
/>
|
|
1227
|
-
|
|
1228
|
-
|
|
1229
|
-
|
|
1230
|
-
|
|
1231
|
-
|
|
1232
|
-
|
|
1233
|
-
|
|
1234
|
-
|
|
1235
|
-
|
|
1236
|
-
{ThinkingMessages[thinkingMessageIndex]}
|
|
1237
|
-
</div>
|
|
1238
|
-
</div>
|
|
1239
|
-
<div className="mt-4 flex justify-center">
|
|
1240
|
-
<AnimatedThinkingDots color="blue" className="mt-1" />
|
|
1241
|
-
</div>
|
|
1242
|
-
</div>
|
|
1243
|
-
</div>
|
|
1244
|
-
) : (
|
|
1245
|
-
<AllMessagesMixed
|
|
1246
|
-
messages={messages}
|
|
1247
|
-
bottomRef={bottomRef as React.RefObject<HTMLDivElement>}
|
|
1248
|
-
isCompleted={isCompleted}
|
|
1249
|
-
plan={getActivePlan.plan}
|
|
1250
|
-
workstreamStatus={getActivePlan.workstreamStatus}
|
|
1251
|
-
showPlanPanel={showSlidingPanel}
|
|
1252
|
-
onTogglePlanPanel={handleTogglePlanPanel}
|
|
1253
|
-
plans={plans}
|
|
1254
|
-
activePlanIndex={activePlanIndex}
|
|
1255
|
-
onChangePlan={handleChangePlan}
|
|
1256
|
-
taskLabels={taskLabels}
|
|
1257
|
-
streamingMessages={streamingMessages}
|
|
1258
|
-
onSendMessage={handleSendMessage}
|
|
1259
|
-
thinkingMessageIndex={thinkingMessageIndex}
|
|
1260
|
-
messageItemClassNames={messageItemClassNames}
|
|
1261
|
-
messageStyleOverrides={messageStyleOverrides}
|
|
1262
|
-
toolCallGroupClassNames={toolCallGroupClassNames}
|
|
1263
|
-
hideToolCallsInViewMode={hideToolCallsInViewMode}
|
|
1264
|
-
streamingMessageClassNames={streamingMessageClassNames}
|
|
1265
|
-
batchProgressPanelClassNames={batchProgressPanelClassNames}
|
|
1266
|
-
viewMode={viewMode}
|
|
1267
|
-
hideWorkstreamTabs={hideWorkstreamTabs}
|
|
1268
|
-
workingIndicatorClassName={workingIndicatorClassName}
|
|
1269
|
-
messageListClassName={messageListClassName}
|
|
1270
|
-
StoreLinkComponent={effectiveStoreLinkComponent}
|
|
1271
|
-
CollectionLinkComponent={CollectionLinkComponent}
|
|
1272
|
-
prependFriendlyMessage={prependFriendlyMessage}
|
|
1273
|
-
/>
|
|
1274
|
-
)}
|
|
1275
|
-
|
|
1276
|
-
{/* Show workflow status message when not running, or show input when running/unknown */}
|
|
1277
|
-
{/* Input area - flex-shrink-0 to stay pinned at bottom, with iOS safe area support */}
|
|
1278
|
-
{!hideMessageInput && (
|
|
1279
|
-
<div className="flex-shrink-0" style={{ paddingBottom: 'env(safe-area-inset-bottom, 0px)' }}>
|
|
1280
|
-
{effectiveWorkflowStatus && effectiveWorkflowStatus !== "RUNNING" ? (
|
|
1281
|
-
<MessageBox
|
|
1282
|
-
status={effectiveWorkflowStatus === "COMPLETED" ? 'success' : 'done'}
|
|
1283
|
-
icon={null}
|
|
1284
|
-
className="m-2"
|
|
1285
|
-
>
|
|
1286
|
-
This Workflow is {effectiveWorkflowStatus}
|
|
1287
|
-
</MessageBox>
|
|
1288
|
-
) : showInput && (
|
|
1289
|
-
<MessageInput
|
|
1290
|
-
onSend={handleSendMessage}
|
|
1291
|
-
onStop={handleStopWorkflow}
|
|
1292
|
-
disabled={isUploading}
|
|
1293
|
-
isSending={isSending || isUploading}
|
|
1294
|
-
isStopping={isStopping}
|
|
1295
|
-
isStreaming={!isCompleted}
|
|
1296
|
-
isCompleted={isCompleted}
|
|
1297
|
-
activeTaskCount={getActiveTaskCount()}
|
|
1298
|
-
placeholder={placeholder}
|
|
1299
|
-
// File upload props - use internal handler that signals workflow
|
|
1300
|
-
onFilesSelected={handleFileUpload}
|
|
1301
|
-
uploadedFiles={uploadedFiles}
|
|
1302
|
-
onRemoveFile={onRemoveFile}
|
|
1303
|
-
acceptedFileTypes={acceptedFileTypes}
|
|
1304
|
-
maxFiles={maxFiles}
|
|
1305
|
-
// File processing state
|
|
1306
|
-
processingFiles={processingFiles}
|
|
1307
|
-
hasProcessingFiles={hasProcessingFiles}
|
|
1308
|
-
// Document search props
|
|
1309
|
-
renderDocumentSearch={renderDocumentSearch}
|
|
1310
|
-
selectedDocuments={selectedDocuments}
|
|
1311
|
-
onRemoveDocument={onRemoveDocument}
|
|
1312
|
-
// Object linking
|
|
1313
|
-
hideObjectLinking={hideObjectLinking}
|
|
1314
|
-
// Files Uploaded
|
|
1315
|
-
hideFileUpload={hideFileUpload}
|
|
1316
|
-
// Styling props
|
|
1317
|
-
className={inputContainerClassName}
|
|
1318
|
-
inputClassName={inputClassName}
|
|
1319
|
-
/>
|
|
1320
|
-
)}
|
|
1321
|
-
</div>
|
|
1322
|
-
)}
|
|
1323
|
-
</div>
|
|
1324
|
-
|
|
1325
|
-
{/* Plan Panel Area - only rendered when panel should be shown */}
|
|
1326
|
-
{!hidePlanPanel && showSlidingPanel && (
|
|
1327
|
-
<div className="w-full lg:w-1/3 min-h-[50vh] lg:h-full border-t lg:border-t-0 lg:border-l">
|
|
1328
|
-
<InlineSlidingPlanPanel
|
|
1506
|
+
)}
|
|
1507
|
+
<div
|
|
1508
|
+
className={conversationTab
|
|
1509
|
+
? "w-full h-full overflow-auto"
|
|
1510
|
+
: "w-full lg:w-[var(--agent-right-panel-width)] lg:shrink-0 min-h-[50vh] lg:h-full border-t lg:border-t-0 lg:border-l"}
|
|
1511
|
+
style={!conversationTab ? ({ ['--agent-right-panel-width' as string]: `${rightPanelWidth}px` } as React.CSSProperties) : undefined}
|
|
1512
|
+
>
|
|
1513
|
+
<AgentRightPanel
|
|
1514
|
+
// Plan
|
|
1329
1515
|
plan={getActivePlan.plan}
|
|
1330
1516
|
workstreamStatus={getActivePlan.workstreamStatus}
|
|
1331
|
-
isOpen={showSlidingPanel}
|
|
1332
|
-
onClose={handleClosePlanPanel}
|
|
1333
1517
|
plans={plans}
|
|
1334
1518
|
activePlanIndex={activePlanIndex}
|
|
1335
1519
|
onChangePlan={handleChangePlan}
|
|
1336
|
-
|
|
1337
|
-
|
|
1338
|
-
|
|
1339
|
-
|
|
1340
|
-
|
|
1341
|
-
|
|
1342
|
-
<div className={cn(
|
|
1343
|
-
"w-full lg:w-2/5 min-h-[50vh] lg:h-full border-t lg:border-t-0 lg:border-l",
|
|
1344
|
-
showSlidingPanel && "lg:w-1/3"
|
|
1345
|
-
)}>
|
|
1346
|
-
<DocumentPanel
|
|
1347
|
-
isOpen={isDocPanelOpen}
|
|
1348
|
-
onClose={handleCloseDocPanel}
|
|
1349
|
-
documents={openDocuments}
|
|
1520
|
+
showPlan={!hidePlanPanel && showSlidingPanel}
|
|
1521
|
+
// Workstreams
|
|
1522
|
+
activeWorkstreams={panelWorkstreams}
|
|
1523
|
+
hideWorkstreams={hideWorkstreamTabs}
|
|
1524
|
+
// Documents
|
|
1525
|
+
openDocuments={openDocuments}
|
|
1350
1526
|
activeDocumentId={activeDocumentId}
|
|
1351
1527
|
onSelectDocument={selectDocument}
|
|
1352
1528
|
onCloseDocument={handleCloseDocument}
|
|
1353
|
-
|
|
1354
|
-
runId={
|
|
1529
|
+
docRefreshKey={docRefreshKey}
|
|
1530
|
+
runId={agentRunId}
|
|
1531
|
+
// Uploads
|
|
1532
|
+
processingFiles={processingFilesProp ?? processingFiles}
|
|
1533
|
+
// Artifacts
|
|
1534
|
+
showArtifacts={showArtifacts}
|
|
1535
|
+
artifactRefreshKey={artifactRefreshKey}
|
|
1536
|
+
// Messages (for workstreams tab context)
|
|
1537
|
+
messages={messages}
|
|
1538
|
+
// Payload content
|
|
1539
|
+
payloadContent={payloadContent}
|
|
1540
|
+
// Conversation content
|
|
1541
|
+
conversationContent={conversationTab ? conversationAreaJsx : conversationContent}
|
|
1542
|
+
// Panel control
|
|
1543
|
+
onClose={handleCloseRightPanel}
|
|
1544
|
+
defaultTab={rightPanelTab}
|
|
1355
1545
|
/>
|
|
1356
|
-
|
|
1546
|
+
</div>
|
|
1547
|
+
</>
|
|
1357
1548
|
)}
|
|
1358
1549
|
<Modal isOpen={isPdfModalOpen} onClose={() => setIsPdfModalOpen(false)}>
|
|
1359
1550
|
<ModalTitle>Export conversation as PDF</ModalTitle>
|
|
@@ -1388,7 +1579,7 @@ function ModernAgentConversationInner({
|
|
|
1388
1579
|
data={fusionData}
|
|
1389
1580
|
sendMessage={handleSendMessage}
|
|
1390
1581
|
ChartComponent={VegaLiteChart}
|
|
1391
|
-
artifactRunId={
|
|
1582
|
+
artifactRunId={agentRunId}
|
|
1392
1583
|
>
|
|
1393
1584
|
{mainContent}
|
|
1394
1585
|
</FusionFragmentProvider>
|
|
@@ -1397,13 +1588,3 @@ function ModernAgentConversationInner({
|
|
|
1397
1588
|
|
|
1398
1589
|
return mainContent;
|
|
1399
1590
|
}
|
|
1400
|
-
|
|
1401
|
-
// Helper function to get conversation URL - used by other components
|
|
1402
|
-
export async function getConversationUrl(
|
|
1403
|
-
vertesia: VertesiaClient,
|
|
1404
|
-
workflowRunId: string,
|
|
1405
|
-
): Promise<string> {
|
|
1406
|
-
return vertesia.files
|
|
1407
|
-
.getDownloadUrl(`agents/${workflowRunId}/conversation.json`)
|
|
1408
|
-
.then((r) => r.url);
|
|
1409
|
-
}
|