@vertesia/ui 1.0.0-dev.20260305.083323Z → 1.1.0-dev.20260327.125707Z
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 +61 -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/env/index.js +11 -1
- 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 +243 -106
- 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 +57 -18
- 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 +75 -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 +1 -1
- 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 +694 -0
- package/lib/esm/i18n/locales/de.json +662 -0
- package/lib/esm/i18n/locales/en.json +663 -0
- package/lib/esm/i18n/locales/es.json +668 -0
- package/lib/esm/i18n/locales/fr.json +670 -0
- package/lib/esm/i18n/locales/it.json +668 -0
- package/lib/esm/i18n/locales/ja.json +662 -0
- package/lib/esm/i18n/locales/ko.json +662 -0
- package/lib/esm/i18n/locales/pt.json +668 -0
- package/lib/esm/i18n/locales/ru.json +678 -0
- package/lib/esm/i18n/locales/tr.json +662 -0
- package/lib/esm/i18n/locales/zh-TW.json +662 -0
- package/lib/esm/i18n/locales/zh.json +662 -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 +23 -0
- package/lib/esm/session/UserSession.js.map +1 -1
- package/lib/esm/session/UserSessionProvider.js +4 -0
- 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/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 +44 -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/env/index.d.ts +8 -1
- 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 +12 -3
- 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 +3 -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/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.map +1 -1
- 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 +309 -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/env/index.ts +16 -3
- 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 +461 -271
- 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 +126 -46
- 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 +80 -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 +6 -6
- 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 +694 -0
- package/src/i18n/locales/de.json +662 -0
- package/src/i18n/locales/en.json +663 -0
- package/src/i18n/locales/es.json +668 -0
- package/src/i18n/locales/fr.json +670 -0
- package/src/i18n/locales/it.json +668 -0
- package/src/i18n/locales/ja.json +662 -0
- package/src/i18n/locales/ko.json +662 -0
- package/src/i18n/locales/pt.json +668 -0
- package/src/i18n/locales/ru.json +678 -0
- package/src/i18n/locales/tr.json +662 -0
- package/src/i18n/locales/zh-TW.json +662 -0
- package/src/i18n/locales/zh.json +662 -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 +24 -0
- package/src/session/UserSessionProvider.tsx +4 -0
- package/src/session/auth/composable.ts +1 -1
- 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
|
|
@@ -734,7 +761,7 @@ function ModernAgentConversationInner({
|
|
|
734
761
|
removeOptimisticMessages,
|
|
735
762
|
workflowStatus,
|
|
736
763
|
serverFileUpdates,
|
|
737
|
-
} = useAgentStream(client,
|
|
764
|
+
} = useAgentStream(client, agentRunId);
|
|
738
765
|
|
|
739
766
|
const {
|
|
740
767
|
plans,
|
|
@@ -761,13 +788,14 @@ function ModernAgentConversationInner({
|
|
|
761
788
|
processingFiles,
|
|
762
789
|
hasProcessingFiles,
|
|
763
790
|
handleFileUpload,
|
|
764
|
-
} = useFileProcessing(client,
|
|
791
|
+
} = useFileProcessing(client, agentRunId, serverFileUpdates, toast);
|
|
765
792
|
|
|
766
793
|
// ────────────────────────────────────────────
|
|
767
794
|
// Local state (UI-only concerns)
|
|
768
795
|
// ────────────────────────────────────────────
|
|
769
796
|
const bottomRef = useRef<HTMLDivElement | null>(null);
|
|
770
797
|
const conversationRef = useRef<HTMLDivElement | null>(null);
|
|
798
|
+
const conversationLayoutRef = useRef<HTMLDivElement | null>(null);
|
|
771
799
|
const [isSending, setIsSending] = useState(false);
|
|
772
800
|
const [internalViewMode, setInternalViewMode] = useState<AgentConversationViewMode>("sliding");
|
|
773
801
|
const viewMode = controlledViewMode ?? internalViewMode;
|
|
@@ -781,6 +809,8 @@ function ModernAgentConversationInner({
|
|
|
781
809
|
const [isStopping, setIsStopping] = useState(false);
|
|
782
810
|
const [thinkingMessageIndex, setThinkingMessageIndex] = useState(0);
|
|
783
811
|
const [isDragOver, setIsDragOver] = useState(false);
|
|
812
|
+
const [activeWorkstreams, setActiveWorkstreams] = useState<ActiveWorkstreamEntry[]>([]);
|
|
813
|
+
const workstreamFetchFailedRef = useRef(false);
|
|
784
814
|
const dragCounterRef = useRef(0);
|
|
785
815
|
|
|
786
816
|
// PERFORMANCE: Refs for values used inside useCallback to avoid re-creating the callback
|
|
@@ -789,13 +819,35 @@ function ModernAgentConversationInner({
|
|
|
789
819
|
const hasProcessingFilesRef = useRef(hasProcessingFiles);
|
|
790
820
|
hasProcessingFilesRef.current = hasProcessingFiles;
|
|
791
821
|
|
|
792
|
-
// Derive effective workflow status
|
|
822
|
+
// Derive effective workflow status — only main workstream TERMINATED overrides API status.
|
|
793
823
|
const effectiveWorkflowStatus = useMemo(() => {
|
|
794
|
-
const
|
|
795
|
-
|
|
824
|
+
const mainMessages = messages.filter(m => (m.workstream_id || 'main') === 'main');
|
|
825
|
+
const lastMain = mainMessages[mainMessages.length - 1];
|
|
826
|
+
if (lastMain?.type === AgentMessageType.TERMINATED) return "TERMINATED";
|
|
796
827
|
return workflowStatus;
|
|
797
828
|
}, [messages, workflowStatus]);
|
|
798
829
|
|
|
830
|
+
console.debug("[ModernAgentConversation] render", {
|
|
831
|
+
agentRunId,
|
|
832
|
+
instanceId: instanceIdRef.current,
|
|
833
|
+
messageCount: messages.length,
|
|
834
|
+
activeWorkstreams: activeWorkstreams.length,
|
|
835
|
+
});
|
|
836
|
+
|
|
837
|
+
useEffect(() => {
|
|
838
|
+
console.debug("[ModernAgentConversation] mount", {
|
|
839
|
+
agentRunId,
|
|
840
|
+
instanceId: instanceIdRef.current,
|
|
841
|
+
});
|
|
842
|
+
|
|
843
|
+
return () => {
|
|
844
|
+
console.debug("[ModernAgentConversation] unmount", {
|
|
845
|
+
agentRunId,
|
|
846
|
+
instanceId: instanceIdRef.current,
|
|
847
|
+
});
|
|
848
|
+
};
|
|
849
|
+
}, [agentRunId]);
|
|
850
|
+
|
|
799
851
|
// ────────────────────────────────────────────
|
|
800
852
|
// Computed values
|
|
801
853
|
// ────────────────────────────────────────────
|
|
@@ -812,6 +864,20 @@ function ModernAgentConversationInner({
|
|
|
812
864
|
};
|
|
813
865
|
}, [plans, activePlanIndex, workstreamStatusMap]);
|
|
814
866
|
|
|
867
|
+
const panelWorkstreams = useMemo<WorkstreamInfo[]>(() => {
|
|
868
|
+
return activeWorkstreams.map((ws) => ({
|
|
869
|
+
workstream_id: ws.workstream_id,
|
|
870
|
+
launch_id: ws.launch_id,
|
|
871
|
+
elapsed_ms: ws.elapsed_ms,
|
|
872
|
+
deadline_ms: ws.deadline_ms,
|
|
873
|
+
remaining_ms: Math.max(0, ws.deadline_ms - ws.elapsed_ms),
|
|
874
|
+
status: ws.status,
|
|
875
|
+
phase: ws.latest_progress?.phase,
|
|
876
|
+
child_workflow_id: ws.child_workflow_id,
|
|
877
|
+
child_workflow_run_id: ws.child_workflow_run_id,
|
|
878
|
+
}));
|
|
879
|
+
}, [activeWorkstreams]);
|
|
880
|
+
|
|
815
881
|
// ────────────────────────────────────────────
|
|
816
882
|
// Stable callbacks
|
|
817
883
|
// ────────────────────────────────────────────
|
|
@@ -828,19 +894,79 @@ function ModernAgentConversationInner({
|
|
|
828
894
|
setActivePlanIndex(index);
|
|
829
895
|
}, [setActivePlanIndex]);
|
|
830
896
|
|
|
831
|
-
|
|
897
|
+
// ────────────────────────────────────────────
|
|
898
|
+
// Unified right panel state
|
|
899
|
+
// ────────────────────────────────────────────
|
|
900
|
+
type RightPanelTab = 'plan' | 'workstreams' | 'documents' | 'uploads' | 'artifacts' | 'conversation';
|
|
901
|
+
const [rightPanelTab, _setRightPanelTab] = useState<RightPanelTab>((conversationContent || conversationTab) ? 'conversation' : 'plan');
|
|
902
|
+
const [rightPanelWidth, setRightPanelWidth] = useState(400);
|
|
903
|
+
const [isRightPanelResizing, setIsRightPanelResizing] = useState(false);
|
|
904
|
+
|
|
905
|
+
const isRightPanelVisible = showRightPanelProp && (showSlidingPanel
|
|
906
|
+
|| isDocPanelOpen
|
|
907
|
+
|| (!hideWorkstreamTabs && panelWorkstreams.length > 0)
|
|
908
|
+
|| !!conversationContent
|
|
909
|
+
|| conversationTab);
|
|
910
|
+
|
|
911
|
+
useEffect(() => {
|
|
912
|
+
if (!isRightPanelVisible && isRightPanelResizing) {
|
|
913
|
+
setIsRightPanelResizing(false);
|
|
914
|
+
}
|
|
915
|
+
}, [isRightPanelVisible, isRightPanelResizing]);
|
|
916
|
+
|
|
917
|
+
useEffect(() => {
|
|
918
|
+
if (!isRightPanelResizing) return;
|
|
919
|
+
|
|
920
|
+
const minRightPanelWidth = 300;
|
|
921
|
+
const minConversationWidth = 420;
|
|
922
|
+
|
|
923
|
+
const handleMouseMove = (event: MouseEvent) => {
|
|
924
|
+
const container = conversationLayoutRef.current;
|
|
925
|
+
if (!container) return;
|
|
926
|
+
|
|
927
|
+
const containerRect = container.getBoundingClientRect();
|
|
928
|
+
const maxRightPanelWidth = Math.max(minRightPanelWidth, containerRect.width - minConversationWidth);
|
|
929
|
+
const nextWidth = containerRect.right - event.clientX;
|
|
930
|
+
const clampedWidth = Math.min(Math.max(nextWidth, minRightPanelWidth), maxRightPanelWidth);
|
|
931
|
+
setRightPanelWidth(clampedWidth);
|
|
932
|
+
};
|
|
933
|
+
|
|
934
|
+
const handleMouseUp = () => {
|
|
935
|
+
setIsRightPanelResizing(false);
|
|
936
|
+
};
|
|
937
|
+
|
|
938
|
+
window.addEventListener('mousemove', handleMouseMove);
|
|
939
|
+
window.addEventListener('mouseup', handleMouseUp);
|
|
940
|
+
document.body.style.cursor = 'col-resize';
|
|
941
|
+
document.body.style.userSelect = 'none';
|
|
942
|
+
|
|
943
|
+
return () => {
|
|
944
|
+
window.removeEventListener('mousemove', handleMouseMove);
|
|
945
|
+
window.removeEventListener('mouseup', handleMouseUp);
|
|
946
|
+
document.body.style.cursor = '';
|
|
947
|
+
document.body.style.userSelect = '';
|
|
948
|
+
};
|
|
949
|
+
}, [isRightPanelResizing]);
|
|
950
|
+
|
|
951
|
+
const handleCloseRightPanel = useCallback(() => {
|
|
832
952
|
setShowSlidingPanel(false);
|
|
833
|
-
|
|
953
|
+
handleCloseDocPanel();
|
|
954
|
+
}, [setShowSlidingPanel, handleCloseDocPanel]);
|
|
834
955
|
|
|
835
956
|
// Default StoreLinkComponent that opens documents in the panel
|
|
836
957
|
const internalStoreLinkComponent = useCallback(
|
|
837
|
-
({ documentId, children }: { href: string; documentId: string; children: React.ReactNode }) => (
|
|
838
|
-
<
|
|
958
|
+
({ href, documentId, children }: { href: string; documentId: string; children: React.ReactNode }) => (
|
|
959
|
+
<a
|
|
960
|
+
href={href}
|
|
839
961
|
className="text-info underline cursor-pointer hover:text-info/80"
|
|
840
|
-
onClick={() =>
|
|
962
|
+
onClick={(e) => {
|
|
963
|
+
e.preventDefault();
|
|
964
|
+
e.stopPropagation();
|
|
965
|
+
openDocInPanel(documentId);
|
|
966
|
+
}}
|
|
841
967
|
>
|
|
842
968
|
{children}
|
|
843
|
-
</
|
|
969
|
+
</a>
|
|
844
970
|
),
|
|
845
971
|
[openDocInPanel]
|
|
846
972
|
);
|
|
@@ -884,6 +1010,41 @@ function ModernAgentConversationInner({
|
|
|
884
1010
|
onWorkstreamStatusChange?.(workstreamStatusMap);
|
|
885
1011
|
}, [workstreamStatusMap, onWorkstreamStatusChange]);
|
|
886
1012
|
|
|
1013
|
+
// Poll active workstreams from backend query for right-panel visibility and details.
|
|
1014
|
+
useEffect(() => {
|
|
1015
|
+
const shouldPoll = !isCompleted || activeWorkstreams.length > 0;
|
|
1016
|
+
if (!shouldPoll) {
|
|
1017
|
+
setActiveWorkstreams((prev) => (prev.length === 0 ? prev : []));
|
|
1018
|
+
return;
|
|
1019
|
+
}
|
|
1020
|
+
|
|
1021
|
+
let isCancelled = false;
|
|
1022
|
+
|
|
1023
|
+
const fetchActiveWorkstreams = async () => {
|
|
1024
|
+
try {
|
|
1025
|
+
const result = await client.agents.getActiveWorkstreams(agentRunId);
|
|
1026
|
+
if (isCancelled) return;
|
|
1027
|
+
setActiveWorkstreams(result.running ?? []);
|
|
1028
|
+
workstreamFetchFailedRef.current = false;
|
|
1029
|
+
} catch (error) {
|
|
1030
|
+
if (isCancelled) return;
|
|
1031
|
+
setActiveWorkstreams([]);
|
|
1032
|
+
if (!workstreamFetchFailedRef.current) {
|
|
1033
|
+
console.warn("Failed to fetch active workstreams:", error);
|
|
1034
|
+
workstreamFetchFailedRef.current = true;
|
|
1035
|
+
}
|
|
1036
|
+
}
|
|
1037
|
+
};
|
|
1038
|
+
|
|
1039
|
+
fetchActiveWorkstreams();
|
|
1040
|
+
const pollHandle = window.setInterval(fetchActiveWorkstreams, 10000);
|
|
1041
|
+
|
|
1042
|
+
return () => {
|
|
1043
|
+
isCancelled = true;
|
|
1044
|
+
window.clearInterval(pollHandle);
|
|
1045
|
+
};
|
|
1046
|
+
}, [client.agents, agentRunId, isCompleted, activeWorkstreams.length]);
|
|
1047
|
+
|
|
887
1048
|
// Notify parent when input availability is determined
|
|
888
1049
|
useEffect(() => {
|
|
889
1050
|
if (messages.length === 0) return;
|
|
@@ -913,8 +1074,8 @@ function ModernAgentConversationInner({
|
|
|
913
1074
|
if (hasProcessingFilesRef.current) {
|
|
914
1075
|
toast({
|
|
915
1076
|
status: "warning",
|
|
916
|
-
title:
|
|
917
|
-
description:
|
|
1077
|
+
title: t('agent.filesProcessing'),
|
|
1078
|
+
description: t('agent.waitForFilesProcessing'),
|
|
918
1079
|
duration: 3000,
|
|
919
1080
|
});
|
|
920
1081
|
return;
|
|
@@ -935,7 +1096,7 @@ function ModernAgentConversationInner({
|
|
|
935
1096
|
|
|
936
1097
|
const optimisticMessage: AgentMessage = {
|
|
937
1098
|
timestamp: Date.now(),
|
|
938
|
-
workflow_run_id:
|
|
1099
|
+
workflow_run_id: agentRunId,
|
|
939
1100
|
type: AgentMessageType.QUESTION,
|
|
940
1101
|
message: messageContent,
|
|
941
1102
|
workstream_id: "main",
|
|
@@ -950,8 +1111,8 @@ function ModernAgentConversationInner({
|
|
|
950
1111
|
_messageId: messageId,
|
|
951
1112
|
};
|
|
952
1113
|
|
|
953
|
-
client.
|
|
954
|
-
.sendSignal(
|
|
1114
|
+
client.agents
|
|
1115
|
+
.sendSignal(agentRunId, "UserInput", {
|
|
955
1116
|
message: messageContent,
|
|
956
1117
|
metadata,
|
|
957
1118
|
} as UserInputSignal)
|
|
@@ -964,25 +1125,25 @@ function ModernAgentConversationInner({
|
|
|
964
1125
|
);
|
|
965
1126
|
toast({
|
|
966
1127
|
status: "error",
|
|
967
|
-
title:
|
|
968
|
-
description: err instanceof Error ? err.message :
|
|
1128
|
+
title: t('agent.failedToSend'),
|
|
1129
|
+
description: err instanceof Error ? err.message : t('agent.unknownError'),
|
|
969
1130
|
duration: 3000,
|
|
970
1131
|
});
|
|
971
1132
|
})
|
|
972
1133
|
.finally(() => {
|
|
973
1134
|
setIsSending(false);
|
|
974
1135
|
});
|
|
975
|
-
}, [
|
|
1136
|
+
}, [agentRunId, client, toast, getAttachedDocs, getMessageContext, onAttachmentsSent, addOptimisticMessage, removeOptimisticMessages]);
|
|
976
1137
|
|
|
977
1138
|
// Drag and drop handlers for full-panel file upload
|
|
978
1139
|
const handleDragEnter = useCallback((e: React.DragEvent) => {
|
|
979
1140
|
e.preventDefault();
|
|
980
1141
|
e.stopPropagation();
|
|
981
1142
|
dragCounterRef.current++;
|
|
982
|
-
if (
|
|
1143
|
+
if (e.dataTransfer?.types?.includes('Files')) {
|
|
983
1144
|
setIsDragOver(true);
|
|
984
1145
|
}
|
|
985
|
-
}, [
|
|
1146
|
+
}, []);
|
|
986
1147
|
|
|
987
1148
|
const handleDragOver = useCallback((e: React.DragEvent) => {
|
|
988
1149
|
e.preventDefault();
|
|
@@ -1004,11 +1165,11 @@ function ModernAgentConversationInner({
|
|
|
1004
1165
|
dragCounterRef.current = 0;
|
|
1005
1166
|
setIsDragOver(false);
|
|
1006
1167
|
|
|
1007
|
-
if (
|
|
1168
|
+
if (e.dataTransfer?.files && e.dataTransfer.files.length > 0) {
|
|
1008
1169
|
const filesArray = Array.from(e.dataTransfer.files);
|
|
1009
1170
|
handleFileUpload(filesArray);
|
|
1010
1171
|
}
|
|
1011
|
-
}, [
|
|
1172
|
+
}, [handleFileUpload]);
|
|
1012
1173
|
|
|
1013
1174
|
// Stop/interrupt the active workflow
|
|
1014
1175
|
const handleStopWorkflow = useCallback(async () => {
|
|
@@ -1016,27 +1177,27 @@ function ModernAgentConversationInner({
|
|
|
1016
1177
|
|
|
1017
1178
|
setIsStopping(true);
|
|
1018
1179
|
try {
|
|
1019
|
-
await client.
|
|
1180
|
+
await client.agents.sendSignal(agentRunId, "Stop", {
|
|
1020
1181
|
message: "User requested stop",
|
|
1021
1182
|
});
|
|
1022
1183
|
|
|
1023
1184
|
toast({
|
|
1024
1185
|
status: "info",
|
|
1025
|
-
title:
|
|
1026
|
-
description:
|
|
1186
|
+
title: t('agent.agentInterrupted'),
|
|
1187
|
+
description: t('agent.typeNewInstructions'),
|
|
1027
1188
|
duration: 3000,
|
|
1028
1189
|
});
|
|
1029
1190
|
} catch (err) {
|
|
1030
1191
|
toast({
|
|
1031
1192
|
status: "error",
|
|
1032
|
-
title:
|
|
1033
|
-
description: err instanceof Error ? err.message :
|
|
1193
|
+
title: t('agent.failedToInterrupt'),
|
|
1194
|
+
description: err instanceof Error ? err.message : t('agent.unknownError'),
|
|
1034
1195
|
duration: 3000,
|
|
1035
1196
|
});
|
|
1036
1197
|
} finally {
|
|
1037
1198
|
setIsStopping(false);
|
|
1038
1199
|
}
|
|
1039
|
-
}, [isStopping, client,
|
|
1200
|
+
}, [isStopping, client, agentRunId, toast]);
|
|
1040
1201
|
|
|
1041
1202
|
// Expose stop handler to external callers via ref
|
|
1042
1203
|
useEffect(() => {
|
|
@@ -1051,6 +1212,10 @@ function ModernAgentConversationInner({
|
|
|
1051
1212
|
|
|
1052
1213
|
// Calculate number of active tasks for the status indicator
|
|
1053
1214
|
const getActiveTaskCount = (): number => {
|
|
1215
|
+
if (activeWorkstreams.length > 0) {
|
|
1216
|
+
return activeWorkstreams.filter((ws) => ws.status === "running").length;
|
|
1217
|
+
}
|
|
1218
|
+
|
|
1054
1219
|
if (!messages.length) return 0;
|
|
1055
1220
|
|
|
1056
1221
|
// Group messages by workstream
|
|
@@ -1062,7 +1227,7 @@ function ModernAgentConversationInner({
|
|
|
1062
1227
|
if (!workstreamMessages.has(workstreamId)) {
|
|
1063
1228
|
workstreamMessages.set(workstreamId, []);
|
|
1064
1229
|
}
|
|
1065
|
-
workstreamMessages.get(workstreamId)
|
|
1230
|
+
workstreamMessages.get(workstreamId)?.push(message);
|
|
1066
1231
|
}
|
|
1067
1232
|
});
|
|
1068
1233
|
|
|
@@ -1086,19 +1251,18 @@ function ModernAgentConversationInner({
|
|
|
1086
1251
|
return activeCount;
|
|
1087
1252
|
};
|
|
1088
1253
|
|
|
1089
|
-
const actualTitle =
|
|
1090
|
-
title || run.workflowId.split(":")[2] || "Agent Conversation";
|
|
1254
|
+
const actualTitle = title || t('agent.agentConversation');
|
|
1091
1255
|
|
|
1092
1256
|
// Handle downloading conversation
|
|
1093
1257
|
const downloadConversation = async () => {
|
|
1094
1258
|
try {
|
|
1095
|
-
const url = await getConversationUrl(client,
|
|
1259
|
+
const url = await getConversationUrl(client, agentRunId);
|
|
1096
1260
|
if (url) window.open(url, "_blank");
|
|
1097
1261
|
} catch (err) {
|
|
1098
1262
|
console.error("Failed to download conversation", err);
|
|
1099
1263
|
toast({
|
|
1100
1264
|
status: "error",
|
|
1101
|
-
title:
|
|
1265
|
+
title: t('agent.failedToDownload'),
|
|
1102
1266
|
duration: 3000,
|
|
1103
1267
|
});
|
|
1104
1268
|
}
|
|
@@ -1106,10 +1270,10 @@ function ModernAgentConversationInner({
|
|
|
1106
1270
|
|
|
1107
1271
|
// Handle copying run ID
|
|
1108
1272
|
const copyRunId = () => {
|
|
1109
|
-
navigator.clipboard.writeText(
|
|
1273
|
+
navigator.clipboard.writeText(agentRunId);
|
|
1110
1274
|
toast({
|
|
1111
1275
|
status: "success",
|
|
1112
|
-
title:
|
|
1276
|
+
title: t('agent.runIdCopied'),
|
|
1113
1277
|
duration: 2000,
|
|
1114
1278
|
});
|
|
1115
1279
|
};
|
|
@@ -1120,8 +1284,8 @@ function ModernAgentConversationInner({
|
|
|
1120
1284
|
if (!conversationRef.current) {
|
|
1121
1285
|
toast({
|
|
1122
1286
|
status: "error",
|
|
1123
|
-
title:
|
|
1124
|
-
description:
|
|
1287
|
+
title: t('agent.pdfExportFailed'),
|
|
1288
|
+
description: t('agent.noConversationContent'),
|
|
1125
1289
|
duration: 3000,
|
|
1126
1290
|
});
|
|
1127
1291
|
return;
|
|
@@ -1133,21 +1297,21 @@ function ModernAgentConversationInner({
|
|
|
1133
1297
|
if (!conversationRef.current) {
|
|
1134
1298
|
toast({
|
|
1135
1299
|
status: "error",
|
|
1136
|
-
title:
|
|
1137
|
-
description:
|
|
1300
|
+
title: t('agent.pdfExportFailed'),
|
|
1301
|
+
description: t('agent.noConversationContent'),
|
|
1138
1302
|
duration: 3000,
|
|
1139
1303
|
});
|
|
1140
1304
|
return;
|
|
1141
1305
|
}
|
|
1142
1306
|
|
|
1143
|
-
const pdfTitle = `${actualTitle} - ${
|
|
1307
|
+
const pdfTitle = `${actualTitle} - ${agentRunId}`;
|
|
1144
1308
|
const success = printElementToPdf(conversationRef.current, pdfTitle);
|
|
1145
1309
|
|
|
1146
1310
|
if (!success) {
|
|
1147
1311
|
toast({
|
|
1148
1312
|
status: "error",
|
|
1149
|
-
title:
|
|
1150
|
-
description:
|
|
1313
|
+
title: t('agent.pdfExportFailed'),
|
|
1314
|
+
description: t('agent.unableToOpenPrint'),
|
|
1151
1315
|
duration: 4000,
|
|
1152
1316
|
});
|
|
1153
1317
|
return;
|
|
@@ -1155,13 +1319,26 @@ function ModernAgentConversationInner({
|
|
|
1155
1319
|
|
|
1156
1320
|
toast({
|
|
1157
1321
|
status: "success",
|
|
1158
|
-
title:
|
|
1159
|
-
description:
|
|
1322
|
+
title: t('agent.pdfExportReady'),
|
|
1323
|
+
description: t('agent.printDialogDescription'),
|
|
1160
1324
|
duration: 4000,
|
|
1161
1325
|
});
|
|
1162
1326
|
setIsPdfModalOpen(false);
|
|
1163
1327
|
};
|
|
1164
1328
|
|
|
1329
|
+
// Artifact refresh key — bumps when tool calls complete or conversation finishes,
|
|
1330
|
+
// which is when new artifacts are most likely to appear.
|
|
1331
|
+
const artifactRefreshKey = useMemo(() => {
|
|
1332
|
+
return messages.filter((m) => {
|
|
1333
|
+
if (m.type === AgentMessageType.COMPLETE) return true;
|
|
1334
|
+
if (m.type === AgentMessageType.THOUGHT) {
|
|
1335
|
+
const details = m.details as Record<string, unknown> | undefined;
|
|
1336
|
+
return details?.tool_status === 'completed';
|
|
1337
|
+
}
|
|
1338
|
+
return false;
|
|
1339
|
+
}).length;
|
|
1340
|
+
}, [messages]);
|
|
1341
|
+
|
|
1165
1342
|
// PERFORMANCE: Memoize taskLabels to prevent AllMessagesMixed re-renders
|
|
1166
1343
|
const taskLabels = useMemo(() =>
|
|
1167
1344
|
getActivePlan.plan.plan?.reduce((acc, task) => {
|
|
@@ -1170,12 +1347,143 @@ function ModernAgentConversationInner({
|
|
|
1170
1347
|
}, new Map<string, string>()),
|
|
1171
1348
|
[getActivePlan.plan]);
|
|
1172
1349
|
|
|
1350
|
+
// Conversation area inner content — shared between main layout and conversationTab mode
|
|
1351
|
+
const conversationAreaJsx = (
|
|
1352
|
+
<div
|
|
1353
|
+
ref={conversationRef}
|
|
1354
|
+
className={cn(
|
|
1355
|
+
"flex flex-col min-h-0 min-w-0 border-0",
|
|
1356
|
+
conversationTab
|
|
1357
|
+
? "flex-1 h-full"
|
|
1358
|
+
: isRightPanelVisible
|
|
1359
|
+
? "w-full flex-1 min-h-[50vh]"
|
|
1360
|
+
: fullWidth
|
|
1361
|
+
? "flex-1 w-full"
|
|
1362
|
+
: `flex-1 mx-auto ${!isModal ? "max-w-4xl" : ""}`
|
|
1363
|
+
)}
|
|
1364
|
+
>
|
|
1365
|
+
{!hideHeader && (
|
|
1366
|
+
<div className="flex-shrink-0">
|
|
1367
|
+
<Header
|
|
1368
|
+
title={actualTitle}
|
|
1369
|
+
isCompleted={isCompleted}
|
|
1370
|
+
onClose={onClose}
|
|
1371
|
+
isModal={isModal}
|
|
1372
|
+
agentRunId={agentRunId}
|
|
1373
|
+
viewMode={viewMode}
|
|
1374
|
+
onViewModeChange={handleViewModeChange}
|
|
1375
|
+
showPlanPanel={showRightPanelProp && showSlidingPanel}
|
|
1376
|
+
hasPlan={showRightPanelProp && plans.length > 0}
|
|
1377
|
+
showPlanButton={showRightPanelProp && !conversationTab}
|
|
1378
|
+
onTogglePlanPanel={handleTogglePlanPanel}
|
|
1379
|
+
onDownload={downloadConversation}
|
|
1380
|
+
onCopyRunId={copyRunId}
|
|
1381
|
+
resetWorkflow={resetWorkflow}
|
|
1382
|
+
onRestart={onRestart}
|
|
1383
|
+
onFork={onFork}
|
|
1384
|
+
onShowDetails={onShowDetails}
|
|
1385
|
+
onExportPdf={exportConversationPdf}
|
|
1386
|
+
isReceivingChunks={debugChunkFlash}
|
|
1387
|
+
/>
|
|
1388
|
+
</div>
|
|
1389
|
+
)}
|
|
1390
|
+
|
|
1391
|
+
{messages.length === 0 && !isCompleted ? (
|
|
1392
|
+
<div className="flex-1 flex flex-col items-center justify-center h-full text-center py-6">
|
|
1393
|
+
<div className="p-5 max-w-md border border-info rounded-lg shadow-sm">
|
|
1394
|
+
<div className="flex items-center space-x-3 mb-3">
|
|
1395
|
+
<PulsatingCircle size="sm" color="blue" />
|
|
1396
|
+
<div className="text-sm text-muted font-medium">
|
|
1397
|
+
{ThinkingMessages[thinkingMessageIndex]}
|
|
1398
|
+
</div>
|
|
1399
|
+
</div>
|
|
1400
|
+
<div className="mt-4 flex justify-center">
|
|
1401
|
+
<AnimatedThinkingDots color="blue" className="mt-1" />
|
|
1402
|
+
</div>
|
|
1403
|
+
</div>
|
|
1404
|
+
</div>
|
|
1405
|
+
) : (
|
|
1406
|
+
<AllMessagesMixed
|
|
1407
|
+
messages={messages}
|
|
1408
|
+
bottomRef={bottomRef as React.RefObject<HTMLDivElement>}
|
|
1409
|
+
isCompleted={isCompleted}
|
|
1410
|
+
plan={getActivePlan.plan}
|
|
1411
|
+
workstreamStatus={getActivePlan.workstreamStatus}
|
|
1412
|
+
showPlanPanel={showRightPanelProp && showSlidingPanel}
|
|
1413
|
+
onTogglePlanPanel={handleTogglePlanPanel}
|
|
1414
|
+
plans={plans}
|
|
1415
|
+
activePlanIndex={activePlanIndex}
|
|
1416
|
+
onChangePlan={handleChangePlan}
|
|
1417
|
+
taskLabels={taskLabels}
|
|
1418
|
+
streamingMessages={streamingMessages}
|
|
1419
|
+
onSendMessage={handleSendMessage}
|
|
1420
|
+
thinkingMessageIndex={thinkingMessageIndex}
|
|
1421
|
+
messageItemClassNames={messageItemClassNames}
|
|
1422
|
+
messageStyleOverrides={messageStyleOverrides}
|
|
1423
|
+
toolCallGroupClassNames={toolCallGroupClassNames}
|
|
1424
|
+
hideToolCallsInViewMode={hideToolCallsInViewMode}
|
|
1425
|
+
streamingMessageClassNames={streamingMessageClassNames}
|
|
1426
|
+
batchProgressPanelClassNames={batchProgressPanelClassNames}
|
|
1427
|
+
artifactRunId={agentRunId}
|
|
1428
|
+
viewMode={viewMode}
|
|
1429
|
+
hideWorkstreamTabs={hideWorkstreamTabs}
|
|
1430
|
+
workingIndicatorClassName={workingIndicatorClassName}
|
|
1431
|
+
messageListClassName={messageListClassName}
|
|
1432
|
+
StoreLinkComponent={effectiveStoreLinkComponent}
|
|
1433
|
+
CollectionLinkComponent={CollectionLinkComponent}
|
|
1434
|
+
prependFriendlyMessage={prependFriendlyMessage}
|
|
1435
|
+
/>
|
|
1436
|
+
)}
|
|
1437
|
+
|
|
1438
|
+
{!hideMessageInput && (
|
|
1439
|
+
<div className="flex-shrink-0" style={{ paddingBottom: 'env(safe-area-inset-bottom, 0px)' }}>
|
|
1440
|
+
{effectiveWorkflowStatus && effectiveWorkflowStatus !== "RUNNING" ? (
|
|
1441
|
+
<MessageBox
|
|
1442
|
+
status={effectiveWorkflowStatus === "COMPLETED" ? 'success' : 'done'}
|
|
1443
|
+
icon={null}
|
|
1444
|
+
className="m-2"
|
|
1445
|
+
>
|
|
1446
|
+
This Workflow is {effectiveWorkflowStatus}
|
|
1447
|
+
</MessageBox>
|
|
1448
|
+
) : showInput && (
|
|
1449
|
+
<MessageInput
|
|
1450
|
+
onSend={handleSendMessage}
|
|
1451
|
+
onStop={handleStopWorkflow}
|
|
1452
|
+
disabled={isUploading}
|
|
1453
|
+
isSending={isSending || isUploading}
|
|
1454
|
+
isStopping={isStopping}
|
|
1455
|
+
isStreaming={!isCompleted}
|
|
1456
|
+
isCompleted={isCompleted}
|
|
1457
|
+
activeTaskCount={getActiveTaskCount()}
|
|
1458
|
+
placeholder={placeholder ?? 'Type your message...'}
|
|
1459
|
+
onFilesSelected={handleFileUpload}
|
|
1460
|
+
uploadedFiles={uploadedFiles}
|
|
1461
|
+
onRemoveFile={onRemoveFile}
|
|
1462
|
+
acceptedFileTypes={acceptedFileTypes}
|
|
1463
|
+
maxFiles={maxFiles}
|
|
1464
|
+
processingFiles={processingFiles}
|
|
1465
|
+
hasProcessingFiles={hasProcessingFiles}
|
|
1466
|
+
renderDocumentSearch={renderDocumentSearch}
|
|
1467
|
+
selectedDocuments={selectedDocuments}
|
|
1468
|
+
onRemoveDocument={onRemoveDocument}
|
|
1469
|
+
hideObjectLinking={hideObjectLinking}
|
|
1470
|
+
hideFileUpload={hideFileUpload}
|
|
1471
|
+
className={inputContainerClassName}
|
|
1472
|
+
inputClassName={inputClassName}
|
|
1473
|
+
/>
|
|
1474
|
+
)}
|
|
1475
|
+
</div>
|
|
1476
|
+
)}
|
|
1477
|
+
</div>
|
|
1478
|
+
);
|
|
1479
|
+
|
|
1173
1480
|
// Main content - wrapped with FusionFragmentProvider when fusionData is provided
|
|
1174
1481
|
const mainContent = (
|
|
1175
1482
|
<ArtifactUrlCacheProvider>
|
|
1176
1483
|
<ImageLightboxProvider>
|
|
1177
1484
|
<div
|
|
1178
|
-
|
|
1485
|
+
ref={conversationLayoutRef}
|
|
1486
|
+
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
1487
|
onDragEnter={handleDragEnter}
|
|
1180
1488
|
onDragOver={handleDragOver}
|
|
1181
1489
|
onDragLeave={handleDragLeave}
|
|
@@ -1190,170 +1498,62 @@ function ModernAgentConversationInner({
|
|
|
1190
1498
|
</div>
|
|
1191
1499
|
</div>
|
|
1192
1500
|
)}
|
|
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}
|
|
1501
|
+
{/* Conversation Area — hidden when conversationTab moves it into the right panel */}
|
|
1502
|
+
{!conversationTab && conversationAreaJsx}
|
|
1503
|
+
|
|
1504
|
+
{/* Unified Right Panel — Plan | Workstreams | Documents | Uploads */}
|
|
1505
|
+
{isRightPanelVisible && (
|
|
1506
|
+
<>
|
|
1507
|
+
{!conversationTab && (
|
|
1508
|
+
<div
|
|
1509
|
+
className="hidden lg:block lg:w-1 lg:shrink-0 cursor-col-resize bg-border/70 hover:bg-border transition-colors"
|
|
1510
|
+
onMouseDown={() => setIsRightPanelResizing(true)}
|
|
1511
|
+
role="separator"
|
|
1512
|
+
aria-orientation="vertical"
|
|
1513
|
+
aria-label="Resize right panel"
|
|
1226
1514
|
/>
|
|
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
|
|
1515
|
+
)}
|
|
1516
|
+
<div
|
|
1517
|
+
className={conversationTab
|
|
1518
|
+
? "w-full h-full overflow-auto"
|
|
1519
|
+
: "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"}
|
|
1520
|
+
style={!conversationTab ? ({ ['--agent-right-panel-width' as string]: `${rightPanelWidth}px` } as React.CSSProperties) : undefined}
|
|
1521
|
+
>
|
|
1522
|
+
<AgentRightPanel
|
|
1523
|
+
// Plan
|
|
1329
1524
|
plan={getActivePlan.plan}
|
|
1330
1525
|
workstreamStatus={getActivePlan.workstreamStatus}
|
|
1331
|
-
isOpen={showSlidingPanel}
|
|
1332
|
-
onClose={handleClosePlanPanel}
|
|
1333
1526
|
plans={plans}
|
|
1334
1527
|
activePlanIndex={activePlanIndex}
|
|
1335
1528
|
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}
|
|
1529
|
+
showPlan={!hidePlanPanel && showSlidingPanel}
|
|
1530
|
+
// Workstreams
|
|
1531
|
+
activeWorkstreams={panelWorkstreams}
|
|
1532
|
+
hideWorkstreams={hideWorkstreamTabs}
|
|
1533
|
+
// Documents
|
|
1534
|
+
openDocuments={openDocuments}
|
|
1350
1535
|
activeDocumentId={activeDocumentId}
|
|
1351
1536
|
onSelectDocument={selectDocument}
|
|
1352
1537
|
onCloseDocument={handleCloseDocument}
|
|
1353
|
-
|
|
1354
|
-
runId={
|
|
1538
|
+
docRefreshKey={docRefreshKey}
|
|
1539
|
+
runId={agentRunId}
|
|
1540
|
+
// Uploads
|
|
1541
|
+
processingFiles={processingFilesProp ?? processingFiles}
|
|
1542
|
+
// Artifacts
|
|
1543
|
+
showArtifacts={showArtifacts}
|
|
1544
|
+
artifactRefreshKey={artifactRefreshKey}
|
|
1545
|
+
// Messages (for workstreams tab context)
|
|
1546
|
+
messages={messages}
|
|
1547
|
+
// Payload content
|
|
1548
|
+
payloadContent={payloadContent}
|
|
1549
|
+
// Conversation content
|
|
1550
|
+
conversationContent={conversationTab ? conversationAreaJsx : conversationContent}
|
|
1551
|
+
// Panel control
|
|
1552
|
+
onClose={handleCloseRightPanel}
|
|
1553
|
+
defaultTab={rightPanelTab}
|
|
1355
1554
|
/>
|
|
1356
|
-
|
|
1555
|
+
</div>
|
|
1556
|
+
</>
|
|
1357
1557
|
)}
|
|
1358
1558
|
<Modal isOpen={isPdfModalOpen} onClose={() => setIsPdfModalOpen(false)}>
|
|
1359
1559
|
<ModalTitle>Export conversation as PDF</ModalTitle>
|
|
@@ -1388,7 +1588,7 @@ function ModernAgentConversationInner({
|
|
|
1388
1588
|
data={fusionData}
|
|
1389
1589
|
sendMessage={handleSendMessage}
|
|
1390
1590
|
ChartComponent={VegaLiteChart}
|
|
1391
|
-
artifactRunId={
|
|
1591
|
+
artifactRunId={agentRunId}
|
|
1392
1592
|
>
|
|
1393
1593
|
{mainContent}
|
|
1394
1594
|
</FusionFragmentProvider>
|
|
@@ -1397,13 +1597,3 @@ function ModernAgentConversationInner({
|
|
|
1397
1597
|
|
|
1398
1598
|
return mainContent;
|
|
1399
1599
|
}
|
|
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
|
-
}
|