import { ConversationMessage, ConversationToolCall } from "../generated/graphql-types.js";
export type ToolHandler = (args: any) => Promise<any>;
export interface AgentOptions {
    maxToolRounds?: number;
    timeout?: number;
}
export interface AgentMetrics {
    totalTime: number;
    llmTime?: number;
    toolTime?: number;
    ttft?: number;
    tokensPerSecond?: number;
    toolExecutions?: number;
    rounds?: number;
}
export interface ContextWindowUsage {
    usedTokens: number;
    maxTokens: number;
    percentage: number;
    remainingTokens: number;
}
export interface AgentResult {
    message: string;
    conversationId: string;
    conversationMessage?: ConversationMessage;
    toolCalls?: ConversationToolCall[];
    toolResults?: ToolCallResult[];
    metrics?: AgentMetrics;
    usage?: UsageInfo;
    contextWindow?: ContextWindowUsage;
    error?: AgentError;
}
export interface StreamAgentOptions {
    maxToolRounds?: number;
    abortSignal?: AbortSignal;
    smoothingEnabled?: boolean;
    chunkingStrategy?: "character" | "word" | "sentence";
    smoothingDelay?: number;
}
export interface ToolCallResult {
    id: string;
    name: string;
    arguments: any;
    result?: any;
    error?: string;
    duration?: number;
}
export interface UsageInfo {
    promptTokens: number;
    completionTokens: number;
    totalTokens: number;
    cost?: number;
    model?: string;
}
export interface AgentError {
    message: string;
    code?: string;
    recoverable: boolean;
    details?: any;
}
