import type { AgentRegistry } from "../agents.js"; import type { MemoryConfig } from "../config.js"; import { type ChatMessage, type OpencodeClient, type PluginEvent } from "../sdk.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 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 const SDK_READ_TIMEOUT_MS = 30000; export declare function sliceNewMessages(messages: readonly ChatMessage[], state: SessionExtractionState | undefined): ChatMessage[]; export declare function trimIncompleteTail(messages: readonly ChatMessage[]): ChatMessage[]; export declare function hasExtractableUserMessage(messages: readonly ChatMessage[]): boolean; export declare function buildConversationForExtraction(messages: readonly ChatMessage[], maxChars: number): string; export type ExtractionCoordinatorDeps = { store: MemoryStore; config: MemoryConfig; client: OpencodeClient | undefined; directory: string; owned: OwnedSessions; agents: AgentRegistry; log: Logger; now?: () => number; state?: ExtractionStateStore; lock?: MaintenanceLock; }; export declare class ExtractionCoordinator { private readonly deps; 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; onEvent(event: PluginEvent): void; onSessionIdle(sessionID: string): void; onSessionStatus(sessionID: string, status: string): void; onSessionDeleted(sessionID: string): void; recordSave(sessionID: string | undefined, fileName: string): string[] | undefined; isOwnedSession(sessionID: string | undefined): boolean; idle(): Promise; catchUp(): Promise; dispose(): void; private clearTimer; private warnLegacyShellHook; private enqueue; private snapshot; private advance; private runIncremental; }