import type { Message } from '../providers/index.js'; import { type AgentObserverEvent } from './AgentObserverBus.js'; export interface SessionMeta { id: string; title?: string; platform?: string; userKey?: string; channelId?: string; model?: string; provider?: string; cwd?: string; status?: string; } export interface SessionSummary { id: string; title: string; savedAt: string; messageCount: number; preview: string; platform?: string; userKey?: string; snippet?: string; } export interface MessagePage { messages: Message[]; oldestCursor?: number; hasMore: boolean; } export interface StoredToolEvent { sessionId: string; turnId: string; toolCallId?: string; toolName: string; phase: 'start' | 'end' | 'chunk'; args?: Record; result?: string; resultPath?: string; status?: 'running' | 'success' | 'error' | 'timeout' | 'cancelled'; durationMs?: number; errorType?: string; } export type EvidenceStatus = 'passed' | 'failed' | 'skipped'; export interface EvidenceItem { id?: number; sessionId: string; turnId?: string; kind: 'typecheck' | 'build' | 'test' | 'lint' | 'manual' | 'source' | 'deploy' | 'other'; label: string; command?: string; target?: string; status: EvidenceStatus; result?: string; resultPath?: string; errorType?: string; createdAt?: string; } export interface ToolUsageStat { toolName: string; total: number; success: number; failed: number; successRate: number; averageDurationMs: number; topErrorType?: string; } export interface WorkflowPattern { name: string; sequence: string[]; count: number; successfulSessions: number; candidateSkill: boolean; } export interface ScheduledJob { id: string; schedule: string; prompt: string; status: 'active' | 'paused'; targetPlatform?: string; targetChannelId?: string; targetReplyTo?: string; createdAt: string; updatedAt: string; lastRunAt?: string; nextRunHint?: string; } export interface ScheduledJobRun { id?: number; jobId: string; startedAt: string; finishedAt?: string; status: 'running' | 'success' | 'error'; result?: string; error?: string; } export interface AgentJobSummary { id: string; kind: string; prompt: string; status: 'running' | 'success' | 'error'; totalAgents?: number; completedAgents?: number; startedAt: string; finishedAt?: string; lastStatus?: string; } export interface StoredObserverEvent extends AgentObserverEvent { id?: number; } export declare function redactSessionText(input: unknown): string; export declare function getSessionStore(dbPath?: string): Promise; export declare function installObserverBusSessionSink(): void; export declare class SessionStore { private db; private dbPath; private ftsAvailable; private diskSignature; private writeSequence; private constructor(); static open(dbPath?: string): Promise; private getDiskSignature; private reloadFromDisk; private refreshForRead; private acquireWriteLock; private withWriteLock; get path(): string; private addColumnIfMissing; private migrate; private detectFtsAvailability; private persist; private indexText; upsertSession(meta: SessionMeta): void; setSessionTitle(sessionId: string, title: string): void; appendMessage(input: { sessionId: string; turnId?: string; message: Message; metadata?: Record; }): void; recordObserverEvent(event: StoredObserverEvent): void; listObserverEvents(filter?: { sessionId?: string; jobId?: string; }, limit?: number): StoredObserverEvent[]; recordToolEvent(event: StoredToolEvent): void; recordEvidenceItem(item: EvidenceItem): number; listEvidenceItems(sessionId: string, limit?: number, turnId?: string): EvidenceItem[]; loadToolEvents(sessionId: string): StoredToolEvent[]; getToolUsageStats(limit?: number): ToolUsageStat[]; detectWorkflowPatterns(limit?: number): WorkflowPattern[]; upsertScheduledJob(job: Omit & Partial>): ScheduledJob; listScheduledJobs(includePaused?: boolean): ScheduledJob[]; removeScheduledJob(id: string): boolean; recordScheduledJobRun(run: ScheduledJobRun): number; recordAgentJobStart(job: AgentJobSummary): void; updateAgentJob(id: string, patch: Partial): void; listAgentJobs(limit?: number): AgentJobSummary[]; private readAgentJobs; listSessions(limit?: number): SessionSummary[]; private readSessions; searchSessions(query: string, limit?: number): SessionSummary[]; private rowsToSummaries; getLatestSession(filter?: string): SessionSummary | null; loadSession(sessionId: string): Message[]; private readSession; loadSessionPage(sessionId: string, options?: { beforeId?: number; limit?: number; }): MessagePage; saveSnapshot(sessionId: string, messages: Message[], meta?: Partial): void; } //# sourceMappingURL=SessionStore.d.ts.map