import type { AgentModelRegistry } from '../../contracts/agent-model.js';
/**
 * Shared Shortcut LLM proxy transport for runtime tools and background jobs.
 *
 * The client centralizes auth lookup, base URL resolution, request attribution,
 * and error mapping so callers can depend on a small invoke/stream surface
 * instead of each tool reimplementing proxy-specific fetch behavior.
 */
export interface ShortcutLlmAttribution {
    sessionId?: string;
    userMessageId?: string;
}
export interface ShortcutLlmProxyRequest {
    model: string;
    messages: unknown[];
    tools?: unknown[];
    effort_level?: string;
    thinking_type?: string;
    max_tokens?: number;
    max_output_tokens?: number;
    speed?: 'fast' | 'standard';
}
export interface ShortcutLlmProxyClient {
    invoke<T = unknown>(request: ShortcutLlmProxyRequest, options?: {
        signal?: AbortSignal;
    }): Promise<T>;
    stream(request: ShortcutLlmProxyRequest, options?: {
        signal?: AbortSignal;
    }): Promise<Response>;
}
export type ShortcutLlmProxyErrorCode = 'missing-auth' | 'missing-base-url' | 'http-error' | 'network-error' | 'invalid-json';
export declare class ShortcutLlmProxyError extends Error {
    readonly code: ShortcutLlmProxyErrorCode;
    readonly status?: number;
    readonly bodyPreview?: string;
    constructor(code: ShortcutLlmProxyErrorCode, message: string, options?: {
        status?: number;
        bodyPreview?: string;
        cause?: unknown;
    });
}
/**
 * Convert proxy transport errors into user-facing errors expected by tools.
 *
 * Callers should catch and map only at their API boundary so lower layers can
 * still inspect ShortcutLlmProxyError.code/status for diagnostics and tests.
 */
export declare function mapShortcutLlmProxyError(error: unknown): Error;
interface ShortcutLlmProxyClientOptions {
    modelRegistry: AgentModelRegistry;
    getAttribution?: () => ShortcutLlmAttribution | undefined;
}
/**
 * Create a Shortcut LLM proxy client backed by the current model registry.
 *
 * The returned methods intentionally share requestProxy: invoke() only adds JSON
 * parsing, while stream() returns the successful streaming Response unchanged.
 */
export declare function createShortcutLlmProxyClient(options: ShortcutLlmProxyClientOptions): ShortcutLlmProxyClient;
export {};
//# sourceMappingURL=shortcut-llm-proxy-client.d.ts.map