autosnippet
Version:
Extract code patterns into a knowledge base for AI coding assistants
69 lines (68 loc) • 2.85 kB
TypeScript
/**
* IntentExtractor — Intake Layer
*
* Pure functions: extract intent signals from user query + active file.
* Builds multi-query set, infers language/module/scenario for search routing.
*
* @module service/task/IntentExtractor
*/
export type SearchScenario = 'lint' | 'generate' | 'search' | 'learning';
export interface ExtractedIntent {
/** Multi-query set: Q1 raw + Q2 tech terms + Q3 file context */
queries: string[];
/** Cross-language synonym queries (run in keyword mode to bypass semantic normalization) */
keywordQueries: string[];
/** Inferred language from activeFile or args */
language: string | null;
/** Inferred module path from activeFile */
module: string | null;
/** Search scenario for MultiSignalRanker routing */
scenario: SearchScenario;
/** Original inputs */
raw: {
userQuery: string;
activeFile?: string;
language?: string;
};
}
export interface TechTermOptions {
/** Project-specific class prefixes, e.g. ['BD', 'BBA', 'KS'] */
projectPrefixes?: string[];
/** Language/platform common prefixes, e.g. ObjC: ['UI', 'NS', 'CA', 'AV'] */
platformPrefixes?: string[];
}
/**
* Extract intent signals from user query and active file.
* Pure function — no side effects, no DI.
*/
export declare function extract(userQuery: string, activeFile?: string, language?: string, termOpts?: TechTermOptions): ExtractedIntent;
/**
* Build multi-query set from user query + active file.
* Q1: raw query, Q2: extracted tech terms, Q3: file context, Q4: synonym focus.
* Q1 is enriched with cross-language synonyms to bridge EN↔CJK matching.
* Q4 (long queries only): synonym expansion as a separate focused query
* to prevent BM25 dilution in verbose natural language inputs.
*/
export declare function buildQueries(userQuery: string, activeFile?: string, termOpts?: TechTermOptions): string[];
/**
* Build keyword-mode queries for cross-language synonym matching.
* Uses keyword mode to preserve raw FWS scores without CoarseRanker semantic normalization.
*/
export declare function buildKeywordQueries(userQuery: string): string[];
/**
* Extract tech terms from query using universal patterns + dynamic project prefixes.
*/
export declare function extractTechTerms(query: string, opts?: TechTermOptions): string[];
/**
* Infer file context string from file path for search augmentation.
* Returns module path + class name, e.g. "Services/Network BDNetworkManager"
*/
export declare function inferFileContext(filePath: string): string | null;
/**
* Infer language from file extension.
*/
export declare function inferLanguage(filePath: string): string | null;
/**
* Classify search scenario from user query (lightweight rule-based).
*/
export declare function classifyScenario(userQuery: string): SearchScenario;