62 lines
1.5 KiB
TypeScript
62 lines
1.5 KiB
TypeScript
import { NextRequest, NextResponse } from 'next/server';
|
|
import { Sandbox } from '@e2b/code-interpreter';
|
|
|
|
// Get active sandbox from global state (in production, use a proper state management solution)
|
|
declare global {
|
|
var activeSandbox: any;
|
|
}
|
|
|
|
export async function POST(request: NextRequest) {
|
|
try {
|
|
const { command } = await request.json();
|
|
|
|
if (!command) {
|
|
return NextResponse.json({
|
|
success: false,
|
|
error: 'Command is required'
|
|
}, { status: 400 });
|
|
}
|
|
|
|
if (!global.activeSandbox) {
|
|
return NextResponse.json({
|
|
success: false,
|
|
error: 'No active sandbox'
|
|
}, { status: 400 });
|
|
}
|
|
|
|
console.log(`[run-command] Executing: ${command}`);
|
|
|
|
const result = await global.activeSandbox.runCode(`
|
|
import subprocess
|
|
import os
|
|
|
|
os.chdir('/home/user/app')
|
|
result = subprocess.run(${JSON.stringify(command.split(' '))},
|
|
capture_output=True,
|
|
text=True,
|
|
shell=False)
|
|
|
|
print("STDOUT:")
|
|
print(result.stdout)
|
|
if result.stderr:
|
|
print("\\nSTDERR:")
|
|
print(result.stderr)
|
|
print(f"\\nReturn code: {result.returncode}")
|
|
`);
|
|
|
|
const output = result.logs.stdout.join('\n');
|
|
|
|
return NextResponse.json({
|
|
success: true,
|
|
output,
|
|
message: 'Command executed successfully'
|
|
});
|
|
|
|
} catch (error) {
|
|
console.error('[run-command] Error:', error);
|
|
return NextResponse.json({
|
|
success: false,
|
|
error: (error as Error).message
|
|
}, { status: 500 });
|
|
}
|
|
} |