/**
 * OwlCoda Source-First REPL — interactive chat frontend with tool execution.
 * Zero runtime dependencies. Uses built-in readline + http.
 * Talks to the OwlCoda proxy using Anthropic Messages API format.
 *
 * ─── Lifecycle status (issue #4, 2026-04-26) ────────────────────────────
 *
 *   STATUS: legacy / not reachable from production.
 *
 *   This file is the only consumer of `src/runtime/tools.ts`. Neither
 *   this module nor that one is imported by `cli.ts` / `cli-core.ts` /
 *   `server.ts` / any `src/native/*` — production goes through
 *   `src/native/repl.ts` and `src/native/headless.ts` instead.
 *
 *   The file is preserved for archival and as a reference implementation
 *   of the pre-native source-first REPL contract; it ships in `dist/`
 *   but is not wired to a CLI command. An import-boundary test
 *   (`tests/runtime-tools-boundary.test.ts`) guards against accidental
 *   re-introduction into a production path without going through the
 *   centralized policies (bash-risk classifier + fs-policy).
 *
 *   Do NOT add features here. New REPL work belongs in `src/native/repl.ts`.
 */
import type { OwlCodaConfig } from '../config.js';
interface AnthropicTextBlock {
    type: 'text';
    text: string;
}
interface AnthropicToolUseBlock {
    type: 'tool_use';
    id: string;
    name: string;
    input: Record<string, unknown>;
}
interface AnthropicToolResultBlock {
    type: 'tool_result';
    tool_use_id: string;
    content: string;
    is_error?: boolean;
}
type ContentBlock = AnthropicTextBlock | AnthropicToolUseBlock;
interface AnthropicMessage {
    role: 'user' | 'assistant';
    content: string | ContentBlock[] | AnthropicToolResultBlock[];
}
interface AnthropicUsage {
    input_tokens: number;
    output_tokens: number;
}
interface AnthropicResponse {
    id: string;
    type: 'message';
    role: 'assistant';
    content: ContentBlock[];
    model: string;
    stop_reason: string;
    usage: AnthropicUsage;
}
export declare function startRepl(config: OwlCodaConfig, resumeSessionId?: string, explicitModel?: string): Promise<void>;
/**
 * Send a single non-streaming request (for programmatic use / non-interactive mode).
 */
export declare function sendMessage(config: OwlCodaConfig, messages: AnthropicMessage[], model: string): Promise<AnthropicResponse>;
/**
 * Run a single non-interactive conversation (for `owlcoda run`).
 * Supports tool execution loop, returns final text output.
 */
export interface NonInteractiveOptions {
    model?: string;
    autoApprove?: boolean;
    json?: boolean;
    resumeSessionId?: string;
}
export declare function runNonInteractive(config: OwlCodaConfig, prompt: string, opts?: NonInteractiveOptions): Promise<{
    text: string;
    exitCode: number;
}>;
export {};
