/** * Atlas Rebuild Queue - Async rebuild infrastructure * * Provides event-driven Atlas rebuild with debouncing to handle * rapid Frame ingestion without blocking operations. * * Features: * - Event-driven: Frame ingestion triggers rebuild via callbacks * - Async: Rebuilds don't block Frame storage operations * - Debouncing: Batches multiple rapid Frame ingestions * - In-memory queue: Simple, fast, no external dependencies */ import type { Frame } from "../types/frame.js"; import { type Atlas } from "./rebuild.js"; /** * Callback functions for Atlas rebuild events */ export interface AtlasRebuildCallbacks { onFrameIngested?: (frame: Frame) => void; onRebuildStarted?: () => void; onRebuildCompleted?: (atlas: Atlas) => void; onRebuildFailed?: (error: Error) => void; } /** * Configuration for AtlasRebuildQueue */ export interface AtlasRebuildQueueConfig { /** Debounce interval in milliseconds (default: 5000 = 5s) */ debounceMs?: number; /** Whether to validate Atlas after rebuild (default: true) */ validateAfterRebuild?: boolean; /** Callback to fetch all frames for rebuild */ fetchFrames: () => Promise | Frame[]; /** Event callbacks */ callbacks?: AtlasRebuildCallbacks; } /** * Atlas Rebuild Queue * * Manages async Atlas rebuilds triggered by Frame ingestion events. * Implements debouncing to batch rapid Frame ingestions. * * Usage: * ```typescript * const queue = new AtlasRebuildQueue({ * fetchFrames: () => frameStore.getAllFrames(), * debounceMs: 5000, * callbacks: { * onRebuildCompleted: (atlas) => { * console.log('Atlas rebuilt:', atlas); * }, * }, * }); * * // Trigger rebuild when Frame is ingested * await frameStore.insertFrame(newFrame); * queue.notifyFrameIngested(newFrame); * ``` */ export declare class AtlasRebuildQueue { private config; private callbacks; private debounceTimer; private isRebuilding; private pendingRebuild; constructor(config: AtlasRebuildQueueConfig); /** * Notify queue that a Frame was ingested * * This triggers a debounced rebuild - if multiple Frames are ingested * rapidly, only one rebuild will occur after the debounce period. * * @param frame - The Frame that was ingested */ notifyFrameIngested(frame: Frame): void; /** * Trigger rebuild immediately (bypasses debounce) * * Useful for testing or manual rebuild triggers. */ triggerRebuild(): Promise; /** * Stop the queue and cancel any pending rebuilds */ stop(): void; /** * Check if rebuild is currently in progress */ isRebuildInProgress(): boolean; } /** * Create a simple Atlas rebuild queue * * Convenience factory function for creating a queue with sensible defaults. * * @param fetchFrames - Function to fetch all frames * @param debounceMs - Debounce interval in milliseconds (default: 5000) * @param callbacks - Event callbacks * @returns Atlas rebuild queue */ export declare function createAtlasRebuildQueue(fetchFrames: () => Promise | Frame[], debounceMs?: number, callbacks?: AtlasRebuildCallbacks): AtlasRebuildQueue;