UNPKG

autosnippet

Version:

Extract code patterns into a knowledge base for AI coding assistants

149 lines (148 loc) 4.01 kB
/** * EvidenceCollector.js — 从 Analyst 工具调用中收集结构化证据 * * Bootstrap 质量门控核心组件: 将 Analyst 阶段的 toolCall 序列转化为 * 类型化的证据地图、探索日志和负空间信号,供 Producer 阶段直接引用。 * * 被 bootstrap-gate.js (buildAnalysisArtifact) 调用。 * * 设计原则: * - 不保留原始工具返回值 (体积过大) * - 按工具类型萃取关键信息 (代码片段、搜索命中、类结构) * - 记录负空间: 搜索但未找到的模式 → 告知 Producer "这不存在" * - 预算控制: 代码片段总量 ≤ 32KB (Layer 2 Detail) * * @module EvidenceCollector */ /** 代码片段 */ export interface CodeSnippet { startLine: number; endLine: number; content: string; analystNote?: string; } /** 文件证据条目 */ export interface EvidenceEntry { filePath: string; codeSnippets: CodeSnippet[]; summary: string; role?: string; } /** 探索日志条目 */ export interface ExplorationEntry { round: number; tool: string; intent: string; resultSummary: string; effective: boolean; } /** 负空间信号 */ export interface NegativeSignal { searchPattern: string; result: 'not_found' | 'empty' | 'irrelevant'; implication: string; } /** 收集结果 */ export interface EvidenceCollectorResult { evidenceMap: Map<string, EvidenceEntry>; explorationLog: ExplorationEntry[]; negativeSignals: NegativeSignal[]; } /** 工具调用参数 */ interface ToolCallArgs { filePath?: string; filePaths?: string[]; startLine?: number; pattern?: string; patterns?: string[]; query?: string; className?: string; protocolName?: string; directory?: string; path?: string; rootClass?: string; methodName?: string; finding?: string; dimensionId?: string; [key: string]: unknown; } /** 工具调用 */ export interface ToolCall { tool?: string; name?: string; params?: ToolCallArgs; args?: ToolCallArgs; result?: ToolResult; } /** 搜索匹配条目 */ interface SearchMatch { file?: string; line?: number; context?: string; } /** EvidenceCollector 选项 */ interface EvidenceCollectorOptions { snippetBudget?: number; } /** 工具结果对象 (所有可能的结果属性联合) */ interface ToolResultObject { files?: Array<{ path?: string; filePath?: string; content?: string; startLine?: number; }>; path?: string; filePath?: string; content?: string; startLine?: number; matches?: SearchMatch[]; batchResults?: Record<string, { matches?: SearchMatch[]; }>; className?: string; superClass?: string; protocols?: string[]; methods?: Array<string | { name?: string; selector?: string; }>; properties?: unknown[]; protocolName?: string; conformers?: string[]; summary?: string; entries?: unknown[]; children?: unknown[]; classes?: unknown[]; hierarchy?: unknown[]; [key: string]: unknown; } /** 工具结果类型 */ type ToolResult = string | ToolResultObject | null | undefined; export declare class EvidenceCollector { #private; /** @param [options.snippetBudget=32000] 代码片段总字符预算 */ constructor(options?: EvidenceCollectorOptions); /** * 处理单个工具调用,提取证据 * * @param toolCall { tool/name, params/args, result } * @param [round=0] 调用序号 */ processToolCall(toolCall: ToolCall, round?: number): void; /** * 构建收集结果 * * @returns {{ * evidenceMap: Map<string, EvidenceEntry>, * explorationLog: ExplorationEntry[], * negativeSignals: NegativeSignal[] * }} */ build(): { evidenceMap: Map<string, EvidenceEntry>; explorationLog: ExplorationEntry[]; negativeSignals: NegativeSignal[]; }; } export default EvidenceCollector;