src / types.ts
/**
* @file types.ts
* Shared type definitions for the persistent memory plugin.
*/
import type { MemoryCategory, MemoryScope } from "./constants";
export interface MemoryRecord {
id: string;
content: string;
category: MemoryCategory;
tags: string[];
confidence: number;
source: string;
scope: MemoryScope;
project: string | null;
createdAt: number;
updatedAt: number;
lastAccessedAt: number;
accessCount: number;
supersedes: string | null;
}
export interface MemoryRow {
id: string;
content: string;
category: string;
tags: string;
confidence: number;
source: string;
scope: string;
project: string | null;
created_at: number;
updated_at: number;
last_accessed_at: number;
access_count: number;
supersedes: string | null;
}
export interface ScoredMemory extends MemoryRecord {
relevanceScore: number;
decayScore: number;
compositeScore: number;
}
export type TfIdfVector = Map<string, number>;
export interface RetrievalResult {
memories: ScoredMemory[];
totalMatched: number;
queryTerms: string[];
timeTakenMs: number;
}
export interface MemoryConflict {
existingId: string;
existingContent: string;
newContent: string;
conflictType: "contradiction" | "update" | "duplicate";
resolution: "keep_both" | "supersede" | "skip";
}
export interface MemoryStats {
totalMemories: number;
byCategory: Record<string, number>;
oldestMemory: string | null;
newestMemory: string | null;
mostAccessed: { content: string; accessCount: number } | null;
totalTags: number;
dbSizeBytes: number;
}
export interface ExtractedFact {
content: string;
category: MemoryCategory;
tags: string[];
confidence: number;
}
export interface CandidateAssessment {
selectedIds: string[];
logVC: number;
tokenLen: number;
}
export interface MemoryPluginConfig {
autoInjectMemories: boolean;
contextMemoryCount: number;
enableAIExtraction: boolean;
enableConflictDetection: boolean;
memoryStoragePath: string;
decayHalfLifeDays: number;
}