import type { PortableTool } from "../portable-tool.js";
export declare const SLEEP_TOOL_NAME: "sleep";
export interface SleepToolParams {
    /** Duration to sleep in seconds (1–3600). */
    duration: number;
    /** Reason for sleeping — helps the runtime decide whether to interrupt. */
    reason?: string;
}
export declare const SLEEP_TOOL_SCHEMA: {
    readonly type: "object";
    readonly properties: {
        readonly duration: {
            readonly type: "number";
            readonly description: "Duration to sleep in seconds (1–3600). Prefer short sleeps (10–60s) to stay responsive.";
            readonly minimum: 1;
            readonly maximum: 3600;
        };
        readonly reason: {
            readonly type: "string";
            readonly description: string;
        };
    };
    readonly required: readonly ["duration"];
};
/** The result returned after a sleep completes or is interrupted. */
export interface SleepResult {
    /** Actual time slept in seconds (may be less if interrupted). */
    sleptSeconds: number;
    /** Whether the sleep was interrupted before completing. */
    interrupted: boolean;
    /** The event that caused the interruption (undefined if not interrupted). */
    interruptReason?: string;
}
/**
 * Runtime dependencies injected by the host.
 *
 * The sleep mechanism is host-provided — the tool itself does NOT call
 * setTimeout. The host decides how to implement the wait (timer, event loop
 * integration, tick prompt scheduling, etc.).
 */
export interface SleepToolDeps {
    /**
     * Perform the actual sleep. Must resolve after `durationMs` or when
     * interrupted (whichever is first). The AbortSignal fires if the user
     * or the system requests an interrupt.
     */
    sleep(durationMs: number, signal: AbortSignal): Promise<SleepResult>;
}
export declare function createSleepTool(deps: SleepToolDeps): PortableTool<SleepToolParams>;
