import { IShutdownable } from "@memberjunction/global";
export type TaskStatus = 'pending' | 'in_progress' | 'completed' | 'cancelled' | 'failed';
export interface Part {
    id: string;
    type: 'text' | 'file' | 'data';
    content: string | object;
    metadata?: object;
}
export interface Message {
    id: string;
    taskId: string;
    role: 'user' | 'agent';
    parts: Part[];
    created: Date;
}
export interface Artifact {
    id: string;
    taskId: string;
    name: string;
    parts: Part[];
    created: Date;
}
export interface Task {
    id: string;
    status: TaskStatus;
    messages: Message[];
    artifacts: Artifact[];
    created: Date;
    updated: Date;
}
/**
 * Terminal task statuses — tasks in these states are eligible for cleanup
 * after the retention window elapses.
 */
export declare const TERMINAL_STATUSES: ReadonlySet<TaskStatus>;
export interface TaskStoreOptions {
    /** How often to scan for terminal tasks. Default 5 minutes. */
    sweepIntervalMs?: number;
    /** How long a terminal task is retained before sweep removes it. Default 1 hour. */
    retentionMs?: number;
}
/**
 * Bounded in-memory task store with periodic terminal-state cleanup.
 *
 * Replaces the unbounded module-level `Map<string, Task>` that was the single
 * largest leak found in the audit (R2-C11): tasks accumulated forever with
 * their `messages[]` and `artifacts[]` arrays, growing memory roughly as
 * `tasks × messages × artifact-bytes`. The store keeps the same `Map`-like
 * surface (`set`/`get`/`delete`/`has`/`size`) so callers don't change, and
 * adds a sweeper that drops tasks in terminal state older than `retentionMs`.
 * Implements `IShutdownable` so the sweeper timer is cleared during graceful
 * shutdown.
 */
export declare class TaskStore implements IShutdownable {
    private readonly _tasks;
    private readonly _sweepIntervalMs;
    private readonly _retentionMs;
    private _timer;
    constructor(options?: TaskStoreOptions);
    get ShutdownName(): string;
    /**
     * Begin the periodic sweep. Idempotent; calling twice is safe. Uses `unref()`
     * so the sweep timer doesn't hold the process alive on its own.
     */
    Start(): void;
    /**
     * Stop the sweep timer and drop all tasks. Idempotent.
     */
    Shutdown(): void;
    /**
     * Configured retention window in milliseconds.
     */
    get RetentionMs(): number;
    /**
     * Drop terminal-state tasks that haven't been updated in `retentionMs`.
     * Returns the count evicted (useful for tests and diagnostics).
     */
    Sweep(now?: number): number;
    set(id: string, task: Task): this;
    get(id: string): Task | undefined;
    has(id: string): boolean;
    delete(id: string): boolean;
    get size(): number;
    values(): IterableIterator<Task>;
}
//# sourceMappingURL=TaskStore.d.ts.map