UNPKG

autosnippet

Version:

Extract code patterns into a knowledge base for AI coding assistants

214 lines (213 loc) 6.28 kB
/** * MCP Handlers 搜索类 * * v2: 合并原 4 个搜索函数(search / contextSearch / keywordSearch / semanticSearch) * 为统一 search() 入口,通过 mode 参数路由。 * consolidated.ts mode 路由直接指向本函数。 * * 设计原则: * 1. 通过 container.get('searchEngine') 获取 singleton 实例(含 vectorStore + aiProvider) * 2. 统一 responseTime、byKind 分组、kind 过滤 * 3. 投影使用 SearchTypes.slimSearchResult()(消除 3 处重复投影) */ import { type SlimSearchResult } from '#service/search/SearchTypes.js'; import type { McpContext, SearchArgs, SearchResultItem } from './types.js'; /** * 统一搜索入口 支持 auto / keyword / weighted / semantic / context 五种模式 * * 合并了原 search / contextSearch / keywordSearch / semanticSearch 4 个函数。 * mode 路由: * - auto (默认): FieldWeighted + semantic 融合 + Ranking Pipeline * - keyword: SQL LIKE 精确匹配,适合已知函数名/类名 * - weighted: 加权字段评分搜索(原 bm25 模式,已替换为 FieldWeightedScorer) * - bm25: weighted 的向后兼容别名 * - semantic: 向量语义搜索(不可用时降级 weighted) * - context: weighted + Ranking Pipeline + 会话上下文加成 * * 所有模式共享: kind 过滤 slimSearchResult 投影 byKind 分组 */ export declare function search(ctx: McpContext, args: SearchArgs): Promise<{ success: boolean; errorCode: string | null; message: string; data: { metadata?: { responseTimeMs: number; totalResults: any; kindCounts: { rule: number; pattern: number; fact: number; }; } | undefined; degraded?: boolean | undefined; degradedReason?: string | undefined; query: string; mode: any; kind: string | undefined; totalResults: any; items: any; byKind: { rule: { kind?: string; }[]; pattern: { kind?: string; }[]; fact: { kind?: string; }[]; }; kindCounts: { rule: number; pattern: number; fact: number; }; } | null; meta: { source?: string | undefined; responseTimeMs?: number | undefined; version: string; tool?: string | undefined; }; }>; /** contextSearch mode='context' 的别名 */ export declare function contextSearch(ctx: McpContext, args: SearchArgs): Promise<{ success: boolean; errorCode: string | null; message: string; data: { metadata?: { responseTimeMs: number; totalResults: any; kindCounts: { rule: number; pattern: number; fact: number; }; } | undefined; degraded?: boolean | undefined; degradedReason?: string | undefined; query: string; mode: any; kind: string | undefined; totalResults: any; items: any; byKind: { rule: { kind?: string; }[]; pattern: { kind?: string; }[]; fact: { kind?: string; }[]; }; kindCounts: { rule: number; pattern: number; fact: number; }; } | null; meta: { source?: string | undefined; responseTimeMs?: number | undefined; version: string; tool?: string | undefined; }; }>; /** keywordSearch mode='keyword' 的别名 */ export declare function keywordSearch(ctx: McpContext, args: SearchArgs): Promise<{ success: boolean; errorCode: string | null; message: string; data: { metadata?: { responseTimeMs: number; totalResults: any; kindCounts: { rule: number; pattern: number; fact: number; }; } | undefined; degraded?: boolean | undefined; degradedReason?: string | undefined; query: string; mode: any; kind: string | undefined; totalResults: any; items: any; byKind: { rule: { kind?: string; }[]; pattern: { kind?: string; }[]; fact: { kind?: string; }[]; }; kindCounts: { rule: number; pattern: number; fact: number; }; } | null; meta: { source?: string | undefined; responseTimeMs?: number | undefined; version: string; tool?: string | undefined; }; }>; /** semanticSearch mode='semantic' 的别名 */ export declare function semanticSearch(ctx: McpContext, args: SearchArgs): Promise<{ success: boolean; errorCode: string | null; message: string; data: { metadata?: { responseTimeMs: number; totalResults: any; kindCounts: { rule: number; pattern: number; fact: number; }; } | undefined; degraded?: boolean | undefined; degradedReason?: string | undefined; query: string; mode: any; kind: string | undefined; totalResults: any; items: any; byKind: { rule: { kind?: string; }[]; pattern: { kind?: string; }[]; fact: { kind?: string; }[]; }; kindCounts: { rule: number; pattern: number; fact: number; }; } | null; meta: { source?: string | undefined; responseTimeMs?: number | undefined; version: string; tool?: string | undefined; }; }>; /** @deprecated Use `slimSearchResult` from `SearchTypes.ts` instead */ export declare function _slimSearchItem(item: SearchResultItem): SlimSearchResult;