import type { MemoryContext, MemoryWrite } from "./types.js"; export type SessionEventKind = "user-correction" | "decision" | "preference" | "incident-resolved" | "fact-discovered" | "task-opened" | "task-resolved" | "project-state"; export interface SessionObservation { id: string; kind: SessionEventKind; context: MemoryContext; occurredAt: string; source: string; payload: Record; } export interface CandidateMemory { id: string; observationIds: string[]; memory: MemoryWrite; confidence: number; status: "pending" | "approved" | "consolidating" | "rejected" | "promoted" | "expired"; reasons: string[]; } export interface CandidateStatusSummary { pending: number; approved: number; consolidating: number; rejected: number; promoted: number; expired: number; } export interface CandidateReviewItem { id: string; type: MemoryWrite["type"]; title: string; content: string; scope: MemoryWrite["scope"]; confidence?: number; status: CandidateMemory["status"]; createdAt: string; reasons: string[]; } export interface ObservationStore { persistCandidate(observation: SessionObservation, candidate: CandidateMemory, options?: { timeoutMs?: number; signal?: AbortSignal; }): Promise; candidateStatus(context: MemoryContext): Promise; } export interface CandidateReviewStore extends ObservationStore { listCandidates(status?: CandidateMemory["status"]): Promise; reviewCandidate(id: string, status: "approved" | "rejected"): Promise; } export declare function isObservationStore(value: unknown): value is ObservationStore; export interface CandidateExtractor { extract(observations: SessionObservation[], signal?: AbortSignal): Promise; } export interface CandidateValidator { validate(candidate: CandidateMemory, signal?: AbortSignal): Promise; } export interface ConsolidationPipeline { consolidate(candidates: CandidateMemory[], signal?: AbortSignal): Promise; }