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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claude-flow",
3
- "version": "3.5.42",
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 (ctx) => {
21
+ action: async (_ctx) => {
22
+ // #1425: This command is not yet implemented — was displaying hardcoded fake claims
22
23
  output.writeln();
23
- output.writeln(output.bold('Claims & Permissions'));
24
- output.writeln(output.dim(''.repeat(70)));
25
- output.printTable({
26
- columns: [
27
- { key: 'claim', header: 'Claim', width: 25 },
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
- const spinner = output.createSpinner({ text: 'Granting claim...', spinner: 'dots' });
206
- spinner.start();
207
- await new Promise(r => setTimeout(r, 400));
208
- spinner.succeed('Claim granted');
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
- const spinner = output.createSpinner({ text: 'Revoking claim...', spinner: 'dots' });
242
- spinner.start();
243
- await new Promise(r => setTimeout(r, 300));
244
- spinner.succeed('Claim revoked');
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 (ctx) => {
261
- const action = ctx.flags.action || 'list';
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.writeln(output.bold('Roles'));
265
- output.writeln(output.dim(''.repeat(60)));
266
- if (action === 'show' && name) {
267
- output.printBox([
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 (ctx) => {
259
+ action: async (_ctx) => {
260
+ // #1425: This command is not yet implemented — was displaying hardcoded fake policies
314
261
  output.writeln();
315
- output.writeln(output.bold('Claim Policies'));
316
- output.writeln(output.dim(''.repeat(60)));
317
- output.printTable({
318
- columns: [
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 (ctx) => {
33
- const sparc = ctx.flags.sparc;
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.printTable({
85
- columns: [
86
- { key: 'setting', header: 'Setting', width: 25 },
87
- { key: 'value', header: 'Value', width: 30 }
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
- output.printInfo(`Setting ${key} = ${value}`);
200
- output.printSuccess('Configuration updated');
201
- return { success: true, data: { key, value } };
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 (ctx) => {
284
- const force = ctx.flags.force;
285
- const section = ctx.flags.section || 'all';
286
- if (!force && ctx.interactive) {
287
- const confirmed = await confirm({
288
- message: `Reset ${section} configuration to defaults?`,
289
- default: false
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 (ctx) => {
322
- const outputPath = ctx.flags.output || './claude-flow.config.export.json';
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.printSuccess('Configuration exported');
335
- return { success: true, data: { path: outputPath, config } };
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
- output.printInfo(`Importing configuration from ${file}...`);
365
- if (merge) {
366
- output.writeln(output.dim(' Merging with existing configuration...'));
367
- }
368
- else {
369
- output.writeln(output.dim(' Replacing existing configuration...'));
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
- const env = ctx.flags.env || 'staging';
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.writeln(output.bold(`Deployment: ${env.toUpperCase()}`));
29
- output.writeln(output.dim(''.repeat(50)));
30
- if (dryRun) {
31
- output.printWarning('DRY RUN - No changes will be made');
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.writeln(output.bold('Deployment Status'));
77
- output.writeln(output.dim(''.repeat(70)));
78
- output.printTable({
79
- columns: [
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
- const env = ctx.flags.env;
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.printBox([
131
- `Environment: ${env}`,
132
- `Rolled back to: ${version || 'v3.0.0-alpha.9'}`,
133
- `Status: ${output.success('Active')}`,
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
- const env = ctx.flags.env;
88
+ // #1425: This command is not yet implemented — was returning hardcoded fake data
152
89
  output.writeln();
153
- output.writeln(output.bold(`Deployment History${env ? `: ${env}` : ''}`));
154
- output.writeln(output.dim(''.repeat(80)));
155
- output.printTable({
156
- columns: [
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.writeln(output.bold('Deployment Environments'));
191
- output.writeln(output.dim(''.repeat(60)));
192
- output.printTable({
193
- columns: [
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
- const env = ctx.flags.env || 'staging';
133
+ // #1425: This command is not yet implemented — was returning hardcoded fake logs
225
134
  output.writeln();
226
- output.writeln(output.bold(`Deployment Logs: ${env}`));
227
- output.writeln(output.dim(''.repeat(60)));
228
- output.writeln();
229
- const logs = [
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