autosnippet
Version:
Extract code patterns into a knowledge base for AI coding assistants
126 lines (125 loc) • 4.11 kB
TypeScript
/**
* 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 {};