/** * Knowledge — 类型定义层模块。 * * 职责边界: * - 负责:知识条目与索引结构 * - 不负责:不属于本模块的职责由对应模块承担 * * 被谁调用:全项目各模块(类型定义) * 调用谁:无外部依赖 * * 数据流:类型定义 → 供其他模块引用 * 持久化:无持久化(纯计算/内存态) */ /** 知识条目 */ export interface KnowledgeEntry { /** 知识唯一标识 */ id: string; /** 文件路径 */ file_path: string; /** 知识名称 */ name: string; /** 知识类型 */ type: "pattern" | "procedure" | "domain" | "acceptance_template" | "review_rule" | "governance_rule" | "pipeline_procedure" | "artifact_template" | "checklist"; /** 适用能力域,未声明时不参与域过滤(视为不限定,纳入所有域候选) */ domain?: string[]; /** 触发关键词数组(替代旧 when 字段) */ triggers?: string[]; /** * 中文任务侧检索词(可选)。与 triggers 互补:triggers 偏规则语义(何时适用), * keywords 偏检索语义(任务会用什么词问)。中文正文不进关键词索引(体积不可控), * 任务侧词与规则措辞有语义鸿沟时(如任务词「收费」→ 规则「货币符号」)靠本字段补齐召回。 */ keywords?: string[]; /** 知识正文 */ body?: string; /** 运行时来源;由索引构建赋值,不写回知识文件。 */ source?: "project" | "global" | "builtin"; /** 适用范围 */ scope: string[]; /** 适用产品 */ products: string[]; /** 适用技术栈 */ tech_stack?: string; /** 创建时间 */ created_at: string; /** 更新时间 */ updated_at: string; /** 置信度 (0-1) */ confidence: number; /** 状态: draft=草稿, active=活跃, staged=暂存, deprecated=已废弃(无继任), pending_review=待审查, superseded=被明确继任(原文保留可追溯) */ status: "draft" | "active" | "staged" | "deprecated" | "pending_review" | "superseded"; /** * 修订链(supersede 链):新条目指向被取代条目(name/id)。 * 由 sf_knowledge add --supersedes 原子写入;与旧条目的 superseded_by 构成双向链,断链由 audit 检查。 */ supersedes?: string; /** 修订链:旧条目指向继任者(name/id);带此标记的条目退出 query 与 probe 执法(即使 status 仍为 active——补登记边缘态) */ superseded_by?: string; /** 修订链:被取代日期(YYYY-MM-DD) */ superseded_at?: string; /** 修订链:推翻理由(写入旧条目,对齐显式推翻声明协议) */ supersede_reason?: string; /** * 校验层(加载时必填,强校验在 index_manager.parseEntry / loadProjectProbeRules): * L0=确定性硬约束(探针) / L1=可执行策略(探针) / L2=LLM 审查注入(默认注入规则) / L3=人工确认。 * 缺省视为配置错误并被拒绝(不默认 L2,不静默兜底)。 */ verification_layer?: "L0" | "L1" | "L2" | "L3"; /** L0/L1 探针类型(仅 verification_layer=L0/L1 时合法,加载时与 layer 互斥校验) */ probe?: "builtin" | "semgrep" | "rego" | "property"; /** L0/L1 旁挂探针文件相对路径(相对 .soloforge/knowledge/,消费时 resolvePayload 路径穿越校验——加载层仅校验非空字符串) */ probe_path?: string; /** * builtin 自验样本(可选,仅 verification_layer=L0+probe=builtin 合法):一段必被 pattern 命中的违规样本文本。 * probe_rule 加载时对样本执行 pattern(与执行器同款 gm 语义),命中 0 处=记 error 拒载该 probe(条目保留纯文本)—— * 正则写错的 probe 会静默不拦(假执法比无执法更危险),样本自验是防静默失效的加载期防线。 */ selftest_sample?: string; /** * 执法点声明(可选):probe=本条自带 L0/L1 探针 / external:<标识>=项目自建执法点(如 external:check-currency)。 * 执法点唯一原则——同一规范禁双执法;缺省=未执法(仅规范文本)。校验在 index_manager.parseEntry / knowledge_service add。 */ enforcement?: string; } /** 知识索引 */ export interface KnowledgeIndex { /** 索引版本 */ version: number; /** 构建时间 */ built_at: string; /** 全局知识条目(~/.soloforge/patterns) */ global_entries: KnowledgeEntry[]; /** 项目级知识条目(.soloforge/knowledge/,用户自建) */ project_entries: KnowledgeEntry[]; /** 内置知识条目(SoloForge templates/knowledge/,直接从源头读取) */ builtin_entries: KnowledgeEntry[]; }