agentic-flow 2.0.1-alpha.16 → 2.0.1-alpha.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +80 -0
- package/dist/.tsbuildinfo +1 -1
- package/dist/intelligence/EmbeddingCache.d.ts +105 -0
- package/dist/intelligence/EmbeddingCache.d.ts.map +1 -0
- package/dist/intelligence/EmbeddingCache.js +253 -0
- package/dist/intelligence/EmbeddingCache.js.map +1 -0
- package/dist/intelligence/EmbeddingService.d.ts +31 -1
- package/dist/intelligence/EmbeddingService.d.ts.map +1 -1
- package/dist/intelligence/EmbeddingService.js +86 -7
- package/dist/intelligence/EmbeddingService.js.map +1 -1
- package/dist/mcp/fastmcp/tools/hooks/intelligence-bridge.d.ts +121 -0
- package/dist/mcp/fastmcp/tools/hooks/intelligence-bridge.d.ts.map +1 -1
- package/dist/mcp/fastmcp/tools/hooks/intelligence-bridge.js +215 -0
- package/dist/mcp/fastmcp/tools/hooks/intelligence-bridge.js.map +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EmbeddingService.js","sourceRoot":"","sources":["../../src/intelligence/EmbeddingService.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * EmbeddingService - Unified embedding interface for agentic-flow\n *\n * Uses ruvector@0.1.61+ for ONNX embeddings with:\n * - SIMD128 acceleration (6x faster)\n * - Parallel worker threads (7 workers)\n * - all-MiniLM-L6-v2 model (384 dimensions)\n *\n * Configure via:\n * - AGENTIC_FLOW_EMBEDDINGS=simple|onnx|auto (default: auto)\n * - AGENTIC_FLOW_EMBEDDING_MODEL=all-MiniLM-L6-v2 (default)\n */\n\nexport type EmbeddingBackend = 'simple' | 'onnx' | 'auto';\n\nexport interface EmbeddingStats {\n backend: EmbeddingBackend;\n effectiveBackend: EmbeddingBackend;\n dimension: number;\n totalEmbeddings: number;\n totalLatencyMs: number;\n avgLatencyMs: number;\n cacheHits: number;\n modelLoaded: boolean;\n modelName?: string;\n simdAvailable?: boolean;\n parallelWorkers?: number;\n}\n\nexport interface SimilarityResult {\n similarity: number;\n timeMs: number;\n}\n\nexport interface SearchResult {\n text: string;\n index: number;\n similarity: number;\n}\n\nexport interface DuplicateGroup {\n indices: number[];\n texts: string[];\n similarity: number;\n}\n\n// Ruvector embedding result types\ninterface EmbeddingResult {\n embedding: Float32Array;\n timeMs?: number;\n}\n\ninterface BatchEmbeddingResult {\n embeddings: Float32Array[];\n timeMs?: number;\n}\n\n// Ruvector module interface\ninterface RuvectorModule {\n isOnnxAvailable: () => boolean;\n getDefaultEmbeddingService: () => any;\n embed: (text: string) => Promise<EmbeddingResult | null>;\n embedBatch: (texts: string[]) => Promise<BatchEmbeddingResult | null>;\n similarity: (text1: string, text2: string) => Promise<SimilarityResult>;\n toFloat32Array: (arr: number[]) => Float32Array;\n cosineSimilarity: (a: Float32Array, b: Float32Array) => number;\n getStats: () => any;\n shutdown: () => Promise<void>;\n}\n\n// ONNX availability cache\nlet onnxAvailable: boolean | null = null;\nlet ruvectorModule: RuvectorModule | null = null;\n\n/**\n * Detect ONNX/SIMD support by loading ruvector\n */\nasync function detectOnnx(): Promise<boolean> {\n if (onnxAvailable !== null) {\n return onnxAvailable;\n }\n\n try {\n const mod = await import('ruvector') as unknown as RuvectorModule;\n ruvectorModule = mod;\n onnxAvailable = mod.isOnnxAvailable?.() ?? false;\n return onnxAvailable;\n } catch (error) {\n // Ruvector loading failed - fall back to simple embeddings\n onnxAvailable = false;\n return false;\n }\n}\n\n// Simple LRU cache for embeddings\nclass EmbeddingCache {\n private cache: Map<string, Float32Array> = new Map();\n private maxSize: number;\n\n constructor(maxSize: number = 1000) {\n this.maxSize = maxSize;\n }\n\n get(key: string): Float32Array | undefined {\n const value = this.cache.get(key);\n if (value) {\n // Move to end (most recently used)\n this.cache.delete(key);\n this.cache.set(key, value);\n }\n return value;\n }\n\n set(key: string, value: Float32Array): void {\n if (this.cache.size >= this.maxSize) {\n // Delete oldest (first) entry\n const firstKey = this.cache.keys().next().value;\n if (firstKey) {\n this.cache.delete(firstKey);\n }\n }\n this.cache.set(key, value);\n }\n\n clear(): void {\n this.cache.clear();\n }\n\n get size(): number {\n return this.cache.size;\n }\n}\n\nexport class EmbeddingService {\n private static instance: EmbeddingService | null = null;\n\n private backend: EmbeddingBackend;\n private effectiveBackend: EmbeddingBackend | null = null;\n private dimension: number;\n private modelName: string;\n\n // ONNX state\n private modelLoaded: boolean = false;\n private loadingPromise: Promise<void> | null = null;\n\n // Stats\n private totalEmbeddings: number = 0;\n private totalLatencyMs: number = 0;\n private cacheHits: number = 0;\n\n // Cache\n private cache: EmbeddingCache;\n private cacheEnabled: boolean;\n\n // Corpus for search operations\n private corpus: { texts: string[]; embeddings: Float32Array[] } = { texts: [], embeddings: [] };\n\n private constructor() {\n // Default to 'auto' which will detect ONNX and use it if available\n this.backend = (process.env.AGENTIC_FLOW_EMBEDDINGS as EmbeddingBackend) || 'auto';\n this.modelName = process.env.AGENTIC_FLOW_EMBEDDING_MODEL || 'all-MiniLM-L6-v2';\n this.dimension = 256; // Will be updated when ONNX loads (384)\n this.cacheEnabled = process.env.AGENTIC_FLOW_EMBEDDING_CACHE !== 'false';\n this.cache = new EmbeddingCache(1000);\n }\n\n static getInstance(): EmbeddingService {\n if (!EmbeddingService.instance) {\n EmbeddingService.instance = new EmbeddingService();\n }\n return EmbeddingService.instance;\n }\n\n /**\n * Resolve the effective backend based on ONNX detection\n */\n private async resolveBackend(): Promise<EmbeddingBackend> {\n if (this.effectiveBackend) {\n return this.effectiveBackend;\n }\n\n if (this.backend === 'auto') {\n const hasOnnx = await detectOnnx();\n this.effectiveBackend = hasOnnx ? 'onnx' : 'simple';\n if (hasOnnx) {\n this.dimension = 384; // all-MiniLM-L6-v2 dimension\n }\n } else {\n this.effectiveBackend = this.backend;\n if (this.backend === 'onnx') {\n await detectOnnx(); // Ensure module is loaded\n this.dimension = 384;\n }\n }\n\n return this.effectiveBackend;\n }\n\n /**\n * Get configured backend (may be 'auto')\n */\n getBackend(): EmbeddingBackend {\n return this.backend;\n }\n\n /**\n * Get effective backend after detection\n */\n getEffectiveBackend(): EmbeddingBackend {\n return this.effectiveBackend || this.backend;\n }\n\n /**\n * Get embedding dimension\n */\n getDimension(): number {\n return this.dimension;\n }\n\n /**\n * Check if ONNX model is loaded\n */\n isModelLoaded(): boolean {\n return this.modelLoaded;\n }\n\n /**\n * Generate embedding for text\n * Auto-detects ONNX and uses it if available (default behavior)\n */\n async embed(text: string): Promise<Float32Array> {\n const startTime = performance.now();\n\n // Check cache\n if (this.cacheEnabled) {\n const cached = this.cache.get(text);\n if (cached) {\n this.cacheHits++;\n return cached;\n }\n }\n\n // Resolve backend (handles 'auto' mode)\n const effectiveBackend = await this.resolveBackend();\n let embedding: Float32Array;\n\n if (effectiveBackend === 'onnx' && ruvectorModule) {\n const result = await ruvectorModule.embed(text);\n if (result?.embedding) {\n embedding = result.embedding;\n this.modelLoaded = true;\n } else {\n embedding = this.simpleEmbed(text);\n }\n } else {\n embedding = this.simpleEmbed(text);\n }\n\n // Update stats\n this.totalEmbeddings++;\n this.totalLatencyMs += performance.now() - startTime;\n\n // Cache result\n if (this.cacheEnabled) {\n this.cache.set(text, embedding);\n }\n\n return embedding;\n }\n\n /**\n * Generate embeddings for multiple texts (batch processing with parallel workers)\n * Batch processing provides significant speedup with parallel ONNX workers\n */\n async embedBatch(texts: string[]): Promise<Float32Array[]> {\n const startTime = performance.now();\n\n // Check cache for all texts first\n if (this.cacheEnabled) {\n const cachedResults: (Float32Array | null)[] = texts.map(t => this.cache.get(t) || null);\n const allCached = cachedResults.every(r => r !== null);\n if (allCached) {\n this.cacheHits += texts.length;\n return cachedResults as Float32Array[];\n }\n }\n\n // Resolve backend\n const effectiveBackend = await this.resolveBackend();\n\n if (effectiveBackend === 'onnx' && ruvectorModule) {\n const result = await ruvectorModule.embedBatch(texts);\n if (result?.embeddings && result.embeddings.length === texts.length) {\n const embeddings = result.embeddings;\n\n // Cache individual embeddings\n if (this.cacheEnabled) {\n for (let i = 0; i < texts.length; i++) {\n this.cache.set(texts[i], embeddings[i]);\n }\n }\n\n // Update stats\n this.totalEmbeddings += texts.length;\n this.totalLatencyMs += performance.now() - startTime;\n this.modelLoaded = true;\n\n return embeddings;\n }\n }\n\n // Fall back to sequential for simple backend\n return Promise.all(texts.map(t => this.embed(t)));\n }\n\n /**\n * Compute similarity between two texts\n */\n async similarity(text1: string, text2: string): Promise<number> {\n const effectiveBackend = await this.resolveBackend();\n\n if (effectiveBackend === 'onnx' && ruvectorModule) {\n const result = await ruvectorModule.similarity(text1, text2);\n return result.similarity;\n }\n\n // Fall back to embedding + cosine\n const [e1, e2] = await Promise.all([this.embed(text1), this.embed(text2)]);\n return this.cosineSimilarity(e1, e2);\n }\n\n /**\n * Compute NxN similarity matrix for a list of texts\n * Uses parallel workers for ONNX backend\n */\n async similarityMatrix(texts: string[]): Promise<number[][]> {\n const embeddings = await this.embedBatch(texts);\n const n = texts.length;\n const matrix: number[][] = Array(n).fill(null).map(() => Array(n).fill(0));\n\n for (let i = 0; i < n; i++) {\n matrix[i][i] = 1.0; // Self-similarity\n for (let j = i + 1; j < n; j++) {\n const sim = this.cosineSimilarity(embeddings[i], embeddings[j]);\n matrix[i][j] = sim;\n matrix[j][i] = sim; // Symmetric\n }\n }\n\n return matrix;\n }\n\n /**\n * Build a corpus for semantic search\n */\n async buildCorpus(texts: string[]): Promise<void> {\n this.corpus.texts = texts;\n this.corpus.embeddings = await this.embedBatch(texts);\n }\n\n /**\n * Semantic search against the corpus\n * Returns top-k most similar texts\n */\n async semanticSearch(query: string, topK: number = 5): Promise<SearchResult[]> {\n if (this.corpus.texts.length === 0) {\n throw new Error('Corpus not built. Call buildCorpus() first.');\n }\n\n const queryEmbedding = await this.embed(query);\n const results: SearchResult[] = [];\n\n for (let i = 0; i < this.corpus.texts.length; i++) {\n const sim = this.cosineSimilarity(queryEmbedding, this.corpus.embeddings[i]);\n results.push({\n text: this.corpus.texts[i],\n index: i,\n similarity: sim,\n });\n }\n\n // Sort by similarity (descending) and return top-k\n results.sort((a, b) => b.similarity - a.similarity);\n return results.slice(0, topK);\n }\n\n /**\n * Find near-duplicate texts in a list\n * Groups texts with similarity above threshold\n */\n async findDuplicates(texts: string[], threshold: number = 0.9): Promise<DuplicateGroup[]> {\n const embeddings = await this.embedBatch(texts);\n const n = texts.length;\n const visited = new Set<number>();\n const groups: DuplicateGroup[] = [];\n\n for (let i = 0; i < n; i++) {\n if (visited.has(i)) continue;\n\n const group: DuplicateGroup = {\n indices: [i],\n texts: [texts[i]],\n similarity: 1.0,\n };\n\n for (let j = i + 1; j < n; j++) {\n if (visited.has(j)) continue;\n\n const sim = this.cosineSimilarity(embeddings[i], embeddings[j]);\n if (sim >= threshold) {\n group.indices.push(j);\n group.texts.push(texts[j]);\n group.similarity = Math.min(group.similarity, sim);\n visited.add(j);\n }\n }\n\n if (group.indices.length > 1) {\n visited.add(i);\n groups.push(group);\n }\n }\n\n return groups;\n }\n\n /**\n * K-means clustering of texts\n * Returns cluster assignments and centroids\n */\n async clusterTexts(\n texts: string[],\n k: number = 3,\n maxIterations: number = 100\n ): Promise<{ clusters: number[]; centroids: Float32Array[] }> {\n const embeddings = await this.embedBatch(texts);\n const n = texts.length;\n const dim = this.dimension;\n\n // Initialize centroids randomly (copy to new ArrayBuffer for consistent typing)\n const centroidIndices = new Set<number>();\n while (centroidIndices.size < k && centroidIndices.size < n) {\n centroidIndices.add(Math.floor(Math.random() * n));\n }\n let centroids: Float32Array[] = Array.from(centroidIndices).map(i => {\n const copy = new Float32Array(dim);\n copy.set(embeddings[i]);\n return copy;\n });\n\n let clusters = new Array(n).fill(0);\n\n for (let iter = 0; iter < maxIterations; iter++) {\n // Assign points to nearest centroid\n const newClusters = embeddings.map(emb => {\n let bestCluster = 0;\n let bestSim = -Infinity;\n for (let c = 0; c < k; c++) {\n const sim = this.cosineSimilarity(emb, centroids[c]);\n if (sim > bestSim) {\n bestSim = sim;\n bestCluster = c;\n }\n }\n return bestCluster;\n });\n\n // Check convergence\n const changed = newClusters.some((c, i) => c !== clusters[i]);\n clusters = newClusters;\n if (!changed) break;\n\n // Update centroids\n const newCentroids: Float32Array[] = [];\n for (let c = 0; c < k; c++) {\n newCentroids.push(new Float32Array(dim));\n }\n const counts = new Array(k).fill(0);\n\n for (let i = 0; i < n; i++) {\n const c = clusters[i];\n counts[c]++;\n for (let d = 0; d < dim; d++) {\n newCentroids[c][d] += embeddings[i][d];\n }\n }\n\n // Normalize centroids\n for (let c = 0; c < k; c++) {\n if (counts[c] > 0) {\n let norm = 0;\n for (let d = 0; d < dim; d++) {\n newCentroids[c][d] /= counts[c];\n norm += newCentroids[c][d] * newCentroids[c][d];\n }\n norm = Math.sqrt(norm) || 1;\n for (let d = 0; d < dim; d++) {\n newCentroids[c][d] /= norm;\n }\n }\n }\n centroids = newCentroids;\n }\n\n return { clusters, centroids };\n }\n\n /**\n * Stream embeddings for large batches (memory efficient)\n * Yields embeddings one at a time\n */\n async *streamEmbed(texts: string[], batchSize: number = 32): AsyncGenerator<{ index: number; text: string; embedding: Float32Array }> {\n for (let i = 0; i < texts.length; i += batchSize) {\n const batch = texts.slice(i, i + batchSize);\n const embeddings = await this.embedBatch(batch);\n\n for (let j = 0; j < batch.length; j++) {\n yield {\n index: i + j,\n text: batch[j],\n embedding: embeddings[j],\n };\n }\n }\n }\n\n /**\n * Simple hash-based embedding (fast, not semantic)\n */\n simpleEmbed(text: string, dim: number = 256): Float32Array {\n const embedding = new Float32Array(dim);\n\n // Multi-pass hash for better distribution\n for (let i = 0; i < text.length; i++) {\n const code = text.charCodeAt(i);\n embedding[i % dim] += code / 255;\n embedding[(i * 7) % dim] += (code * 0.3) / 255;\n embedding[(i * 13) % dim] += (code * 0.2) / 255;\n }\n\n // Normalize\n let norm = 0;\n for (let i = 0; i < dim; i++) {\n norm += embedding[i] * embedding[i];\n }\n norm = Math.sqrt(norm) || 1;\n for (let i = 0; i < dim; i++) {\n embedding[i] /= norm;\n }\n\n return embedding;\n }\n\n /**\n * Compute cosine similarity between two embeddings\n */\n cosineSimilarity(a: Float32Array, b: Float32Array): number {\n if (ruvectorModule?.cosineSimilarity) {\n return ruvectorModule.cosineSimilarity(a, b);\n }\n\n // JS fallback\n let dot = 0;\n let normA = 0;\n let normB = 0;\n for (let i = 0; i < a.length; i++) {\n dot += a[i] * b[i];\n normA += a[i] * a[i];\n normB += b[i] * b[i];\n }\n return dot / (Math.sqrt(normA) * Math.sqrt(normB) || 1);\n }\n\n /**\n * Get statistics\n */\n getStats(): EmbeddingStats {\n const effective = this.effectiveBackend || this.backend;\n const ruvectorStats = ruvectorModule?.getStats?.() || {};\n\n return {\n backend: this.backend,\n effectiveBackend: effective,\n dimension: this.dimension,\n totalEmbeddings: this.totalEmbeddings,\n totalLatencyMs: this.totalLatencyMs,\n avgLatencyMs: this.totalEmbeddings > 0 ? this.totalLatencyMs / this.totalEmbeddings : 0,\n cacheHits: this.cacheHits,\n modelLoaded: this.modelLoaded,\n modelName: effective === 'onnx' ? this.modelName : undefined,\n simdAvailable: ruvectorStats.simdAvailable ?? onnxAvailable,\n parallelWorkers: ruvectorStats.workerCount ?? undefined,\n };\n }\n\n /**\n * Clear cache\n */\n clearCache(): void {\n this.cache.clear();\n }\n\n /**\n * Clear corpus\n */\n clearCorpus(): void {\n this.corpus = { texts: [], embeddings: [] };\n }\n\n /**\n * Shutdown (cleanup workers)\n */\n async shutdown(): Promise<void> {\n if (ruvectorModule?.shutdown) {\n await ruvectorModule.shutdown();\n }\n }\n\n /**\n * Reset instance (for testing)\n */\n static async reset(): Promise<void> {\n if (EmbeddingService.instance) {\n await EmbeddingService.instance.shutdown();\n }\n EmbeddingService.instance = null;\n onnxAvailable = null;\n ruvectorModule = null;\n }\n}\n\n// Export singleton getter\nexport function getEmbeddingService(): EmbeddingService {\n return EmbeddingService.getInstance();\n}\n\n// Export convenience functions\nexport async function embed(text: string): Promise<Float32Array> {\n return getEmbeddingService().embed(text);\n}\n\nexport async function embedBatch(texts: string[]): Promise<Float32Array[]> {\n return getEmbeddingService().embedBatch(texts);\n}\n\nexport async function textSimilarity(text1: string, text2: string): Promise<number> {\n return getEmbeddingService().similarity(text1, text2);\n}\n\nexport function simpleEmbed(text: string, dim: number = 256): Float32Array {\n return getEmbeddingService().simpleEmbed(text, dim);\n}\n\nexport async function similarityMatrix(texts: string[]): Promise<number[][]> {\n return getEmbeddingService().similarityMatrix(texts);\n}\n\nexport async function semanticSearch(query: string, topK: number = 5): Promise<SearchResult[]> {\n return getEmbeddingService().semanticSearch(query, topK);\n}\n\nexport async function findDuplicates(texts: string[], threshold: number = 0.9): Promise<DuplicateGroup[]> {\n return getEmbeddingService().findDuplicates(texts, threshold);\n}\n\nexport async function clusterTexts(texts: string[], k: number = 3): Promise<{ clusters: number[]; centroids: Float32Array[] }> {\n return getEmbeddingService().clusterTexts(texts, k);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"EmbeddingService.js","sourceRoot":"","sources":["../../src/intelligence/EmbeddingService.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * EmbeddingService - Unified embedding interface for agentic-flow\n *\n * Uses ruvector@0.1.61+ for ONNX embeddings with:\n * - SIMD128 acceleration (6x faster)\n * - Parallel worker threads (7 workers)\n * - all-MiniLM-L6-v2 model (384 dimensions)\n * - Persistent SQLite cache (0.1ms vs 400ms)\n *\n * Configure via:\n * - AGENTIC_FLOW_EMBEDDINGS=simple|onnx|auto (default: auto)\n * - AGENTIC_FLOW_EMBEDDING_MODEL=all-MiniLM-L6-v2 (default)\n * - AGENTIC_FLOW_EMBEDDING_CACHE=true|false (default: true)\n * - AGENTIC_FLOW_PERSISTENT_CACHE=true|false (default: true)\n */\n\nimport { getEmbeddingCache, type EmbeddingCache } from './EmbeddingCache.js';\n\nexport type EmbeddingBackend = 'simple' | 'onnx' | 'auto';\n\nexport interface EmbeddingStats {\n backend: EmbeddingBackend;\n effectiveBackend: EmbeddingBackend;\n dimension: number;\n totalEmbeddings: number;\n totalLatencyMs: number;\n avgLatencyMs: number;\n cacheHits: number;\n modelLoaded: boolean;\n modelName?: string;\n simdAvailable?: boolean;\n parallelWorkers?: number;\n // Persistent cache stats\n persistentCache?: {\n enabled: boolean;\n entries: number;\n hits: number;\n misses: number;\n hitRate: number;\n dbSizeKB: number;\n };\n}\n\nexport interface SimilarityResult {\n similarity: number;\n timeMs: number;\n}\n\nexport interface SearchResult {\n text: string;\n index: number;\n similarity: number;\n}\n\nexport interface DuplicateGroup {\n indices: number[];\n texts: string[];\n similarity: number;\n}\n\n// Ruvector embedding result types\ninterface EmbeddingResult {\n embedding: Float32Array;\n timeMs?: number;\n}\n\ninterface BatchEmbeddingResult {\n embeddings: Float32Array[];\n timeMs?: number;\n}\n\n// Ruvector module interface\ninterface RuvectorModule {\n isOnnxAvailable: () => boolean;\n getDefaultEmbeddingService: () => any;\n embed: (text: string) => Promise<EmbeddingResult | null>;\n embedBatch: (texts: string[]) => Promise<BatchEmbeddingResult | null>;\n similarity: (text1: string, text2: string) => Promise<SimilarityResult>;\n toFloat32Array: (arr: number[]) => Float32Array;\n cosineSimilarity: (a: Float32Array, b: Float32Array) => number;\n getStats: () => any;\n shutdown: () => Promise<void>;\n}\n\n// ONNX availability cache\nlet onnxAvailable: boolean | null = null;\nlet ruvectorModule: RuvectorModule | null = null;\n\n/**\n * Detect ONNX/SIMD support by loading ruvector\n */\nasync function detectOnnx(): Promise<boolean> {\n if (onnxAvailable !== null) {\n return onnxAvailable;\n }\n\n try {\n const mod = await import('ruvector') as unknown as RuvectorModule;\n ruvectorModule = mod;\n onnxAvailable = mod.isOnnxAvailable?.() ?? false;\n return onnxAvailable;\n } catch (error) {\n // Ruvector loading failed - fall back to simple embeddings\n onnxAvailable = false;\n return false;\n }\n}\n\n// Simple LRU cache for embeddings (in-memory, fast)\nclass LRUCache {\n private cache: Map<string, Float32Array> = new Map();\n private maxSize: number;\n\n constructor(maxSize: number = 1000) {\n this.maxSize = maxSize;\n }\n\n get(key: string): Float32Array | undefined {\n const value = this.cache.get(key);\n if (value) {\n // Move to end (most recently used)\n this.cache.delete(key);\n this.cache.set(key, value);\n }\n return value;\n }\n\n set(key: string, value: Float32Array): void {\n if (this.cache.size >= this.maxSize) {\n // Delete oldest (first) entry\n const firstKey = this.cache.keys().next().value;\n if (firstKey) {\n this.cache.delete(firstKey);\n }\n }\n this.cache.set(key, value);\n }\n\n clear(): void {\n this.cache.clear();\n }\n\n get size(): number {\n return this.cache.size;\n }\n}\n\nexport class EmbeddingService {\n private static instance: EmbeddingService | null = null;\n\n private backend: EmbeddingBackend;\n private effectiveBackend: EmbeddingBackend | null = null;\n private dimension: number;\n private modelName: string;\n\n // ONNX state\n private modelLoaded: boolean = false;\n private loadingPromise: Promise<void> | null = null;\n\n // Stats\n private totalEmbeddings: number = 0;\n private totalLatencyMs: number = 0;\n private cacheHits: number = 0;\n\n // Cache (in-memory LRU)\n private cache: LRUCache;\n private cacheEnabled: boolean;\n\n // Persistent cache (SQLite)\n private persistentCache: EmbeddingCache | null = null;\n private persistentCacheEnabled: boolean;\n\n // Corpus for search operations\n private corpus: { texts: string[]; embeddings: Float32Array[] } = { texts: [], embeddings: [] };\n\n private constructor() {\n // Default to 'auto' which will detect ONNX and use it if available\n this.backend = (process.env.AGENTIC_FLOW_EMBEDDINGS as EmbeddingBackend) || 'auto';\n this.modelName = process.env.AGENTIC_FLOW_EMBEDDING_MODEL || 'all-MiniLM-L6-v2';\n this.dimension = 256; // Will be updated when ONNX loads (384)\n this.cacheEnabled = process.env.AGENTIC_FLOW_EMBEDDING_CACHE !== 'false';\n this.persistentCacheEnabled = process.env.AGENTIC_FLOW_PERSISTENT_CACHE !== 'false';\n this.cache = new LRUCache(1000);\n\n // Initialize persistent cache\n if (this.persistentCacheEnabled) {\n try {\n this.persistentCache = getEmbeddingCache({ dimension: 384 });\n } catch (error) {\n console.warn('[EmbeddingService] Persistent cache unavailable:', error);\n this.persistentCacheEnabled = false;\n }\n }\n }\n\n static getInstance(): EmbeddingService {\n if (!EmbeddingService.instance) {\n EmbeddingService.instance = new EmbeddingService();\n }\n return EmbeddingService.instance;\n }\n\n /**\n * Resolve the effective backend based on ONNX detection\n */\n private async resolveBackend(): Promise<EmbeddingBackend> {\n if (this.effectiveBackend) {\n return this.effectiveBackend;\n }\n\n if (this.backend === 'auto') {\n const hasOnnx = await detectOnnx();\n this.effectiveBackend = hasOnnx ? 'onnx' : 'simple';\n if (hasOnnx) {\n this.dimension = 384; // all-MiniLM-L6-v2 dimension\n }\n } else {\n this.effectiveBackend = this.backend;\n if (this.backend === 'onnx') {\n await detectOnnx(); // Ensure module is loaded\n this.dimension = 384;\n }\n }\n\n return this.effectiveBackend;\n }\n\n /**\n * Get configured backend (may be 'auto')\n */\n getBackend(): EmbeddingBackend {\n return this.backend;\n }\n\n /**\n * Get effective backend after detection\n */\n getEffectiveBackend(): EmbeddingBackend {\n return this.effectiveBackend || this.backend;\n }\n\n /**\n * Get embedding dimension\n */\n getDimension(): number {\n return this.dimension;\n }\n\n /**\n * Check if ONNX model is loaded\n */\n isModelLoaded(): boolean {\n return this.modelLoaded;\n }\n\n /**\n * Generate embedding for text\n * Auto-detects ONNX and uses it if available (default behavior)\n */\n async embed(text: string): Promise<Float32Array> {\n const startTime = performance.now();\n\n // Check in-memory cache first (fastest)\n if (this.cacheEnabled) {\n const cached = this.cache.get(text);\n if (cached) {\n this.cacheHits++;\n return cached;\n }\n }\n\n // Check persistent cache (SQLite, ~0.1ms)\n if (this.persistentCache) {\n const cached = this.persistentCache.get(text, this.modelName);\n if (cached) {\n this.cacheHits++;\n // Also store in memory cache for faster subsequent access\n if (this.cacheEnabled) {\n this.cache.set(text, cached);\n }\n return cached;\n }\n }\n\n // Resolve backend (handles 'auto' mode)\n const effectiveBackend = await this.resolveBackend();\n let embedding: Float32Array;\n\n if (effectiveBackend === 'onnx' && ruvectorModule) {\n const result = await ruvectorModule.embed(text);\n if (result?.embedding) {\n embedding = result.embedding;\n this.modelLoaded = true;\n } else {\n embedding = this.simpleEmbed(text);\n }\n } else {\n embedding = this.simpleEmbed(text);\n }\n\n // Update stats\n this.totalEmbeddings++;\n this.totalLatencyMs += performance.now() - startTime;\n\n // Cache result in memory\n if (this.cacheEnabled) {\n this.cache.set(text, embedding);\n }\n\n // Cache result persistently (for cross-session)\n if (this.persistentCache && effectiveBackend === 'onnx') {\n this.persistentCache.set(text, embedding, this.modelName);\n }\n\n return embedding;\n }\n\n /**\n * Generate embeddings for multiple texts (batch processing with parallel workers)\n * Batch processing provides significant speedup with parallel ONNX workers\n */\n async embedBatch(texts: string[]): Promise<Float32Array[]> {\n const startTime = performance.now();\n\n // Check cache for all texts first\n if (this.cacheEnabled) {\n const cachedResults: (Float32Array | null)[] = texts.map(t => this.cache.get(t) || null);\n const allCached = cachedResults.every(r => r !== null);\n if (allCached) {\n this.cacheHits += texts.length;\n return cachedResults as Float32Array[];\n }\n }\n\n // Resolve backend\n const effectiveBackend = await this.resolveBackend();\n\n if (effectiveBackend === 'onnx' && ruvectorModule) {\n const result = await ruvectorModule.embedBatch(texts);\n if (result?.embeddings && result.embeddings.length === texts.length) {\n const embeddings = result.embeddings;\n\n // Cache individual embeddings\n if (this.cacheEnabled) {\n for (let i = 0; i < texts.length; i++) {\n this.cache.set(texts[i], embeddings[i]);\n }\n }\n\n // Update stats\n this.totalEmbeddings += texts.length;\n this.totalLatencyMs += performance.now() - startTime;\n this.modelLoaded = true;\n\n return embeddings;\n }\n }\n\n // Fall back to sequential for simple backend\n return Promise.all(texts.map(t => this.embed(t)));\n }\n\n /**\n * Compute similarity between two texts\n */\n async similarity(text1: string, text2: string): Promise<number> {\n const effectiveBackend = await this.resolveBackend();\n\n if (effectiveBackend === 'onnx' && ruvectorModule) {\n const result = await ruvectorModule.similarity(text1, text2);\n return result.similarity;\n }\n\n // Fall back to embedding + cosine\n const [e1, e2] = await Promise.all([this.embed(text1), this.embed(text2)]);\n return this.cosineSimilarity(e1, e2);\n }\n\n /**\n * Compute NxN similarity matrix for a list of texts\n * Uses parallel workers for ONNX backend\n */\n async similarityMatrix(texts: string[]): Promise<number[][]> {\n const embeddings = await this.embedBatch(texts);\n const n = texts.length;\n const matrix: number[][] = Array(n).fill(null).map(() => Array(n).fill(0));\n\n for (let i = 0; i < n; i++) {\n matrix[i][i] = 1.0; // Self-similarity\n for (let j = i + 1; j < n; j++) {\n const sim = this.cosineSimilarity(embeddings[i], embeddings[j]);\n matrix[i][j] = sim;\n matrix[j][i] = sim; // Symmetric\n }\n }\n\n return matrix;\n }\n\n /**\n * Build a corpus for semantic search\n */\n async buildCorpus(texts: string[]): Promise<void> {\n this.corpus.texts = texts;\n this.corpus.embeddings = await this.embedBatch(texts);\n }\n\n /**\n * Semantic search against the corpus\n * Returns top-k most similar texts\n */\n async semanticSearch(query: string, topK: number = 5): Promise<SearchResult[]> {\n if (this.corpus.texts.length === 0) {\n throw new Error('Corpus not built. Call buildCorpus() first.');\n }\n\n const queryEmbedding = await this.embed(query);\n const results: SearchResult[] = [];\n\n for (let i = 0; i < this.corpus.texts.length; i++) {\n const sim = this.cosineSimilarity(queryEmbedding, this.corpus.embeddings[i]);\n results.push({\n text: this.corpus.texts[i],\n index: i,\n similarity: sim,\n });\n }\n\n // Sort by similarity (descending) and return top-k\n results.sort((a, b) => b.similarity - a.similarity);\n return results.slice(0, topK);\n }\n\n /**\n * Find near-duplicate texts in a list\n * Groups texts with similarity above threshold\n */\n async findDuplicates(texts: string[], threshold: number = 0.9): Promise<DuplicateGroup[]> {\n const embeddings = await this.embedBatch(texts);\n const n = texts.length;\n const visited = new Set<number>();\n const groups: DuplicateGroup[] = [];\n\n for (let i = 0; i < n; i++) {\n if (visited.has(i)) continue;\n\n const group: DuplicateGroup = {\n indices: [i],\n texts: [texts[i]],\n similarity: 1.0,\n };\n\n for (let j = i + 1; j < n; j++) {\n if (visited.has(j)) continue;\n\n const sim = this.cosineSimilarity(embeddings[i], embeddings[j]);\n if (sim >= threshold) {\n group.indices.push(j);\n group.texts.push(texts[j]);\n group.similarity = Math.min(group.similarity, sim);\n visited.add(j);\n }\n }\n\n if (group.indices.length > 1) {\n visited.add(i);\n groups.push(group);\n }\n }\n\n return groups;\n }\n\n /**\n * K-means clustering of texts\n * Returns cluster assignments and centroids\n */\n async clusterTexts(\n texts: string[],\n k: number = 3,\n maxIterations: number = 100\n ): Promise<{ clusters: number[]; centroids: Float32Array[] }> {\n const embeddings = await this.embedBatch(texts);\n const n = texts.length;\n const dim = this.dimension;\n\n // Initialize centroids randomly (copy to new ArrayBuffer for consistent typing)\n const centroidIndices = new Set<number>();\n while (centroidIndices.size < k && centroidIndices.size < n) {\n centroidIndices.add(Math.floor(Math.random() * n));\n }\n let centroids: Float32Array[] = Array.from(centroidIndices).map(i => {\n const copy = new Float32Array(dim);\n copy.set(embeddings[i]);\n return copy;\n });\n\n let clusters = new Array(n).fill(0);\n\n for (let iter = 0; iter < maxIterations; iter++) {\n // Assign points to nearest centroid\n const newClusters = embeddings.map(emb => {\n let bestCluster = 0;\n let bestSim = -Infinity;\n for (let c = 0; c < k; c++) {\n const sim = this.cosineSimilarity(emb, centroids[c]);\n if (sim > bestSim) {\n bestSim = sim;\n bestCluster = c;\n }\n }\n return bestCluster;\n });\n\n // Check convergence\n const changed = newClusters.some((c, i) => c !== clusters[i]);\n clusters = newClusters;\n if (!changed) break;\n\n // Update centroids\n const newCentroids: Float32Array[] = [];\n for (let c = 0; c < k; c++) {\n newCentroids.push(new Float32Array(dim));\n }\n const counts = new Array(k).fill(0);\n\n for (let i = 0; i < n; i++) {\n const c = clusters[i];\n counts[c]++;\n for (let d = 0; d < dim; d++) {\n newCentroids[c][d] += embeddings[i][d];\n }\n }\n\n // Normalize centroids\n for (let c = 0; c < k; c++) {\n if (counts[c] > 0) {\n let norm = 0;\n for (let d = 0; d < dim; d++) {\n newCentroids[c][d] /= counts[c];\n norm += newCentroids[c][d] * newCentroids[c][d];\n }\n norm = Math.sqrt(norm) || 1;\n for (let d = 0; d < dim; d++) {\n newCentroids[c][d] /= norm;\n }\n }\n }\n centroids = newCentroids;\n }\n\n return { clusters, centroids };\n }\n\n /**\n * Stream embeddings for large batches (memory efficient)\n * Yields embeddings one at a time\n */\n async *streamEmbed(texts: string[], batchSize: number = 32): AsyncGenerator<{ index: number; text: string; embedding: Float32Array }> {\n for (let i = 0; i < texts.length; i += batchSize) {\n const batch = texts.slice(i, i + batchSize);\n const embeddings = await this.embedBatch(batch);\n\n for (let j = 0; j < batch.length; j++) {\n yield {\n index: i + j,\n text: batch[j],\n embedding: embeddings[j],\n };\n }\n }\n }\n\n /**\n * Simple hash-based embedding (fast, not semantic)\n */\n simpleEmbed(text: string, dim: number = 256): Float32Array {\n const embedding = new Float32Array(dim);\n\n // Multi-pass hash for better distribution\n for (let i = 0; i < text.length; i++) {\n const code = text.charCodeAt(i);\n embedding[i % dim] += code / 255;\n embedding[(i * 7) % dim] += (code * 0.3) / 255;\n embedding[(i * 13) % dim] += (code * 0.2) / 255;\n }\n\n // Normalize\n let norm = 0;\n for (let i = 0; i < dim; i++) {\n norm += embedding[i] * embedding[i];\n }\n norm = Math.sqrt(norm) || 1;\n for (let i = 0; i < dim; i++) {\n embedding[i] /= norm;\n }\n\n return embedding;\n }\n\n /**\n * Compute cosine similarity between two embeddings\n */\n cosineSimilarity(a: Float32Array, b: Float32Array): number {\n if (ruvectorModule?.cosineSimilarity) {\n return ruvectorModule.cosineSimilarity(a, b);\n }\n\n // JS fallback\n let dot = 0;\n let normA = 0;\n let normB = 0;\n for (let i = 0; i < a.length; i++) {\n dot += a[i] * b[i];\n normA += a[i] * a[i];\n normB += b[i] * b[i];\n }\n return dot / (Math.sqrt(normA) * Math.sqrt(normB) || 1);\n }\n\n /**\n * Get statistics\n */\n getStats(): EmbeddingStats {\n const effective = this.effectiveBackend || this.backend;\n const ruvectorStats = ruvectorModule?.getStats?.() || {};\n\n // Get persistent cache stats\n let persistentCacheStats: EmbeddingStats['persistentCache'] | undefined;\n if (this.persistentCache) {\n const cacheStats = this.persistentCache.getStats();\n persistentCacheStats = {\n enabled: true,\n entries: cacheStats.totalEntries,\n hits: cacheStats.hits,\n misses: cacheStats.misses,\n hitRate: cacheStats.hitRate,\n dbSizeKB: Math.round(cacheStats.dbSizeBytes / 1024),\n };\n }\n\n return {\n backend: this.backend,\n effectiveBackend: effective,\n dimension: this.dimension,\n totalEmbeddings: this.totalEmbeddings,\n totalLatencyMs: this.totalLatencyMs,\n avgLatencyMs: this.totalEmbeddings > 0 ? this.totalLatencyMs / this.totalEmbeddings : 0,\n cacheHits: this.cacheHits,\n modelLoaded: this.modelLoaded,\n modelName: effective === 'onnx' ? this.modelName : undefined,\n simdAvailable: ruvectorStats.simdAvailable ?? onnxAvailable,\n parallelWorkers: ruvectorStats.workerCount ?? undefined,\n persistentCache: persistentCacheStats,\n };\n }\n\n /**\n * Clear in-memory cache\n */\n clearCache(): void {\n this.cache.clear();\n }\n\n /**\n * Clear persistent cache (SQLite)\n */\n clearPersistentCache(): void {\n if (this.persistentCache) {\n this.persistentCache.clear();\n }\n }\n\n /**\n * Clear all caches (memory + persistent)\n */\n clearAllCaches(): void {\n this.cache.clear();\n if (this.persistentCache) {\n this.persistentCache.clear();\n }\n }\n\n /**\n * Get persistent cache stats\n */\n getPersistentCacheStats(): { entries: number; hits: number; misses: number; hitRate: number } | null {\n if (!this.persistentCache) return null;\n const stats = this.persistentCache.getStats();\n return {\n entries: stats.totalEntries,\n hits: stats.hits,\n misses: stats.misses,\n hitRate: stats.hitRate,\n };\n }\n\n /**\n * Clear corpus\n */\n clearCorpus(): void {\n this.corpus = { texts: [], embeddings: [] };\n }\n\n /**\n * Shutdown (cleanup workers)\n */\n async shutdown(): Promise<void> {\n if (ruvectorModule?.shutdown) {\n await ruvectorModule.shutdown();\n }\n }\n\n /**\n * Reset instance (for testing)\n */\n static async reset(): Promise<void> {\n if (EmbeddingService.instance) {\n await EmbeddingService.instance.shutdown();\n }\n EmbeddingService.instance = null;\n onnxAvailable = null;\n ruvectorModule = null;\n }\n}\n\n// Export singleton getter\nexport function getEmbeddingService(): EmbeddingService {\n return EmbeddingService.getInstance();\n}\n\n// Export convenience functions\nexport async function embed(text: string): Promise<Float32Array> {\n return getEmbeddingService().embed(text);\n}\n\nexport async function embedBatch(texts: string[]): Promise<Float32Array[]> {\n return getEmbeddingService().embedBatch(texts);\n}\n\nexport async function textSimilarity(text1: string, text2: string): Promise<number> {\n return getEmbeddingService().similarity(text1, text2);\n}\n\nexport function simpleEmbed(text: string, dim: number = 256): Float32Array {\n return getEmbeddingService().simpleEmbed(text, dim);\n}\n\nexport async function similarityMatrix(texts: string[]): Promise<number[][]> {\n return getEmbeddingService().similarityMatrix(texts);\n}\n\nexport async function semanticSearch(query: string, topK: number = 5): Promise<SearchResult[]> {\n return getEmbeddingService().semanticSearch(query, topK);\n}\n\nexport async function findDuplicates(texts: string[], threshold: number = 0.9): Promise<DuplicateGroup[]> {\n return getEmbeddingService().findDuplicates(texts, threshold);\n}\n\nexport async function clusterTexts(texts: string[], k: number = 3): Promise<{ clusters: number[]; centroids: Float32Array[] }> {\n return getEmbeddingService().clusterTexts(texts, k);\n}\n"]}
|
|
@@ -182,5 +182,126 @@ export declare function getParallelStats(): Promise<{
|
|
|
182
182
|
parallelBusy: number;
|
|
183
183
|
parallelQueued: number;
|
|
184
184
|
}>;
|
|
185
|
+
/**
|
|
186
|
+
* Speculatively pre-embed files that are likely to be accessed
|
|
187
|
+
* Call in post-edit hook for related files
|
|
188
|
+
*/
|
|
189
|
+
export declare function speculativeEmbed(files: string[]): Promise<{
|
|
190
|
+
queued: number;
|
|
191
|
+
}>;
|
|
192
|
+
/**
|
|
193
|
+
* Analyze AST of multiple files in parallel
|
|
194
|
+
* For pre-edit and route hooks
|
|
195
|
+
*/
|
|
196
|
+
export declare function analyzeAST(files: Array<{
|
|
197
|
+
path: string;
|
|
198
|
+
content: string;
|
|
199
|
+
}>): Promise<Array<{
|
|
200
|
+
path: string;
|
|
201
|
+
functions: string[];
|
|
202
|
+
imports: string[];
|
|
203
|
+
exports: string[];
|
|
204
|
+
}>>;
|
|
205
|
+
/**
|
|
206
|
+
* Analyze code complexity metrics in parallel
|
|
207
|
+
* For session-end hook to track quality
|
|
208
|
+
*/
|
|
209
|
+
export declare function analyzeComplexity(files: string[]): Promise<Array<{
|
|
210
|
+
path: string;
|
|
211
|
+
cyclomatic: number;
|
|
212
|
+
cognitive: number;
|
|
213
|
+
lines: number;
|
|
214
|
+
}>>;
|
|
215
|
+
/**
|
|
216
|
+
* Build dependency graph from import statements
|
|
217
|
+
* For session-start hook context
|
|
218
|
+
*/
|
|
219
|
+
export declare function buildDependencyGraph(files: string[]): Promise<{
|
|
220
|
+
nodes: string[];
|
|
221
|
+
edges: Array<{
|
|
222
|
+
from: string;
|
|
223
|
+
to: string;
|
|
224
|
+
}>;
|
|
225
|
+
}>;
|
|
226
|
+
/**
|
|
227
|
+
* Parallel security scan (SAST)
|
|
228
|
+
* For pre-command hook before commits
|
|
229
|
+
*/
|
|
230
|
+
export declare function securityScan(files: string[]): Promise<Array<{
|
|
231
|
+
path: string;
|
|
232
|
+
severity: string;
|
|
233
|
+
message: string;
|
|
234
|
+
line: number;
|
|
235
|
+
}>>;
|
|
236
|
+
/**
|
|
237
|
+
* RAG retrieval with parallel chunk processing
|
|
238
|
+
* For recall hook
|
|
239
|
+
*/
|
|
240
|
+
export declare function ragRetrieve(query: string, chunks: Array<{
|
|
241
|
+
id: string;
|
|
242
|
+
text: string;
|
|
243
|
+
}>, topK?: number): Promise<Array<{
|
|
244
|
+
id: string;
|
|
245
|
+
text: string;
|
|
246
|
+
score: number;
|
|
247
|
+
}>>;
|
|
248
|
+
/**
|
|
249
|
+
* Rank context by relevance
|
|
250
|
+
* For suggest-context hook
|
|
251
|
+
*/
|
|
252
|
+
export declare function rankContext(query: string, contexts: Array<{
|
|
253
|
+
id: string;
|
|
254
|
+
content: string;
|
|
255
|
+
}>): Promise<Array<{
|
|
256
|
+
id: string;
|
|
257
|
+
relevance: number;
|
|
258
|
+
}>>;
|
|
259
|
+
/**
|
|
260
|
+
* Semantic deduplication
|
|
261
|
+
* For remember hook to avoid storing duplicates
|
|
262
|
+
*/
|
|
263
|
+
export declare function deduplicate(texts: string[], threshold?: number): Promise<{
|
|
264
|
+
unique: string[];
|
|
265
|
+
duplicateGroups: number[][];
|
|
266
|
+
}>;
|
|
267
|
+
/**
|
|
268
|
+
* Parallel git blame analysis
|
|
269
|
+
* For co-edit hook
|
|
270
|
+
*/
|
|
271
|
+
export declare function gitBlame(files: string[]): Promise<Array<{
|
|
272
|
+
path: string;
|
|
273
|
+
authors: Array<{
|
|
274
|
+
name: string;
|
|
275
|
+
lines: number;
|
|
276
|
+
}>;
|
|
277
|
+
}>>;
|
|
278
|
+
/**
|
|
279
|
+
* Code churn metrics for routing decisions
|
|
280
|
+
* For route hook to prioritize high-churn files
|
|
281
|
+
*/
|
|
282
|
+
export declare function gitChurn(patterns: string[], since?: string): Promise<Array<{
|
|
283
|
+
path: string;
|
|
284
|
+
commits: number;
|
|
285
|
+
additions: number;
|
|
286
|
+
deletions: number;
|
|
287
|
+
}>>;
|
|
288
|
+
/**
|
|
289
|
+
* Get attention mechanism for specific use case
|
|
290
|
+
*/
|
|
291
|
+
export declare function getAttentionForUseCase(useCase: 'pattern-matching' | 'agent-routing' | 'code-structure' | 'context-summary' | 'multi-agent'): Promise<{
|
|
292
|
+
type: string;
|
|
293
|
+
instance: any;
|
|
294
|
+
}>;
|
|
295
|
+
/**
|
|
296
|
+
* Parallel attention compute across multiple queries
|
|
297
|
+
*/
|
|
298
|
+
export declare function parallelAttentionCompute(queries: Float32Array[], keys: Float32Array[], values: Float32Array[], type?: 'hyperbolic' | 'flash' | 'moe'): Promise<Float32Array[]>;
|
|
299
|
+
/**
|
|
300
|
+
* Get extended worker pool stats
|
|
301
|
+
*/
|
|
302
|
+
export declare function getExtendedWorkerStats(): Promise<{
|
|
303
|
+
initialized: boolean;
|
|
304
|
+
operations: string[];
|
|
305
|
+
}>;
|
|
185
306
|
export type { AgentRoutingResult, Trajectory, LearningOutcome };
|
|
186
307
|
//# sourceMappingURL=intelligence-bridge.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"intelligence-bridge.d.ts","sourceRoot":"","sources":["../../../../../src/mcp/fastmcp/tools/hooks/intelligence-bridge.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"intelligence-bridge.d.ts","sourceRoot":"","sources":["../../../../../src/mcp/fastmcp/tools/hooks/intelligence-bridge.ts"],"names":[],"mappings":"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"}
|
|
@@ -496,4 +496,219 @@ function detectCommitPatterns(message) {
|
|
|
496
496
|
patterns.push('documentation');
|
|
497
497
|
return patterns;
|
|
498
498
|
}
|
|
499
|
+
// ============================================================================
|
|
500
|
+
// Extended Worker Pool (ruvector@0.1.63+)
|
|
501
|
+
// ============================================================================
|
|
502
|
+
let extendedWorkerPool = null;
|
|
503
|
+
/**
|
|
504
|
+
* Get the extended worker pool for hook operations
|
|
505
|
+
*/
|
|
506
|
+
async function getExtendedWorkerPool() {
|
|
507
|
+
if (extendedWorkerPool)
|
|
508
|
+
return extendedWorkerPool;
|
|
509
|
+
try {
|
|
510
|
+
if (!ruvectorModule) {
|
|
511
|
+
ruvectorModule = await import('ruvector');
|
|
512
|
+
}
|
|
513
|
+
if (ruvectorModule.ExtendedWorkerPool) {
|
|
514
|
+
extendedWorkerPool = new ruvectorModule.ExtendedWorkerPool();
|
|
515
|
+
await extendedWorkerPool.init?.();
|
|
516
|
+
console.log('[IntelligenceBridge] Extended worker pool initialized');
|
|
517
|
+
}
|
|
518
|
+
return extendedWorkerPool;
|
|
519
|
+
}
|
|
520
|
+
catch (error) {
|
|
521
|
+
return null;
|
|
522
|
+
}
|
|
523
|
+
}
|
|
524
|
+
/**
|
|
525
|
+
* Speculatively pre-embed files that are likely to be accessed
|
|
526
|
+
* Call in post-edit hook for related files
|
|
527
|
+
*/
|
|
528
|
+
export async function speculativeEmbed(files) {
|
|
529
|
+
const pool = await getExtendedWorkerPool();
|
|
530
|
+
if (pool?.speculativeEmbed) {
|
|
531
|
+
return pool.speculativeEmbed(files);
|
|
532
|
+
}
|
|
533
|
+
return { queued: 0 };
|
|
534
|
+
}
|
|
535
|
+
/**
|
|
536
|
+
* Analyze AST of multiple files in parallel
|
|
537
|
+
* For pre-edit and route hooks
|
|
538
|
+
*/
|
|
539
|
+
export async function analyzeAST(files) {
|
|
540
|
+
const pool = await getExtendedWorkerPool();
|
|
541
|
+
if (pool?.analyzeAST) {
|
|
542
|
+
return pool.analyzeAST(files);
|
|
543
|
+
}
|
|
544
|
+
// Fallback: simple regex-based extraction
|
|
545
|
+
return files.map(f => ({
|
|
546
|
+
path: f.path,
|
|
547
|
+
functions: (f.content.match(/function\s+(\w+)/g) || []).map(m => m.replace('function ', '')),
|
|
548
|
+
imports: (f.content.match(/import\s+.*from\s+['"]([^'"]+)['"]/g) || []),
|
|
549
|
+
exports: (f.content.match(/export\s+(default\s+)?(function|class|const)\s+(\w+)/g) || []),
|
|
550
|
+
}));
|
|
551
|
+
}
|
|
552
|
+
/**
|
|
553
|
+
* Analyze code complexity metrics in parallel
|
|
554
|
+
* For session-end hook to track quality
|
|
555
|
+
*/
|
|
556
|
+
export async function analyzeComplexity(files) {
|
|
557
|
+
const pool = await getExtendedWorkerPool();
|
|
558
|
+
if (pool?.analyzeComplexity) {
|
|
559
|
+
return pool.analyzeComplexity(files);
|
|
560
|
+
}
|
|
561
|
+
return files.map(f => ({ path: f, cyclomatic: 0, cognitive: 0, lines: 0 }));
|
|
562
|
+
}
|
|
563
|
+
/**
|
|
564
|
+
* Build dependency graph from import statements
|
|
565
|
+
* For session-start hook context
|
|
566
|
+
*/
|
|
567
|
+
export async function buildDependencyGraph(files) {
|
|
568
|
+
const pool = await getExtendedWorkerPool();
|
|
569
|
+
if (pool?.buildDependencyGraph) {
|
|
570
|
+
return pool.buildDependencyGraph(files);
|
|
571
|
+
}
|
|
572
|
+
return { nodes: files, edges: [] };
|
|
573
|
+
}
|
|
574
|
+
/**
|
|
575
|
+
* Parallel security scan (SAST)
|
|
576
|
+
* For pre-command hook before commits
|
|
577
|
+
*/
|
|
578
|
+
export async function securityScan(files) {
|
|
579
|
+
const pool = await getExtendedWorkerPool();
|
|
580
|
+
if (pool?.securityScan) {
|
|
581
|
+
return pool.securityScan(files);
|
|
582
|
+
}
|
|
583
|
+
return [];
|
|
584
|
+
}
|
|
585
|
+
/**
|
|
586
|
+
* RAG retrieval with parallel chunk processing
|
|
587
|
+
* For recall hook
|
|
588
|
+
*/
|
|
589
|
+
export async function ragRetrieve(query, chunks, topK = 5) {
|
|
590
|
+
const pool = await getExtendedWorkerPool();
|
|
591
|
+
if (pool?.ragRetrieve) {
|
|
592
|
+
return pool.ragRetrieve(query, chunks, topK);
|
|
593
|
+
}
|
|
594
|
+
// Fallback: use embedding service
|
|
595
|
+
const service = getEmbeddingServiceInstance();
|
|
596
|
+
await service.buildCorpus(chunks.map(c => c.text));
|
|
597
|
+
const results = await service.semanticSearch(query, topK);
|
|
598
|
+
return results.map((r, i) => ({
|
|
599
|
+
id: chunks[r.index]?.id || String(r.index),
|
|
600
|
+
text: r.text,
|
|
601
|
+
score: r.similarity,
|
|
602
|
+
}));
|
|
603
|
+
}
|
|
604
|
+
/**
|
|
605
|
+
* Rank context by relevance
|
|
606
|
+
* For suggest-context hook
|
|
607
|
+
*/
|
|
608
|
+
export async function rankContext(query, contexts) {
|
|
609
|
+
const pool = await getExtendedWorkerPool();
|
|
610
|
+
if (pool?.rankContext) {
|
|
611
|
+
return pool.rankContext(query, contexts);
|
|
612
|
+
}
|
|
613
|
+
// Fallback: use similarity
|
|
614
|
+
const service = getEmbeddingServiceInstance();
|
|
615
|
+
const queryEmb = await service.embed(query);
|
|
616
|
+
const results = [];
|
|
617
|
+
for (const ctx of contexts) {
|
|
618
|
+
const ctxEmb = await service.embed(ctx.content.slice(0, 500));
|
|
619
|
+
const relevance = service.cosineSimilarity(queryEmb, ctxEmb);
|
|
620
|
+
results.push({ id: ctx.id, relevance });
|
|
621
|
+
}
|
|
622
|
+
return results.sort((a, b) => b.relevance - a.relevance);
|
|
623
|
+
}
|
|
624
|
+
/**
|
|
625
|
+
* Semantic deduplication
|
|
626
|
+
* For remember hook to avoid storing duplicates
|
|
627
|
+
*/
|
|
628
|
+
export async function deduplicate(texts, threshold = 0.9) {
|
|
629
|
+
const pool = await getExtendedWorkerPool();
|
|
630
|
+
if (pool?.deduplicate) {
|
|
631
|
+
return pool.deduplicate(texts, threshold);
|
|
632
|
+
}
|
|
633
|
+
// Fallback: use embedding service
|
|
634
|
+
const service = getEmbeddingServiceInstance();
|
|
635
|
+
const duplicates = await service.findDuplicates(texts, threshold);
|
|
636
|
+
const duplicateIndices = new Set(duplicates.flatMap(d => d.indices.slice(1)));
|
|
637
|
+
const unique = texts.filter((_, i) => !duplicateIndices.has(i));
|
|
638
|
+
return {
|
|
639
|
+
unique,
|
|
640
|
+
duplicateGroups: duplicates.map(d => d.indices),
|
|
641
|
+
};
|
|
642
|
+
}
|
|
643
|
+
/**
|
|
644
|
+
* Parallel git blame analysis
|
|
645
|
+
* For co-edit hook
|
|
646
|
+
*/
|
|
647
|
+
export async function gitBlame(files) {
|
|
648
|
+
const pool = await getExtendedWorkerPool();
|
|
649
|
+
if (pool?.gitBlame) {
|
|
650
|
+
return pool.gitBlame(files);
|
|
651
|
+
}
|
|
652
|
+
return files.map(f => ({ path: f, authors: [] }));
|
|
653
|
+
}
|
|
654
|
+
/**
|
|
655
|
+
* Code churn metrics for routing decisions
|
|
656
|
+
* For route hook to prioritize high-churn files
|
|
657
|
+
*/
|
|
658
|
+
export async function gitChurn(patterns, since = '30 days ago') {
|
|
659
|
+
const pool = await getExtendedWorkerPool();
|
|
660
|
+
if (pool?.gitChurn) {
|
|
661
|
+
return pool.gitChurn(patterns, since);
|
|
662
|
+
}
|
|
663
|
+
return [];
|
|
664
|
+
}
|
|
665
|
+
/**
|
|
666
|
+
* Get attention mechanism for specific use case
|
|
667
|
+
*/
|
|
668
|
+
export async function getAttentionForUseCase(useCase) {
|
|
669
|
+
if (!ruvectorModule) {
|
|
670
|
+
ruvectorModule = await import('ruvector');
|
|
671
|
+
}
|
|
672
|
+
const attentionMap = {
|
|
673
|
+
'pattern-matching': 'MultiHeadAttention',
|
|
674
|
+
'agent-routing': 'MoEAttention',
|
|
675
|
+
'code-structure': 'GraphRoPeAttention',
|
|
676
|
+
'context-summary': 'LocalGlobalAttention',
|
|
677
|
+
'multi-agent': 'MoEAttention',
|
|
678
|
+
};
|
|
679
|
+
const type = attentionMap[useCase] || 'MultiHeadAttention';
|
|
680
|
+
const AttentionClass = ruvectorModule[type];
|
|
681
|
+
if (AttentionClass) {
|
|
682
|
+
return { type, instance: new AttentionClass(384, 4) };
|
|
683
|
+
}
|
|
684
|
+
return { type: 'fallback', instance: null };
|
|
685
|
+
}
|
|
686
|
+
/**
|
|
687
|
+
* Parallel attention compute across multiple queries
|
|
688
|
+
*/
|
|
689
|
+
export async function parallelAttentionCompute(queries, keys, values, type = 'moe') {
|
|
690
|
+
if (!ruvectorModule) {
|
|
691
|
+
ruvectorModule = await import('ruvector');
|
|
692
|
+
}
|
|
693
|
+
if (ruvectorModule.parallelAttentionCompute) {
|
|
694
|
+
return ruvectorModule.parallelAttentionCompute(queries, keys, values, type);
|
|
695
|
+
}
|
|
696
|
+
return [];
|
|
697
|
+
}
|
|
698
|
+
/**
|
|
699
|
+
* Get extended worker pool stats
|
|
700
|
+
*/
|
|
701
|
+
export async function getExtendedWorkerStats() {
|
|
702
|
+
const pool = await getExtendedWorkerPool();
|
|
703
|
+
if (pool) {
|
|
704
|
+
return {
|
|
705
|
+
initialized: true,
|
|
706
|
+
operations: [
|
|
707
|
+
'speculativeEmbed', 'analyzeAST', 'analyzeComplexity', 'buildDependencyGraph',
|
|
708
|
+
'securityScan', 'ragRetrieve', 'rankContext', 'deduplicate', 'gitBlame', 'gitChurn'
|
|
709
|
+
],
|
|
710
|
+
};
|
|
711
|
+
}
|
|
712
|
+
return { initialized: false, operations: [] };
|
|
713
|
+
}
|
|
499
714
|
//# sourceMappingURL=intelligence-bridge.js.map
|