/** * Database Adapter Types - Protocol definitions for persistence layer */ export interface DbMessage { id: string; sessionId: string; runId?: string; role: 'system' | 'user' | 'assistant' | 'tool'; content: string | null; name?: string; toolCallId?: string; toolCalls?: any[]; createdAt: number; metadata?: Record; } export interface DbToolCall { id: string; runId: string; name: string; arguments: string; result?: string; status: 'pending' | 'completed' | 'failed'; startedAt: number; completedAt?: number; error?: string; } export interface DbRun { id: string; sessionId: string; agentName?: string; status: 'pending' | 'running' | 'completed' | 'failed'; startedAt: number; completedAt?: number; error?: string; metadata?: Record; tokenUsage?: { promptTokens: number; completionTokens: number; totalTokens: number; }; } export interface DbSession { id: string; createdAt: number; updatedAt: number; metadata?: Record; } export interface DbSpan { id: string; traceId: string; parentId?: string; name: string; startedAt: number; completedAt?: number; status: 'pending' | 'running' | 'completed' | 'failed'; attributes?: Record; } export interface DbTrace { id: string; sessionId: string; runId?: string; agentName?: string; startedAt: number; completedAt?: number; status: 'pending' | 'running' | 'completed' | 'failed'; metadata?: Record; } /** * Database Adapter Protocol - Interface for persistence implementations */ export interface DbAdapter { createSession(session: DbSession): Promise; getSession(id: string): Promise; updateSession(id: string, updates: Partial): Promise; deleteSession(id: string): Promise; listSessions(limit?: number, offset?: number): Promise; saveMessage(message: DbMessage): Promise; getMessages(sessionId: string, limit?: number): Promise; deleteMessages(sessionId: string): Promise; createRun(run: DbRun): Promise; getRun(id: string): Promise; updateRun(id: string, updates: Partial): Promise; listRuns(sessionId: string, limit?: number): Promise; saveToolCall(toolCall: DbToolCall): Promise; getToolCalls(runId: string): Promise; createTrace(trace: DbTrace): Promise; getTrace(id: string): Promise; updateTrace(id: string, updates: Partial): Promise; createSpan(span: DbSpan): Promise; getSpans(traceId: string): Promise; updateSpan(id: string, updates: Partial): Promise; connect(): Promise; disconnect(): Promise; isConnected(): boolean; } /** * Async Database Adapter - For async-first implementations */ export interface AsyncDbAdapter extends DbAdapter { } /** * Database configuration */ export interface DbConfig { type: 'sqlite' | 'postgres' | 'redis' | 'memory'; connectionString?: string; path?: string; host?: string; port?: number; database?: string; username?: string; password?: string; }