import { type StreamChunk } from '@n8n/agents';
import type { ToolRegistry } from './tool-registry';
export interface RecordedUsage {
    promptTokens: number;
    completionTokens: number;
    totalTokens: number;
}
export interface RecordedToolCall {
    name: string;
    input: unknown;
    output: unknown;
}
export type TimelineEvent = {
    type: 'text';
    content: string;
    timestamp: number;
    endTime?: number;
} | {
    type: 'tool-call';
    kind: 'tool' | 'workflow' | 'node';
    name: string;
    toolCallId: string;
    input: unknown;
    output: unknown;
    startTime: number;
    endTime: number;
    success: boolean;
    workflowId?: string;
    workflowName?: string;
    workflowExecutionId?: string;
    triggerType?: string;
    nodeType?: string;
    nodeTypeVersion?: number;
    nodeDisplayName?: string;
    nodeParameters?: Record<string, unknown>;
} | {
    type: 'working-memory';
    content: string;
    timestamp: number;
} | {
    type: 'suspension';
    toolName: string;
    toolCallId: string;
    timestamp: number;
};
export interface MessageRecord {
    assistantResponse: string;
    model: string | null;
    finishReason: string;
    usage: RecordedUsage | null;
    totalCost: number | null;
    toolCalls: RecordedToolCall[];
    timeline: TimelineEvent[];
    startTime: number;
    duration: number;
    error: string | null;
    workingMemory: string | null;
}
export declare class ExecutionRecorder {
    private readonly registry;
    constructor(registry?: ToolRegistry);
    private textParts;
    private textBuffer;
    private model;
    private finishReason;
    private usage;
    private totalCost;
    private toolCalls;
    private timeline;
    private textStartTime;
    private _suspended;
    private error;
    private workingMemory;
    private readonly startTime;
    record(chunk: StreamChunk): void;
    get suspended(): boolean;
    getMessageRecord(): MessageRecord;
    private flushTextBuffer;
    private recordWorkingMemoryUpdate;
    private recordToolCall;
    private recordToolResult;
}
