export type ReadEditTrackerObservation = "read" | "written";
export interface ReadEditTracker {
    /** Mark a path as read by the agent. */
    recordRead(filePath: string | undefined | null): void;
    /** Mark a path as written by the agent (write counts as observed). */
    recordWrite(filePath: string | undefined | null): void;
    /**
     * Returns the observation kind for a file, or null if never observed.
     * Path normalization matches recordRead/recordWrite.
     */
    observation(filePath: string | undefined | null): ReadEditTrackerObservation | null;
    /** Convenience: was this file ever observed (read or written)? */
    hasObserved(filePath: string | undefined | null): boolean;
    /** Reset the tracker (used in tests). */
    reset(): void;
}
export interface CreateReadEditTrackerOptions {
    /**
     * Workspace root used to normalize relative paths to absolute. Without it
     * the tracker only matches on exact strings, which means `read("foo.ts")`
     * followed by `edit("/abs/foo.ts")` would fail. With it, both normalize to
     * the same absolute path and match correctly.
     */
    workspaceRoot?: string;
}
export declare function createReadEditTracker(opts?: CreateReadEditTrackerOptions): ReadEditTracker;
