| const { spawn } = require('child_process'); |
| const readline = require('readline'); |
|
|
| |
| const codeServer = spawn('code-server', ['--bind-addr', '127.0.0.1:5900', '--auth', 'none'], { |
| stdio: ['pipe', 'pipe', 'pipe'] |
| }); |
|
|
| |
| codeServer.stdout.on('data', (data) => { |
| process.stdout.write(`[code-server stdout]: ${data}`); |
| }); |
|
|
| |
| codeServer.stderr.on('data', (data) => { |
| process.stderr.write(`[code-server stderr]: ${data}`); |
| }); |
|
|
| |
| codeServer.on('close', (code) => { |
| console.log(`code-server exited with code ${code}`); |
| process.exit(code); |
| }); |
|
|
| |
| codeServer.on('error', (err) => { |
| console.error(`Failed to start code-server: ${err}`); |
| }); |
|
|
| |
| const rl = readline.createInterface({ |
| input: process.stdin, |
| output: process.stdout, |
| prompt: 'Enter your next terminal command here> ' |
| }); |
|
|
| |
| rl.prompt(); |
|
|
| |
| rl.on('line', (line) => { |
| const trimmed = line.trim(); |
| if (trimmed.toLowerCase() === 'exit' || trimmed.toLowerCase() === 'quit') { |
| console.log('Exiting...'); |
| codeServer.kill(); |
| rl.close(); |
| return; |
| } |
|
|
| |
| 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(); |
| }); |
| }); |
|
|
| |
| rl.on('close', () => { |
| console.log('Input closed.'); |
| codeServer.kill(); |
| process.exit(0); |
| }); |