claude-arcade
Version:
Add classic arcade games to your Claude Code workflow with Ctrl+G
89 lines (88 loc) • 3.34 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const child_process_1 = require("child_process");
const terminal_kit_1 = __importDefault(require("terminal-kit"));
const term = terminal_kit_1.default.terminal;
function showMenu() {
console.clear();
console.log('\x1b[36m%s\x1b[0m', '╔════════════════════════════════════════════════╗');
console.log('\x1b[36m%s\x1b[0m', '║ Claude Code + Game Launcher ║');
console.log('\x1b[36m%s\x1b[0m', '╚════════════════════════════════════════════════╝');
console.log('');
console.log('\x1b[32m%s\x1b[0m', 'Choose your activity:');
console.log('');
console.log('\x1b[33m%s\x1b[0m', ' [C] Launch Claude Code (main terminal)');
console.log('\x1b[33m%s\x1b[0m', ' [G] Play Breakout Game (alternate screen)');
console.log('\x1b[31m%s\x1b[0m', ' [Q] Quit');
console.log('');
console.log('\x1b[35m%s\x1b[0m', '→ Press a key to continue...');
console.log('');
term.grabInput(true);
term.once('key', (name) => {
term.grabInput(false);
if (name === 'q' || name === 'Q' || name === 'CTRL_C') {
console.log('');
console.log('\x1b[32m✓ Goodbye!\x1b[0m');
process.exit(0);
}
if (name === 'c' || name === 'C') {
launchClaude();
}
else if (name === 'g' || name === 'G') {
launchGame();
}
else {
showMenu();
}
});
}
function launchClaude() {
console.clear();
console.log('\x1b[32m→ Launching Claude Code...\x1b[0m');
console.log('');
const claude = (0, child_process_1.spawn)('claude', process.argv.slice(2), {
stdio: 'inherit',
shell: true
});
claude.on('error', (err) => {
console.log('');
console.log('\x1b[31m✗ Error launching Claude Code:\x1b[0m', err.message);
console.log('\x1b[33m Make sure Claude Code is installed and "claude" is in your PATH\x1b[0m');
console.log('');
setTimeout(() => showMenu(), 2000);
});
claude.on('close', (code) => {
console.log('');
console.log(`\x1b[32m✓ Claude Code exited (code ${code})\x1b[0m`);
console.log('');
setTimeout(() => showMenu(), 1000);
});
}
function launchGame() {
console.log('\x1b[32m→ Launching game in alternate screen...\x1b[0m');
console.log('');
const game = (0, child_process_1.spawn)('npm', ['run', 'dev'], {
stdio: 'inherit',
shell: true,
cwd: __dirname + '/..'
});
game.on('close', () => {
console.log('');
console.log('\x1b[32m✓ Game exited! Back to launcher.\x1b[0m');
console.log('');
setTimeout(() => showMenu(), 1000);
});
}
// Handle Ctrl+C
process.on('SIGINT', () => {
term.grabInput(false);
console.log('');
console.log('\x1b[32m✓ Goodbye!\x1b[0m');
process.exit(0);
});
// Start
showMenu();