import { EventEmitter } from 'events';
import { Task, TaskStatus } from './model.js';
/**
 * Storage for tasks
 */
export declare class TaskStorage extends EventEmitter {
    private tasks;
    private filePath;
    private isLoaded;
    private timeouts;
    /**
     * Create a new TaskStorage instance
     * @param filePath Path to the storage file (optional, defaults to ~/.mcp-think-tank/tasks.jsonl)
     */
    constructor(filePath?: string);
    /**
     * Add a new task
     * @param task Task to add
     * @returns Added task
     */
    add(task: Omit<Task, 'id' | 'created'>): Task;
    /**
     * Get a task by ID
     * @param id Task ID
     * @returns Task or undefined if not found
     */
    get(id: string): Task | undefined;
    /**
     * Get all tasks
     * @returns Array of tasks
     */
    getAll(): Task[];
    /**
     * Update a task
     * @param id Task ID
     * @param update Task update
     * @returns Updated task or undefined if not found
     */
    update(id: string, update: Partial<Omit<Task, 'id' | 'created'>>): Task | undefined;
    /**
     * Delete a task
     * @param id Task ID
     * @returns True if deleted, false if not found
     */
    delete(id: string): boolean;
    /**
     * Get tasks by status
     * @param status Task status
     * @returns Array of tasks with the given status
     */
    getByStatus(status: TaskStatus): Task[];
    /**
     * Get highest priority task with the given status
     * @param status Task status
     * @returns Highest priority task or undefined if none
     */
    getHighestPriority(status: TaskStatus): Task | undefined;
    /**
     * Get related tasks
     * @param taskId Task ID
     * @returns Array of tasks that depend on or are depended on by the given task
     */
    getRelatedTasks(taskId: string): Task[];
    /**
     * Set a task to automatically transition to the next status after a delay
     * @param taskId Task ID
     * @param delay Delay in milliseconds
     * @param targetStatus Target status
     */
    setAutoTransition(taskId: string, delay: number, targetStatus: TaskStatus): void;
    /**
     * Clear a task auto-transition timeout
     * @param taskId Task ID
     */
    clearTimeout(taskId: string): void;
    /**
     * Clear all task auto-transition timeouts
     */
    clearAllTimeouts(): void;
    /**
     * Save tasks to storage
     */
    save(): void;
    /**
     * Save tasks immediately without throttling
     */
    saveImmediately(): void;
    /**
     * Create directory if it doesn't exist
     * @param directory Directory path
     */
    private createDirectory;
    /**
     * Load tasks from storage
     */
    private load;
    /**
     * Save timeout
     */
    private _saveTimeout;
    /**
     * Compatibility method for tests - Add a task
     * @param task Task to add
     * @returns Added task
     */
    addTask(task: Task): Promise<Task>;
    /**
     * Compatibility method for tests - Get all tasks
     * @returns Array of tasks
     */
    getAllTasks(): Promise<Task[]>;
    /**
     * Compatibility method for tests - Update a task
     * @param id Task ID
     * @param update Task update
     * @returns Updated task or throws if not found
     */
    updateTask(id: string, update: Partial<Task>): Promise<Task>;
    /**
     * Compatibility method for tests - Delete a task
     * @param id Task ID
     * @returns True if deleted, false if not found
     */
    deleteTask(id: string): Promise<boolean>;
    /**
     * Compatibility method for tests - Get tasks by criteria
     * @param filter Filter criteria
     * @returns Array of tasks matching criteria
     */
    getTasksBy(filter: Partial<Task>): Promise<Task[]>;
}
export declare const taskStorage: TaskStorage;
//# sourceMappingURL=storage.d.ts.map