Files
ruvnet--ruflo/v3/@claude-flow/plugins/examples/ruvector-plugins/shared/vector-utils.ts
T
wehub-resource-sync 23f7624596
ADR-166 MCP Bridge Security Lock / Static-source security lock (push) Failing after 0s
ADR-166 MCP Bridge Security Lock / Compose default binds loopback + Mongo has auth (push) Failing after 2s
CodeQL Advanced / Analyze (rust) (push) Failing after 0s
ADR-166 MCP Bridge Security Lock / plugin-agent-federation bindHost default (push) Failing after 1s
ADR-166 MCP Bridge Security Lock / Runtime behavior — 401 + terminal gate + fail-closed (push) Failing after 4s
business-pods-smoke / smoke (push) Failing after 1s
all-plugins-smoke / smoke-all (push) Failing after 2s
CI/CD Pipeline / Security & Code Quality (push) Failing after 1s
CI/CD Pipeline / Test Suite (ubuntu-latest) (push) Failing after 1s
CI/CD Pipeline / Build & Package (macos-latest) (push) Has been skipped
CI/CD Pipeline / Build & Package (ubuntu-latest) (push) Has been skipped
CI/CD Pipeline / Build & Package (windows-latest) (push) Has been skipped
CI/CD Pipeline / Documentation & Examples (push) Failing after 1s
Clone Tracker (14-day rolling) / Snapshot clones for ruflo ecosystem (push) Failing after 1s
CodeQL Advanced / Analyze (actions) (push) Failing after 1s
CodeQL Advanced / Analyze (javascript-typescript) (push) Failing after 1s
federation-peer-rust / stable-noop (push) Failing after 1s
metaharness-ci / score (push) Failing after 1s
metaharness-ci / router-compat (push) Failing after 0s
metaharness-ci / similarity-tests (push) Failing after 0s
no-agentbbs-smoke / smoke-without-agentbbs (push) Failing after 1s
V3 CI/CD Pipeline / Build V3 (windows-latest) (push) Has been skipped
codex-integration-audit / Codex integration audit (push) Failing after 1s
helpers-manifest-guard / guard (push) Failing after 1s
🔗 Cross-Agent Integration Tests / 🤝 Agent Coordination Tests (push) Has been skipped
🔗 Cross-Agent Integration Tests / 🧠 Memory Sharing Integration (push) Has been skipped
🔗 Cross-Agent Integration Tests / 🛡️ Fault Tolerance Tests (push) Has been skipped
🔗 Cross-Agent Integration Tests / ⚡ Performance Integration Tests (push) Has been skipped
metaharness-ci / mcp-scan (push) Failing after 1s
metaharness-ci / eject-dryrun (push) Failing after 1s
metaharness-ci / metaharness-real-data (push) Failing after 0s
no-cli-optdep-bloat-2561 / guard (push) Failing after 1s
no-metaharness-smoke / smoke-without-metaharness (push) Failing after 1s
no-phantom-agentic-flow-subpath / guard (push) Failing after 1s
🔄 Automated Rollback Manager / 🚨 Failure Detection (push) Failing after 1s
V3 CI/CD Pipeline / Plugin hooks smoke / ubuntu-latest / Node 22 (push) Failing after 1s
V3 CI/CD Pipeline / ruflo-graph-intelligence build + test smoke (#2044, ADR-123) (push) Failing after 1s
CVE Audit Gate / Audit root (critical-blocking) (push) Failing after 2s
cost-tracker-smoke / smoke (push) Failing after 3s
oia-audit-weekly / audit (push) Failing after 2s
ruflo-agent-smoke / ruflo-agent structural smoke (push) Failing after 1s
📊 Status Badges Update / 📊 Update Status Badges (push) Failing after 1s
V3 CI/CD Pipeline / Static regression guards (#2267 YAML + (push) Failing after 1s
V3 CI/CD Pipeline / Test V3 Packages (push) Failing after 0s
V3 CI/CD Pipeline / agent_execute provider routing smoke (#2042) (push) Failing after 0s
CVE Audit Gate / Audit v3 (critical-blocking) (push) Failing after 1s
federation-peer-rust / stable-native (push) Failing after 2s
🔗 Cross-Agent Integration Tests / 🚀 Integration Test Setup (push) Failing after 2s
neural-trader-smoke / runtime-smoke (push) Failing after 1s
V3 CI/CD Pipeline / Build V3 (macos-latest) (push) Has been skipped
V3 CI/CD Pipeline / Build V3 (ubuntu-latest) (push) Has been skipped
V3 CI/CD Pipeline / Type Check V3 (push) Failing after 1s
V3 CI/CD Pipeline / Smoke (no better-sqlite3) / ubuntu-latest / Node 24 (push) Failing after 1s
V3 CI/CD Pipeline / Smoke (no better-sqlite3) / ubuntu-latest / Node 22 (push) Failing after 2s
V3 CI/CD Pipeline / browser rvf create flag smoke (#2015) (push) Failing after 0s
V3 CI/CD Pipeline / Dependency review (#2046) (push) Has been skipped
V3 CI/CD Pipeline / Supply-chain audit (#2046) (push) Failing after 0s
V3 CI/CD Pipeline / witness marker drift smoke (#2021) (push) Failing after 1s
V3 CI/CD Pipeline / neural-trader portfolio CG smoke (#2068, ADR-126 Phase 3) (push) Failing after 1s
V3 CI/CD Pipeline / neural-trader backtest signing smoke (#2068, ADR-126 Phase 4) (push) Failing after 1s
V3 CI/CD Pipeline / kg-extract type-import classification smoke (#2049) (push) Failing after 0s
V3 CI/CD Pipeline / witness verify precondition smoke (#1880) (push) Failing after 2s
V3 CI/CD Pipeline / neural-trader pipeline risk-gate smoke (#2068, ADR-126 Phase 5) (push) Failing after 0s
V3 CI/CD Pipeline / neural-trader feature attribution smoke (#2068, ADR-126 Phase 6) (push) Failing after 0s
V3 CI/CD Pipeline / plugin-registry signature verification smoke (#1922, CWE-347) (push) Failing after 4s
V3 CI/CD Pipeline / memory stats legacy-DB smoke (#2120) (push) Failing after 4s
V3 CI/CD Pipeline / github deprecated actions smoke (#2089, ADR-127 Phase 3) (push) Failing after 1s
V3 CI/CD Pipeline / graph query + pathfinder smoke (ADR-130 P2+P5) (push) Has been skipped
V3 CI/CD Pipeline / graph trajectory hooks smoke (ADR-130 P3) (push) Has been skipped
V3 CI/CD Pipeline / graph plugin adapter smoke (ADR-130 P4) (push) Has been skipped
V3 CI/CD Pipeline / graph benchmark (ADR-130 P6) (push) Has been skipped
V3 CI/CD Pipeline / statusline generator delegation smoke (#2195) (push) Failing after 1s
V3 CI/CD Pipeline / wizard init regression guard (#2206 (push) Failing after 1s
V3 CI/CD Pipeline / memory no-stray-db smoke (ADR-125 P7) (push) Failing after 1s
V3 CI/CD Pipeline / github-safe injection smoke (#2089, ADR-127 Phase 1) (push) Failing after 1s
V3 CI/CD Pipeline / github actions pin smoke (#2089, ADR-127 Phase 1) (push) Failing after 1s
V3 CI/CD Pipeline / github attribution opt-in smoke (#2089, ADR-127 Phase 4) (push) Failing after 1s
V3 CI/CD Pipeline / pre-bash hook safety smoke (#2017) (push) Failing after 1s
V3 CI/CD Pipeline / Memory import smoke / ubuntu-latest (push) Failing after 0s
V3 CI/CD Pipeline / MCP protocol smoke / ubuntu-latest (push) Failing after 2s
V3 CI/CD Pipeline / ruvllm WASM auto-init smoke (#2086) (push) Failing after 4s
V3 CI/CD Pipeline / MCP paired-tool round-trip smoke (#1889) (push) Failing after 1s
V3 CI/CD Pipeline / Plugin package install-safety (#1902/#1903/#1904) (push) Failing after 1s
V3 CI/CD Pipeline / Tool description discoverability (ADR-112) (push) Failing after 3s
V3 CI/CD Pipeline / CLI npx-install smoke (#1147 / (22) (push) Failing after 1s
V3 CI/CD Pipeline / CLI npx-install smoke (#1147 / (24) (push) Failing after 1s
V3 CI/CD Pipeline / Windows hook shim smoke (#2132) / ubuntu-latest (push) Failing after 2s
V3 CI/CD Pipeline / Windows hook execution smoke (#2132) / ubuntu-latest (push) Failing after 1s
V3 CI/CD Pipeline / Windows init hooks smoke (#2132) / ubuntu-latest (push) Failing after 1s
V3 CI/CD Pipeline / Vector-index dimension audit (#1947) (push) Failing after 0s
V3 CI/CD Pipeline / Hook-command install safety (#1921) (push) Failing after 1s
V3 CI/CD Pipeline / ToolOutputGuardrail smoke (ADR-131, (push) Failing after 1s
V3 CI/CD Pipeline / init-bundle invariants smoke (#2095, ADR-128 Phase 5) (push) Failing after 1s
V3 CI/CD Pipeline / wasm provider bridge smoke (ADR-129 P1) (push) Failing after 2s
V3 CI/CD Pipeline / wasm gallery CRUD smoke (ADR-129 P3) (push) Failing after 1s
V3 CI/CD Pipeline / wasm plugin bridge smoke (ADR-129 P4) (push) Failing after 0s
V3 CI/CD Pipeline / wasm compose smoke (ADR-129 P2) (push) Failing after 4s
V3 CI/CD Pipeline / graph schema smoke (ADR-130 P1) (push) Failing after 0s
Validate Marketplace / validate (push) Failing after 1s
🔍 Verification Pipeline / 🚀 Setup Verification (push) Failing after 1s
🔍 Verification Pipeline / 🛡️ Security Verification (push) Has been skipped
🔍 Verification Pipeline / 📝 Code Quality (push) Has been skipped
🔍 Verification Pipeline / 🧪 Test Verification (${{ matrix.os }}, Node ${{ matrix.node }}) (push) Has been skipped
🔍 Verification Pipeline / 🏗️ Build Verification (push) Has been skipped
🔍 Verification Pipeline / 📚 Documentation Verification (push) Has been skipped
CVE Audit Gate / High-severity report (warn only) (push) Has been cancelled
🔄 Automated Rollback Manager / 🔄 Execute Rollback (push) Has been cancelled
🔄 Automated Rollback Manager / ✅ Post-Rollback Verification (push) Has been cancelled
🔄 Automated Rollback Manager / 📊 Rollback Monitoring (push) Has been cancelled
V3 CI/CD Pipeline / Windows init hooks smoke (#2132) / windows-latest (push) Has been cancelled
V3 CI/CD Pipeline / Windows hook execution smoke (#2132) / macos-latest (push) Has been cancelled
V3 CI/CD Pipeline / Windows hook execution smoke (#2132) / windows-latest (push) Has been cancelled
🔄 Automated Rollback Manager / ⏳ Manual Rollback Approval (push) Has been cancelled
V3 CI/CD Pipeline / MCP protocol smoke / macos-latest (push) Has been cancelled
V3 CI/CD Pipeline / Memory import smoke / macos-latest (push) Has been cancelled
V3 CI/CD Pipeline / Windows hook shim smoke (#2132) / macos-latest (push) Has been cancelled
V3 CI/CD Pipeline / Windows hook shim smoke (#2132) / windows-latest (push) Has been cancelled
V3 CI/CD Pipeline / Windows init hooks smoke (#2132) / macos-latest (push) Has been cancelled
V3 CI/CD Pipeline / Witness verify (signed manifest) / macos-latest (push) Has been cancelled
V3 CI/CD Pipeline / Witness verify (signed manifest) / ubuntu-latest (push) Has been cancelled
V3 CI/CD Pipeline / Witness verify (signed manifest) / windows-latest (push) Has been cancelled
V3 CI/CD Pipeline / Publish to npm (alpha) (push) Has been cancelled
V3 CI/CD Pipeline / Smoke (no better-sqlite3) / macos-latest / Node 22 (push) Has been cancelled
V3 CI/CD Pipeline / Plugin hooks smoke / macos-latest / Node 22 (push) Has been cancelled
CI/CD Pipeline / Deploy & Release (push) Has been cancelled
CI/CD Pipeline / CI Status (push) Has been cancelled
🔗 Cross-Agent Integration Tests / 📊 Integration Test Report (push) Has been cancelled
🔄 Automated Rollback Manager / 🔍 Pre-Rollback Validation (push) Has been cancelled
🔍 Verification Pipeline / ⚡ Performance Verification (push) Has been cancelled
🔍 Verification Pipeline / 📊 Verification Report (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:02:19 +08:00

258 lines
7.6 KiB
TypeScript

/**
* Shared Vector Database Utilities
*
* Consolidated implementations for all RuVector plugins.
*/
// ============================================================================
// Interfaces
// ============================================================================
/**
* Vector database interface for HNSW operations
*/
export interface IVectorDB {
insert(vector: Float32Array, id: string, metadata?: Record<string, unknown>): string;
search(query: Float32Array, k: number, filter?: Record<string, unknown>): Array<{
id: string;
score: number;
metadata?: Record<string, unknown>;
}>;
get?(id: string): { vector: Float32Array; metadata: Record<string, unknown> } | null;
delete(id: string): boolean;
size(): number;
}
/**
* LoRA engine interface for neural adaptation
*/
export interface ILoRAEngine {
createAdapter(category: string, rank: number): Promise<LoRAAdapter>;
updateAdapter(adapterId: string, gradient: Float32Array, learningRate: number): Promise<void>;
applyEWC?(adapterId: string, lambda: number): Promise<void>;
computeGradient(input: Float32Array, target: Float32Array): Float32Array;
}
export interface LoRAAdapter {
id: string;
category: string;
rank: number;
alpha: number;
}
// ============================================================================
// Fallback Implementations
// ============================================================================
/**
* Fallback vector database when @ruvector/wasm is not available.
* Uses in-memory Map with brute-force cosine similarity search.
*/
export class FallbackVectorDB implements IVectorDB {
private vectors = new Map<string, { vector: Float32Array; metadata: Record<string, unknown> }>();
constructor(private dimensions: number) {}
insert(vector: Float32Array, id: string, metadata: Record<string, unknown> = {}): string {
this.vectors.set(id, { vector, metadata });
return id;
}
search(query: Float32Array, k: number): Array<{ id: string; score: number; metadata?: Record<string, unknown> }> {
const results: Array<{ id: string; score: number; metadata?: Record<string, unknown> }> = [];
for (const [id, entry] of this.vectors) {
const score = cosineSimilarity(query, entry.vector);
results.push({ id, score, metadata: entry.metadata });
}
return results.sort((a, b) => b.score - a.score).slice(0, k);
}
get(id: string): { vector: Float32Array; metadata: Record<string, unknown> } | null {
return this.vectors.get(id) ?? null;
}
delete(id: string): boolean {
return this.vectors.delete(id);
}
size(): number {
return this.vectors.size;
}
}
/**
* Fallback LoRA engine when @ruvector/learning-wasm is not available.
* Uses simple gradient descent with in-memory weights.
*/
export class FallbackLoRAEngine implements ILoRAEngine {
private adapters = new Map<string, LoRAAdapter>();
private adapterWeights = new Map<string, Float32Array>();
private nextId = 1;
async createAdapter(category: string, rank: number): Promise<LoRAAdapter> {
const adapter: LoRAAdapter = {
id: `adapter-${this.nextId++}`,
category,
rank,
alpha: 16,
};
this.adapters.set(adapter.id, adapter);
this.adapterWeights.set(adapter.id, new Float32Array(rank * 768));
return adapter;
}
async updateAdapter(adapterId: string, gradient: Float32Array, learningRate: number): Promise<void> {
const weights = this.adapterWeights.get(adapterId);
if (weights) {
const len = Math.min(weights.length, gradient.length);
for (let i = 0; i < len; i++) {
weights[i] -= learningRate * gradient[i];
}
}
}
async applyEWC(adapterId: string, lambda: number): Promise<void> {
const weights = this.adapterWeights.get(adapterId);
if (weights) {
for (let i = 0; i < weights.length; i++) {
weights[i] *= 1 - lambda * 0.01;
}
}
}
computeGradient(input: Float32Array, target: Float32Array): Float32Array {
const gradient = new Float32Array(input.length);
for (let i = 0; i < input.length; i++) {
gradient[i] = (input[i] - (target[i] || 0)) * 0.01;
}
return gradient;
}
}
// ============================================================================
// Factory Functions
// ============================================================================
/**
* Create a vector database - uses @ruvector/wasm in production, fallback otherwise.
*/
export async function createVectorDB(dimensions: number): Promise<IVectorDB> {
try {
// @ts-expect-error - @ruvector/wasm types may not be available
const { VectorDB: RuVectorDB } = await import('@ruvector/wasm');
const db = new RuVectorDB({
dimensions,
indexType: 'hnsw',
metric: 'cosine',
efConstruction: 200,
m: 16,
});
await db.initialize?.();
return db as IVectorDB;
} catch {
console.warn('[@claude-flow/plugins] @ruvector/wasm not available, using fallback');
return new FallbackVectorDB(dimensions);
}
}
/**
* Create a LoRA engine - uses @ruvector/learning-wasm in production, fallback otherwise.
*/
export async function createLoRAEngine(): Promise<ILoRAEngine> {
try {
// @ts-expect-error - @ruvector/learning-wasm types may not be available
const { LoRAEngine } = await import('@ruvector/learning-wasm');
const engine = new LoRAEngine({ defaultRank: 8, defaultAlpha: 16 });
await engine.initialize?.();
return engine as ILoRAEngine;
} catch {
console.warn('[@claude-flow/plugins] @ruvector/learning-wasm not available, using fallback');
return new FallbackLoRAEngine();
}
}
// ============================================================================
// Utility Functions
// ============================================================================
/**
* Compute cosine similarity between two vectors.
* Returns value in range [-1, 1] where 1 = identical.
*/
export function cosineSimilarity(a: Float32Array, b: Float32Array): number {
let dot = 0;
let normA = 0;
let normB = 0;
const len = Math.min(a.length, b.length);
for (let i = 0; i < len; i++) {
dot += a[i] * b[i];
normA += a[i] * a[i];
normB += b[i] * b[i];
}
const magnitude = Math.sqrt(normA) * Math.sqrt(normB);
return magnitude === 0 ? 0 : dot / magnitude;
}
/**
* Generate a simple hash-based embedding for text.
* Use for fallback when no embedding model is available.
*/
export function generateHashEmbedding(text: string, dimensions: number): Float32Array {
const embedding = new Float32Array(dimensions);
const normalized = text.toLowerCase();
let hash = 0;
for (let i = 0; i < normalized.length; i++) {
hash = ((hash << 5) - hash) + normalized.charCodeAt(i);
hash = hash & hash;
}
for (let i = 0; i < dimensions; i++) {
embedding[i] = Math.sin(hash * (i + 1) * 0.001) * 0.5 + 0.5;
}
// Normalize
let norm = 0;
for (let i = 0; i < dimensions; i++) {
norm += embedding[i] * embedding[i];
}
norm = Math.sqrt(norm);
if (norm > 0) {
for (let i = 0; i < dimensions; i++) {
embedding[i] /= norm;
}
}
return embedding;
}
/**
* Lazy initialization mixin for async-initialized classes.
*/
export abstract class LazyInitializable {
protected initPromise: Promise<void> | null = null;
protected initialized = false;
abstract doInitialize(): Promise<void>;
async initialize(): Promise<void> {
if (this.initialized) return;
if (this.initPromise) return this.initPromise;
this.initPromise = (async () => {
await this.doInitialize();
this.initialized = true;
})();
return this.initPromise;
}
protected async ensureInitialized(): Promise<void> {
await this.initialize();
}
}