agentic-flow 3.1.0 → 3.2.0
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/.agents/skills/agentic-flow-ecosystem/SKILL.md +50 -0
- package/.claude/skills/agentic-flow-ecosystem/skill.md +58 -0
- package/.claude/skills/agentic-flow-quickstart/skill.md +6 -6
- package/.claude/skills/hooks-automation/skill.md +11 -11
- package/.claude/skills/memory-patterns/skill.md +7 -7
- package/.claude/skills/sparc-methodology/skill.md +13 -13
- package/.claude/skills/swarm-coordination/skill.md +5 -5
- package/.claude/skills/worker-benchmarks/skill.md +5 -5
- package/.claude/skills/worker-integration/skill.md +5 -5
- package/CHANGELOG.md +25 -0
- package/README.md +82 -67
- package/dist/.tsbuildinfo +1 -1
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +9 -0
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/core/agentdb-fast.d.ts +21 -11
- package/dist/core/agentdb-fast.d.ts.map +1 -1
- package/dist/core/agentdb-fast.js +39 -14
- package/dist/core/agentdb-fast.js.map +1 -1
- package/dist/integrations/agent-booster.d.ts +35 -0
- package/dist/integrations/agent-booster.d.ts.map +1 -0
- package/dist/integrations/agent-booster.js +45 -0
- package/dist/integrations/agent-booster.js.map +1 -0
- package/dist/integrations/index.d.ts +15 -0
- package/dist/integrations/index.d.ts.map +1 -0
- package/dist/integrations/index.js +11 -0
- package/dist/integrations/index.js.map +1 -0
- package/dist/integrations/onnx-wasm-embedder.d.ts +59 -0
- package/dist/integrations/onnx-wasm-embedder.d.ts.map +1 -0
- package/dist/integrations/onnx-wasm-embedder.js +145 -0
- package/dist/integrations/onnx-wasm-embedder.js.map +1 -0
- package/dist/integrations/optional.d.ts +44 -0
- package/dist/integrations/optional.d.ts.map +1 -0
- package/dist/integrations/optional.js +107 -0
- package/dist/integrations/optional.js.map +1 -0
- package/dist/integrations/prompt-injection.d.ts +52 -0
- package/dist/integrations/prompt-injection.d.ts.map +1 -0
- package/dist/integrations/prompt-injection.js +126 -0
- package/dist/integrations/prompt-injection.js.map +1 -0
- package/dist/integrations/sublinear.d.ts +71 -0
- package/dist/integrations/sublinear.d.ts.map +1 -0
- package/dist/integrations/sublinear.js +227 -0
- package/dist/integrations/sublinear.js.map +1 -0
- package/dist/integrations/task-partition.d.ts +40 -0
- package/dist/integrations/task-partition.d.ts.map +1 -0
- package/dist/integrations/task-partition.js +173 -0
- package/dist/integrations/task-partition.js.map +1 -0
- package/dist/mcp/mcp-policy.d.ts.map +1 -1
- package/dist/mcp/mcp-policy.js +2 -0
- package/dist/mcp/mcp-policy.js.map +1 -1
- package/dist/mcp/standalone-stdio.js +12 -26
- package/dist/mcp/standalone-stdio.js.map +1 -1
- package/dist/mcp/tools/ecosystem-tools.d.ts +49 -0
- package/dist/mcp/tools/ecosystem-tools.d.ts.map +1 -0
- package/dist/mcp/tools/ecosystem-tools.js +126 -0
- package/dist/mcp/tools/ecosystem-tools.js.map +1 -0
- package/dist/routing/SemanticRouter.d.ts +25 -9
- package/dist/routing/SemanticRouter.d.ts.map +1 -1
- package/dist/routing/SemanticRouter.js +63 -12
- package/dist/routing/SemanticRouter.js.map +1 -1
- package/dist/utils/input-validator.d.ts +10 -2
- package/dist/utils/input-validator.d.ts.map +1 -1
- package/dist/utils/input-validator.js +30 -2
- package/dist/utils/input-validator.js.map +1 -1
- package/dist/utils/model-cache.d.ts.map +1 -1
- package/dist/utils/model-cache.js +6 -25
- package/dist/utils/model-cache.js.map +1 -1
- package/dist/wasm/onnx-embeddings-wasm.d.ts.map +1 -1
- package/dist/wasm/onnx-embeddings-wasm.js +21 -10
- package/dist/wasm/onnx-embeddings-wasm.js.map +1 -1
- package/docs/integrations/FASTMCP_CLI_INTEGRATION.md +1 -1
- package/package.json +12 -7
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-cache.js","sourceRoot":"","sources":["../../src/utils/model-cache.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Global Model Cache\n *\n * Caches loaded models in memory to avoid repeated initialization overhead.\n * Supports ONNX embeddings, transformers.js pipelines, and other heavy models.\n */\n\ninterface CachedModel {\n model: any;\n loadedAt: number;\n lastUsed: number;\n useCount: number;\n sizeEstimate: number; // bytes\n}\n\ninterface CacheStats {\n models: number;\n totalSize: number;\n size?: number;\n totalHits: number;\n totalMisses: number;\n hits: number;\n misses: number;\n hitRate: number;\n}\n\nclass ModelCache {\n private cache = new Map<string, CachedModel>();\n private maxSize: number; // Max cache size in bytes\n private totalHits = 0;\n private totalMisses = 0;\n\n constructor(maxSizeMB: number = 512) {\n this.maxSize = maxSizeMB * 1024 * 1024;\n }\n\n /**\n * Get a cached model or load it\n */\n async getOrLoad<T>(\n key: string,\n loader: () => Promise<T>,\n sizeEstimate: number = 50 * 1024 * 1024 // Default 50MB estimate\n ): Promise<T> {\n const cached = this.cache.get(key);\n if (cached) {\n cached.lastUsed = Date.now();\n cached.useCount++;\n this.totalHits++;\n return cached.model as T;\n }\n\n this.totalMisses++;\n\n // Evict if needed\n this.evictIfNeeded(sizeEstimate);\n\n // Load model\n const model = await loader();\n\n this.cache.set(key, {\n model,\n loadedAt: Date.now(),\n lastUsed: Date.now(),\n useCount: 1,\n sizeEstimate\n });\n\n return model;\n }\n\n /**\n * Check if model is cached\n */\n has(key: string): boolean {\n return this.cache.has(key);\n }\n\n /**\n * Get cached model without loading\n */\n get<T>(key: string): T | undefined {\n const cached = this.cache.get(key);\n if (cached) {\n cached.lastUsed = Date.now();\n cached.useCount++;\n return cached.model as T;\n }\n return undefined;\n }\n\n /**\n * Manually cache a model\n */\n set(key: string, model: any, sizeEstimate: number = 50 * 1024 * 1024): void {\n this.evictIfNeeded(sizeEstimate);\n this.cache.set(key, {\n model,\n loadedAt: Date.now(),\n lastUsed: Date.now(),\n useCount: 1,\n sizeEstimate\n });\n }\n\n /**\n * Remove a model from cache\n */\n delete(key: string): boolean {\n return this.cache.delete(key);\n }\n\n /**\n * Clear all cached models\n */\n clear(): void {\n this.cache.clear();\n }\n\n /**\n * Get cache statistics\n */\n getStats(): CacheStats {\n let totalSize = 0;\n for (const cached of this.cache.values()) {\n totalSize += cached.sizeEstimate;\n }\n const hits = this.totalHits;\n const misses = this.totalMisses;\n const total = hits + misses;\n return {\n models: this.cache.size,\n totalSize,\n size: this.cache.size,\n totalHits: hits,\n totalMisses: misses,\n hits,\n misses,\n hitRate: total > 0 ? hits / total : 0\n };\n }\n\n /**\n * Evict least recently used models if cache is full\n */\n private evictIfNeeded(newSize: number): void {\n let currentSize = 0;\n for (const cached of this.cache.values()) {\n currentSize += cached.sizeEstimate;\n }\n\n if (currentSize + newSize <= this.maxSize) {\n return;\n }\n\n // Sort by last used time (LRU)\n const entries = Array.from(this.cache.entries())\n .sort((a, b) => a[1].lastUsed - b[1].lastUsed);\n\n // Evict until we have space\n for (const [key, cached] of entries) {\n if (currentSize + newSize <= this.maxSize) {\n break;\n }\n this.cache.delete(key);\n currentSize -= cached.sizeEstimate;\n }\n }\n}\n\n// Global singleton\nexport const modelCache = new ModelCache();\n\n// Convenience functions\nexport async function getCachedOnnxEmbedder(): Promise<any> {\n return modelCache.getOrLoad(\n 'onnx-embeddings',\n async () => {\n // Suppress experimental warning for WASM\n const originalEmit = process.emit;\n // @ts-ignore\n process.emit = function (name, data, ...args) {\n if (name === 'warning' && typeof data === 'object' &&\n (data as any).name === 'ExperimentalWarning' &&\n (data as any).message?.includes('Import')) {\n return false;\n }\n // @ts-ignore\n return originalEmit.apply(process, [name, data, ...args]);\n };\n\n try {\n const onnxModule = await import('ruvector-onnx-embeddings-wasm') as any;\n const EmbedderClass = onnxModule.OnnxEmbeddings || onnxModule.default;\n if (EmbedderClass) {\n const embedder = new EmbedderClass();\n await embedder.initialize?.();\n return embedder;\n }\n } finally {\n process.emit = originalEmit;\n }\n return null;\n },\n 100 * 1024 * 1024 // 100MB estimate for ONNX model\n );\n}\n\nexport async function getCachedTransformersPipeline(\n task: string = 'feature-extraction',\n model: string = 'Xenova/all-MiniLM-L6-v2'\n): Promise<any> {\n return modelCache.getOrLoad(\n `transformers:${task}:${model}`,\n async () => {\n const { pipeline } = await import('@huggingface/transformers');\n return pipeline(task as any, model);\n },\n 200 * 1024 * 1024 // 200MB estimate for transformers model\n );\n}\n\nexport async function getCachedRuvectorCore(): Promise<any> {\n return modelCache.getOrLoad(\n 'ruvector-core',\n async () => {\n const ruvector = await import('ruvector');\n return ruvector;\n },\n 50 * 1024 * 1024\n );\n}\n"]}
|
|
1
|
+
{"version":3,"file":"model-cache.js","sourceRoot":"","sources":["../../src/utils/model-cache.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Global Model Cache\n *\n * Caches loaded models in memory to avoid repeated initialization overhead.\n * Supports ONNX embeddings, transformers.js pipelines, and other heavy models.\n */\n\ninterface CachedModel {\n model: any;\n loadedAt: number;\n lastUsed: number;\n useCount: number;\n sizeEstimate: number; // bytes\n}\n\ninterface CacheStats {\n models: number;\n totalSize: number;\n size?: number;\n totalHits: number;\n totalMisses: number;\n hits: number;\n misses: number;\n hitRate: number;\n}\n\nclass ModelCache {\n private cache = new Map<string, CachedModel>();\n private maxSize: number; // Max cache size in bytes\n private totalHits = 0;\n private totalMisses = 0;\n\n constructor(maxSizeMB: number = 512) {\n this.maxSize = maxSizeMB * 1024 * 1024;\n }\n\n /**\n * Get a cached model or load it\n */\n async getOrLoad<T>(\n key: string,\n loader: () => Promise<T>,\n sizeEstimate: number = 50 * 1024 * 1024 // Default 50MB estimate\n ): Promise<T> {\n const cached = this.cache.get(key);\n if (cached) {\n cached.lastUsed = Date.now();\n cached.useCount++;\n this.totalHits++;\n return cached.model as T;\n }\n\n this.totalMisses++;\n\n // Evict if needed\n this.evictIfNeeded(sizeEstimate);\n\n // Load model\n const model = await loader();\n\n this.cache.set(key, {\n model,\n loadedAt: Date.now(),\n lastUsed: Date.now(),\n useCount: 1,\n sizeEstimate\n });\n\n return model;\n }\n\n /**\n * Check if model is cached\n */\n has(key: string): boolean {\n return this.cache.has(key);\n }\n\n /**\n * Get cached model without loading\n */\n get<T>(key: string): T | undefined {\n const cached = this.cache.get(key);\n if (cached) {\n cached.lastUsed = Date.now();\n cached.useCount++;\n return cached.model as T;\n }\n return undefined;\n }\n\n /**\n * Manually cache a model\n */\n set(key: string, model: any, sizeEstimate: number = 50 * 1024 * 1024): void {\n this.evictIfNeeded(sizeEstimate);\n this.cache.set(key, {\n model,\n loadedAt: Date.now(),\n lastUsed: Date.now(),\n useCount: 1,\n sizeEstimate\n });\n }\n\n /**\n * Remove a model from cache\n */\n delete(key: string): boolean {\n return this.cache.delete(key);\n }\n\n /**\n * Clear all cached models\n */\n clear(): void {\n this.cache.clear();\n }\n\n /**\n * Get cache statistics\n */\n getStats(): CacheStats {\n let totalSize = 0;\n for (const cached of this.cache.values()) {\n totalSize += cached.sizeEstimate;\n }\n const hits = this.totalHits;\n const misses = this.totalMisses;\n const total = hits + misses;\n return {\n models: this.cache.size,\n totalSize,\n size: this.cache.size,\n totalHits: hits,\n totalMisses: misses,\n hits,\n misses,\n hitRate: total > 0 ? hits / total : 0\n };\n }\n\n /**\n * Evict least recently used models if cache is full\n */\n private evictIfNeeded(newSize: number): void {\n let currentSize = 0;\n for (const cached of this.cache.values()) {\n currentSize += cached.sizeEstimate;\n }\n\n if (currentSize + newSize <= this.maxSize) {\n return;\n }\n\n // Sort by last used time (LRU)\n const entries = Array.from(this.cache.entries())\n .sort((a, b) => a[1].lastUsed - b[1].lastUsed);\n\n // Evict until we have space\n for (const [key, cached] of entries) {\n if (currentSize + newSize <= this.maxSize) {\n break;\n }\n this.cache.delete(key);\n currentSize -= cached.sizeEstimate;\n }\n }\n}\n\n// Global singleton\nexport const modelCache = new ModelCache();\n\n// Convenience functions\nexport async function getCachedOnnxEmbedder(): Promise<any> {\n return modelCache.getOrLoad(\n 'onnx-embeddings',\n async () => {\n // ruvector-onnx-embeddings-wasm exposes WasmEmbedder (not the\n // OnnxEmbeddings class this used to look for) and cannot be import()ed\n // as published; the shared loader handles both. Resolves to an object\n // with async embed(text) -> Float32Array, or null.\n const { getOnnxWasmEmbedder } = await import('../integrations/onnx-wasm-embedder.js');\n return getOnnxWasmEmbedder();\n },\n 100 * 1024 * 1024 // 100MB estimate for ONNX model\n );\n}\n\nexport async function getCachedTransformersPipeline(\n task: string = 'feature-extraction',\n model: string = 'Xenova/all-MiniLM-L6-v2'\n): Promise<any> {\n return modelCache.getOrLoad(\n `transformers:${task}:${model}`,\n async () => {\n const { pipeline } = await import('@huggingface/transformers');\n return pipeline(task as any, model);\n },\n 200 * 1024 * 1024 // 200MB estimate for transformers model\n );\n}\n\nexport async function getCachedRuvectorCore(): Promise<any> {\n return modelCache.getOrLoad(\n 'ruvector-core',\n async () => {\n const ruvector = await import('ruvector');\n return ruvector;\n },\n 50 * 1024 * 1024\n );\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"onnx-embeddings-wasm.d.ts","sourceRoot":"","sources":["../../src/wasm/onnx-embeddings-wasm.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAkCH,UAAU,SAAS;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,YAAY,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,GAAG,UAAU,CAAC;CAC7B;AAED,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,YAAY,EAAE,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,GAAG,UAAU,CAAC;CAC7B;AAED,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;CACtB;AAQD;;GAEG;AACH,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"onnx-embeddings-wasm.d.ts","sourceRoot":"","sources":["../../src/wasm/onnx-embeddings-wasm.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAkCH,UAAU,SAAS;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,YAAY,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,GAAG,UAAU,CAAC;CAC7B;AAED,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,YAAY,EAAE,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,GAAG,UAAU,CAAC;CAC7B;AAED,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;CACtB;AAQD;;GAEG;AACH,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,OAAO,CAAC,CA6C/D;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,OAAO,CAE7C;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,OAAO,CAEvC;AAED;;GAEG;AACH,wBAAsB,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAqCtE;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,eAAe,CAAC,CAuC1E;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAY9E;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,YAAY,GAAG,MAAM,CAkBzE;AAED;;GAEG;AACH,wBAAgB,QAAQ,IAAI,mBAAmB,CAY9C;AAED;;GAEG;AACH,wBAAsB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAO9C;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI,IAAI,CAEjC;AA8BD;;GAEG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,WAAW,CAAS;IAEtB,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC;IAKxB,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAKjD,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,eAAe,CAAC;IAKrD,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAK/D,gBAAgB,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,YAAY,GAAG,MAAM;IAI1D,WAAW,IAAI,OAAO;IAItB,aAAa,IAAI,OAAO;IAIxB,QAAQ,IAAI,mBAAmB;IAIzB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAIhC;AAKD;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,kBAAkB,CAK1D;;;;;;;;;;;;;;;AAED,wBAaE"}
|
|
@@ -40,16 +40,27 @@ export async function initOnnxEmbeddingsWasm() {
|
|
|
40
40
|
return initPromise;
|
|
41
41
|
initPromise = (async () => {
|
|
42
42
|
try {
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
//
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
43
|
+
// The package's own exports are WasmEmbedder/cosineSimilarity and its
|
|
44
|
+
// published glue cannot be import()ed directly; adapt the shared loader
|
|
45
|
+
// to this module's interface.
|
|
46
|
+
const { getOnnxWasmEmbedder, loadOnnxWasmModule } = await import('../integrations/onnx-wasm-embedder.js');
|
|
47
|
+
const [mod, embedder] = await Promise.all([loadOnnxWasmModule(), getOnnxWasmEmbedder()]);
|
|
48
|
+
if (!mod || !embedder)
|
|
49
|
+
throw new Error('ruvector-onnx-embeddings-wasm or its model is unavailable');
|
|
50
|
+
wasmModule = {
|
|
51
|
+
embed: (text) => embedder.embed(text),
|
|
52
|
+
embedBatch: (texts) => embedder.embedBatch(texts),
|
|
53
|
+
similarity: async (a, b) => mod.cosineSimilarity(await embedder.embed(a), await embedder.embed(b)),
|
|
54
|
+
cosineSimilarity: (a, b) => mod.cosineSimilarity(a, b),
|
|
55
|
+
loadModel: async () => { },
|
|
56
|
+
isModelLoaded: () => true,
|
|
57
|
+
getModelInfo: () => ({ name: 'all-MiniLM-L6-v2', dimension: embedder.dimension, vocabSize: 30522, maxSequenceLength: 256 }),
|
|
58
|
+
isAvailable: () => true,
|
|
59
|
+
isSIMDEnabled: () => Boolean(mod.simd_available?.()),
|
|
60
|
+
getVersion: () => mod.version(),
|
|
61
|
+
initialize: async () => { },
|
|
62
|
+
shutdown: async () => { },
|
|
63
|
+
};
|
|
53
64
|
initialized = true;
|
|
54
65
|
logger.info('ONNX Embeddings WASM initialized', {
|
|
55
66
|
version: wasmModule.getVersion?.() || 'unknown',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"onnx-embeddings-wasm.js","sourceRoot":"","sources":["../../src/wasm/onnx-embeddings-wasm.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * ONNX Embeddings WASM Integration\n *\n * Provides browser-compatible embeddings using ruvector-onnx-embeddings-wasm.\n *\n * Features:\n * - Pure WASM: No native dependencies, runs in browser\n * - all-MiniLM-L6-v2: 384-dimensional semantic embeddings\n * - SIMD Acceleration: Uses WebAssembly SIMD when available\n * - Small Bundle: Optimized WASM binary size\n *\n * Use Cases:\n * - Browser-based semantic search\n * - Client-side RAG applications\n * - Edge computing (Cloudflare Workers, Deno Deploy)\n * - Offline-first applications\n *\n * Performance:\n * - ~50ms per embedding (SIMD enabled)\n * - ~200ms per embedding (SIMD disabled)\n * - Batch processing: ~30ms per embedding\n */\n\nimport { logger } from '../utils/logger.js';\n\n// Module state\nlet wasmModule: OnnxEmbeddingsModule | null = null;\nlet initialized = false;\nlet initPromise: Promise<boolean> | null = null;\n\n/**\n * ONNX Embeddings WASM module interface\n */\ninterface OnnxEmbeddingsModule {\n // Core functions\n embed: (text: string) => Promise<Float32Array>;\n embedBatch: (texts: string[]) => Promise<Float32Array[]>;\n similarity: (text1: string, text2: string) => Promise<number>;\n cosineSimilarity: (a: Float32Array, b: Float32Array) => number;\n\n // Model management\n loadModel: (modelPath?: string) => Promise<void>;\n isModelLoaded: () => boolean;\n getModelInfo: () => ModelInfo;\n\n // Utilities\n isAvailable: () => boolean;\n isSIMDEnabled: () => boolean;\n getVersion: () => string;\n\n // Lifecycle\n initialize: () => Promise<void>;\n shutdown: () => Promise<void>;\n}\n\ninterface ModelInfo {\n name: string;\n dimension: number;\n vocabSize: number;\n maxSequenceLength: number;\n}\n\nexport interface OnnxEmbeddingResult {\n embedding: Float32Array;\n timeMs: number;\n source: 'wasm' | 'fallback';\n}\n\nexport interface OnnxBatchResult {\n embeddings: Float32Array[];\n totalTimeMs: number;\n avgTimeMs: number;\n source: 'wasm' | 'fallback';\n}\n\nexport interface OnnxEmbeddingsStats {\n available: boolean;\n simdEnabled: boolean;\n modelLoaded: boolean;\n modelInfo?: ModelInfo;\n totalEmbeddings: number;\n totalLatencyMs: number;\n avgLatencyMs: number;\n}\n\n// Stats tracking\nlet stats = {\n totalEmbeddings: 0,\n totalLatencyMs: 0,\n};\n\n/**\n * Initialize ONNX Embeddings WASM module\n */\nexport async function initOnnxEmbeddingsWasm(): Promise<boolean> {\n if (initialized) return wasmModule !== null;\n if (initPromise) return initPromise;\n\n initPromise = (async () => {\n try {\n const mod = await import('ruvector-onnx-embeddings-wasm');\n wasmModule = mod as unknown as OnnxEmbeddingsModule;\n\n // Initialize WASM runtime\n if (wasmModule.initialize) {\n await wasmModule.initialize();\n }\n\n // Load default model\n if (wasmModule.loadModel && !wasmModule.isModelLoaded?.()) {\n await wasmModule.loadModel();\n }\n\n initialized = true;\n\n logger.info('ONNX Embeddings WASM initialized', {\n version: wasmModule.getVersion?.() || 'unknown',\n simd: wasmModule.isSIMDEnabled?.() ?? false,\n modelLoaded: wasmModule.isModelLoaded?.() ?? false,\n });\n\n return true;\n } catch (error) {\n logger.debug('ONNX Embeddings WASM not available', { error });\n initialized = true;\n return false;\n }\n })();\n\n return initPromise;\n}\n\n/**\n * Check if ONNX WASM embeddings are available\n */\nexport function isOnnxWasmAvailable(): boolean {\n return wasmModule !== null && (wasmModule.isAvailable?.() ?? false);\n}\n\n/**\n * Check if SIMD acceleration is enabled\n */\nexport function isSIMDEnabled(): boolean {\n return wasmModule?.isSIMDEnabled?.() ?? false;\n}\n\n/**\n * Generate embedding for text using WASM\n */\nexport async function embed(text: string): Promise<OnnxEmbeddingResult> {\n if (!initialized) {\n await initOnnxEmbeddingsWasm();\n }\n\n const startTime = performance.now();\n\n if (wasmModule && wasmModule.isModelLoaded?.()) {\n try {\n const embedding = await wasmModule.embed(text);\n const timeMs = performance.now() - startTime;\n\n stats.totalEmbeddings++;\n stats.totalLatencyMs += timeMs;\n\n return {\n embedding,\n timeMs,\n source: 'wasm',\n };\n } catch (error) {\n logger.warn('WASM embedding failed, using fallback', { error });\n }\n }\n\n // Fallback to simple hash-based embedding\n const embedding = simpleEmbed(text);\n const timeMs = performance.now() - startTime;\n\n stats.totalEmbeddings++;\n stats.totalLatencyMs += timeMs;\n\n return {\n embedding,\n timeMs,\n source: 'fallback',\n };\n}\n\n/**\n * Generate embeddings for multiple texts (batch processing)\n */\nexport async function embedBatch(texts: string[]): Promise<OnnxBatchResult> {\n if (!initialized) {\n await initOnnxEmbeddingsWasm();\n }\n\n const startTime = performance.now();\n\n if (wasmModule && wasmModule.embedBatch && wasmModule.isModelLoaded?.()) {\n try {\n const embeddings = await wasmModule.embedBatch(texts);\n const totalTimeMs = performance.now() - startTime;\n\n stats.totalEmbeddings += texts.length;\n stats.totalLatencyMs += totalTimeMs;\n\n return {\n embeddings,\n totalTimeMs,\n avgTimeMs: totalTimeMs / texts.length,\n source: 'wasm',\n };\n } catch (error) {\n logger.warn('WASM batch embedding failed, using fallback', { error });\n }\n }\n\n // Fallback to sequential simple embeddings\n const embeddings = texts.map((text) => simpleEmbed(text));\n const totalTimeMs = performance.now() - startTime;\n\n stats.totalEmbeddings += texts.length;\n stats.totalLatencyMs += totalTimeMs;\n\n return {\n embeddings,\n totalTimeMs,\n avgTimeMs: totalTimeMs / texts.length,\n source: 'fallback',\n };\n}\n\n/**\n * Compute similarity between two texts\n */\nexport async function similarity(text1: string, text2: string): Promise<number> {\n if (wasmModule && wasmModule.similarity) {\n try {\n return await wasmModule.similarity(text1, text2);\n } catch {\n // Fall through to fallback\n }\n }\n\n // Fallback\n const [result1, result2] = await Promise.all([embed(text1), embed(text2)]);\n return cosineSimilarity(result1.embedding, result2.embedding);\n}\n\n/**\n * Compute cosine similarity between two embeddings\n */\nexport function cosineSimilarity(a: Float32Array, b: Float32Array): number {\n if (wasmModule?.cosineSimilarity) {\n return wasmModule.cosineSimilarity(a, b);\n }\n\n // JS fallback\n let dot = 0;\n let normA = 0;\n let normB = 0;\n\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\n const denominator = Math.sqrt(normA) * Math.sqrt(normB);\n return denominator === 0 ? 0 : dot / denominator;\n}\n\n/**\n * Get embedding statistics\n */\nexport function getStats(): OnnxEmbeddingsStats {\n const modelInfo = wasmModule?.getModelInfo?.();\n\n return {\n available: isOnnxWasmAvailable(),\n simdEnabled: isSIMDEnabled(),\n modelLoaded: wasmModule?.isModelLoaded?.() ?? false,\n modelInfo,\n totalEmbeddings: stats.totalEmbeddings,\n totalLatencyMs: stats.totalLatencyMs,\n avgLatencyMs: stats.totalEmbeddings > 0 ? stats.totalLatencyMs / stats.totalEmbeddings : 0,\n };\n}\n\n/**\n * Shutdown WASM module\n */\nexport async function shutdown(): Promise<void> {\n if (wasmModule?.shutdown) {\n await wasmModule.shutdown();\n }\n wasmModule = null;\n initialized = false;\n initPromise = null;\n}\n\n/**\n * Reset stats (for testing)\n */\nexport function resetStats(): void {\n stats = { totalEmbeddings: 0, totalLatencyMs: 0 };\n}\n\n/**\n * Simple hash-based embedding fallback\n * Not semantic, but provides consistent embeddings for testing\n */\nfunction simpleEmbed(text: string, dim: number = 384): 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 * OnnxEmbeddingsWasm class for object-oriented usage\n */\nexport class OnnxEmbeddingsWasm {\n private initialized = false;\n\n async init(): Promise<boolean> {\n this.initialized = await initOnnxEmbeddingsWasm();\n return this.initialized;\n }\n\n async embed(text: string): Promise<OnnxEmbeddingResult> {\n if (!this.initialized) await this.init();\n return embed(text);\n }\n\n async embedBatch(texts: string[]): Promise<OnnxBatchResult> {\n if (!this.initialized) await this.init();\n return embedBatch(texts);\n }\n\n async similarity(text1: string, text2: string): Promise<number> {\n if (!this.initialized) await this.init();\n return similarity(text1, text2);\n }\n\n cosineSimilarity(a: Float32Array, b: Float32Array): number {\n return cosineSimilarity(a, b);\n }\n\n isAvailable(): boolean {\n return isOnnxWasmAvailable();\n }\n\n isSIMDEnabled(): boolean {\n return isSIMDEnabled();\n }\n\n getStats(): OnnxEmbeddingsStats {\n return getStats();\n }\n\n async shutdown(): Promise<void> {\n await shutdown();\n this.initialized = false;\n }\n}\n\n// Singleton instance\nlet instance: OnnxEmbeddingsWasm | null = null;\n\n/**\n * Get singleton OnnxEmbeddingsWasm instance\n */\nexport function getOnnxEmbeddingsWasm(): OnnxEmbeddingsWasm {\n if (!instance) {\n instance = new OnnxEmbeddingsWasm();\n }\n return instance;\n}\n\nexport default {\n OnnxEmbeddingsWasm,\n getOnnxEmbeddingsWasm,\n initOnnxEmbeddingsWasm,\n isOnnxWasmAvailable,\n isSIMDEnabled,\n embed,\n embedBatch,\n similarity,\n cosineSimilarity,\n getStats,\n shutdown,\n resetStats,\n};\n"]}
|
|
1
|
+
{"version":3,"file":"onnx-embeddings-wasm.js","sourceRoot":"","sources":["../../src/wasm/onnx-embeddings-wasm.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * ONNX Embeddings WASM Integration\n *\n * Provides browser-compatible embeddings using ruvector-onnx-embeddings-wasm.\n *\n * Features:\n * - Pure WASM: No native dependencies, runs in browser\n * - all-MiniLM-L6-v2: 384-dimensional semantic embeddings\n * - SIMD Acceleration: Uses WebAssembly SIMD when available\n * - Small Bundle: Optimized WASM binary size\n *\n * Use Cases:\n * - Browser-based semantic search\n * - Client-side RAG applications\n * - Edge computing (Cloudflare Workers, Deno Deploy)\n * - Offline-first applications\n *\n * Performance:\n * - ~50ms per embedding (SIMD enabled)\n * - ~200ms per embedding (SIMD disabled)\n * - Batch processing: ~30ms per embedding\n */\n\nimport { logger } from '../utils/logger.js';\n\n// Module state\nlet wasmModule: OnnxEmbeddingsModule | null = null;\nlet initialized = false;\nlet initPromise: Promise<boolean> | null = null;\n\n/**\n * ONNX Embeddings WASM module interface\n */\ninterface OnnxEmbeddingsModule {\n // Core functions\n embed: (text: string) => Promise<Float32Array>;\n embedBatch: (texts: string[]) => Promise<Float32Array[]>;\n similarity: (text1: string, text2: string) => Promise<number>;\n cosineSimilarity: (a: Float32Array, b: Float32Array) => number;\n\n // Model management\n loadModel: (modelPath?: string) => Promise<void>;\n isModelLoaded: () => boolean;\n getModelInfo: () => ModelInfo;\n\n // Utilities\n isAvailable: () => boolean;\n isSIMDEnabled: () => boolean;\n getVersion: () => string;\n\n // Lifecycle\n initialize: () => Promise<void>;\n shutdown: () => Promise<void>;\n}\n\ninterface ModelInfo {\n name: string;\n dimension: number;\n vocabSize: number;\n maxSequenceLength: number;\n}\n\nexport interface OnnxEmbeddingResult {\n embedding: Float32Array;\n timeMs: number;\n source: 'wasm' | 'fallback';\n}\n\nexport interface OnnxBatchResult {\n embeddings: Float32Array[];\n totalTimeMs: number;\n avgTimeMs: number;\n source: 'wasm' | 'fallback';\n}\n\nexport interface OnnxEmbeddingsStats {\n available: boolean;\n simdEnabled: boolean;\n modelLoaded: boolean;\n modelInfo?: ModelInfo;\n totalEmbeddings: number;\n totalLatencyMs: number;\n avgLatencyMs: number;\n}\n\n// Stats tracking\nlet stats = {\n totalEmbeddings: 0,\n totalLatencyMs: 0,\n};\n\n/**\n * Initialize ONNX Embeddings WASM module\n */\nexport async function initOnnxEmbeddingsWasm(): Promise<boolean> {\n if (initialized) return wasmModule !== null;\n if (initPromise) return initPromise;\n\n initPromise = (async () => {\n try {\n // The package's own exports are WasmEmbedder/cosineSimilarity and its\n // published glue cannot be import()ed directly; adapt the shared loader\n // to this module's interface.\n const { getOnnxWasmEmbedder, loadOnnxWasmModule } = await import('../integrations/onnx-wasm-embedder.js');\n const [mod, embedder] = await Promise.all([loadOnnxWasmModule(), getOnnxWasmEmbedder()]);\n if (!mod || !embedder) throw new Error('ruvector-onnx-embeddings-wasm or its model is unavailable');\n wasmModule = {\n embed: (text: string) => embedder.embed(text),\n embedBatch: (texts: string[]) => embedder.embedBatch(texts),\n similarity: async (a: string, b: string) =>\n mod.cosineSimilarity(await embedder.embed(a), await embedder.embed(b)),\n cosineSimilarity: (a: Float32Array, b: Float32Array) => mod.cosineSimilarity(a, b),\n loadModel: async () => {},\n isModelLoaded: () => true,\n getModelInfo: () => ({ name: 'all-MiniLM-L6-v2', dimension: embedder.dimension, vocabSize: 30522, maxSequenceLength: 256 }),\n isAvailable: () => true,\n isSIMDEnabled: () => Boolean((mod as any).simd_available?.()),\n getVersion: () => mod.version(),\n initialize: async () => {},\n shutdown: async () => {},\n };\n\n initialized = true;\n\n logger.info('ONNX Embeddings WASM initialized', {\n version: wasmModule.getVersion?.() || 'unknown',\n simd: wasmModule.isSIMDEnabled?.() ?? false,\n modelLoaded: wasmModule.isModelLoaded?.() ?? false,\n });\n\n return true;\n } catch (error) {\n logger.debug('ONNX Embeddings WASM not available', { error });\n initialized = true;\n return false;\n }\n })();\n\n return initPromise;\n}\n\n/**\n * Check if ONNX WASM embeddings are available\n */\nexport function isOnnxWasmAvailable(): boolean {\n return wasmModule !== null && (wasmModule.isAvailable?.() ?? false);\n}\n\n/**\n * Check if SIMD acceleration is enabled\n */\nexport function isSIMDEnabled(): boolean {\n return wasmModule?.isSIMDEnabled?.() ?? false;\n}\n\n/**\n * Generate embedding for text using WASM\n */\nexport async function embed(text: string): Promise<OnnxEmbeddingResult> {\n if (!initialized) {\n await initOnnxEmbeddingsWasm();\n }\n\n const startTime = performance.now();\n\n if (wasmModule && wasmModule.isModelLoaded?.()) {\n try {\n const embedding = await wasmModule.embed(text);\n const timeMs = performance.now() - startTime;\n\n stats.totalEmbeddings++;\n stats.totalLatencyMs += timeMs;\n\n return {\n embedding,\n timeMs,\n source: 'wasm',\n };\n } catch (error) {\n logger.warn('WASM embedding failed, using fallback', { error });\n }\n }\n\n // Fallback to simple hash-based embedding\n const embedding = simpleEmbed(text);\n const timeMs = performance.now() - startTime;\n\n stats.totalEmbeddings++;\n stats.totalLatencyMs += timeMs;\n\n return {\n embedding,\n timeMs,\n source: 'fallback',\n };\n}\n\n/**\n * Generate embeddings for multiple texts (batch processing)\n */\nexport async function embedBatch(texts: string[]): Promise<OnnxBatchResult> {\n if (!initialized) {\n await initOnnxEmbeddingsWasm();\n }\n\n const startTime = performance.now();\n\n if (wasmModule && wasmModule.embedBatch && wasmModule.isModelLoaded?.()) {\n try {\n const embeddings = await wasmModule.embedBatch(texts);\n const totalTimeMs = performance.now() - startTime;\n\n stats.totalEmbeddings += texts.length;\n stats.totalLatencyMs += totalTimeMs;\n\n return {\n embeddings,\n totalTimeMs,\n avgTimeMs: totalTimeMs / texts.length,\n source: 'wasm',\n };\n } catch (error) {\n logger.warn('WASM batch embedding failed, using fallback', { error });\n }\n }\n\n // Fallback to sequential simple embeddings\n const embeddings = texts.map((text) => simpleEmbed(text));\n const totalTimeMs = performance.now() - startTime;\n\n stats.totalEmbeddings += texts.length;\n stats.totalLatencyMs += totalTimeMs;\n\n return {\n embeddings,\n totalTimeMs,\n avgTimeMs: totalTimeMs / texts.length,\n source: 'fallback',\n };\n}\n\n/**\n * Compute similarity between two texts\n */\nexport async function similarity(text1: string, text2: string): Promise<number> {\n if (wasmModule && wasmModule.similarity) {\n try {\n return await wasmModule.similarity(text1, text2);\n } catch {\n // Fall through to fallback\n }\n }\n\n // Fallback\n const [result1, result2] = await Promise.all([embed(text1), embed(text2)]);\n return cosineSimilarity(result1.embedding, result2.embedding);\n}\n\n/**\n * Compute cosine similarity between two embeddings\n */\nexport function cosineSimilarity(a: Float32Array, b: Float32Array): number {\n if (wasmModule?.cosineSimilarity) {\n return wasmModule.cosineSimilarity(a, b);\n }\n\n // JS fallback\n let dot = 0;\n let normA = 0;\n let normB = 0;\n\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\n const denominator = Math.sqrt(normA) * Math.sqrt(normB);\n return denominator === 0 ? 0 : dot / denominator;\n}\n\n/**\n * Get embedding statistics\n */\nexport function getStats(): OnnxEmbeddingsStats {\n const modelInfo = wasmModule?.getModelInfo?.();\n\n return {\n available: isOnnxWasmAvailable(),\n simdEnabled: isSIMDEnabled(),\n modelLoaded: wasmModule?.isModelLoaded?.() ?? false,\n modelInfo,\n totalEmbeddings: stats.totalEmbeddings,\n totalLatencyMs: stats.totalLatencyMs,\n avgLatencyMs: stats.totalEmbeddings > 0 ? stats.totalLatencyMs / stats.totalEmbeddings : 0,\n };\n}\n\n/**\n * Shutdown WASM module\n */\nexport async function shutdown(): Promise<void> {\n if (wasmModule?.shutdown) {\n await wasmModule.shutdown();\n }\n wasmModule = null;\n initialized = false;\n initPromise = null;\n}\n\n/**\n * Reset stats (for testing)\n */\nexport function resetStats(): void {\n stats = { totalEmbeddings: 0, totalLatencyMs: 0 };\n}\n\n/**\n * Simple hash-based embedding fallback\n * Not semantic, but provides consistent embeddings for testing\n */\nfunction simpleEmbed(text: string, dim: number = 384): 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 * OnnxEmbeddingsWasm class for object-oriented usage\n */\nexport class OnnxEmbeddingsWasm {\n private initialized = false;\n\n async init(): Promise<boolean> {\n this.initialized = await initOnnxEmbeddingsWasm();\n return this.initialized;\n }\n\n async embed(text: string): Promise<OnnxEmbeddingResult> {\n if (!this.initialized) await this.init();\n return embed(text);\n }\n\n async embedBatch(texts: string[]): Promise<OnnxBatchResult> {\n if (!this.initialized) await this.init();\n return embedBatch(texts);\n }\n\n async similarity(text1: string, text2: string): Promise<number> {\n if (!this.initialized) await this.init();\n return similarity(text1, text2);\n }\n\n cosineSimilarity(a: Float32Array, b: Float32Array): number {\n return cosineSimilarity(a, b);\n }\n\n isAvailable(): boolean {\n return isOnnxWasmAvailable();\n }\n\n isSIMDEnabled(): boolean {\n return isSIMDEnabled();\n }\n\n getStats(): OnnxEmbeddingsStats {\n return getStats();\n }\n\n async shutdown(): Promise<void> {\n await shutdown();\n this.initialized = false;\n }\n}\n\n// Singleton instance\nlet instance: OnnxEmbeddingsWasm | null = null;\n\n/**\n * Get singleton OnnxEmbeddingsWasm instance\n */\nexport function getOnnxEmbeddingsWasm(): OnnxEmbeddingsWasm {\n if (!instance) {\n instance = new OnnxEmbeddingsWasm();\n }\n return instance;\n}\n\nexport default {\n OnnxEmbeddingsWasm,\n getOnnxEmbeddingsWasm,\n initOnnxEmbeddingsWasm,\n isOnnxWasmAvailable,\n isSIMDEnabled,\n embed,\n embedBatch,\n similarity,\n cosineSimilarity,\n getStats,\n shutdown,\n resetStats,\n};\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agentic-flow",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.2.0",
|
|
4
4
|
"description": "The agentic meta-harness — freeze the model, evolve the harness. An open runtime that routes each query to the cost-optimal model, evolves its own harness (planner/context/reviewer/retry/tool/memory/score policy) and autonomously repairs code, then orchestrates 66 specialized agents, 213 MCP tools, ReasoningBank memory, and multi-agent swarms on top. Built by @ruvnet on the Claude Agent SDK.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -30,6 +30,7 @@
|
|
|
30
30
|
"./agent-booster": "./dist/agent-booster/index.js",
|
|
31
31
|
"./transport/quic": "./dist/transport/quic.js",
|
|
32
32
|
"./embeddings": "./dist/embeddings/index.js",
|
|
33
|
+
"./integrations": "./dist/integrations/index.js",
|
|
33
34
|
"./transport/loader": "./dist/transport/quic-loader.js"
|
|
34
35
|
},
|
|
35
36
|
"scripts": {
|
|
@@ -70,8 +71,9 @@
|
|
|
70
71
|
"benchmark:embeddings": "tsx src/benchmarks/embeddings-benchmark.ts",
|
|
71
72
|
"test:orchestration": "vitest run tests/orchestration/ --reporter=verbose",
|
|
72
73
|
"test:security": "vitest run tests/security tests/mcp/mcp-policy.test.ts tests/transport/quic-loader.test.ts",
|
|
73
|
-
"test:governance": "vitest run tests/harness/provenance.test.ts tests/harness/flywheel-governance.test.ts tests/mcp/mcp-policy.test.ts tests/mcp/package-surface.test.ts tests/embeddings/huggingface-offline.test.ts tests/repair/darwin-repair.test.ts",
|
|
74
|
-
"test:orchestration:smoke": "tsx tests/orchestration/orchestration-api.smoke.ts && tsx tests/orchestration/loop-policy.smoke.ts && tsx tests/orchestration/memory-plane.smoke.ts"
|
|
74
|
+
"test:governance": "vitest run tests/harness/provenance.test.ts tests/harness/flywheel-governance.test.ts tests/mcp/mcp-policy.test.ts tests/mcp/package-surface.test.ts tests/embeddings/huggingface-offline.test.ts tests/repair/darwin-repair.test.ts tests/integrations",
|
|
75
|
+
"test:orchestration:smoke": "tsx tests/orchestration/orchestration-api.smoke.ts && tsx tests/orchestration/loop-policy.smoke.ts && tsx tests/orchestration/memory-plane.smoke.ts",
|
|
76
|
+
"test:integrations": "vitest run tests/integrations"
|
|
75
77
|
},
|
|
76
78
|
"keywords": [
|
|
77
79
|
"meta-harness",
|
|
@@ -168,14 +170,12 @@
|
|
|
168
170
|
"@anthropic-ai/claude-agent-sdk": "^0.1.5",
|
|
169
171
|
"@anthropic-ai/sdk": "^0.65.0",
|
|
170
172
|
"@google/genai": "^1.22.0",
|
|
173
|
+
"@huggingface/transformers": "^4.2.0",
|
|
171
174
|
"@metaharness/router": "^0.3.2",
|
|
172
|
-
"@ruvector/core": "^0.1.29",
|
|
173
175
|
"@ruvector/edge-full": "^0.1.0",
|
|
174
176
|
"@ruvector/router": "^0.1.30",
|
|
175
|
-
"@ruvector/ruvllm": "^2.5.5",
|
|
176
177
|
"@ruvector/tiny-dancer": "^0.1.17",
|
|
177
178
|
"@supabase/supabase-js": "^2.78.0",
|
|
178
|
-
"@huggingface/transformers": "^4.2.0",
|
|
179
179
|
"agentdb": "^3.0.0",
|
|
180
180
|
"axios": "^1.12.2",
|
|
181
181
|
"dotenv": "^16.4.5",
|
|
@@ -195,11 +195,15 @@
|
|
|
195
195
|
"optionalDependencies": {
|
|
196
196
|
"@rollup/rollup-darwin-arm64": "^4.59.0",
|
|
197
197
|
"@ruvector/attention": "^0.1.4",
|
|
198
|
+
"@ruvector/mincut-wasm": "^2.3.0",
|
|
198
199
|
"@ruvector/sona": "^0.1.4",
|
|
200
|
+
"agent-booster": "^0.2.2",
|
|
201
|
+
"aidefence": "^3.0.1",
|
|
199
202
|
"better-sqlite3": "^11.10.0",
|
|
200
203
|
"onnxruntime-node": "^1.23.2",
|
|
201
204
|
"sharp": "^0.35.5",
|
|
202
|
-
"sql.js": "^1.11.0"
|
|
205
|
+
"sql.js": "^1.11.0",
|
|
206
|
+
"sublinear-time-solver": "^1.7.2"
|
|
203
207
|
},
|
|
204
208
|
"overrides": {
|
|
205
209
|
"protobufjs": ">=7.5.5",
|
|
@@ -223,6 +227,7 @@
|
|
|
223
227
|
"dist",
|
|
224
228
|
"docs",
|
|
225
229
|
".claude",
|
|
230
|
+
".agents/skills",
|
|
226
231
|
"validation",
|
|
227
232
|
"scripts",
|
|
228
233
|
"wasm",
|