claude-flow 2.5.0-alpha.136 → 2.5.0-alpha.138

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/bin/claude-flow CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/bin/sh
2
2
  # Claude-Flow Smart Dispatcher - Detects and uses the best available runtime
3
3
 
4
- VERSION="2.5.0-alpha.136"
4
+ VERSION="2.5.0-alpha.138"
5
5
 
6
6
  # Determine the correct path based on how the script is invoked
7
7
  if [ -L "$0" ]; then
@@ -1,13 +1,47 @@
1
- #!/usr/bin/env -S deno run --allow-all
2
- import { promises as fs } from 'node:fs';
1
+ #!/usr/bin/env node
3
2
  import { executeCommand, hasCommand, showCommandHelp, listCommands } from './command-registry.js';
4
3
  import { parseFlags } from './utils.js';
4
+ import { args, cwd, isMainModule, exit, readTextFile, writeTextFile, mkdirAsync, errors } from './node-compat.js';
5
+ import { spawn } from 'child_process';
6
+ import process from 'process';
7
+ import readline from 'readline';
8
+ import { getMainHelp, getCommandHelp, getStandardizedCommandHelp } from './help-text.js';
5
9
  import { VERSION } from '../core/version.js';
6
- function printHelp() {
10
+ const LEGACY_AGENT_MAPPING = {
11
+ analyst: 'code-analyzer',
12
+ coordinator: 'task-orchestrator',
13
+ optimizer: 'perf-analyzer',
14
+ documenter: 'api-docs',
15
+ monitor: 'performance-benchmarker',
16
+ specialist: 'system-architect',
17
+ architect: 'system-architect'
18
+ };
19
+ function resolveLegacyAgentType(legacyType) {
20
+ return LEGACY_AGENT_MAPPING[legacyType] || legacyType;
21
+ }
22
+ function printHelp(plain = false) {
23
+ console.log(getMainHelp(plain));
24
+ }
25
+ function printCommandHelp(command) {
26
+ const standardCommands = [
27
+ 'agent',
28
+ 'sparc',
29
+ 'memory'
30
+ ];
31
+ if (standardCommands.includes(command)) {
32
+ const help = getStandardizedCommandHelp(command);
33
+ console.log(help);
34
+ } else {
35
+ const help = getCommandHelp(command);
36
+ console.log(help);
37
+ }
38
+ }
39
+ function printLegacyHelp() {
7
40
  console.log(`
8
41
  🌊 Claude-Flow v${VERSION} - Enterprise-Grade AI Agent Orchestration Platform
9
42
 
10
- šŸŽÆ ENTERPRISE FEATURES: Complete ruv-swarm integration with 27 MCP tools, neural networking, and production-ready infrastructure
43
+ šŸŽÆ ENTERPRISE FEATURES: Complete ruv-swarm integration with 90+ MCP tools, neural networking, and production-ready infrastructure
44
+ ⚔ ALPHA 85: Advanced automation capabilities & stream-JSON chaining for multi-agent pipelines
11
45
 
12
46
  USAGE:
13
47
  claude-flow <command> [options]
@@ -141,8 +175,8 @@ function printSuccess(message) {
141
175
  function printWarning(message) {
142
176
  console.warn(`āš ļø Warning: ${message}`);
143
177
  }
144
- function showHelpWithCommands() {
145
- printHelp();
178
+ function showHelpWithCommands(plain = false) {
179
+ printHelp(plain);
146
180
  console.log('\nRegistered Commands:');
147
181
  const commands = listCommands();
148
182
  for (const command of commands){
@@ -151,14 +185,58 @@ function showHelpWithCommands() {
151
185
  console.log('\nUse "claude-flow help <command>" for detailed usage information');
152
186
  }
153
187
  async function main() {
154
- const args = Deno.args;
155
188
  if (args.length === 0) {
156
- printHelp();
189
+ printHelp(usePlainHelp);
157
190
  return;
158
191
  }
159
192
  const command = args[0];
160
193
  const { flags, args: parsedArgs } = parseFlags(args.slice(1));
194
+ const usePlainHelp = args.includes('--plain');
195
+ let enhancedFlags = flags;
196
+ try {
197
+ const { detectExecutionEnvironment, applySmartDefaults } = await import('./utils/environment-detector.js');
198
+ enhancedFlags = applySmartDefaults(flags);
199
+ enhancedFlags._environment = detectExecutionEnvironment({
200
+ skipWarnings: true
201
+ });
202
+ } catch (e) {
203
+ enhancedFlags = flags;
204
+ }
205
+ if (command !== 'help' && command !== '--help' && command !== '-h' && (enhancedFlags.help || enhancedFlags.h)) {
206
+ const detailedHelp = getCommandHelp(command);
207
+ if (detailedHelp && !detailedHelp.includes('Help not available')) {
208
+ printCommandHelp(command);
209
+ } else if (hasCommand(command)) {
210
+ showCommandHelp(command);
211
+ } else {
212
+ printError(`Unknown command: ${command}`);
213
+ console.log('\nRun "claude-flow --help" to see available commands.');
214
+ }
215
+ return;
216
+ }
161
217
  switch(command){
218
+ case 'env-check':
219
+ case 'environment':
220
+ if (enhancedFlags._environment) {
221
+ const env = enhancedFlags._environment;
222
+ console.log(`\nšŸ–„ļø Environment Detection Results:`);
223
+ console.log(` Terminal: ${env.terminalType}`);
224
+ console.log(` Interactive: ${env.isInteractive ? 'Yes' : 'No'}`);
225
+ console.log(` TTY Support: ${env.supportsRawMode ? 'Yes' : 'No'}`);
226
+ console.log(` Detected: ${env.isVSCode ? 'VS Code' : env.isCI ? 'CI/CD' : env.isDocker ? 'Docker' : env.isSSH ? 'SSH' : 'Standard Terminal'}`);
227
+ if (env.recommendedFlags.length > 0) {
228
+ console.log(`\nšŸ’” Recommended flags:`);
229
+ console.log(` ${env.recommendedFlags.join(' ')}`);
230
+ }
231
+ if (enhancedFlags.appliedDefaults && enhancedFlags.appliedDefaults.length > 0) {
232
+ console.log(`\nāœ… Auto-applied:`);
233
+ console.log(` ${enhancedFlags.appliedDefaults.join(' ')}`);
234
+ }
235
+ console.log();
236
+ } else {
237
+ console.log('Environment detection not available');
238
+ }
239
+ return;
162
240
  case 'version':
163
241
  case '--version':
164
242
  case '-v':
@@ -168,9 +246,14 @@ async function main() {
168
246
  case '--help':
169
247
  case '-h':
170
248
  if (parsedArgs.length > 0) {
171
- showCommandHelp(parsedArgs[0]);
249
+ const detailedHelp = getCommandHelp(parsedArgs[0]);
250
+ if (detailedHelp && !detailedHelp.includes('Help not available')) {
251
+ printCommandHelp(parsedArgs[0]);
252
+ } else {
253
+ showCommandHelp(parsedArgs[0]);
254
+ }
172
255
  } else {
173
- showHelpWithCommands();
256
+ printHelp(usePlainHelp);
174
257
  }
175
258
  return;
176
259
  }
@@ -180,6 +263,7 @@ async function main() {
180
263
  return;
181
264
  } catch (err) {
182
265
  printError(err.message);
266
+ console.log(`\nRun "claude-flow ${command} --help" for usage information.`);
183
267
  return;
184
268
  }
185
269
  }
@@ -199,11 +283,12 @@ async function main() {
199
283
  console.log('šŸ“Š Real-time monitoring would display here');
200
284
  break;
201
285
  case 'spawn':
202
- const spawnType = subArgs[0] || 'general';
286
+ const rawSpawnType = subArgs[0] || 'general';
287
+ const spawnType = resolveLegacyAgentType(rawSpawnType);
203
288
  const spawnName = flags.name || `agent-${Date.now()}`;
204
289
  printSuccess(`Spawning ${spawnType} agent: ${spawnName}`);
205
290
  console.log('šŸ¤– Agent would be created with the following configuration:');
206
- console.log(` Type: ${spawnType}`);
291
+ console.log(` Type: ${spawnType}${rawSpawnType !== spawnType ? ` (resolved from: ${rawSpawnType})` : ''}`);
207
292
  console.log(` Name: ${spawnName}`);
208
293
  console.log(' Capabilities: Research, Analysis, Code Generation');
209
294
  console.log(' Status: Ready');
@@ -228,7 +313,7 @@ async function main() {
228
313
  console.log(' • Max Pool Size: 10');
229
314
  console.log(' • Idle Timeout: 5 minutes');
230
315
  console.log(' • Shell: /bin/bash');
231
- console.log(' • Working Directory: ' + process.cwd());
316
+ console.log(' • Working Directory: ' + cwd());
232
317
  console.log(' Performance:');
233
318
  console.log(' • Average Response Time: N/A');
234
319
  console.log(' • Terminal Creation Time: N/A');
@@ -277,7 +362,7 @@ async function main() {
277
362
  const terminalConfig = {
278
363
  name: nameIndex >= 0 ? subArgs[nameIndex + 1] : 'terminal-' + Date.now(),
279
364
  shell: shellIndex >= 0 ? subArgs[shellIndex + 1] : 'bash',
280
- workingDirectory: wdIndex >= 0 ? subArgs[wdIndex + 1] : process.cwd(),
365
+ workingDirectory: wdIndex >= 0 ? subArgs[wdIndex + 1] : cwd(),
281
366
  env: envIndex >= 0 ? subArgs[envIndex + 1] : '',
282
367
  persistent: persistentIndex >= 0
283
368
  };
@@ -1234,10 +1319,9 @@ ${flags1.mode === 'full' || !flags1.mode ? `Full-stack development covering all
1234
1319
  console.log('Debug - Executing command:');
1235
1320
  console.log(`claude ${claudeArgs.map((arg)=>arg.includes(' ') || arg.includes('\n') ? `"${arg}"` : arg).join(' ')}`);
1236
1321
  }
1237
- const command = new Deno.Command('claude', {
1238
- args: claudeArgs,
1322
+ const child = spawn('claude', claudeArgs, {
1239
1323
  env: {
1240
- ...Deno.env.toObject(),
1324
+ ...process.env,
1241
1325
  CLAUDE_INSTANCE_ID: instanceId,
1242
1326
  CLAUDE_FLOW_MODE: flags1.mode || 'full',
1243
1327
  CLAUDE_FLOW_COVERAGE: (flags1.coverage || 80).toString(),
@@ -1247,17 +1331,18 @@ ${flags1.mode === 'full' || !flags1.mode ? `Full-stack development covering all
1247
1331
  CLAUDE_FLOW_COORDINATION_ENABLED: flags1.parallel ? 'true' : 'false',
1248
1332
  CLAUDE_FLOW_FEATURES: 'memory,coordination,swarm'
1249
1333
  },
1250
- stdin: 'inherit',
1251
- stdout: 'inherit',
1252
- stderr: 'inherit'
1334
+ stdio: 'inherit'
1335
+ });
1336
+ await new Promise((resolve)=>{
1337
+ child.on('exit', (code)=>{
1338
+ if (code === 0) {
1339
+ printSuccess(`Claude instance ${instanceId} completed successfully`);
1340
+ } else {
1341
+ printError(`Claude instance ${instanceId} exited with code ${code}`);
1342
+ }
1343
+ resolve();
1344
+ });
1253
1345
  });
1254
- const child = command.spawn();
1255
- const status = await child.status;
1256
- if (status.success) {
1257
- printSuccess(`Claude instance ${instanceId} completed successfully`);
1258
- } else {
1259
- printError(`Claude instance ${instanceId} exited with code ${status.code}`);
1260
- }
1261
1346
  } catch (err) {
1262
1347
  printError(`Failed to spawn Claude: ${err.message}`);
1263
1348
  console.log('Make sure you have the Claude CLI installed.');
@@ -1810,7 +1895,7 @@ ${flags1.mode === 'full' || !flags1.mode ? `Full-stack development covering all
1810
1895
  console.log('\nDid you mean:');
1811
1896
  suggestions.forEach((cmd)=>console.log(` claude-flow ${cmd}`));
1812
1897
  }
1813
- process.exit(1);
1898
+ exit(1);
1814
1899
  }
1815
1900
  }
1816
1901
  async function startRepl() {
@@ -1888,7 +1973,7 @@ Shortcuts:
1888
1973
  },
1889
1974
  config: async (key)=>{
1890
1975
  try {
1891
- const config = JSON.parse(await fs.readFile('claude-flow.config.json', 'utf-8'));
1976
+ const config = JSON.parse(await readTextFile('claude-flow.config.json'));
1892
1977
  if (key) {
1893
1978
  const keys = key.split('.');
1894
1979
  let value = config;
@@ -1916,21 +2001,25 @@ Shortcuts:
1916
2001
  if (trimmed.startsWith('!')) {
1917
2002
  const shellCmd = trimmed.substring(1);
1918
2003
  try {
1919
- const command = new Deno.Command('sh', {
1920
- args: [
2004
+ await new Promise((resolve)=>{
2005
+ const proc = spawn('sh', [
1921
2006
  '-c',
1922
2007
  shellCmd
1923
- ],
1924
- stdout: 'piped',
1925
- stderr: 'piped'
2008
+ ], {
2009
+ stdio: [
2010
+ 'inherit',
2011
+ 'pipe',
2012
+ 'pipe'
2013
+ ]
2014
+ });
2015
+ proc.stdout.on('data', (data)=>{
2016
+ console.log(data.toString());
2017
+ });
2018
+ proc.stderr.on('data', (data)=>{
2019
+ console.error(data.toString());
2020
+ });
2021
+ proc.on('exit', resolve);
1926
2022
  });
1927
- const { stdout, stderr } = await command.output();
1928
- if (stdout.length > 0) {
1929
- console.log(new TextDecoder().decode(stdout));
1930
- }
1931
- if (stderr.length > 0) {
1932
- console.error(new TextDecoder().decode(stderr));
1933
- }
1934
2023
  } catch (err) {
1935
2024
  console.error(`Shell error: ${err.message}`);
1936
2025
  }
@@ -1950,7 +2039,7 @@ Shortcuts:
1950
2039
  const parts = trimmed.split(' ');
1951
2040
  const command = parts[0];
1952
2041
  const args = parts.slice(1);
1953
- if (command in replCommands) {
2042
+ if (replCommands[command]) {
1954
2043
  await replCommands[command](...args);
1955
2044
  return true;
1956
2045
  }
@@ -1971,7 +2060,8 @@ Shortcuts:
1971
2060
  const subCmd = args[0];
1972
2061
  switch(subCmd){
1973
2062
  case 'spawn':
1974
- const type = args[1] || 'researcher';
2063
+ const rawType = args[1] || 'researcher';
2064
+ const type = resolveLegacyAgentType(rawType);
1975
2065
  const name = args[2] || `agent-${Date.now()}`;
1976
2066
  const agent = {
1977
2067
  id: `agent-${Date.now()}`,
@@ -2176,18 +2266,33 @@ Shortcuts:
2176
2266
  console.log('Terminal commands: create, list, exec, attach, detach');
2177
2267
  }
2178
2268
  }
2179
- const decoder = new TextDecoder();
2180
- const encoder = new TextEncoder();
2181
- while(true){
2182
- const prompt = replState.currentSession ? `claude-flow:${replState.currentSession}> ` : 'claude-flow> ';
2183
- await Deno.stdout.write(encoder.encode(prompt));
2184
- const buf = new Uint8Array(1024);
2185
- const n = await Deno.stdin.read(buf);
2186
- if (n === null) break;
2187
- const input = decoder.decode(buf.subarray(0, n)).trim();
2188
- const shouldContinue = await processReplCommand(input);
2189
- if (!shouldContinue) break;
2269
+ const rl = readline.createInterface({
2270
+ input: process.stdin,
2271
+ output: process.stdout
2272
+ });
2273
+ function updatePrompt() {
2274
+ rl.setPrompt(replState.currentSession ? `claude-flow:${replState.currentSession}> ` : 'claude-flow> ');
2190
2275
  }
2276
+ updatePrompt();
2277
+ rl.prompt();
2278
+ rl.on('line', async (input)=>{
2279
+ input = input.trim();
2280
+ const shouldContinue = await processReplCommand(input);
2281
+ if (!shouldContinue) {
2282
+ rl.close();
2283
+ } else {
2284
+ updatePrompt();
2285
+ rl.prompt();
2286
+ }
2287
+ });
2288
+ rl.on('SIGINT', ()=>{
2289
+ console.log('\nExiting Claude-Flow...');
2290
+ rl.close();
2291
+ process.exit(0);
2292
+ });
2293
+ return new Promise((resolve)=>{
2294
+ rl.on('close', resolve);
2295
+ });
2191
2296
  }
2192
2297
  function createMinimalClaudeMd() {
2193
2298
  return `# Claude Code Integration
@@ -2504,30 +2609,30 @@ async function createSparcStructureManually() {
2504
2609
  ];
2505
2610
  for (const dir of rooDirectories){
2506
2611
  try {
2507
- await Deno.mkdir(dir, {
2612
+ await mkdirAsync(dir, {
2508
2613
  recursive: true
2509
2614
  });
2510
2615
  console.log(` āœ“ Created ${dir}/`);
2511
2616
  } catch (err) {
2512
- if (!(err instanceof Deno.errors.AlreadyExists)) {
2617
+ if (!(err instanceof errors.AlreadyExists)) {
2513
2618
  throw err;
2514
2619
  }
2515
2620
  }
2516
2621
  }
2517
2622
  let roomodesContent;
2518
2623
  try {
2519
- roomodesContent = await fs.readFile('.roomodes');
2624
+ roomodesContent = await readTextFile('.roomodes');
2520
2625
  console.log(' āœ“ Using existing .roomodes configuration');
2521
2626
  } catch {
2522
2627
  roomodesContent = createBasicRoomodesConfig();
2523
- await fs.writeFile('.roomodes', roomodesContent);
2628
+ await writeTextFile('.roomodes', roomodesContent);
2524
2629
  console.log(' āœ“ Created .roomodes configuration');
2525
2630
  }
2526
2631
  const basicWorkflow = createBasicSparcWorkflow();
2527
- await fs.writeFile('.roo/workflows/basic-tdd.json', basicWorkflow);
2632
+ await writeTextFile('.roo/workflows/basic-tdd.json', basicWorkflow);
2528
2633
  console.log(' āœ“ Created .roo/workflows/basic-tdd.json');
2529
2634
  const rooReadme = createRooReadme();
2530
- await fs.writeFile('.roo/README.md', rooReadme);
2635
+ await writeTextFile('.roo/README.md', rooReadme);
2531
2636
  console.log(' āœ“ Created .roo/README.md');
2532
2637
  console.log(' āœ… Basic SPARC structure created successfully');
2533
2638
  } catch (err) {
@@ -2955,134 +3060,6 @@ This SPARC-enabled project follows a systematic development approach:
2955
3060
  - Document architectural decisions in memory for future reference
2956
3061
  - Regular security reviews for any authentication or data handling code
2957
3062
 
2958
- For more information about SPARC methodology, see: https://github.com/ruvnet/claude-code-flow/docs/sparc.md
2959
- `;
2960
- }
2961
- if (import.meta.url === `file://${process.argv[1]}`) {
2962
- await main();
2963
- }
2964
-
2965
- //# sourceMappingURL=simple-cli.js.mapsign choices"
2966
-
2967
- # Store test results and coverage
2968
- npx claude-flow memory store test_coverage "Authentication module: 95% coverage, all tests passing"
2969
-
2970
- # Query previous work
2971
- npx claude-flow memory query auth_implementation
2972
-
2973
- # Export project memory
2974
- npx claude-flow memory export project_backup.json
2975
- \`\`\`
2976
-
2977
- ### Memory Namespaces
2978
- - **\`spec\`**: Requirements and specifications
2979
- - **\`arch\`**: Architecture and design decisions
2980
- - **\`impl\`**: Implementation notes and code patterns
2981
- - **\`test\`**: Test results and coverage reports
2982
- - **\`debug\`**: Bug reports and resolution notes
2983
-
2984
- ## Workflow Examples
2985
-
2986
- ### Feature Development Workflow
2987
- \`\`\`bash
2988
- # 1. Start with specification
2989
- npx claude-flow sparc run spec-pseudocode "User profile management feature"
2990
-
2991
- # 2. Design architecture
2992
- npx claude-flow sparc run architect "Profile service architecture with data validation"
2993
-
2994
- # 3. Implement with TDD
2995
- npx claude-flow sparc tdd "user profile CRUD operations"
2996
-
2997
- # 4. Security review
2998
- npx claude-flow sparc run security-review "profile data access and validation"
2999
-
3000
- # 5. Integration testing
3001
- npx claude-flow sparc run integration "profile service with authentication system"
3002
-
3003
- # 6. Documentation
3004
- npx claude-flow sparc run docs-writer "profile service API documentation"
3005
- \`\`\`
3006
-
3007
- ### Bug Fix Workflow
3008
- \`\`\`bash
3009
- # 1. Debug and analyze
3010
- npx claude-flow sparc run debug "authentication token expiration issue"
3011
-
3012
- # 2. Write regression tests
3013
- npx claude-flow sparc run tdd "token refresh mechanism tests"
3014
-
3015
- # 3. Implement fix
3016
- npx claude-flow sparc run code "fix token refresh in authentication service"
3017
-
3018
- # 4. Security review
3019
- npx claude-flow sparc run security-review "token handling security implications"
3020
- \`\`\`
3021
-
3022
- ## Configuration Files
3023
-
3024
- ### SPARC Configuration
3025
- - **\`.roomodes\`**: SPARC mode definitions and configurations
3026
- - **\`.roo/\`**: Templates, workflows, and mode-specific rules
3027
-
3028
- ### Claude-Flow Configuration
3029
- - **\`memory/\`**: Persistent memory and session data
3030
- - **\`coordination/\`**: Multi-agent coordination settings
3031
-
3032
- ## Git Workflow Integration
3033
-
3034
- ### Commit Strategy with SPARC
3035
- - **Specification commits**: After completing requirements analysis
3036
- - **Architecture commits**: After design phase completion
3037
- - **TDD commits**: After each Red-Green-Refactor cycle
3038
- - **Integration commits**: After successful component integration
3039
- - **Documentation commits**: After completing documentation updates
3040
-
3041
- ### Branch Strategy
3042
- - **\`feature/sparc-<feature-name>\`**: Feature development with SPARC methodology
3043
- - **\`hotfix/sparc-<issue>\`**: Bug fixes using SPARC debugging workflow
3044
- - **\`refactor/sparc-<component>\`**: Refactoring using optimization mode
3045
-
3046
- ## Troubleshooting
3047
-
3048
- ### Common SPARC Issues
3049
- - **Mode not found**: Check \`.roomodes\` file exists and is valid JSON
3050
- - **Memory persistence**: Ensure \`memory/\` directory has write permissions
3051
- - **Tool access**: Verify required tools are available for the selected mode
3052
- - **Namespace conflicts**: Use unique memory namespaces for different features
3053
-
3054
- ### Debug Commands
3055
- \`\`\`bash
3056
- # Check SPARC configuration
3057
- npx claude-flow sparc modes
3058
-
3059
- # Verify memory system
3060
- npx claude-flow memory stats
3061
-
3062
- # Check system status
3063
- npx claude-flow status
3064
-
3065
- # View detailed mode information
3066
- npx claude-flow sparc info <mode-name>
3067
- \`\`\`
3068
-
3069
- ## Project Architecture
3070
-
3071
- This SPARC-enabled project follows a systematic development approach:
3072
- - **Clear separation of concerns** through modular design
3073
- - **Test-driven development** ensuring reliability and maintainability
3074
- - **Iterative refinement** for continuous improvement
3075
- - **Comprehensive documentation** for team collaboration
3076
- - **AI-assisted development** through specialized SPARC modes
3077
-
3078
- ## Important Notes
3079
-
3080
- - Always run tests before committing (\`npm run test\`)
3081
- - Use SPARC memory system to maintain context across sessions
3082
- - Follow the Red-Green-Refactor cycle during TDD phases
3083
- - Document architectural decisions in memory for future reference
3084
- - Regular security reviews for any authentication or data handling code
3085
-
3086
3063
  For more information about SPARC methodology, see: https://github.com/ruvnet/claude-code-flow/docs/sparc.md
3087
3064
  `;
3088
3065
  }