UNPKG

autosnippet

Version:

Extract code patterns into a knowledge base for AI coding assistants

126 lines (125 loc) 4.11 kB
/** * 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 {};