import { ConversationMessage, ConversationToolCall } from "../generated/graphql-types.js";
/**
 * Tool execution status for streaming
 */
export type ToolExecutionStatus = "preparing" | "executing" | "ready" | "completed" | "failed";
/**
 * Context window usage event - emitted at start of agent interaction
 */
export type ContextWindowEvent = {
    type: "context_window";
    usage: {
        usedTokens: number;
        maxTokens: number;
        percentage: number;
        remainingTokens: number;
    };
    timestamp: Date;
};
/**
 * Simplified UI-focused streaming events using GraphQL types
 */
export type AgentStreamEvent = {
    type: "conversation_started";
    conversationId: string;
    timestamp: Date;
    model?: string;
} | ContextWindowEvent | {
    type: "message_update";
    message: Partial<ConversationMessage> & {
        message: string;
    };
    isStreaming: boolean;
    metrics?: {
        ttft?: number;
        elapsedTime: number;
        conversationDuration: number;
        tokenCount?: number;
        avgTokenDelay?: number;
        streamingThroughput?: number;
    };
} | {
    type: "tool_update";
    toolCall: ConversationToolCall;
    status: ToolExecutionStatus;
    result?: unknown;
    error?: string;
} | {
    type: "conversation_completed";
    message: ConversationMessage;
    metrics?: {
        ttft?: number;
        totalTime: number;
        conversationDuration: number;
        tokenCount?: number;
        llmTokens?: number;
        avgTokenDelay?: number;
        streamingThroughput?: number;
    };
    contextWindow?: {
        usedTokens: number;
        maxTokens: number;
        percentage: number;
        remainingTokens: number;
    };
} | {
    type: "error";
    error: {
        message: string;
        code?: string;
        recoverable?: boolean;
    };
    conversationId: string;
    timestamp: Date;
};
