import type { MemoryConfig } from "../config.js"; import { type MemoryHost, SDK_READ_TIMEOUT_MS, type TranscriptMessage } from "../host/types.js"; import type { MemoryStore } from "../store/MemoryStore.js"; import { type Logger } from "../util/log.js"; import type { OwnedSessions } from "../util/ownedSessions.js"; import { AutoDream } from "./autodream.js"; import { MaintenanceLock } from "./lock.js"; import { ExtractionStateStore, type SessionExtractionState } from "./state.js"; export { SDK_READ_TIMEOUT_MS }; export declare const EXTRACTION_TITLE = "opencode-memory extraction"; export declare const FORK_GRACE_MS = 60000; export declare const MAX_EXTRACTION_FAILURES = 3; export declare const MIN_CONVERSATION_CHARS = 20; export declare function sliceNewMessages(messages: readonly M[], state: SessionExtractionState | undefined): M[]; export declare function trimIncompleteTail(messages: readonly M[]): M[]; export declare function hasExtractableUserMessage(messages: readonly TranscriptMessage[]): boolean; export declare function buildConversationForExtraction(messages: readonly TranscriptMessage[], maxChars: number): string; export type ExtractionCoordinatorDeps = { store: MemoryStore; config: MemoryConfig; host: MemoryHost | undefined; owned: OwnedSessions; log: Logger; now?: () => number; state?: ExtractionStateStore; lock?: MaintenanceLock; }; export declare class ExtractionCoordinator { protected readonly deps: ExtractionCoordinatorDeps; readonly state: ExtractionStateStore; readonly autodream: AutoDream | undefined; private readonly lock; private readonly now; private readonly timers; private readonly busy; private readonly inFlight; private readonly savedByFork; private readonly savedByMainAgent; private queue; private caughtUp; private disposed; constructor(deps: ExtractionCoordinatorDeps); get enabled(): boolean; onSessionIdle(sessionID: string): void; onSessionStatus(sessionID: string, status: string): void; onSessionDeleted(sessionID: string): void; recordSave(sessionID: string | undefined, fileName: string): string[] | undefined; recordDelete(sessionID: string | undefined, fileName: string): void; isOwnedSession(sessionID: string | undefined): boolean; idle(): Promise; catchUp(): Promise; dispose(): void; private updatedSessions; private knownSessions; private clearTimer; private warnLegacyShellHook; private enqueue; private snapshot; private advance; private runIncremental; }