import { Type } from "typebox";
import type { PulledInbox } from "./peer-session-drain.js";
export declare const READ_INBOX_TOOL_NAME = "ReadInbox";
/** The most records one call may ask for (a bound on one tool result, not on the box). */
export declare const READ_INBOX_MAX_LIMIT = 50;
/**
 * #1036 — the tool's OWN page bound, in rendered characters. A record settles only when its frame is
 * present in this result as committed, so a result large enough for a size transformation to replace
 * with a head/tail preview would hand nothing over (the face declares `offload: false` for the same
 * reason, belt to this suspender — a deployment may set a global threshold below any default).
 * Records that do not fit stay in the box and are reported as still waiting, exactly as they are when
 * the per-pass count budget runs out; one oversized record is always handed over alone rather than
 * parked forever. Sized well under the smallest first-party offload floor.
 */
export declare const READ_INBOX_RESULT_BUDGET_CHARS = 20000;
export interface ReadInboxToolOptions {
    /** The bound drain's pull face, read LATE (the drain binds after the roster is minted). Absent ⇒ no box. */
    pull: () => ((limit?: number, toolCallId?: string, charBudget?: number) => Promise<PulledInbox>) | undefined;
}
export declare function createReadInboxTool(opts: ReadInboxToolOptions): import("../internal/harness-types.js").AgentTool<Type.TObject<{
    limit: Type.TOptional<Type.TInteger>;
}>, unknown>;
