export interface Message { role: "system" | "user" | "assistant" | "tool"; content: string; timestamp: number; tokenCount: number; } export interface ContextConfig { maxContextTokens: number; summaryThresholdTokens: number; windowMessages: number; summarySystemPrompt: string; } export declare class ContextManager { private messages; private config; private summary; private writeLock; constructor(config?: Partial); addMessage(message: Omit): Promise; addMessagesBatch(messages: Array>): Promise; getMessages(): Message[]; getSummary(): string; getActiveMessages(): Message[]; getTotalTokens(): number; clear(): void; /** * 批量恢复消息与摘要(会话重载时用)。同步、不走 writeLock、不触发 checkAndSummarize。 * 调用时机:会话加载阶段,早于任何并发 addMessage。tokenCount 用 estimateTokens 重算; * timestamp 不保留(跨重启无意义),设为 Date.now()。 */ restoreMessages(messages: Array<{ role: Message["role"]; content: string; }>, summary?: string): void; /** * 手动触发摘要(/summarize 命令):将窗口外的消息摘要后截断,返回当前摘要。 * 全部消息都在窗口内时无需摘要,返回已有摘要(可能为空)。 * 与自动 checkAndSummarize 共用 summarizeMessages,串行化于 writeLock。 * LLM 失败(额度用尽/403/网络错)时不抛,返回已有 summary(降级),保证不打断主流程。 */ summarizeNow(): Promise; private runLocked; private estimateTokens; /** * 自动摘要:token 超阈值时触发。 * LLM 失败(403 Forbidden / 额度用尽 / 网络)时 try/catch 降级,不抛出, * 确保不把异常冒泡到 addMessage / 主流程导致会话整体报错。 * 消息保持原样,下次 token 更高或 API 恢复时仍有机会再尝试摘要。 */ private checkAndSummarize; private summarizeMessages; } //# sourceMappingURL=context-manager.d.ts.map