claude-flow 3.5.81 → 3.5.82
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 +1 -1
- package/v3/@claude-flow/cli/dist/src/commands/hooks.js +3 -3
- package/v3/@claude-flow/cli/dist/src/commands/init.js +5 -5
- package/v3/@claude-flow/cli/dist/src/mcp-tools/guidance-tools.js +1 -1
- package/v3/@claude-flow/cli/dist/src/mcp-tools/hooks-tools.js +31 -23
- package/v3/@claude-flow/cli/dist/src/mcp-tools/neural-tools.js +3 -0
- package/v3/@claude-flow/cli/dist/src/mcp-tools/system-tools.js +5 -3
- package/v3/@claude-flow/cli/dist/src/mcp-tools/types.js +5 -1
- package/v3/@claude-flow/cli/dist/src/memory/memory-bridge.js +3 -1
- package/v3/@claude-flow/cli/dist/src/services/worker-daemon.js +4 -2
- package/v3/@claude-flow/cli/package.json +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "claude-flow",
|
|
3
|
-
"version": "3.5.
|
|
3
|
+
"version": "3.5.82",
|
|
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",
|
|
@@ -3365,14 +3365,14 @@ const statuslineCommand = {
|
|
|
3365
3365
|
const isWindows = process.platform === 'win32';
|
|
3366
3366
|
try {
|
|
3367
3367
|
const psCmd = isWindows
|
|
3368
|
-
? 'tasklist /FI "IMAGENAME eq node.exe" 2>NUL |
|
|
3368
|
+
? 'tasklist /FI "IMAGENAME eq node.exe" /NH 2>NUL | find /c /v "" 2>NUL || echo 0'
|
|
3369
3369
|
: 'ps aux 2>/dev/null | grep -c agentic-flow || echo "0"';
|
|
3370
|
-
const ps = execSync(psCmd, { encoding: 'utf-8' });
|
|
3370
|
+
const ps = execSync(psCmd, { encoding: 'utf-8', timeout: 3000 });
|
|
3371
3371
|
activeAgents = Math.max(0, parseInt(ps.trim()) - 1);
|
|
3372
3372
|
coordinationActive = activeAgents > 0;
|
|
3373
3373
|
}
|
|
3374
3374
|
catch {
|
|
3375
|
-
//
|
|
3375
|
+
// ps/tasklist unavailable or timed out — report zero
|
|
3376
3376
|
}
|
|
3377
3377
|
return { activeAgents, maxAgents, coordinationActive };
|
|
3378
3378
|
}
|
|
@@ -344,13 +344,13 @@ const initAction = async (ctx) => {
|
|
|
344
344
|
}
|
|
345
345
|
}
|
|
346
346
|
if (!startDaemon && !startAll) {
|
|
347
|
-
|
|
347
|
+
const bin = (process.argv[1] || '').includes('ruflo') ? 'ruflo' : 'claude-flow';
|
|
348
348
|
output.writeln(output.bold('Next steps:'));
|
|
349
349
|
output.printList([
|
|
350
|
-
`Run ${output.highlight(
|
|
351
|
-
`Run ${output.highlight(
|
|
352
|
-
`Run ${output.highlight(
|
|
353
|
-
`Or use ${output.highlight(
|
|
350
|
+
`Run ${output.highlight(`${bin} daemon start`)} to start background workers`,
|
|
351
|
+
`Run ${output.highlight(`${bin} memory init`)} to initialize memory database`,
|
|
352
|
+
`Run ${output.highlight(`${bin} swarm init`)} to initialize a swarm`,
|
|
353
|
+
`Or use ${output.highlight(`${bin} init --start-all`)} to do all of the above`,
|
|
354
354
|
options.components.settings ? `Review ${output.highlight('.claude/settings.json')} for hook configurations` : '',
|
|
355
355
|
].filter(Boolean));
|
|
356
356
|
}
|
|
@@ -65,7 +65,7 @@ const CAPABILITY_CATALOG = {
|
|
|
65
65
|
'memory-knowledge': {
|
|
66
66
|
name: 'Memory & Knowledge',
|
|
67
67
|
description: 'Persistent memory with HNSW vector search, AgentDB storage, and embeddings.',
|
|
68
|
-
tools: ['memory_store', 'memory_retrieve', 'memory_search', 'memory_list', 'memory_delete', 'memory_init', 'memory_export', '
|
|
68
|
+
tools: ['memory_store', 'memory_retrieve', 'memory_search', 'memory_list', 'memory_delete', 'memory_init', 'memory_export', 'memory_import_claude', 'memory_stats', 'memory_compact', 'memory_namespace'],
|
|
69
69
|
commands: ['memory store', 'memory retrieve', 'memory search', 'memory list', 'memory delete', 'memory init'],
|
|
70
70
|
agents: ['swarm-memory-manager', 'v3-memory-specialist'],
|
|
71
71
|
skills: ['v3-memory-unification', 'agentdb-advanced', 'agentdb-vector-search', 'agentdb-memory-patterns', 'agentdb-learning'],
|
|
@@ -2196,6 +2196,21 @@ export const hooksTrajectoryStart = {
|
|
|
2196
2196
|
startedAt,
|
|
2197
2197
|
};
|
|
2198
2198
|
activeTrajectories.set(trajectoryId, trajectory);
|
|
2199
|
+
// Persist pending trajectory to disk so it survives MCP restarts
|
|
2200
|
+
const storeFn = await getRealStoreFunction();
|
|
2201
|
+
if (storeFn) {
|
|
2202
|
+
try {
|
|
2203
|
+
await storeFn({
|
|
2204
|
+
key: `trajectory-pending-${trajectoryId}`,
|
|
2205
|
+
value: JSON.stringify(trajectory),
|
|
2206
|
+
namespace: 'trajectories',
|
|
2207
|
+
tags: [agent, 'pending', 'sona-trajectory'],
|
|
2208
|
+
});
|
|
2209
|
+
}
|
|
2210
|
+
catch {
|
|
2211
|
+
// Best-effort persistence — trajectory still lives in-memory
|
|
2212
|
+
}
|
|
2213
|
+
}
|
|
2199
2214
|
return {
|
|
2200
2215
|
trajectoryId,
|
|
2201
2216
|
task,
|
|
@@ -2607,8 +2622,19 @@ export const hooksIntelligenceStats = {
|
|
|
2607
2622
|
const moe = await getMoERouter();
|
|
2608
2623
|
const flash = await getFlashAttention();
|
|
2609
2624
|
const lora = await getLoRAAdapter();
|
|
2610
|
-
// Fallback to memory store for legacy data
|
|
2611
|
-
|
|
2625
|
+
// Fallback to memory store for legacy data (may not exist yet)
|
|
2626
|
+
let memoryStats;
|
|
2627
|
+
try {
|
|
2628
|
+
memoryStats = getIntelligenceStatsFromMemory();
|
|
2629
|
+
}
|
|
2630
|
+
catch {
|
|
2631
|
+
memoryStats = {
|
|
2632
|
+
trajectories: { total: 0, successful: 0 },
|
|
2633
|
+
patterns: { learned: 0, categories: {} },
|
|
2634
|
+
memory: { indexSize: 0, totalAccessCount: 0, memorySizeBytes: 0 },
|
|
2635
|
+
routing: { decisions: 0, avgConfidence: 0 },
|
|
2636
|
+
};
|
|
2637
|
+
}
|
|
2612
2638
|
// SONA stats from real implementation
|
|
2613
2639
|
let sonaStats = {
|
|
2614
2640
|
trajectoriesTotal: memoryStats.trajectories.total,
|
|
@@ -3304,26 +3330,7 @@ export const hooksWorkerDispatch = {
|
|
|
3304
3330
|
startedAt: new Date(),
|
|
3305
3331
|
};
|
|
3306
3332
|
activeWorkers.set(workerId, worker);
|
|
3307
|
-
|
|
3308
|
-
if (background) {
|
|
3309
|
-
setTimeout(() => {
|
|
3310
|
-
const w = activeWorkers.get(workerId);
|
|
3311
|
-
if (w) {
|
|
3312
|
-
w.progress = 50;
|
|
3313
|
-
w.phase = 'processing';
|
|
3314
|
-
}
|
|
3315
|
-
}, 500);
|
|
3316
|
-
setTimeout(() => {
|
|
3317
|
-
const w = activeWorkers.get(workerId);
|
|
3318
|
-
if (w) {
|
|
3319
|
-
w.progress = 100;
|
|
3320
|
-
w.phase = 'completed';
|
|
3321
|
-
w.status = 'completed';
|
|
3322
|
-
w.completedAt = new Date();
|
|
3323
|
-
}
|
|
3324
|
-
}, 1500);
|
|
3325
|
-
}
|
|
3326
|
-
else {
|
|
3333
|
+
if (!background) {
|
|
3327
3334
|
worker.progress = 100;
|
|
3328
3335
|
worker.phase = 'completed';
|
|
3329
3336
|
worker.status = 'completed';
|
|
@@ -3340,8 +3347,9 @@ export const hooksWorkerDispatch = {
|
|
|
3340
3347
|
estimatedDuration: config.estimatedDuration,
|
|
3341
3348
|
capabilities: config.capabilities,
|
|
3342
3349
|
},
|
|
3343
|
-
status: background ? '
|
|
3350
|
+
status: background ? 'scheduled' : 'completed',
|
|
3344
3351
|
background,
|
|
3352
|
+
note: background ? 'Worker scheduled. Use hooks_worker-status to check progress. Start the daemon (daemon start) for real background execution.' : undefined,
|
|
3345
3353
|
timestamp: new Date().toISOString(),
|
|
3346
3354
|
};
|
|
3347
3355
|
},
|
|
@@ -251,6 +251,9 @@ export const neuralTools = [
|
|
|
251
251
|
totalPatterns: Object.keys(store.patterns).length,
|
|
252
252
|
epochs,
|
|
253
253
|
trainedAt: model.trainedAt,
|
|
254
|
+
...(embeddingServiceName === 'hash-fallback' || embeddingServiceName === 'none' ? {
|
|
255
|
+
platformNote: 'ONNX embeddings not available — using hash-based fallback. Install @claude-flow/embeddings and run "embeddings init --download" for semantic search.',
|
|
256
|
+
} : {}),
|
|
254
257
|
};
|
|
255
258
|
},
|
|
256
259
|
},
|
|
@@ -284,11 +284,13 @@ export const systemTools = [
|
|
|
284
284
|
const metrics = loadMetrics();
|
|
285
285
|
const checks = [];
|
|
286
286
|
const projectCwd = getProjectCwd();
|
|
287
|
-
// Memory DB check — verify
|
|
287
|
+
// Memory DB check — verify any supported store file exists
|
|
288
288
|
{
|
|
289
289
|
const t0 = performance.now();
|
|
290
|
-
const
|
|
291
|
-
const
|
|
290
|
+
const legacyPath = join(projectCwd, '.claude-flow', 'memory', 'store.json');
|
|
291
|
+
const agentDbPath = join(projectCwd, '.claude-flow', 'memory', 'agentdb.sqlite');
|
|
292
|
+
const rvfPath = join(projectCwd, '.claude-flow', 'memory', 'store.rvf');
|
|
293
|
+
const memoryExists = existsSync(legacyPath) || existsSync(agentDbPath) || existsSync(rvfPath);
|
|
292
294
|
const elapsed = performance.now() - t0;
|
|
293
295
|
checks.push({
|
|
294
296
|
name: 'memory',
|
|
@@ -9,6 +9,10 @@
|
|
|
9
9
|
* where process.cwd() may resolve to '/') over the real process.cwd().
|
|
10
10
|
*/
|
|
11
11
|
export function getProjectCwd() {
|
|
12
|
-
|
|
12
|
+
const envCwd = process.env.CLAUDE_FLOW_CWD;
|
|
13
|
+
if (envCwd && envCwd !== '/' && envCwd !== process.env.HOME) {
|
|
14
|
+
return envCwd;
|
|
15
|
+
}
|
|
16
|
+
return process.cwd();
|
|
13
17
|
}
|
|
14
18
|
//# sourceMappingURL=types.js.map
|
|
@@ -78,13 +78,15 @@ async function getRegistry(dbPath) {
|
|
|
78
78
|
dbPath: dbPath || getDbPath(),
|
|
79
79
|
embeddingModel: 'Xenova/all-MiniLM-L6-v2',
|
|
80
80
|
dimension: 384,
|
|
81
|
+
vectorBackend: 'auto',
|
|
81
82
|
controllers: {
|
|
82
83
|
reasoningBank: true,
|
|
83
84
|
learningBridge: false,
|
|
84
85
|
tieredCache: true,
|
|
85
86
|
hierarchicalMemory: true,
|
|
86
87
|
memoryConsolidation: true,
|
|
87
|
-
memoryGraph: true,
|
|
88
|
+
memoryGraph: true,
|
|
89
|
+
vectorBackend: true,
|
|
88
90
|
},
|
|
89
91
|
});
|
|
90
92
|
}
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
* - testgaps: Test coverage analysis (20 min interval)
|
|
11
11
|
*/
|
|
12
12
|
import { EventEmitter } from 'events';
|
|
13
|
-
import { existsSync, mkdirSync, writeFileSync, readFileSync, appendFileSync, unlinkSync } from 'fs';
|
|
13
|
+
import { existsSync, mkdirSync, writeFileSync, readFileSync, appendFileSync, unlinkSync, renameSync } from 'fs';
|
|
14
14
|
import { cpus } from 'os';
|
|
15
15
|
import { join } from 'path';
|
|
16
16
|
import { HeadlessWorkerExecutor, isHeadlessWorker, } from './headless-worker-executor.js';
|
|
@@ -903,7 +903,9 @@ export class WorkerDaemon extends EventEmitter {
|
|
|
903
903
|
savedAt: new Date().toISOString(),
|
|
904
904
|
};
|
|
905
905
|
try {
|
|
906
|
-
|
|
906
|
+
const tmpFile = this.config.stateFile + '.tmp';
|
|
907
|
+
writeFileSync(tmpFile, JSON.stringify(state, null, 2));
|
|
908
|
+
renameSync(tmpFile, this.config.stateFile);
|
|
907
909
|
}
|
|
908
910
|
catch (error) {
|
|
909
911
|
this.log('error', `Failed to save state: ${error}`);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@claude-flow/cli",
|
|
3
|
-
"version": "3.5.
|
|
3
|
+
"version": "3.5.82",
|
|
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",
|