import type { DiffPayload } from '../../utils/diff.js'; import type { ToolFailureClass } from '../trace/types.js'; export type MessageRole = 'user' | 'assistant'; export interface ResponseMetadata extends Record { sessionId?: string; stopReason?: string | null; resultSubtype?: string; durationMs?: number; durationApiMs?: number; totalCostUsd?: number; numTurns?: number; isError?: boolean; usage?: Record; modelUsage?: Record; permissionDenials?: unknown[]; errors?: string[]; successfulToolNames?: string[]; } export interface Message { role: MessageRole; content: string; metadata?: ResponseMetadata; timestamp?: Date; } export interface ContentChunk { type: 'content'; content: string; metadata?: Record; } export interface ToolUseChunk { type: 'tool_use'; content: string; metadata?: Record; } export interface ToolUseDetailChunk { type: 'tool_use_detail'; toolUseId: string; toolName: string; toolInput: string; toolInputRaw?: string; toolInputCapture?: string; pending?: true; metadata?: Record; } export interface ThinkingChunk { type: 'thinking'; content: string; metadata?: Record; } export interface ToolResultChunk { type: 'tool_result'; toolUseId: string; content: string; isError?: boolean; truncated?: boolean; persistedPath?: string; capturePath?: string; tailPreview?: string[]; hiddenLineCount?: number; exitCode?: number; sizeBytes?: number; sizeLabel?: string; lineCount?: number; durationMs?: number; display?: string; batchIndex?: number; batchSize?: number; failureClass?: ToolFailureClass; metadata?: Record; } export interface ToolDiffChunk { type: 'tool_diff'; toolUseId: string; diff: DiffPayload; metadata?: Record; } export type MessageChunk = ContentChunk | ToolUseChunk | ToolUseDetailChunk | ThinkingChunk | ToolResultChunk | ToolDiffChunk | { type: 'done' | 'error'; content?: string; metadata?: Record; }; export interface SendMessageOptions { stream?: boolean; metadata?: Record; } export interface StructuredMessageOptions extends SendMessageOptions { maxRetries?: number; injectSchemaPrompt?: boolean; }