import type { PhrenResult } from "../shared.js";
export { taskStores, taskStoreHasProject } from "./task-store-directory.js";
import { type TaskDoc, type TaskItem } from "./tasks.js";
export type TaskResponsibility = "human" | "agent";
export interface TaskDependency {
    storeId: string;
    project: string;
    stableId: string;
}
export interface TaskChange {
    at: string;
    change: string;
}
export interface TaskPrerequisite extends TaskDependency {
    title: string;
    responsibility: TaskResponsibility;
    completed: boolean;
    missing: boolean;
}
export interface TaskReadiness {
    responsibility: TaskResponsibility;
    readiness: "ready" | "waiting-on-human" | "waiting-on-task";
    prerequisites: TaskPrerequisite[];
}
/** Writers that can create cycles lock every writable attached store in path order.
 * Reciprocal links edited from different store roots serialize on the same locks. */
export declare function withTaskGraphLock<T>(base: string, fn: () => PhrenResult<T>): PhrenResult<T>;
export declare function taskIdentity(phrenPath: string, doc: TaskDoc, item: TaskItem): TaskDependency | undefined;
/** Derived, never persisted. Missing or unknown metadata blocks autonomous selection. */
export declare function taskReadiness(phrenPath: string, doc: TaskDoc, item: TaskItem): TaskReadiness;
export declare function taskView(phrenPath: string, doc: TaskDoc, item: TaskItem): {
    responsibility: TaskResponsibility;
    readiness: "ready" | "waiting-on-human" | "waiting-on-task";
    prerequisites: TaskPrerequisite[];
    identity: TaskDependency | null;
    id: string;
    stableId?: string;
    identityAmbiguous?: boolean;
    section: import("./tasks.js").TaskSection;
    line: string;
    checked: boolean;
    priority?: "high" | "medium" | "low";
    context?: string;
    pinned?: boolean;
    githubIssue?: number;
    githubUrl?: string;
    claim?: import("./tasks.js").TaskClaim;
    rank?: number;
    lastActivity?: string;
    createdAt?: string;
    sessionId?: string;
    scope?: string;
    childFindings?: string[];
    speculative?: boolean;
    parentFinding?: string;
    dependencies?: TaskDependency[];
    history?: TaskChange[];
    taskContractRaw?: string;
    taskContractRecords?: string[];
    taskContractLines?: string[];
    opaqueContinuationLines?: string[];
};
export declare function validateTaskDependencies(phrenPath: string, doc: TaskDoc, item: TaskItem, refs: TaskDependency[]): string | undefined;
export interface TaskFilter {
    responsibility?: TaskResponsibility;
    readiness?: TaskReadiness["readiness"];
}
export declare function filterTaskDoc(base: string, doc: TaskDoc, filter: TaskFilter): TaskDoc;
export declare function taskCounts(base: string, doc: TaskDoc): {
    human: number;
    agentReady: number;
    agentWaitingOnHuman: number;
    agentWaitingOnTask: number;
    done: number;
};
