/** * Swarm Task Queue Database * * SQLite-based task queue for Swarm multi-agent coordination. * Provides atomic task claiming, dependency tracking, and lease expiration. * * Features: * - Atomic task claiming with transactions * - Wave-based task sequencing * - File ownership tracking (conflict detection) * - Dependency resolution (task DAG) * - Stale lease expiration (fault tolerance) * * @module swarm-db * @version 1.0 */ import { type SQLiteDatabase } from '../../sqlite.js'; /** * Swarm task record */ export interface SwarmTask { id: string; session_id: string; description: string; category: string; priority: number; wave: number; status: 'pending' | 'claimed' | 'completed' | 'failed'; claimed_by: string | null; claimed_at: number | null; completed_at: number | null; result: string | null; files_owned: string | null; depends_on: string | null; retry_count: number; } /** * Parameters for creating a new task */ export interface CreateTaskParams { session_id: string; description: string; category: string; priority?: number; wave: number; files_owned?: string[]; depends_on?: string[]; } /** * Initialize Swarm database * * Creates swarm_tasks table if not exists. * Does NOT use WAL mode to avoid conflicts with existing databases. * * @param dbPath - Path to SQLite database file * @returns Database instance * @throws {Error} If database file cannot be opened (invalid path, permissions, etc.) */ export declare function initSwarmDb(dbPath: string): SQLiteDatabase; /** * Create a new task * * @param db - Database instance * @param params - Task parameters * @returns Task ID (UUID) */ export declare function createTask(db: SQLiteDatabase, params: CreateTaskParams): string; /** * Atomically claim a task * * Uses transaction to ensure only one agent can claim a task. * Verifies task is 'pending' before claiming. * * @param db - Database instance * @param taskId - Task ID to claim * @param agentId - Agent claiming the task * @returns true if claimed successfully, false if already claimed */ export declare function claimTask(db: SQLiteDatabase, taskId: string, agentId: string): boolean; /** * Mark a task as completed * * @param db - Database instance * @param taskId - Task ID * @param result - Optional result data (JSON string or plain text) * @returns true if updated successfully */ export declare function completeTask(db: SQLiteDatabase, taskId: string, result?: string): boolean; /** * Mark a task as failed * * @param db - Database instance * @param taskId - Task ID * @param result - Optional error message or failure details * @returns true if updated successfully */ export declare function failTask(db: SQLiteDatabase, taskId: string, result?: string): boolean; /** * Mark a pending task as failed (for dependency propagation) * * Used when a task's dependency fails and the task hasn't been claimed yet. * * @param db - Database instance * @param taskId - Task ID * @param result - Optional error message or failure details * @returns true if updated successfully */ export declare function failPendingTask(db: SQLiteDatabase, taskId: string, result?: string): boolean; /** * Retry a failed task * * Resets task status to pending and increments retry_count. * Used for automatic retry on task failure. * * @param db - Database instance * @param taskId - Task ID * @returns true if task was reset to pending */ export declare function retryTask(db: SQLiteDatabase, taskId: string): boolean; /** * Defer a claimed task back to pending without incrementing retry_count * * Used when agent process is busy (not ready to accept new requests). * Unlike retryTask(), this does NOT increment retry_count. * * @param db - Database instance * @param taskId - Task ID to defer * @returns true if task was deferred, false otherwise */ export declare function deferTask(db: SQLiteDatabase, taskId: string): boolean; /** * Get all tasks for a session * * @param db - Database instance * @param sessionId - Session ID * @returns Array of tasks */ export declare function getTasksBySession(db: SQLiteDatabase, sessionId: string): SwarmTask[]; /** * Get pending tasks for a session * * Optionally filter by wave number. * * @param db - Database instance * @param sessionId - Session ID * @param wave - Optional wave number filter * @returns Array of pending tasks */ export declare function getPendingTasks(db: SQLiteDatabase, sessionId: string, wave?: number): SwarmTask[]; /** * Expire stale claimed tasks * * Returns claimed tasks older than maxAgeMs to pending status. * This handles agent crashes or hung processes. * * @param db - Database instance * @param maxAgeMs - Maximum age for claimed tasks (default: 15 minutes) * @returns Number of expired tasks */ export declare function expireStaleLeases(db: SQLiteDatabase, maxAgeMs?: number): number; /** * Parse files_owned JSON array from task record * * @param task - Swarm task record * @returns Array of file paths, or empty array if null/invalid */ export declare function parseFilesOwned(task: SwarmTask): string[]; /** * Parse depends_on JSON array from task record * * @param task - Swarm task record * @returns Array of task IDs, or empty array if null/invalid */ export declare function parseDependsOn(task: Pick): string[]; //# sourceMappingURL=swarm-db.d.ts.map