UNPKG

@sunpix/claude-code-web

Version:

A web-based interface for interacting with Claude Code CLI

75 lines (61 loc) • 2.21 kB
#!/usr/bin/env node import { spawn } from 'child_process'; import { dirname, join } from 'path'; import { fileURLToPath } from 'url'; import { access, readFile } from 'fs/promises'; const __dirname = dirname(fileURLToPath(import.meta.url)); const projectRoot = join(__dirname, '..'); async function startServer() { // Check if .output directory exists (production build) const outputDir = join(projectRoot, '.output'); try { await access(outputDir); // Read and display version from package.json const packagePath = join(projectRoot, 'package.json'); const packageJson = JSON.parse(await readFile(packagePath, 'utf8')); console.log(`šŸš€ Starting claude-code-web v${packageJson.version}`); let host = process.env.HOST || '127.0.0.1'; let port = process.env.PORT || '3000'; let suffix = '' // Show APP_BASE_URL if set if (process.env.APP_BASE_URL) { suffix = process.env.APP_BASE_URL } console.log(`šŸ“” Server: http://${host}:${port}${suffix}`); console.log('šŸ“¦ Node version:', process.version); // Start the production server const server = spawn('node', [join(outputDir, 'server', 'index.mjs')], { stdio: 'inherit', cwd: projectRoot, env: { ...process.env, NODE_ENV: 'production', NUXT_APP_BASE_URL: process.env.APP_BASE_URL, PORT: process.env.PORT || '3000', HOST: process.env.HOST || '0.0.0.0' } }); server.on('error', (err) => { console.error('āŒ Failed to start server:', err); process.exit(1); }); server.on('exit', (code) => { process.exit(code || 0); }); // Increase max listeners to prevent warnings process.setMaxListeners(20); // Handle graceful shutdown (use once to prevent duplicate listeners) process.once('SIGINT', () => { console.log('\nšŸ›‘ Shutting down Claude Code Web...'); server.kill('SIGINT'); }); process.once('SIGTERM', () => { console.log('\nšŸ›‘ Shutting down Claude Code Web...'); server.kill('SIGTERM'); }); } catch (error) { console.error('āŒ Error starting server:', error) process.exit(1); } } startServer();