UNPKG

aico-claude-code

Version:

Claude Code CLI 的网页用户界面

200 lines (169 loc) 5.9 kB
/** * CLI commands and utilities for Claude Code UI * * Provides additional CLI commands beyond basic server startup */ import { spawn } from 'child_process'; import { readFileSync, existsSync } from 'fs'; import { join, dirname } from 'path'; import { fileURLToPath } from 'url'; const __filename = fileURLToPath(import.meta.url); const __dirname = dirname(__filename); /** * Check system requirements */ export function checkRequirements() { const nodeVersion = process.version; const majorVersion = parseInt(nodeVersion.slice(1).split('.')[0], 10); console.log('🔍 Checking system requirements...'); console.log(` Node.js version: ${nodeVersion}`); if (majorVersion < 18) { console.error('❌ Node.js 18+ is required'); return false; } console.log('✅ Node.js version is compatible'); // Check if required files exist const requiredFiles = [ join(__dirname, '../server/index.js'), join(__dirname, '../package.json') ]; for (const file of requiredFiles) { if (!existsSync(file)) { console.error(`❌ Missing required file: ${file}`); return false; } } console.log('✅ All required files are present'); return true; } /** * Build the application for production */ export function buildApplication() { console.log('🏗️ Building Claude Code UI...'); return new Promise((resolve, reject) => { const buildProcess = spawn('npm', ['run', 'build'], { stdio: 'inherit', cwd: dirname(__dirname) }); buildProcess.on('close', (code) => { if (code === 0) { console.log('✅ Build completed successfully'); resolve(); } else { console.error('❌ Build failed'); reject(new Error(`Build process exited with code ${code}`)); } }); buildProcess.on('error', (error) => { console.error('❌ Failed to start build:', error.message); reject(error); }); }); } /** * Initialize a new configuration file */ export async function initConfig(configPath) { const defaultConfig = { port: 3000, vitePort: 3001, host: '127.0.0.1', debug: false, openBrowser: true, logLevel: 'info' }; const configJson = JSON.stringify(defaultConfig, null, 2); try { const fs = await import('fs'); fs.writeFileSync(configPath, configJson); console.log(`✅ Configuration file created: ${configPath}`); console.log('📝 You can now customize the settings in this file'); } catch (error) { console.error(`❌ Failed to create config file: ${error.message}`); } } /** * Show system information */ export function showSystemInfo() { const packageJson = JSON.parse(readFileSync(join(__dirname, '../package.json'), 'utf8')); console.log('📊 Claude Code UI System Information'); console.log('===================================='); console.log(`Version: ${packageJson.version}`); console.log(`Node.js: ${process.version}`); console.log(`Platform: ${process.platform}`); console.log(`Architecture: ${process.arch}`); console.log(`Working directory: ${process.cwd()}`); console.log(`CLI location: ${__dirname}`); console.log(`Server location: ${join(__dirname, '../server/index.js')}`); console.log(`Frontend build: ${existsSync(join(__dirname, '../dist')) ? 'Available' : 'Not built'}`); } /** * Validate configuration */ export function validateConfig(config) { const errors = []; if (config.port && (config.port < 1 || config.port > 65535)) { errors.push('Invalid port number (must be 1-65535)'); } if (config.vitePort && (config.vitePort < 1 || config.vitePort > 65535)) { errors.push('Invalid Vite port number (must be 1-65535)'); } if (config.logLevel && !['error', 'warn', 'info', 'debug'].includes(config.logLevel)) { errors.push('Invalid log level (must be error, warn, info, or debug)'); } if (errors.length > 0) { console.error('❌ Configuration validation failed:'); errors.forEach(error => console.error(` - ${error}`)); return false; } console.log('✅ Configuration is valid'); return true; } /** * Show help for CLI commands */ export function showExtendedHelp() { console.log(` Claude Code UI - Extended Help ============================== Usage: claude-ui [options] Options: -p, --port <port> Backend server port (default: 3000) --vite-port <port> Frontend development server port (default: 3001) --host <host> Host address to bind to (default: 127.0.0.1) --claude-path <path> Path to claude executable -d, --debug Enable debug mode --no-browser Do not open browser automatically --dev Run in development mode (with hot reload) --prod Run in production mode (built version) --config <path> Path to configuration file --log-level <level> Set log level (error, warn, info, debug) Commands: claude-ui --help Show this help message claude-ui --version Show version information claude-ui --info Show system information claude-ui build Build the application for production claude-ui check Check system requirements claude-ui init Initialize a new configuration file Examples: claude-ui --port 8080 --dev claude-ui --prod --no-browser claude-ui --config ./my-config.json claude-ui build claude-ui check Configuration: The application can be configured via: 1. Command line arguments 2. Environment variables (PORT, VITE_PORT, HOST, DEBUG) 3. Configuration file (JSON format) 4. .env file in the project root Environment Variables: PORT Backend server port (default: 3000) VITE_PORT Frontend development server port (default: 3001) HOST Host address to bind to (default: 127.0.0.1) DEBUG Enable debug mode (true/false/1) OPENAI_API_KEY OpenAI API key for transcription features `); }