claude-flow 3.5.26 → 3.5.28

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claude-flow",
3
- "version": "3.5.26",
3
+ "version": "3.5.28",
4
4
  "description": "Ruflo - Enterprise AI agent orchestration for Claude Code. Deploy 60+ specialized agents in coordinated swarms with self-learning, fault-tolerant consensus, vector memory, and MCP integration",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",
@@ -34,6 +34,9 @@ import { coordinationTools } from './mcp-tools/coordination-tools.js';
34
34
  import { browserTools } from './mcp-tools/browser-tools.js';
35
35
  // Phase 6: AgentDB v3 controller tools
36
36
  import { agentdbTools } from './mcp-tools/agentdb-tools.js';
37
+ // RuVector WASM tools
38
+ import { ruvllmWasmTools } from './mcp-tools/ruvllm-tools.js';
39
+ import { wasmAgentTools } from './mcp-tools/wasm-agent-tools.js';
37
40
  /**
38
41
  * MCP Tool Registry
39
42
  * Maps tool names to their handler functions
@@ -73,6 +76,9 @@ registerTools([
73
76
  ...browserTools,
74
77
  // Phase 6: AgentDB v3 controller tools
75
78
  ...agentdbTools,
79
+ // RuVector WASM tools
80
+ ...ruvllmWasmTools,
81
+ ...wasmAgentTools,
76
82
  ]);
77
83
  /**
78
84
  * MCP Client Error
@@ -1317,52 +1317,34 @@ export async function loadEmbeddingModel(options) {
1317
1317
  }
1318
1318
  // Fallback: Check for ruvector ONNX embedder (bundled MiniLM-L6-v2 since v0.2.15)
1319
1319
  // v0.2.16: LoRA B=0 fix makes AdaptiveEmbedder safe (identity when untrained)
1320
+ // Note: isReady() returns false until first embed() call (lazy init), so we
1321
+ // skip the isReady() gate and verify with a probe embed instead.
1320
1322
  const ruvector = await import('ruvector').catch(() => null);
1321
1323
  if (ruvector?.initOnnxEmbedder) {
1322
1324
  try {
1323
1325
  await ruvector.initOnnxEmbedder();
1324
- // Prefer AdaptiveEmbedder (LoRA adaptation capability, identity when untrained)
1325
- if (ruvector.AdaptiveEmbedder) {
1326
- try {
1327
- const adaptive = new ruvector.AdaptiveEmbedder({ useEpisodic: false });
1328
- if (adaptive?.embed && adaptive.isReady?.()) {
1329
- if (verbose) {
1330
- console.log('Loading ruvector AdaptiveEmbedder (all-MiniLM-L6-v2 + LoRA)...');
1331
- }
1332
- embeddingModelState = {
1333
- loaded: true,
1334
- model: (text) => adaptive.embed(text),
1335
- tokenizer: null,
1336
- dimensions: adaptive.getDimension?.() || 384
1337
- };
1338
- return {
1339
- success: true,
1340
- dimensions: adaptive.getDimension?.() || 384,
1341
- modelName: 'ruvector/adaptive',
1342
- loadTime: Date.now() - startTime
1343
- };
1344
- }
1345
- }
1346
- catch { /* fall through to OptimizedOnnxEmbedder */ }
1347
- }
1348
- // Fallback: OptimizedOnnxEmbedder (raw ONNX without LoRA)
1326
+ // Fallback: OptimizedOnnxEmbedder (raw ONNX, lazy-inits on first embed)
1349
1327
  const onnxEmb = ruvector.getOptimizedOnnxEmbedder?.();
1350
- if (onnxEmb?.embed && onnxEmb.isReady?.()) {
1351
- if (verbose) {
1352
- console.log('Loading ruvector ONNX embedder (all-MiniLM-L6-v2)...');
1328
+ if (onnxEmb?.embed) {
1329
+ // Probe embed to trigger lazy ONNX init and verify it works
1330
+ const probe = await onnxEmb.embed('test');
1331
+ if (probe && probe.length > 0 && (Array.isArray(probe) ? probe.some((v) => v !== 0) : true)) {
1332
+ if (verbose) {
1333
+ console.log(`Loading ruvector ONNX embedder (all-MiniLM-L6-v2, ${probe.length}d)...`);
1334
+ }
1335
+ embeddingModelState = {
1336
+ loaded: true,
1337
+ model: (text) => onnxEmb.embed(text),
1338
+ tokenizer: null,
1339
+ dimensions: probe.length || 384
1340
+ };
1341
+ return {
1342
+ success: true,
1343
+ dimensions: probe.length || 384,
1344
+ modelName: 'ruvector/onnx',
1345
+ loadTime: Date.now() - startTime
1346
+ };
1353
1347
  }
1354
- embeddingModelState = {
1355
- loaded: true,
1356
- model: (text) => onnxEmb.embed(text),
1357
- tokenizer: null,
1358
- dimensions: onnxEmb.getDimension?.() || 384
1359
- };
1360
- return {
1361
- success: true,
1362
- dimensions: onnxEmb.getDimension?.() || 384,
1363
- modelName: 'ruvector/onnx',
1364
- loadTime: Date.now() - startTime
1365
- };
1366
1348
  }
1367
1349
  }
1368
1350
  catch {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@claude-flow/cli",
3
- "version": "3.5.26",
3
+ "version": "3.5.28",
4
4
  "type": "module",
5
5
  "description": "Ruflo CLI - Enterprise AI agent orchestration with 60+ specialized agents, swarm coordination, MCP server, self-learning hooks, and vector memory for Claude Code",
6
6
  "main": "dist/src/index.js",