UNPKG

autosnippet

Version:

Extract code patterns into a knowledge base for AI coding assistants

236 lines (235 loc) 7.04 kB
/** * insight-gate.js Insight 质量门控领域函数 * * 从旧 HandoffProtocol.js 完整迁移的纯函数模块: * - 分析文本清洗 (sanitizeAnalysisText) * - AnalysisReport 构建 (v1) * - AnalysisArtifact 构建 (v2, evidenceMap/findings/negativeSignals) * - 多维度质量评分 (buildQualityScores) * - 质量门控 (v1 + v2) * - 重试 Prompt 构建 * - PipelineStrategy gate.evaluator 适配器 (insightGateEvaluator) * * PipelineStrategy bootstrap preset 直接引用。 * * @module insight-gate */ import { type ToolCall } from './EvidenceCollector.js'; /** Analyst 执行结果 */ interface AnalystResult { reply?: string; toolCalls?: ToolCall[]; tokenUsage?: unknown; reasoningQuality?: unknown; } /** ProjectGraph 最小接口 */ interface ProjectGraphLike { getClassInfo(className: string): { filePath?: string; } | null | undefined; getProtocolInfo(protocolName: string): { filePath?: string; } | null | undefined; } /** ActiveContext 最小接口 */ interface ActiveContextLike { distill(): { keyFindings: RawFinding[]; toolCallSummary: unknown[]; }; } /** 原始发现 (来自 ActiveContext.distill()) */ interface RawFinding { finding: string; evidence: string | string[] | unknown; importance: number; } /** 多维度质量评分 */ interface QualityScores { depthScore: number; breadthScore: number; evidenceScore: number; coherenceScore: number; } /** 质量报告 */ interface QualityReport { scores: QualityScores; totalScore: number; suggestions: string[]; } /** 门控选项 */ interface GateOptions { outputType?: string; } /** 门控结果 */ interface GateResult { pass: boolean; reason?: string; action?: 'retry' | 'degrade'; } /** 可进行门控评估的分析报告 */ interface GateableReport { analysisText: string; referencedFiles: string[]; qualityReport?: QualityReport; } /** * 清理 Analyst 分析文本中可能泄漏的系统 nudge / graceful exit 指令。 * 这些内容如果传给 Producer,会干扰其正常工作流。 */ export declare function sanitizeAnalysisText(text: string): string; /** * Analyst 的执行结果构建 AnalysisReport (v1) * * @param analystResult { reply, toolCalls } * @param dimensionId 维度 ID * @param [projectGraph] ProjectGraph 实例 */ export declare function buildAnalysisReport(analystResult: AnalystResult, dimensionId: string, projectGraph?: ProjectGraphLike | null): { analysisText: string; referencedFiles: string[]; searchQueries: string[]; classesExplored: string[]; dimensionId: string; metadata: { iterations: number; toolCallCount: number; tokenUsage: {} | null; reasoningQuality: {} | null; }; }; /** * Analyst 执行结果构建 AnalysisArtifact (v2 增强版) * * v1 AnalysisReport 基础上增加: * - evidenceMap: 文件 代码片段 + 摘要 * - explorationLog: 工具调用意图 + 结果摘要序列 * - negativeSignals: 搜索但未找到的模式 * - findings: 来自 ActiveContext 的结构化发现 * - qualityReport: 多维度质量评分 * * @param analystResult { reply, toolCalls } * @param dimensionId 维度 ID * @param [projectGraph] ProjectGraph 实例 * @param [activeContext] ActiveContext 实例 */ export declare function buildAnalysisArtifact(analystResult: AnalystResult, dimensionId: string, projectGraph?: ProjectGraphLike | null, activeContext?: ActiveContextLike | null): { analysisText: string; findings: { finding: string; evidence: string; importance: number; }[]; referencedFiles: string[]; dimensionId: string; evidenceMap: Map<string, import("./EvidenceCollector.js").EvidenceEntry>; explorationLog: import("./EvidenceCollector.js").ExplorationEntry[]; negativeSignals: import("./EvidenceCollector.js").NegativeSignal[]; fullToolTrace: ToolCall[]; qualityReport: { scores: QualityScores; totalScore: number; suggestions: string[]; }; metadata: { artifactVersion: number; iterations: number; toolCallCount: number; tokenUsage: {} | null; reasoningQuality: {} | null; }; searchQueries: string[]; classesExplored: string[]; }; /** * 分析质量门控 * * 自动检测 v1 (AnalysisReport) v2 (AnalysisArtifact): * - v2: qualityReport.totalScore 计算 * - v1: 使用 4 条规则 * * @param [options.outputType] 'analysis' | 'dual' | 'candidate' * @returns } */ export declare function analysisQualityGate(report: GateableReport, options?: GateOptions): GateResult; /** * 构建重试提示 * * @param reason Gate 失败原因 */ export declare function buildRetryPrompt(reason: string): string; /** * 面向 PipelineStrategy gate.evaluator 的包装函数。 * * PipelineStrategy (source, phaseResults, strategyContext) 签名 * 适配到 buildAnalysisArtifact + analysisQualityGate 调用链。 * * @param source 前一阶段 (analyze) reactLoop 返回值 * @param phaseResults 所有阶段结果 * @param strategyContext orchestrator 注入的运行时上下文 * @returns } */ export declare function insightGateEvaluator(source: unknown, phaseResults: Record<string, unknown>, strategyContext?: Record<string, unknown>): { action: string; reason: string; artifact: null; } | { action: string; reason: string; artifact: { analysisText: string; referencedFiles: string[]; searchQueries: string[]; classesExplored: string[]; dimensionId: string; metadata: { iterations: number; toolCallCount: number; tokenUsage: {} | null; reasoningQuality: {} | null; }; }; }; /** Tool call record for evolution gate */ interface EvolutionToolCallRecord { tool?: string; name?: string; args?: Record<string, unknown>; result?: unknown; } /** * Evolution Gate 评估器 面向 PipelineStrategy gate.evaluator * * 检查 Evolution Agent 是否对所有现有 Recipe 做出了决策: * - evolved (submit_knowledge with supersedes) * - deprecated (confirm_deprecation) * - skipped (skip_evolution) * * 如果还有未处理的 Recipe,返回 retry 要求补充决策。 * * 兼容旧字段: 优先读 existingRecipes,回退 decayedRecipes。 */ export declare function evolutionGateEvaluator(source: { toolCalls?: EvolutionToolCallRecord[]; } | null | undefined, _phaseResults: unknown, strategyContext?: { existingRecipes?: Array<{ id: string; }>; decayedRecipes?: Array<{ id: string; }>; }): { action: string; reason: string; artifact?: undefined; } | { action: string; artifact: { evolved: number; deprecated: number; skipped: number; totalRecipes: number; }; reason?: undefined; }; export {};