/** * Knowledge Writer — 知识层模块。 * * 职责边界: * - 负责:AddKnowledgeInput 等 知识层职责 * - 不负责:不属于本模块的职责由对应模块承担 * * 被谁调用:管线知识阶段、知识注入 * 调用谁:promises、node:fs、node:path、gray-matter、index_manager、writer * * 数据流:项目文件 → 知识提取 → 结构化数据 → 注入管线 * 持久化:读写本地文件(详见代码内路径) */ import type { KnowledgeIndexManager } from "./index_manager.js"; import type { ProjectConfig, KnowledgeEntry } from "../../types/index.js"; /** 新增知识条目的输入参数 */ export interface AddKnowledgeInput { /** 知识条目标题 */ title: string; /** 知识条目类型 */ type: KnowledgeEntry["type"]; /** 作用域列表 */ scope: string[]; /** 触发条件描述 */ triggers: string; /** 中文任务侧检索词(可选;进入子串索引,补齐任务措辞与规则措辞的语义鸿沟) */ keywords?: string[]; /** 决策规则(可选) */ decision_rules?: string; /** 已完成的知识正文;正式激活时必填 */ content?: string; /** 是否保存为草稿(默认 true) */ save_to_drafts?: boolean; /** 是否自动丰富内容(默认 true) */ auto_enrich?: boolean; /** 校验层(必填:L0=确定性探针 / L1=可执行策略 / L2=LLM审查注入 / L3=人工确认) */ verification_layer: "L0" | "L1" | "L2" | "L3"; /** L0/L1 探针类型(仅 L0/L1 时合法,与 verification_layer 互斥校验) */ probe?: "builtin" | "semgrep" | "rego" | "property"; /** L0/L1 旁挂探针文件相对路径(相对 .soloforge/knowledge/) */ probe_path?: string; /** builtin 探针的内联正则源 */ pattern?: string; /** builtin 自验样本(可选):一段必被 pattern 命中的违规样本文本,加载期命中 0 处拒载该 probe(防静默失效) */ selftest_sample?: string; /** 执法点声明(可选):probe=本条自带 L0/L1 探针 / external:<标识>=项目自建执法点;缺省=未执法 */ enforcement?: string; /** * 被取代条目名(可选,add --supersedes 原子操作):写入新条目 frontmatter 的 supersedes 字段。 * 旧条目的 status→superseded + superseded_by/superseded_at/supersede_reason 由 supersedeKnowledge 完成标记。 */ supersedes?: string; } /** 自动丰富指南的步骤 */ interface EnrichmentStep { /** 步骤编号 */ step_number: number; /** 步骤描述 */ action: string; /** 搜索查询关键词 */ search_queries?: string[]; /** 关注领域 */ focus_areas: string[]; } /** 自动丰富指南 */ interface EnrichmentGuide { /** 关联的知识条目名称 */ entry_name: string; /** 知识类型 */ type: KnowledgeEntry["type"]; /** 概述 */ overview: string; /** 丰富步骤列表 */ steps: EnrichmentStep[]; /** 权威来源列表 */ authoritative_sources: string[]; /** 完整度阈值要求 */ completeness_thresholds: Array<{ field: string; minimum: number; }>; /** 更新调用模板 */ update_call_template: string; } /** 新增知识条目的结果 */ export interface AddKnowledgeResult { /** 是否成功 */ success: boolean; /** 文件路径 */ file_path: string; /** 是否为草稿 */ is_draft: boolean; /** 结果消息 */ message: string; /** 自动丰富指南(可选) */ enrichment_guide?: EnrichmentGuide; } /** * 新增知识条目。 * 根据类型生成对应的模板内容,保存到草稿目录或正式目录。 * @param input - 新增知识条目输入 * @param config - 项目配置 * @returns 新增结果,包含文件路径和消息 */ export declare function addKnowledge(input: AddKnowledgeInput, config: ProjectConfig): Promise; /** 取代标记结果 */ export interface SupersedeKnowledgeResult { /** 是否成功 */ success: boolean; /** 旧条目文件路径 */ file_path: string; /** 备份路径 */ backup_path: string; /** 结果消息 */ message: string; /** 链冲突/状态冲突(磁盘现值与预期不符):调用方应回滚已写新条目并整体 fail-close,而非留半完成态 */ conflict?: boolean; } /** * 正式条目路径解析(add --supersedes 重放判定用,与 addKnowledge save_to_drafts=false 同一落位规则)。 * @param title - 条目标题(文件名) * @param type - 知识类型(决定类型目录) * @param config - 项目配置 */ export declare function resolveFormalKnowledgeFilePath(title: string, type: KnowledgeEntry["type"], config: ProjectConfig): string; /** * 读取知识文件 frontmatter(不带 body)。文件不存在或解析失败抛错,由调用方决定 fail-close 语义。 * @param filePath - 知识文件绝对路径 */ export declare function readKnowledgeFrontmatter(filePath: string): Promise>; /** * 标记旧条目为 superseded(add --supersede 原子操作的第二步:新条目已落位后调用)。 * status→superseded + 写入 superseded_by/superseded_at/supersede_reason,原文原位保留可追溯; * 沿用 .backups/ 备份惯例;已完整标记时幂等跳过(重放不产生新备份)。 * @param oldEntry - 被取代条目(索引中的条目,file_path 指向原文件) * @param successorName - 继任者条目名 * @param reason - 推翻理由(必填,写入旧条目,对齐显式推翻声明协议) * @param config - 项目配置 */ export declare function supersedeKnowledge(oldEntry: KnowledgeEntry, successorName: string, reason: string, config: ProjectConfig): Promise; /** 更新知识条目的输入参数 */ export interface UpdateKnowledgeInput { /** 知识条目名称 */ entry_name: string; /** 更新内容 */ updates: { /** 更新触发条件 */ triggers?: string; /** 替换完整正文 */ content?: string; /** 新增决策规则 */ add_decision_rules?: string[]; /** 新增验收标准 */ add_acceptance_criteria?: string[]; /** 更新状态 */ status?: KnowledgeEntry["status"]; /** 补登记继任者(旧条目漏标时补 superseded_by;自动写 superseded_at,status 未显式传时同步转 superseded) */ superseded_by?: string; }; } /** 更新知识条目的结果 */ export interface UpdateKnowledgeResult { /** 是否成功 */ success: boolean; /** 文件路径 */ file_path: string; /** 备份路径 */ backup_path: string; /** 结果消息 */ message: string; } /** * 更新已有的知识条目。 * 更新前自动创建备份,支持修改触发条件、状态、决策规则和验收标准。 * @param input - 更新输入参数 * @param knowledgeIndex - 知识索引管理器 * @param config - 项目配置 * @returns 更新结果,包含文件路径和备份路径 */ export declare function updateKnowledge(input: UpdateKnowledgeInput, knowledgeIndex: KnowledgeIndexManager, config: ProjectConfig): Promise; export {};