import * as react from 'react'; import { ReactNode, Ref, JSX } from 'react'; import { c as AgentConversationVM, h as WorkspaceLinkAction, g as WorkspaceAgentSessionDetailViewModel } from '../workspaceLinkActions.d-gJPVQnM0.js'; export { B as BuildWorkspaceAgentSessionDetailInput, W as WorkspaceAgentActivityCard, f as WorkspaceAgentActivityTimelineItem, i as buildWorkspaceAgentSessionDetailViewModel } from '../workspaceLinkActions.d-gJPVQnM0.js'; import { e as AgentGUIProviderSkillOption, i as AgentMessageMarkdownWorkspaceAppIcon } from '../agentGuiNodeTypes.d-B2xk381A.js'; import { AgentConversationFollowEndMode } from './follow-end.js'; import { AgentActivityMessage } from '@tutti-os/agent-activity-core'; import '@tutti-os/workspace-issue-manager/core'; import '../types.d-J0XWegqK.js'; import '../agentSession.d-4jwjFmc1.js'; import '../planImplementationPresentation.d-BxVOLt6A.js'; import '@tutti-os/workspace-user-project/contracts'; interface AgentMessageMarkdownAgentTarget { agentTargetId: string; iconUrl?: string | null; maskIconUrl?: string | null; name?: string | null; provider?: string | null; workspaceId?: string | null; } interface AgentConversationParticipantIdentity { name: string; avatarUrl?: string | null; } type AgentConversationParticipantPresentation = { enabled: false; } | { enabled: true; status: "loading"; } | { enabled: true; status: "ready"; user: AgentConversationParticipantIdentity; agent: AgentConversationParticipantIdentity; }; interface AgentTranscriptTurnAttachment { id: string; anchorTurnId: string | null; /** * Anchored timeline chrome should stay absent until its Turn page is loaded. * Existing workflow attachments retain the historical trailing fallback. */ missingAnchorBehavior?: "trailing" | "hide"; content: ReactNode; } type AgentTranscriptAttachmentLocator = (attachmentId: string) => void; interface AgentTranscriptVirtualScrollController { agentSessionId: string; enabled: boolean; isAtEnd(threshold?: number): boolean; scrollToOffset(offset: number, options?: { behavior?: ScrollBehavior; }): void; scrollToEnd(options?: { behavior?: ScrollBehavior; }): void; } interface AgentUserMessageEditRetryControl { pending: boolean; labels: { edit: string; cancel: string; submit: string; }; onSubmit: (input: { editedText: string; turnId: string; }) => boolean | Promise; } interface AgentTranscriptEditRetryControl extends AgentUserMessageEditRetryControl { agentSessionId: string; eligibleTurnId: string; } interface AgentTranscriptViewProps { conversation: AgentConversationVM; isVisible?: boolean; editRetry?: AgentTranscriptEditRetryControl; turnAttachments?: readonly AgentTranscriptTurnAttachment[]; turnAttachmentLocatorRef?: Ref; onTurnAttachmentVisibilityChange?: (attachmentId: string, visible: boolean) => void; onLinkAction?: (action: WorkspaceLinkAction) => void; onAuthLogin?: (provider?: string | null) => void; onForkThroughTurn?: (turnId: string) => void; availableSkills?: readonly AgentGUIProviderSkillOption[]; workspaceAppIcons?: readonly AgentMessageMarkdownWorkspaceAppIcon[]; showRawTimelineJson?: boolean; participantPresentation?: AgentConversationParticipantPresentation; followEndMode?: AgentConversationFollowEndMode; forkThroughTurnPendingTurnIds?: readonly string[]; virtualListLayoutRevision?: number; virtualScrollControllerRef?: Ref; labels: { toolCallsLabel: (count: number) => string; thinkingLabel: string; processing: string; turnSummary: string; rawTimelineJson?: string; userMessageLocator?: string; }; } declare const AgentTranscriptView: react.MemoExoticComponent<({ conversation, isVisible, editRetry, turnAttachments, turnAttachmentLocatorRef, onTurnAttachmentVisibilityChange, onLinkAction, onAuthLogin, onForkThroughTurn, availableSkills, workspaceAppIcons, showRawTimelineJson, participantPresentation, followEndMode, forkThroughTurnPendingTurnIds, virtualListLayoutRevision, virtualScrollControllerRef, labels }: AgentTranscriptViewProps) => JSX.Element>; interface AgentConversationFlowProps { conversation: AgentConversationVM | null; editRetry?: AgentTranscriptEditRetryControl; turnAttachments?: readonly AgentTranscriptTurnAttachment[]; turnAttachmentLocatorRef?: Ref; onTurnAttachmentVisibilityChange?: (attachmentId: string, visible: boolean) => void; isLoading: boolean; isVisible?: boolean; loadingLabel: string; loadingTestId?: string; empty: ReactNode; onLinkAction?: (action: WorkspaceLinkAction) => void; onAuthLogin?: (provider?: string | null) => void; onForkThroughTurn?: (turnId: string) => void; availableSkills?: readonly AgentGUIProviderSkillOption[]; agentTargets?: readonly AgentMessageMarkdownAgentTarget[]; workspaceAppIcons?: readonly AgentMessageMarkdownWorkspaceAppIcon[]; showRawTimelineJson?: boolean; participantPresentation?: AgentConversationParticipantPresentation; followEndMode?: AgentConversationFollowEndMode; forkThroughTurnPendingTurnIds?: readonly string[]; virtualListLayoutRevision?: number; virtualScrollControllerRef?: Ref; labels: { toolCallsLabel: (count: number) => string; thinkingLabel: string; processing: string; turnSummary: string; rawTimelineJson?: string; userMessageLocator?: string; }; } declare const AgentConversationFlow: react.MemoExoticComponent<({ conversation, editRetry, turnAttachments, turnAttachmentLocatorRef, onTurnAttachmentVisibilityChange, isLoading, isVisible, loadingLabel, loadingTestId, empty, onLinkAction, onAuthLogin, onForkThroughTurn, availableSkills, agentTargets, workspaceAppIcons, showRawTimelineJson, participantPresentation, followEndMode, forkThroughTurnPendingTurnIds, virtualListLayoutRevision, virtualScrollControllerRef, labels }: AgentConversationFlowProps) => JSX.Element>; interface AgentConversationProjectionOptions { avoidGroupingEdits?: boolean; } declare function projectAgentConversationVM(detail: WorkspaceAgentSessionDetailViewModel, options?: AgentConversationProjectionOptions): AgentConversationVM; declare function reconcileProjectedAgentConversationVM(previous: AgentConversationVM | null | undefined, next: AgentConversationVM): AgentConversationVM; declare function useProjectedAgentConversation({ conversation, detail, avoidGroupingEdits }: { conversation?: AgentConversationVM | null; detail?: WorkspaceAgentSessionDetailViewModel | null; avoidGroupingEdits?: boolean; }): AgentConversationVM | null; declare function AgentTranscriptSkeleton({ label, testId }: { label: string; testId?: string; }): React.JSX.Element; interface WorkspaceAgentSessionDetailProps { detail: WorkspaceAgentSessionDetailViewModel; avoidGroupingEdits?: boolean; isLoading: boolean; timelineItemCount: number; agentTargets?: readonly AgentMessageMarkdownAgentTarget[]; onLinkAction?: (action: WorkspaceLinkAction) => void; toolCallsLabel: (count: number) => string; thinkingLabel?: string; loadingLabel?: string; rawTimelineJsonLabel?: string; showRawTimelineJson?: boolean; participantPresentation?: AgentConversationParticipantPresentation; } declare function WorkspaceAgentSessionDetail({ detail, avoidGroupingEdits, isLoading, timelineItemCount, agentTargets, onLinkAction, toolCallsLabel, thinkingLabel, loadingLabel, rawTimelineJsonLabel, showRawTimelineJson, participantPresentation }: WorkspaceAgentSessionDetailProps): JSX.Element; type AgentGUIConversationCopyAction = "copy-markdown" | "copy-reference"; interface AgentGUIConversationCopyLabels { file: string; image: string; mentionPrefix: string; /** Template for the collapsed-interim summary; contains `{{count}}`. */ previousMessages: string; } interface AgentGUIConversationAttachment { data: string; mimeType: string; name?: string; } /** Hydrates a local workspace image path into base64 bytes at copy time. */ type AgentGUIConversationLocalImageReader = (input: { path: string; mimeType: string | null; }) => Promise; interface AgentGUIConversationSerializedTranscript { /** Hydrated variant for the text/html flavor: images embed as data URIs. */ hydratedMarkdown: string; /** Lean variant for text/plain: short image references, never base64. */ markdown: string; /** Hydratable images left unembedded (oversized or failed reads). */ omittedImages: number; } declare function serializeAgentConversationForClipboard(input: { labels: AgentGUIConversationCopyLabels; messages: readonly AgentActivityMessage[]; readAttachment?: (attachmentId: string) => Promise; readLocalImage?: AgentGUIConversationLocalImageReader; title: string; }): Promise; export { type AgentMessageMarkdownAgentTarget as AgentConversationAgentTargetPresentation, AgentConversationFlow, type AgentConversationFlowProps, type AgentConversationParticipantIdentity, type AgentConversationParticipantPresentation, AgentConversationVM, type AgentGUIConversationAttachment, type AgentGUIConversationCopyAction, type AgentGUIConversationCopyLabels, type AgentGUIConversationLocalImageReader, type AgentGUIConversationSerializedTranscript, AgentTranscriptSkeleton, AgentTranscriptView, type AgentTranscriptViewProps, WorkspaceAgentSessionDetail, type WorkspaceAgentSessionDetailProps, WorkspaceAgentSessionDetailViewModel, projectAgentConversationVM, reconcileProjectedAgentConversationVM, serializeAgentConversationForClipboard, useProjectedAgentConversation };