import type { Compressor, CompressorContext, CompressionResult } from './compressor'; import type { Message, Model } from '@agforge/core'; /** * LLM 摘要压缩器配置选项。 */ export type LlmSummaryCompressorOptions = { /** * 摘要提示词模板。 * * 可用的占位符: * - `{{messages}}` - 格式化后的消息内容 * - `{{targetTokens}}` - 目标 token 数量(如果 Strategy 提供) * * @default 内置的默认提示词 */ summaryPrompt?: string; /** * 自定义摘要模型。 * 如果不提供,将使用 context.model(主模型)。 * 建议使用更便宜/更快的模型(如 claude-haiku)来生成摘要。 */ summaryModel?: Model; /** * Token 估算函数。 * 用于估算摘要文本的 token 数量。 * @default 简单字符估算(每 4 个字符约等于 1 个 token) */ estimateTokens?: (text: string) => number; }; /** * 基于 LLM 的摘要压缩器。 * * 将消息通过 LLM 生成结构化摘要,保留关键上下文信息。 * * 设计参考: * - **Claude Code Compaction**: 使用 标签包裹摘要,保留架构决策和未解决问题 * - **OpenCode**: 自动压缩配合 prune 选项清除旧工具输出 * - **OpenClaw**: Pre-compaction memory flush,压缩前将关键信息持久化 * * 注意: * - 消息分区由 Strategy 负责,此压缩器只处理传入的待压缩消息 * - 返回纯文本摘要,消息格式化由 Manager 负责 */ export declare class LlmSummaryCompressor implements Compressor { private readonly summaryPrompt; private readonly summaryModel?; private readonly estimateTokens; constructor(options?: LlmSummaryCompressorOptions); compress(messages: ReadonlyArray, context: CompressorContext): Promise; /** * 将消息列表格式化为文本。 * * 格式化规则: * - 每条消息显示角色和内容 * - 工具调用显示工具名和参数 * - 工具结果显示工具 ID 和结果 */ private formatMessages; /** * 获取角色的显示标签。 */ private getRoleLabel; /** * 格式化消息内容。 */ private formatContent; /** * 构建摘要提示词。 */ private buildPrompt; /** * 调用 LLM 生成摘要。 */ private generateSummary; }