@vertesia/ui 1.5.0-dev.20260722.120446Z → 1.5.0-dev.20260804.124748Z
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/shadcn/filters/filterBar.d.ts.map +1 -1
- package/lib/core/components/shadcn/filters/filterBar.js +1 -1
- package/lib/core/components/shadcn/filters/filterBar.js.map +1 -1
- package/lib/core/components/shadcn/modal/dialog.d.ts +1 -1
- package/lib/core/components/shadcn/modal/dialog.d.ts.map +1 -1
- package/lib/core/components/shadcn/modal/dialog.js +2 -0
- package/lib/core/components/shadcn/modal/dialog.js.map +1 -1
- package/lib/core/components/shadcn/tabs.d.ts +12 -1
- package/lib/core/components/shadcn/tabs.d.ts.map +1 -1
- package/lib/core/components/shadcn/tabs.js +12 -4
- package/lib/core/components/shadcn/tabs.js.map +1 -1
- package/lib/core/hooks/useScrollableSearch.d.ts +1 -1
- package/lib/core/hooks/useScrollableSearch.d.ts.map +1 -1
- package/lib/core/hooks/useScrollableSearch.js +15 -2
- package/lib/core/hooks/useScrollableSearch.js.map +1 -1
- package/lib/env/index.d.ts +4 -0
- package/lib/env/index.d.ts.map +1 -1
- package/lib/env/index.js.map +1 -1
- package/lib/features/agent/chat/AgentRequestInputOverlay.d.ts +1 -1
- package/lib/features/agent/chat/AgentRequestInputOverlay.d.ts.map +1 -1
- package/lib/features/agent/chat/AgentRequestInputOverlay.js +3 -8
- package/lib/features/agent/chat/AgentRequestInputOverlay.js.map +1 -1
- package/lib/features/agent/chat/AgentRightPanel.d.ts +5 -1
- package/lib/features/agent/chat/AgentRightPanel.d.ts.map +1 -1
- package/lib/features/agent/chat/AgentRightPanel.js +2 -2
- package/lib/features/agent/chat/AgentRightPanel.js.map +1 -1
- package/lib/features/agent/chat/ArtifactsTab.d.ts +5 -1
- package/lib/features/agent/chat/ArtifactsTab.d.ts.map +1 -1
- package/lib/features/agent/chat/ArtifactsTab.js +48 -11
- package/lib/features/agent/chat/ArtifactsTab.js.map +1 -1
- package/lib/features/agent/chat/DocumentEditingActionCard.d.ts +6 -0
- package/lib/features/agent/chat/DocumentEditingActionCard.d.ts.map +1 -0
- package/lib/features/agent/chat/DocumentEditingActionCard.js +129 -0
- package/lib/features/agent/chat/DocumentEditingActionCard.js.map +1 -0
- package/lib/features/agent/chat/ModernAgentConversation.d.ts +27 -2
- package/lib/features/agent/chat/ModernAgentConversation.d.ts.map +1 -1
- package/lib/features/agent/chat/ModernAgentConversation.js +174 -40
- package/lib/features/agent/chat/ModernAgentConversation.js.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/ActiveWorkstreamsSummary.d.ts +2 -1
- package/lib/features/agent/chat/ModernAgentOutput/ActiveWorkstreamsSummary.d.ts.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/ActiveWorkstreamsSummary.js +25 -10
- package/lib/features/agent/chat/ModernAgentOutput/ActiveWorkstreamsSummary.js.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/AgentMarkdownAnchor.d.ts +45 -0
- package/lib/features/agent/chat/ModernAgentOutput/AgentMarkdownAnchor.d.ts.map +1 -0
- package/lib/features/agent/chat/ModernAgentOutput/AgentMarkdownAnchor.js +40 -0
- package/lib/features/agent/chat/ModernAgentOutput/AgentMarkdownAnchor.js.map +1 -0
- package/lib/features/agent/chat/ModernAgentOutput/AllMessagesMixed.d.ts +3 -1
- package/lib/features/agent/chat/ModernAgentOutput/AllMessagesMixed.d.ts.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/AllMessagesMixed.js +118 -58
- package/lib/features/agent/chat/ModernAgentOutput/AllMessagesMixed.js.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/AttachmentPreview.d.ts +2 -1
- package/lib/features/agent/chat/ModernAgentOutput/AttachmentPreview.d.ts.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/AttachmentPreview.js +23 -7
- package/lib/features/agent/chat/ModernAgentOutput/AttachmentPreview.js.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/CollapsibleAgentMarkdown.d.ts +25 -0
- package/lib/features/agent/chat/ModernAgentOutput/CollapsibleAgentMarkdown.d.ts.map +1 -0
- package/lib/features/agent/chat/ModernAgentOutput/CollapsibleAgentMarkdown.js +33 -0
- package/lib/features/agent/chat/ModernAgentOutput/CollapsibleAgentMarkdown.js.map +1 -0
- package/lib/features/agent/chat/ModernAgentOutput/Header.js +2 -2
- package/lib/features/agent/chat/ModernAgentOutput/Header.js.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/MessageInput.d.ts +2 -1
- package/lib/features/agent/chat/ModernAgentOutput/MessageInput.d.ts.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/MessageInput.js +2 -2
- package/lib/features/agent/chat/ModernAgentOutput/MessageInput.js.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/MessageItem.d.ts +3 -1
- package/lib/features/agent/chat/ModernAgentOutput/MessageItem.d.ts.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/MessageItem.js +23 -25
- package/lib/features/agent/chat/ModernAgentOutput/MessageItem.js.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/ResourceChangeSummary.d.ts +14 -0
- package/lib/features/agent/chat/ModernAgentOutput/ResourceChangeSummary.d.ts.map +1 -0
- package/lib/features/agent/chat/ModernAgentOutput/ResourceChangeSummary.js +21 -0
- package/lib/features/agent/chat/ModernAgentOutput/ResourceChangeSummary.js.map +1 -0
- package/lib/features/agent/chat/ModernAgentOutput/ResourceChip.d.ts +30 -0
- package/lib/features/agent/chat/ModernAgentOutput/ResourceChip.d.ts.map +1 -0
- package/lib/features/agent/chat/ModernAgentOutput/ResourceChip.js +53 -0
- package/lib/features/agent/chat/ModernAgentOutput/ResourceChip.js.map +1 -0
- package/lib/features/agent/chat/ModernAgentOutput/ToolCallGroup.d.ts.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/ToolCallGroup.js +21 -2
- package/lib/features/agent/chat/ModernAgentOutput/ToolCallGroup.js.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/requestInputMessages.d.ts +9 -1
- package/lib/features/agent/chat/ModernAgentOutput/requestInputMessages.d.ts.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/requestInputMessages.js +97 -2
- package/lib/features/agent/chat/ModernAgentOutput/requestInputMessages.js.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/resourceLinks.d.ts +6 -0
- package/lib/features/agent/chat/ModernAgentOutput/resourceLinks.d.ts.map +1 -0
- package/lib/features/agent/chat/ModernAgentOutput/resourceLinks.js +29 -0
- package/lib/features/agent/chat/ModernAgentOutput/resourceLinks.js.map +1 -0
- package/lib/features/agent/chat/ModernAgentOutput/resourceSummary.d.ts +33 -0
- package/lib/features/agent/chat/ModernAgentOutput/resourceSummary.d.ts.map +1 -0
- package/lib/features/agent/chat/ModernAgentOutput/resourceSummary.js +129 -0
- package/lib/features/agent/chat/ModernAgentOutput/resourceSummary.js.map +1 -0
- package/lib/features/agent/chat/ModernAgentOutput/utils.d.ts +7 -0
- package/lib/features/agent/chat/ModernAgentOutput/utils.d.ts.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/utils.js +11 -1
- package/lib/features/agent/chat/ModernAgentOutput/utils.js.map +1 -1
- package/lib/features/agent/chat/hooks/useAgentStream.d.ts +1 -1
- package/lib/features/agent/chat/hooks/useAgentStream.d.ts.map +1 -1
- package/lib/features/agent/chat/hooks/useAgentStream.js +34 -10
- package/lib/features/agent/chat/hooks/useAgentStream.js.map +1 -1
- package/lib/features/agent/chat/index.d.ts +2 -1
- package/lib/features/agent/chat/index.d.ts.map +1 -1
- package/lib/features/agent/chat/index.js +3 -0
- package/lib/features/agent/chat/index.js.map +1 -1
- package/lib/features/facets/PromptsFacetsNav.d.ts +8 -6
- package/lib/features/facets/PromptsFacetsNav.d.ts.map +1 -1
- package/lib/features/facets/PromptsFacetsNav.js +8 -3
- package/lib/features/facets/PromptsFacetsNav.js.map +1 -1
- package/lib/features/store/objects/DocumentSearchResults.js +2 -2
- package/lib/features/store/objects/DocumentSearchResults.js.map +1 -1
- package/lib/features/store/objects/components/ContentOverview.d.ts +2 -1
- package/lib/features/store/objects/components/ContentOverview.d.ts.map +1 -1
- package/lib/features/store/objects/components/ContentOverview.js +90 -16
- package/lib/features/store/objects/components/ContentOverview.js.map +1 -1
- package/lib/features/store/objects/components/DocumentEditingConfigurationSelector.d.ts +16 -0
- package/lib/features/store/objects/components/DocumentEditingConfigurationSelector.d.ts.map +1 -0
- package/lib/features/store/objects/components/DocumentEditingConfigurationSelector.js +116 -0
- package/lib/features/store/objects/components/DocumentEditingConfigurationSelector.js.map +1 -0
- package/lib/features/store/objects/components/DocumentEditingLockStatus.d.ts +7 -0
- package/lib/features/store/objects/components/DocumentEditingLockStatus.d.ts.map +1 -0
- package/lib/features/store/objects/components/DocumentEditingLockStatus.js +13 -0
- package/lib/features/store/objects/components/DocumentEditingLockStatus.js.map +1 -0
- package/lib/features/store/objects/components/DocumentEditingPanel.d.ts +48 -0
- package/lib/features/store/objects/components/DocumentEditingPanel.d.ts.map +1 -0
- package/lib/features/store/objects/components/DocumentEditingPanel.js +720 -0
- package/lib/features/store/objects/components/DocumentEditingPanel.js.map +1 -0
- package/lib/features/store/objects/components/TextEditorPanel.d.ts.map +1 -1
- package/lib/features/store/objects/components/TextEditorPanel.js +22 -9
- package/lib/features/store/objects/components/TextEditorPanel.js.map +1 -1
- package/lib/features/store/objects/components/documentArtifactRefs.d.ts +26 -0
- package/lib/features/store/objects/components/documentArtifactRefs.d.ts.map +1 -0
- package/lib/features/store/objects/components/documentArtifactRefs.js +52 -0
- package/lib/features/store/objects/components/documentArtifactRefs.js.map +1 -0
- package/lib/features/store/objects/components/documentEditingAgentConfig.d.ts +4 -0
- package/lib/features/store/objects/components/documentEditingAgentConfig.d.ts.map +1 -0
- package/lib/features/store/objects/components/documentEditingAgentConfig.js +40 -0
- package/lib/features/store/objects/components/documentEditingAgentConfig.js.map +1 -0
- package/lib/features/store/objects/components/documentEditingPrompts.d.ts +3 -0
- package/lib/features/store/objects/components/documentEditingPrompts.d.ts.map +1 -0
- package/lib/features/store/objects/components/documentEditingPrompts.js +13 -0
- package/lib/features/store/objects/components/documentEditingPrompts.js.map +1 -0
- package/lib/features/store/objects/components/documentEditingRun.d.ts +27 -0
- package/lib/features/store/objects/components/documentEditingRun.d.ts.map +1 -0
- package/lib/features/store/objects/components/documentEditingRun.js +126 -0
- package/lib/features/store/objects/components/documentEditingRun.js.map +1 -0
- package/lib/features/store/objects/components/documentEditingTarget.d.ts +20 -0
- package/lib/features/store/objects/components/documentEditingTarget.d.ts.map +1 -0
- package/lib/features/store/objects/components/documentEditingTarget.js +40 -0
- package/lib/features/store/objects/components/documentEditingTarget.js.map +1 -0
- package/lib/features/store/objects/components/index.d.ts +1 -0
- package/lib/features/store/objects/components/index.d.ts.map +1 -1
- package/lib/features/store/objects/components/index.js +1 -0
- package/lib/features/store/objects/components/index.js.map +1 -1
- package/lib/features/store/objects/components/useContentPanelHooks.d.ts +36 -4
- package/lib/features/store/objects/components/useContentPanelHooks.d.ts.map +1 -1
- package/lib/features/store/objects/components/useContentPanelHooks.js +53 -29
- package/lib/features/store/objects/components/useContentPanelHooks.js.map +1 -1
- package/lib/features/store/objects/components/useDownloadFile.d.ts +2 -1
- package/lib/features/store/objects/components/useDownloadFile.d.ts.map +1 -1
- package/lib/features/store/objects/components/useDownloadFile.js +3 -0
- package/lib/features/store/objects/components/useDownloadFile.js.map +1 -1
- package/lib/features/store/objects/search/DocumentSearchContext.d.ts +128 -6
- package/lib/features/store/objects/search/DocumentSearchContext.d.ts.map +1 -1
- package/lib/features/store/objects/selection/ObjectsActionContext.d.ts +2 -2
- package/lib/features/store/objects/selection/ObjectsActionContext.d.ts.map +1 -1
- package/lib/features/store/objects/selection/ObjectsActionSpec.d.ts +2 -2
- package/lib/features/store/objects/selection/ObjectsActionSpec.d.ts.map +1 -1
- package/lib/features/store/objects/selection/SelectionActions.d.ts +2 -2
- package/lib/features/store/objects/selection/SelectionActions.d.ts.map +1 -1
- package/lib/features/store/objects/selection/actions/StartWorkflowButton.js +1 -1
- package/lib/features/store/objects/selection/actions/StartWorkflowButton.js.map +1 -1
- package/lib/features/store/objects/upload/DocumentUploadModal.js.map +1 -1
- package/lib/features/store/types/IntakePolicyEditor.d.ts +2 -2
- package/lib/features/store/types/IntakePolicyEditor.d.ts.map +1 -1
- package/lib/features/store/types/IntakePolicyEditor.js +5 -1
- package/lib/features/store/types/IntakePolicyEditor.js.map +1 -1
- package/lib/features/store/types/IntakePolicyForm.d.ts.map +1 -1
- package/lib/features/store/types/IntakePolicyForm.js +2 -2
- package/lib/features/store/types/IntakePolicyForm.js.map +1 -1
- package/lib/features/store/types/ObjectSchemaEditor.d.ts +2 -2
- package/lib/features/store/types/ObjectSchemaEditor.d.ts.map +1 -1
- package/lib/features/store/types/SelectContentType.d.ts +2 -2
- package/lib/features/store/types/SelectContentType.d.ts.map +1 -1
- package/lib/features/store/types/SelectContentType.js.map +1 -1
- package/lib/features/store/types/SelectContentTypeModal.d.ts +2 -2
- package/lib/features/store/types/SelectContentTypeModal.d.ts.map +1 -1
- package/lib/features/store/types/SelectContentTypeModal.js.map +1 -1
- package/lib/features/store/types/TableLayoutEditor.d.ts +2 -2
- package/lib/features/store/types/TableLayoutEditor.d.ts.map +1 -1
- package/lib/features/store/types/TypeRegistry.d.ts +1267 -6
- package/lib/features/store/types/TypeRegistry.d.ts.map +1 -1
- package/lib/features/store/types/TypeRegistry.js +5 -0
- package/lib/features/store/types/TypeRegistry.js.map +1 -1
- package/lib/features/store/types/intake-policy-editor.logic.d.ts +9 -1
- package/lib/features/store/types/intake-policy-editor.logic.d.ts.map +1 -1
- package/lib/features/store/types/intake-policy-editor.logic.js +9 -1
- package/lib/features/store/types/intake-policy-editor.logic.js.map +1 -1
- package/lib/features/store/types/search/ObjectTypeSearchContext.d.ts +1251 -1
- package/lib/features/store/types/search/ObjectTypeSearchContext.d.ts.map +1 -1
- package/lib/features/store/types/typeCatalogCache.d.ts +2 -2
- package/lib/features/store/types/typeCatalogCache.d.ts.map +1 -1
- package/lib/features/store/types/typeCatalogCache.js +4 -0
- package/lib/features/store/types/typeCatalogCache.js.map +1 -1
- package/lib/features/user/UserInfo.d.ts +118 -7
- package/lib/features/user/UserInfo.d.ts.map +1 -1
- package/lib/i18n/locales/ar.json +120 -2
- package/lib/i18n/locales/de.json +120 -2
- package/lib/i18n/locales/en.json +123 -1
- package/lib/i18n/locales/es.json +120 -2
- package/lib/i18n/locales/fr.json +120 -2
- package/lib/i18n/locales/it.json +120 -2
- package/lib/i18n/locales/ja.json +120 -2
- package/lib/i18n/locales/ko.json +120 -2
- package/lib/i18n/locales/pt.json +120 -2
- package/lib/i18n/locales/ru.json +120 -2
- package/lib/i18n/locales/tr.json +120 -2
- package/lib/i18n/locales/zh-TW.json +120 -2
- package/lib/i18n/locales/zh.json +120 -2
- package/lib/rich-text/EditorToolbar.d.ts +37 -0
- package/lib/rich-text/EditorToolbar.d.ts.map +1 -0
- package/lib/rich-text/EditorToolbar.js +215 -0
- package/lib/rich-text/EditorToolbar.js.map +1 -0
- package/lib/rich-text/VertesiaRichTextEditor.d.ts +26 -0
- package/lib/rich-text/VertesiaRichTextEditor.d.ts.map +1 -0
- package/lib/rich-text/VertesiaRichTextEditor.js +67 -0
- package/lib/rich-text/VertesiaRichTextEditor.js.map +1 -0
- package/lib/rich-text/index.d.ts +2 -0
- package/lib/rich-text/index.d.ts.map +1 -0
- package/lib/rich-text/index.js +2 -0
- package/lib/rich-text/index.js.map +1 -0
- package/lib/session/UserSession.d.ts +18 -4
- package/lib/session/UserSession.d.ts.map +1 -1
- package/lib/shell/apps/AppInstallationProvider.d.ts +222 -2
- package/lib/shell/apps/AppInstallationProvider.d.ts.map +1 -1
- package/lib/shell/login/InviteAcceptModal.js.map +1 -1
- package/lib/vertesia-ui-core.js +3 -3
- package/lib/vertesia-ui-core.js.map +1 -1
- package/lib/vertesia-ui-features.js +35 -30
- package/lib/vertesia-ui-features.js.map +1 -1
- package/lib/vertesia-ui-i18n.js +14 -14
- package/lib/vertesia-ui-i18n.js.map +1 -1
- package/lib/vertesia-ui-rich-text.js +5 -0
- package/lib/vertesia-ui-rich-text.js.map +1 -0
- package/lib/vertesia-ui-widgets.js +25 -7
- package/lib/vertesia-ui-widgets.js.map +1 -1
- package/lib/widgets/markdown/AgentResourceResolver.d.ts +31 -0
- package/lib/widgets/markdown/AgentResourceResolver.d.ts.map +1 -0
- package/lib/widgets/markdown/AgentResourceResolver.js +39 -0
- package/lib/widgets/markdown/AgentResourceResolver.js.map +1 -0
- package/lib/widgets/markdown/ArtifactEditingSurface.d.ts +63 -0
- package/lib/widgets/markdown/ArtifactEditingSurface.d.ts.map +1 -0
- package/lib/widgets/markdown/ArtifactEditingSurface.js +582 -0
- package/lib/widgets/markdown/ArtifactEditingSurface.js.map +1 -0
- package/lib/widgets/markdown/CollaborativeMarkdownRenderer.d.ts +69 -0
- package/lib/widgets/markdown/CollaborativeMarkdownRenderer.d.ts.map +1 -0
- package/lib/widgets/markdown/CollaborativeMarkdownRenderer.js +374 -0
- package/lib/widgets/markdown/CollaborativeMarkdownRenderer.js.map +1 -0
- package/lib/widgets/markdown/MarkdownLink.d.ts +3 -1
- package/lib/widgets/markdown/MarkdownLink.d.ts.map +1 -1
- package/lib/widgets/markdown/MarkdownLink.js +41 -14
- package/lib/widgets/markdown/MarkdownLink.js.map +1 -1
- package/lib/widgets/markdown/MarkdownRenderer.d.ts +8 -1
- package/lib/widgets/markdown/MarkdownRenderer.d.ts.map +1 -1
- package/lib/widgets/markdown/MarkdownRenderer.js +20 -4
- package/lib/widgets/markdown/MarkdownRenderer.js.map +1 -1
- package/lib/widgets/markdown/index.d.ts +5 -1
- package/lib/widgets/markdown/index.d.ts.map +1 -1
- package/lib/widgets/markdown/index.js +5 -1
- package/lib/widgets/markdown/index.js.map +1 -1
- package/lib/widgets/markdown/normalizeCustomSchemeLinks.d.ts.map +1 -1
- package/lib/widgets/markdown/normalizeCustomSchemeLinks.js +14 -2
- package/lib/widgets/markdown/normalizeCustomSchemeLinks.js.map +1 -1
- package/lib/widgets/markdown/textDiff.d.ts +52 -0
- package/lib/widgets/markdown/textDiff.d.ts.map +1 -0
- package/lib/widgets/markdown/textDiff.js +362 -0
- package/lib/widgets/markdown/textDiff.js.map +1 -0
- package/lib/widgets/markdown/useArtifactContent.d.ts +5 -3
- package/lib/widgets/markdown/useArtifactContent.d.ts.map +1 -1
- package/lib/widgets/markdown/useArtifactContent.js +6 -3
- package/lib/widgets/markdown/useArtifactContent.js.map +1 -1
- package/lib/widgets/markdown/useResolvedUrl.d.ts +1 -5
- package/lib/widgets/markdown/useResolvedUrl.d.ts.map +1 -1
- package/lib/widgets/markdown/useResolvedUrl.js +19 -31
- package/lib/widgets/markdown/useResolvedUrl.js.map +1 -1
- package/lib/widgets/monacoEditor/MonacoEditor.d.ts +7 -1
- package/lib/widgets/monacoEditor/MonacoEditor.d.ts.map +1 -1
- package/lib/widgets/monacoEditor/MonacoEditor.js +62 -6
- package/lib/widgets/monacoEditor/MonacoEditor.js.map +1 -1
- package/lib/widgets/xml-viewer/hooks/useXMLViewer.d.ts +9 -0
- package/lib/widgets/xml-viewer/hooks/useXMLViewer.d.ts.map +1 -1
- package/lib/widgets/xml-viewer/hooks/useXMLViewer.js +20 -17
- package/lib/widgets/xml-viewer/hooks/useXMLViewer.js.map +1 -1
- package/package.json +36 -32
- package/src/__tests__/a11y.test.tsx +4 -1
- package/src/__tests__/axe-helper.ts +17 -7
- package/src/__tests__/setup.ts +25 -0
- package/src/core/components/shadcn/filters/filterBar.tsx +1 -0
- package/src/core/components/shadcn/modal/dialog.tsx +3 -1
- package/src/core/components/shadcn/tabs.test.tsx +65 -0
- package/src/core/components/shadcn/tabs.tsx +25 -3
- package/src/core/hooks/useScrollableSearch.test.tsx +139 -0
- package/src/core/hooks/useScrollableSearch.tsx +17 -3
- package/src/env/index.ts +2 -0
- package/src/features/agent/chat/AgentChatPlaybackControls.test.tsx +2 -0
- package/src/features/agent/chat/AgentRequestInputOverlay.test.tsx +51 -6
- package/src/features/agent/chat/AgentRequestInputOverlay.tsx +5 -7
- package/src/features/agent/chat/AgentRightPanel.tsx +16 -1
- package/src/features/agent/chat/ArtifactsTab.test.tsx +55 -0
- package/src/features/agent/chat/ArtifactsTab.tsx +203 -52
- package/src/features/agent/chat/DocumentEditingActionCard.test.tsx +105 -0
- package/src/features/agent/chat/DocumentEditingActionCard.tsx +210 -0
- package/src/features/agent/chat/ModernAgentConversation.test.tsx +432 -43
- package/src/features/agent/chat/ModernAgentConversation.tsx +352 -96
- package/src/features/agent/chat/ModernAgentOutput/ActiveWorkstreamsSummary.tsx +75 -20
- package/src/features/agent/chat/ModernAgentOutput/AgentMarkdownAnchor.test.tsx +79 -0
- package/src/features/agent/chat/ModernAgentOutput/AgentMarkdownAnchor.tsx +94 -0
- package/src/features/agent/chat/ModernAgentOutput/AllMessagesMixed.test.tsx +369 -34
- package/src/features/agent/chat/ModernAgentOutput/AllMessagesMixed.tsx +279 -115
- package/src/features/agent/chat/ModernAgentOutput/AttachmentPreview.tsx +53 -4
- package/src/features/agent/chat/ModernAgentOutput/CollapsibleAgentMarkdown.test.tsx +44 -0
- package/src/features/agent/chat/ModernAgentOutput/CollapsibleAgentMarkdown.tsx +88 -0
- package/src/features/agent/chat/ModernAgentOutput/Header.tsx +2 -2
- package/src/features/agent/chat/ModernAgentOutput/MessageInput.test.tsx +71 -0
- package/src/features/agent/chat/ModernAgentOutput/MessageInput.tsx +3 -1
- package/src/features/agent/chat/ModernAgentOutput/MessageItem.tsx +48 -50
- package/src/features/agent/chat/ModernAgentOutput/ResourceChangeSummary.tsx +40 -0
- package/src/features/agent/chat/ModernAgentOutput/ResourceChip.test.tsx +148 -0
- package/src/features/agent/chat/ModernAgentOutput/ResourceChip.tsx +141 -0
- package/src/features/agent/chat/ModernAgentOutput/ToolCallGroup.tsx +33 -1
- package/src/features/agent/chat/ModernAgentOutput/requestInputMessages.test.ts +95 -0
- package/src/features/agent/chat/ModernAgentOutput/requestInputMessages.ts +111 -1
- package/src/features/agent/chat/ModernAgentOutput/resourceLinks.tsx +43 -0
- package/src/features/agent/chat/ModernAgentOutput/resourceSummary.test.ts +229 -0
- package/src/features/agent/chat/ModernAgentOutput/resourceSummary.ts +152 -0
- package/src/features/agent/chat/ModernAgentOutput/utils.test.ts +17 -0
- package/src/features/agent/chat/ModernAgentOutput/utils.ts +14 -1
- package/src/features/agent/chat/hooks/useAgentStream.test.tsx +245 -0
- package/src/features/agent/chat/hooks/useAgentStream.ts +38 -9
- package/src/features/agent/chat/index.ts +12 -0
- package/src/features/facets/PromptsFacetsNav.tsx +17 -9
- package/src/features/store/objects/DocumentSearchResults.tsx +2 -2
- package/src/features/store/objects/components/ContentOverview.tsx +220 -66
- package/src/features/store/objects/components/DocumentEditingConfigurationSelector.test.ts +34 -0
- package/src/features/store/objects/components/DocumentEditingConfigurationSelector.tsx +211 -0
- package/src/features/store/objects/components/DocumentEditingLockStatus.test.tsx +32 -0
- package/src/features/store/objects/components/DocumentEditingLockStatus.tsx +45 -0
- package/src/features/store/objects/components/DocumentEditingPanel.test.tsx +336 -0
- package/src/features/store/objects/components/DocumentEditingPanel.tsx +1236 -0
- package/src/features/store/objects/components/TextEditorPanel.test.tsx +48 -0
- package/src/features/store/objects/components/TextEditorPanel.tsx +41 -20
- package/src/features/store/objects/components/documentArtifactRefs.test.ts +65 -0
- package/src/features/store/objects/components/documentArtifactRefs.ts +72 -0
- package/src/features/store/objects/components/documentEditingAgentConfig.test.ts +28 -0
- package/src/features/store/objects/components/documentEditingAgentConfig.ts +41 -0
- package/src/features/store/objects/components/documentEditingPrompts.test.ts +26 -0
- package/src/features/store/objects/components/documentEditingPrompts.ts +12 -0
- package/src/features/store/objects/components/documentEditingRun.test.ts +176 -0
- package/src/features/store/objects/components/documentEditingRun.ts +184 -0
- package/src/features/store/objects/components/documentEditingTarget.test.ts +96 -0
- package/src/features/store/objects/components/documentEditingTarget.ts +63 -0
- package/src/features/store/objects/components/index.ts +1 -0
- package/src/features/store/objects/components/useContentPanelHooks.ts +52 -27
- package/src/features/store/objects/components/useDownloadFile.test.ts +20 -0
- package/src/features/store/objects/components/useDownloadFile.ts +5 -1
- package/src/features/store/objects/selection/ObjectsActionContext.tsx +2 -2
- package/src/features/store/objects/selection/ObjectsActionSpec.ts +2 -2
- package/src/features/store/objects/selection/SelectionActions.tsx +2 -2
- package/src/features/store/objects/selection/actions/StartWorkflowButton.tsx +2 -2
- package/src/features/store/objects/upload/DocumentUploadModal.tsx +2 -2
- package/src/features/store/types/IntakePolicyEditor.tsx +12 -4
- package/src/features/store/types/IntakePolicyForm.tsx +25 -0
- package/src/features/store/types/ObjectSchemaEditor.tsx +2 -2
- package/src/features/store/types/SelectContentType.tsx +9 -9
- package/src/features/store/types/SelectContentTypeModal.tsx +5 -5
- package/src/features/store/types/TableLayoutEditor.tsx +2 -2
- package/src/features/store/types/TypeRegistry.ts +8 -3
- package/src/features/store/types/intake-policy-editor.logic.ts +10 -2
- package/src/features/store/types/typeCatalogCache.ts +10 -3
- package/src/i18n/locales/ar.json +120 -2
- package/src/i18n/locales/de.json +120 -2
- package/src/i18n/locales/en.json +123 -1
- package/src/i18n/locales/es.json +120 -2
- package/src/i18n/locales/fr.json +120 -2
- package/src/i18n/locales/it.json +120 -2
- package/src/i18n/locales/ja.json +120 -2
- package/src/i18n/locales/ko.json +120 -2
- package/src/i18n/locales/pt.json +120 -2
- package/src/i18n/locales/ru.json +120 -2
- package/src/i18n/locales/tr.json +120 -2
- package/src/i18n/locales/zh-TW.json +120 -2
- package/src/i18n/locales/zh.json +120 -2
- package/src/rich-text/EditorToolbar.tsx +708 -0
- package/src/rich-text/VertesiaRichTextEditor.test.tsx +211 -0
- package/src/rich-text/VertesiaRichTextEditor.tsx +241 -0
- package/src/rich-text/index.ts +9 -0
- package/src/session/UserSession.test.ts +11 -11
- package/src/shell/login/InviteAcceptModal.tsx +4 -4
- package/src/widgets/markdown/AgentResourceResolver.test.ts +24 -0
- package/src/widgets/markdown/AgentResourceResolver.tsx +70 -0
- package/src/widgets/markdown/ArtifactEditingSurface.test.tsx +541 -0
- package/src/widgets/markdown/ArtifactEditingSurface.tsx +878 -0
- package/src/widgets/markdown/CollaborativeMarkdownRenderer.test.tsx +484 -0
- package/src/widgets/markdown/CollaborativeMarkdownRenderer.tsx +825 -0
- package/src/widgets/markdown/MarkdownLink.test.tsx +122 -0
- package/src/widgets/markdown/MarkdownLink.tsx +102 -17
- package/src/widgets/markdown/MarkdownRenderer.tsx +30 -3
- package/src/widgets/markdown/index.ts +39 -1
- package/src/widgets/markdown/normalizeCustomSchemeLinks.ts +15 -2
- package/src/widgets/markdown/textDiff.test.ts +156 -0
- package/src/widgets/markdown/textDiff.ts +399 -0
- package/src/widgets/markdown/useArtifactContent.ts +9 -3
- package/src/widgets/markdown/useResolvedUrl.test.ts +29 -40
- package/src/widgets/markdown/useResolvedUrl.ts +33 -35
- package/src/widgets/monacoEditor/MonacoEditor.tsx +83 -7
- package/src/widgets/xml-viewer/hooks/useXMLViewer.test.ts +26 -0
- package/src/widgets/xml-viewer/hooks/useXMLViewer.ts +23 -18
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
import {
|
|
2
2
|
type AgentMessage,
|
|
3
3
|
AgentMessageType,
|
|
4
|
+
type AgentResourceReference,
|
|
4
5
|
type AskUserMessageDetails,
|
|
5
6
|
type BatchProgressDetails,
|
|
7
|
+
getResourcesFromMessage,
|
|
6
8
|
type JSONSchema,
|
|
7
9
|
type Plan,
|
|
8
10
|
} from '@vertesia/common';
|
|
9
|
-
import { Badge, Button, cn } from '@vertesia/ui/core';
|
|
11
|
+
import { Badge, Button, cn, VTooltip } from '@vertesia/ui/core';
|
|
10
12
|
import { i18nInstance, NAMESPACE, useUITranslation } from '@vertesia/ui/i18n';
|
|
11
|
-
import {
|
|
13
|
+
import { useRouterContext } from '@vertesia/ui/router';
|
|
12
14
|
import { MarkdownRenderer, type MarkdownRendererProps } from '@vertesia/ui/widgets';
|
|
13
15
|
import type { Element } from 'hast';
|
|
14
16
|
import {
|
|
@@ -29,6 +31,7 @@ import {
|
|
|
29
31
|
import React, { Component, type ReactNode, useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
|
30
32
|
import { AnimatedThinkingDots, PulsatingCircle } from '../AnimatedThinkingDots';
|
|
31
33
|
import { AskUserWidget } from '../AskUserWidget';
|
|
34
|
+
import { DocumentEditingActionCard, parseMarkdownEditingAction } from '../DocumentEditingActionCard.js';
|
|
32
35
|
import { ThinkingMessages } from '../WaitingMessages';
|
|
33
36
|
import {
|
|
34
37
|
formatWorkstreamName,
|
|
@@ -37,10 +40,19 @@ import {
|
|
|
37
40
|
getWorkstreamLaunchDetails,
|
|
38
41
|
type WorkstreamLaunchDetails,
|
|
39
42
|
} from '../workstreams.js';
|
|
43
|
+
import { createAgentMarkdownAnchor } from './AgentMarkdownAnchor';
|
|
40
44
|
import { AttachmentPreviewList, parseUserMessageAttachments } from './AttachmentPreview';
|
|
41
45
|
import BatchProgressPanel, { type BatchProgressPanelClassNames } from './BatchProgressPanel';
|
|
46
|
+
import {
|
|
47
|
+
AGENT_LINE_CLAMP_CLASS,
|
|
48
|
+
AGENT_PROSE_CLASS as SUMMARY_PROSE_CLASS,
|
|
49
|
+
AGENT_COLLAPSE_LINES as SUMMARY_THOUGHT_COLLAPSE_LINES,
|
|
50
|
+
AGENT_COLLAPSE_THRESHOLD as SUMMARY_THOUGHT_COLLAPSE_THRESHOLD,
|
|
51
|
+
} from './CollapsibleAgentMarkdown.js';
|
|
42
52
|
import { getMessageDeliveryStatus, MessageDeliveryStatus } from './MessageDeliveryStatus';
|
|
43
53
|
import MessageItem, { type MessageItemClassNames, type MessageItemProps } from './MessageItem';
|
|
54
|
+
import { ResourceChangeSummary } from './ResourceChangeSummary';
|
|
55
|
+
import { ResourceActivityLinkList } from './ResourceChip';
|
|
44
56
|
import {
|
|
45
57
|
getAnsweredRequestInputKeys,
|
|
46
58
|
getAnsweredToolApprovalRequestInputKeys,
|
|
@@ -56,7 +68,14 @@ import {
|
|
|
56
68
|
isToolApprovalRequestInput,
|
|
57
69
|
isToolApprovalRequestInputHidden,
|
|
58
70
|
type RequestInputMessageWithUx,
|
|
71
|
+
sendRequestInputResponse,
|
|
59
72
|
} from './requestInputMessages';
|
|
73
|
+
import {
|
|
74
|
+
interleaveTurnSummaries,
|
|
75
|
+
isResourceSummaryReady,
|
|
76
|
+
type ResourceSummaryRenderItem,
|
|
77
|
+
segmentTurnResources,
|
|
78
|
+
} from './resourceSummary';
|
|
60
79
|
import StreamingMessage, { type StreamingMessageClassNames } from './StreamingMessage';
|
|
61
80
|
import {
|
|
62
81
|
buildSummaryConversationItems,
|
|
@@ -74,6 +93,7 @@ import {
|
|
|
74
93
|
getWorkstreamId,
|
|
75
94
|
groupMessagesWithStreaming,
|
|
76
95
|
isInProgress,
|
|
96
|
+
isToolActivityMessage,
|
|
77
97
|
isToolPreambleMessage,
|
|
78
98
|
isUserStoppedMessage,
|
|
79
99
|
mergeConsecutiveToolGroups,
|
|
@@ -283,6 +303,7 @@ function getMessageText(message: AgentMessage): string {
|
|
|
283
303
|
interface SummaryMessageProps {
|
|
284
304
|
message: AgentMessage;
|
|
285
305
|
onSendMessage?: (message: string, metadata?: Record<string, unknown>) => void;
|
|
306
|
+
onOpenArtifact?: (path: string) => void;
|
|
286
307
|
onSelectWorkstream?: (workstreamId: string) => void;
|
|
287
308
|
requestInputAnswered?: boolean;
|
|
288
309
|
StoreLinkComponent?: React.ComponentType<{ href: string; documentId: string; children: React.ReactNode }>;
|
|
@@ -330,17 +351,7 @@ function SummaryWorkstreamLaunchMessage({
|
|
|
330
351
|
);
|
|
331
352
|
}
|
|
332
353
|
|
|
333
|
-
const SUMMARY_PROSE_CLASS = [
|
|
334
|
-
'agent-markdown vprose prose max-w-none break-words text-sm leading-6 text-foreground/80',
|
|
335
|
-
'prose-p:my-2 prose-p:leading-6 prose-li:my-0.5 prose-pre:my-3 prose-headings:tracking-normal',
|
|
336
|
-
'prose-headings:text-foreground prose-strong:text-foreground prose-code:text-foreground',
|
|
337
|
-
'prose-a:text-foreground prose-a:underline prose-a:decoration-muted prose-a:underline-offset-4',
|
|
338
|
-
'[&_p]:text-foreground/80 [&_li]:text-foreground/80 [&_li::marker]:text-muted',
|
|
339
|
-
].join(' ');
|
|
340
|
-
|
|
341
354
|
const USER_BUBBLE_COLLAPSE_THRESHOLD = 520;
|
|
342
|
-
const SUMMARY_THOUGHT_COLLAPSE_LINES = 6;
|
|
343
|
-
const SUMMARY_THOUGHT_COLLAPSE_THRESHOLD = 520;
|
|
344
355
|
const STORE_LINK_MARKDOWN_RE =
|
|
345
356
|
/\[[^\]]+\]\((?:\/store\/(?:objects|collections)\/|store:|document:|document:\/\/|collection:)[^)]+\)/;
|
|
346
357
|
const DEFAULT_AGENT_MARKDOWN_COMPONENTS: MarkdownRendererProps['components'] = {
|
|
@@ -561,6 +572,7 @@ function SummaryUserBubble({
|
|
|
561
572
|
workstreamId,
|
|
562
573
|
className,
|
|
563
574
|
artifactRunId,
|
|
575
|
+
onOpenArtifact,
|
|
564
576
|
markdownComponents,
|
|
565
577
|
}: {
|
|
566
578
|
children: React.ReactNode;
|
|
@@ -568,6 +580,7 @@ function SummaryUserBubble({
|
|
|
568
580
|
workstreamId?: string;
|
|
569
581
|
className?: string;
|
|
570
582
|
artifactRunId?: string;
|
|
583
|
+
onOpenArtifact?: (path: string) => void;
|
|
571
584
|
markdownComponents?: MarkdownRendererProps['components'];
|
|
572
585
|
}) {
|
|
573
586
|
const { t } = useUITranslation();
|
|
@@ -607,6 +620,7 @@ function SummaryUserBubble({
|
|
|
607
620
|
{shouldRenderMarkdown ? (
|
|
608
621
|
<MarkdownRenderer
|
|
609
622
|
artifactRunId={artifactRunId}
|
|
623
|
+
onArtifactOpen={onOpenArtifact}
|
|
610
624
|
components={markdownComponents}
|
|
611
625
|
className={cn(
|
|
612
626
|
'agent-markdown vprose prose max-w-none break-words text-sm leading-6 text-foreground/90',
|
|
@@ -647,11 +661,13 @@ function SummaryUserBubble({
|
|
|
647
661
|
function SummaryMessage({
|
|
648
662
|
message,
|
|
649
663
|
onSendMessage,
|
|
664
|
+
onOpenArtifact,
|
|
650
665
|
onSelectWorkstream,
|
|
651
666
|
requestInputAnswered = false,
|
|
652
667
|
StoreLinkComponent,
|
|
653
668
|
CollectionLinkComponent,
|
|
654
669
|
}: SummaryMessageProps) {
|
|
670
|
+
const { router } = useRouterContext();
|
|
655
671
|
const content =
|
|
656
672
|
message.type === AgentMessageType.REQUEST_INPUT ? getRequestInputDisplayText(message) : getMessageText(message);
|
|
657
673
|
const workstreamLaunchDetails = getWorkstreamLaunchDetails(message) ?? getWorkstreamActivityDetails(message);
|
|
@@ -661,55 +677,24 @@ function SummaryMessage({
|
|
|
661
677
|
() => (message.type === AgentMessageType.QUESTION ? parseUserMessageAttachments(content) : null),
|
|
662
678
|
[content, message.type],
|
|
663
679
|
);
|
|
680
|
+
const editingAction = useMemo(
|
|
681
|
+
() =>
|
|
682
|
+
message.type === AgentMessageType.QUESTION
|
|
683
|
+
? parseMarkdownEditingAction(message.details?.editing_action)
|
|
684
|
+
: undefined,
|
|
685
|
+
[message.details, message.type],
|
|
686
|
+
);
|
|
664
687
|
|
|
665
688
|
const markdownComponents = useMemo(
|
|
666
689
|
() => ({
|
|
667
690
|
...DEFAULT_AGENT_MARKDOWN_COMPONENTS,
|
|
668
|
-
a: ({
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
}
|
|
673
|
-
node?: unknown;
|
|
674
|
-
ref?: unknown;
|
|
675
|
-
href?: string;
|
|
676
|
-
children?: React.ReactNode;
|
|
677
|
-
}) => {
|
|
678
|
-
const href = props.href || '';
|
|
679
|
-
if (href.includes('/store/objects')) {
|
|
680
|
-
const documentId = href.split('/store/objects/')[1] || '';
|
|
681
|
-
if (StoreLinkComponent) {
|
|
682
|
-
return (
|
|
683
|
-
<StoreLinkComponent href={href} documentId={documentId}>
|
|
684
|
-
{props.children}
|
|
685
|
-
</StoreLinkComponent>
|
|
686
|
-
);
|
|
687
|
-
}
|
|
688
|
-
return (
|
|
689
|
-
<NavLink href={href} topLevelNav>
|
|
690
|
-
{props.children}
|
|
691
|
-
</NavLink>
|
|
692
|
-
);
|
|
693
|
-
}
|
|
694
|
-
if (href.includes('/store/collections')) {
|
|
695
|
-
const collectionId = href.split('/store/collections/')[1] || '';
|
|
696
|
-
if (CollectionLinkComponent) {
|
|
697
|
-
return (
|
|
698
|
-
<CollectionLinkComponent href={href} collectionId={collectionId}>
|
|
699
|
-
{props.children}
|
|
700
|
-
</CollectionLinkComponent>
|
|
701
|
-
);
|
|
702
|
-
}
|
|
703
|
-
return (
|
|
704
|
-
<NavLink href={href} topLevelNav>
|
|
705
|
-
{props.children}
|
|
706
|
-
</NavLink>
|
|
707
|
-
);
|
|
708
|
-
}
|
|
709
|
-
return <a {...props} target="_blank" rel="noopener noreferrer" />;
|
|
710
|
-
},
|
|
691
|
+
a: createAgentMarkdownAnchor({
|
|
692
|
+
StoreLinkComponent,
|
|
693
|
+
CollectionLinkComponent,
|
|
694
|
+
addStickyParams: (href: string) => router.getTopRouter().navigator.addStickyParams(href),
|
|
695
|
+
}),
|
|
711
696
|
}),
|
|
712
|
-
[StoreLinkComponent, CollectionLinkComponent],
|
|
697
|
+
[StoreLinkComponent, CollectionLinkComponent, router],
|
|
713
698
|
);
|
|
714
699
|
|
|
715
700
|
if (workstreamLaunchDetails) {
|
|
@@ -733,6 +718,7 @@ function SummaryMessage({
|
|
|
733
718
|
<AttachmentPreviewList
|
|
734
719
|
items={attachments}
|
|
735
720
|
artifactRunId={runId}
|
|
721
|
+
onOpenArtifact={onOpenArtifact}
|
|
736
722
|
align="end"
|
|
737
723
|
variant="message"
|
|
738
724
|
StoreLinkComponent={StoreLinkComponent}
|
|
@@ -745,9 +731,13 @@ function SummaryMessage({
|
|
|
745
731
|
message={message}
|
|
746
732
|
workstreamId={workstreamId}
|
|
747
733
|
artifactRunId={runId}
|
|
734
|
+
onOpenArtifact={onOpenArtifact}
|
|
748
735
|
markdownComponents={markdownComponents}
|
|
736
|
+
// Comments/edits are user actions: keep the user-message background and end
|
|
737
|
+
// alignment, just give the card a little more room for tables and diffs.
|
|
738
|
+
className={editingAction ? 'max-w-[min(44rem,90%)]' : undefined}
|
|
749
739
|
>
|
|
750
|
-
{questionBody}
|
|
740
|
+
{editingAction ? <DocumentEditingActionCard action={editingAction} /> : questionBody}
|
|
751
741
|
</SummaryUserBubble>
|
|
752
742
|
)}
|
|
753
743
|
</>
|
|
@@ -765,13 +755,22 @@ function SummaryMessage({
|
|
|
765
755
|
variant={uxConfig.variant}
|
|
766
756
|
multiSelect={uxConfig.multiSelect}
|
|
767
757
|
onSelect={(optionId) =>
|
|
768
|
-
|
|
758
|
+
sendRequestInputResponse(
|
|
759
|
+
onSendMessage,
|
|
760
|
+
message,
|
|
761
|
+
optionId,
|
|
762
|
+
getToolApprovalResponseMetadata(message, optionId),
|
|
763
|
+
)
|
|
764
|
+
}
|
|
765
|
+
onMultiSelect={(optionIds) =>
|
|
766
|
+
sendRequestInputResponse(onSendMessage, message, optionIds.join(', '))
|
|
769
767
|
}
|
|
770
|
-
onMultiSelect={(optionIds) => onSendMessage?.(optionIds.join(', '))}
|
|
771
768
|
allowFreeResponse={!uxConfig.options?.length || !!uxConfig.free_response}
|
|
772
769
|
placeholder={uxConfig.free_response?.placeholder}
|
|
773
770
|
submitLabel={uxConfig.free_response?.submit_label}
|
|
774
|
-
onSubmit={(value) =>
|
|
771
|
+
onSubmit={(value) =>
|
|
772
|
+
sendRequestInputResponse(onSendMessage, message, value, uxConfig.free_response?.metadata)
|
|
773
|
+
}
|
|
775
774
|
hideBorder
|
|
776
775
|
compact
|
|
777
776
|
answered={requestInputAnswered}
|
|
@@ -799,6 +798,7 @@ function SummaryMessage({
|
|
|
799
798
|
>
|
|
800
799
|
<MarkdownRenderer
|
|
801
800
|
artifactRunId={runId}
|
|
801
|
+
onArtifactOpen={onOpenArtifact}
|
|
802
802
|
onProposalSelect={(optionId) => onSendMessage?.(optionId)}
|
|
803
803
|
onProposalSubmit={(text) => onSendMessage?.(text)}
|
|
804
804
|
components={markdownComponents}
|
|
@@ -1028,6 +1028,8 @@ interface SummaryToolDetailItem {
|
|
|
1028
1028
|
finishedAt?: number | string;
|
|
1029
1029
|
status?: ToolExecutionStatus;
|
|
1030
1030
|
decisionText?: string;
|
|
1031
|
+
resources: AgentResourceReference[];
|
|
1032
|
+
workflowRunId?: string;
|
|
1031
1033
|
sections: SummaryToolDetailSection[];
|
|
1032
1034
|
}
|
|
1033
1035
|
|
|
@@ -1043,6 +1045,7 @@ const TOOL_DETAIL_SYSTEM_KEYS = new Set([
|
|
|
1043
1045
|
'collection_id',
|
|
1044
1046
|
'document_id',
|
|
1045
1047
|
'display_role',
|
|
1048
|
+
'duration_ms',
|
|
1046
1049
|
'event_class',
|
|
1047
1050
|
'id',
|
|
1048
1051
|
'object_id',
|
|
@@ -1060,6 +1063,7 @@ const TOOL_DETAIL_SYSTEM_KEYS = new Set([
|
|
|
1060
1063
|
'tools',
|
|
1061
1064
|
'message_to_human',
|
|
1062
1065
|
'progress_messages',
|
|
1066
|
+
'resources',
|
|
1063
1067
|
'source',
|
|
1064
1068
|
'token_usage',
|
|
1065
1069
|
'checkpoint_at',
|
|
@@ -1394,7 +1398,12 @@ function getRenderableGroupKey(group: RenderableGroup): string {
|
|
|
1394
1398
|
return ['group', group.toolRunId, group.firstTimestamp, firstKey, lastKey].filter(Boolean).join(':');
|
|
1395
1399
|
}
|
|
1396
1400
|
|
|
1397
|
-
|
|
1401
|
+
// Accepts the augmented render list (which may contain interleaved resource_summary items); those
|
|
1402
|
+
// are skipped so the previous *group* timestamp is found regardless of inserted summaries.
|
|
1403
|
+
function getPreviousRenderableGroupTimestamp(
|
|
1404
|
+
groups: Array<RenderableGroup | ResourceSummaryRenderItem>,
|
|
1405
|
+
index: number,
|
|
1406
|
+
): number | string | undefined {
|
|
1398
1407
|
for (let previousIndex = index - 1; previousIndex >= 0; previousIndex--) {
|
|
1399
1408
|
const group = groups[previousIndex];
|
|
1400
1409
|
if (group.type === 'single') return group.message.timestamp;
|
|
@@ -1512,6 +1521,8 @@ function buildSummaryToolDetailItem(message: AgentMessage, index: number): Summa
|
|
|
1512
1521
|
finishedAt: getTimestampDetail(details[SUMMARY_TOOL_FINISHED_AT_DETAIL_KEY]) ?? message.timestamp,
|
|
1513
1522
|
status: approvalDecisionTitle ? 'error' : (details.tool_status as ToolExecutionStatus | undefined),
|
|
1514
1523
|
decisionText,
|
|
1524
|
+
resources: getResourcesFromMessage(message),
|
|
1525
|
+
workflowRunId: message.workflow_run_id,
|
|
1515
1526
|
sections: getToolDetailSections(message),
|
|
1516
1527
|
};
|
|
1517
1528
|
}
|
|
@@ -1846,6 +1857,13 @@ function formatToolDetailCopyText(item: SummaryToolDetailItem): string {
|
|
|
1846
1857
|
const metadata = getToolDetailMetadata(item).map((entry) => `${entry.label}: ${entry.value}`);
|
|
1847
1858
|
if (metadata.length > 0) parts.push(metadata.join('\n'));
|
|
1848
1859
|
if (item.text) parts.push(item.text);
|
|
1860
|
+
if (item.resources.length > 0) {
|
|
1861
|
+
parts.push(
|
|
1862
|
+
`Resources\n${item.resources
|
|
1863
|
+
.map((resource) => `${resource.label} (${resource.type}:${resource.id}) — ${resource.action}`)
|
|
1864
|
+
.join('\n')}`,
|
|
1865
|
+
);
|
|
1866
|
+
}
|
|
1849
1867
|
|
|
1850
1868
|
for (const section of item.sections) {
|
|
1851
1869
|
parts.push(`${section.label}\n${formatToolSectionValue(section.value)}`);
|
|
@@ -1953,52 +1971,80 @@ function SummaryToolDetailPanel({ item }: { item: SummaryToolDetailItem }) {
|
|
|
1953
1971
|
}
|
|
1954
1972
|
|
|
1955
1973
|
function SummaryToolTimelineItem({ item }: { item: SummaryToolDetailItem }) {
|
|
1974
|
+
const { t } = useUITranslation();
|
|
1956
1975
|
const isDecision = Boolean(item.decisionText);
|
|
1957
1976
|
const isAttention = !isDecision && (item.status === 'error' || item.status === 'warning');
|
|
1958
1977
|
const hasMetadata = getToolDetailMetadata(item).length > 0;
|
|
1959
1978
|
const hasDetails = Boolean(item.command || item.text || item.sections.length || hasMetadata);
|
|
1979
|
+
const hasResources = item.resources.length > 0;
|
|
1960
1980
|
const [isExpanded, setIsExpanded] = useState(false);
|
|
1961
1981
|
const iconStatus = isDecision ? undefined : item.status;
|
|
1982
|
+
const toggleDetailsLabel = isExpanded ? t('agent.hideDetails') : t('agent.showDetails');
|
|
1983
|
+
const detailsSubject = hasResources ? item.resources.map((resource) => resource.label).join(', ') : item.title;
|
|
1984
|
+
|
|
1985
|
+
const icon = (
|
|
1986
|
+
<span
|
|
1987
|
+
className={cn(
|
|
1988
|
+
'flex size-5 items-center justify-center pt-0.5',
|
|
1989
|
+
isAttention ? 'text-attention' : 'text-muted',
|
|
1990
|
+
)}
|
|
1991
|
+
>
|
|
1992
|
+
<ToolDetailIcon kind={item.kind} status={iconStatus} />
|
|
1993
|
+
</span>
|
|
1994
|
+
);
|
|
1995
|
+
|
|
1996
|
+
const chevron = (
|
|
1997
|
+
<ChevronDown
|
|
1998
|
+
className={cn('size-4 shrink-0 text-muted opacity-50 transition-transform', !isExpanded && '-rotate-90')}
|
|
1999
|
+
aria-hidden="true"
|
|
2000
|
+
/>
|
|
2001
|
+
);
|
|
1962
2002
|
|
|
1963
2003
|
return (
|
|
1964
2004
|
<div className="min-w-0">
|
|
1965
|
-
|
|
1966
|
-
|
|
1967
|
-
|
|
1968
|
-
|
|
1969
|
-
|
|
1970
|
-
|
|
1971
|
-
|
|
1972
|
-
|
|
1973
|
-
|
|
1974
|
-
|
|
1975
|
-
|
|
1976
|
-
|
|
2005
|
+
{hasResources ? (
|
|
2006
|
+
<div className="grid w-full grid-cols-[1.5rem_1fr_auto] items-center gap-2 text-start">
|
|
2007
|
+
{icon}
|
|
2008
|
+
<ResourceActivityLinkList resources={item.resources} workflowRunId={item.workflowRunId} />
|
|
2009
|
+
{hasDetails ? (
|
|
2010
|
+
<VTooltip description={toggleDetailsLabel} asChild>
|
|
2011
|
+
<Button
|
|
2012
|
+
variant="ghost"
|
|
2013
|
+
size="xs"
|
|
2014
|
+
className="size-6 p-0 text-muted"
|
|
2015
|
+
onClick={() => setIsExpanded((current) => !current)}
|
|
2016
|
+
aria-expanded={isExpanded}
|
|
2017
|
+
aria-label={`${toggleDetailsLabel}: ${detailsSubject}`}
|
|
2018
|
+
>
|
|
2019
|
+
{chevron}
|
|
2020
|
+
</Button>
|
|
2021
|
+
</VTooltip>
|
|
2022
|
+
) : null}
|
|
2023
|
+
</div>
|
|
2024
|
+
) : (
|
|
2025
|
+
<button
|
|
2026
|
+
type="button"
|
|
1977
2027
|
className={cn(
|
|
1978
|
-
'
|
|
1979
|
-
|
|
2028
|
+
'grid w-full grid-cols-[1.5rem_1fr_auto] gap-2 text-start outline-none transition-colors',
|
|
2029
|
+
'focus-visible:text-foreground focus-visible:underline focus-visible:underline-offset-4',
|
|
2030
|
+
hasDetails ? 'cursor-pointer hover:text-foreground' : 'cursor-default',
|
|
1980
2031
|
)}
|
|
2032
|
+
onClick={() => hasDetails && setIsExpanded((current) => !current)}
|
|
2033
|
+
aria-expanded={hasDetails ? isExpanded : undefined}
|
|
2034
|
+
disabled={!hasDetails}
|
|
1981
2035
|
>
|
|
1982
|
-
|
|
1983
|
-
|
|
1984
|
-
|
|
1985
|
-
|
|
1986
|
-
|
|
1987
|
-
|
|
1988
|
-
|
|
1989
|
-
|
|
1990
|
-
|
|
1991
|
-
|
|
1992
|
-
|
|
1993
|
-
|
|
1994
|
-
className={cn(
|
|
1995
|
-
'mt-0.5 size-4 shrink-0 text-muted opacity-50 transition-transform',
|
|
1996
|
-
!isExpanded && '-rotate-90',
|
|
1997
|
-
)}
|
|
1998
|
-
aria-hidden="true"
|
|
1999
|
-
/>
|
|
2000
|
-
) : null}
|
|
2001
|
-
</button>
|
|
2036
|
+
{icon}
|
|
2037
|
+
<span className="min-w-0 text-sm text-muted">
|
|
2038
|
+
<span className="break-words">{item.title}</span>
|
|
2039
|
+
{item.decisionText ? (
|
|
2040
|
+
<Badge variant="destructive" className="ms-2 rounded-full shadow-sm shadow-destructive/10">
|
|
2041
|
+
{item.decisionText}
|
|
2042
|
+
</Badge>
|
|
2043
|
+
) : null}
|
|
2044
|
+
</span>
|
|
2045
|
+
{hasDetails ? chevron : null}
|
|
2046
|
+
</button>
|
|
2047
|
+
)}
|
|
2002
2048
|
{hasDetails && isExpanded ? (
|
|
2003
2049
|
<div className="mt-1">
|
|
2004
2050
|
<SummaryToolDetailPanel item={item} />
|
|
@@ -2031,13 +2077,7 @@ function SummaryThoughtProseItem({
|
|
|
2031
2077
|
<div className="min-w-0 py-1">
|
|
2032
2078
|
<div
|
|
2033
2079
|
data-testid="summary-thought-prose"
|
|
2034
|
-
className={cn(
|
|
2035
|
-
SUMMARY_PROSE_CLASS,
|
|
2036
|
-
isLong &&
|
|
2037
|
-
!disableCollapse &&
|
|
2038
|
-
!isExpanded &&
|
|
2039
|
-
'[display:-webkit-box] overflow-hidden [-webkit-box-orient:vertical] [-webkit-line-clamp:6]',
|
|
2040
|
-
)}
|
|
2080
|
+
className={cn(SUMMARY_PROSE_CLASS, isLong && !disableCollapse && !isExpanded && AGENT_LINE_CLAMP_CLASS)}
|
|
2041
2081
|
style={{ overflowWrap: 'anywhere' }}
|
|
2042
2082
|
>
|
|
2043
2083
|
<MarkdownRenderer artifactRunId={artifactRunId} components={DEFAULT_AGENT_MARKDOWN_COMPONENTS}>
|
|
@@ -2136,9 +2176,9 @@ function SummaryStoppedMessage({
|
|
|
2136
2176
|
|
|
2137
2177
|
return (
|
|
2138
2178
|
<div className={cn('mx-auto w-full max-w-3xl px-1', className)} data-testid="summary-stopped-message">
|
|
2139
|
-
<div className="flex items-center justify-end gap-2 text-
|
|
2179
|
+
<div className="flex items-center justify-end gap-2 text-sm font-medium text-muted">
|
|
2140
2180
|
<span>{t('agent.youStoppedAfter', { duration })}</span>
|
|
2141
|
-
<MessageDeliveryStatus message={message} className="h-
|
|
2181
|
+
<MessageDeliveryStatus message={message} className="h-4 w-4" />
|
|
2142
2182
|
</div>
|
|
2143
2183
|
<div className="mt-5 border-b border-border/70" />
|
|
2144
2184
|
</div>
|
|
@@ -2244,19 +2284,32 @@ function SummaryActivityRow({
|
|
|
2244
2284
|
variant={uxConfig.variant}
|
|
2245
2285
|
multiSelect={uxConfig.multiSelect}
|
|
2246
2286
|
onSelect={(optionId) =>
|
|
2247
|
-
|
|
2287
|
+
sendRequestInputResponse(
|
|
2288
|
+
onSendMessage,
|
|
2289
|
+
message,
|
|
2248
2290
|
optionId,
|
|
2249
2291
|
getToolApprovalResponseMetadata(message, optionId),
|
|
2250
2292
|
)
|
|
2251
2293
|
}
|
|
2252
|
-
onMultiSelect={(optionIds) =>
|
|
2294
|
+
onMultiSelect={(optionIds) =>
|
|
2295
|
+
sendRequestInputResponse(
|
|
2296
|
+
onSendMessage,
|
|
2297
|
+
message,
|
|
2298
|
+
optionIds.join(', '),
|
|
2299
|
+
)
|
|
2300
|
+
}
|
|
2253
2301
|
allowFreeResponse={
|
|
2254
2302
|
!uxConfig.options?.length || !!uxConfig.free_response
|
|
2255
2303
|
}
|
|
2256
2304
|
placeholder={uxConfig.free_response?.placeholder}
|
|
2257
2305
|
submitLabel={uxConfig.free_response?.submit_label}
|
|
2258
2306
|
onSubmit={(value) =>
|
|
2259
|
-
|
|
2307
|
+
sendRequestInputResponse(
|
|
2308
|
+
onSendMessage,
|
|
2309
|
+
message,
|
|
2310
|
+
value,
|
|
2311
|
+
uxConfig.free_response?.metadata,
|
|
2312
|
+
)
|
|
2260
2313
|
}
|
|
2261
2314
|
hideBorder
|
|
2262
2315
|
compact
|
|
@@ -2387,6 +2440,8 @@ interface AllMessagesMixedProps {
|
|
|
2387
2440
|
streamingMessages?: Map<string, StreamingData>; // Real-time streaming chunks
|
|
2388
2441
|
/** Callback when user sends a message (e.g., from proposal selection) */
|
|
2389
2442
|
onSendMessage?: (message: string, metadata?: Record<string, unknown>) => void;
|
|
2443
|
+
/** Open a Markdown artifact in the surrounding agent panel. */
|
|
2444
|
+
onOpenArtifact?: (path: string) => void;
|
|
2390
2445
|
/** Stable index for thinking messages (changes on 4s interval) */
|
|
2391
2446
|
thinkingMessageIndex?: number;
|
|
2392
2447
|
/** className overrides passed to every MessageItem */
|
|
@@ -2446,6 +2501,7 @@ function AllMessagesMixedComponent({
|
|
|
2446
2501
|
isCompleted = false,
|
|
2447
2502
|
streamingMessages = new Map(),
|
|
2448
2503
|
onSendMessage,
|
|
2504
|
+
onOpenArtifact,
|
|
2449
2505
|
messageItemClassNames,
|
|
2450
2506
|
messageStyleOverrides,
|
|
2451
2507
|
toolCallGroupClassNames,
|
|
@@ -2631,18 +2687,23 @@ function AllMessagesMixedComponent({
|
|
|
2631
2687
|
});
|
|
2632
2688
|
}, []);
|
|
2633
2689
|
|
|
2690
|
+
const previousActiveWorkstreamRef = useRef(activeWorkstream);
|
|
2691
|
+
useEffect(() => {
|
|
2692
|
+
if (previousActiveWorkstreamRef.current === activeWorkstream) return;
|
|
2693
|
+
previousActiveWorkstreamRef.current = activeWorkstream;
|
|
2694
|
+
requestAnimationFrame(scrollToTop);
|
|
2695
|
+
}, [activeWorkstream, scrollToTop]);
|
|
2696
|
+
|
|
2634
2697
|
const handleSelectWorkstream = useCallback(
|
|
2635
2698
|
(workstreamId: string) => {
|
|
2636
2699
|
setActiveWorkstream(workstreamId);
|
|
2637
|
-
requestAnimationFrame(scrollToTop);
|
|
2638
2700
|
},
|
|
2639
|
-
[
|
|
2701
|
+
[setActiveWorkstream],
|
|
2640
2702
|
);
|
|
2641
2703
|
|
|
2642
2704
|
const handleShowMainAgentChat = useCallback(() => {
|
|
2643
2705
|
setActiveWorkstream('all');
|
|
2644
|
-
|
|
2645
|
-
}, [scrollToTop, setActiveWorkstream]);
|
|
2706
|
+
}, [setActiveWorkstream]);
|
|
2646
2707
|
|
|
2647
2708
|
useEffect(() => {
|
|
2648
2709
|
if (activeWorkstream !== 'all' && !workstreams.has(activeWorkstream)) {
|
|
@@ -2767,6 +2828,36 @@ function AllMessagesMixedComponent({
|
|
|
2767
2828
|
return isCompleted || !isInProgress(completionDisplayMessages);
|
|
2768
2829
|
}, [completionDisplayMessages, hasLatestToolApprovalAllow, hasPendingToolApprovalRequest, isCompleted]);
|
|
2769
2830
|
|
|
2831
|
+
// Per-turn resource summaries. Derived from the full source stream (not the active-tab view) so
|
|
2832
|
+
// child-workstream resources are included, but CLIPPED to the playback cursor so scrubbing back
|
|
2833
|
+
// never reveals resources created later in the turn. Gated on the MAIN workstream reaching either
|
|
2834
|
+
// a terminal state or its final ANSWER, so a completed child tab can't surface a summary early while
|
|
2835
|
+
// reusable interactive workflows can summarize a completed turn. Built from structured tool metadata
|
|
2836
|
+
// (details.resources), never parsed from prose.
|
|
2837
|
+
//
|
|
2838
|
+
// Clip by the cursor message's POSITION in the ordered source, not by `timestamp <= cursor`:
|
|
2839
|
+
// millisecond timestamps are not unique, so a later message sharing the cursor's timestamp would
|
|
2840
|
+
// otherwise leak. indexOf works because sortAndDedupeMessages preserves message references; a
|
|
2841
|
+
// timestamp compare is the fallback if the cursor can't be located (e.g. collapsed by dedup).
|
|
2842
|
+
const clippedResourceSource = useMemo(() => {
|
|
2843
|
+
if (workstreamSourceSorted.length === 0) return workstreamSourceSorted;
|
|
2844
|
+
const cursorMessage = messages[messages.length - 1];
|
|
2845
|
+
if (!cursorMessage) return [];
|
|
2846
|
+
const cursorIndex = workstreamSourceSorted.indexOf(cursorMessage);
|
|
2847
|
+
if (cursorIndex >= 0) {
|
|
2848
|
+
return cursorIndex >= workstreamSourceSorted.length - 1
|
|
2849
|
+
? workstreamSourceSorted
|
|
2850
|
+
: workstreamSourceSorted.slice(0, cursorIndex + 1);
|
|
2851
|
+
}
|
|
2852
|
+
const cursorTs = getTimestampMs(cursorMessage.timestamp);
|
|
2853
|
+
return workstreamSourceSorted.filter((m) => getTimestampMs(m.timestamp) <= cursorTs);
|
|
2854
|
+
}, [workstreamSourceSorted, messages]);
|
|
2855
|
+
const isLatestResourceTurnComplete = useMemo(
|
|
2856
|
+
() => isCompleted || isResourceSummaryReady(clippedResourceSource),
|
|
2857
|
+
[isCompleted, clippedResourceSource],
|
|
2858
|
+
);
|
|
2859
|
+
const turnResourceSummaries = useMemo(() => segmentTurnResources(clippedResourceSource), [clippedResourceSource]);
|
|
2860
|
+
|
|
2770
2861
|
// Split streaming messages:
|
|
2771
2862
|
// - complete (or stale incomplete) ones are interleaved chronologically
|
|
2772
2863
|
// - actively incomplete ones render at the end
|
|
@@ -2836,6 +2927,19 @@ function AllMessagesMixedComponent({
|
|
|
2836
2927
|
[visibleSummaryDisplayMessages, isDisplayCompleted, latestSummaryObservedTimestamp],
|
|
2837
2928
|
);
|
|
2838
2929
|
|
|
2930
|
+
// Interleave per-turn resource summaries into the sliding (summary) timeline, mirroring the
|
|
2931
|
+
// stacked view. Turn boundaries are user QUESTION message items.
|
|
2932
|
+
const slidingRenderItems = React.useMemo(
|
|
2933
|
+
() =>
|
|
2934
|
+
interleaveTurnSummaries(
|
|
2935
|
+
summaryConversationItems,
|
|
2936
|
+
(item) => item.type === 'message' && item.message.type === AgentMessageType.QUESTION,
|
|
2937
|
+
turnResourceSummaries,
|
|
2938
|
+
isLatestResourceTurnComplete,
|
|
2939
|
+
),
|
|
2940
|
+
[summaryConversationItems, turnResourceSummaries, isLatestResourceTurnComplete],
|
|
2941
|
+
);
|
|
2942
|
+
|
|
2839
2943
|
// Group messages with ONLY complete streaming interleaved for stacked view.
|
|
2840
2944
|
// Incomplete streaming is rendered separately at the end (avoids re-grouping on every chunk).
|
|
2841
2945
|
// Assistant prose stays as its own timeline item so thoughts remain visible between tool calls.
|
|
@@ -2847,6 +2951,19 @@ function AllMessagesMixedComponent({
|
|
|
2847
2951
|
[displayMessages, completeStreaming, activeWorkstream],
|
|
2848
2952
|
);
|
|
2849
2953
|
|
|
2954
|
+
// Interleave per-turn resource summaries into the stacked timeline. Turn boundaries are user
|
|
2955
|
+
// QUESTION groups; turn N's resources come from the full-stream segmentation.
|
|
2956
|
+
const stackedRenderItems = React.useMemo(
|
|
2957
|
+
() =>
|
|
2958
|
+
interleaveTurnSummaries(
|
|
2959
|
+
groupedMessages,
|
|
2960
|
+
(group) => group.type === 'single' && group.message.type === AgentMessageType.QUESTION,
|
|
2961
|
+
turnResourceSummaries,
|
|
2962
|
+
isLatestResourceTurnComplete,
|
|
2963
|
+
),
|
|
2964
|
+
[groupedMessages, turnResourceSummaries, isLatestResourceTurnComplete],
|
|
2965
|
+
);
|
|
2966
|
+
|
|
2850
2967
|
// Show an activity indicator when the latest visible conversation state is not terminal.
|
|
2851
2968
|
// Older idle/complete messages from previous turns must not suppress the new turn.
|
|
2852
2969
|
const isAgentWorking = useMemo(() => {
|
|
@@ -2857,6 +2974,18 @@ function AllMessagesMixedComponent({
|
|
|
2857
2974
|
return !isDisplayCompleted || hasOpenUserTurn(completionDisplayMessages);
|
|
2858
2975
|
}, [completionDisplayMessages, isDisplayCompleted]);
|
|
2859
2976
|
|
|
2977
|
+
const showPostToolThinking = useMemo(() => {
|
|
2978
|
+
if (!isAgentWorking || incompleteStreaming.length > 0) return false;
|
|
2979
|
+
|
|
2980
|
+
const latestSummaryItem = summaryConversationItems[summaryConversationItems.length - 1];
|
|
2981
|
+
const latestMessage = completionDisplayMessages[completionDisplayMessages.length - 1];
|
|
2982
|
+
const latestMessageShowsThinking =
|
|
2983
|
+
latestMessage !== undefined &&
|
|
2984
|
+
(latestMessage.details?.display_role === 'thinking' ||
|
|
2985
|
+
(isToolActivityMessage(latestMessage) && latestMessage.details?.tool_status === 'completed'));
|
|
2986
|
+
return latestSummaryItem?.type === 'work' && latestSummaryItem.isActive && latestMessageShowsThinking;
|
|
2987
|
+
}, [completionDisplayMessages, incompleteStreaming.length, isAgentWorking, summaryConversationItems]);
|
|
2988
|
+
|
|
2860
2989
|
const showActivityFallback = shouldShowSummaryActivityFallback(
|
|
2861
2990
|
summaryConversationItems,
|
|
2862
2991
|
isAgentWorking,
|
|
@@ -3299,8 +3428,19 @@ function AllMessagesMixedComponent({
|
|
|
3299
3428
|
{viewMode === 'stacked' ? (
|
|
3300
3429
|
// Details view - show ALL messages with streaming interleaved
|
|
3301
3430
|
<>
|
|
3302
|
-
{
|
|
3303
|
-
const isLastGroup = groupIndex ===
|
|
3431
|
+
{stackedRenderItems.map((group, groupIndex) => {
|
|
3432
|
+
const isLastGroup = groupIndex === stackedRenderItems.length - 1;
|
|
3433
|
+
|
|
3434
|
+
if (group.type === 'resource_summary') {
|
|
3435
|
+
return (
|
|
3436
|
+
<ResourceChangeSummary
|
|
3437
|
+
key={group.key}
|
|
3438
|
+
resources={group.resources}
|
|
3439
|
+
workflowRunId={artifactRunId}
|
|
3440
|
+
className="my-2"
|
|
3441
|
+
/>
|
|
3442
|
+
);
|
|
3443
|
+
}
|
|
3304
3444
|
|
|
3305
3445
|
if (group.type === 'tool_group') {
|
|
3306
3446
|
// Render grouped tool calls
|
|
@@ -3373,7 +3513,7 @@ function AllMessagesMixedComponent({
|
|
|
3373
3513
|
message={message}
|
|
3374
3514
|
startTimestamp={
|
|
3375
3515
|
getPreviousRenderableGroupTimestamp(
|
|
3376
|
-
|
|
3516
|
+
stackedRenderItems,
|
|
3377
3517
|
groupIndex,
|
|
3378
3518
|
) ?? message.timestamp
|
|
3379
3519
|
}
|
|
@@ -3409,6 +3549,7 @@ function AllMessagesMixedComponent({
|
|
|
3409
3549
|
message={message}
|
|
3410
3550
|
showPulsatingCircle={isLatestMessage}
|
|
3411
3551
|
onSendMessage={onSendMessage}
|
|
3552
|
+
onOpenArtifact={onOpenArtifact}
|
|
3412
3553
|
requestInputAnswered={isRequestInputAnswered(
|
|
3413
3554
|
message,
|
|
3414
3555
|
answeredRequestInputKeys,
|
|
@@ -3469,7 +3610,18 @@ function AllMessagesMixedComponent({
|
|
|
3469
3610
|
) : (
|
|
3470
3611
|
// Summary view - conversation turns with per-turn work disclosure
|
|
3471
3612
|
<>
|
|
3472
|
-
{
|
|
3613
|
+
{slidingRenderItems.map((item) => {
|
|
3614
|
+
if (item.type === 'resource_summary') {
|
|
3615
|
+
return (
|
|
3616
|
+
<ResourceChangeSummary
|
|
3617
|
+
key={item.key}
|
|
3618
|
+
resources={item.resources}
|
|
3619
|
+
workflowRunId={artifactRunId}
|
|
3620
|
+
className="my-2"
|
|
3621
|
+
/>
|
|
3622
|
+
);
|
|
3623
|
+
}
|
|
3624
|
+
|
|
3473
3625
|
if (item.type === 'work') {
|
|
3474
3626
|
if (hideToolCallsInViewMode?.includes(viewMode)) return null;
|
|
3475
3627
|
const isThinkingOnlyWork = isTransientThinkingWork(item.messages);
|
|
@@ -3529,6 +3681,7 @@ function AllMessagesMixedComponent({
|
|
|
3529
3681
|
<SummaryMessage
|
|
3530
3682
|
message={message}
|
|
3531
3683
|
onSendMessage={onSendMessage}
|
|
3684
|
+
onOpenArtifact={onOpenArtifact}
|
|
3532
3685
|
onSelectWorkstream={handleSelectWorkstream}
|
|
3533
3686
|
requestInputAnswered={isRequestInputAnswered(
|
|
3534
3687
|
message,
|
|
@@ -3549,6 +3702,17 @@ function AllMessagesMixedComponent({
|
|
|
3549
3702
|
artifactRunId={artifactRunId}
|
|
3550
3703
|
/>
|
|
3551
3704
|
))}
|
|
3705
|
+
{showPostToolThinking && (
|
|
3706
|
+
<div
|
|
3707
|
+
className={cn(
|
|
3708
|
+
'mx-auto w-full max-w-3xl px-1 text-sm text-muted',
|
|
3709
|
+
workingIndicatorClassName,
|
|
3710
|
+
)}
|
|
3711
|
+
data-testid="post-tool-thinking-indicator"
|
|
3712
|
+
>
|
|
3713
|
+
{t('agent.thinking')}
|
|
3714
|
+
</div>
|
|
3715
|
+
)}
|
|
3552
3716
|
{/* Activity fallback - shown before any tool/thought message has arrived */}
|
|
3553
3717
|
{showActivityFallback && !showInitialRequestWaitingCard && (
|
|
3554
3718
|
<SummaryActivityRow
|