← Sandbox SDK / sandbox / api
Сеансы
Создавайте сессии shell внутри песочницы. Каждая сессия сохраняет собственное состояние shell, переменные окружения и рабочий каталог, но при этом использует общую файловую систему и пространство процессов песочницы. Подробнее см. Управление сессиями.
Методы
createSession()
Создаёт новый сеанс оболочки.
const session = await sandbox.createSession(options?: SessionOptions): Promise<ExecutionSession>Параметры:
options(необязательно):id- Пользовательский ID сеанса (создается автоматически, если не указан)env- Переменные окружения для этой сессии:Record<string, string | undefined>cwd- Рабочий каталог (по умолчанию:"/workspace")commandTimeoutMs- Максимальное время в миллисекундах, в течение которого может выполняться любая команда в этой сессии, прежде чем сработает тайм-аут. Отдельные команды могут переопределить это значение с помощьюtimeoutопцию дляexec().
Возвращает: Promise<ExecutionSession> со всеми методами песочницы, привязанными к этой сессии
// Separate workflow environments
const prodSession = await sandbox.createSession({
id: "prod",
env: { NODE_ENV: "production", API_URL: "https://api.example.com" },
cwd: "/workspace/prod",
});
const testSession = await sandbox.createSession({
id: "test",
env: {
NODE_ENV: "test",
API_URL: "http://localhost:3000",
DEBUG_MODE: undefined, // Skipped, not set in this session
},
cwd: "/workspace/test",
});
// Run in parallel
const [prodResult, testResult] = await Promise.all([
prodSession.exec("npm run build"),
testSession.exec("npm run build"),
]);
// Session with a default command timeout
const session = await sandbox.createSession({
commandTimeoutMs: 5000, // 5s timeout for all commands
});
await session.exec("sleep 10"); // Times out after 5s
// Per-command timeout overrides session-level timeout
await session.exec("sleep 10", { timeout: 3000 }); // Times out after 3s// Separate workflow environments
const prodSession = await sandbox.createSession({
id: 'prod',
env: { NODE_ENV: 'production', API_URL: 'https://api.example.com' },
cwd: '/workspace/prod'
});
const testSession = await sandbox.createSession({
id: 'test',
env: {
NODE_ENV: 'test',
API_URL: 'http://localhost:3000',
DEBUG_MODE: undefined // Skipped, not set in this session
},
cwd: '/workspace/test'
});
// Run in parallel
const [prodResult, testResult] = await Promise.all([
prodSession.exec('npm run build'),
testSession.exec('npm run build')
]);
// Session with a default command timeout
const session = await sandbox.createSession({
commandTimeoutMs: 5000 // 5s timeout for all commands
});
await session.exec('sleep 10'); // Times out after 5s
// Per-command timeout overrides session-level timeout
await session.exec('sleep 10', { timeout: 3000 }); // Times out after 3sgetSession()
Извлекает существующую сессию по ID.
const session = await sandbox.getSession(sessionId: string): Promise<ExecutionSession>Параметры:
sessionId- Идентификатор существующей сессии
Возвращает: Promise<ExecutionSession> привязан к указанной сессии
// First request - create a task-specific session
const session = await sandbox.createSession({ id: "build" });
await session.exec("git clone https://github.com/user/repo.git");
await session.exec("cd repo && npm install");
// Second request - resume session (environment and cwd preserved)
const session = await sandbox.getSession("build");
const result = await session.exec("cd repo && npm run build");// First request - create a task-specific session
const session = await sandbox.createSession({ id: 'build' });
await session.exec('git clone https://github.com/user/repo.git');
await session.exec('cd repo && npm install');
// Second request - resume session (environment and cwd preserved)
const session = await sandbox.getSession('build');
const result = await session.exec('cd repo && npm run build');deleteSession()
Удалите сессию и освободите её ресурсы.
const result = await sandbox.deleteSession(sessionId: string): Promise<SessionDeleteResult>Параметры:
sessionId- Идентификатор сессии для удаления (не может быть"default")
Возвращает: Promise<SessionDeleteResult> содержащий:
success- Успешно ли выполнено удалениеsessionId- Идентификатор удалённой сессииtimestamp- Отметка времени удаления
// Create a temporary session for a specific task
const tempSession = await sandbox.createSession({ id: "temp-task" });
try {
await tempSession.exec("npm run heavy-task");
} finally {
// Clean up the session when done
await sandbox.deleteSession("temp-task");
}// Create a temporary session for a specific task
const tempSession = await sandbox.createSession({ id: 'temp-task' });
try {
await tempSession.exec('npm run heavy-task');
} finally {
// Clean up the session when done
await sandbox.deleteSession('temp-task');
}setEnvVars()
Задайте переменные окружения в sandbox.
await sandbox.setEnvVars(envVars: Record<string, string | undefined>): Promise<void>Параметры:
envVars- Пары ключ-значение переменных окружения для установки или отменыstringзначения: задайте переменную окруженияundefinedилиnullзначения: сбросьте переменную окружения
const sandbox = getSandbox(env.Sandbox, "user-123");
// Set environment variables first
await sandbox.setEnvVars({
API_KEY: env.OPENAI_API_KEY,
DATABASE_URL: env.DATABASE_URL,
NODE_ENV: "production",
OLD_TOKEN: undefined, // Unsets OLD_TOKEN if previously set
});
// Now commands can access these variables
await sandbox.exec("python script.py");const sandbox = getSandbox(env.Sandbox, 'user-123');
// Set environment variables first
await sandbox.setEnvVars({
API_KEY: env.OPENAI_API_KEY,
DATABASE_URL: env.DATABASE_URL,
NODE_ENV: 'production',
OLD_TOKEN: undefined // Unsets OLD_TOKEN if previously set
});
// Now commands can access these variables
await sandbox.exec('python script.py');Методы ExecutionSession
ExecutionSession объект содержит все методы песочницы, привязанные к конкретной сессии:
| Категория | Методы |
|---|---|
| Команды | exec(), execStream() |
| Процессы | startProcess(), listProcesses(), killProcess(), killAllProcesses(), getProcessLogs(), streamProcessLogs() |
| Файлы | writeFile(), readFile(), mkdir(), deleteFile(), renameFile(), moveFile(), gitCheckout() |
| Окружение | setEnvVars() |
| Терминал | terminal() |
| Code Interpreter | createCodeContext(), runCode(), listCodeContexts(), deleteCodeContext() |
Дополнительные материалы
- Концепция управления сессиями - Как работают сессии
- Commands API - Выполнение команд