import type { CaptureConfig, RememConfig } from "./config.js"; import type { CandidateExtractor, CandidateMemory, ObservationStore, SessionEventKind, SessionObservation } from "./observation.js"; import { type ResolvedTaskEpisode } from "./procedure.js"; import type { MemoryContext, MemoryProvider, RememLogger } from "./types.js"; export interface UserPromptCapture { host: "opencode-v1" | "opencode-v2" | "pi"; context: MemoryContext; sessionId: string; messageId?: string; text: string; } export interface CaptureClassification { kind: SessionEventKind; confidence: number; reason: string; } /** * Decides whether a screened user statement is durable enough to capture. * Hosts can provide a stronger local/model-backed policy later, while this * deterministic policy remains the zero-dependency fallback. */ export interface CapturePolicy { classify(text: string): CaptureClassification | undefined; } export declare const deterministicCapturePolicy: CapturePolicy; export interface CaptureExplanation { outcome: "idle" | "excluded" | "pending" | "promoted" | "failed"; kind?: SessionEventKind; confidence?: number; reason?: string; } export declare class DeterministicCandidateExtractor implements CandidateExtractor { private readonly config; private readonly policy; constructor(config: CaptureConfig, policy?: CapturePolicy); classify(text: string): CaptureClassification | undefined; extract(observations: SessionObservation[], _signal?: AbortSignal): Promise; } export declare class CaptureCoordinator { private readonly store; private readonly config; private readonly logger; private readonly promote?; private readonly extractor; private readonly queue; private drainPromise; private readonly shutdown; private static readonly maxExplanations; private readonly explanations; private readonly activeCaptureIds; private closed; constructor(store: ObservationStore, config: CaptureConfig, logger: RememLogger, promote?: ((candidate: CandidateMemory, signal: AbortSignal) => Promise) | undefined); explain(sessionId: string): CaptureExplanation; private recordExplanation; private finishCapture; enqueueResolvedTask(episode: ResolvedTaskEpisode): void; enqueue(input: UserPromptCapture): void; idle(): Promise; dispose(): Promise; private drain; } export declare function createCaptureCoordinator(providers: MemoryProvider[], config: RememConfig, logger: RememLogger): CaptureCoordinator | undefined;