claude-flow 3.18.1 → 3.18.2
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.18.
|
|
3
|
+
"version": "3.18.2",
|
|
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",
|
|
@@ -116,7 +116,8 @@
|
|
|
116
116
|
"ws": ">=8.21.0",
|
|
117
117
|
"@grpc/grpc-js": ">=1.14.4",
|
|
118
118
|
"form-data": ">=4.0.6",
|
|
119
|
-
"http-proxy-middleware": ">=3.0.7"
|
|
119
|
+
"http-proxy-middleware": ">=3.0.7",
|
|
120
|
+
"@ruvector/ruvllm": ">=2.5.7"
|
|
120
121
|
},
|
|
121
122
|
"devDependencies": {
|
|
122
123
|
"@openai/codex": "^0.98.0",
|
|
@@ -469,8 +469,20 @@ const statusCommand = {
|
|
|
469
469
|
{
|
|
470
470
|
component: 'Training Pipeline',
|
|
471
471
|
status: stats._trainingBackend === 'ruvllm' ? output.success('Available') : output.dim(stats._trainingBackend || 'Unavailable'),
|
|
472
|
+
// Checkpoint capability is version-gated: saveCheckpoint(path)
|
|
473
|
+
// was a silent no-op before @ruvector/ruvllm 2.5.7 (#2549).
|
|
472
474
|
details: stats._trainingBackend === 'ruvllm'
|
|
473
|
-
?
|
|
475
|
+
? await (async () => {
|
|
476
|
+
try {
|
|
477
|
+
const { nativeCheckpointsSupported } = await import('../ruvector/lora-adapter.js');
|
|
478
|
+
return nativeCheckpointsSupported()
|
|
479
|
+
? 'native @ruvector/ruvllm pipeline + disk checkpoints'
|
|
480
|
+
: 'native @ruvector/ruvllm pipeline (checkpoints need >=2.5.7)';
|
|
481
|
+
}
|
|
482
|
+
catch {
|
|
483
|
+
return 'native @ruvector/ruvllm pipeline';
|
|
484
|
+
}
|
|
485
|
+
})()
|
|
474
486
|
: 'JS fallback',
|
|
475
487
|
},
|
|
476
488
|
await (async () => {
|
|
@@ -106,6 +106,14 @@ export interface LoRAStats {
|
|
|
106
106
|
* module resolution.
|
|
107
107
|
*/
|
|
108
108
|
export declare function resolveTrainingBackend(): 'ruvllm' | 'js-fallback';
|
|
109
|
+
/**
|
|
110
|
+
* Whether the resolved @ruvector/ruvllm persists checkpoints to disk.
|
|
111
|
+
* saveCheckpoint(path) was a silent no-op (private, void, wrote 0 bytes)
|
|
112
|
+
* before 2.5.7 — status surfaces must not advertise checkpoints against
|
|
113
|
+
* older versions. Reads the resolved package's version; the package does
|
|
114
|
+
* not export ./package.json, so walk up from the resolved entry instead.
|
|
115
|
+
*/
|
|
116
|
+
export declare function nativeCheckpointsSupported(): boolean;
|
|
109
117
|
/**
|
|
110
118
|
* Low-Rank Adaptation module for efficient embedding fine-tuning
|
|
111
119
|
*/
|
|
@@ -77,6 +77,34 @@ export function resolveTrainingBackend() {
|
|
|
77
77
|
return 'js-fallback';
|
|
78
78
|
}
|
|
79
79
|
}
|
|
80
|
+
/**
|
|
81
|
+
* Whether the resolved @ruvector/ruvllm persists checkpoints to disk.
|
|
82
|
+
* saveCheckpoint(path) was a silent no-op (private, void, wrote 0 bytes)
|
|
83
|
+
* before 2.5.7 — status surfaces must not advertise checkpoints against
|
|
84
|
+
* older versions. Reads the resolved package's version; the package does
|
|
85
|
+
* not export ./package.json, so walk up from the resolved entry instead.
|
|
86
|
+
*/
|
|
87
|
+
export function nativeCheckpointsSupported() {
|
|
88
|
+
try {
|
|
89
|
+
const req = createRequire(import.meta.url);
|
|
90
|
+
let dir = dirname(req.resolve('@ruvector/ruvllm'));
|
|
91
|
+
for (let i = 0; i < 5; i++) {
|
|
92
|
+
const pkgPath = join(dir, 'package.json');
|
|
93
|
+
if (existsSync(pkgPath)) {
|
|
94
|
+
const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));
|
|
95
|
+
if (pkg.name !== '@ruvector/ruvllm') {
|
|
96
|
+
dir = dirname(dir);
|
|
97
|
+
continue;
|
|
98
|
+
}
|
|
99
|
+
const [maj, min, pat] = String(pkg.version).split('.').map(Number);
|
|
100
|
+
return maj > 2 || (maj === 2 && (min > 5 || (min === 5 && pat >= 7)));
|
|
101
|
+
}
|
|
102
|
+
dir = dirname(dir);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
catch { /* unresolved — no native checkpoints */ }
|
|
106
|
+
return false;
|
|
107
|
+
}
|
|
80
108
|
async function loadTrainingPipeline(adapter) {
|
|
81
109
|
if (pipelineLoaded)
|
|
82
110
|
return ruvllmPipeline;
|
|
@@ -408,11 +436,18 @@ export class LoRAAdapter {
|
|
|
408
436
|
* Falls back to writing our own weight JSON if ruvllm is unavailable.
|
|
409
437
|
*/
|
|
410
438
|
async saveCheckpoint(path) {
|
|
439
|
+
// Parent dir must exist for BOTH paths: ruvllm <2.5.7 never wrote a
|
|
440
|
+
// file at all, and the JS fallback's writeFileSync throws ENOENT on a
|
|
441
|
+
// missing dir — which the catch silently converted to `false` (#2549).
|
|
442
|
+
try {
|
|
443
|
+
mkdirSync(dirname(path), { recursive: true });
|
|
444
|
+
}
|
|
445
|
+
catch { /* fs errors surface on write below */ }
|
|
411
446
|
const pipeline = await loadTrainingPipeline(this);
|
|
412
447
|
if (pipeline) {
|
|
413
448
|
try {
|
|
414
449
|
pipeline.saveCheckpoint(path);
|
|
415
|
-
// Verify ruvllm actually wrote the file (
|
|
450
|
+
// Verify ruvllm actually wrote the file (<2.5.7 is a silent no-op)
|
|
416
451
|
const fs = await import('fs');
|
|
417
452
|
if (fs.existsSync(path))
|
|
418
453
|
return true;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@claude-flow/cli",
|
|
3
|
-
"version": "3.18.
|
|
3
|
+
"version": "3.18.2",
|
|
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",
|