@vertesia/ui 1.5.0-dev.20260905.011013Z → 1.5.0-dev.20260910.052912Z
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/core/components/Avatar.d.ts.map +1 -1
- package/lib/core/components/Avatar.js +3 -3
- package/lib/core/components/Avatar.js.map +1 -1
- package/lib/core/components/ComboBox.js +1 -1
- package/lib/core/components/ComboBox.js.map +1 -1
- package/lib/core/components/FileUpload.js +1 -1
- package/lib/core/components/FileUpload.js.map +1 -1
- package/lib/core/components/Link.js +1 -1
- package/lib/core/components/Link.js.map +1 -1
- package/lib/core/components/SelectList.js +1 -1
- package/lib/core/components/SelectList.js.map +1 -1
- package/lib/core/components/SidePanel.js +1 -1
- package/lib/core/components/SidePanel.js.map +1 -1
- package/lib/core/components/Spinner.js +1 -1
- package/lib/core/components/Spinner.js.map +1 -1
- package/lib/core/components/TagsInput.js +8 -8
- package/lib/core/components/TagsInput.js.map +1 -1
- package/lib/core/components/shadcn/MessageBox.js +1 -1
- package/lib/core/components/shadcn/MessageBox.js.map +1 -1
- package/lib/core/components/shadcn/button.js +1 -1
- package/lib/core/components/shadcn/button.js.map +1 -1
- package/lib/core/components/shadcn/card.d.ts.map +1 -1
- package/lib/core/components/shadcn/card.js +1 -1
- package/lib/core/components/shadcn/card.js.map +1 -1
- package/lib/core/components/shadcn/command.js +5 -5
- package/lib/core/components/shadcn/command.js.map +1 -1
- package/lib/core/components/shadcn/filters/DynamicLabel.js +1 -1
- package/lib/core/components/shadcn/filters/DynamicLabel.js.map +1 -1
- package/lib/core/components/shadcn/filters/comboBox/DateCombobox.js +3 -3
- package/lib/core/components/shadcn/filters/comboBox/DateCombobox.js.map +1 -1
- package/lib/core/components/shadcn/input.js +3 -3
- package/lib/core/components/shadcn/input.js.map +1 -1
- package/lib/core/components/shadcn/modal/ConfirmModal.js +1 -1
- package/lib/core/components/shadcn/modal/ConfirmModal.js.map +1 -1
- package/lib/core/components/shadcn/modal/dialog.d.ts.map +1 -1
- package/lib/core/components/shadcn/modal/dialog.js +2 -2
- package/lib/core/components/shadcn/modal/dialog.js.map +1 -1
- package/lib/core/components/shadcn/overflowTabs.js +2 -2
- package/lib/core/components/shadcn/overflowTabs.js.map +1 -1
- package/lib/core/components/shadcn/popover.js +1 -1
- package/lib/core/components/shadcn/popover.js.map +1 -1
- package/lib/core/components/shadcn/radioGroup.d.ts.map +1 -1
- package/lib/core/components/shadcn/radioGroup.js +3 -3
- package/lib/core/components/shadcn/radioGroup.js.map +1 -1
- package/lib/core/components/shadcn/selectBox.js +1 -1
- package/lib/core/components/shadcn/selectBox.js.map +1 -1
- package/lib/core/components/shadcn/tabs.d.ts.map +1 -1
- package/lib/core/components/shadcn/tabs.js +5 -2
- package/lib/core/components/shadcn/tabs.js.map +1 -1
- package/lib/core/components/styles.js +1 -1
- package/lib/core/components/styles.js.map +1 -1
- package/lib/core/components/table/index.js +1 -1
- package/lib/core/hooks/useFetch.d.ts.map +1 -1
- package/lib/core/hooks/useFetch.js +2 -0
- package/lib/core/hooks/useFetch.js.map +1 -1
- package/lib/features/activity-doc/ActivityDoc.js +8 -8
- package/lib/features/activity-doc/ActivityDoc.js.map +1 -1
- package/lib/features/agent/chat/AgentChart.js +1 -1
- package/lib/features/agent/chat/AgentChart.js.map +1 -1
- package/lib/features/agent/chat/AskUserWidget.d.ts.map +1 -1
- package/lib/features/agent/chat/AskUserWidget.js +13 -13
- package/lib/features/agent/chat/AskUserWidget.js.map +1 -1
- package/lib/features/agent/chat/JumpingDots.js +1 -1
- package/lib/features/agent/chat/JumpingDots.js.map +1 -1
- package/lib/features/agent/chat/ModernAgentConversation.js +1 -1
- package/lib/features/agent/chat/ModernAgentConversation.js.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/AllMessagesMixed.d.ts.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/AllMessagesMixed.js +22 -9
- package/lib/features/agent/chat/ModernAgentOutput/AllMessagesMixed.js.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/BatchProgressPanel.js +5 -5
- package/lib/features/agent/chat/ModernAgentOutput/BatchProgressPanel.js.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/Header.js +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/Header.js.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/InlineSlideInPanel.js +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/InlineSlideInPanel.js.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/MessageInput.js +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/MessageInput.js.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/MessageItem.d.ts.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/MessageItem.js +7 -7
- package/lib/features/agent/chat/ModernAgentOutput/MessageItem.js.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/MessagesContainer.js +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/MessagesContainer.js.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/PlanPanel.d.ts.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/PlanPanel.js +10 -10
- package/lib/features/agent/chat/ModernAgentOutput/PlanPanel.js.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/SlideInPanel.js +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/SlideInPanel.js.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/SlidingMessages.d.ts.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/SlidingMessages.js +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/SlidingMessages.js.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/SlidingPlanPanel.js +17 -17
- package/lib/features/agent/chat/ModernAgentOutput/SlidingPlanPanel.js.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/StreamingMessage.js +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/StreamingMessage.js.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/SummaryConversation.d.ts.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/SummaryConversation.js +14 -2
- package/lib/features/agent/chat/ModernAgentOutput/SummaryConversation.js.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/ToolCallGroup.d.ts.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/ToolCallGroup.js +15 -15
- package/lib/features/agent/chat/ModernAgentOutput/ToolCallGroup.js.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/requestInputMessages.d.ts.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/requestInputMessages.js +18 -0
- package/lib/features/agent/chat/ModernAgentOutput/requestInputMessages.js.map +1 -1
- package/lib/features/agent/chat/SlidingThinkingIndicator.d.ts.map +1 -1
- package/lib/features/agent/chat/SlidingThinkingIndicator.js +5 -2
- package/lib/features/agent/chat/SlidingThinkingIndicator.js.map +1 -1
- package/lib/features/agent/chat/VegaLiteChart.d.ts.map +1 -1
- package/lib/features/agent/chat/VegaLiteChart.js +6 -2
- package/lib/features/agent/chat/VegaLiteChart.js.map +1 -1
- package/lib/features/errors/RowErrorBoundary.js +1 -1
- package/lib/features/errors/RowErrorBoundary.js.map +1 -1
- package/lib/features/facets/AgentRunnerFacetsNav.js +1 -1
- package/lib/features/facets/AgentRunnerFacetsNav.js.map +1 -1
- package/lib/features/facets/utils/VInteractionFacet.d.ts +3 -5
- package/lib/features/facets/utils/VInteractionFacet.d.ts.map +1 -1
- package/lib/features/facets/utils/VInteractionFacet.js +10 -23
- package/lib/features/facets/utils/VInteractionFacet.js.map +1 -1
- package/lib/features/facets/utils/VUserFacet.js +1 -1
- package/lib/features/facets/utils/VUserFacet.js.map +1 -1
- package/lib/features/layout/GenericPageNavHeader.d.ts.map +1 -1
- package/lib/features/layout/GenericPageNavHeader.js +4 -1
- package/lib/features/layout/GenericPageNavHeader.js.map +1 -1
- package/lib/features/layout/NotFoundView.js +1 -1
- package/lib/features/layout/NotFoundView.js.map +1 -1
- package/lib/features/magic-pdf/AnnotatedImageSlider.js +4 -12
- package/lib/features/magic-pdf/AnnotatedImageSlider.js.map +1 -1
- package/lib/features/magic-pdf/ExtractedContentView.js +4 -4
- package/lib/features/magic-pdf/ExtractedContentView.js.map +1 -1
- package/lib/features/magic-pdf/MagicPdfView.js +1 -1
- package/lib/features/magic-pdf/MagicPdfView.js.map +1 -1
- package/lib/features/pdf-viewer/PdfPageRenderer.js +2 -2
- package/lib/features/pdf-viewer/PdfPageRenderer.js.map +1 -1
- package/lib/features/pdf-viewer/PdfPageSlider.js +3 -3
- package/lib/features/pdf-viewer/PdfPageSlider.js.map +1 -1
- package/lib/features/pdf-viewer/SimplePdfViewer.js +1 -1
- package/lib/features/pdf-viewer/SimplePdfViewer.js.map +1 -1
- package/lib/features/permissions/UserPermissionsProvider.d.ts +2 -1
- package/lib/features/permissions/UserPermissionsProvider.d.ts.map +1 -1
- package/lib/features/permissions/UserPermissionsProvider.js +35 -22
- package/lib/features/permissions/UserPermissionsProvider.js.map +1 -1
- package/lib/features/permissions/useRoleMappings.d.ts +19 -0
- package/lib/features/permissions/useRoleMappings.d.ts.map +1 -0
- package/lib/features/permissions/useRoleMappings.js +87 -0
- package/lib/features/permissions/useRoleMappings.js.map +1 -0
- package/lib/features/store/collections/SelectCollection.js +1 -1
- package/lib/features/store/collections/SelectCollection.js.map +1 -1
- package/lib/features/store/objects/DocumentPreviewPanel.d.ts.map +1 -1
- package/lib/features/store/objects/DocumentPreviewPanel.js +9 -9
- package/lib/features/store/objects/DocumentPreviewPanel.js.map +1 -1
- package/lib/features/store/objects/DocumentTable.js +1 -1
- package/lib/features/store/objects/DocumentTable.js.map +1 -1
- package/lib/features/store/objects/components/DocumentIcon.js +2 -2
- package/lib/features/store/objects/components/DocumentIcon.js.map +1 -1
- package/lib/features/store/objects/components/DocumentInput.js +1 -1
- package/lib/features/store/objects/components/DocumentInput.js.map +1 -1
- package/lib/features/store/objects/components/PropertiesEditorModal.js +1 -1
- package/lib/features/store/objects/components/PropertiesEditorModal.js.map +1 -1
- package/lib/features/store/objects/components/SaveVersionConfirmModal.js +1 -1
- package/lib/features/store/objects/components/SaveVersionConfirmModal.js.map +1 -1
- package/lib/features/store/objects/layout/documentLayout.d.ts.map +1 -1
- package/lib/features/store/objects/layout/documentLayout.js +2 -2
- package/lib/features/store/objects/layout/documentLayout.js.map +1 -1
- package/lib/features/store/objects/selection/SelectionActions.js +1 -1
- package/lib/features/store/objects/selection/SelectionActions.js.map +1 -1
- package/lib/features/store/types/IntakePolicyEditor.d.ts +10 -1
- package/lib/features/store/types/IntakePolicyEditor.d.ts.map +1 -1
- package/lib/features/store/types/IntakePolicyEditor.js +29 -19
- package/lib/features/store/types/IntakePolicyEditor.js.map +1 -1
- package/lib/features/store/types/IntakePolicyForm.d.ts +1 -1
- package/lib/features/store/types/IntakePolicyForm.d.ts.map +1 -1
- package/lib/features/store/types/IntakePolicyForm.js +5 -3
- package/lib/features/store/types/IntakePolicyForm.js.map +1 -1
- package/lib/features/store/types/SelectContentTypeModal.js +1 -1
- package/lib/features/store/types/SelectContentTypeModal.js.map +1 -1
- package/lib/features/user/UserAvatar.js +2 -2
- package/lib/features/user/UserAvatar.js.map +1 -1
- package/lib/features/user/UserInfo.d.ts.map +1 -1
- package/lib/features/user/UserInfo.js +7 -7
- package/lib/features/user/UserInfo.js.map +1 -1
- package/lib/features/utils/index.d.ts +1 -0
- package/lib/features/utils/index.d.ts.map +1 -1
- package/lib/features/utils/index.js +1 -0
- package/lib/features/utils/index.js.map +1 -1
- package/lib/features/utils/interaction.d.ts +55 -0
- package/lib/features/utils/interaction.d.ts.map +1 -0
- package/lib/features/utils/interaction.js +77 -0
- package/lib/features/utils/interaction.js.map +1 -0
- package/lib/features/views/ViewResults.js +2 -2
- package/lib/features/views/ViewResults.js.map +1 -1
- package/lib/i18n/locales/ar.json +7 -1
- package/lib/i18n/locales/de.json +7 -1
- package/lib/i18n/locales/en.json +7 -1
- package/lib/i18n/locales/es.json +7 -1
- package/lib/i18n/locales/fr.json +7 -1
- package/lib/i18n/locales/it.json +7 -1
- package/lib/i18n/locales/ja.json +7 -1
- package/lib/i18n/locales/ko.json +7 -1
- package/lib/i18n/locales/pt.json +7 -1
- package/lib/i18n/locales/ru.json +7 -1
- package/lib/i18n/locales/tr.json +7 -1
- package/lib/i18n/locales/zh-TW.json +7 -1
- package/lib/i18n/locales/zh.json +7 -1
- package/lib/layout/FullHeightLayout.js +2 -2
- package/lib/layout/FullHeightLayout.js.map +1 -1
- package/lib/layout/Navbar.js +4 -4
- package/lib/layout/Navbar.js.map +1 -1
- package/lib/layout/Sidebar.js +1 -1
- package/lib/layout/Sidebar.js.map +1 -1
- package/lib/session/UserSessionProvider.d.ts.map +1 -1
- package/lib/session/UserSessionProvider.js +2 -13
- package/lib/session/UserSessionProvider.js.map +1 -1
- package/lib/session/auth/authState.d.ts +13 -0
- package/lib/session/auth/authState.d.ts.map +1 -0
- package/lib/session/auth/authState.js +37 -0
- package/lib/session/auth/authState.js.map +1 -0
- package/lib/session/auth/domainRouting.d.ts +39 -0
- package/lib/session/auth/domainRouting.d.ts.map +1 -1
- package/lib/session/auth/domainRouting.js +85 -0
- package/lib/session/auth/domainRouting.js.map +1 -1
- package/lib/session/auth/useAuthState.d.ts +4 -7
- package/lib/session/auth/useAuthState.d.ts.map +1 -1
- package/lib/session/auth/useAuthState.js +5 -41
- package/lib/session/auth/useAuthState.js.map +1 -1
- package/lib/session/index.d.ts +1 -0
- package/lib/session/index.d.ts.map +1 -1
- package/lib/session/index.js +2 -0
- package/lib/session/index.js.map +1 -1
- package/lib/shell/SplashScreen.d.ts +1 -1
- package/lib/shell/SplashScreen.d.ts.map +1 -1
- package/lib/shell/SplashScreen.js +6 -2
- package/lib/shell/SplashScreen.js.map +1 -1
- package/lib/shell/VertesiaShell.js +1 -1
- package/lib/shell/VertesiaShell.js.map +1 -1
- package/lib/shell/apps/AppProjectSelector.js +1 -1
- package/lib/shell/apps/AppProjectSelector.js.map +1 -1
- package/lib/shell/apps/StandaloneApp.js +2 -2
- package/lib/shell/apps/StandaloneApp.js.map +1 -1
- package/lib/shell/login/SignInPrimitives.js +2 -2
- package/lib/shell/login/SignInPrimitives.js.map +1 -1
- package/lib/shell/login/SigninScreen.js +1 -1
- package/lib/shell/login/SigninScreen.js.map +1 -1
- package/lib/shell/login/SignupForm.js +1 -1
- package/lib/shell/login/SignupForm.js.map +1 -1
- package/lib/shell/login/TerminalLogin.js +2 -2
- package/lib/shell/login/TerminalLogin.js.map +1 -1
- package/lib/shell/login/UserInfo.d.ts.map +1 -1
- package/lib/shell/login/UserInfo.js +1 -1
- package/lib/shell/login/UserInfo.js.map +1 -1
- package/lib/shell/login/UserSessionMenu.js +1 -1
- package/lib/shell/login/UserSessionMenu.js.map +1 -1
- package/lib/vertesia-ui-core.js +7 -7
- package/lib/vertesia-ui-core.js.map +1 -1
- package/lib/vertesia-ui-features.js +179 -182
- package/lib/vertesia-ui-features.js.map +1 -1
- package/lib/vertesia-ui-i18n.BfN7iOHb.chunk.js +5 -0
- package/lib/vertesia-ui-i18n.BfN7iOHb.chunk.js.map +1 -0
- package/lib/vertesia-ui-i18n.BjH2zEZw.chunk.js +5 -0
- package/lib/vertesia-ui-i18n.BjH2zEZw.chunk.js.map +1 -0
- package/lib/vertesia-ui-i18n.BjSwAZXl.chunk.js +5 -0
- package/lib/vertesia-ui-i18n.BjSwAZXl.chunk.js.map +1 -0
- package/lib/vertesia-ui-i18n.C7PUm5Au.chunk.js +5 -0
- package/lib/vertesia-ui-i18n.C7PUm5Au.chunk.js.map +1 -0
- package/lib/vertesia-ui-i18n.CF_1mUS5.chunk.js +5 -0
- package/lib/vertesia-ui-i18n.CF_1mUS5.chunk.js.map +1 -0
- package/lib/vertesia-ui-i18n.ChfUl3_-.chunk.js +5 -0
- package/lib/vertesia-ui-i18n.ChfUl3_-.chunk.js.map +1 -0
- package/lib/vertesia-ui-i18n.D-Sk-5d1.chunk.js +5 -0
- package/lib/vertesia-ui-i18n.D-Sk-5d1.chunk.js.map +1 -0
- package/lib/vertesia-ui-i18n.D4rnu1_S.chunk.js +5 -0
- package/lib/vertesia-ui-i18n.D4rnu1_S.chunk.js.map +1 -0
- package/lib/vertesia-ui-i18n.DDf0-laK.chunk.js +5 -0
- package/lib/vertesia-ui-i18n.DDf0-laK.chunk.js.map +1 -0
- package/lib/vertesia-ui-i18n.DN79y06J.chunk.js +5 -0
- package/lib/vertesia-ui-i18n.DN79y06J.chunk.js.map +1 -0
- package/lib/vertesia-ui-i18n.DWLIciYQ.chunk.js +5 -0
- package/lib/vertesia-ui-i18n.DWLIciYQ.chunk.js.map +1 -0
- package/lib/vertesia-ui-i18n.DvF_YaAJ.chunk.js +5 -0
- package/lib/vertesia-ui-i18n.DvF_YaAJ.chunk.js.map +1 -0
- package/lib/vertesia-ui-i18n.js +2 -2
- package/lib/vertesia-ui-layout.js +1 -1
- package/lib/vertesia-ui-layout.js.map +1 -1
- package/lib/vertesia-ui-rich-text.js +24 -24
- package/lib/vertesia-ui-rich-text.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 +3 -3
- package/lib/vertesia-ui-shell.js.map +1 -1
- package/lib/vertesia-ui-widgets.js +54 -54
- package/lib/vertesia-ui-widgets.js.map +1 -1
- package/lib/widgets/Progress.js +1 -1
- package/lib/widgets/Progress.js.map +1 -1
- package/lib/widgets/form/Form.js +2 -2
- package/lib/widgets/form/Form.js.map +1 -1
- package/lib/widgets/form/fields.js +2 -2
- package/lib/widgets/form/fields.js.map +1 -1
- package/lib/widgets/json-view/JSONView.js +1 -1
- package/lib/widgets/json-view/JSONView.js.map +1 -1
- package/lib/widgets/markdown/MermaidDiagram.js +1 -1
- package/lib/widgets/markdown/MermaidDiagram.js.map +1 -1
- package/lib/widgets/markdown/remarkDirectiveHandler.d.ts +7 -2
- package/lib/widgets/markdown/remarkDirectiveHandler.d.ts.map +1 -1
- package/lib/widgets/markdown/remarkDirectiveHandler.js +19 -4
- package/lib/widgets/markdown/remarkDirectiveHandler.js.map +1 -1
- package/lib/widgets/monacoEditor/MonacoEditor.d.ts.map +1 -1
- package/lib/widgets/monacoEditor/MonacoEditor.js +4 -2
- package/lib/widgets/monacoEditor/MonacoEditor.js.map +1 -1
- package/lib/widgets/monacoEditor/index.d.ts +1 -0
- package/lib/widgets/monacoEditor/index.d.ts.map +1 -1
- package/lib/widgets/monacoEditor/index.js +1 -0
- package/lib/widgets/monacoEditor/index.js.map +1 -1
- package/lib/widgets/monacoEditor/loadMonaco.d.ts +45 -0
- package/lib/widgets/monacoEditor/loadMonaco.d.ts.map +1 -0
- package/lib/widgets/monacoEditor/loadMonaco.js +62 -0
- package/lib/widgets/monacoEditor/loadMonaco.js.map +1 -0
- package/lib/widgets/properties/PropertiesView.js +1 -1
- package/lib/widgets/properties/PropertiesView.js.map +1 -1
- package/lib/widgets/schema-editor/editor/Editable.js +2 -2
- package/lib/widgets/schema-editor/editor/Editable.js.map +1 -1
- package/lib/widgets/schema-editor/editor/PropertyEditor.js +1 -1
- package/lib/widgets/schema-editor/editor/PropertyEditor.js.map +1 -1
- package/lib/widgets/schema-editor/editor/SchemaEditor.js +2 -2
- package/lib/widgets/schema-editor/editor/SchemaEditor.js.map +1 -1
- package/lib/widgets/upload/DropZone.js +1 -1
- package/lib/widgets/upload/DropZone.js.map +1 -1
- package/lib/widgets/upload/UploadResultCategory.d.ts +1 -1
- package/lib/widgets/upload/UploadResultCategory.d.ts.map +1 -1
- package/lib/widgets/upload/UploadResultCategory.js +3 -3
- package/lib/widgets/upload/UploadResultCategory.js.map +1 -1
- package/lib/widgets/upload/UploadSummary.js +1 -1
- package/lib/widgets/upload/UploadSummary.js.map +1 -1
- package/lib/widgets/xml-viewer/components/XMLViewer.d.ts.map +1 -1
- package/lib/widgets/xml-viewer/components/XMLViewer.js +7 -3
- package/lib/widgets/xml-viewer/components/XMLViewer.js.map +1 -1
- package/lib/widgets/xml-viewer/hooks/useCollapsible.d.ts +1 -1
- package/lib/widgets/xml-viewer/hooks/useXMLViewer.d.ts +11 -13
- package/lib/widgets/xml-viewer/hooks/useXMLViewer.d.ts.map +1 -1
- package/lib/widgets/xml-viewer/hooks/useXMLViewer.js +41 -14
- package/lib/widgets/xml-viewer/hooks/useXMLViewer.js.map +1 -1
- package/package.json +7 -7
- package/src/__tests__/contrast.test.ts +1 -0
- package/src/core/components/Avatar.tsx +3 -3
- package/src/core/components/ComboBox.tsx +1 -1
- package/src/core/components/FileUpload.tsx +4 -4
- package/src/core/components/Link.tsx +1 -1
- package/src/core/components/SelectList.tsx +1 -1
- package/src/core/components/SidePanel.tsx +1 -1
- package/src/core/components/Spinner.tsx +1 -1
- package/src/core/components/TagsInput.tsx +8 -8
- package/src/core/components/shadcn/MessageBox.tsx +1 -1
- package/src/core/components/shadcn/button.tsx +1 -1
- package/src/core/components/shadcn/card.tsx +1 -3
- package/src/core/components/shadcn/command.tsx +5 -5
- package/src/core/components/shadcn/filters/DynamicLabel.tsx +1 -1
- package/src/core/components/shadcn/filters/comboBox/DateCombobox.tsx +3 -3
- package/src/core/components/shadcn/input.tsx +3 -3
- package/src/core/components/shadcn/modal/ConfirmModal.tsx +3 -3
- package/src/core/components/shadcn/modal/dialog.tsx +2 -4
- package/src/core/components/shadcn/overflowTabs.tsx +2 -2
- package/src/core/components/shadcn/popover.tsx +1 -1
- package/src/core/components/shadcn/radioGroup.tsx +5 -7
- package/src/core/components/shadcn/selectBox.tsx +1 -1
- package/src/core/components/shadcn/tabs.tsx +4 -2
- package/src/core/components/styles.ts +1 -1
- package/src/core/components/table/index.tsx +1 -1
- package/src/core/hooks/useFetch.test.ts +20 -0
- package/src/core/hooks/useFetch.ts +2 -0
- package/src/css/base.css +1 -1
- package/src/css/color.css +4 -0
- package/src/css/theme.css +1 -0
- package/src/css/typography.css +2 -2
- package/src/features/activity-doc/ActivityDoc.tsx +11 -11
- package/src/features/agent/chat/AgentChart.tsx +1 -1
- package/src/features/agent/chat/AskUserWidget.tsx +19 -23
- package/src/features/agent/chat/JumpingDots.tsx +3 -3
- package/src/features/agent/chat/ModernAgentConversation.tsx +3 -3
- package/src/features/agent/chat/ModernAgentOutput/AllMessagesMixed.test.tsx +60 -1
- package/src/features/agent/chat/ModernAgentOutput/AllMessagesMixed.tsx +44 -24
- package/src/features/agent/chat/ModernAgentOutput/BatchProgressPanel.tsx +12 -12
- package/src/features/agent/chat/ModernAgentOutput/Header.tsx +1 -1
- package/src/features/agent/chat/ModernAgentOutput/InlineSlideInPanel.tsx +4 -4
- package/src/features/agent/chat/ModernAgentOutput/MessageInput.tsx +2 -2
- package/src/features/agent/chat/ModernAgentOutput/MessageItem.tsx +7 -12
- package/src/features/agent/chat/ModernAgentOutput/MessagesContainer.tsx +1 -1
- package/src/features/agent/chat/ModernAgentOutput/PlanPanel.tsx +16 -22
- package/src/features/agent/chat/ModernAgentOutput/SlideInPanel.tsx +4 -4
- package/src/features/agent/chat/ModernAgentOutput/SlidingMessages.tsx +2 -4
- package/src/features/agent/chat/ModernAgentOutput/SlidingPlanPanel.tsx +21 -21
- package/src/features/agent/chat/ModernAgentOutput/StreamingMessage.tsx +4 -4
- package/src/features/agent/chat/ModernAgentOutput/SummaryConversation.ts +16 -1
- package/src/features/agent/chat/ModernAgentOutput/ToolCallGroup.tsx +19 -40
- package/src/features/agent/chat/ModernAgentOutput/requestInputMessages.test.ts +41 -0
- package/src/features/agent/chat/ModernAgentOutput/requestInputMessages.ts +19 -0
- package/src/features/agent/chat/ModernAgentOutput/utils.test.ts +93 -0
- package/src/features/agent/chat/SlidingThinkingIndicator.tsx +5 -2
- package/src/features/agent/chat/VegaLiteChart.tsx +6 -2
- package/src/features/errors/RowErrorBoundary.tsx +1 -1
- package/src/features/facets/AgentRunnerFacetsNav.tsx +1 -1
- package/src/features/facets/utils/VInteractionFacet.tsx +22 -34
- package/src/features/facets/utils/VUserFacet.tsx +1 -1
- package/src/features/layout/GenericPageNavHeader.tsx +9 -1
- package/src/features/layout/NotFoundView.tsx +1 -1
- package/src/features/magic-pdf/AnnotatedImageSlider.tsx +8 -16
- package/src/features/magic-pdf/ExtractedContentView.tsx +4 -4
- package/src/features/magic-pdf/MagicPdfView.tsx +1 -1
- package/src/features/pdf-viewer/PdfPageRenderer.tsx +2 -2
- package/src/features/pdf-viewer/PdfPageSlider.tsx +4 -4
- package/src/features/pdf-viewer/SimplePdfViewer.tsx +1 -1
- package/src/features/permissions/UserPermissionsProvider.test.tsx +172 -0
- package/src/features/permissions/UserPermissionsProvider.tsx +68 -21
- package/src/features/permissions/useRoleMappings.ts +105 -0
- package/src/features/store/collections/SelectCollection.tsx +1 -1
- package/src/features/store/objects/DocumentPreviewPanel.tsx +43 -53
- package/src/features/store/objects/DocumentTable.tsx +2 -2
- package/src/features/store/objects/components/DocumentIcon.tsx +4 -4
- package/src/features/store/objects/components/DocumentInput.tsx +3 -3
- package/src/features/store/objects/components/PropertiesEditorModal.tsx +2 -2
- package/src/features/store/objects/components/SaveVersionConfirmModal.tsx +2 -2
- package/src/features/store/objects/layout/documentLayout.tsx +2 -4
- package/src/features/store/objects/selection/SelectionActions.tsx +1 -1
- package/src/features/store/types/IntakePolicyEditor.tsx +70 -36
- package/src/features/store/types/IntakePolicyForm.tsx +11 -3
- package/src/features/store/types/SelectContentTypeModal.tsx +1 -1
- package/src/features/user/UserAvatar.tsx +3 -3
- package/src/features/user/UserInfo.tsx +11 -16
- package/src/features/utils/index.ts +1 -0
- package/src/features/utils/interaction.test.tsx +93 -0
- package/src/features/utils/interaction.tsx +125 -0
- package/src/features/views/ViewResults.tsx +3 -3
- package/src/i18n/locales/ar.json +7 -1
- package/src/i18n/locales/de.json +7 -1
- package/src/i18n/locales/en.json +7 -1
- package/src/i18n/locales/es.json +7 -1
- package/src/i18n/locales/fr.json +7 -1
- package/src/i18n/locales/it.json +7 -1
- package/src/i18n/locales/ja.json +7 -1
- package/src/i18n/locales/ko.json +7 -1
- package/src/i18n/locales/pt.json +7 -1
- package/src/i18n/locales/ru.json +7 -1
- package/src/i18n/locales/tr.json +7 -1
- package/src/i18n/locales/zh-TW.json +7 -1
- package/src/i18n/locales/zh.json +7 -1
- package/src/layout/FullHeightLayout.tsx +2 -2
- package/src/layout/Navbar.tsx +5 -5
- package/src/layout/Sidebar.tsx +1 -1
- package/src/session/UserSessionProvider.tsx +2 -15
- package/src/session/auth/authState.test.ts +35 -0
- package/src/session/auth/authState.ts +42 -0
- package/src/session/auth/domainRouting.test.ts +169 -1
- package/src/session/auth/domainRouting.ts +89 -0
- package/src/session/auth/useAuthState.ts +5 -49
- package/src/session/index.ts +6 -0
- package/src/shell/SplashScreen.test.tsx +22 -0
- package/src/shell/SplashScreen.tsx +6 -2
- package/src/shell/VertesiaShell.tsx +1 -1
- package/src/shell/apps/AppProjectSelector.tsx +1 -1
- package/src/shell/apps/StandaloneApp.tsx +9 -9
- package/src/shell/login/SignInPrimitives.tsx +2 -2
- package/src/shell/login/SigninScreen.tsx +1 -1
- package/src/shell/login/SignupForm.tsx +2 -2
- package/src/shell/login/TerminalLogin.tsx +5 -5
- package/src/shell/login/UserInfo.tsx +2 -5
- package/src/shell/login/UserSessionMenu.tsx +2 -2
- package/src/widgets/Progress.tsx +2 -2
- package/src/widgets/form/Form.tsx +4 -4
- package/src/widgets/form/fields.tsx +2 -2
- package/src/widgets/json-view/JSONView.tsx +1 -6
- package/src/widgets/markdown/ArtifactEditingSurface.test.tsx +33 -29
- package/src/widgets/markdown/MarkdownRenderer.test.tsx +52 -0
- package/src/widgets/markdown/MermaidDiagram.tsx +2 -2
- package/src/widgets/markdown/remarkDirectiveHandler.ts +21 -5
- package/src/widgets/monacoEditor/MonacoEditor.tsx +4 -2
- package/src/widgets/monacoEditor/index.ts +1 -0
- package/src/widgets/monacoEditor/loadMonaco.test.ts +63 -0
- package/src/widgets/monacoEditor/loadMonaco.ts +70 -0
- package/src/widgets/properties/PropertiesView.tsx +1 -1
- package/src/widgets/schema-editor/editor/Editable.tsx +2 -2
- package/src/widgets/schema-editor/editor/PropertyEditor.tsx +1 -1
- package/src/widgets/schema-editor/editor/SchemaEditor.tsx +2 -2
- package/src/widgets/upload/DropZone.tsx +1 -1
- package/src/widgets/upload/UploadResultCategory.tsx +7 -7
- package/src/widgets/upload/UploadSummary.tsx +4 -4
- package/src/widgets/xml-viewer/components/XMLViewer.tsx +7 -3
- package/src/widgets/xml-viewer/hooks/useXMLViewer.test.ts +60 -7
- package/src/widgets/xml-viewer/hooks/useXMLViewer.ts +70 -16
- package/lib/vertesia-ui-i18n.3yHWompP.chunk.js +0 -5
- package/lib/vertesia-ui-i18n.3yHWompP.chunk.js.map +0 -1
- package/lib/vertesia-ui-i18n.4XKCcnL0.chunk.js +0 -5
- package/lib/vertesia-ui-i18n.4XKCcnL0.chunk.js.map +0 -1
- package/lib/vertesia-ui-i18n.78KG4J25.chunk.js +0 -5
- package/lib/vertesia-ui-i18n.78KG4J25.chunk.js.map +0 -1
- package/lib/vertesia-ui-i18n.BN06mpp1.chunk.js +0 -5
- package/lib/vertesia-ui-i18n.BN06mpp1.chunk.js.map +0 -1
- package/lib/vertesia-ui-i18n.CSzKLlHJ.chunk.js +0 -5
- package/lib/vertesia-ui-i18n.CSzKLlHJ.chunk.js.map +0 -1
- package/lib/vertesia-ui-i18n.Ccus7aRh.chunk.js +0 -5
- package/lib/vertesia-ui-i18n.Ccus7aRh.chunk.js.map +0 -1
- package/lib/vertesia-ui-i18n.D9j3c6gI.chunk.js +0 -5
- package/lib/vertesia-ui-i18n.D9j3c6gI.chunk.js.map +0 -1
- package/lib/vertesia-ui-i18n.DAUg4rrI.chunk.js +0 -5
- package/lib/vertesia-ui-i18n.DAUg4rrI.chunk.js.map +0 -1
- package/lib/vertesia-ui-i18n.DSxVZKXy.chunk.js +0 -5
- package/lib/vertesia-ui-i18n.DSxVZKXy.chunk.js.map +0 -1
- package/lib/vertesia-ui-i18n.aahVhHvR.chunk.js +0 -5
- package/lib/vertesia-ui-i18n.aahVhHvR.chunk.js.map +0 -1
- package/lib/vertesia-ui-i18n.nZ3xJ26v.chunk.js +0 -5
- package/lib/vertesia-ui-i18n.nZ3xJ26v.chunk.js.map +0 -1
- package/lib/vertesia-ui-i18n.xPYbuFzT.chunk.js +0 -5
- package/lib/vertesia-ui-i18n.xPYbuFzT.chunk.js.map +0 -1
|
@@ -51,7 +51,7 @@ export default function SlidingPlanPanel({ plan, workstreamStatus, isOpen, onClo
|
|
|
51
51
|
<div className="font-medium text-sm">{t('agent.stepByStepPlan')}</div>
|
|
52
52
|
</div>
|
|
53
53
|
|
|
54
|
-
<div className="divide-y divide-
|
|
54
|
+
<div className="divide-y divide-border">
|
|
55
55
|
{plan.plan && plan.plan.length > 0 ? (
|
|
56
56
|
plan.plan.map((task, index) => {
|
|
57
57
|
// Extract task info with null checks
|
|
@@ -68,16 +68,16 @@ export default function SlidingPlanPanel({ plan, workstreamStatus, isOpen, onClo
|
|
|
68
68
|
|
|
69
69
|
// Determine status icon and style
|
|
70
70
|
let StatusIcon = Circle;
|
|
71
|
-
let statusColor = 'text-
|
|
71
|
+
let statusColor = 'text-muted';
|
|
72
72
|
let bgColor = '';
|
|
73
73
|
|
|
74
74
|
if (status === 'in_progress') {
|
|
75
75
|
StatusIcon = Clock;
|
|
76
|
-
statusColor = 'text-
|
|
77
|
-
bgColor = 'bg-
|
|
76
|
+
statusColor = 'text-info';
|
|
77
|
+
bgColor = 'bg-info/50 dark:bg-info/10';
|
|
78
78
|
} else if (status === 'completed') {
|
|
79
79
|
StatusIcon = CheckCircle;
|
|
80
|
-
statusColor = 'text-
|
|
80
|
+
statusColor = 'text-success';
|
|
81
81
|
}
|
|
82
82
|
|
|
83
83
|
return (
|
|
@@ -86,18 +86,18 @@ export default function SlidingPlanPanel({ plan, workstreamStatus, isOpen, onClo
|
|
|
86
86
|
<StatusIcon className="h-4 w-4" />
|
|
87
87
|
</div>
|
|
88
88
|
<div>
|
|
89
|
-
<div className="text-sm text-
|
|
89
|
+
<div className="text-sm text-foreground">{taskGoal}</div>
|
|
90
90
|
<div className="mt-1">
|
|
91
|
-
<span className="inline-flex items-center px-2 py-0.5 rounded text-xs font-medium bg-
|
|
91
|
+
<span className="inline-flex items-center px-2 py-0.5 rounded text-xs font-medium bg-muted text-foreground">
|
|
92
92
|
{taskId}
|
|
93
93
|
</span>
|
|
94
94
|
<span
|
|
95
95
|
className={`ms-2 text-xs ${
|
|
96
96
|
status === 'completed'
|
|
97
|
-
? 'text-
|
|
97
|
+
? 'text-success'
|
|
98
98
|
: status === 'in_progress'
|
|
99
|
-
? 'text-
|
|
100
|
-
: 'text-
|
|
99
|
+
? 'text-info'
|
|
100
|
+
: 'text-muted'
|
|
101
101
|
}`}
|
|
102
102
|
>
|
|
103
103
|
{status === 'completed'
|
|
@@ -112,8 +112,8 @@ export default function SlidingPlanPanel({ plan, workstreamStatus, isOpen, onClo
|
|
|
112
112
|
);
|
|
113
113
|
})
|
|
114
114
|
) : (
|
|
115
|
-
<div className="p-4 text-center text-
|
|
116
|
-
<AlertCircle className="h-5 w-5 mx-auto mb-2 text-
|
|
115
|
+
<div className="p-4 text-center text-muted italic">
|
|
116
|
+
<AlertCircle className="h-5 w-5 mx-auto mb-2 text-attention" />
|
|
117
117
|
<p>{t('agent.noPlanDetected')}</p>
|
|
118
118
|
<p className="text-xs mt-1">{t('agent.plansWillAppear')}</p>
|
|
119
119
|
</div>
|
|
@@ -123,8 +123,8 @@ export default function SlidingPlanPanel({ plan, workstreamStatus, isOpen, onClo
|
|
|
123
123
|
|
|
124
124
|
{/* Workstream Status Summary */}
|
|
125
125
|
{workstreamStatus.size > 1 && (
|
|
126
|
-
<div className="mt-4 rounded-md border border-
|
|
127
|
-
<div className="p-3 border-b border-
|
|
126
|
+
<div className="mt-4 rounded-md border border-border">
|
|
127
|
+
<div className="p-3 border-b border-border bg-muted">
|
|
128
128
|
<div className="font-medium text-sm">{t('agent.workstreams')}</div>
|
|
129
129
|
</div>
|
|
130
130
|
<div className="p-3">
|
|
@@ -147,19 +147,19 @@ export default function SlidingPlanPanel({ plan, workstreamStatus, isOpen, onClo
|
|
|
147
147
|
})
|
|
148
148
|
.map(([id, status]) => {
|
|
149
149
|
let StatusIcon = Circle;
|
|
150
|
-
let statusColor = 'text-
|
|
151
|
-
let statusBg = 'bg-
|
|
150
|
+
let statusColor = 'text-muted';
|
|
151
|
+
let statusBg = 'bg-muted';
|
|
152
152
|
let statusText = t('agent.pending');
|
|
153
153
|
|
|
154
154
|
if (status === 'in_progress') {
|
|
155
155
|
StatusIcon = Clock;
|
|
156
|
-
statusColor = 'text-
|
|
157
|
-
statusBg = 'bg-
|
|
156
|
+
statusColor = 'text-info';
|
|
157
|
+
statusBg = 'bg-info';
|
|
158
158
|
statusText = t('agent.inProgress');
|
|
159
159
|
} else if (status === 'completed') {
|
|
160
160
|
StatusIcon = CheckCircle;
|
|
161
|
-
statusColor = 'text-
|
|
162
|
-
statusBg = 'bg-
|
|
161
|
+
statusColor = 'text-success';
|
|
162
|
+
statusBg = 'bg-success';
|
|
163
163
|
statusText = t('agent.completed');
|
|
164
164
|
}
|
|
165
165
|
|
|
@@ -172,7 +172,7 @@ export default function SlidingPlanPanel({ plan, workstreamStatus, isOpen, onClo
|
|
|
172
172
|
<StatusIcon className="h-4 w-4" />
|
|
173
173
|
</div>
|
|
174
174
|
<div className="flex-1">
|
|
175
|
-
<span className="text-sm font-medium text-
|
|
175
|
+
<span className="text-sm font-medium text-foreground">
|
|
176
176
|
{displayId}
|
|
177
177
|
</span>
|
|
178
178
|
</div>
|
|
@@ -273,7 +273,7 @@ function StreamingMessageComponent({
|
|
|
273
273
|
{/* Card wrapper matching MessageItem structure */}
|
|
274
274
|
<div
|
|
275
275
|
className={cn(
|
|
276
|
-
'border-s-4 bg-white dark:bg-
|
|
276
|
+
'border-s-4 bg-white dark:bg-muted mb-4 border-s-done w-full max-w-full overflow-hidden',
|
|
277
277
|
cardClassName,
|
|
278
278
|
)}
|
|
279
279
|
data-workstream-id={workstreamId}
|
|
@@ -283,9 +283,9 @@ function StreamingMessageComponent({
|
|
|
283
283
|
<div className="flex items-center gap-1.5">
|
|
284
284
|
<div className={cn('animate-fadeIn', iconClassName)}>
|
|
285
285
|
{isTyping ? (
|
|
286
|
-
<span className="size-2 rounded-full bg-
|
|
286
|
+
<span className="size-2 rounded-full bg-primary animate-pulse inline-block" />
|
|
287
287
|
) : (
|
|
288
|
-
<Bot className="size-4 text-
|
|
288
|
+
<Bot className="size-4 text-done" />
|
|
289
289
|
)}
|
|
290
290
|
</div>
|
|
291
291
|
<span className={cn('text-xs font-medium text-muted', senderClassName)}>Agent</span>
|
|
@@ -299,7 +299,7 @@ function StreamingMessageComponent({
|
|
|
299
299
|
variant="ghost"
|
|
300
300
|
size="xs"
|
|
301
301
|
onClick={copyToClipboard}
|
|
302
|
-
className="size-6 p-0 hover:bg-
|
|
302
|
+
className="size-6 p-0 hover:bg-muted"
|
|
303
303
|
title={t('agent.copyMessage')}
|
|
304
304
|
>
|
|
305
305
|
<CopyIcon className="size-3" />
|
|
@@ -133,7 +133,22 @@ export function isSummaryAssistantProseMessage(message: AgentMessage): boolean {
|
|
|
133
133
|
|
|
134
134
|
if (message.type === AgentMessageType.ANSWER) return true;
|
|
135
135
|
|
|
136
|
-
if (isToolPreambleMessage(message))
|
|
136
|
+
if (isToolPreambleMessage(message)) {
|
|
137
|
+
// Text accompanying ask_user can be the draft the question asks the user to review.
|
|
138
|
+
// Keep it visible for both persisted messages and reconstructed streaming messages.
|
|
139
|
+
return (
|
|
140
|
+
message.details?.display_role === 'tool_preamble' &&
|
|
141
|
+
(message.details.tool === 'ask_user' ||
|
|
142
|
+
(Array.isArray(message.details.tools) &&
|
|
143
|
+
message.details.tools.some((tool: unknown) => {
|
|
144
|
+
if (typeof tool === 'string') return tool === 'ask_user';
|
|
145
|
+
if (!tool || typeof tool !== 'object') return false;
|
|
146
|
+
return (
|
|
147
|
+
('name' in tool && tool.name === 'ask_user') || ('tool' in tool && tool.tool === 'ask_user')
|
|
148
|
+
);
|
|
149
|
+
})))
|
|
150
|
+
);
|
|
151
|
+
}
|
|
137
152
|
|
|
138
153
|
// Streamed thoughts without tool metadata are model-visible prose. They remain
|
|
139
154
|
// in the conversation unless buildSummaryDisplayMessages classifies them as
|
|
@@ -117,13 +117,13 @@ function areMessagesRenderEqual(prevMessage: AgentMessage, nextMessage: AgentMes
|
|
|
117
117
|
function statusBadgeClass(status?: ToolExecutionStatus): string {
|
|
118
118
|
switch (status) {
|
|
119
119
|
case 'completed':
|
|
120
|
-
return 'bg-
|
|
120
|
+
return 'bg-success text-success border-success';
|
|
121
121
|
case 'running':
|
|
122
|
-
return 'bg-
|
|
122
|
+
return 'bg-info text-info border-info';
|
|
123
123
|
case 'error':
|
|
124
|
-
return 'bg-
|
|
124
|
+
return 'bg-destructive text-destructive border-destructive';
|
|
125
125
|
case 'warning':
|
|
126
|
-
return 'bg-
|
|
126
|
+
return 'bg-attention text-attention border-attention';
|
|
127
127
|
default:
|
|
128
128
|
return '';
|
|
129
129
|
}
|
|
@@ -320,10 +320,9 @@ const getFilesFromDetails = (
|
|
|
320
320
|
return Array.isArray(files) ? files : undefined;
|
|
321
321
|
};
|
|
322
322
|
|
|
323
|
-
const TOOL_BADGE_CLASS =
|
|
324
|
-
'text-[10px] px-1.5 py-0.5 rounded-md bg-purple-50 dark:bg-purple-900/30 text-purple-700 dark:text-purple-300 border border-purple-200 dark:border-purple-800 font-medium';
|
|
323
|
+
const TOOL_BADGE_CLASS = 'text-[10px] px-1.5 py-0.5 rounded-md bg-done text-done border border-done font-medium';
|
|
325
324
|
const ASSISTANT_BADGE_CLASS =
|
|
326
|
-
'text-[10px] px-1.5 py-0.5 rounded-md bg-
|
|
325
|
+
'text-[10px] px-1.5 py-0.5 rounded-md bg-muted text-foreground border border-border font-medium';
|
|
327
326
|
|
|
328
327
|
const isToolPreambleMessage = (message: AgentMessage): boolean => {
|
|
329
328
|
const details = message.details as { display_role?: string } | undefined;
|
|
@@ -452,14 +451,14 @@ function ToolCallItem({ message, isExpanded, onToggle, artifactRunId, classNames
|
|
|
452
451
|
};
|
|
453
452
|
|
|
454
453
|
return (
|
|
455
|
-
<div className={cn('border-b border-
|
|
454
|
+
<div className={cn('border-b border-border last:border-b-0', classNames.itemClassName)}>
|
|
456
455
|
{/* Collapsed header - always visible */}
|
|
457
456
|
{/* biome-ignore lint/a11y/useSemanticElements: header contains nested Buttons (copy); button-in-button is invalid HTML so role="button" on a div is the pragmatic choice. */}
|
|
458
457
|
<div
|
|
459
458
|
role="button"
|
|
460
459
|
tabIndex={0}
|
|
461
460
|
className={cn(
|
|
462
|
-
'flex items-start justify-between px-3 py-2 cursor-pointer hover:bg-
|
|
461
|
+
'flex items-start justify-between px-3 py-2 cursor-pointer hover:bg-muted transition-colors',
|
|
463
462
|
classNames.itemHeaderClassName,
|
|
464
463
|
)}
|
|
465
464
|
onClick={onToggle}
|
|
@@ -518,12 +517,7 @@ function ToolCallItem({ message, isExpanded, onToggle, artifactRunId, classNames
|
|
|
518
517
|
);
|
|
519
518
|
const progressDetails = getProgressDetails(details as Record<string, unknown> | undefined);
|
|
520
519
|
return (
|
|
521
|
-
<div
|
|
522
|
-
className={cn(
|
|
523
|
-
'px-4 py-2 bg-gray-50/50 dark:bg-gray-800/30',
|
|
524
|
-
classNames.itemContentClassName,
|
|
525
|
-
)}
|
|
526
|
-
>
|
|
520
|
+
<div className={cn('px-4 py-2 bg-muted/50 dark:bg-muted/30', classNames.itemContentClassName)}>
|
|
527
521
|
{/* Badges row: tool name + status + timestamp */}
|
|
528
522
|
<div className="flex items-center gap-2 mb-2 flex-wrap">
|
|
529
523
|
<span className={cn(badgeClass, classNames.toolBadgeClassName)}>{toolName}</span>
|
|
@@ -769,7 +763,7 @@ function GroupImageDisplay({ messages, artifactRunId }: { messages: AgentMessage
|
|
|
769
763
|
if (resolvedImages.length === 0) return null;
|
|
770
764
|
|
|
771
765
|
return (
|
|
772
|
-
<div className="px-3 py-1.5 border-b border-
|
|
766
|
+
<div className="px-3 py-1.5 border-b border-border">
|
|
773
767
|
<FileDisplay files={resolvedImages} />
|
|
774
768
|
</div>
|
|
775
769
|
);
|
|
@@ -829,7 +823,7 @@ function ToolCallGroupComponent({
|
|
|
829
823
|
return <PulsatingCircle size="sm" color="blue" />;
|
|
830
824
|
}
|
|
831
825
|
if (toolStatus === 'running') {
|
|
832
|
-
return <span className="size-2 rounded-full bg-
|
|
826
|
+
return <span className="size-2 rounded-full bg-primary inline-block" />;
|
|
833
827
|
}
|
|
834
828
|
if (toolStatus === 'completed') {
|
|
835
829
|
return <CheckCircle className="size-4 text-success" />;
|
|
@@ -840,7 +834,7 @@ function ToolCallGroupComponent({
|
|
|
840
834
|
if (toolStatus === 'warning') {
|
|
841
835
|
return <AlertTriangle className="size-4 text-attention" />;
|
|
842
836
|
}
|
|
843
|
-
return <Bot className="size-4 text-
|
|
837
|
+
return <Bot className="size-4 text-done" />;
|
|
844
838
|
};
|
|
845
839
|
|
|
846
840
|
// Get border color based on status
|
|
@@ -848,7 +842,7 @@ function ToolCallGroupComponent({
|
|
|
848
842
|
if (toolStatus === 'completed') return 'border-s-success';
|
|
849
843
|
if (toolStatus === 'error') return 'border-s-destructive';
|
|
850
844
|
if (toolStatus === 'warning') return 'border-s-attention';
|
|
851
|
-
return 'border-s-
|
|
845
|
+
return 'border-s-done';
|
|
852
846
|
};
|
|
853
847
|
|
|
854
848
|
// Animate new messages when they're added
|
|
@@ -914,9 +908,7 @@ function ToolCallGroupComponent({
|
|
|
914
908
|
};
|
|
915
909
|
|
|
916
910
|
return (
|
|
917
|
-
<div
|
|
918
|
-
className={cn('border-s-4 overflow-hidden bg-white dark:bg-gray-900 mb-4', getBorderColor(), rootClassName)}
|
|
919
|
-
>
|
|
911
|
+
<div className={cn('border-s-4 overflow-hidden bg-white dark:bg-muted mb-4', getBorderColor(), rootClassName)}>
|
|
920
912
|
{/* Compact header */}
|
|
921
913
|
{/* biome-ignore lint/a11y/useSemanticElements: header contains nested Buttons; button-in-button is invalid HTML so role="button" on a div is the pragmatic choice. */}
|
|
922
914
|
<div
|
|
@@ -924,7 +916,7 @@ function ToolCallGroupComponent({
|
|
|
924
916
|
tabIndex={0}
|
|
925
917
|
aria-expanded={!isCollapsed}
|
|
926
918
|
className={cn(
|
|
927
|
-
'flex items-center justify-between px-4 py-1.5 cursor-pointer hover:bg-
|
|
919
|
+
'flex items-center justify-between px-4 py-1.5 cursor-pointer hover:bg-muted transition-colors',
|
|
928
920
|
headerClassName,
|
|
929
921
|
)}
|
|
930
922
|
onClick={() => setIsCollapsed(!isCollapsed)}
|
|
@@ -941,12 +933,7 @@ function ToolCallGroupComponent({
|
|
|
941
933
|
) : (
|
|
942
934
|
<>
|
|
943
935
|
<span className={cn('text-xs font-medium text-muted', senderClassName)}>Agent</span>
|
|
944
|
-
<span
|
|
945
|
-
className={cn(
|
|
946
|
-
'text-xs text-purple-600 dark:text-purple-400 font-medium',
|
|
947
|
-
toolSummaryClassName,
|
|
948
|
-
)}
|
|
949
|
-
>
|
|
936
|
+
<span className={cn('text-xs text-done font-medium', toolSummaryClassName)}>
|
|
950
937
|
{toolSummary}
|
|
951
938
|
</span>
|
|
952
939
|
</>
|
|
@@ -960,12 +947,7 @@ function ToolCallGroupComponent({
|
|
|
960
947
|
|
|
961
948
|
<div className="flex items-center gap-1 flex-shrink-0">
|
|
962
949
|
{preambleText && (
|
|
963
|
-
<span
|
|
964
|
-
className={cn(
|
|
965
|
-
'text-[10px] text-purple-600 dark:text-purple-400 font-medium',
|
|
966
|
-
toolSummaryClassName,
|
|
967
|
-
)}
|
|
968
|
-
>
|
|
950
|
+
<span className={cn('text-[10px] text-done font-medium', toolSummaryClassName)}>
|
|
969
951
|
{toolSummary}
|
|
970
952
|
</span>
|
|
971
953
|
)}
|
|
@@ -1016,10 +998,7 @@ function ToolCallGroupComponent({
|
|
|
1016
998
|
return (
|
|
1017
999
|
<div
|
|
1018
1000
|
key={itemKey}
|
|
1019
|
-
className={cn(
|
|
1020
|
-
'border-b border-gray-100 dark:border-gray-800 last:border-b-0',
|
|
1021
|
-
itemClassName,
|
|
1022
|
-
)}
|
|
1001
|
+
className={cn('border-b border-border last:border-b-0', itemClassName)}
|
|
1023
1002
|
style={{
|
|
1024
1003
|
opacity: isAnimating ? 0 : 1,
|
|
1025
1004
|
transform: isAnimating ? 'translateX(-10px)' : 'translateX(0)',
|
|
@@ -1036,7 +1015,7 @@ function ToolCallGroupComponent({
|
|
|
1036
1015
|
tabIndex={0}
|
|
1037
1016
|
aria-expanded={isItemExpanded}
|
|
1038
1017
|
className={cn(
|
|
1039
|
-
'flex items-start gap-2 py-1.5 text-xs cursor-pointer hover:bg-
|
|
1018
|
+
'flex items-start gap-2 py-1.5 text-xs cursor-pointer hover:bg-muted',
|
|
1040
1019
|
itemHeaderClassName,
|
|
1041
1020
|
)}
|
|
1042
1021
|
onClick={() => toggleItem(itemKey)}
|
|
@@ -28,6 +28,29 @@ function makeApprovalRequest(): AgentMessage {
|
|
|
28
28
|
} as unknown as AgentMessage;
|
|
29
29
|
}
|
|
30
30
|
|
|
31
|
+
function makeApprovalRequestForToolUse(toolUseId: string): AgentMessage {
|
|
32
|
+
const request = makeApprovalRequest();
|
|
33
|
+
return {
|
|
34
|
+
...request,
|
|
35
|
+
details: { ...(request.details as Record<string, unknown>), request_id: toolUseId },
|
|
36
|
+
} as unknown as AgentMessage;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
function makeApprovalReleasedMessage(toolUseId: string, timestamp: number): AgentMessage {
|
|
40
|
+
return {
|
|
41
|
+
timestamp,
|
|
42
|
+
type: AgentMessageType.UPDATE,
|
|
43
|
+
message: 'Approval reviewer allowed Create a new draft interaction.',
|
|
44
|
+
workstream_id: 'main',
|
|
45
|
+
details: {
|
|
46
|
+
request_id: toolUseId,
|
|
47
|
+
approval_decision: 'auto_approved',
|
|
48
|
+
approval_release_reason: 'reviewer_allowed',
|
|
49
|
+
approval_request: { tool_name: 'create_interaction', approval_key: APPROVAL_KEY },
|
|
50
|
+
},
|
|
51
|
+
} as unknown as AgentMessage;
|
|
52
|
+
}
|
|
53
|
+
|
|
31
54
|
function makeUserAnswer(message: string, metadata?: Record<string, unknown>): AgentMessage {
|
|
32
55
|
return {
|
|
33
56
|
timestamp: 2,
|
|
@@ -164,6 +187,24 @@ describe('request input correlation', () => {
|
|
|
164
187
|
expect(getPendingRequestInputMessage([firstRequest, firstAnswer, secondRequest])).toBe(secondRequest);
|
|
165
188
|
});
|
|
166
189
|
|
|
190
|
+
it('stops asking once the workflow releases the approval without a user answer', () => {
|
|
191
|
+
const request = makeApprovalRequestForToolUse('write-1');
|
|
192
|
+
const released = makeApprovalReleasedMessage('write-1', 3);
|
|
193
|
+
|
|
194
|
+
expect(getPendingRequestInputMessage([request])).toBe(request);
|
|
195
|
+
expect(getPendingRequestInputMessage([request, released])).toBeUndefined();
|
|
196
|
+
});
|
|
197
|
+
|
|
198
|
+
it('keeps asking for a later request that reuses a released approval key', () => {
|
|
199
|
+
// Approval keys are `tool_name:target`, so the same action repeats across turns: a release
|
|
200
|
+
// must resolve the request it answered, not every prompt that shares its key.
|
|
201
|
+
const firstRequest = makeApprovalRequestForToolUse('write-1');
|
|
202
|
+
const released = makeApprovalReleasedMessage('write-1', 3);
|
|
203
|
+
const laterRequest = { ...makeApprovalRequestForToolUse('write-2'), timestamp: 4 };
|
|
204
|
+
|
|
205
|
+
expect(getPendingRequestInputMessage([firstRequest, released, laterRequest])).toBe(laterRequest);
|
|
206
|
+
});
|
|
207
|
+
|
|
167
208
|
it('reads a request id from response metadata', () => {
|
|
168
209
|
expect(
|
|
169
210
|
getRequestInputResponseIdFromMetadata({
|
|
@@ -242,6 +242,12 @@ export function getRequestInputResponseIdFromMetadata(metadata?: Record<string,
|
|
|
242
242
|
return typeof requestId === 'string' && requestId ? requestId : undefined;
|
|
243
243
|
}
|
|
244
244
|
|
|
245
|
+
/**
|
|
246
|
+
* Prefix marking a resolution that belongs to ONE request rather than to every prompt sharing an
|
|
247
|
+
* approval key. Approval keys are `tool_name:target`, so the same action repeats across turns.
|
|
248
|
+
*/
|
|
249
|
+
const RESOLVED_REQUEST_ID_PREFIX = 'request:';
|
|
250
|
+
|
|
245
251
|
export function getResolvedToolApprovalKeys(messages: AgentMessage[]): Set<string> {
|
|
246
252
|
const resolved = new Set<string>();
|
|
247
253
|
|
|
@@ -251,6 +257,17 @@ export function getResolvedToolApprovalKeys(messages: AgentMessage[]): Set<strin
|
|
|
251
257
|
const approvalKey = approvalRequest?.approval_key;
|
|
252
258
|
const decision = details?.approval_decision;
|
|
253
259
|
|
|
260
|
+
// Released without a user answer (approval mode change, or the reviewer allowed it after the
|
|
261
|
+
// run switched to auto_review). Scoped to the released request: a later prompt for the same
|
|
262
|
+
// action still has to be answered, or the run would wait with nothing on screen.
|
|
263
|
+
if (decision === 'auto_approved') {
|
|
264
|
+
const requestId = details?.request_id;
|
|
265
|
+
if (typeof requestId === 'string' && requestId) {
|
|
266
|
+
resolved.add(`${RESOLVED_REQUEST_ID_PREFIX}${requestId}`);
|
|
267
|
+
}
|
|
268
|
+
continue;
|
|
269
|
+
}
|
|
270
|
+
|
|
254
271
|
if (
|
|
255
272
|
typeof approvalKey === 'string' &&
|
|
256
273
|
(decision === 'denied' ||
|
|
@@ -321,6 +338,8 @@ export function isRequestInputResolvedByToolApprovalEvent(
|
|
|
321
338
|
resolvedToolApprovalKeys: Set<string>,
|
|
322
339
|
): boolean {
|
|
323
340
|
if (message.type !== AgentMessageType.REQUEST_INPUT) return false;
|
|
341
|
+
const requestId = getRequestInputId(message);
|
|
342
|
+
if (requestId && resolvedToolApprovalKeys.has(`${RESOLVED_REQUEST_ID_PREFIX}${requestId}`)) return true;
|
|
324
343
|
const approvalKey = getToolApprovalKey(message);
|
|
325
344
|
return approvalKey ? resolvedToolApprovalKeys.has(approvalKey) : false;
|
|
326
345
|
}
|
|
@@ -140,6 +140,99 @@ describe('ModernAgentOutput utils - tool preamble behavior', () => {
|
|
|
140
140
|
});
|
|
141
141
|
});
|
|
142
142
|
|
|
143
|
+
describe('ModernAgentOutput summary - ask_user review content', () => {
|
|
144
|
+
const draft = '## Draft agenda\n9:00 Welcome\n9:15 Platform foundations';
|
|
145
|
+
const tool = makeMessage({
|
|
146
|
+
timestamp: 3000,
|
|
147
|
+
message: 'Waiting for your review...',
|
|
148
|
+
details: {
|
|
149
|
+
tool: 'ask_user',
|
|
150
|
+
tool_status: 'running',
|
|
151
|
+
tool_run_id: 'ask-1',
|
|
152
|
+
activity_group_id: 'review-1',
|
|
153
|
+
},
|
|
154
|
+
});
|
|
155
|
+
const question = makeMessage({
|
|
156
|
+
timestamp: 4000,
|
|
157
|
+
type: AgentMessageType.REQUEST_INPUT,
|
|
158
|
+
message: 'Does this agenda work?',
|
|
159
|
+
details: { tool: 'ask_user' },
|
|
160
|
+
});
|
|
161
|
+
|
|
162
|
+
it.each([false, true])('keeps persisted review prose visible with streamed=%s', (streamed) => {
|
|
163
|
+
const preamble = makeMessage({
|
|
164
|
+
timestamp: 2000,
|
|
165
|
+
message: draft,
|
|
166
|
+
details: {
|
|
167
|
+
event_class: 'activity',
|
|
168
|
+
display_role: 'tool_preamble',
|
|
169
|
+
tools: ['update_plan', 'ask_user'],
|
|
170
|
+
activity_group_id: 'review-1',
|
|
171
|
+
streamed,
|
|
172
|
+
},
|
|
173
|
+
});
|
|
174
|
+
const items = buildSummaryConversationItems([preamble, tool, question], false);
|
|
175
|
+
|
|
176
|
+
expect(items.map((item) => item.type)).toEqual(['message', 'work', 'message']);
|
|
177
|
+
expect(items[0]).toEqual({ type: 'message', message: preamble });
|
|
178
|
+
expect(items[2]).toEqual({ type: 'message', message: question });
|
|
179
|
+
});
|
|
180
|
+
|
|
181
|
+
it.each([
|
|
182
|
+
{ tools: [{ name: 'ask_user' }] },
|
|
183
|
+
{ tools: [{ tool: 'ask_user' }] },
|
|
184
|
+
{ tool: 'ask_user' },
|
|
185
|
+
{ tools: [null, 42, {}, 'search_documents', { name: 'ask_user' }] },
|
|
186
|
+
])('keeps review prose visible for supported tool metadata: %j', (details) => {
|
|
187
|
+
const preamble = makeMessage({
|
|
188
|
+
timestamp: 2000,
|
|
189
|
+
message: draft,
|
|
190
|
+
// Exercise legacy wire shapes outside the current string[] contract.
|
|
191
|
+
details: { display_role: 'tool_preamble', ...details } as unknown as AgentMessage['details'],
|
|
192
|
+
});
|
|
193
|
+
expect(buildSummaryConversationItems([preamble, tool, question], false)[0]).toEqual({
|
|
194
|
+
type: 'message',
|
|
195
|
+
message: preamble,
|
|
196
|
+
});
|
|
197
|
+
});
|
|
198
|
+
|
|
199
|
+
it.each([
|
|
200
|
+
{ display_role: 'tool_preamble', tools: [null, {}, { name: 'search_documents' }] },
|
|
201
|
+
{ tool: 'ask_user', tool_status: 'running' },
|
|
202
|
+
{ tool: 'think' },
|
|
203
|
+
])('keeps non-review activity collapsed: %j', (details) => {
|
|
204
|
+
const activity = makeMessage({
|
|
205
|
+
message: 'Working on the draft',
|
|
206
|
+
details: details as unknown as AgentMessage['details'],
|
|
207
|
+
});
|
|
208
|
+
expect(buildSummaryConversationItems([activity, question], false)[0]).toMatchObject({
|
|
209
|
+
type: 'work',
|
|
210
|
+
messages: [activity],
|
|
211
|
+
});
|
|
212
|
+
});
|
|
213
|
+
|
|
214
|
+
it.each([false, true])('keeps reconstructed review streams visible with isComplete=%s', (isComplete) => {
|
|
215
|
+
const messages = buildSummaryDisplayMessages(
|
|
216
|
+
[tool, question],
|
|
217
|
+
new Map([
|
|
218
|
+
[
|
|
219
|
+
'review-stream',
|
|
220
|
+
{
|
|
221
|
+
text: draft,
|
|
222
|
+
startTimestamp: 2000,
|
|
223
|
+
activityId: 'review-1',
|
|
224
|
+
isComplete,
|
|
225
|
+
},
|
|
226
|
+
],
|
|
227
|
+
]),
|
|
228
|
+
);
|
|
229
|
+
const items = buildSummaryConversationItems(messages, false);
|
|
230
|
+
|
|
231
|
+
expect(items.map((item) => item.type)).toEqual(['message', 'work', 'message']);
|
|
232
|
+
expect(items[0]).toMatchObject({ type: 'message', message: { message: draft } });
|
|
233
|
+
});
|
|
234
|
+
});
|
|
235
|
+
|
|
143
236
|
describe('ModernAgentOutput utils - progress state', () => {
|
|
144
237
|
it('treats a new user turn after an older idle message as in progress', () => {
|
|
145
238
|
const idle = makeMessage({
|
|
@@ -284,7 +284,7 @@ export function SlidingThinkingIndicator({
|
|
|
284
284
|
size="xs"
|
|
285
285
|
variant="ghost"
|
|
286
286
|
onClick={() => setShowDetails(!showDetails)}
|
|
287
|
-
className="text-
|
|
287
|
+
className="text-muted hover:text-foreground flex items-center gap-1 text-xs"
|
|
288
288
|
title={showDetails ? t('agent.hideThinkingDetails') : t('agent.showAllMessages')}
|
|
289
289
|
>
|
|
290
290
|
{showDetails ? (
|
|
@@ -356,10 +356,13 @@ export function SlidingThinkingIndicator({
|
|
|
356
356
|
) : (
|
|
357
357
|
<div
|
|
358
358
|
className={cn(
|
|
359
|
-
'py-2 px-3 border-s-2 bg-white dark:bg-
|
|
359
|
+
'py-2 px-3 border-s-2 bg-white dark:bg-muted flex items-center w-full',
|
|
360
360
|
'transition-all duration-200 ease-in-out rounded-e-md',
|
|
361
361
|
// Set border color based on message type
|
|
362
362
|
{
|
|
363
|
+
// Categorical message-type palette, not semantic state:
|
|
364
|
+
// these must stay in step with <PulsingMessageLoader color>
|
|
365
|
+
// in AnimatedThinkingDots, which uses the same hue names.
|
|
363
366
|
'border-blue-400 dark:border-blue-500':
|
|
364
367
|
getThinkingColor(message) === 'blue',
|
|
365
368
|
'border-purple-400 dark:border-purple-500':
|
|
@@ -3,7 +3,6 @@ import { Button } from '@vertesia/ui/core';
|
|
|
3
3
|
import { useUITranslation } from '@vertesia/ui/i18n';
|
|
4
4
|
import { useUserSession } from '@vertesia/ui/session';
|
|
5
5
|
import { Check, Copy, Download, Loader2, Maximize2, Minimize2, X } from 'lucide-react';
|
|
6
|
-
import Papa from 'papaparse';
|
|
7
6
|
import { lazy, memo, Suspense, useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
|
8
7
|
import type { View } from 'vega';
|
|
9
8
|
import type { TopLevelSpec as VisualizationSpec } from 'vega-lite';
|
|
@@ -717,7 +716,12 @@ export const VegaLiteChart = memo(
|
|
|
717
716
|
let data: unknown[];
|
|
718
717
|
|
|
719
718
|
if (isCsv) {
|
|
720
|
-
// Parse CSV to JSON array
|
|
719
|
+
// Parse CSV to JSON array. papaparse is imported here rather than at
|
|
720
|
+
// module scope: it is only ever needed for a chart whose data comes from
|
|
721
|
+
// a .csv artifact, and a static import put it in the widgets bundle's
|
|
722
|
+
// graph (this module is reachable from widgets/markdown), so every
|
|
723
|
+
// application paid for it on first render.
|
|
724
|
+
const { default: Papa } = await import('papaparse');
|
|
721
725
|
const csvText = await response.text();
|
|
722
726
|
const parseResult = Papa.parse(csvText, {
|
|
723
727
|
header: true,
|
|
@@ -17,7 +17,7 @@ function RowErrorFallback({ error }: ErrorFallbackComponentProps) {
|
|
|
17
17
|
<td colSpan={100}>
|
|
18
18
|
<span className="text-xs"> Cannot display row</span>
|
|
19
19
|
<br />
|
|
20
|
-
<span className="bg-
|
|
20
|
+
<span className="bg-muted">{message}</span>
|
|
21
21
|
</td>
|
|
22
22
|
</tr>
|
|
23
23
|
);
|
|
@@ -193,7 +193,7 @@ export function AgentRunnerFacetsNav({
|
|
|
193
193
|
<div className="flex justify-end">
|
|
194
194
|
{!selectionCount && (
|
|
195
195
|
<div className="flex items-center justify-between px-2 py-1">
|
|
196
|
-
<div className="text-sm text-muted
|
|
196
|
+
<div className="text-sm text-muted">
|
|
197
197
|
{search.initialized ? `${search.totalCount} runs` : 'Loading runs...'}
|
|
198
198
|
</div>
|
|
199
199
|
</div>
|