/**
 * ConversationStore — 对话持久化 + 上下文窗口管理
 *
 * 设计:
 * - 每个对话一个 JSONL 文件: .autosnippet/conversations/{id}.jsonl
 * - 索引文件: .autosnippet/conversations/index.json
 * - 按 category 隔离: 'user'(Dashboard) / 'system'(SignalCollector)
 * - Token 预算: 超限时自动生成摘要压缩旧轮次
 * - 静默降级: 持久化失败不影响核心功能
 *
 * Token 计算策略:
 *   采用字符数近似估算 (1 token ≈ 3.5 字符中文 / ≈ 4 字符英文)
 *   简单高效，无需额外依赖
 *
 * 文件结构:
 *   .autosnippet/conversations/
 *     index.json   — 对话元数据索引
 *     {id}.jsonl   — 每行一条消息 {role, content, ts}
 */
/** 单条对话消息 */
interface ConversationMessage {
    role: string;
    content: string;
}
/** AI Provider 最小接口（用于 summarize） */
interface AiProvider {
    chat(prompt: string, opts?: {
        temperature?: number;
        maxTokens?: number;
    }): Promise<string>;
}
export declare class ConversationStore {
    #private;
    /** @param projectRoot 用户项目根目录 */
    constructor(projectRoot: string);
    /**
     * 创建新对话
     * @param opts.category 对话类别
     * @param [opts.title] 对话标题
     * @returns conversationId
     */
    create({ category, title }?: {
        category?: string | undefined;
        title?: string | undefined;
    }): `${string}-${string}-${string}-${string}-${string}`;
    /**
     * 追加消息到对话
     * @param message
     */
    append(conversationId: string, message: ConversationMessage): void;
    /**
     * 加载对话历史（带 token 预算控制）
     *
     * 如果历史超出 tokenBudget:
     *   - 保留开头的摘要（如有）
     *   - 截断中间的旧消息
     *   - 保留最新的消息
     *
     * @param [opts.tokenBudget] token 预算
     * @returns []}
     */
    load(conversationId: string, { tokenBudget }?: {
        tokenBudget?: number | undefined;
    }): ConversationMessage[];
    /**
     * 对话列表
     * @param [opts.category] 按类别过滤
     */
    list({ category, limit }?: {
        category?: 'user' | 'system' | 'lark';
        limit?: number;
    }): any;
    /** 删除对话 */
    delete(conversationId: string): void;
    /**
     * 为对话生成压缩摘要（需要 AI）
     * 将旧消息替换为一条 system 摘要消息
     *
     * @param opts.aiProvider AI Provider 实例
     * @returns 是否成功压缩
     */
    summarize(conversationId: string, { aiProvider }: {
        aiProvider: AiProvider;
    }): Promise<boolean>;
    /**
     * 清理过期对话
     * @param [opts.maxAgeDays=30] 超过此天数的对话将被删除
     * @param [opts.category] 只清理特定类别
     * @returns }
     */
    cleanup({ maxAgeDays, category, }?: {
        maxAgeDays?: number;
        category?: 'user' | 'system' | 'lark';
    }): {
        deleted: number;
    };
    /** 估算 token 数 — 委托给共享 token-utils（CJK 感知） */
    estimateTokens(text: string): number;
}
export default ConversationStore;
