#!/usr/bin/env node /** * CLI Wrapper Script * * This script serves as a wrapper for the Brainy CLI, ensuring that command-line arguments * are properly passed to the CLI when invoked through npm scripts. */ import { spawn, execSync } from 'child_process' import { fileURLToPath } from 'url' import { dirname, join } from 'path' import fs from 'fs' // Get the directory of the current module const __filename = fileURLToPath(import.meta.url) const __dirname = dirname(__filename) // Path to the actual CLI script const cliPath = join(__dirname, 'dist', 'cli.js') // Check if the CLI script exists if (!fs.existsSync(cliPath)) { // Check if we're running in a global installation context const isGlobalInstall = __dirname.includes('node_modules') && !__dirname.includes('node_modules/.') if (isGlobalInstall) { console.error(`Error: CLI script not found at ${cliPath}`) console.error('This is likely because the CLI was not built during package installation.') console.error('Please reinstall the package with:') console.error('npm uninstall -g @soulcraft/brainy') console.error('npm install -g @soulcraft/brainy --legacy-peer-deps') process.exit(1) } else { // In a local development context, try to build the CLI console.log(`CLI script not found at ${cliPath}. Building CLI...`) try { // Run the build:cli script execSync('npm run build:cli', { stdio: 'inherit' }) // Check again if the CLI script exists after building if (!fs.existsSync(cliPath)) { console.error(`Error: Failed to build CLI script at ${cliPath}`) process.exit(1) } console.log('CLI built successfully.') } catch (error) { console.error(`Error building CLI: ${error.message}`) console.error('Make sure you have the necessary dependencies installed.') process.exit(1) } } } // Special handling for version flags if (process.argv.includes('--version') || process.argv.includes('-V')) { // Read version directly from package.json to ensure it's always correct try { const packageJsonPath = join(__dirname, 'package.json') const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8')) console.log(packageJson.version) process.exit(0) } catch (error) { console.error('Error loading version information:', error.message) process.exit(1) } } // Forward all arguments to the CLI script const args = process.argv.slice(2) // Check if npm is passing --force flag // When npm runs with --force, it sets the npm_config_force environment variable if (process.env.npm_config_force === 'true' && args.includes('clear') && !args.includes('--force') && !args.includes('-f')) { args.push('--force') } const cli = spawn('node', [cliPath, ...args], { stdio: 'inherit' }) cli.on('close', (code) => { process.exit(code) })