/**
 * Per-task on-disk layout under $FRANKLIN_HOME/tasks/<runId>/.
 *   meta.json    — single TaskRecord, atomically rewritten
 *   events.jsonl — append-only event log
 *   log.txt      — child process stdout/stderr
 *
 * Storage location: defaults to BLOCKRUN_DIR (~/.blockrun), matching
 * every other persistent state in the codebase (sessions, audit, stats,
 * brain, etc.). Earlier releases used ~/.franklin instead, so we
 * lazily fall back to that legacy directory on reads when a task isn't
 * found in the primary location. New tasks always write to the primary.
 *
 * Why a lazy fallback instead of a startup migration: a long-running
 * task runner (`franklin _task-runner <runId>`) captures its task dir
 * path in memory at spawn and continues writing there for the duration
 * of the run. Verified 2026-05-04: an in-flight ETL task at PID 59095
 * had been writing to ~/.franklin/tasks/ for 4 minutes, with ~10 hours
 * of progress still ahead. Moving the directory mid-flight would
 * orphan its writes; the fallback path lets new CLI commands keep
 * reading legacy task state without disturbing an active runner.
 */
export declare function getTasksDir(): string;
export declare function getLegacyTasksDir(): string;
export declare function getTaskDir(runId: string): string;
export declare function ensureTaskDir(runId: string): string;
export declare function taskMetaPath(runId: string): string;
export declare function taskEventsPath(runId: string): string;
export declare function taskLogPath(runId: string): string;
