import { NextResponse } from 'next/server'; declare global { var activeSandbox: any; } export async function GET() { try { if (!global.activeSandbox) { return NextResponse.json({ success: false, error: 'No active sandbox' }, { status: 400 }); } console.log('[sandbox-logs] Fetching Vite dev server logs...'); // Check if Vite processes are running const psResult = await global.activeSandbox.runCommand({ cmd: 'ps', args: ['aux'] }); let viteRunning = false; const logContent: string[] = []; if (psResult.exitCode === 0) { const psOutput = await psResult.stdout(); const viteProcesses = psOutput.split('\n').filter((line: string) => line.toLowerCase().includes('vite') || line.toLowerCase().includes('npm run dev') ); viteRunning = viteProcesses.length > 0; if (viteRunning) { logContent.push("Vite is running"); logContent.push(...viteProcesses.slice(0, 3)); // Show first 3 processes } else { logContent.push("Vite process not found"); } } // Try to read any recent log files try { const findResult = await global.activeSandbox.runCommand({ cmd: 'find', args: ['/tmp', '-name', '*vite*', '-name', '*.log', '-type', 'f'] }); if (findResult.exitCode === 0) { const logFiles = (await findResult.stdout()).split('\n').filter((f: string) => f.trim()); for (const logFile of logFiles.slice(0, 2)) { try { const catResult = await global.activeSandbox.runCommand({ cmd: 'tail', args: ['-n', '10', logFile] }); if (catResult.exitCode === 0) { const logFileContent = await catResult.stdout(); logContent.push(`--- ${logFile} ---`); logContent.push(logFileContent); } } catch { // Skip if can't read log file } } } } catch { // No log files found, that's OK } return NextResponse.json({ success: true, hasErrors: false, logs: logContent, status: viteRunning ? 'running' : 'stopped' }); } catch (error) { console.error('[sandbox-logs] Error:', error); return NextResponse.json({ success: false, error: (error as Error).message }, { status: 500 }); } }