UNPKG

autosnippet

Version:

Extract code patterns into a knowledge base for AI coding assistants

93 lines (92 loc) 3.05 kB
/** * RecipeRelevanceAuditor — 基于代码证据验证 Recipe 当前相关性 * * Rescan 时主动触发,检查每个保留 Recipe 的代码证据是否仍然存在: * 1. 触发模式匹配 (trigger 引用的文件类型/路径模式是否有匹配) * 2. 代码符号存活 (content.pattern 引用的类名/函数名是否在 AST 中) * 3. 依赖关系完整 (涉及模块依赖是否在依赖图中) * 4. 源代码文件存活 (reasoning.sources + content.codeChanges 的文件是否存在) * * 评分后驱动快速衰退: * - healthy (80-100): 无操作 * - watch (60-79): 报告警告 * - decay (40-59): active → decaying (7d grace) * - severe (20-39): active → decaying (3d grace) * - dead (0-19): active → deprecated (immediate) * * 支持 Category 权重豁免:架构/规范类 Recipe 侧重触发模式而非具体符号。 * * @module service/evolution/RecipeRelevanceAuditor */ import type { ProposalRepository } from '../../repository/evolution/ProposalRepository.js'; import type KnowledgeRepositoryImpl from '../../repository/knowledge/KnowledgeRepository.impl.js'; /** Logger 接口 */ interface AuditorLogger { info(msg: string, meta?: Record<string, unknown>): void; warn(msg: string, meta?: Record<string, unknown>): void; } /** 知识条目快照 (来自 CleanupService.snapshotRecipes) */ export interface RecipeSnapshotEntry { id: string; title: string; trigger: string; category: string; dimensionId?: string; sourceFile?: string; lifecycle: string; } /** Phase 1-4 分析数据 */ export interface AnalysisData { /** 项目所有文件的相对路径 */ fileList: string[]; /** AST 解析的代码实体 (类名/函数名/协议名等) */ codeEntities: Array<{ name: string; kind?: string; file?: string; }>; /** 依赖关系图 */ dependencyGraph: Array<{ from: string; to: string; }>; } /** 单个 Recipe 的审计结果 */ export interface RelevanceAuditResult { recipeId: string; title: string; relevanceScore: number; verdict: 'healthy' | 'watch' | 'decay' | 'severe' | 'dead'; evidence: { triggerStillMatches: boolean; symbolsAlive: number; depsIntact: boolean; codeFilesExist: number; }; decayReasons: string[]; } /** 审计汇总 */ export interface RelevanceAuditSummary { totalAudited: number; healthy: number; watch: number; decay: number; severe: number; dead: number; results: RelevanceAuditResult[]; proposalsCreated: number; immediateDeprecated: number; } export declare class RecipeRelevanceAuditor { #private; constructor(opts: { knowledgeRepo: KnowledgeRepositoryImpl; proposalRepo?: ProposalRepository; logger?: AuditorLogger; }); /** * 审计所有保留 Recipe 的代码证据 */ audit(recipes: RecipeSnapshotEntry[], analysisData: AnalysisData): Promise<RelevanceAuditSummary>; } export {};