interface Database {
// Messages
saveMessage(userId: string, role: string, content: string): void;
getHistory(userId: string, limit?: number): Message[];
getMessageCount(userId: string): number;
getMessageTimestamps(userId: string): number[];
deleteMessagesBefore(userId: string, beforeTimestamp: number): void;
deleteMessagesForUser(userId: string): void;
// Compactions
saveCompaction(userId: string, summary: string, replacedBefore: number): void;
getLatestCompaction(userId: string): CompactionRecord | null;
// Memory (key-value)
saveMemory(userId: string, key: string, value: string): void;
getMemory(userId: string): Record<string, string>;
// Sub-agents
saveSubAgent(record: SubAgentRecord): void;
getSubAgent(id: string): SubAgentRecord | null;
getActiveSubAgents(userId: string): SubAgentRecord[];
getAllSubAgents(userId: string, includeDeleted?: boolean): SubAgentRecord[];
updateSubAgent(id: string, updates: Partial<SubAgentRecord>): void;
deleteExpiredSubAgents(beforeTimestamp: number): number;
archiveStaleSuspended(inactiveBefore: number): number;
// Role templates
saveRoleTemplate(template: RoleTemplate): void;
getRoleTemplate(id: string): RoleTemplate | null;
getRoleTemplates(userId: string): RoleTemplate[];
updateRoleTemplate(id: string, updates: Partial<RoleTemplate>): void;
deleteRoleTemplate(id: string): void;
// Background tasks
saveBackgroundTask(record: BackgroundTask): void;
updateBackgroundTask(id: string, status: string, result: string | null, completedAt: number | null): void;
getUndeliveredTasks(userId: string): BackgroundTask[];
getUserBackgroundTasks(userId: string): BackgroundTask[];
getBackgroundTask(id: string): BackgroundTask | null;
markTaskDelivered(id: string): void;
getStaleBackgroundTasks(olderThanMs: number): BackgroundTask[];
// Episodic memory (v3)
saveEpisodicEvent(record: EpisodicRecord): void;
getEpisodicEvent(id: string): EpisodicRecord | null;
getEpisodicEvents(userId: string, limit?: number): EpisodicRecord[];
updateEpisodicEvent(id: string, updates: Partial<EpisodicRecord>): void;
deleteEpisodicEvents(ids: string[]): void;
searchEpisodicFTS(query: string, userId: string, limit?: number): Array<{ id: string; rank: number }>;
decayEpisodicImportance(userId: string, olderThanDays: number, decayFactor: number): number;
pruneEpisodicEvents(userId: string, maxImportance: number, maxAccessCount: number, olderThanMs: number): number;
// Task metrics
saveTaskMetric(record: TaskMetricRecord): void;
getTaskMetrics(taskType: string, tier: string, limit?: number): TaskMetricRecord[];
// Blackboard (v3)
saveBlackboardEntry(entry: BlackboardEntry): void;
getBlackboardEntry(id: string): BlackboardEntry | null;
getBlackboardProposals(problemId: string): BlackboardEntry[];
getActiveProblems(userId: string): BlackboardEntry[];
resolveBlackboardProblem(problemId: string, synthesis: string): void;
cleanupBlackboard(olderThanMs: number): number;
close(): void;
}