const { spawn } = require('child_process'); const readline = require('readline'); // Spawn code-server process with given arguments const codeServer = spawn('code-server', ['--bind-addr', '127.0.0.1:5900', '--auth', 'none'], { stdio: ['pipe', 'pipe', 'pipe'] }); // Print stdout from code-server codeServer.stdout.on('data', (data) => { process.stdout.write(`[code-server stdout]: ${data}`); }); // Print stderr from code-server codeServer.stderr.on('data', (data) => { process.stderr.write(`[code-server stderr]: ${data}`); }); // Handle process exit codeServer.on('close', (code) => { console.log(`code-server exited with code ${code}`); process.exit(code); }); // Handle errors codeServer.on('error', (err) => { console.error(`Failed to start code-server: ${err}`); }); // Setup readline interface for user input from terminal const rl = readline.createInterface({ input: process.stdin, output: process.stdout, prompt: 'Enter your next terminal command here> ' }); // Prompt user for input rl.prompt(); // On user input, send the command to the shell to execute rl.on('line', (line) => { const trimmed = line.trim(); if (trimmed.toLowerCase() === 'exit' || trimmed.toLowerCase() === 'quit') { console.log('Exiting...'); codeServer.kill(); rl.close(); return; } // Spawn a shell to execute the user command const shell = spawn(trimmed, { shell: true, stdio: 'inherit' }); shell.on('exit', (code) => { console.log(`Command "${trimmed}" exited with code ${code}`); rl.prompt(); }); shell.on('error', (err) => { console.error(`Failed to execute command "${trimmed}": ${err}`); rl.prompt(); }); }); // On readline close rl.on('close', () => { console.log('Input closed.'); codeServer.kill(); process.exit(0); });