import { TaskListItem } from '../types';
import { I18n } from './i18n';
/**
 * Storage for multiple named tasks.
 *
 * `task.md` stays the live file of the *active* task — every other manager
 * keeps reading and writing exactly that path, unaware of names. This store
 * owns the per-name snapshots under `.claude-tasks/tasks/<name>.md`, which are
 * authoritative for the *inactive* tasks. Switching means: write the active
 * task back to its snapshot, then copy the target snapshot over `task.md`.
 *
 * Copies rather than symlinks, deliberately: symlinks are unreliable on
 * Windows. Multi-task mode is on iff the tasks directory exists, so projects
 * that never switch behave exactly as they did before.
 */
export declare class TaskStore {
    private tasksDir;
    private taskFile;
    private i18n;
    constructor(tasksDir: string, taskFile: string, i18n: I18n);
    isEnabled(): Promise<boolean>;
    enable(): Promise<void>;
    /**
     * Normalize a user-supplied task name into a safe single path segment.
     * Throws rather than silently mangling names that could escape the store.
     */
    sanitizeName(name: string): string;
    getTaskPath(name: string): string;
    exists(name: string): Promise<boolean>;
    listNames(): Promise<string[]>;
    /**
     * All stored tasks with their titles and subtask progress. The active task is
     * read from `task.md` so its numbers are live rather than from its snapshot.
     */
    listTasks(activeName: string | null): Promise<TaskListItem[]>;
    /** Write the live task.md back to `<name>`'s snapshot. */
    syncActive(name: string): Promise<void>;
    /** Make `<name>` the live task.md. The caller must have synced the previous one. */
    activate(name: string): Promise<void>;
    remove(name: string): Promise<void>;
    /**
     * Derive a store name from a task title, used when migrating a legacy
     * project whose task.md has no name yet.
     */
    deriveName(title: string): Promise<string>;
}
//# sourceMappingURL=TaskStore.d.ts.map