claude-flow 3.5.42 → 3.5.43
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/claims.js +29 -96
- package/v3/@claude-flow/cli/dist/src/commands/config.js +32 -114
- package/v3/@claude-flow/cli/dist/src/commands/deployment.js +30 -139
- package/v3/@claude-flow/cli/dist/src/commands/hive-mind.js +7 -0
- package/v3/@claude-flow/cli/dist/src/commands/memory.js +7 -0
- package/v3/@claude-flow/cli/dist/src/commands/migrate.js +26 -186
- package/v3/@claude-flow/cli/dist/src/commands/providers.js +11 -19
- package/v3/@claude-flow/cli/dist/src/commands/swarm.js +79 -25
- package/v3/@claude-flow/cli/dist/src/config-adapter.js +1 -1
- package/v3/@claude-flow/cli/dist/src/mcp-tools/ruvllm-tools.js +4 -3
- package/v3/@claude-flow/cli/dist/src/parser.js +3 -1
- package/v3/@claude-flow/cli/dist/src/services/headless-worker-executor.js +30 -5
- package/v3/@claude-flow/cli/dist/src/services/worker-daemon.d.ts +17 -0
- package/v3/@claude-flow/cli/dist/src/services/worker-daemon.js +66 -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.43",
|
|
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",
|
|
@@ -18,29 +18,14 @@ const listCommand = {
|
|
|
18
18
|
{ command: 'claude-flow claims list', description: 'List all claims' },
|
|
19
19
|
{ command: 'claude-flow claims list -u user123', description: 'List user claims' },
|
|
20
20
|
],
|
|
21
|
-
action: async (
|
|
21
|
+
action: async (_ctx) => {
|
|
22
|
+
// #1425: This command is not yet implemented — was displaying hardcoded fake claims
|
|
22
23
|
output.writeln();
|
|
23
|
-
output.
|
|
24
|
-
output.writeln(output.dim('
|
|
25
|
-
output.
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
{ key: 'type', header: 'Type', width: 12 },
|
|
29
|
-
{ key: 'scope', header: 'Scope', width: 15 },
|
|
30
|
-
{ key: 'value', header: 'Value', width: 20 },
|
|
31
|
-
],
|
|
32
|
-
data: [
|
|
33
|
-
{ claim: 'swarm:create', type: 'Permission', scope: 'Global', value: output.success('Allowed') },
|
|
34
|
-
{ claim: 'swarm:delete', type: 'Permission', scope: 'Owned', value: output.success('Allowed') },
|
|
35
|
-
{ claim: 'agent:spawn', type: 'Permission', scope: 'Global', value: output.success('Allowed') },
|
|
36
|
-
{ claim: 'memory:read', type: 'Permission', scope: 'Namespace', value: output.success('Allowed') },
|
|
37
|
-
{ claim: 'memory:write', type: 'Permission', scope: 'Namespace', value: output.success('Allowed') },
|
|
38
|
-
{ claim: 'admin:*', type: 'Permission', scope: 'Global', value: output.error('Denied') },
|
|
39
|
-
{ claim: 'role', type: 'Identity', scope: 'System', value: 'developer' },
|
|
40
|
-
{ claim: 'tier', type: 'Identity', scope: 'System', value: 'pro' },
|
|
41
|
-
],
|
|
42
|
-
});
|
|
43
|
-
return { success: true };
|
|
24
|
+
output.printError('claims list is not yet implemented');
|
|
25
|
+
output.writeln(output.dim('Claims listing requires reading from claims config file.'));
|
|
26
|
+
output.writeln(output.dim('Use "claims check -c <claim>" to evaluate a specific claim.'));
|
|
27
|
+
output.writeln(output.dim('Track progress: https://github.com/ruvnet/claude-flow/issues/1425'));
|
|
28
|
+
return { success: false, exitCode: 1 };
|
|
44
29
|
},
|
|
45
30
|
};
|
|
46
31
|
// Check subcommand
|
|
@@ -201,19 +186,12 @@ const grantCommand = {
|
|
|
201
186
|
output.printError('Either user or role is required');
|
|
202
187
|
return { success: false, exitCode: 1 };
|
|
203
188
|
}
|
|
189
|
+
// #1425: This command is not yet implemented — was faking claim grant
|
|
204
190
|
output.writeln();
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
output.writeln();
|
|
210
|
-
output.printBox([
|
|
211
|
-
`Claim: ${claim}`,
|
|
212
|
-
`Target: ${user ? `User: ${user}` : `Role: ${role}`}`,
|
|
213
|
-
`Scope: ${scope}`,
|
|
214
|
-
`Status: ${output.success('Active')}`,
|
|
215
|
-
].join('\n'), 'Grant Complete');
|
|
216
|
-
return { success: true };
|
|
191
|
+
output.printError('claims grant is not yet implemented');
|
|
192
|
+
output.writeln(output.dim(`Cannot grant "${claim}" — claims persistence not yet built.`));
|
|
193
|
+
output.writeln(output.dim('Track progress: https://github.com/ruvnet/claude-flow/issues/1425'));
|
|
194
|
+
return { success: false, exitCode: 1 };
|
|
217
195
|
},
|
|
218
196
|
};
|
|
219
197
|
// Revoke subcommand
|
|
@@ -237,12 +215,12 @@ const revokeCommand = {
|
|
|
237
215
|
output.printError('Claim is required');
|
|
238
216
|
return { success: false, exitCode: 1 };
|
|
239
217
|
}
|
|
218
|
+
// #1425: This command is not yet implemented — was faking claim revocation
|
|
240
219
|
output.writeln();
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
return { success: true };
|
|
220
|
+
output.printError('claims revoke is not yet implemented');
|
|
221
|
+
output.writeln(output.dim(`Cannot revoke "${claim}" — claims persistence not yet built.`));
|
|
222
|
+
output.writeln(output.dim('Track progress: https://github.com/ruvnet/claude-flow/issues/1425'));
|
|
223
|
+
return { success: false, exitCode: 1 };
|
|
246
224
|
},
|
|
247
225
|
};
|
|
248
226
|
// Roles subcommand
|
|
@@ -257,45 +235,13 @@ const rolesCommand = {
|
|
|
257
235
|
{ command: 'claude-flow claims roles', description: 'List all roles' },
|
|
258
236
|
{ command: 'claude-flow claims roles -a show -n admin', description: 'Show role details' },
|
|
259
237
|
],
|
|
260
|
-
action: async (
|
|
261
|
-
|
|
262
|
-
const name = ctx.flags.name;
|
|
238
|
+
action: async (_ctx) => {
|
|
239
|
+
// #1425: This command is not yet implemented — was displaying hardcoded fake roles
|
|
263
240
|
output.writeln();
|
|
264
|
-
output.
|
|
265
|
-
output.writeln(output.dim('
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
`Role: ${name}`,
|
|
269
|
-
`Description: Full system access`,
|
|
270
|
-
``,
|
|
271
|
-
`Claims:`,
|
|
272
|
-
` - swarm:* (all swarm operations)`,
|
|
273
|
-
` - agent:* (all agent operations)`,
|
|
274
|
-
` - memory:* (all memory operations)`,
|
|
275
|
-
` - admin:* (administrative functions)`,
|
|
276
|
-
``,
|
|
277
|
-
`Members: 2`,
|
|
278
|
-
`Created: 2024-01-01`,
|
|
279
|
-
].join('\n'), 'Role Details');
|
|
280
|
-
}
|
|
281
|
-
else {
|
|
282
|
-
output.printTable({
|
|
283
|
-
columns: [
|
|
284
|
-
{ key: 'role', header: 'Role', width: 15 },
|
|
285
|
-
{ key: 'description', header: 'Description', width: 30 },
|
|
286
|
-
{ key: 'claims', header: 'Claims', width: 12 },
|
|
287
|
-
{ key: 'members', header: 'Members', width: 10 },
|
|
288
|
-
],
|
|
289
|
-
data: [
|
|
290
|
-
{ role: output.highlight('admin'), description: 'Full system access', claims: '15', members: '2' },
|
|
291
|
-
{ role: output.highlight('developer'), description: 'Development operations', claims: '10', members: '12' },
|
|
292
|
-
{ role: output.highlight('operator'), description: 'Operational tasks', claims: '8', members: '5' },
|
|
293
|
-
{ role: output.highlight('viewer'), description: 'Read-only access', claims: '3', members: '25' },
|
|
294
|
-
{ role: output.highlight('guest'), description: 'Limited access', claims: '1', members: '100' },
|
|
295
|
-
],
|
|
296
|
-
});
|
|
297
|
-
}
|
|
298
|
-
return { success: true };
|
|
241
|
+
output.printError('claims roles is not yet implemented');
|
|
242
|
+
output.writeln(output.dim('Role management requires claims config persistence not yet built.'));
|
|
243
|
+
output.writeln(output.dim('Track progress: https://github.com/ruvnet/claude-flow/issues/1425'));
|
|
244
|
+
return { success: false, exitCode: 1 };
|
|
299
245
|
},
|
|
300
246
|
};
|
|
301
247
|
// Policies subcommand
|
|
@@ -310,26 +256,13 @@ const policiesCommand = {
|
|
|
310
256
|
{ command: 'claude-flow claims policies', description: 'List policies' },
|
|
311
257
|
{ command: 'claude-flow claims policies -a create -n rate-limit', description: 'Create policy' },
|
|
312
258
|
],
|
|
313
|
-
action: async (
|
|
259
|
+
action: async (_ctx) => {
|
|
260
|
+
// #1425: This command is not yet implemented — was displaying hardcoded fake policies
|
|
314
261
|
output.writeln();
|
|
315
|
-
output.
|
|
316
|
-
output.writeln(output.dim('
|
|
317
|
-
output.
|
|
318
|
-
|
|
319
|
-
{ key: 'policy', header: 'Policy', width: 20 },
|
|
320
|
-
{ key: 'type', header: 'Type', width: 15 },
|
|
321
|
-
{ key: 'condition', header: 'Condition', width: 30 },
|
|
322
|
-
{ key: 'status', header: 'Status', width: 12 },
|
|
323
|
-
],
|
|
324
|
-
data: [
|
|
325
|
-
{ policy: 'rate-limit', type: 'Throttle', condition: 'Max 100 req/min', status: output.success('Active') },
|
|
326
|
-
{ policy: 'geo-restrict', type: 'Location', condition: 'US, EU only', status: output.success('Active') },
|
|
327
|
-
{ policy: 'time-window', type: 'Temporal', condition: 'Business hours', status: output.dim('Inactive') },
|
|
328
|
-
{ policy: 'ip-allowlist', type: 'Network', condition: '10.0.0.0/8', status: output.success('Active') },
|
|
329
|
-
{ policy: 'mfa-required', type: 'Auth', condition: 'Admin operations', status: output.success('Active') },
|
|
330
|
-
],
|
|
331
|
-
});
|
|
332
|
-
return { success: true };
|
|
262
|
+
output.printError('claims policies is not yet implemented');
|
|
263
|
+
output.writeln(output.dim('Policy management requires claims config persistence not yet built.'));
|
|
264
|
+
output.writeln(output.dim('Track progress: https://github.com/ruvnet/claude-flow/issues/1425'));
|
|
265
|
+
return { success: false, exitCode: 1 };
|
|
333
266
|
},
|
|
334
267
|
};
|
|
335
268
|
// Main claims command
|
|
@@ -3,7 +3,6 @@
|
|
|
3
3
|
* Configuration management
|
|
4
4
|
*/
|
|
5
5
|
import { output } from '../output.js';
|
|
6
|
-
import { confirm } from '../prompt.js';
|
|
7
6
|
// Init configuration
|
|
8
7
|
const initCommand = {
|
|
9
8
|
name: 'init',
|
|
@@ -29,77 +28,14 @@ const initCommand = {
|
|
|
29
28
|
default: true
|
|
30
29
|
}
|
|
31
30
|
],
|
|
32
|
-
action: async (
|
|
33
|
-
|
|
34
|
-
const v3 = ctx.flags.v3;
|
|
35
|
-
output.writeln();
|
|
36
|
-
output.printInfo('Initializing RuFlo configuration...');
|
|
37
|
-
output.writeln();
|
|
38
|
-
// Create default configuration
|
|
39
|
-
const config = {
|
|
40
|
-
version: '3.0.0',
|
|
41
|
-
v3Mode: v3,
|
|
42
|
-
sparc: sparc,
|
|
43
|
-
agents: {
|
|
44
|
-
defaultType: 'coder',
|
|
45
|
-
maxConcurrent: 15,
|
|
46
|
-
autoSpawn: true,
|
|
47
|
-
timeout: 300
|
|
48
|
-
},
|
|
49
|
-
swarm: {
|
|
50
|
-
topology: 'hybrid',
|
|
51
|
-
maxAgents: 15,
|
|
52
|
-
autoScale: true,
|
|
53
|
-
coordinationStrategy: 'consensus'
|
|
54
|
-
},
|
|
55
|
-
memory: {
|
|
56
|
-
backend: 'hybrid',
|
|
57
|
-
path: './data/memory',
|
|
58
|
-
cacheSize: 256,
|
|
59
|
-
enableHNSW: true
|
|
60
|
-
},
|
|
61
|
-
mcp: {
|
|
62
|
-
transport: 'stdio',
|
|
63
|
-
autoStart: true,
|
|
64
|
-
tools: 'all'
|
|
65
|
-
},
|
|
66
|
-
providers: [
|
|
67
|
-
{ name: 'anthropic', priority: 1, enabled: true },
|
|
68
|
-
{ name: 'openrouter', priority: 2, enabled: false },
|
|
69
|
-
{ name: 'ollama', priority: 3, enabled: false }
|
|
70
|
-
]
|
|
71
|
-
};
|
|
72
|
-
output.writeln(output.dim(' Creating claude-flow.config.json...'));
|
|
73
|
-
output.writeln(output.dim(' Creating .claude-flow/ directory...'));
|
|
74
|
-
if (sparc) {
|
|
75
|
-
output.writeln(output.dim(' Initializing SPARC methodology...'));
|
|
76
|
-
output.writeln(output.dim(' Creating SPARC workflow files...'));
|
|
77
|
-
}
|
|
78
|
-
if (v3) {
|
|
79
|
-
output.writeln(output.dim(' Enabling V3 15-agent coordination...'));
|
|
80
|
-
output.writeln(output.dim(' Configuring AgentDB integration...'));
|
|
81
|
-
output.writeln(output.dim(' Setting up Flash Attention optimization...'));
|
|
82
|
-
}
|
|
31
|
+
action: async (_ctx) => {
|
|
32
|
+
// #1425: This command is not yet implemented — was faking file creation
|
|
83
33
|
output.writeln();
|
|
84
|
-
output.
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
data: [
|
|
90
|
-
{ setting: 'Version', value: config.version },
|
|
91
|
-
{ setting: 'V3 Mode', value: config.v3Mode ? 'Enabled' : 'Disabled' },
|
|
92
|
-
{ setting: 'SPARC Mode', value: config.sparc ? 'Enabled' : 'Disabled' },
|
|
93
|
-
{ setting: 'Swarm Topology', value: config.swarm.topology },
|
|
94
|
-
{ setting: 'Max Agents', value: config.swarm.maxAgents },
|
|
95
|
-
{ setting: 'Memory Backend', value: config.memory.backend },
|
|
96
|
-
{ setting: 'MCP Transport', value: config.mcp.transport }
|
|
97
|
-
]
|
|
98
|
-
});
|
|
99
|
-
output.writeln();
|
|
100
|
-
output.printSuccess('Configuration initialized');
|
|
101
|
-
output.writeln(output.dim(' Config file: ./claude-flow.config.json'));
|
|
102
|
-
return { success: true, data: config };
|
|
34
|
+
output.printError('config init is not yet implemented');
|
|
35
|
+
output.writeln(output.dim('Configuration files are not actually created by this command yet.'));
|
|
36
|
+
output.writeln(output.dim('Use the project wizard instead: npx claude-flow@v3alpha init --wizard'));
|
|
37
|
+
output.writeln(output.dim('Track progress: https://github.com/ruvnet/claude-flow/issues/1425'));
|
|
38
|
+
return { success: false, exitCode: 1 };
|
|
103
39
|
}
|
|
104
40
|
};
|
|
105
41
|
// Get configuration
|
|
@@ -196,9 +132,12 @@ const setCommand = {
|
|
|
196
132
|
output.printError('Both key and value are required');
|
|
197
133
|
return { success: false, exitCode: 1 };
|
|
198
134
|
}
|
|
199
|
-
|
|
200
|
-
output.
|
|
201
|
-
|
|
135
|
+
// #1425: This command is not yet implemented — was faking config persistence
|
|
136
|
+
output.writeln();
|
|
137
|
+
output.printError('config set is not yet implemented');
|
|
138
|
+
output.writeln(output.dim(`Cannot persist ${key} = ${value} — config file write not implemented.`));
|
|
139
|
+
output.writeln(output.dim('Track progress: https://github.com/ruvnet/claude-flow/issues/1425'));
|
|
140
|
+
return { success: false, exitCode: 1 };
|
|
202
141
|
}
|
|
203
142
|
};
|
|
204
143
|
// List providers
|
|
@@ -280,22 +219,13 @@ const resetCommand = {
|
|
|
280
219
|
choices: ['agents', 'swarm', 'memory', 'mcp', 'providers', 'all']
|
|
281
220
|
}
|
|
282
221
|
],
|
|
283
|
-
action: async (
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
});
|
|
291
|
-
if (!confirmed) {
|
|
292
|
-
output.printInfo('Operation cancelled');
|
|
293
|
-
return { success: true };
|
|
294
|
-
}
|
|
295
|
-
}
|
|
296
|
-
output.printInfo(`Resetting ${section} configuration...`);
|
|
297
|
-
output.printSuccess('Configuration reset to defaults');
|
|
298
|
-
return { success: true, data: { section, reset: true } };
|
|
222
|
+
action: async (_ctx) => {
|
|
223
|
+
// #1425: This command is not yet implemented — was faking config reset
|
|
224
|
+
output.writeln();
|
|
225
|
+
output.printError('config reset is not yet implemented');
|
|
226
|
+
output.writeln(output.dim('Configuration reset requires config file read/write support.'));
|
|
227
|
+
output.writeln(output.dim('Track progress: https://github.com/ruvnet/claude-flow/issues/1425'));
|
|
228
|
+
return { success: false, exitCode: 1 };
|
|
299
229
|
}
|
|
300
230
|
};
|
|
301
231
|
// Export configuration
|
|
@@ -318,21 +248,13 @@ const exportCommand = {
|
|
|
318
248
|
choices: ['json', 'yaml']
|
|
319
249
|
}
|
|
320
250
|
],
|
|
321
|
-
action: async (
|
|
322
|
-
|
|
323
|
-
const config = {
|
|
324
|
-
version: '3.0.0',
|
|
325
|
-
exportedAt: new Date().toISOString(),
|
|
326
|
-
agents: { defaultType: 'coder', maxConcurrent: 15 },
|
|
327
|
-
swarm: { topology: 'hybrid', maxAgents: 15 },
|
|
328
|
-
memory: { backend: 'hybrid', cacheSize: 256 },
|
|
329
|
-
mcp: { transport: 'stdio', tools: 'all' }
|
|
330
|
-
};
|
|
331
|
-
output.printInfo(`Exporting configuration to ${outputPath}...`);
|
|
332
|
-
output.printJson(config);
|
|
251
|
+
action: async (_ctx) => {
|
|
252
|
+
// #1425: This command is not yet implemented — was faking config export
|
|
333
253
|
output.writeln();
|
|
334
|
-
output.
|
|
335
|
-
|
|
254
|
+
output.printError('config export is not yet implemented');
|
|
255
|
+
output.writeln(output.dim('Configuration export requires config file read support.'));
|
|
256
|
+
output.writeln(output.dim('Track progress: https://github.com/ruvnet/claude-flow/issues/1425'));
|
|
257
|
+
return { success: false, exitCode: 1 };
|
|
336
258
|
}
|
|
337
259
|
};
|
|
338
260
|
// Import configuration
|
|
@@ -356,20 +278,16 @@ const importCommand = {
|
|
|
356
278
|
],
|
|
357
279
|
action: async (ctx) => {
|
|
358
280
|
const file = ctx.flags.file || ctx.args[0];
|
|
359
|
-
const merge = ctx.flags.merge;
|
|
360
281
|
if (!file) {
|
|
361
282
|
output.printError('File path is required');
|
|
362
283
|
return { success: false, exitCode: 1 };
|
|
363
284
|
}
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
}
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
}
|
|
371
|
-
output.printSuccess('Configuration imported');
|
|
372
|
-
return { success: true, data: { file, merge, imported: true } };
|
|
285
|
+
// #1425: This command is not yet implemented — was faking config import
|
|
286
|
+
output.writeln();
|
|
287
|
+
output.printError('config import is not yet implemented');
|
|
288
|
+
output.writeln(output.dim(`Cannot import from ${file} — config file read/write not implemented.`));
|
|
289
|
+
output.writeln(output.dim('Track progress: https://github.com/ruvnet/claude-flow/issues/1425'));
|
|
290
|
+
return { success: false, exitCode: 1 };
|
|
373
291
|
}
|
|
374
292
|
};
|
|
375
293
|
// Main config command
|
|
@@ -21,42 +21,12 @@ const deployCommand = {
|
|
|
21
21
|
{ command: 'claude-flow deployment deploy --dry-run', description: 'Simulate deployment' },
|
|
22
22
|
],
|
|
23
23
|
action: async (ctx) => {
|
|
24
|
-
|
|
25
|
-
const version = ctx.flags.version || 'latest';
|
|
26
|
-
const dryRun = ctx.flags['dry-run'];
|
|
24
|
+
// #1425: This command is not yet implemented — was returning hardcoded fake responses
|
|
27
25
|
output.writeln();
|
|
28
|
-
output.
|
|
29
|
-
output.writeln(output.dim('
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
output.writeln();
|
|
33
|
-
}
|
|
34
|
-
const steps = [
|
|
35
|
-
{ name: 'Pre-flight checks', status: 'running' },
|
|
36
|
-
{ name: 'Build artifacts', status: 'pending' },
|
|
37
|
-
{ name: 'Run tests', status: 'pending' },
|
|
38
|
-
{ name: 'Security scan', status: 'pending' },
|
|
39
|
-
{ name: 'Deploy to target', status: 'pending' },
|
|
40
|
-
{ name: 'Health checks', status: 'pending' },
|
|
41
|
-
{ name: 'DNS update', status: 'pending' },
|
|
42
|
-
];
|
|
43
|
-
for (const step of steps) {
|
|
44
|
-
const spinner = output.createSpinner({ text: step.name + '...', spinner: 'dots' });
|
|
45
|
-
spinner.start();
|
|
46
|
-
await new Promise(r => setTimeout(r, 400));
|
|
47
|
-
spinner.succeed(step.name);
|
|
48
|
-
}
|
|
49
|
-
output.writeln();
|
|
50
|
-
output.printBox([
|
|
51
|
-
`Environment: ${env}`,
|
|
52
|
-
`Version: ${version}`,
|
|
53
|
-
`Status: ${output.success('Deployed')}`,
|
|
54
|
-
``,
|
|
55
|
-
`URL: https://${env === 'prod' ? 'api' : env}.claude-flow.io`,
|
|
56
|
-
`Deployed at: ${new Date().toISOString()}`,
|
|
57
|
-
`Duration: 12.4s`,
|
|
58
|
-
].join('\n'), 'Deployment Complete');
|
|
59
|
-
return { success: true };
|
|
26
|
+
output.printError('deployment deploy is not yet implemented');
|
|
27
|
+
output.writeln(output.dim('This command will be implemented in a future release.'));
|
|
28
|
+
output.writeln(output.dim('Track progress: https://github.com/ruvnet/claude-flow/issues/1425'));
|
|
29
|
+
return { success: false, exitCode: 1 };
|
|
60
30
|
},
|
|
61
31
|
};
|
|
62
32
|
// Status subcommand
|
|
@@ -72,25 +42,12 @@ const statusCommand = {
|
|
|
72
42
|
{ command: 'claude-flow deployment status -e prod', description: 'Check production' },
|
|
73
43
|
],
|
|
74
44
|
action: async (ctx) => {
|
|
45
|
+
// #1425: This command is not yet implemented — was returning hardcoded fake data
|
|
75
46
|
output.writeln();
|
|
76
|
-
output.
|
|
77
|
-
output.writeln(output.dim('
|
|
78
|
-
output.
|
|
79
|
-
|
|
80
|
-
{ key: 'env', header: 'Environment', width: 12 },
|
|
81
|
-
{ key: 'version', header: 'Version', width: 18 },
|
|
82
|
-
{ key: 'status', header: 'Status', width: 12 },
|
|
83
|
-
{ key: 'health', header: 'Health', width: 10 },
|
|
84
|
-
{ key: 'deployed', header: 'Deployed', width: 20 },
|
|
85
|
-
],
|
|
86
|
-
data: [
|
|
87
|
-
{ env: 'Production', version: 'v3.0.0-alpha.10', status: output.success('Active'), health: output.success('100%'), deployed: '2h ago' },
|
|
88
|
-
{ env: 'Staging', version: 'v3.0.0-alpha.11', status: output.success('Active'), health: output.success('100%'), deployed: '30m ago' },
|
|
89
|
-
{ env: 'Development', version: 'v3.0.0-alpha.12', status: output.success('Active'), health: output.success('100%'), deployed: '5m ago' },
|
|
90
|
-
{ env: 'Preview', version: 'pr-456', status: output.warning('Deploying'), health: output.dim('--'), deployed: 'In progress' },
|
|
91
|
-
],
|
|
92
|
-
});
|
|
93
|
-
return { success: true };
|
|
47
|
+
output.printError('deployment status is not yet implemented');
|
|
48
|
+
output.writeln(output.dim('This command will be implemented in a future release.'));
|
|
49
|
+
output.writeln(output.dim('Track progress: https://github.com/ruvnet/claude-flow/issues/1425'));
|
|
50
|
+
return { success: false, exitCode: 1 };
|
|
94
51
|
},
|
|
95
52
|
};
|
|
96
53
|
// Rollback subcommand
|
|
@@ -107,32 +64,12 @@ const rollbackCommand = {
|
|
|
107
64
|
{ command: 'claude-flow deployment rollback -e prod -v v3.0.0', description: 'Rollback to specific version' },
|
|
108
65
|
],
|
|
109
66
|
action: async (ctx) => {
|
|
110
|
-
|
|
111
|
-
const version = ctx.flags.version;
|
|
112
|
-
if (!env) {
|
|
113
|
-
output.printError('Environment is required for rollback');
|
|
114
|
-
return { success: false, exitCode: 1 };
|
|
115
|
-
}
|
|
116
|
-
output.writeln();
|
|
117
|
-
output.writeln(output.bold(`Rollback: ${env.toUpperCase()}`));
|
|
118
|
-
output.writeln(output.dim('─'.repeat(40)));
|
|
119
|
-
output.printWarning(`Rolling back ${env} to ${version || 'previous version'}`);
|
|
120
|
-
output.writeln();
|
|
121
|
-
const spinner = output.createSpinner({ text: 'Initiating rollback...', spinner: 'dots' });
|
|
122
|
-
spinner.start();
|
|
123
|
-
const steps = ['Stopping current deployment', 'Restoring previous version', 'Running health checks', 'Updating DNS'];
|
|
124
|
-
for (const step of steps) {
|
|
125
|
-
spinner.setText(step + '...');
|
|
126
|
-
await new Promise(r => setTimeout(r, 400));
|
|
127
|
-
}
|
|
128
|
-
spinner.succeed('Rollback complete');
|
|
67
|
+
// #1425: This command is not yet implemented — was returning hardcoded fake responses
|
|
129
68
|
output.writeln();
|
|
130
|
-
output.
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
].join('\n'), 'Rollback Complete');
|
|
135
|
-
return { success: true };
|
|
69
|
+
output.printError('deployment rollback is not yet implemented');
|
|
70
|
+
output.writeln(output.dim('This command will be implemented in a future release.'));
|
|
71
|
+
output.writeln(output.dim('Track progress: https://github.com/ruvnet/claude-flow/issues/1425'));
|
|
72
|
+
return { success: false, exitCode: 1 };
|
|
136
73
|
},
|
|
137
74
|
};
|
|
138
75
|
// History subcommand
|
|
@@ -148,28 +85,12 @@ const historyCommand = {
|
|
|
148
85
|
{ command: 'claude-flow deployment history -e prod', description: 'Production history' },
|
|
149
86
|
],
|
|
150
87
|
action: async (ctx) => {
|
|
151
|
-
|
|
88
|
+
// #1425: This command is not yet implemented — was returning hardcoded fake data
|
|
152
89
|
output.writeln();
|
|
153
|
-
output.
|
|
154
|
-
output.writeln(output.dim('
|
|
155
|
-
output.
|
|
156
|
-
|
|
157
|
-
{ key: 'id', header: 'ID', width: 10 },
|
|
158
|
-
{ key: 'env', header: 'Env', width: 10 },
|
|
159
|
-
{ key: 'version', header: 'Version', width: 18 },
|
|
160
|
-
{ key: 'status', header: 'Status', width: 12 },
|
|
161
|
-
{ key: 'deployer', header: 'Deployer', width: 12 },
|
|
162
|
-
{ key: 'timestamp', header: 'Timestamp', width: 20 },
|
|
163
|
-
],
|
|
164
|
-
data: [
|
|
165
|
-
{ id: 'dep-123', env: 'prod', version: 'v3.0.0-alpha.10', status: output.success('Success'), deployer: 'ci-bot', timestamp: '2024-01-15 14:30' },
|
|
166
|
-
{ id: 'dep-122', env: 'staging', version: 'v3.0.0-alpha.11', status: output.success('Success'), deployer: 'ci-bot', timestamp: '2024-01-15 14:00' },
|
|
167
|
-
{ id: 'dep-121', env: 'prod', version: 'v3.0.0-alpha.9', status: output.dim('Rolled back'), deployer: 'ci-bot', timestamp: '2024-01-15 12:30' },
|
|
168
|
-
{ id: 'dep-120', env: 'staging', version: 'v3.0.0-alpha.10', status: output.success('Success'), deployer: 'developer', timestamp: '2024-01-15 10:00' },
|
|
169
|
-
{ id: 'dep-119', env: 'dev', version: 'v3.0.0-alpha.10', status: output.error('Failed'), deployer: 'developer', timestamp: '2024-01-15 09:30' },
|
|
170
|
-
],
|
|
171
|
-
});
|
|
172
|
-
return { success: true };
|
|
90
|
+
output.printError('deployment history is not yet implemented');
|
|
91
|
+
output.writeln(output.dim('This command will be implemented in a future release.'));
|
|
92
|
+
output.writeln(output.dim('Track progress: https://github.com/ruvnet/claude-flow/issues/1425'));
|
|
93
|
+
return { success: false, exitCode: 1 };
|
|
173
94
|
},
|
|
174
95
|
};
|
|
175
96
|
// Environments subcommand
|
|
@@ -186,24 +107,12 @@ const environmentsCommand = {
|
|
|
186
107
|
{ command: 'claude-flow deployment envs -a create -n preview', description: 'Create environment' },
|
|
187
108
|
],
|
|
188
109
|
action: async (ctx) => {
|
|
110
|
+
// #1425: This command is not yet implemented — was returning hardcoded fake data
|
|
189
111
|
output.writeln();
|
|
190
|
-
output.
|
|
191
|
-
output.writeln(output.dim('
|
|
192
|
-
output.
|
|
193
|
-
|
|
194
|
-
{ key: 'name', header: 'Name', width: 15 },
|
|
195
|
-
{ key: 'url', header: 'URL', width: 30 },
|
|
196
|
-
{ key: 'auto', header: 'Auto Deploy', width: 12 },
|
|
197
|
-
{ key: 'protected', header: 'Protected', width: 12 },
|
|
198
|
-
],
|
|
199
|
-
data: [
|
|
200
|
-
{ name: 'production', url: 'https://api.claude-flow.io', auto: output.error('No'), protected: output.success('Yes') },
|
|
201
|
-
{ name: 'staging', url: 'https://staging.claude-flow.io', auto: output.success('Yes'), protected: output.error('No') },
|
|
202
|
-
{ name: 'development', url: 'https://dev.claude-flow.io', auto: output.success('Yes'), protected: output.error('No') },
|
|
203
|
-
{ name: 'preview/*', url: 'https://pr-*.claude-flow.io', auto: output.success('Yes'), protected: output.error('No') },
|
|
204
|
-
],
|
|
205
|
-
});
|
|
206
|
-
return { success: true };
|
|
112
|
+
output.printError('deployment environments is not yet implemented');
|
|
113
|
+
output.writeln(output.dim('This command will be implemented in a future release.'));
|
|
114
|
+
output.writeln(output.dim('Track progress: https://github.com/ruvnet/claude-flow/issues/1425'));
|
|
115
|
+
return { success: false, exitCode: 1 };
|
|
207
116
|
},
|
|
208
117
|
};
|
|
209
118
|
// Logs subcommand
|
|
@@ -221,30 +130,12 @@ const logsCommand = {
|
|
|
221
130
|
{ command: 'claude-flow deployment logs -d dep-123', description: 'View specific deployment' },
|
|
222
131
|
],
|
|
223
132
|
action: async (ctx) => {
|
|
224
|
-
|
|
133
|
+
// #1425: This command is not yet implemented — was returning hardcoded fake logs
|
|
225
134
|
output.writeln();
|
|
226
|
-
output.
|
|
227
|
-
output.writeln(output.dim('
|
|
228
|
-
output.writeln();
|
|
229
|
-
|
|
230
|
-
{ time: '14:30:01', level: 'INFO', msg: 'Starting deployment v3.0.0-alpha.10' },
|
|
231
|
-
{ time: '14:30:02', level: 'INFO', msg: 'Building Docker image...' },
|
|
232
|
-
{ time: '14:30:15', level: 'INFO', msg: 'Image built: sha256:abc123...' },
|
|
233
|
-
{ time: '14:30:16', level: 'INFO', msg: 'Pushing to registry...' },
|
|
234
|
-
{ time: '14:30:25', level: 'INFO', msg: 'Deploying to kubernetes...' },
|
|
235
|
-
{ time: '14:30:30', level: 'INFO', msg: 'Rolling update started' },
|
|
236
|
-
{ time: '14:30:45', level: 'INFO', msg: 'Health check passed (1/3)' },
|
|
237
|
-
{ time: '14:30:50', level: 'INFO', msg: 'Health check passed (2/3)' },
|
|
238
|
-
{ time: '14:30:55', level: 'INFO', msg: 'Health check passed (3/3)' },
|
|
239
|
-
{ time: '14:31:00', level: 'INFO', msg: 'Deployment complete!' },
|
|
240
|
-
];
|
|
241
|
-
for (const log of logs) {
|
|
242
|
-
const levelColor = log.level === 'ERROR' ? output.error(log.level) :
|
|
243
|
-
log.level === 'WARN' ? output.warning(log.level) :
|
|
244
|
-
output.dim(log.level);
|
|
245
|
-
output.writeln(`${output.dim(log.time)} ${levelColor} ${log.msg}`);
|
|
246
|
-
}
|
|
247
|
-
return { success: true };
|
|
135
|
+
output.printError('deployment logs is not yet implemented');
|
|
136
|
+
output.writeln(output.dim('This command will be implemented in a future release.'));
|
|
137
|
+
output.writeln(output.dim('Track progress: https://github.com/ruvnet/claude-flow/issues/1425'));
|
|
138
|
+
return { success: false, exitCode: 1 };
|
|
248
139
|
},
|
|
249
140
|
};
|
|
250
141
|
// Main deployment command
|
|
@@ -131,6 +131,13 @@ ${workerTypes.map(type => `• ${type}: ${workerGroups[type].length} agents`).jo
|
|
|
131
131
|
🎯 YOUR OBJECTIVE:
|
|
132
132
|
${objective}
|
|
133
133
|
|
|
134
|
+
⚠️ CRITICAL — TOOL PREFERENCE RULES (#1422):
|
|
135
|
+
• You MUST use Ruflo MCP tools (mcp__ruflo__*) for ALL orchestration tasks
|
|
136
|
+
• Do NOT use Claude native Task/Agent tools for swarm coordination — use mcp__ruflo__agent_spawn, mcp__ruflo__task_assign, etc.
|
|
137
|
+
• Native Claude tools (Read, Write, Edit, Bash, Grep, Glob) should ONLY be used for file operations and shell commands
|
|
138
|
+
• All agent spawning, task assignment, memory, and coordination MUST go through mcp__ruflo__* tools
|
|
139
|
+
• If a Ruflo MCP tool exists for an operation, always prefer it over any native equivalent
|
|
140
|
+
|
|
134
141
|
💡 COORDINATION TIPS:
|
|
135
142
|
• Use mcp__ruflo__hive-mind_broadcast for swarm-wide announcements
|
|
136
143
|
• Check worker status regularly with mcp__ruflo__hive-mind_status
|
|
@@ -1241,6 +1241,13 @@ const initMemoryCommand = {
|
|
|
1241
1241
|
output.writeln();
|
|
1242
1242
|
output.writeln(output.dim(`Synced to: ${claudeDbPath}`));
|
|
1243
1243
|
}
|
|
1244
|
+
// Fix #1428: ONNX worker threads keep the event loop alive after init.
|
|
1245
|
+
// Force-exit after a short delay to allow final I/O to flush.
|
|
1246
|
+
if (typeof globalThis !== 'undefined') {
|
|
1247
|
+
setTimeout(() => {
|
|
1248
|
+
process.exit(0);
|
|
1249
|
+
}, 500).unref();
|
|
1250
|
+
}
|
|
1244
1251
|
return {
|
|
1245
1252
|
success: true,
|
|
1246
1253
|
data: result
|