#!/usr/bin/env node
/**
* Claude Flow CLI - Universal Wrapper
* Works in both CommonJS and ES Module projects
*/
// Use dynamic import to work in both CommonJS and ES modules
(async () => {
const { spawn } = await import('child_process');
const { resolve } = await import('path');
const { fileURLToPath } = await import('url');
// Detect if we're running in ES module context
let __dirname;
try {
// Check if import.meta is available (ES modules)
if (typeof import.meta !== 'undefined' && import.meta.url) {
const __filename = fileURLToPath(import.meta.url);
__dirname = resolve(__filename, '..');
} else {
// Fallback for CommonJS
__dirname = process.cwd();
}
} catch {
// Fallback for CommonJS
__dirname = process.cwd();
}
// Try multiple strategies to find claude-flow
const strategies = [
// 1. Local node_modules
async () => {
try {
const localPath = resolve(process.cwd(), 'node_modules/.bin/claude-flow');
const { existsSync } = await import('fs');
if (existsSync(localPath)) {
return spawn(localPath, process.argv.slice(2), { stdio: 'inherit' });
}
} catch {}
},
// 2. Parent node_modules (monorepo)
async () => {
try {
const parentPath = resolve(process.cwd(), '../node_modules/.bin/claude-flow');
const { existsSync } = await import('fs');
if (existsSync(parentPath)) {
return spawn(parentPath, process.argv.slice(2), { stdio: 'inherit' });
}
} catch {}
},
// 3. NPX with latest alpha version (prioritized over global)
async () => {
return spawn('npx', ['claude-flow@2.0.0-alpha.27', ...process.argv.slice(2)], { stdio: 'inherit' });
}
];
// Try each strategy
for (const strategy of strategies) {
try {
const child = await strategy();
if (child) {
child.on('exit', (code) => process.exit(code || 0));
child.on('error', (err) => {
if (err.code !== 'ENOENT') {
console.error('Error:', err);
process.exit(1);
}
});
return;
}
} catch {}
}
console.error('Could not find claude-flow. Please install it with: npm install claude-flow');
process.exit(1);
})();