UNPKG

autosnippet

Version:

Extract code patterns into a knowledge base for AI coding assistants

224 lines (223 loc) 6.53 kB
/** * RecipeProductionGateway 统一 Recipe 生产入口 * * 所有 Recipe 创建(Agent Tool / MCP / IDE Agent / Batch Import) * 通过此 Gateway 的统一管道,保证前置校验一致: * * 1. Schema Validation (UnifiedValidator) * 2. Similarity Check 去重检测(可选跳过) * 3. Consolidation Scan 融合/重组建议(可选) * 4. KnowledgeService.create() 包含 ConfidenceRouter staging / pending * 5. Quality Scoring 质量评分 * 6. Supersede Proposal 创建替代提案 * 7. Audit 统一审计 */ /** Lightweight log interface avoids importing static-only Logger class. */ interface GatewayLogger { info(msg: string): void; warn(msg: string): void; } export type GatewaySource = 'agent-tool' | 'mcp-external' | 'ide-agent' | 'batch-import'; export interface CreateRecipeItem { title?: string; description?: string; content?: { markdown?: string; pattern?: string; rationale?: string; [key: string]: unknown; }; trigger?: string; kind?: string; topicHint?: string; whenClause?: string; doClause?: string; dontClause?: string; coreCode?: string; sourceRefs?: string[]; tags?: string[]; reasoning?: { whyStandard?: string; sources?: string[]; confidence?: number; }; headers?: string[]; usageGuide?: string; scope?: string; complexity?: string; sourceFile?: string; knowledgeType?: string; language?: string; category?: string; source?: string; [key: string]: unknown; } export interface CreateRecipeRequest { source: GatewaySource; items: CreateRecipeItem[]; options?: { /** 跳过相似度检测(仅 batch-import 可用) */ skipSimilarityCheck?: boolean; /** 跳过 ConsolidationAdvisor 分析 */ skipConsolidation?: boolean; /** 被替代的旧 Recipe ID */ supersedes?: string; /** 相似度阈值,默认 0.7 */ similarityThreshold?: number; /** 已提交标题集(批量去重用) */ existingTitles?: Set<string>; /** 已提交指纹集(批量去重用) */ existingFingerprints?: Set<string>; /** UnifiedValidator 跳过系统注入字段列表 */ systemInjectedFields?: string[]; /** 跳过唯一性校验 */ skipUniqueness?: boolean; /** 操作用户 ID */ userId?: string; }; } export interface CreatedRecipeInfo { id: string; title: string; lifecycle: string; /** Raw saved entry from KnowledgeService.create() */ raw: Record<string, unknown>; } export interface RejectedRecipeInfo { index: number; title: string; reason: string; errors: string[]; warnings: string[]; } export interface MergedRecipeInfo { index: number; proposalId: string; type: string; targetRecipeId: string; targetTitle: string; status: string; expiresAt: number; message: string; } export interface BlockedRecipeInfo { index: number; title: string; consolidation: unknown; } export interface SimilarRecipeInfo { index: number; title: string; similarTo: { file: string; title: string; similarity: number; }[]; } export interface CreateRecipeResult { created: CreatedRecipeInfo[]; rejected: RejectedRecipeInfo[]; merged: MergedRecipeInfo[]; blocked: BlockedRecipeInfo[]; duplicates: SimilarRecipeInfo[]; supersedeProposal: { proposalId: string; } | null; } interface GatewayKnowledgeService { create(data: Record<string, unknown>, context: { userId: string; }): Promise<{ id: string; title: string; lifecycle: string; kind?: string; [key: string]: unknown; }>; updateQuality(id: string, context: { userId: string; }): Promise<unknown>; } interface GatewayConsolidationAdvisor { analyzeBatch(candidates: Array<{ title: string; category?: string; [key: string]: unknown; }>): { items: Array<{ index: number; advice: { action: string; confidence: number; reason: string; targetRecipe?: { id: string; title: string; similarity: number; }; reorganizeTargets?: { id: string; title: string; similarity: number; }[]; coveredBy?: { id: string; title: string; similarity: number; }[]; mergeDirection?: { addedDimensions: string[]; summary: string; }; }; }>; }; } interface GatewayProposalRepository { create(data: Record<string, unknown>): { id: string; status: string; expiresAt: number; [key: string]: unknown; } | null; } type GatewaySimilarityFn = (projectRoot: string, candidate: { title: string; summary: string; code: string; }, opts: { threshold: number; topK: number; }) => { file: string; title: string; similarity: number; }[]; export interface GatewayDeps { knowledgeService: GatewayKnowledgeService; projectRoot: string; logger?: GatewayLogger; /** ConsolidationAdvisor(可选 MCP 路径使用) */ consolidationAdvisor?: GatewayConsolidationAdvisor | null; /** ProposalRepository(可选 supersede 提案需要) */ proposalRepository?: GatewayProposalRepository | null; /** 相似度检测函数(可选 默认导入 SimilarityService) */ findSimilarRecipes?: GatewaySimilarityFn | null; } export declare class RecipeProductionGateway { #private; constructor(deps: GatewayDeps); /** * 统一创建入口 * * Pipeline: * 1. Schema Validation (UnifiedValidator) * 2. Similarity Check (除非 skipSimilarityCheck) * 3. Consolidation Scan (除非 skipConsolidation) * 4. KnowledgeService.create() ConfidenceRouter staging / pending * 5. Quality Scoring * 6. Supersede Proposal 创建 (if supersedes) */ create(request: CreateRecipeRequest): Promise<CreateRecipeResult>; } export {};