import type { ProjectConfig, KnowledgeEntry } from "../types/index.js";
/** 索引 schema 版本号 — 增量变更时递增 */
export declare const INDEX_SCHEMA_VERSION = 1;
/**
 * 知识索引构建选项。
 */
export interface KnowledgeIndexOptions {
    /** 是否启用文件监听，默认 true */
    watch?: boolean;
}
/**
 * 知识索引管理器。
 * @description 负责扫描、解析、索引知识文件（Markdown 和 YAML），
 *              支持增量更新（文件监听）和按条件查询。
 *              同时提供健康检查和冲突检测功能。
 */
export declare class KnowledgeIndexManager {
    private config;
    private index;
    private watcher;
    private rebuildTimer;
    private watchingStarted;
    private watchEnabled;
    private closed;
    private rebuildInProgress;
    private filePathToEntryMap;
    /**
     * 创建知识索引管理器实例。
     * @param config - 项目配置对象
     * @param options - 索引构建选项
     */
    constructor(config: ProjectConfig, options?: KnowledgeIndexOptions);
    /**
     * 构建知识索引。
     * @description 扫描全局和项目知识目录，解析所有知识文件并建立索引。
     *              首次构建时启动文件监听。
     */
    build(): Promise<void>;
    /**
     * 关闭索引管理器，停止文件监听并清理资源。
     */
    close(): Promise<void>;
    /**
     * 计算文件 body 的 SHA256（排除 frontmatter），用于防篡改校验。
     * 健康检查会修改 frontmatter（status 字段），不应视为篡改。
     */
    private bodyHash;
    /**
     * 合同门禁过滤 — 使用同步清单区分同步资产与用户自建文件。
     * 同步资产: 验证 hash 一致性和合同注册，不通过则拒绝。
     * 用户自建文件: 通过 user schema 放行，不以 "unregistered path = pass" 绕过。
     */
    private filterByContractGate;
    /** 从绝对路径提取 .soloforge/knowledge/ 下的相对路径，用于清单匹配 */
    private toKnowledgeRelPath;
    /**
     * 将绝对路径转换为模板相对路径。
     * 仅当路径能映射到已注册的内置模板资产时才返回 templateRelPath。
     * 用户自建文件（不在注册表中）返回 null，由调用方放行。
     */
    private toTemplateRelPath;
    private getProjectTechStack;
    /**
     * 启动文件监听（内部方法）。
     * @description 使用 chokidar 监听全局和项目知识目录的文件变更，
     *              变更后 300ms 防抖执行增量更新。
     */
    private startWatching;
    /**
     * 重建文件路径到条目的映射（内部方法）。
     */
    private rebuildEntryMap;
    /**
     * 应用增量更新（内部方法）。
     * @description 根据文件系统事件对索引进行增量更新：
     *              删除事件移除条目，新增/修改事件重新解析并更新条目。
     * @param event - 文件系统事件类型
     * @param filePath - 变更的文件路径
     */
    private applyIncrementalUpdate;
    /**
     * 解析单个知识文件（内部方法）。
     * @description 根据文件扩展名选择解析器：Markdown 使用 gray-matter 解析 frontmatter，
     *              YAML 使用 YAML.parse 解析。
     * @param filePath - 文件路径
     * @returns 解析后的知识条目数组
     */
    private parseFile;
    /**
     * 按条件查询知识条目。
     * @description 支持按 scope、products、type 过滤，以及按 keywords 关键词匹配和排序。
     *              只返回 status 为 active 的条目，默认限制返回 5 条。
     * @param filters - 查询过滤条件
     * @param filters.scope - 作用域过滤列表
     * @param filters.products - 产品过滤列表
     * @param filters.type - 条目类型过滤
     * @param filters.keywords - 关键词列表（用于模糊匹配 name 和 when 字段）
     * @param filters.limit - 最大返回条数，默认 5
     * @returns 匹配的知识条目数组
     */
    query(filters: {
        scope?: string[];
        products?: string[];
        type?: string;
        route?: string;
        keywords?: string[];
        limit?: number;
        stages?: string[];
    }): KnowledgeEntry[];
    /**
     * 标记知识条目为已使用。
     * @description 增加指定条目的 usage_count 并更新 last_used_at 时间戳。
     * @param entryIds - 要标记的条目 ID 列表
     */
    markUsed(entryIds: string[]): void;
    /**
     * 根据 ID 获取知识条目。
     * @param id - 条目 ID
     * @returns 匹配的知识条目，未找到则返回 undefined
     */
    getEntry(id: string): KnowledgeEntry | undefined;
    /**
     * 获取所有知识条目（按来源分组）。
     * @returns 包含全局和项目知识条目的对象
     */
    getAllEntries(): {
        global: KnowledgeEntry[];
        project: KnowledgeEntry[];
    };
    /**
     * 在内存中添加知识条目。
     * @param entry - 要添加的知识条目
     */
    addEntryInMemory(entry: KnowledgeEntry): Promise<void>;
    /**
     * 重新加载知识索引。
     * @description 完全重建索引，重新扫描所有知识文件。
     */
    reload(): Promise<void>;
    /**
     * 执行知识健康检查和冲突检测。
     * @description 检查所有知识条目的健康状态（过期、零使用），
     *              对活跃项目条目执行冲突检测，并将状态变更持久化到磁盘。
     * @returns 包含健康问题和冲突的数组
     */
    checkHealth(): Promise<Array<{
        entry: KnowledgeEntry;
        issue: string;
    }>>;
    /**
     * 计算关键词匹配分数（内部方法）。
     * @description 在条目的 name 和 when 字段中搜索关键词，返回匹配数。
     * @param entry - 知识条目
     * @param keywords - 关键词列表
     * @returns 匹配的关键词数量
     */
    private keywordScore;
    /**
     * 扫描目录中的知识文件（内部方法）。
     * @description 递归遍历目录，解析所有 .md 和 .yaml/.yml 文件。
     * @param dir - 要扫描的目录路径
     * @returns 解析后的知识条目数组
     */
    private scanDirectory;
    /**
     * 将原始数据解析为知识条目（内部方法）。
     * @description 从 frontmatter/解析数据中提取字段，缺失字段使用默认值。
     * @param data - 解析后的 frontmatter 或 YAML 数据
     * @param filePath - 文件路径
     * @param body - Markdown 正文内容（可选）
     * @returns 解析后的知识条目
     */
    private parseEntry;
    /**
     * 根据文件路径推断知识条目类型（内部方法）。
     * @description 根据路径中包含的目录名推断条目类型。
     * @param filePath - 文件路径
     * @returns 推断出的知识条目类型
     */
    private inferType;
    /**
     * 导出能力注册表的治理规则为 review_rule 条目，用于知识审计。
     * @description 将能力治理规则转换为可在知识索引中查询的条目格式。
     * @param caps - 能力规则数组
     * @param caps.policy_id - 策略 ID
     * @param caps.name - 策略名称
     * @param caps.state - 策略状态
     * @param caps.owner_module - 所属模块
     * @param caps.evidence - 证据描述
     * @param caps.promotion_conditions - 晋级条件列表
     * @param caps.demotion_conditions - 降级条件列表
     * @param caps.evidence_requirements - 证据要求列表
     * @param caps.reason - 原因说明
     * @returns 格式化后的治理规则条目数组
     */
    exportGovernanceRules(caps: Array<{
        policy_id: string;
        name: string;
        state: string;
        owner_module: string;
        evidence: string;
        promotion_conditions: string[];
        demotion_conditions: string[];
        evidence_requirements: string[];
        reason: string;
    }>): Array<{
        name: string;
        type: "governance_rule";
        scope: string;
        content: string;
    }>;
    /**
     * 递归遍历目录获取文件列表（内部方法）。
     * @description 递归遍历目录，收集所有 .md 和 .yaml/.yml 文件路径。
     *              自动跳过 SKIP_DIRS 中定义的系统目录。
     * @param dir - 要遍历的目录
     * @param maxDepth - 最大递归深度，默认 10
     * @param currentDepth - 当前递归深度
     * @returns 文件路径数组
     */
    private walkFiles;
}
//# sourceMappingURL=index_manager.d.ts.map