export interface TextContent { type: "text"; text: string; textSignature?: string; } export interface ImageContent { type: "image"; data: string; mimeType: string; } export interface ToolCall { type: "toolCall"; id: string; name: string; arguments: Record; thoughtSignature?: string; } export interface UserMessage { role: "user"; content: string | (TextContent | ImageContent)[]; timestamp: number; } export interface AssistantMessage { role: "assistant"; content: (TextContent | ToolCall)[]; api: string; provider: string; model: string; usage: { input: number; output: number; cacheRead: number; cacheWrite: number; totalTokens: number; cost: { input: number; output: number; cacheRead: number; cacheWrite: number; total: number; }; }; stopReason: "stop" | "length" | "toolUse" | "error" | "aborted"; errorMessage?: string; timestamp: number; } export interface ToolResultMessage { role: "toolResult"; toolCallId: string; toolName: string; content: (TextContent | ImageContent)[]; details?: unknown; isError: boolean; timestamp: number; } export type AgentMessage = UserMessage | AssistantMessage | ToolResultMessage; export interface AgentToolResult { content: (TextContent | ImageContent)[]; details: T; } export interface AgentTool { name: string; description: string; parameters: TParameters; label?: string; execute: (toolCallId: string, params: Record, signal?: AbortSignal, onUpdate?: (details: TDetails) => void) => Promise>; } export type OAuthCredentials = { refresh: string; access: string; expires: number; [key: string]: unknown; };