import type { AgentTool } from "../types.js";
import { type ReadStateHandle } from "./read-state.js";
import { type TruncationResult } from "./truncate.js";
declare const readSchema: import("@sinclair/typebox").TObject<{
    path: import("@sinclair/typebox").TString;
    offset: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
    limit: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
}>;
export interface ReadToolDetails {
    truncation?: TruncationResult;
}
/**
 * Pluggable filesystem callbacks for the read tool. Override them to fetch
 * files from an alternate backend, for instance an SSH or remote-mount layer.
 */
export interface ReadOperations {
    /** Read a file's raw bytes. */
    readFile: (absolutePath: string) => Promise<Buffer>;
    /** Verify the file can be read, raising if not. */
    access: (absolutePath: string) => Promise<void>;
    /** Return the file's image MIME type, or null/undefined for non-image files. */
    detectImageMimeType?: (absolutePath: string) => Promise<string | null | undefined>;
}
export interface ReadToolOptions {
    /** Default true; when set, large images are shrunk to fit within 2000x2000. */
    autoResizeImages?: boolean;
    /** Swap out the filesystem callbacks; the local disk is used by default. */
    operations?: ReadOperations;
    /**
     * Optional read-before-edit gate store. When present, a successful read
     * records the file's on-disk stat so a later edit/write can verify it was
     * read first and has not drifted. Absent → no gate bookkeeping (no-op).
     */
    readState?: ReadStateHandle;
}
export declare function createReadTool(cwd: string, options?: ReadToolOptions): AgentTool<typeof readSchema>;
/** Ready-to-use read tool bound to the current working directory. */
export declare const readTool: AgentTool<import("@sinclair/typebox").TObject<{
    path: import("@sinclair/typebox").TString;
    offset: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
    limit: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
}>, any>;
export {};
