import type { ConversationStreamRecord } from './conversation-stream.js'; import type { JsonValue } from './types.js'; export type ConversationMessageRole = 'user' | 'assistant' | 'system'; export type ConversationMessagePurpose = 'user' | 'assistant' | 'dispatch' | 'advisory'; export type ConversationMessageDisplay = 'visible' | 'hidden' | 'diagnostic'; export type ConversationPart = { type: 'text'; text: string; state: 'streaming' | 'done'; } | { type: 'reasoning'; text: string; state: 'streaming' | 'done'; } | { type: 'file'; mediaType: string; id?: string; size?: number; filename?: string; } | ({ type: 'dynamic-tool'; toolName: string; toolCallId: string; } & ({ state: 'input-streaming'; inputText: string; } | { state: 'input-available'; input: unknown; } | { state: 'output-available'; input: unknown; output: unknown; durationMs?: number; } | { state: 'output-error'; input: unknown; errorText: string; durationMs?: number; })) | { type: `data-${string}`; data: unknown; }; export interface ConversationMessage { id: string; createdAt?: string; role: ConversationMessageRole; purpose: ConversationMessagePurpose; display: ConversationMessageDisplay; submissionId?: string; turnId?: string; signal?: { type: string; tagName?: string; attributes?: Record; }; parts: ConversationPart[]; metadata?: Record; } export interface ConversationSettlement { submissionId: string; outcome: 'completed' | 'failed' | 'aborted'; error?: string; answeredBySubmissionId?: string; } export interface ConversationSnapshot { messages: ConversationMessage[]; settlements: ConversationSettlement[]; } export interface ConversationReply { submissionId: string; /** Resolved persistent-instance generation when supplied by a transport status response. */ uid?: string; /** Host submission whose assistant turn answered this joined delivery. */ answeredBySubmissionId?: string; text: string; data: Record; metadata?: Record; } /** Project canonical session records into a stable, UI-oriented protocol. */ export declare function projectConversationRecords(records: readonly ConversationStreamRecord[]): ConversationSnapshot; /** * Read the canonical assistant reply for a durable submission. * * Submission ids are used when available. The positional fallback supports * conversations written by older Harness servers that predate submission * correlation on individual entries. */ export declare function readConversationReply(snapshot: ConversationSnapshot, submissionId: string): ConversationReply; //# sourceMappingURL=conversation-ui.d.ts.map