/**
 * MessageAdapter — 统一消息操作接口
 *
 * 消除 reactLoop 内的 useCtxWin 双模式分支:
 *   - ContextWindowAdapter: 委托给 ContextWindow 实例 (bootstrap/system 场景)
 *   - SimpleArrayAdapter: 裸数组模式 (对话场景)
 *
 * 两个实现对外暴露完全相同的 API，
 * 使得 reactLoop 及其提取方法无需关心底层消息存储方式。
 *
 * @module core/MessageAdapter
 */
import type { ContextWindow } from '../context/ContextWindow.js';
/** 工具调用记录 */
interface ToolCallRecord {
    id: string;
    name: string;
    args: Record<string, unknown>;
}
/** 聊天消息 */
interface ChatMessage {
    role: 'user' | 'assistant' | 'tool';
    content: string | null;
    toolCalls?: ToolCallRecord[];
    toolCallId?: string;
    name?: string;
}
/** @abstract */
export declare class MessageAdapter {
    /** 追加用户消息 */
    appendUserMessage(_text: string): void;
    /** 追加助手纯文本回复 */
    appendAssistantText(_text: string): void;
    /**
     * 追加助手带工具调用的回复
     * @param _calls functionCalls 数组
     */
    appendAssistantWithToolCalls(_text: string | null, _calls: ToolCallRecord[]): void;
    /** 追加工具执行结果 */
    appendToolResult(_callId: string, _name: string, _content: string): void;
    /** 追加系统/用户 nudge 消息 */
    appendUserNudge(_text: string): void;
    /**
     * 导出当前消息列表 (供 LLM 调用)
     * @returns >}
     */
    toMessages(): unknown[];
    /** 重置到仅保留初始 prompt (错误恢复) */
    resetToPromptOnly(): void;
    /**
     * 获取工具结果限额
     * @returns }
     */
    getToolResultQuota(): {
        maxChars: number;
        maxMatches: number;
    };
    /**
     * 压缩检查 — 如果消息过多则自动压缩
     * @returns }
     */
    compactIfNeeded(): {
        level: number;
        removed: number;
    };
    /**
     * 格式化工具结果字符串 (统一 limitToolResult 调用)
     * @param rawResult 工具原始返回值
     */
    formatToolResult(toolName: string, rawResult: unknown): string;
}
/**
 * 委托所有消息操作给 ContextWindow 实例。
 *
 * 用于 bootstrap / system 场景，
 * ContextWindow 提供三级递进压缩 + 动态 token 预算。
 */
export declare class ContextWindowAdapter extends MessageAdapter {
    #private;
    constructor(ctxWin: ContextWindow);
    /** 获取底层 ContextWindow 实例 (供 forced-summary 等外部逻辑使用) */
    get contextWindow(): ContextWindow;
    appendUserMessage(text: string): void;
    appendAssistantText(text: string): void;
    appendAssistantWithToolCalls(text: string | null, calls: ToolCallRecord[]): void;
    appendToolResult(callId: string, name: string, content: string): void;
    appendUserNudge(text: string): void;
    toMessages(): import("../context/ContextWindow.js").ContextMessage[];
    resetToPromptOnly(): void;
    getToolResultQuota(): {
        maxChars: number;
        maxMatches: number;
    };
    compactIfNeeded(): {
        level: number;
        removed: number;
    };
}
/**
 * 简单数组消息管理 — 对话场景。
 *
 * 不做任何压缩，getToolResultQuota 返回固定 8000。
 * compactIfNeeded 始终返回 no-op。
 */
export declare class SimpleArrayAdapter extends MessageAdapter {
    #private;
    appendUserMessage(text: string): void;
    appendAssistantText(text: string): void;
    appendAssistantWithToolCalls(text: string | null, calls: ToolCallRecord[]): void;
    appendToolResult(callId: string, name: string, content: string): void;
    appendUserNudge(text: string): void;
    toMessages(): ChatMessage[];
    resetToPromptOnly(): void;
    getToolResultQuota(): {
        maxChars: number;
        maxMatches: number;
    };
    compactIfNeeded(): {
        level: number;
        removed: number;
    };
}
/** 根据是否提供 contextWindow 创建对应适配器 */
export declare function createMessageAdapter(contextWindow: ContextWindow | null | undefined): ContextWindowAdapter | SimpleArrayAdapter;
export {};
