rl-rock 1.2.7 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/types/codes.ts","../src/types/requests.ts","../src/types/responses.ts","../src/common/constants.ts","../src/common/exceptions.ts","../src/utils/case.ts","../src/utils/http.ts","../src/utils/retry.ts","../src/utils/system.ts","../src/env_vars.ts","../src/logger.ts","../src/utils/deprecated.ts","../src/envhub/schema.ts","../src/envhub/client.ts","../src/envs/rock_env.ts","../src/envs/registration.ts","../src/sandbox/config.ts","../src/sandbox/deploy.ts","../src/utils/shell.ts","../src/sandbox/file_system.ts","../src/sandbox/network.ts","../src/sandbox/process.ts","../src/sandbox/remote_user.ts","../src/sandbox/utils.ts","../src/sandbox/client.ts","../src/model/client.ts","../src/sandbox/runtime_env/config.ts","../src/sandbox/runtime_env/base.ts","../src/sandbox/runtime_env/python_runtime_env.ts","../src/sandbox/runtime_env/node_runtime_env.ts","../src/sandbox/model_service/base.ts","../src/sandbox/agent/base.ts","../src/sandbox/agent/config.ts","../src/index.ts"],"names":["Codes","z","toCamel","toSnake","https","axios","resolve","join","homedir","winston","existsSync","mkdirSync","logger","statSync","randomUUID","mkdtempSync","tmpdir","basename","rmSync","SpeedupType","readFile","appendFile","readFileSync"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * ROCK status codes enumeration\n */\n\n/**\n * Status codes with phrase descriptions\n */\nexport enum Codes {\n /**\n * Success codes (2xxx)\n */\n OK = 2000,\n\n /**\n * Client error codes (4xxx)\n */\n BAD_REQUEST = 4000,\n\n /**\n * Server error codes (5xxx)\n */\n INTERNAL_SERVER_ERROR = 5000,\n\n /**\n * Command/execution error codes (6xxx)\n */\n COMMAND_ERROR = 6000,\n}\n\n/**\n * Human-readable reason phrases for status codes\n */\nexport const ReasonPhrases: Record<Codes, string> = {\n [Codes.OK]: 'OK',\n [Codes.BAD_REQUEST]: 'Bad Request',\n [Codes.INTERNAL_SERVER_ERROR]: 'Internal Server Error',\n [Codes.COMMAND_ERROR]: 'Command Error',\n};\n\n/**\n * Get the reason phrase for a given status code\n */\nexport function getReasonPhrase(code: Codes): string {\n return ReasonPhrases[code] ?? '';\n}\n\n/**\n * Check if a status code indicates success (2xxx range)\n */\nexport function isSuccess(code: Codes): boolean {\n return code >= 2000 && code <= 2999;\n}\n\n/**\n * Check if a status code indicates a client error (4xxx range)\n */\nexport function isClientError(code: Codes): boolean {\n return code >= 4000 && code <= 4999;\n}\n\n/**\n * Check if a status code indicates a server error (5xxx range)\n */\nexport function isServerError(code: Codes): boolean {\n return code >= 5000 && code <= 5999;\n}\n\n/**\n * Check if a status code indicates a command error (6xxx range)\n */\nexport function isCommandError(code: Codes): boolean {\n return code >= 6000 && code <= 6999;\n}\n\n/**\n * Check if a status code indicates any kind of error\n */\nexport function isError(code: Codes): boolean {\n return code >= 4000 && code <= 6999;\n}\n","/**\n * Request types\n */\n\nimport { z } from 'zod';\n\n/**\n * Command execution request\n */\nexport const CommandSchema = z.object({\n command: z.union([z.string(), z.array(z.string())]),\n timeout: z.number().optional().default(1200),\n env: z.record(z.string()).optional(),\n cwd: z.string().optional(),\n});\n\nexport type Command = z.infer<typeof CommandSchema>;\n\n/**\n * Bash session creation request\n */\nexport const CreateBashSessionRequestSchema = z.object({\n session: z.string().default('default'),\n startupSource: z.array(z.string()).default([]),\n envEnable: z.boolean().default(false),\n env: z.record(z.string()).optional(),\n remoteUser: z.string().optional(),\n});\n\nexport type CreateBashSessionRequest = z.infer<typeof CreateBashSessionRequestSchema>;\n\n/**\n * Bash action for session execution\n */\nexport const BashActionSchema = z.object({\n command: z.string(),\n session: z.string().default('default'),\n timeout: z.number().optional(),\n check: z.enum(['silent', 'raise', 'ignore']).default('raise'),\n});\n\nexport type BashAction = z.infer<typeof BashActionSchema>;\n\n/**\n * Write file request\n */\nexport const WriteFileRequestSchema = z.object({\n content: z.string(),\n path: z.string(),\n});\n\nexport type WriteFileRequest = z.infer<typeof WriteFileRequestSchema>;\n\n/**\n * Read file request\n */\nexport const ReadFileRequestSchema = z.object({\n path: z.string(),\n encoding: z.string().optional(),\n errors: z.string().optional(),\n});\n\nexport type ReadFileRequest = z.infer<typeof ReadFileRequestSchema>;\n\n/**\n * Upload file request\n */\nexport const UploadRequestSchema = z.object({\n sourcePath: z.string(),\n targetPath: z.string(),\n});\n\nexport type UploadRequest = z.infer<typeof UploadRequestSchema>;\n\n/**\n * Close session request\n */\nexport const CloseSessionRequestSchema = z.object({\n session: z.string().default('default'),\n});\n\nexport type CloseSessionRequest = z.infer<typeof CloseSessionRequestSchema>;\n\n/**\n * Chown request\n */\nexport const ChownRequestSchema = z.object({\n remoteUser: z.string(),\n paths: z.array(z.string()).default([]),\n recursive: z.boolean().default(false),\n});\n\nexport type ChownRequest = z.infer<typeof ChownRequestSchema>;\n\n/**\n * Chmod request\n */\nexport const ChmodRequestSchema = z.object({\n paths: z.array(z.string()).default([]),\n mode: z.string().default('755'),\n recursive: z.boolean().default(false),\n});\n\nexport type ChmodRequest = z.infer<typeof ChmodRequestSchema>;\n","/**\n * Response types\n * All field names use camelCase for TypeScript convention\n * HTTP layer automatically converts from API snake_case\n */\n\nimport { z } from 'zod';\nimport { Codes } from './codes.js';\n\n/**\n * Base sandbox response\n */\nexport const SandboxResponseSchema = z.object({\n code: z.nativeEnum(Codes).optional(),\n exitCode: z.number().optional(),\n failureReason: z.string().optional(),\n});\n\nexport type SandboxResponse = z.infer<typeof SandboxResponseSchema>;\n\n/**\n * Is alive response\n */\nexport const IsAliveResponseSchema = z.object({\n isAlive: z.boolean(),\n message: z.string().default(''),\n});\n\nexport type IsAliveResponse = z.infer<typeof IsAliveResponseSchema>;\n\n/**\n * Sandbox status response\n */\nexport const SandboxStatusResponseSchema = z.object({\n sandboxId: z.string().optional(),\n status: z.record(z.unknown()).optional(),\n portMapping: z.record(z.unknown()).optional(),\n hostName: z.string().optional(),\n hostIp: z.string().optional(),\n isAlive: z.boolean().default(true),\n image: z.string().optional(),\n gatewayVersion: z.string().optional(),\n sweRexVersion: z.string().optional(),\n userId: z.string().optional(),\n experimentId: z.string().optional(),\n namespace: z.string().optional(),\n cpus: z.number().optional(),\n memory: z.string().optional(),\n state: z.unknown().optional(),\n // Response headers info\n cluster: z.string().optional(),\n requestId: z.string().optional(),\n eagleeyeTraceid: z.string().optional(),\n});\n\nexport type SandboxStatusResponse = z.infer<typeof SandboxStatusResponseSchema>;\n\n/**\n * Command execution response\n */\nexport const CommandResponseSchema = z.object({\n stdout: z.string().default(''),\n stderr: z.string().default(''),\n exitCode: z.number().optional(),\n});\n\nexport type CommandResponse = z.infer<typeof CommandResponseSchema>;\n\n/**\n * Write file response\n */\nexport const WriteFileResponseSchema = z.object({\n success: z.boolean().default(false),\n message: z.string().default(''),\n});\n\nexport type WriteFileResponse = z.infer<typeof WriteFileResponseSchema>;\n\n/**\n * Read file response\n */\nexport const ReadFileResponseSchema = z.object({\n content: z.string().default(''),\n});\n\nexport type ReadFileResponse = z.infer<typeof ReadFileResponseSchema>;\n\n/**\n * Upload response\n */\nexport const UploadResponseSchema = z.object({\n success: z.boolean().default(false),\n message: z.string().default(''),\n fileName: z.string().optional(),\n});\n\nexport type UploadResponse = z.infer<typeof UploadResponseSchema>;\n\n/**\n * Bash observation (execution result)\n */\nexport const ObservationSchema = z.object({\n output: z.string().default(''),\n exitCode: z.number().optional(),\n failureReason: z.string().default(''),\n expectString: z.string().default(''),\n});\n\nexport type Observation = z.infer<typeof ObservationSchema>;\n\n/**\n * Create session response\n */\nexport const CreateSessionResponseSchema = z.object({\n output: z.string().default(''),\n sessionType: z.literal('bash').default('bash'),\n});\n\nexport type CreateSessionResponse = z.infer<typeof CreateSessionResponseSchema>;\n\n/**\n * Close session response\n */\nexport const CloseSessionResponseSchema = z.object({\n sessionType: z.literal('bash').default('bash'),\n});\n\nexport type CloseSessionResponse = z.infer<typeof CloseSessionResponseSchema>;\n\n/**\n * Close response\n */\nexport const CloseResponseSchema = z.object({});\n\nexport type CloseResponse = z.infer<typeof CloseResponseSchema>;\n\n/**\n * Chown response\n */\nexport const ChownResponseSchema = z.object({\n success: z.boolean().default(false),\n message: z.string().default(''),\n});\n\nexport type ChownResponse = z.infer<typeof ChownResponseSchema>;\n\n/**\n * Chmod response\n */\nexport const ChmodResponseSchema = z.object({\n success: z.boolean().default(false),\n message: z.string().default(''),\n});\n\nexport type ChmodResponse = z.infer<typeof ChmodResponseSchema>;\n\n/**\n * Execute bash session response\n */\nexport const ExecuteBashSessionResponseSchema = z.object({\n success: z.boolean().default(false),\n message: z.string().default(''),\n});\n\nexport type ExecuteBashSessionResponse = z.infer<typeof ExecuteBashSessionResponseSchema>;\n\n/**\n * OSS setup response\n */\nexport const OssSetupResponseSchema = z.object({\n success: z.boolean().default(false),\n message: z.string().default(''),\n});\n\nexport type OssSetupResponse = z.infer<typeof OssSetupResponseSchema>;","/**\n * Common constants\n */\n\n/**\n * Run mode type\n */\nexport type RunModeType = 'normal' | 'nohup';\n\n/**\n * Run mode enum\n */\nexport const RunMode = {\n NORMAL: 'normal' as const,\n NOHUP: 'nohup' as const,\n};\n\n/**\n * PID prefix and suffix for nohup output parsing\n */\nexport const PID_PREFIX = '__ROCK_PID_START__';\nexport const PID_SUFFIX = '__ROCK_PID_END__';\n","/**\n * ROCK Exception classes\n */\n\nimport { Codes } from '../types/codes.js';\nimport { SandboxResponse } from '../types/responses.js';\n\n/**\n * Base ROCK exception\n */\nexport class RockException extends Error {\n protected _code: Codes | null = null;\n\n constructor(message: string, code?: Codes) {\n super(message);\n this.name = 'RockException';\n this._code = code ?? null;\n }\n\n get code(): Codes | null {\n return this._code;\n }\n}\n\n/**\n * Invalid parameter exception (deprecated)\n * @deprecated Use BadRequestRockError instead\n */\nexport class InvalidParameterRockException extends RockException {\n constructor(message: string) {\n super(message);\n this.name = 'InvalidParameterRockException';\n }\n}\n\n/**\n * Bad request error (4xxx)\n */\nexport class BadRequestRockError extends RockException {\n constructor(message: string, code: Codes = Codes.BAD_REQUEST) {\n super(message, code);\n this.name = 'BadRequestRockError';\n }\n}\n\n/**\n * Internal server error (5xxx)\n */\nexport class InternalServerRockError extends RockException {\n constructor(message: string, code: Codes = Codes.INTERNAL_SERVER_ERROR) {\n super(message, code);\n this.name = 'InternalServerRockError';\n }\n}\n\n/**\n * Command execution error (6xxx)\n */\nexport class CommandRockError extends RockException {\n constructor(message: string, code: Codes = Codes.COMMAND_ERROR) {\n super(message, code);\n this.name = 'CommandRockError';\n }\n}\n\n/**\n * Raise appropriate exception based on status code\n */\nexport function raiseForCode(code: Codes | null | undefined, message: string): void {\n if (code === null || code === undefined || isSuccessCode(code)) {\n return;\n }\n\n if (isClientErrorCode(code)) {\n throw new BadRequestRockError(message, code);\n }\n if (isServerErrorCode(code)) {\n throw new InternalServerRockError(message, code);\n }\n if (isCommandErrorCode(code)) {\n throw new CommandRockError(message, code);\n }\n\n throw new RockException(message, code);\n}\n\n/**\n * Convert RockException to SandboxResponse\n */\nexport function fromRockException(e: RockException): SandboxResponse {\n return {\n code: e.code ?? undefined,\n exitCode: 1,\n failureReason: e.message,\n };\n}\n\n// Helper functions for code checking\nfunction isSuccessCode(code: Codes): boolean {\n return code >= 2000 && code <= 2999;\n}\n\nfunction isClientErrorCode(code: Codes): boolean {\n return code >= 4000 && code <= 4999;\n}\n\nfunction isServerErrorCode(code: Codes): boolean {\n return code >= 5000 && code <= 5999;\n}\n\nfunction isCommandErrorCode(code: Codes): boolean {\n return code >= 6000 && code <= 6999;\n}\n","/**\n * Case conversion utilities\n * Wraps ts-case-convert for consistent API\n */\n\nimport {\n objectToCamel as toCamel,\n objectToSnake as toSnake,\n} from 'ts-case-convert';\n\n/**\n * Convert object keys from snake_case to camelCase\n */\nexport const objectToCamel = toCamel;\n\n/**\n * Convert object keys from camelCase to snake_case\n */\nexport const objectToSnake = toSnake;\n","/**\n * HTTP utilities using axios\n */\n\nimport axios, { AxiosInstance, AxiosError, AxiosResponse } from 'axios';\nimport https from 'https';\nimport { PID_PREFIX, PID_SUFFIX } from '../common/constants.js';\nimport { objectToCamel, objectToSnake } from './case.js';\n\n/**\n * Shared HTTPS agent for connection pooling and TLS session reuse.\n * Following Python SDK pattern: _SHARED_SSL_CONTEXT\n * \n * This prevents performance degradation under load by:\n * - Enabling TLS session reuse\n * - Enabling connection pooling via keepAlive\n */\nexport const sharedHttpsAgent = new https.Agent({\n rejectUnauthorized: true,\n keepAlive: true,\n});\n\n/**\n * HTTP client configuration\n */\nexport interface HttpConfig {\n baseURL?: string;\n timeout?: number;\n headers?: Record<string, string>;\n}\n\n/**\n * HTTP response with headers\n */\nexport interface HttpResponse<T = unknown> {\n status: string;\n result?: T;\n error?: string;\n headers: Record<string, string>;\n}\n\n/**\n * HTTP utilities class\n */\nexport class HttpUtils {\n private static defaultTimeout = 300000; // 5 minutes\n private static defaultConnectTimeout = 300000;\n\n /**\n * Create axios instance with default config\n */\n private static createClient(config?: HttpConfig): AxiosInstance {\n return axios.create({\n timeout: config?.timeout ?? this.defaultTimeout,\n headers: {\n 'Content-Type': 'application/json',\n ...config?.headers,\n },\n httpsAgent: sharedHttpsAgent,\n });\n }\n\n /**\n * Send POST request\n * Automatically converts request body from camelCase to snake_case\n * Automatically converts response from snake_case to camelCase\n */\n static async post<T = unknown>(\n url: string,\n headers: Record<string, string>,\n data: Record<string, unknown>,\n readTimeout?: number\n ): Promise<HttpResponse<T>> {\n const client = this.createClient({\n timeout: readTimeout ?? this.defaultTimeout,\n headers,\n });\n\n // Convert request body to snake_case for API\n const snakeData = objectToSnake(data);\n\n try {\n const response = await client.post<unknown>(url, snakeData);\n // Convert response to camelCase for SDK users\n const camelData = objectToCamel(response.data as object) as { status?: string; result?: T; error?: string };\n const httpResponse: HttpResponse<T> = {\n status: camelData.status ?? 'Success',\n headers: this.extractHeaders(response),\n };\n if (camelData.result !== undefined) {\n httpResponse.result = camelData.result;\n }\n if (camelData.error !== undefined) {\n httpResponse.error = camelData.error;\n }\n return httpResponse;\n } catch (error) {\n // Re-throw original error to preserve response property (e.g., status code)\n // This allows callers to detect specific HTTP errors like 401, 403, etc.\n throw error;\n }\n }\n\n /**\n * Send GET request\n * Automatically converts response from snake_case to camelCase\n */\n static async get<T = unknown>(\n url: string,\n headers: Record<string, string>\n ): Promise<HttpResponse<T>> {\n const client = this.createClient({ headers });\n\n try {\n const response = await client.get<unknown>(url);\n // Convert response to camelCase for SDK users\n const camelData = objectToCamel(response.data as object) as { status?: string; result?: T; error?: string };\n const httpResponse: HttpResponse<T> = {\n status: camelData.status ?? 'Success',\n headers: this.extractHeaders(response),\n };\n if (camelData.result !== undefined) {\n httpResponse.result = camelData.result;\n }\n if (camelData.error !== undefined) {\n httpResponse.error = camelData.error;\n }\n return httpResponse;\n } catch (error) {\n // Re-throw original error to preserve response property (e.g., status code)\n throw error;\n }\n }\n\n /**\n * Extract headers from axios response\n */\n private static extractHeaders(response: AxiosResponse): Record<string, string> {\n const headers: Record<string, string> = {};\n for (const [key, value] of Object.entries(response.headers)) {\n if (typeof value === 'string') {\n headers[key.toLowerCase()] = value;\n } else if (Array.isArray(value)) {\n headers[key.toLowerCase()] = value.join(', ');\n }\n }\n return headers;\n }\n\n /**\n * Convert camelCase key to snake_case\n */\n private static camelToSnakeKey(key: string): string {\n return key.replace(/[A-Z]/g, (letter) => `_${letter.toLowerCase()}`);\n }\n\n /**\n * Send multipart/form-data request\n * Automatically converts form data keys to snake_case\n * Automatically converts response from snake_case to camelCase\n */\n static async postMultipart<T = unknown>(\n url: string,\n headers: Record<string, string>,\n data?: Record<string, string | number | boolean>,\n files?: Record<string, File | Buffer | [string, Buffer, string]>\n ): Promise<HttpResponse<T>> {\n const formData = new FormData();\n\n // Add form fields (convert keys to snake_case)\n if (data) {\n for (const [key, value] of Object.entries(data)) {\n if (value !== undefined && value !== null) {\n const snakeKey = this.camelToSnakeKey(key);\n formData.append(snakeKey, String(value));\n }\n }\n }\n\n // Add files (convert field names to snake_case)\n if (files) {\n for (const [fieldName, fileData] of Object.entries(files)) {\n if (fileData !== undefined && fileData !== null) {\n const snakeFieldName = this.camelToSnakeKey(fieldName);\n if (Array.isArray(fileData)) {\n // [filename, content, contentType]\n const [filename, content, contentType] = fileData;\n const blob = new Blob([content], { type: contentType });\n formData.append(snakeFieldName, blob, filename);\n } else if (fileData instanceof Buffer) {\n const blob = new Blob([fileData], { type: 'application/octet-stream' });\n formData.append(snakeFieldName, blob, 'file');\n } else if (fileData instanceof File) {\n formData.append(snakeFieldName, fileData);\n }\n }\n }\n }\n\n const client = this.createClient({\n headers: {\n ...headers,\n },\n });\n\n try {\n // CRITICAL: Use post with config to override Content-Type.\n // Setting Content-Type to null tells axios to remove the default\n // 'application/json' and auto-detect FormData, setting the correct\n // Content-Type with boundary (e.g., 'multipart/form-data; boundary=xxx')\n const response = await client.post<unknown>(url, formData, {\n headers: {\n 'Content-Type': null,\n },\n });\n // Convert response to camelCase for SDK users\n const camelData = objectToCamel(response.data as object) as { status?: string; result?: T; error?: string };\n const httpResponse: HttpResponse<T> = {\n status: camelData.status ?? 'Success',\n headers: this.extractHeaders(response),\n };\n if (camelData.result !== undefined) {\n httpResponse.result = camelData.result;\n }\n if (camelData.error !== undefined) {\n httpResponse.error = camelData.error;\n }\n return httpResponse;\n } catch (error) {\n // Re-throw original error to preserve response property (e.g., status code)\n throw error;\n }\n }\n\n /**\n * Guess MIME type from filename\n */\n static guessContentType(filename: string): string {\n const ext = filename.split('.').pop()?.toLowerCase();\n const mimeTypes: Record<string, string> = {\n txt: 'text/plain',\n html: 'text/html',\n css: 'text/css',\n js: 'application/javascript',\n json: 'application/json',\n xml: 'application/xml',\n pdf: 'application/pdf',\n zip: 'application/zip',\n tar: 'application/x-tar',\n gz: 'application/gzip',\n png: 'image/png',\n jpg: 'image/jpeg',\n jpeg: 'image/jpeg',\n gif: 'image/gif',\n svg: 'image/svg+xml',\n };\n\n return mimeTypes[ext ?? ''] ?? 'application/octet-stream';\n }\n}\n\n/**\n * Extract nohup PID from output\n */\nexport function extractNohupPid(output: string): number | null {\n const pattern = new RegExp(`${PID_PREFIX}(\\\\d+)${PID_SUFFIX}`);\n const match = output.match(pattern);\n if (match?.[1]) {\n return parseInt(match[1], 10);\n }\n return null;\n}\n","/**\n * Retry utilities\n */\n\n/**\n * Retry options\n */\nexport interface RetryOptions {\n maxAttempts?: number;\n delaySeconds?: number;\n backoff?: number;\n jitter?: boolean;\n}\n\n/**\n * Retry decorator for async functions\n */\nexport function retryAsync<T>(\n fn: () => Promise<T>,\n options: RetryOptions = {}\n): Promise<T> {\n const {\n maxAttempts = 3,\n delaySeconds = 1.0,\n backoff = 2.0,\n jitter = false,\n } = options;\n\n return retryAsyncImpl(fn, {\n maxAttempts,\n delaySeconds,\n backoff,\n jitter,\n });\n}\n\nasync function retryAsyncImpl<T>(\n fn: () => Promise<T>,\n options: Required<RetryOptions>\n): Promise<T> {\n const { maxAttempts, delaySeconds, backoff, jitter } = options;\n let lastError: Error | null = null;\n let currentDelay = delaySeconds;\n\n for (let attempt = 1; attempt <= maxAttempts; attempt++) {\n try {\n return await fn();\n } catch (e) {\n lastError = e instanceof Error ? e : new Error(String(e));\n\n if (attempt === maxAttempts) {\n break;\n }\n\n let sleepTime = currentDelay;\n if (jitter) {\n sleepTime = Math.random() * currentDelay * 2;\n }\n\n await sleep(sleepTime * 1000);\n currentDelay *= backoff;\n }\n }\n\n throw lastError ?? new Error('All retry attempts failed');\n}\n\n/**\n * Sleep utility\n */\nexport function sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\n/**\n * Create a retry wrapper for a function\n */\nexport function withRetry<T extends (...args: unknown[]) => Promise<unknown>>(\n fn: T,\n options: RetryOptions = {}\n): T {\n return (async (...args: Parameters<T>) => {\n return retryAsync(() => fn(...args), options);\n }) as T;\n}\n","/**\n * System utilities\n * \n * Note: This SDK requires Node.js environment (v20.8.0+).\n * It cannot run in browsers due to dependencies on Node.js modules.\n */\n\n/**\n * Check if running in Node.js environment\n */\nexport function isNode(): boolean {\n return (\n typeof process !== 'undefined' &&\n process.versions != null &&\n process.versions.node != null\n );\n}\n\n/**\n * Get environment variable\n * Directly accesses process.env since this SDK requires Node.js\n */\nexport function getEnv(key: string, defaultValue?: string): string | undefined {\n return process.env[key] ?? defaultValue;\n}\n\n/**\n * Get required environment variable\n */\nexport function getRequiredEnv(key: string): string {\n const value = getEnv(key);\n if (value === undefined) {\n throw new Error(`Required environment variable ${key} is not set`);\n }\n return value;\n}\n\n/**\n * Check if environment variable is set\n * Directly checks process.env since this SDK requires Node.js\n */\nexport function isEnvSet(key: string): boolean {\n return key in process.env;\n}\n","/**\n * Environment variables configuration\n */\n\nimport { getEnv, isEnvSet } from './utils/system.js';\nimport { homedir } from 'os';\nimport { join } from 'path';\n\n/**\n * Environment variable definitions\n */\nexport const envVars = {\n // Logging\n get ROCK_LOGGING_PATH(): string | undefined {\n return getEnv('ROCK_LOGGING_PATH');\n },\n\n get ROCK_LOGGING_FILE_NAME(): string {\n return getEnv('ROCK_LOGGING_FILE_NAME', 'rocklet.log')!;\n },\n\n get ROCK_LOGGING_LEVEL(): string {\n return getEnv('ROCK_LOGGING_LEVEL', 'INFO')!;\n },\n\n // Service\n get ROCK_SERVICE_STATUS_DIR(): string {\n return getEnv('ROCK_SERVICE_STATUS_DIR', '/data/service_status')!;\n },\n\n get ROCK_SCHEDULER_STATUS_DIR(): string {\n return getEnv('ROCK_SCHEDULER_STATUS_DIR', '/data/scheduler_status')!;\n },\n\n // Config\n get ROCK_CONFIG(): string | undefined {\n return getEnv('ROCK_CONFIG');\n },\n\n get ROCK_CONFIG_DIR_NAME(): string {\n return getEnv('ROCK_CONFIG_DIR_NAME', 'rock-conf')!;\n },\n\n // Base URLs\n get ROCK_BASE_URL(): string {\n return getEnv('ROCK_BASE_URL', 'http://localhost:8080')!;\n },\n\n get ROCK_WORKER_ROCKLET_PORT(): number | undefined {\n const val = getEnv('ROCK_WORKER_ROCKLET_PORT');\n return val ? parseInt(val, 10) : undefined;\n },\n\n get ROCK_SANDBOX_STARTUP_TIMEOUT_SECONDS(): number {\n return parseInt(getEnv('ROCK_SANDBOX_STARTUP_TIMEOUT_SECONDS', '180')!, 10);\n },\n\n get ROCK_CODE_SANDBOX_BASE_URL(): string {\n return getEnv('ROCK_CODE_SANDBOX_BASE_URL', '')!;\n },\n\n // EnvHub\n get ROCK_ENVHUB_BASE_URL(): string {\n return getEnv('ROCK_ENVHUB_BASE_URL', 'http://localhost:8081')!;\n },\n\n get ROCK_ENVHUB_DEFAULT_DOCKER_IMAGE(): string {\n return getEnv('ROCK_ENVHUB_DEFAULT_DOCKER_IMAGE', 'python:3.11')!;\n },\n\n get ROCK_ENVHUB_DB_URL(): string {\n return getEnv(\n 'ROCK_ENVHUB_DB_URL',\n `sqlite:///${join(homedir(), '.rock', 'rock_envs.db')}`\n )!;\n },\n\n // Auto clear\n get ROCK_DEFAULT_AUTO_CLEAR_TIME_MINUTES(): number {\n return parseInt(getEnv('ROCK_DEFAULT_AUTO_CLEAR_TIME_MINUTES', '360')!, 10);\n },\n\n // Ray\n get ROCK_RAY_NAMESPACE(): string {\n return getEnv('ROCK_RAY_NAMESPACE', 'xrl-sandbox')!;\n },\n\n get ROCK_SANDBOX_EXPIRE_TIME_KEY(): string {\n return getEnv('ROCK_SANDBOX_EXPIRE_TIME_KEY', 'expire_time')!;\n },\n\n get ROCK_SANDBOX_AUTO_CLEAR_TIME_KEY(): string {\n return getEnv('ROCK_SANDBOX_AUTO_CLEAR_TIME_KEY', 'auto_clear_time')!;\n },\n\n // Timezone\n get ROCK_TIME_ZONE(): string {\n return getEnv('ROCK_TIME_ZONE', 'Asia/Shanghai')!;\n },\n\n // OSS\n get ROCK_OSS_ENABLE(): boolean {\n return getEnv('ROCK_OSS_ENABLE', 'false')?.toLowerCase() === 'true';\n },\n\n get ROCK_OSS_BUCKET_ENDPOINT(): string | undefined {\n return getEnv('ROCK_OSS_BUCKET_ENDPOINT');\n },\n\n get ROCK_OSS_BUCKET_NAME(): string | undefined {\n return getEnv('ROCK_OSS_BUCKET_NAME');\n },\n\n get ROCK_OSS_BUCKET_REGION(): string | undefined {\n return getEnv('ROCK_OSS_BUCKET_REGION');\n },\n\n // Pip\n get ROCK_PIP_INDEX_URL(): string {\n return getEnv('ROCK_PIP_INDEX_URL', 'https://pypi.org/simple/')!;\n },\n\n // Monitor\n get ROCK_MONITOR_ENABLE(): boolean {\n return getEnv('ROCK_MONITOR_ENABLE', 'false')?.toLowerCase() === 'true';\n },\n\n // Project\n get ROCK_PROJECT_ROOT(): string {\n return getEnv('ROCK_PROJECT_ROOT', process.cwd())!;\n },\n\n get ROCK_WORKER_ENV_TYPE(): string {\n return getEnv('ROCK_WORKER_ENV_TYPE', 'local')!;\n },\n\n get ROCK_PYTHON_ENV_PATH(): string {\n return getEnv('ROCK_PYTHON_ENV_PATH', process.cwd())!;\n },\n\n // Admin\n get ROCK_ADMIN_ENV(): string {\n return getEnv('ROCK_ADMIN_ENV', 'dev')!;\n },\n\n get ROCK_ADMIN_ROLE(): string {\n return getEnv('ROCK_ADMIN_ROLE', 'write')!;\n },\n\n // CLI\n get ROCK_CLI_LOAD_PATHS(): string {\n return getEnv('ROCK_CLI_LOAD_PATHS', '')!;\n },\n\n get ROCK_CLI_DEFAULT_CONFIG_PATH(): string {\n return getEnv('ROCK_CLI_DEFAULT_CONFIG_PATH', join(homedir(), '.rock', 'config.ini'))!;\n },\n\n // Model Service\n get ROCK_MODEL_SERVICE_DATA_DIR(): string {\n return getEnv('ROCK_MODEL_SERVICE_DATA_DIR', '/data/logs')!;\n },\n\n get ROCK_MODEL_SERVICE_TRAJ_APPEND_MODE(): boolean {\n return getEnv('ROCK_MODEL_SERVICE_TRAJ_APPEND_MODE', 'false')?.toLowerCase() === 'true';\n },\n\n // RuntimeEnv\n get ROCK_RTENV_PYTHON_V31114_INSTALL_CMD(): string {\n return getEnv(\n 'ROCK_RTENV_PYTHON_V31114_INSTALL_CMD',\n '[ -f cpython31114.tar.gz ] && rm cpython31114.tar.gz; [ -d python ] && rm -rf python; wget -q -O cpython31114.tar.gz https://github.com/astral-sh/python-build-standalone/releases/download/20251120/cpython-3.11.14+20251120-x86_64-unknown-linux-gnu-install_only.tar.gz && tar -xzf cpython31114.tar.gz && mv python runtime-env'\n )!;\n },\n\n get ROCK_RTENV_PYTHON_V31212_INSTALL_CMD(): string {\n return getEnv(\n 'ROCK_RTENV_PYTHON_V31212_INSTALL_CMD',\n '[ -f cpython-3.12.12.tar.gz ] && rm cpython-3.12.12.tar.gz; [ -d python ] && rm -rf python; wget -q -O cpython-3.12.12.tar.gz https://github.com/astral-sh/python-build-standalone/releases/download/20251217/cpython-3.12.12+20251217-x86_64-unknown-linux-gnu-install_only.tar.gz && tar -xzf cpython-3.12.12.tar.gz && mv python runtime-env'\n )!;\n },\n\n get ROCK_RTENV_NODE_V22180_INSTALL_CMD(): string {\n return getEnv(\n 'ROCK_RTENV_NODE_V22180_INSTALL_CMD',\n '[ -f node.tar.xz ] && rm node.tar.xz; [ -d node ] && rm -rf node; wget -q -O node.tar.xz --tries=10 --waitretry=2 https://nodejs.org/dist/v22.18.0/node-v22.18.0-linux-x64.tar.xz && tar -xf node.tar.xz && mv node-v22.18.0-linux-x64 runtime-env'\n )!;\n },\n\n // Agent\n get ROCK_AGENT_PRE_INIT_BASH_CMD_LIST(): Array<{ command: string; timeoutSeconds: number }> {\n const val = getEnv('ROCK_AGENT_PRE_INIT_BASH_CMD_LIST', '[]');\n try {\n return JSON.parse(val!);\n } catch {\n return [];\n }\n },\n\n get ROCK_AGENT_IFLOW_CLI_INSTALL_CMD(): string {\n return getEnv('ROCK_AGENT_IFLOW_CLI_INSTALL_CMD', 'npm i -g @iflow-ai/iflow-cli@latest')!;\n },\n\n get ROCK_MODEL_SERVICE_INSTALL_CMD(): string {\n return getEnv('ROCK_MODEL_SERVICE_INSTALL_CMD', 'pip install rl_rock[model-service]')!;\n },\n\n // Doccuum\n get ROCK_DOCUUM_INSTALL_URL(): string {\n return getEnv(\n 'ROCK_DOCUUM_INSTALL_URL',\n 'https://raw.githubusercontent.com/stepchowfun/docuum/main/install.sh'\n )!;\n },\n\n // ========== Sandbox Defaults ==========\n // Sandbox configuration defaults - allow users to override via environment variables\n\n get ROCK_DEFAULT_IMAGE(): string {\n return getEnv('ROCK_DEFAULT_IMAGE', 'python:3.11')!;\n },\n\n get ROCK_DEFAULT_MEMORY(): string {\n return getEnv('ROCK_DEFAULT_MEMORY', '8g')!;\n },\n\n get ROCK_DEFAULT_CPUS(): number {\n return parseFloat(getEnv('ROCK_DEFAULT_CPUS', '2')!);\n },\n\n get ROCK_DEFAULT_CLUSTER(): string {\n return getEnv('ROCK_DEFAULT_CLUSTER', 'zb')!;\n },\n\n get ROCK_DEFAULT_AUTO_CLEAR_SECONDS(): number {\n return parseInt(getEnv('ROCK_DEFAULT_AUTO_CLEAR_SECONDS', '300')!, 10);\n },\n\n // ========== SandboxGroup Defaults ==========\n\n get ROCK_DEFAULT_GROUP_SIZE(): number {\n return parseInt(getEnv('ROCK_DEFAULT_GROUP_SIZE', '2')!, 10);\n },\n\n get ROCK_DEFAULT_START_CONCURRENCY(): number {\n return parseInt(getEnv('ROCK_DEFAULT_START_CONCURRENCY', '2')!, 10);\n },\n\n get ROCK_DEFAULT_START_RETRY_TIMES(): number {\n return parseInt(getEnv('ROCK_DEFAULT_START_RETRY_TIMES', '3')!, 10);\n },\n\n // ========== Client Timeouts (in seconds) ==========\n\n get ROCK_DEFAULT_ARUN_TIMEOUT(): number {\n return parseInt(getEnv('ROCK_DEFAULT_ARUN_TIMEOUT', '300')!, 10);\n },\n\n get ROCK_DEFAULT_NOHUP_WAIT_TIMEOUT(): number {\n return parseInt(getEnv('ROCK_DEFAULT_NOHUP_WAIT_TIMEOUT', '300')!, 10);\n },\n\n get ROCK_DEFAULT_NOHUP_WAIT_INTERVAL(): number {\n return parseInt(getEnv('ROCK_DEFAULT_NOHUP_WAIT_INTERVAL', '10')!, 10);\n },\n\n get ROCK_DEFAULT_STATUS_CHECK_INTERVAL(): number {\n return parseInt(getEnv('ROCK_DEFAULT_STATUS_CHECK_INTERVAL', '3')!, 10);\n },\n};\n\n/**\n * Check if an environment variable is explicitly set\n */\nexport function isSet(name: string): boolean {\n return isEnvSet(name);\n}\n","/**\n * Winston-based logger module\n */\n\nimport winston from 'winston';\nimport { envVars } from './env_vars.js';\nimport { join } from 'path';\nimport { existsSync, mkdirSync } from 'fs';\n\n/**\n * Log levels\n */\nconst levels: winston.config.AbstractConfigSetLevels = {\n error: 0,\n warn: 1,\n info: 2,\n http: 3,\n debug: 4,\n};\n\n/**\n * Log level colors\n */\nconst colors: winston.config.AbstractConfigSetColors = {\n error: 'red',\n warn: 'yellow',\n info: 'green',\n http: 'magenta',\n debug: 'cyan',\n};\n\nwinston.addColors(colors);\n\n/**\n * Custom format for console output\n */\nconst consoleFormat = winston.format.combine(\n winston.format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss.SSS' }),\n winston.format.colorize({ all: true }),\n winston.format.printf((info) => {\n const { timestamp, level, message, ...meta } = info;\n const metaStr = Object.keys(meta).length ? JSON.stringify(meta) : '';\n return `${timestamp} ${level}: ${message} ${metaStr}`;\n })\n);\n\n/**\n * Custom format for file output\n */\nconst fileFormat = winston.format.combine(\n winston.format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss.SSS' }),\n winston.format.json()\n);\n\n/**\n * Get log level from environment\n */\nfunction getLogLevel(): string {\n const level = envVars.ROCK_LOGGING_LEVEL.toLowerCase();\n if (level in levels) {\n return level;\n }\n return 'info';\n}\n\n/**\n * Logger cache using winston Container for proper lifecycle management\n */\nconst loggerContainer = new winston.Container();\n\n/**\n * Get the number of cached loggers\n */\nexport function getLoggerCacheSize(): number {\n return loggerContainer.loggers.size;\n}\n\n/**\n * Clear all cached loggers\n */\nexport function clearLoggerCache(): void {\n // Close all loggers and clear the cache\n for (const name of loggerContainer.loggers.keys()) {\n loggerContainer.close(name);\n }\n}\n\n/**\n * Initialize and return a logger instance\n */\nexport function initLogger(name: string = 'rock', fileName?: string): winston.Logger {\n // Check if logger already exists in container\n if (loggerContainer.has(name)) {\n return loggerContainer.get(name);\n }\n\n const transports: winston.transport[] = [];\n const logLevel = getLogLevel();\n\n // File transport\n const logPath = envVars.ROCK_LOGGING_PATH;\n const logFileName = fileName ?? envVars.ROCK_LOGGING_FILE_NAME;\n\n if (logPath) {\n // Ensure directory exists\n if (!existsSync(logPath)) {\n mkdirSync(logPath, { recursive: true });\n }\n\n transports.push(\n new winston.transports.File({\n filename: join(logPath, logFileName),\n format: fileFormat,\n level: logLevel,\n })\n );\n } else {\n // Console transport\n transports.push(\n new winston.transports.Console({\n format: consoleFormat,\n level: logLevel,\n })\n );\n }\n\n // Use winston.Container to create and cache the logger\n const logger = loggerContainer.add(name, {\n levels,\n defaultMeta: { service: name },\n transports,\n });\n\n return logger;\n}\n\n/**\n * Get or create a child logger\n */\nexport function getChildLogger(parentName: string, childName: string): winston.Logger {\n const fullName = `${parentName}:${childName}`;\n return initLogger(fullName);\n}\n\n/**\n * Create a logger with context\n */\nexport function createContextLogger(context: string): winston.Logger {\n const logger = initLogger(context);\n return logger;\n}\n\n/**\n * Default logger instance\n */\nexport const defaultLogger = initLogger('rock');\n\n// Re-export winston types\nexport type Logger = winston.Logger;\nexport type LogEntry = winston.LogEntry;\n","/**\n * Deprecated decorator utilities\n */\n\nimport { initLogger } from '../logger.js';\nimport type { Logger } from '../logger.js';\n\n/**\n * Set to track which deprecation warnings have already been shown\n */\nconst warnedKeys = new Set<string>();\n\n/**\n * Get or create the deprecation logger (lazy initialization)\n */\nfunction getLogger(): Logger {\n return initLogger('rock.deprecated');\n}\n\n/**\n * Clear all deprecation warning states (useful for testing)\n */\nexport function clearDeprecatedWarnings(): void {\n warnedKeys.clear();\n}\n\n/**\n * Issue a deprecation warning only once per key\n */\nfunction warnOnce(key: string, message: string): void {\n if (warnedKeys.has(key)) {\n return;\n }\n getLogger().warn(message);\n warnedKeys.add(key);\n}\n\n/**\n * Mark a function as deprecated\n */\nexport function deprecated(reason: string = ''): MethodDecorator {\n return function (\n target: unknown,\n propertyKey: string | symbol,\n descriptor: PropertyDescriptor\n ): PropertyDescriptor {\n const originalMethod = descriptor.value;\n const key = String(propertyKey);\n\n descriptor.value = function (...args: unknown[]): unknown {\n warnOnce(key, `${key} is deprecated. ${reason}`);\n return originalMethod.apply(this, args);\n };\n\n return descriptor;\n };\n}\n\n/**\n * Mark a class as deprecated\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function deprecatedClass(reason: string = ''): <T extends new (...args: any[]) => any>(constructor: T) => T {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return function <T extends new (...args: any[]) => any>(\n constructor: T\n ): T {\n const key = constructor.name;\n return class extends constructor {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n constructor(...args: any[]) {\n warnOnce(key, `${key} is deprecated. ${reason}`);\n super(...args);\n }\n };\n };\n}\n","/**\n * EnvHub data model definitions\n */\n\nimport { z } from 'zod';\nimport { envVars } from '../env_vars.js';\n\n/**\n * EnvHub client configuration\n */\nexport const EnvHubClientConfigSchema = z.object({\n baseUrl: z.string().default(envVars.ROCK_ENVHUB_BASE_URL),\n});\n\nexport type EnvHubClientConfig = z.infer<typeof EnvHubClientConfigSchema>;\n\n/**\n * Rock environment info\n */\nexport const RockEnvInfoSchema = z.object({\n envName: z.string(),\n image: z.string(),\n owner: z.string().default(''),\n createAt: z.string().default(''),\n updateAt: z.string().default(''),\n description: z.string().default(''),\n tags: z.array(z.string()).default([]),\n extraSpec: z.record(z.unknown()).optional(),\n});\n\nexport type RockEnvInfo = z.infer<typeof RockEnvInfoSchema>;\n\n/**\n * Create RockEnvInfo from API response (already camelCase after HTTP layer conversion)\n */\nexport function createRockEnvInfo(data: Record<string, unknown>): RockEnvInfo {\n return RockEnvInfoSchema.parse(data);\n}","/**\n * EnvHub client for communicating with EnvHub server\n */\n\nimport { HttpUtils } from '../utils/http.js';\nimport {\n EnvHubClientConfig,\n EnvHubClientConfigSchema,\n RockEnvInfo,\n createRockEnvInfo,\n} from './schema.js';\n\n/**\n * EnvHub error exception\n */\nexport class EnvHubError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'EnvHubError';\n }\n}\n\n/**\n * EnvHub client for communicating with EnvHub server\n */\nexport class EnvHubClient {\n private config: EnvHubClientConfig;\n private baseUrl: string;\n private headers: Record<string, string>;\n\n constructor(config?: Partial<EnvHubClientConfig>) {\n this.config = EnvHubClientConfigSchema.parse(config ?? {});\n this.baseUrl = this.config.baseUrl;\n this.headers = { 'Content-Type': 'application/json' };\n }\n\n /**\n * Register or update an environment\n */\n async register(options: {\n envName: string;\n image: string;\n owner?: string;\n description?: string;\n tags?: string[];\n extraSpec?: Record<string, unknown>;\n }): Promise<RockEnvInfo> {\n const url = `${this.baseUrl}/env/register`;\n // Use camelCase - HTTP layer will convert to snake_case\n const payload = {\n envName: options.envName,\n image: options.image,\n owner: options.owner ?? '',\n description: options.description ?? '',\n tags: options.tags ?? [],\n extraSpec: options.extraSpec,\n };\n\n try {\n const response = await HttpUtils.post<Record<string, unknown>>(\n url,\n this.headers,\n payload\n );\n // Response is already camelCase (converted by HTTP layer)\n return createRockEnvInfo(response.result!);\n } catch (e) {\n throw new EnvHubError(`Failed to register environment: ${e}`);\n }\n }\n\n /**\n * Get environment by name\n */\n async getEnv(envName: string): Promise<RockEnvInfo> {\n const url = `${this.baseUrl}/env/get`;\n const payload = { envName };\n\n try {\n const response = await HttpUtils.post<Record<string, unknown>>(\n url,\n this.headers,\n payload\n );\n return createRockEnvInfo(response.result!);\n } catch (e) {\n throw new EnvHubError(`Failed to get environment ${envName}: ${e}`);\n }\n }\n\n /**\n * List environments\n */\n async listEnvs(options?: {\n owner?: string;\n tags?: string[];\n }): Promise<RockEnvInfo[]> {\n const url = `${this.baseUrl}/env/list`;\n const payload = {\n owner: options?.owner,\n tags: options?.tags,\n };\n\n try {\n const response = await HttpUtils.post<{ envs: Record<string, unknown>[] }>(\n url,\n this.headers,\n payload\n );\n const envsData = response.result?.envs ?? [];\n return envsData.map((envData) => createRockEnvInfo(envData));\n } catch (e) {\n throw new EnvHubError(`Failed to list environments: ${e}`);\n }\n }\n\n /**\n * Delete environment\n */\n async deleteEnv(envName: string): Promise<boolean> {\n const url = `${this.baseUrl}/env/delete`;\n const payload = { envName };\n\n try {\n await HttpUtils.post(url, this.headers, payload);\n return true;\n } catch (e) {\n const errorMessage = e instanceof Error ? e.message : String(e);\n if (errorMessage.includes('404')) {\n return false;\n }\n throw new EnvHubError(`Failed to delete environment ${envName}: ${e}`);\n }\n }\n\n /**\n * Health check\n */\n async healthCheck(): Promise<Record<string, string>> {\n const url = `${this.baseUrl}/health`;\n\n try {\n const response = await HttpUtils.get<Record<string, string>>(\n url,\n this.headers\n );\n return response.result ?? {};\n } catch (e) {\n throw new EnvHubError(`Failed to health check: ${e}`);\n }\n }\n}","/**\n * RockEnv - Gym-style environment interface\n */\n\nimport { envVars } from '../env_vars.js';\nimport { HttpUtils } from '../utils/http.js';\nimport { initLogger } from '../logger.js';\n\nconst logger = initLogger('rock.envs');\n\n/**\n * Step result tuple type\n */\nexport type StepResult = [\n observation: unknown,\n reward: number,\n terminated: boolean,\n truncated: boolean,\n info: Record<string, unknown>\n];\n\n/**\n * Reset result tuple type\n */\nexport type ResetResult = [observation: unknown, info: Record<string, unknown>];\n\n/**\n * RockEnv configuration\n */\nexport interface RockEnvConfig {\n envId: string;\n}\n\n/**\n * RockEnv - Gym-style environment for ROCK\n */\nexport class RockEnv {\n private readonly envId: string;\n private sandboxId: string | null = null;\n private isClosed = false;\n\n private constructor(config: RockEnvConfig) {\n this.envId = config.envId;\n }\n\n /**\n * Create and initialize a RockEnv instance\n *\n * @param config - Environment configuration\n * @returns Initialized RockEnv instance\n */\n static async create(config: RockEnvConfig): Promise<RockEnv> {\n const env = new RockEnv(config);\n try {\n await env.initializeEnvironment();\n } catch (e) {\n throw new Error(`Failed to initialize environment: ${e}`);\n }\n return env;\n }\n\n /**\n * Get the sandbox ID\n */\n getSandboxId(): string | null {\n return this.sandboxId;\n }\n\n /**\n * Initialize environment instance\n */\n private async initializeEnvironment(): Promise<void> {\n logger.debug(`Initializing environment: ${this.envId}`);\n const response = await HttpUtils.post<{ sandboxId: string }>(\n `${envVars.ROCK_BASE_URL}/apis/v1/envs/gem/make`,\n { 'Content-Type': 'application/json' },\n { envId: this.envId }\n );\n\n this.sandboxId = response.result?.sandboxId ?? null;\n if (!this.sandboxId) {\n throw new Error('Failed to get environment instance ID');\n }\n }\n\n /**\n * Execute an action step\n *\n * @param action - Action ID to execute\n * @returns Tuple containing observation, reward, terminated, truncated, info\n */\n async step(action: string | number): Promise<StepResult> {\n this.ensureNotClosed();\n\n const response = await HttpUtils.post<{\n observation: unknown;\n reward: number;\n terminated: boolean;\n truncated: boolean;\n info: Record<string, unknown>;\n }>(\n `${envVars.ROCK_BASE_URL}/apis/v1/envs/gem/step`,\n { 'Content-Type': 'application/json' },\n { sandboxId: this.sandboxId, action }\n );\n\n return this.parseStepResult(response.result);\n }\n\n /**\n * Reset environment to initial state\n *\n * @param seed - Optional random seed\n * @returns Tuple containing initial observation and info\n */\n async reset(seed?: number): Promise<ResetResult> {\n this.ensureNotClosed();\n\n const params: Record<string, unknown> = { sandboxId: this.sandboxId };\n if (seed !== undefined) {\n params.seed = seed;\n }\n\n const response = await HttpUtils.post<{\n observation: unknown;\n info: Record<string, unknown>;\n }>(\n `${envVars.ROCK_BASE_URL}/apis/v1/envs/gem/reset`,\n { 'Content-Type': 'application/json' },\n params\n );\n\n return this.parseResetResult(response.result);\n }\n\n /**\n * Close environment and clean up resources\n */\n async close(): Promise<void> {\n if (this.isClosed || !this.sandboxId) {\n return;\n }\n\n try {\n await HttpUtils.post(\n `${envVars.ROCK_BASE_URL}/apis/v1/envs/gem/close`,\n { 'Content-Type': 'application/json' },\n { sandboxId: this.sandboxId }\n );\n } catch (e) {\n throw new Error(`Failed to close environment: ${e}`);\n } finally {\n this.isClosed = true;\n this.sandboxId = null;\n }\n }\n\n /**\n * Parse step result from API response\n */\n private parseStepResult(\n data:\n | {\n observation: unknown;\n reward: number;\n terminated: boolean;\n truncated: boolean;\n info: Record<string, unknown>;\n }\n | undefined\n ): StepResult {\n if (!data) {\n throw new Error('Invalid step result: no data');\n }\n return [\n data.observation,\n data.reward,\n data.terminated,\n data.truncated,\n data.info,\n ];\n }\n\n /**\n * Parse reset result from API response\n */\n private parseResetResult(\n data: { observation: unknown; info: Record<string, unknown> } | undefined\n ): ResetResult {\n if (!data) {\n throw new Error('Invalid reset result: no data');\n }\n return [data.observation, data.info];\n }\n\n /**\n * Ensure environment is not closed\n */\n private ensureNotClosed(): void {\n if (this.isClosed) {\n throw new Error('Environment is closed');\n }\n }\n}","/**\n * Environment factory function\n */\n\nimport { RockEnv } from './rock_env.js';\n\n/**\n * Create a Rock environment instance\n *\n * @param envId - Environment ID\n * @param options - Environment options\n * @returns Promise resolving to RockEnv instance\n */\nexport async function make(\n envId: string,\n options?: Record<string, unknown>\n): Promise<RockEnv> {\n return RockEnv.create({ envId, ...options });\n}","/**\n * Sandbox configuration\n */\n\nimport { z } from 'zod';\nimport { envVars } from '../env_vars.js';\n\n/**\n * Base configuration schema\n */\nexport const BaseConfigSchema = z.object({\n baseUrl: z.string().default(() => envVars.ROCK_BASE_URL),\n xrlAuthorization: z.string().optional(),\n extraHeaders: z.record(z.string()).default({}),\n});\n\nexport type BaseConfig = z.infer<typeof BaseConfigSchema>;\n\n/**\n * Sandbox configuration schema\n */\nexport const SandboxConfigSchema = BaseConfigSchema.extend({\n image: z.string().default(() => envVars.ROCK_DEFAULT_IMAGE),\n autoClearSeconds: z.number().default(() => envVars.ROCK_DEFAULT_AUTO_CLEAR_SECONDS),\n routeKey: z.string().optional(),\n startupTimeout: z.number().default(() => envVars.ROCK_SANDBOX_STARTUP_TIMEOUT_SECONDS),\n memory: z.string().default(() => envVars.ROCK_DEFAULT_MEMORY),\n cpus: z.number().default(() => envVars.ROCK_DEFAULT_CPUS),\n userId: z.string().optional(),\n experimentId: z.string().optional(),\n cluster: z.string().default(() => envVars.ROCK_DEFAULT_CLUSTER),\n namespace: z.string().optional(),\n});\n\nexport type SandboxConfig = z.infer<typeof SandboxConfigSchema>;\n\n/**\n * Sandbox group configuration schema\n */\nexport const SandboxGroupConfigSchema = SandboxConfigSchema.extend({\n size: z.number().default(() => envVars.ROCK_DEFAULT_GROUP_SIZE),\n startConcurrency: z.number().default(() => envVars.ROCK_DEFAULT_START_CONCURRENCY),\n startRetryTimes: z.number().default(() => envVars.ROCK_DEFAULT_START_RETRY_TIMES),\n});\n\nexport type SandboxGroupConfig = z.infer<typeof SandboxGroupConfigSchema>;\n\n/**\n * Create sandbox config with defaults\n */\nexport function createSandboxConfig(\n config?: Partial<SandboxConfig>\n): SandboxConfig {\n return SandboxConfigSchema.parse(config ?? {});\n}\n\n/**\n * Create sandbox group config with defaults\n */\nexport function createSandboxGroupConfig(\n config?: Partial<SandboxGroupConfig>\n): SandboxGroupConfig {\n return SandboxGroupConfigSchema.parse(config ?? {});\n}\n","/**\n * Deploy - Sandbox resource deployment manager\n */\n\nimport { existsSync, statSync } from 'fs';\nimport { resolve } from 'path';\nimport { randomUUID } from 'crypto';\nimport { initLogger } from '../logger.js';\nimport type { Sandbox } from './client.js';\n\nconst logger = initLogger('rock.sandbox.deploy');\n\n/**\n * Deploy - Manages deployment of local directories to sandbox\n */\nexport class Deploy {\n private sandbox: Sandbox;\n private workingDir: string | null = null;\n\n constructor(sandbox: Sandbox) {\n this.sandbox = sandbox;\n }\n\n /**\n * Get the current working directory\n */\n getWorkingDir(): string | null {\n return this.workingDir;\n }\n\n /**\n * Deploy local directory to sandbox\n *\n * @param localPath - Local directory path\n * @param targetPath - Target path in sandbox (optional)\n * @returns The target path in sandbox\n */\n async deployWorkingDir(\n localPath: string,\n targetPath?: string\n ): Promise<string> {\n const localAbs = resolve(localPath);\n\n // Validate local path\n if (!existsSync(localAbs)) {\n throw new Error(`local_path not found: ${localAbs}`);\n }\n const stats = statSync(localAbs);\n if (!stats.isDirectory()) {\n throw new Error(`local_path must be a directory: ${localAbs}`);\n }\n\n // Determine target path\n const target = targetPath ?? `/tmp/rock_workdir_${randomUUID().replace(/-/g, '')}`;\n\n const sandboxId = this.sandbox.getSandboxId();\n logger.info(`[${sandboxId}] Deploying working_dir: ${localAbs} -> ${target}`);\n\n // Upload directory\n const uploadResult = await this.sandbox.getFs().uploadDir(localAbs, target);\n if (uploadResult.exitCode !== 0) {\n throw new Error(`Failed to upload directory: ${uploadResult.failureReason}`);\n }\n\n // Update working directory\n this.workingDir = target;\n logger.info(`[${sandboxId}] working_dir deployed: ${target}`);\n\n return target;\n }\n\n /**\n * Format command template supporting ${} and <<>> syntax\n *\n * @param template - Template string with placeholders\n * @param kwargs - Additional substitution variables\n * @returns Formatted string\n */\n format(template: string, kwargs: Record<string, string> = {}): string {\n // Build substitution map\n const subs: Record<string, string | undefined> = {\n ...kwargs,\n ...(this.workingDir ? { working_dir: this.workingDir } : {}),\n };\n\n // Replace <<key>> with ${key} for template substitution\n let result = template;\n for (const key of Object.keys(subs)) {\n result = result.replace(new RegExp(`<<${key}>>`, 'g'), `\\${${key}}`);\n }\n\n // Perform substitution\n for (const [key, value] of Object.entries(subs)) {\n if (value !== undefined) {\n result = result.replace(new RegExp(`\\\\$\\\\{${key}\\\\}`, 'g'), value);\n }\n }\n\n return result;\n }\n}\n","/**\n * Shell utility functions for safe command construction\n * Provides protection against command injection attacks\n *\n * Inspired by Python's shlex module and security best practices\n */\n\n/**\n * Safely escape a string for use in shell commands\n * This is the TypeScript equivalent of Python's shlex.quote()\n *\n * The algorithm wraps the string in single quotes and escapes any\n * existing single quotes by ending the quote, adding an escaped quote,\n * and starting a new quote.\n *\n * @param str - The string to escape\n * @returns The escaped string, safe for shell use\n *\n * @example\n * ```typescript\n * shellQuote('hello'); // Returns: 'hello'\n * shellQuote(\"it's\"); // Returns: 'it'\\''s'\n * shellQuote('/tmp; rm -rf /'); // Returns: '/tmp; rm -rf /'\n * ```\n */\nexport function shellQuote(str: string): string {\n // Empty string\n if (str === '') {\n return \"''\";\n }\n\n // If string only contains safe characters (alphanumeric, underscore, hyphen, dot, slash)\n // we could potentially skip quoting, but for maximum safety we always quote.\n // This follows the principle of \"defense in depth\".\n\n // Wrap in single quotes and escape any single quotes within\n // The pattern: 'str' becomes 'str'\\''str' for each embedded quote\n return `'${str.replace(/'/g, \"'\\\\''\")}'`;\n}\n\n/**\n * Mark a string as safe (not to be escaped)\n * Use with caution - only for trusted, pre-validated strings\n */\nexport class SafeString {\n constructor(public readonly value: string) {}\n}\n\n/**\n * Build a safe command from parts\n * Strings are automatically quoted, SafeString instances are passed through\n *\n * @param parts - Array of command parts (strings or SafeString)\n * @returns The constructed command string\n *\n * @example\n * ```typescript\n * const cmd = buildCommand(['echo', 'hello world']);\n * // Returns: \"echo 'hello world'\"\n *\n * const cmd2 = buildCommand(['rm', '-rf', new SafeString('/tmp/*')]);\n * // Returns: \"rm -rf /tmp/*\"\n * ```\n */\nexport function buildCommand(parts: Array<string | SafeString>): string {\n return parts.map((p) => (p instanceof SafeString ? p.value : shellQuote(p))).join(' ');\n}\n\n/**\n * Wrap a command with bash -c safely\n * The entire command string is quoted to prevent injection\n *\n * @param cmd - The command to wrap\n * @returns The wrapped command string\n *\n * @example\n * ```typescript\n * const wrapped = bashWrap('echo \"hello world\"');\n * // Returns: \"bash -c 'echo \\\"hello world\\\"'\"\n * ```\n */\nexport function bashWrap(cmd: string): string {\n return `bash -c ${shellQuote(cmd)}`;\n}\n\n/**\n * Validate and normalize a URL\n * Returns the normalized URL or throws an error\n *\n * @param url - The URL to validate\n * @param allowedProtocols - Array of allowed protocols (default: ['http:', 'https:'])\n * @returns The normalized URL (trailing slash removed)\n * @throws Error if URL is invalid or uses disallowed protocol\n *\n * @example\n * ```typescript\n * validateUrl('https://example.com/'); // Returns 'https://example.com'\n * validateUrl('ftp://example.com'); // Throws error\n * ```\n */\nexport function validateUrl(url: string, allowedProtocols = ['http:', 'https:']): string {\n try {\n const parsed = new URL(url);\n if (!allowedProtocols.includes(parsed.protocol)) {\n throw new Error(\n `Protocol ${parsed.protocol} is not allowed. Allowed: ${allowedProtocols.join(', ')}`\n );\n }\n // Remove trailing slash for consistency\n return url.replace(/\\/$/, '');\n } catch (e) {\n if (e instanceof Error && e.message.includes('Protocol')) {\n throw e;\n }\n throw new Error(`Invalid URL: ${url}. ${e instanceof Error ? e.message : String(e)}`);\n }\n}\n\n/**\n * Validate an IPv4 address\n * Returns the validated IP or throws an error\n *\n * @param ip - The IP address to validate\n * @returns The validated IP address\n * @throws Error if IP format is invalid\n *\n * @example\n * ```typescript\n * validateIpAddress('192.168.1.1'); // Returns '192.168.1.1'\n * validateIpAddress('192.168.1.256'); // Throws error\n * ```\n */\nexport function validateIpAddress(ip: string): string {\n const pattern = /^(\\d{1,3}\\.){3}\\d{1,3}$/;\n if (!pattern.test(ip)) {\n throw new Error(`Invalid IP address format: ${ip}. Expected format: x.x.x.x`);\n }\n const octets = ip.split('.');\n for (const octet of octets) {\n const value = parseInt(octet, 10);\n if (value < 0 || value > 255) {\n throw new Error(`Invalid IP address: ${ip}. Each octet must be 0-255.`);\n }\n }\n return ip;\n}\n\n/**\n * Validate a file path for basic security\n * Checks for:\n * - Absolute path requirement\n * - Path traversal attempts (..)\n * - Forbidden shell metacharacters\n *\n * @param path - The path to validate\n * @throws Error if path fails validation\n *\n * @example\n * ```typescript\n * validatePath('/tmp/file.txt'); // OK\n * validatePath('/tmp/../etc/passwd'); // Throws error\n * validatePath('/tmp/$(whoami)'); // Throws error\n * ```\n */\nexport function validatePath(path: string): void {\n if (!path.startsWith('/')) {\n throw new Error(`Path must be absolute: ${path}`);\n }\n if (path.includes('..')) {\n throw new Error(`Path cannot contain ..: ${path}`);\n }\n // Check for shell metacharacters that could enable injection\n if (/[`$(){};|&<>()]/.test(path)) {\n throw new Error(`Path contains forbidden characters: ${path}`);\n }\n}\n\n/**\n * Validate a Unix username\n * Only allows alphanumeric characters and underscore\n * Cannot start with a dash or digit\n *\n * @param username - The username to validate\n * @throws Error if username fails validation\n *\n * @example\n * ```typescript\n * validateUsername('root'); // OK\n * validateUsername('valid_user'); // OK\n * validateUsername('-rf'); // Throws error\n * validateUsername('user;rm'); // Throws error\n * ```\n */\nexport function validateUsername(username: string): void {\n if (username.length === 0) {\n throw new Error('Username cannot be empty');\n }\n // Cannot start with dash (could be interpreted as option)\n if (username.startsWith('-')) {\n throw new Error(`Username starting with dash is not allowed: ${username}`);\n }\n // Only allow alphanumeric and underscore (POSIX username rules)\n if (!/^[a-zA-Z_][a-zA-Z0-9_-]*$/.test(username)) {\n throw new Error(`Invalid username format: ${username}. Only alphanumeric, underscore, and hyphen allowed.`);\n }\n}\n\n/**\n * Validate a chmod mode string\n * Accepts octal (e.g., '755', '0755') or symbolic modes (e.g., 'u+x', 'go-w')\n *\n * @param mode - The mode string to validate\n * @throws Error if mode fails validation\n *\n * @example\n * ```typescript\n * validateChmodMode('755'); // OK\n * validateChmodMode('u+x'); // OK\n * validateChmodMode('abc'); // Throws error\n * ```\n */\nexport function validateChmodMode(mode: string): void {\n if (mode.length === 0) {\n throw new Error('Mode cannot be empty');\n }\n // Octal mode: 3-4 digits (optional leading 0)\n if (/^[0-7]{3,4}$/.test(mode)) {\n return;\n }\n // Symbolic mode: [ugoa...][+-=][rwxXst...]\n // Multiple clauses separated by comma\n if (/^[ugoa]*[+-=][rwxXstugo]*([,][ugoa]*[+-=][rwxXstugo]*)*$/.test(mode)) {\n return;\n }\n throw new Error(`Invalid chmod mode: ${mode}. Expected octal (e.g., 755) or symbolic (e.g., u+x)`);\n}","/**\n * FileSystem - File system operations for sandbox\n */\n\nimport { existsSync, statSync, mkdtempSync, rmSync } from 'fs';\nimport { tmpdir } from 'os';\nimport { join, resolve, basename } from 'path';\nimport { initLogger } from '../logger.js';\nimport type { Observation, CommandResponse } from '../types/responses.js';\nimport type { ChownRequest, ChmodRequest } from '../types/requests.js';\nimport type { AbstractSandbox } from './client.js';\nimport { RunMode } from '../common/constants.js';\nimport { validatePath, validateUsername, validateChmodMode, shellQuote } from '../utils/shell.js';\n\nconst logger = initLogger('rock.sandbox.fs');\n\n/**\n * Create a tar.gz archive of a directory (simplified implementation)\n * Uses shell command `tar` for reliability\n */\nasync function createTarGz(sourceDir: string, outputPath: string): Promise<void> {\n const { spawn } = await import('child_process');\n \n return new Promise((resolve, reject) => {\n const tar = spawn('tar', ['-czf', outputPath, '-C', sourceDir, '.']);\n \n let stderr = '';\n tar.stderr.on('data', (data) => {\n stderr += data.toString();\n });\n \n tar.on('close', (code) => {\n if (code === 0) {\n resolve();\n } else {\n reject(new Error(`tar command failed with code ${code}: ${stderr}`));\n }\n });\n \n tar.on('error', (err) => {\n reject(err);\n });\n });\n}\n\n/**\n * Abstract file system interface\n */\nexport abstract class FileSystem {\n protected sandbox: AbstractSandbox;\n\n constructor(sandbox: AbstractSandbox) {\n this.sandbox = sandbox;\n }\n\n abstract chown(request: ChownRequest): Promise<{ success: boolean; message: string }>;\n abstract chmod(request: ChmodRequest): Promise<{ success: boolean; message: string }>;\n abstract uploadDir(\n sourceDir: string,\n targetDir: string,\n extractTimeout?: number\n ): Promise<Observation>;\n}\n\n/**\n * Linux file system implementation\n */\nexport class LinuxFileSystem extends FileSystem {\n constructor(sandbox: AbstractSandbox) {\n super(sandbox);\n }\n\n async chown(request: ChownRequest): Promise<{ success: boolean; message: string }> {\n const { paths, recursive, remoteUser } = request;\n\n if (!paths || paths.length === 0) {\n throw new Error('paths is empty');\n }\n\n // Validate username to prevent injection\n validateUsername(remoteUser);\n\n // Validate all paths\n for (const p of paths) {\n validatePath(p);\n }\n\n const command = ['chown'];\n if (recursive) {\n command.push('-R');\n }\n command.push(`${remoteUser}:${remoteUser}`, ...paths);\n\n logger.info(`chown command: ${command.join(' ')}`);\n\n const response: CommandResponse = await this.sandbox.execute({ command, timeout: 300 });\n if (response.exitCode !== 0) {\n return { success: false, message: JSON.stringify(response) };\n }\n return { success: true, message: JSON.stringify(response) };\n }\n\n async chmod(request: ChmodRequest): Promise<{ success: boolean; message: string }> {\n const { paths, recursive, mode } = request;\n\n if (!paths || paths.length === 0) {\n throw new Error('paths is empty');\n }\n\n // Validate mode to prevent injection\n validateChmodMode(mode);\n\n // Validate all paths\n for (const p of paths) {\n validatePath(p);\n }\n\n const command = ['chmod'];\n if (recursive) {\n command.push('-R');\n }\n command.push(mode, ...paths);\n\n logger.info(`chmod command: ${command.join(' ')}`);\n const response: CommandResponse = await this.sandbox.execute({ command, timeout: 300 });\n if (response.exitCode !== 0) {\n return { success: false, message: JSON.stringify(response) };\n }\n return { success: true, message: JSON.stringify(response) };\n }\n\n async uploadDir(\n sourceDir: string,\n targetDir: string,\n extractTimeout: number = 600\n ): Promise<Observation> {\n let localTarPath: string | null = null;\n let remoteTarPath: string | null = null;\n let session: string | null = null;\n\n try {\n // Validate source directory\n const src = resolve(sourceDir);\n if (!existsSync(src)) {\n return {\n output: '',\n exitCode: 1,\n failureReason: `source_dir not found: ${src}`,\n expectString: '',\n };\n }\n const stats = statSync(src);\n if (!stats.isDirectory()) {\n return {\n output: '',\n exitCode: 1,\n failureReason: `source_dir must be a directory: ${src}`,\n expectString: '',\n };\n }\n\n // Validate target directory for security\n try {\n validatePath(targetDir);\n } catch (e) {\n return {\n output: '',\n exitCode: 1,\n failureReason: e instanceof Error ? e.message : 'Invalid target directory',\n expectString: '',\n };\n }\n\n // Generate unique names using timestamp\n const ts = Date.now().toString();\n const tmpDir = mkdtempSync(join(tmpdir(), 'rock-upload-'));\n localTarPath = join(tmpDir, `rock_upload_${ts}.tar.gz`);\n remoteTarPath = `/tmp/rock_upload_${ts}.tar.gz`;\n session = `bash-${ts}`;\n\n logger.info(`uploadDir: ${src} -> ${targetDir}`);\n\n // Create bash session\n await this.sandbox.createSession({ session, startupSource: [], envEnable: false });\n\n // Check tar exists in sandbox\n const checkResult = await this.sandbox.arun('command -v tar >/dev/null 2>&1', {\n session,\n mode: RunMode.NORMAL,\n });\n if (checkResult.exitCode !== 0) {\n return {\n output: '',\n exitCode: 1,\n failureReason: 'sandbox has no tar command; cannot extract tarball',\n expectString: '',\n };\n }\n\n // Pack locally\n try {\n await createTarGz(src, localTarPath);\n } catch (e) {\n throw new Error(`tar pack failed: ${e}`);\n }\n\n // Upload tarball\n const uploadResponse = await this.sandbox.upload({\n sourcePath: localTarPath,\n targetPath: remoteTarPath,\n });\n if (!uploadResponse.success) {\n return {\n output: '',\n exitCode: 1,\n failureReason: `tar upload failed: ${uploadResponse.message}`,\n expectString: '',\n };\n }\n\n // Extract in sandbox using properly escaped paths\n const escapedTargetDir = shellQuote(targetDir);\n const escapedRemoteTar = shellQuote(remoteTarPath);\n const extractCmd = `rm -rf ${escapedTargetDir} && mkdir -p ${escapedTargetDir} && tar -xzf ${escapedRemoteTar} -C ${escapedTargetDir}`;\n const extractResult = await this.sandbox.arun(`bash -c ${shellQuote(extractCmd)}`, {\n session,\n mode: RunMode.NOHUP,\n waitTimeout: extractTimeout,\n });\n\n if (extractResult.exitCode !== 0) {\n return {\n output: '',\n exitCode: 1,\n failureReason: `tar extract failed: ${extractResult.output}`,\n expectString: '',\n };\n }\n\n // Cleanup remote tarball\n try {\n await this.sandbox.execute({ command: ['rm', '-f', remoteTarPath], timeout: 30 });\n } catch {\n // Ignore cleanup errors\n }\n\n return {\n output: `uploaded ${src} -> ${targetDir} via tar`,\n exitCode: 0,\n failureReason: '',\n expectString: '',\n };\n } catch (e) {\n return {\n output: '',\n exitCode: 1,\n failureReason: `upload_dir unexpected error: ${e}`,\n expectString: '',\n };\n } finally {\n // Cleanup local tarball and temp directory\n try {\n if (localTarPath) {\n const tmpDir = basename(localTarPath).replace(/\\.tar\\.gz$/, '');\n rmSync(join(tmpdir(), `rock-upload-${tmpDir.split('_').pop()}`), { recursive: true, force: true });\n }\n } catch {\n // Ignore cleanup errors\n }\n }\n }\n}\n","/**\n * Network - Network management for sandbox\n */\n\nimport { initLogger } from '../logger.js';\nimport type { Observation } from '../types/responses.js';\nimport type { Sandbox } from './client.js';\nimport { validateUrl, validateIpAddress, shellQuote } from '../utils/shell.js';\n\nconst logger = initLogger('rock.sandbox.network');\n\n/**\n * Speedup type enum\n */\nexport enum SpeedupType {\n APT = 'apt',\n PIP = 'pip',\n GITHUB = 'github',\n}\n\n/**\n * Network management for sandbox\n */\nexport class Network {\n private sandbox: Sandbox;\n\n constructor(sandbox: Sandbox) {\n this.sandbox = sandbox;\n }\n\n /**\n * Configure acceleration for package managers or network resources\n *\n * @param speedupType - Type of speedup configuration\n * @param speedupValue - Speedup value (mirror URL or IP address)\n * @param timeout - Execution timeout in seconds\n * @returns Observation with execution result\n */\n async speedup(\n speedupType: SpeedupType,\n speedupValue: string,\n timeout: number = 300\n ): Promise<Observation> {\n const sandboxId = this.sandbox.getSandboxId();\n logger.info(\n `[${sandboxId}] Configuring ${speedupType} speedup: ${speedupValue}`\n );\n\n // Validate input based on type\n let validatedValue: string;\n switch (speedupType) {\n case SpeedupType.APT:\n case SpeedupType.PIP:\n validatedValue = validateUrl(speedupValue);\n break;\n case SpeedupType.GITHUB:\n validatedValue = validateIpAddress(speedupValue);\n break;\n default:\n throw new Error(`Unsupported speedup type: ${speedupType}`);\n }\n\n // Generate script content\n const scriptContent = this.generateSpeedupScript(speedupType, validatedValue);\n\n // Execute script using the process module (uploads script file and executes)\n const result = await this.sandbox.getProcess().executeScript({\n scriptContent,\n waitTimeout: timeout,\n });\n\n return result;\n }\n\n /**\n * Generate speedup script content based on type\n */\n private generateSpeedupScript(speedupType: SpeedupType, value: string): string {\n switch (speedupType) {\n case SpeedupType.APT:\n return this.buildAptSpeedupScript(value);\n case SpeedupType.PIP:\n return this.buildPipSpeedupScript(value);\n case SpeedupType.GITHUB:\n return this.buildGithubSpeedupScript(value);\n default:\n throw new Error(`Unsupported speedup type: ${speedupType}`);\n }\n }\n\n /**\n * Build APT speedup script\n * Uses script file approach for safety\n */\n private buildAptSpeedupScript(mirrorUrl: string): string {\n return `#!/bin/bash\ndetect_system_and_version() {\n if [ -f /etc/debian_version ]; then\n . /etc/os-release\n if [ \"$ID\" = \"ubuntu\" ]; then\n echo \"ubuntu:$VERSION_CODENAME\"\n elif [ \"$ID\" = \"debian\" ]; then\n echo \"debian:$VERSION_CODENAME\"\n else\n echo \"unknown:\"\n fi\n else\n echo \"unknown:\"\n fi\n}\n\nSYSTEM_INFO=$(detect_system_and_version)\nSYSTEM=$(echo \"$SYSTEM_INFO\" | cut -d: -f1)\nCODENAME=$(echo \"$SYSTEM_INFO\" | cut -d: -f2)\necho \"System type: $SYSTEM, Version codename: $CODENAME\"\n\n# Backup original sources file\nif [ ! -f /etc/apt/sources.list.backup ]; then\n cp /etc/apt/sources.list /etc/apt/sources.list.backup\nfi\n\nif [ \"$SYSTEM\" = \"debian\" ]; then\n if [ -z \"$CODENAME\" ]; then\n CODENAME=\"bookworm\"\n fi\n cat > /etc/apt/sources.list <<EOF\ndeb ${mirrorUrl}/debian/ \\${CODENAME} main non-free non-free-firmware contrib\ndeb ${mirrorUrl}/debian-security/ \\${CODENAME}-security main\ndeb ${mirrorUrl}/debian/ \\${CODENAME}-updates main non-free non-free-firmware contrib\nEOF\nelif [ \"$SYSTEM\" = \"ubuntu\" ]; then\n if [ -z \"$CODENAME\" ]; then\n if [ -f /etc/os-release ]; then\n VERSION_ID=$(grep VERSION_ID /etc/os-release | cut -d'\"' -f2)\n case \"$VERSION_ID\" in\n \"24.04\") CODENAME=\"noble\" ;;\n \"22.04\") CODENAME=\"jammy\" ;;\n \"20.04\") CODENAME=\"focal\" ;;\n *) CODENAME=\"noble\" ;;\n esac\n else\n CODENAME=\"noble\"\n fi\n fi\n cat > /etc/apt/sources.list <<EOF\ndeb ${mirrorUrl}/ubuntu/ $CODENAME main restricted universe multiverse\ndeb ${mirrorUrl}/ubuntu/ $CODENAME-security main restricted universe multiverse\ndeb ${mirrorUrl}/ubuntu/ $CODENAME-updates main restricted universe multiverse\ndeb ${mirrorUrl}/ubuntu/ $CODENAME-backports main restricted universe multiverse\nEOF\nfi\n\n# Clean up other source files\nrm -rf /etc/apt/sources.list.d\n\n# Clean APT cache and update\napt-get clean\nrm -rf /var/lib/apt/lists/*\necho \">>> APT source configuration completed\"\n`;\n }\n\n /**\n * Build PIP speedup script\n * Uses script file approach for safety\n */\n private buildPipSpeedupScript(mirrorUrl: string): string {\n const parsed = new URL(mirrorUrl);\n const trustedHost = parsed.host;\n const indexUrl = `${mirrorUrl}/pypi/simple/`;\n\n return `#!/bin/bash\necho \">>> Configuring pip source...\"\n\n# Configure for root user\nmkdir -p /root/.pip\ncat > /root/.pip/pip.conf <<EOF\n[global]\nindex-url = ${indexUrl}\ntrusted-host = ${trustedHost}\ntimeout = 120\n\n[install]\ntrusted-host = ${trustedHost}\nEOF\n\n# Configure for other existing users\nfor home_dir in /home/*; do\n if [ -d \"$home_dir\" ]; then\n username=$(basename \"$home_dir\")\n mkdir -p \"$home_dir/.pip\"\n cat > \"$home_dir/.pip/pip.conf\" <<EOF\n[global]\nindex-url = ${indexUrl}\ntrusted-host = ${trustedHost}\ntimeout = 120\n\n[install]\ntrusted-host = ${trustedHost}\nEOF\n chown -R \"$username:$username\" \"$home_dir/.pip\" 2>/dev/null || true\n fi\ndone\n\necho \">>> pip source configuration completed\"\n`;\n }\n\n /**\n * Build GitHub speedup script\n * Uses script file approach for safety\n */\n private buildGithubSpeedupScript(ipAddress: string): string {\n return `#!/bin/bash\necho \">>> Configuring GitHub hosts for github.com acceleration...\"\n\n# Backup original hosts file if not already backed up\nif [ ! -f /etc/hosts.backup ]; then\n cp /etc/hosts /etc/hosts.backup\n echo \"Hosts file backed up to /etc/hosts.backup\"\nfi\n\n# Remove existing github.com entry if any\nsed -i '/github\\.com$/d' /etc/hosts\n\n# Add new github.com hosts entry\necho \"${ipAddress} github.com\" | tee -a /etc/hosts\n\necho \">>> GitHub hosts configuration completed\"\necho \"Current github.com entry in /etc/hosts:\"\ngrep 'github\\.com$' /etc/hosts || echo \"No github.com entry found\"\n`;\n }\n}","/**\n * Process - Process management for sandbox execution\n */\n\nimport { initLogger } from '../logger.js';\nimport type { Observation } from '../types/responses.js';\nimport type { Sandbox } from './client.js';\n\nconst logger = initLogger('rock.sandbox.process');\n\n/**\n * Process management for sandbox execution\n */\nexport class Process {\n private sandbox: Sandbox;\n\n constructor(sandbox: Sandbox) {\n this.sandbox = sandbox;\n }\n\n /**\n * Execute a script in the sandbox\n *\n * @param scriptContent - The script content to execute\n * @param scriptName - Optional custom script name\n * @param waitTimeout - Maximum time to wait for script completion\n * @param waitInterval - Interval between process checks\n * @param cleanup - Whether to delete the script file after execution\n * @returns Observation with execution result\n */\n async executeScript(options: {\n scriptContent: string;\n scriptName?: string;\n waitTimeout?: number;\n waitInterval?: number;\n cleanup?: boolean;\n }): Promise<Observation> {\n const {\n scriptContent,\n scriptName,\n waitTimeout = 300,\n cleanup = true,\n } = options;\n\n const sandboxId = this.sandbox.getSandboxId();\n const timestamp = Date.now();\n const name = scriptName ?? `script_${timestamp}.sh`;\n const scriptPath = `/tmp/${name}`;\n\n try {\n // Upload script\n logger.info(`[${sandboxId}] Uploading script to ${scriptPath}`);\n const writeResult = await this.sandbox.writeFile({\n content: scriptContent,\n path: scriptPath,\n });\n\n if (!writeResult.success) {\n const errorMsg = `Failed to upload script: ${writeResult.message}`;\n logger.error(errorMsg);\n return { output: errorMsg, exitCode: 1, failureReason: 'Script upload failed', expectString: '' };\n }\n\n // Execute script\n logger.info(`[${sandboxId}] Executing script: ${scriptPath} (timeout=${waitTimeout}s)`);\n const result = await this.sandbox.arun(`bash ${scriptPath}`, {\n mode: 'nohup',\n waitTimeout,\n });\n\n return result;\n } catch (e) {\n const errorMsg = `Script execution failed: ${e}`;\n logger.error(errorMsg);\n return { output: errorMsg, exitCode: 1, failureReason: errorMsg, expectString: '' };\n } finally {\n // Cleanup script if requested\n if (cleanup) {\n try {\n logger.info(`[${sandboxId}] Cleaning up script: ${scriptPath}`);\n await this.sandbox.execute({ command: ['rm', '-f', scriptPath], timeout: 30 });\n } catch (e) {\n logger.warn(`Failed to cleanup script ${scriptPath}: ${e}`);\n }\n }\n }\n }\n}\n","/**\n * RemoteUser - Remote user management for sandbox\n */\n\nimport { initLogger } from '../logger.js';\nimport type { CommandResponse } from '../types/responses.js';\nimport type { AbstractSandbox } from './client.js';\n\nconst logger = initLogger('rock.sandbox.user');\n\n/**\n * Abstract remote user interface\n */\nexport abstract class RemoteUser {\n protected sandbox: AbstractSandbox;\n protected currentUser: string = 'root';\n\n constructor(sandbox: AbstractSandbox) {\n this.sandbox = sandbox;\n }\n\n getCurrentUser(): string {\n return this.currentUser;\n }\n\n abstract createRemoteUser(userName: string): Promise<boolean>;\n abstract isUserExist(userName: string): Promise<boolean>;\n}\n\n/**\n * Linux remote user implementation\n */\nexport class LinuxRemoteUser extends RemoteUser {\n constructor(sandbox: AbstractSandbox) {\n super(sandbox);\n }\n\n async createRemoteUser(userName: string): Promise<boolean> {\n try {\n if (await this.isUserExist(userName)) {\n return true;\n }\n\n const response: CommandResponse = await this.sandbox.execute({\n command: ['useradd', '-m', '-s', '/bin/bash', userName],\n timeout: 30,\n });\n\n logger.info(`user add execute response: ${JSON.stringify(response)}`);\n\n if (response.exitCode !== 0) {\n return false;\n }\n\n return true;\n } catch (e) {\n logger.error('create_remote_user failed', e as Error);\n throw e;\n }\n }\n\n async isUserExist(userName: string): Promise<boolean> {\n try {\n const response: CommandResponse = await this.sandbox.execute({\n command: ['id', userName],\n timeout: 30,\n });\n\n if (response.exitCode === 0) {\n logger.info(`user ${userName} already exists`);\n return true;\n }\n return false;\n } catch (e) {\n logger.info(`is_user_exist exception: ${e}`);\n throw e;\n }\n }\n}\n","/**\n * Sandbox utilities\n */\n\nimport { initLogger } from '../logger.js';\nimport { sleep } from '../utils/retry.js';\nimport type { Sandbox } from './client.js';\nimport type { RunModeType } from '../common/constants.js';\nimport type { Observation } from '../types/responses.js';\n\nconst logger = initLogger('rock.sandbox.utils');\n\n/**\n * Get the caller's module name for logger naming\n */\nfunction getCallerLoggerName(): string {\n const stack = new Error().stack;\n if (!stack) return 'unknown';\n\n const lines = stack.split('\\n');\n // Skip first two lines (Error and this function)\n for (let i = 2; i < lines.length; i++) {\n const line = lines[i];\n if (line && !line.includes('utils.ts')) {\n const match = line.match(/at\\s+(?:(?:async\\s+)?(?:\\w+\\.)?(\\w+)|(\\w+))/);\n if (match) {\n return match[1] ?? match[2] ?? 'unknown';\n }\n }\n }\n return 'unknown';\n}\n\n/**\n * Decorator to add timing and logging to functions\n */\nexport function withTimeLogging(operationName: string): MethodDecorator {\n return function (\n target: unknown,\n propertyKey: string | symbol,\n descriptor: PropertyDescriptor\n ): PropertyDescriptor {\n const originalMethod = descriptor.value;\n\n descriptor.value = async function (...args: unknown[]): Promise<unknown> {\n const startTime = Date.now();\n const name = getCallerLoggerName();\n const log = initLogger(name);\n\n log.debug(`${operationName} started`);\n\n try {\n const result = await originalMethod.apply(this, args);\n const elapsed = Date.now() - startTime;\n log.info(`${operationName} completed (elapsed: ${elapsed / 1000}s)`);\n return result;\n } catch (e) {\n const elapsed = Date.now() - startTime;\n log.error(`${operationName} failed: ${e} (elapsed: ${elapsed / 1000}s)`);\n throw e;\n }\n };\n\n return descriptor;\n };\n}\n\n/**\n * Run command with retry\n */\nexport async function arunWithRetry(\n sandbox: Sandbox,\n cmd: string,\n session: string,\n mode: RunModeType,\n options: {\n waitTimeout?: number;\n waitInterval?: number;\n maxAttempts?: number;\n errorMsg?: string;\n } = {}\n): Promise<Observation> {\n const {\n waitTimeout = 300,\n waitInterval = 10,\n maxAttempts = 3,\n errorMsg = 'Command failed',\n } = options;\n\n let lastError: Error | null = null;\n let currentDelay = 5000;\n\n for (let attempt = 1; attempt <= maxAttempts; attempt++) {\n try {\n const result = await sandbox.arun(cmd, {\n session,\n mode,\n waitTimeout,\n waitInterval,\n });\n\n if (result.exitCode !== 0) {\n throw new Error(\n `${errorMsg} with exit code: ${result.exitCode}, output: ${result.output}`\n );\n }\n return result;\n } catch (e) {\n lastError = e instanceof Error ? e : new Error(String(e));\n logger.warn(`Attempt ${attempt}/${maxAttempts} failed: ${lastError.message}`);\n\n if (attempt < maxAttempts) {\n await sleep(currentDelay);\n currentDelay *= 2;\n }\n }\n }\n\n throw lastError ?? new Error(`${errorMsg}: all attempts failed`);\n}\n\n/**\n * Re-export extractNohupPid from utils/http.ts to avoid duplication\n */\nexport { extractNohupPid } from '../utils/http.js';\n","/**\n * Sandbox client - Core sandbox management\n */\n\nimport { randomUUID } from 'crypto';\nimport { initLogger } from '../logger.js';\nimport { raiseForCode, InternalServerRockError } from '../common/exceptions.js';\nimport { HttpUtils } from '../utils/http.js';\nimport { sleep } from '../utils/retry.js';\nimport {\n SandboxConfig,\n SandboxGroupConfig,\n createSandboxConfig,\n createSandboxGroupConfig,\n} from './config.js';\nimport { Deploy } from './deploy.js';\nimport { LinuxFileSystem } from './file_system.js';\nimport { Network } from './network.js';\nimport { Process } from './process.js';\nimport { LinuxRemoteUser } from './remote_user.js';\nimport { extractNohupPid } from './utils.js';\nimport { RunModeType, RunMode as RunModeEnum } from '../common/constants.js';\nexport type { RunModeType };\nexport { RunModeEnum as RunMode };\nimport {\n ObservationSchema,\n CommandResponseSchema,\n IsAliveResponseSchema,\n SandboxStatusResponseSchema,\n CreateSessionResponseSchema,\n WriteFileResponseSchema,\n ReadFileResponseSchema,\n UploadResponseSchema,\n CloseSessionResponseSchema,\n} from '../types/responses.js';\nimport type {\n Observation,\n CommandResponse,\n IsAliveResponse,\n SandboxStatusResponse,\n CreateSessionResponse,\n WriteFileResponse,\n ReadFileResponse,\n UploadResponse,\n CloseSessionResponse,\n} from '../types/responses.js';\nimport type {\n Command,\n CreateBashSessionRequest,\n WriteFileRequest,\n ReadFileRequest,\n UploadRequest,\n CloseSessionRequest,\n} from '../types/requests.js';\n\nconst logger = initLogger('rock.sandbox');\n\n/**\n * Abstract sandbox interface\n */\nexport abstract class AbstractSandbox {\n abstract isAlive(): Promise<IsAliveResponse>;\n abstract createSession(request: CreateBashSessionRequest): Promise<CreateSessionResponse>;\n abstract execute(command: Command): Promise<CommandResponse>;\n abstract readFile(request: ReadFileRequest): Promise<ReadFileResponse>;\n abstract writeFile(request: WriteFileRequest): Promise<WriteFileResponse>;\n abstract upload(request: UploadRequest): Promise<UploadResponse>;\n abstract closeSession(request: CloseSessionRequest): Promise<CloseSessionResponse>;\n abstract arun(\n cmd: string,\n options?: {\n session?: string;\n mode?: RunModeType;\n timeout?: number;\n waitTimeout?: number;\n waitInterval?: number;\n responseLimitedBytesInNohup?: number;\n ignoreOutput?: boolean;\n outputFile?: string;\n }\n ): Promise<Observation>;\n abstract close(): Promise<void>;\n}\n\n/**\n * Sandbox - Main sandbox client\n */\nexport class Sandbox extends AbstractSandbox {\n private config: SandboxConfig;\n private url: string;\n private routeKey: string;\n private sandboxId: string | null = null;\n private hostName: string | null = null;\n private hostIp: string | null = null;\n private cluster: string;\n\n // Sub-components\n private deploy: Deploy;\n private fs: LinuxFileSystem;\n private network: Network;\n private process: Process;\n private remoteUser: LinuxRemoteUser;\n\n constructor(config: Partial<SandboxConfig> = {}) {\n super();\n this.config = createSandboxConfig(config);\n this.url = `${this.config.baseUrl}/apis/envs/sandbox/v1`;\n this.routeKey = this.config.routeKey ?? randomUUID().replace(/-/g, '');\n this.cluster = this.config.cluster;\n\n this.deploy = new Deploy(this);\n this.fs = new LinuxFileSystem(this);\n this.network = new Network(this);\n this.process = new Process(this);\n this.remoteUser = new LinuxRemoteUser(this);\n }\n\n // Getters\n getSandboxId(): string {\n if (!this.sandboxId) {\n throw new Error('Sandbox not started');\n }\n return this.sandboxId;\n }\n\n getHostName(): string | null {\n return this.hostName;\n }\n\n getHostIp(): string | null {\n return this.hostIp;\n }\n\n getCluster(): string {\n return this.cluster;\n }\n\n getUrl(): string {\n return this.url;\n }\n\n getFs(): LinuxFileSystem {\n return this.fs;\n }\n\n getNetwork(): Network {\n return this.network;\n }\n\n getProcess(): Process {\n return this.process;\n }\n\n getRemoteUser(): LinuxRemoteUser {\n return this.remoteUser;\n }\n\n getDeploy(): Deploy {\n return this.deploy;\n }\n\n getConfig(): SandboxConfig {\n return this.config;\n }\n\n // Build headers\n private buildHeaders(): Record<string, string> {\n const headers: Record<string, string> = {\n 'ROUTE-KEY': this.routeKey,\n 'X-Cluster': this.cluster,\n };\n\n if (this.config.extraHeaders) {\n Object.assign(headers, this.config.extraHeaders);\n }\n\n this.addUserDefinedTags(headers);\n\n return headers;\n }\n\n private addUserDefinedTags(headers: Record<string, string>): void {\n if (this.config.userId) {\n headers['X-User-Id'] = this.config.userId;\n }\n if (this.config.experimentId) {\n headers['X-Experiment-Id'] = this.config.experimentId;\n }\n if (this.config.namespace) {\n headers['X-Namespace'] = this.config.namespace;\n }\n }\n\n // Lifecycle methods\n async start(): Promise<void> {\n logger.info('Starting sandbox...');\n const url = `${this.url}/start_async`;\n const headers = this.buildHeaders();\n // Use camelCase - HTTP layer will convert to snake_case\n const data = {\n image: this.config.image,\n autoClearTime: this.config.autoClearSeconds / 60,\n autoClearTimeMinutes: this.config.autoClearSeconds / 60,\n startupTimeout: this.config.startupTimeout,\n memory: this.config.memory,\n cpus: this.config.cpus,\n };\n\n logger.debug(`Calling start_async API: ${url}`);\n logger.debug(`Request data: ${JSON.stringify(data)}`);\n\n const response = await HttpUtils.post<{ sandboxId?: string; hostName?: string; hostIp?: string; code?: number }>(\n url,\n headers,\n data\n );\n\n logger.debug(`Start sandbox response: ${JSON.stringify(response)}`);\n\n if (response.status !== 'Success') {\n // Check for error code and throw appropriate exception\n const code = response.result?.code;\n raiseForCode(code, `Failed to start sandbox: ${JSON.stringify(response)}`);\n // If no error code, throw generic error\n throw new Error(`Failed to start sandbox: ${JSON.stringify(response)}`);\n }\n\n // Response is already camelCase (converted by HTTP layer)\n this.sandboxId = response.result?.sandboxId ?? null;\n this.hostName = response.result?.hostName ?? null;\n this.hostIp = response.result?.hostIp ?? null;\n\n logger.info(`Sandbox ID: ${this.sandboxId}`);\n\n // Wait for sandbox to be alive\n // First, wait a bit for the backend to process the start request\n await sleep(2000);\n\n const startTime = Date.now();\n const checkTimeout = 10000; // 10s timeout for each status check\n const checkInterval = 3000; // 3s between checks\n\n while (Date.now() - startTime < this.config.startupTimeout * 1000) {\n try {\n logger.info(`Checking status... (elapsed: ${Math.round((Date.now() - startTime) / 1000)}s)`);\n // Use Promise.race to implement timeout for status check\n const statusPromise = this.getStatus();\n const timeoutPromise = new Promise<null>((_, reject) =>\n setTimeout(() => reject(new Error('Status check timeout')), checkTimeout)\n );\n\n const status = await Promise.race([statusPromise, timeoutPromise]);\n if (status && status.isAlive) {\n logger.info('Sandbox is alive');\n return;\n }\n } catch (e) {\n // Status check may fail temporarily during startup, continue waiting\n logger.debug(`Status check failed (will retry): ${e}`);\n }\n await sleep(checkInterval);\n }\n\n throw new InternalServerRockError(\n `Failed to start sandbox within ${this.config.startupTimeout}s, sandbox: ${this.toString()}`\n );\n }\n\n async stop(): Promise<void> {\n if (!this.sandboxId) return;\n\n try {\n const url = `${this.url}/stop`;\n const headers = this.buildHeaders();\n await HttpUtils.post(url, headers, { sandboxId: this.sandboxId });\n } catch (e) {\n logger.warn(`Failed to stop sandbox, IGNORE: ${e}`);\n }\n }\n\n async isAlive(): Promise<IsAliveResponse> {\n try {\n const status = await this.getStatus();\n // Validate response with Zod schema\n return IsAliveResponseSchema.parse({\n isAlive: status.isAlive,\n message: status.hostName ?? '',\n });\n } catch (e) {\n throw new Error(`Failed to get is alive: ${e}`);\n }\n }\n\n async getStatus(): Promise<SandboxStatusResponse> {\n const url = `${this.url}/get_status?sandbox_id=${this.sandboxId}`;\n const headers = this.buildHeaders();\n const response = await HttpUtils.get<SandboxStatusResponse & { code?: number }>(url, headers);\n\n if (response.status !== 'Success') {\n const errorDetail = response.error ? `, error=${response.error}` : '';\n const code = response.result?.code;\n raiseForCode(code, `Failed to get status: status=${response.status}${errorDetail}, result=${JSON.stringify(response.result)}`);\n throw new Error(`Failed to get status: status=${response.status}${errorDetail}, result=${JSON.stringify(response.result)}`);\n }\n\n // Validate response with Zod schema (similar to Python: SandboxStatusResponse(**result))\n const result = SandboxStatusResponseSchema.parse(response.result);\n\n // Extract additional info from response headers (backward compatible)\n result.cluster = response.headers['x-rock-gateway-target-cluster'] || this.config.cluster || 'N/A';\n result.requestId = response.headers['x-request-id'] || response.headers['request-id'] || 'N/A';\n result.eagleeyeTraceid = response.headers['eagleeye-traceid'] || 'N/A';\n\n return result;\n }\n\n // Command execution\n async execute(command: Command): Promise<CommandResponse> {\n const url = `${this.url}/execute`;\n const headers = this.buildHeaders();\n const data = {\n command: command.command,\n sandboxId: this.sandboxId,\n timeout: command.timeout,\n cwd: command.cwd,\n env: command.env,\n };\n\n const response = await HttpUtils.post<CommandResponse & { code?: number }>(\n url,\n headers,\n data\n );\n\n if (response.status !== 'Success') {\n const errorDetail = response.error ? `, error=${response.error}` : '';\n const code = response.result?.code;\n raiseForCode(code, `Failed to execute command: status=${response.status}${errorDetail}, result=${JSON.stringify(response.result)}`);\n throw new Error(`Failed to execute command: status=${response.status}${errorDetail}, result=${JSON.stringify(response.result)}`);\n }\n\n // Validate response with Zod schema (similar to Python: CommandResponse(**result))\n return CommandResponseSchema.parse(response.result);\n }\n\n // Session management\n async createSession(request: CreateBashSessionRequest): Promise<CreateSessionResponse> {\n const url = `${this.url}/create_session`;\n const headers = this.buildHeaders();\n const data = {\n sandboxId: this.sandboxId,\n ...request,\n };\n\n const response = await HttpUtils.post<CreateSessionResponse & { code?: number }>(\n url,\n headers,\n data\n );\n\n if (response.status !== 'Success') {\n const errorDetail = response.error ? `, error=${response.error}` : '';\n const code = response.result?.code;\n raiseForCode(code, `Failed to create session: status=${response.status}${errorDetail}, result=${JSON.stringify(response.result)}`);\n throw new Error(`Failed to create session: status=${response.status}${errorDetail}, result=${JSON.stringify(response.result)}`);\n }\n\n // Validate response with Zod schema (similar to Python: CreateBashSessionResponse(**result))\n return CreateSessionResponseSchema.parse(response.result);\n }\n\n async closeSession(request: CloseSessionRequest): Promise<CloseSessionResponse> {\n const url = `${this.url}/close_session`;\n const headers = this.buildHeaders();\n const data = {\n sandboxId: this.sandboxId,\n ...request,\n };\n\n const response = await HttpUtils.post<CloseSessionResponse & { code?: number }>(\n url,\n headers,\n data\n );\n\n if (response.status !== 'Success') {\n const errorDetail = response.error ? `, error=${response.error}` : '';\n const code = response.result?.code;\n raiseForCode(code, `Failed to close session: status=${response.status}${errorDetail}, result=${JSON.stringify(response.result)}`);\n throw new Error(`Failed to close session: status=${response.status}${errorDetail}, result=${JSON.stringify(response.result)}`);\n }\n\n // Validate response with Zod schema (similar to Python: CloseSessionResponse(**result))\n return CloseSessionResponseSchema.parse(response.result ?? {});\n }\n\n // Run command in session\n async arun(\n cmd: string,\n options: {\n session?: string;\n mode?: RunModeType;\n timeout?: number;\n waitTimeout?: number;\n waitInterval?: number;\n responseLimitedBytesInNohup?: number;\n ignoreOutput?: boolean;\n outputFile?: string;\n } = {}\n ): Promise<Observation> {\n const {\n session,\n mode = 'normal',\n timeout = 300,\n } = options;\n\n const sessionName = session ?? 'default';\n\n if (mode === 'normal') {\n // Run command directly without pre-creating session (matches Python SDK behavior)\n return this.runInSession({ command: cmd, session: sessionName, timeout });\n }\n\n return this.arunWithNohup(cmd, options);\n }\n\n private async runInSession(action: { command: string; session: string; timeout?: number }): Promise<Observation> {\n const url = `${this.url}/run_in_session`;\n const headers = this.buildHeaders();\n const data = {\n actionType: 'bash',\n session: action.session,\n command: action.command,\n sandboxId: this.sandboxId,\n timeout: action.timeout,\n };\n\n // Convert timeout from seconds to milliseconds for axios\n const timeoutMs = action.timeout ? action.timeout * 1000 : undefined;\n const response = await HttpUtils.post<Observation & { code?: number }>(\n url,\n headers,\n data,\n timeoutMs\n );\n\n if (response.status !== 'Success') {\n const errorDetail = response.error ? `, error=${response.error}` : '';\n const code = response.result?.code;\n raiseForCode(code, `Failed to run in session: status=${response.status}${errorDetail}, result=${JSON.stringify(response.result)}`);\n throw new Error(`Failed to run in session: status=${response.status}${errorDetail}, result=${JSON.stringify(response.result)}`);\n }\n\n // Validate response with Zod schema (similar to Python: Observation(**result))\n return ObservationSchema.parse(response.result);\n }\n\n private async arunWithNohup(\n cmd: string,\n options: {\n session?: string;\n waitTimeout?: number;\n waitInterval?: number;\n responseLimitedBytesInNohup?: number;\n ignoreOutput?: boolean;\n outputFile?: string;\n }\n ): Promise<Observation> {\n const {\n session,\n waitTimeout = 300,\n waitInterval = 10,\n responseLimitedBytesInNohup,\n ignoreOutput = false,\n outputFile,\n } = options;\n\n const timestamp = Date.now();\n \n // Only create session if not provided (matches Python SDK behavior)\n let tmpSession: string;\n if (session === undefined || session === null) {\n tmpSession = `bash-${timestamp}`;\n await this.createSession({ session: tmpSession, startupSource: [], envEnable: false });\n } else {\n tmpSession = session;\n }\n\n const tmpFile = outputFile ?? `/tmp/tmp_${timestamp}.out`;\n\n // Start nohup process\n const nohupCommand = `nohup ${cmd} < /dev/null > ${tmpFile} 2>&1 & echo __ROCK_PID_START__$!__ROCK_PID_END__;disown`;\n const response = await this.runInSession({\n command: nohupCommand,\n session: tmpSession,\n timeout: 30,\n });\n\n // Check if nohup command failed (non-zero exit code and not undefined)\n if (response.exitCode !== undefined && response.exitCode !== 0) {\n return response;\n }\n\n // Extract PID\n const pid = extractNohupPid(response.output);\n if (!pid) {\n return {\n output: 'Failed to submit command, nohup failed to extract PID',\n exitCode: 1,\n failureReason: 'PID extraction failed',\n expectString: '',\n };\n }\n\n // Wait for process completion\n const success = await this.waitForProcessCompletion(pid, tmpSession, waitTimeout, waitInterval);\n\n // Read output\n if (ignoreOutput) {\n return {\n output: `Command executed in nohup mode. Output file: ${tmpFile}`,\n exitCode: success ? 0 : 1,\n failureReason: success ? '' : 'Process did not complete successfully',\n expectString: '',\n };\n }\n\n const readCmd = responseLimitedBytesInNohup\n ? `head -c ${responseLimitedBytesInNohup} ${tmpFile}`\n : `cat ${tmpFile}`;\n\n const outputResult = await this.runInSession({\n command: readCmd,\n session: tmpSession,\n });\n\n return {\n output: outputResult.output,\n exitCode: success ? 0 : 1,\n failureReason: success ? '' : 'Process did not complete successfully',\n expectString: '',\n };\n }\n\n private async waitForProcessCompletion(\n pid: number,\n session: string,\n waitTimeout: number,\n waitInterval: number\n ): Promise<boolean> {\n const startTime = Date.now();\n const checkInterval = Math.max(1, waitInterval);\n const effectiveTimeout = Math.min(checkInterval * 2, waitTimeout);\n\n while (Date.now() - startTime < waitTimeout * 1000) {\n try {\n const result = await this.runInSession({\n command: `kill -0 ${pid}`,\n session,\n timeout: effectiveTimeout,\n });\n // If exitCode is 0, process is still running\n if (result.exitCode === 0) {\n await sleep(checkInterval * 1000);\n } else {\n // Process does not exist - completed\n return true;\n }\n } catch {\n // Process does not exist - completed\n return true;\n }\n }\n\n return false; // Timeout\n }\n\n // File operations\n async writeFile(request: WriteFileRequest): Promise<WriteFileResponse> {\n const url = `${this.url}/write_file`;\n const headers = this.buildHeaders();\n const data = {\n content: request.content,\n path: request.path,\n sandboxId: this.sandboxId,\n };\n\n const response = await HttpUtils.post<void>(url, headers, data);\n\n if (response.status !== 'Success') {\n return { success: false, message: `Failed to write file ${request.path}` };\n }\n\n return { success: true, message: `Successfully write content to file ${request.path}` };\n }\n\n async readFile(request: ReadFileRequest): Promise<ReadFileResponse> {\n const url = `${this.url}/read_file`;\n const headers = this.buildHeaders();\n const data = {\n path: request.path,\n encoding: request.encoding,\n errors: request.errors,\n sandboxId: this.sandboxId,\n };\n\n const response = await HttpUtils.post<{ content: string }>(\n url,\n headers,\n data\n );\n\n // Validate response with Zod schema (similar to Python: ReadFileResponse(**result))\n return ReadFileResponseSchema.parse(response.result ?? {});\n }\n\n // Upload\n async upload(request: UploadRequest): Promise<UploadResponse> {\n return this.uploadByPath(request.sourcePath, request.targetPath);\n }\n\n async uploadByPath(sourcePath: string, targetPath: string): Promise<UploadResponse> {\n const url = `${this.url}/upload`;\n const headers = this.buildHeaders();\n\n try {\n const fs = await import('fs/promises');\n \n // Use async access instead of sync existsSync\n try {\n await fs.access(sourcePath);\n } catch {\n return { success: false, message: `File not found: ${sourcePath}` };\n }\n\n // Use async readFile instead of sync readFileSync\n const fileBuffer = await fs.readFile(sourcePath);\n const fileName = sourcePath.split('/').pop() ?? 'file';\n\n const response = await HttpUtils.postMultipart<void>(\n url,\n headers,\n { targetPath: targetPath, sandboxId: this.sandboxId ?? '' },\n { file: [fileName, fileBuffer, 'application/octet-stream'] }\n );\n\n if (response.status !== 'Success') {\n return { success: false, message: 'Upload failed' };\n }\n\n return { success: true, message: `Successfully uploaded file ${fileName} to ${targetPath}` };\n } catch (e) {\n return { success: false, message: `Upload failed: ${e}` };\n }\n }\n\n // Close\n override async close(): Promise<void> {\n await this.stop();\n }\n\n override toString(): string {\n return `Sandbox(sandboxId=${this.sandboxId}, hostName=${this.hostName}, image=${this.config.image}, cluster=${this.cluster})`;\n }\n}\n\n/**\n * SandboxGroup - Group of sandboxes with concurrent operations\n */\nexport class SandboxGroup {\n private config: SandboxGroupConfig;\n private sandboxList: Sandbox[];\n\n constructor(config: Partial<SandboxGroupConfig> = {}) {\n this.config = createSandboxGroupConfig(config);\n this.sandboxList = Array.from(\n { length: this.config.size },\n () => new Sandbox(this.config)\n );\n }\n\n getSandboxList(): Sandbox[] {\n return this.sandboxList;\n }\n\n async start(): Promise<void> {\n const concurrency = this.config.startConcurrency;\n const retryTimes = this.config.startRetryTimes;\n\n const startSandbox = async (index: number, sandbox: Sandbox): Promise<void> => {\n logger.info(`Starting sandbox ${index} with ${sandbox.getConfig().image}...`);\n\n for (let attempt = 0; attempt < retryTimes; attempt++) {\n try {\n await sandbox.start();\n return;\n } catch (e) {\n if (attempt === retryTimes - 1) {\n logger.error(`Failed to start sandbox after ${retryTimes} attempts: ${e}`);\n throw e;\n }\n logger.warn(`Failed to start sandbox (attempt ${attempt + 1}/${retryTimes}): ${e}, retrying...`);\n await sleep(1000);\n }\n }\n };\n\n // Start with concurrency limit\n for (let i = 0; i < this.sandboxList.length; i += concurrency) {\n const batch = this.sandboxList.slice(i, i + concurrency);\n const promises = batch.map((sandbox, idx) => startSandbox(i + idx, sandbox));\n await Promise.all(promises);\n }\n\n logger.info(`Successfully started ${this.sandboxList.length} sandboxes`);\n }\n\n async stop(): Promise<void> {\n const promises = this.sandboxList.map((sandbox) => sandbox.stop());\n await Promise.allSettled(promises);\n logger.info(`Stopped ${this.sandboxList.length} sandboxes`);\n }\n}","/**\n * Model client for LLM interaction\n */\n\nimport { existsSync } from 'fs';\nimport { readFile, appendFile } from 'fs/promises';\nimport { initLogger } from '../logger.js';\nimport { envVars } from '../env_vars.js';\nimport { sleep } from '../utils/retry.js';\n\nconst logger = initLogger('rock.model.client');\n\n/**\n * Default timeout for polling operations (in seconds)\n */\nconst DEFAULT_POLL_TIMEOUT = 60.0;\n\n/**\n * Request/Response markers\n */\nconst REQUEST_START_MARKER = '__REQUEST_START__';\nconst REQUEST_END_MARKER = '__REQUEST_END__';\nconst RESPONSE_START_MARKER = '__RESPONSE_START__';\nconst RESPONSE_END_MARKER = '__RESPONSE_END__';\nconst SESSION_END_MARKER = '__SESSION_END__';\n\n/**\n * Model client configuration\n */\nexport interface ModelClientConfig {\n logFileName?: string;\n}\n\n/**\n * Options for polling operations (popRequest, waitForFirstRequest)\n */\nexport interface PollOptions {\n /** Maximum time to wait in seconds. Defaults to DEFAULT_POLL_TIMEOUT */\n timeout?: number;\n /** AbortSignal for cancellation support */\n signal?: AbortSignal;\n}\n\n/**\n * Model client for LLM interaction\n */\nexport class ModelClient {\n private logFile: string;\n\n constructor(config?: ModelClientConfig) {\n this.logFile = config?.logFileName ?? envVars.ROCK_MODEL_SERVICE_DATA_DIR + '/model.log';\n }\n\n /**\n * Anti-call LLM - input is response, output is next request\n */\n async antiCallLlm(index: number, lastResponse?: string): Promise<string> {\n if (index < 0) {\n throw new Error('index must be greater than 0');\n }\n\n if (index === 0) {\n if (lastResponse !== undefined) {\n throw new Error('lastResponse must be undefined when index is 0');\n }\n await this.waitForFirstRequest();\n return this.popRequest(index + 1);\n }\n\n if (lastResponse === undefined) {\n throw new Error('lastResponse must not be undefined when index is greater than 0');\n }\n\n await this.pushResponse(index, lastResponse);\n return this.popRequest(index + 1);\n }\n\n /**\n * Push response to log file\n */\n async pushResponse(index: number, lastResponse: string): Promise<void> {\n const content = this.constructResponse(lastResponse, index);\n const lastResponseLine = await this.readLastResponseLine();\n\n if (lastResponseLine === null) {\n await this.appendResponse(content);\n return;\n }\n\n const { meta } = this.parseResponseLine(lastResponseLine);\n const lastResponseIndex = meta.index as number;\n\n if (index < lastResponseIndex) {\n throw new Error(`index ${index} must not be smaller than last_response_index ${lastResponseIndex}`);\n }\n\n if (index === lastResponseIndex) {\n logger.debug(`response index ${index} already exists, skip`);\n return;\n }\n\n await this.appendResponse(content);\n }\n\n /**\n * Pop request from log file\n *\n * @param index - The index of the request to pop\n * @param options - Optional configuration for timeout and cancellation\n * @returns The request JSON string or SESSION_END_MARKER\n * @throws Error if timeout expires or operation is aborted\n */\n async popRequest(index: number, options?: PollOptions): Promise<string> {\n const timeout = options?.timeout ?? DEFAULT_POLL_TIMEOUT;\n const startTime = Date.now();\n\n while (true) {\n // Check for abort signal\n if (options?.signal?.aborted) {\n throw new Error(`popRequest(index=${index}) aborted`);\n }\n\n // Check for timeout\n if ((Date.now() - startTime) / 1000 > timeout) {\n throw new Error(`popRequest timed out after ${timeout} seconds`);\n }\n\n try {\n const lastRequestLine = await this.readLastRequestLine();\n const { requestJson, meta } = this.parseRequestLine(lastRequestLine);\n\n if (requestJson === SESSION_END_MARKER) {\n return SESSION_END_MARKER;\n }\n\n if (meta.index === index) {\n return requestJson;\n }\n\n logger.debug(`Last request is not the index ${index} we want, waiting...`);\n await sleep(1000);\n } catch (e) {\n // Re-throw abort errors and parse errors immediately\n if (e instanceof Error) {\n if (e.message.includes('aborted')) {\n throw e;\n }\n // Re-throw parse errors (invalid format) immediately - don't retry\n if (e.message.includes('Invalid request line format')) {\n throw e;\n }\n }\n // For other errors (like file not found), wait and retry\n logger.debug(`Error reading request: ${e}, waiting...`);\n await sleep(1000);\n }\n }\n }\n\n /**\n * Wait for first request\n *\n * @param options - Optional configuration for timeout and cancellation\n * @throws Error if timeout expires or operation is aborted\n */\n async waitForFirstRequest(options?: PollOptions): Promise<void> {\n const timeout = options?.timeout ?? DEFAULT_POLL_TIMEOUT;\n const startTime = Date.now();\n\n while (true) {\n // Check for abort signal\n if (options?.signal?.aborted) {\n throw new Error('waitForFirstRequest aborted');\n }\n\n // Check for timeout\n if ((Date.now() - startTime) / 1000 > timeout) {\n throw new Error(`waitForFirstRequest timed out after ${timeout} seconds`);\n }\n\n if (!existsSync(this.logFile)) {\n logger.debug(`Log file ${this.logFile} not found, waiting...`);\n await sleep(1000);\n continue;\n }\n\n const content = await readFile(this.logFile, 'utf-8');\n const lines = content.split('\\n').filter((l) => l.trim());\n\n if (lines.length === 0) {\n logger.debug(`Log file ${this.logFile} is empty, waiting for the first request...`);\n await sleep(1000);\n continue;\n }\n\n return;\n }\n }\n\n private parseRequestLine(lineContent: string): { requestJson: string; meta: Record<string, unknown> } {\n if (lineContent.includes(SESSION_END_MARKER)) {\n return { requestJson: SESSION_END_MARKER, meta: {} };\n }\n\n try {\n const parts = lineContent.split(REQUEST_END_MARKER);\n const metaJson = parts[1] ?? '';\n const requestJson = parts[0]?.split(REQUEST_START_MARKER)[1] ?? '';\n const meta = JSON.parse(metaJson);\n\n return { requestJson, meta };\n } catch (e) {\n logger.error(`Failed to parse request line: ${lineContent}, error: ${e}`);\n throw new Error(`Invalid request line format: ${e}`);\n }\n }\n\n private parseResponseLine(lineContent: string): { responseJson: string; meta: Record<string, unknown> } {\n try {\n const parts = lineContent.split(RESPONSE_END_MARKER);\n const metaJson = parts[1] ?? '';\n const responseJson = parts[0]?.split(RESPONSE_START_MARKER)[1] ?? '';\n const meta = JSON.parse(metaJson);\n\n return { responseJson, meta };\n } catch (e) {\n logger.error(`Failed to parse response line: ${lineContent}, error: ${e}`);\n throw new Error(`Invalid response line format: ${e}`);\n }\n }\n\n private async readLastRequestLine(): Promise<string> {\n const content = await readFile(this.logFile, 'utf-8');\n const lines = content.split('\\n').filter((l) => l.trim());\n\n for (let i = lines.length - 1; i >= 0; i--) {\n const line = lines[i];\n if (line && (line.includes(REQUEST_START_MARKER) || line.includes(SESSION_END_MARKER))) {\n return line;\n }\n }\n\n throw new Error(`No request found in log file ${this.logFile}`);\n }\n\n private async readLastResponseLine(): Promise<string | null> {\n const content = await readFile(this.logFile, 'utf-8');\n const lines = content.split('\\n').filter((l) => l.trim());\n\n for (let i = lines.length - 1; i >= 0; i--) {\n const line = lines[i];\n if (line && line.includes(RESPONSE_START_MARKER)) {\n return line;\n }\n }\n\n return null;\n }\n\n private async appendResponse(content: string): Promise<void> {\n await appendFile(this.logFile, content);\n }\n\n private constructResponse(lastResponse: string, index: number): string {\n const meta = {\n timestamp: Date.now(),\n index,\n };\n const metaJson = JSON.stringify(meta);\n return `${RESPONSE_START_MARKER}${lastResponse}${RESPONSE_END_MARKER}${metaJson}\\n`;\n }\n}\n","import { z } from 'zod';\n\n/**\n * Base configuration for runtime environments.\n */\nexport const RuntimeEnvConfigSchema = z.object({\n /** Runtime type discriminator. */\n type: z.string(),\n\n /** Runtime version. Use 'default' for the default version of each runtime. */\n version: z.string().default('default'),\n\n /** Environment variables for the runtime session. */\n env: z.record(z.string()).default({}),\n\n /** Timeout in seconds for installation commands. */\n installTimeout: z.number().int().positive().default(600),\n\n /** Custom install command to run after init. */\n customInstallCmd: z.string().nullable().default(null),\n\n /** Directory to create symlinks of executables. If null, no symlinks are created. */\n extraSymlinkDir: z.string().nullable().default(null),\n\n /** List of executable names to symlink. Empty list means no symlinks. */\n extraSymlinkExecutables: z.array(z.string()).default([]),\n});\n\nexport type RuntimeEnvConfig = z.infer<typeof RuntimeEnvConfigSchema>;\n","import { randomUUID } from 'crypto';\nimport { initLogger } from '../../logger.js';\nimport { RuntimeEnvConfig } from './config.js';\nimport type { Observation } from '../../types/responses.js';\n\nconst logger = initLogger('rock.sandbox.runtime_env');\n\n/** Unique identifier for a RuntimeEnv instance */\nexport type RuntimeEnvId = string;\n\n/** Create a new unique RuntimeEnvId */\nexport function createRuntimeEnvId(): RuntimeEnvId {\n return randomUUID().slice(0, 8);\n}\n\n/** Registry for RuntimeEnv subclasses */\nconst RUNTIME_ENV_REGISTRY: Record<string, typeof RuntimeEnv> = {};\n\n/**\n * Interface for Sandbox with methods needed by RuntimeEnv\n */\nexport interface SandboxLike {\n sandboxId: string;\n runtimeEnvs: Record<RuntimeEnvId, RuntimeEnv>;\n createSession(request: { session: string; envEnable: boolean; env?: Record<string, string> }): Promise<unknown>;\n arun(\n cmd: string,\n options?: {\n session?: string;\n mode?: 'normal' | 'nohup' | 'NOHUP';\n waitTimeout?: number;\n waitInterval?: number;\n }\n ): Promise<Observation>;\n startNohupProcess?(\n cmd: string,\n tmpFile: string,\n session: string\n ): Promise<{ pid: number | null; errorResponse: Observation | null }>;\n waitForProcessCompletion?(\n pid: number,\n session: string,\n waitTimeout: number,\n waitInterval: number\n ): Promise<{ success: boolean; message: string }>;\n handleNohupOutput?(\n tmpFile: string,\n session: string,\n success: boolean,\n message: string,\n ignoreOutput: boolean,\n responseLimitedBytes: number | null\n ): Promise<Observation>;\n}\n\n/**\n * Runtime environment (e.g., Python/Node).\n *\n * Each RuntimeEnv is identified by (type, version) tuple and is managed by Sandbox.runtimeEnvs.\n * workdir is auto-generated as: /tmp/rock-runtime-envs/{type}/{version}/{runtimeEnvId}\n * session is auto-generated as: runtime-env-{type}-{version}-{runtimeEnvId}\n *\n * @example\n * ```typescript\n * const env = await RuntimeEnv.create(sandbox, config);\n * await env.run(\"python --version\");\n * ```\n */\nexport abstract class RuntimeEnv {\n /** Registry for subclasses */\n protected static registry: Record<string, typeof RuntimeEnv> = RUNTIME_ENV_REGISTRY;\n\n /** Runtime type discriminator - must be defined by subclass */\n abstract readonly runtimeEnvType: string;\n\n /** Sandbox instance */\n protected _sandbox: SandboxLike;\n\n /** Configuration */\n protected _config: RuntimeEnvConfig;\n\n /** Version */\n protected _version: string;\n\n /** Environment variables */\n protected _env: Record<string, string>;\n\n /** Install timeout in seconds */\n protected _installTimeout: number;\n\n /** Custom install command */\n protected _customInstallCmd: string | null;\n\n /** Extra symlink directory */\n protected _extraSymlinkDir: string | null;\n\n /** Extra symlink executables */\n protected _extraSymlinkExecutables: string[];\n\n /** Unique ID for this runtime env instance */\n protected _runtimeEnvId: RuntimeEnvId;\n\n /** Working directory */\n protected _workdir: string;\n\n /** Session name */\n protected _session: string;\n\n /** Whether the runtime has been initialized */\n protected _initialized: boolean = false;\n\n /** Whether the session is ready */\n protected _sessionReady: boolean = false;\n\n constructor(sandbox: SandboxLike, config: RuntimeEnvConfig) {\n this._sandbox = sandbox;\n this._config = config;\n\n // Extract values from config\n this._version = config.version;\n this._env = config.env;\n this._installTimeout = config.installTimeout;\n this._customInstallCmd = config.customInstallCmd;\n this._extraSymlinkDir = config.extraSymlinkDir;\n this._extraSymlinkExecutables = config.extraSymlinkExecutables;\n\n // Unique ID for this runtime env instance\n this._runtimeEnvId = createRuntimeEnvId();\n\n // Generate workdir and session\n const versionStr = this._version || 'default'; // avoid empty version\n this._workdir = `/tmp/rock-runtime-envs/${config.type}/${versionStr}/${this._runtimeEnvId}`;\n this._session = `runtime-env-${config.type}-${versionStr}-${this._runtimeEnvId}`;\n }\n\n /** Whether the runtime has been initialized */\n get initialized(): boolean {\n return this._initialized;\n }\n\n /** Unique ID for this runtime env instance */\n get runtimeEnvId(): RuntimeEnvId {\n return this._runtimeEnvId;\n }\n\n /** Working directory for this runtime env instance */\n get workdir(): string {\n return this._workdir;\n }\n\n /** Binary directory for this runtime env instance */\n get binDir(): string {\n return `${this._workdir}/runtime-env/bin`;\n }\n\n /**\n * Initialize the runtime environment.\n * This method performs installation and validation.\n * It is idempotent: calling multiple times only initializes once.\n */\n async init(): Promise<void> {\n if (this._initialized) {\n return;\n }\n\n // Common setup: ensure session and workdir\n await this._ensureSession();\n await this._ensureWorkdir();\n\n // Install runtime and then do additional initialization\n await this._installRuntime();\n await this._postInit();\n\n // Execute custom install command after _postInit\n if (this._customInstallCmd) {\n await this._doCustomInstall();\n }\n\n // Create symlinks for executables\n await this._createSysPathLinks();\n\n this._initialized = true;\n }\n\n /**\n * Run a command under this runtime\n */\n async run(\n cmd: string,\n options: {\n mode?: 'normal' | 'nohup';\n waitTimeout?: number;\n errorMsg?: string;\n } = {}\n ): Promise<Observation> {\n const { mode = 'nohup', waitTimeout = 600, errorMsg = 'runtime env command failed' } = options;\n\n await this._ensureSession();\n const wrapped = this.wrappedCmd(cmd, true);\n\n logger.debug(`[${this._sandbox.sandboxId}] RuntimeEnv run cmd: ${wrapped}`);\n\n const result = await this._sandbox.arun(wrapped, {\n session: this._session,\n mode,\n waitTimeout,\n });\n\n // If exit_code is not 0, raise an exception to trigger retry\n if (result.exitCode !== undefined && result.exitCode !== 0) {\n throw new Error(`${errorMsg} with exit code: ${result.exitCode}, output: ${result.output}`);\n }\n return result;\n }\n\n /**\n * Wrap command with PATH export.\n * Always wrap with bash -c to ensure it only affects current cmd.\n * Default prepend=true to give current runtime_env highest priority.\n */\n wrappedCmd(cmd: string, prepend: boolean = true): string {\n const binDir = this.binDir;\n let wrapped: string;\n if (prepend) {\n wrapped = `export PATH='${binDir}':$PATH && ${cmd}`;\n } else {\n wrapped = `export PATH=$PATH:'${binDir}' && ${cmd}`;\n }\n return `bash -c '${wrapped.replace(/'/g, \"'\\\"'\\\"'\")}'`;\n }\n\n /**\n * Ensure runtime env session exists. Safe to call multiple times.\n */\n protected async _ensureSession(): Promise<void> {\n if (this._sessionReady) {\n return;\n }\n\n await this._sandbox.createSession({\n session: this._session,\n envEnable: true,\n env: this._env,\n });\n this._sessionReady = true;\n }\n\n /**\n * Create workdir for runtime environment.\n */\n protected async _ensureWorkdir(): Promise<void> {\n const result = await this._sandbox.arun(`mkdir -p ${this._workdir}`, {\n session: this._session,\n });\n if (result.exitCode !== undefined && result.exitCode !== 0) {\n throw new Error(`Failed to create workdir: ${this._workdir}, exit_code: ${result.exitCode}`);\n }\n }\n\n /**\n * Get installation command for this runtime environment.\n */\n protected abstract _getInstallCmd(): string;\n\n /**\n * Install the runtime environment.\n */\n protected async _installRuntime(): Promise<void> {\n const installCmd = `cd '${this._workdir}' && ${this._getInstallCmd()}`;\n const wrappedCmd = `bash -c '${installCmd.replace(/'/g, \"'\\\"'\\\"'\")}'`;\n\n const result = await this._sandbox.arun(wrappedCmd, {\n session: this._session,\n mode: 'nohup',\n waitTimeout: this._installTimeout,\n });\n\n if (result.exitCode !== undefined && result.exitCode !== 0) {\n throw new Error(\n `${this.runtimeEnvType} runtime installation failed with exit code: ${result.exitCode}, output: ${result.output}`\n );\n }\n }\n\n /**\n * Additional initialization after runtime installation.\n * Override in subclasses.\n */\n protected async _postInit(): Promise<void> {\n // Default: no additional initialization\n }\n\n /**\n * Execute custom install command after _postInit.\n */\n protected async _doCustomInstall(): Promise<void> {\n if (!this._customInstallCmd) {\n return;\n }\n await this.run(this._customInstallCmd, {\n waitTimeout: this._installTimeout,\n errorMsg: 'custom_install_cmd failed',\n });\n }\n\n /**\n * Create symlinks in target directory for executables.\n */\n protected async _createSysPathLinks(): Promise<void> {\n if (this._extraSymlinkDir === null) {\n return;\n }\n if (this._extraSymlinkExecutables.length === 0) {\n return;\n }\n\n // Build a single command with all symlinks\n const links = this._extraSymlinkExecutables\n .map((exe) => `ln -sf '${this.binDir}/${exe}' '${this._extraSymlinkDir}/${exe}'`)\n .join(' && ');\n\n await this.run(links);\n }\n}\n","/**\n * Python runtime environment configuration and implementation\n */\n\nimport { z } from 'zod';\nimport { RuntimeEnvConfigSchema } from './config.js';\nimport { RuntimeEnv, type RuntimeEnvId, type SandboxLike } from './base.js';\nimport { envVars } from '../../env_vars.js';\n\n/**\n * Python runtime environment configuration schema\n */\nexport const PythonRuntimeEnvConfigSchema = RuntimeEnvConfigSchema.extend({\n /** Runtime type discriminator. Must be 'python'. */\n type: z.literal('python').default('python'),\n\n /** Python version. Use \"default\" for 3.11. */\n version: z.enum(['3.11', '3.12', 'default']).default('default'),\n\n /**\n * Pip packages to install.\n * Can be:\n * - string[]: List of package names to install\n * - string: Path to requirements.txt file\n * - null: No packages to install\n */\n pip: z.union([z.array(z.string()), z.string()]).nullable().default(null),\n\n /** Pip index URL for package installation. If set, will use this mirror. */\n pipIndexUrl: z.string().nullable().default(null),\n\n /** List of Python executables to symlink. */\n extraSymlinkExecutables: z.array(z.string()).default(['python', 'python3', 'pip', 'pip3']),\n});\n\n/**\n * Python runtime environment configuration type\n */\nexport type PythonRuntimeEnvConfig = z.infer<typeof PythonRuntimeEnvConfigSchema>;\n\n/**\n * Get default pip index URL from environment variable.\n */\nexport function getDefaultPipIndexUrl(): string {\n return envVars.ROCK_PIP_INDEX_URL;\n}\n\n/**\n * Python runtime environment\n *\n * Provides Python runtime with pip package management.\n * Supports Python 3.11 and 3.12 versions.\n *\n * @example\n * ```typescript\n * const config: PythonRuntimeEnvConfig = {\n * version: 'default',\n * pip: ['langchain', 'langchain-openai'],\n * pipIndexUrl: 'https://mirrors.aliyun.com/pypi/simple/',\n * };\n * const env = new PythonRuntimeEnv(sandbox, config);\n * await env.init();\n * await env.run('python --version');\n * ```\n */\nexport class PythonRuntimeEnv extends RuntimeEnv {\n readonly runtimeEnvType = 'python';\n\n private _pip: string[] | string | null | undefined;\n private _pipIndexUrl: string | null | undefined;\n\n constructor(\n sandbox: SandboxLike & { runtimeEnvs: Record<RuntimeEnvId, RuntimeEnv> },\n config: PythonRuntimeEnvConfig\n ) {\n // Validate version early\n if (config.version !== '3.11' && config.version !== '3.12' && config.version !== 'default') {\n throw new Error(\n `Unsupported Python version: ${config.version}. Supported versions: 3.11, 3.12, default`\n );\n }\n\n super(sandbox, config);\n\n this._pip = config.pip;\n this._pipIndexUrl = config.pipIndexUrl;\n }\n\n protected _getInstallCmd(): string {\n const version = this._version;\n if (version === '3.11' || version === 'default') {\n return envVars.ROCK_RTENV_PYTHON_V31114_INSTALL_CMD;\n }\n return envVars.ROCK_RTENV_PYTHON_V31212_INSTALL_CMD;\n }\n\n protected override async _postInit(): Promise<void> {\n // Step 1: validate python exists\n await this._validatePython();\n\n // Step 2: configure pip index url if specified\n if (this._pipIndexUrl) {\n await this._configurePip();\n }\n\n // Step 3: install pip packages if specified\n if (this._pip) {\n await this._installPip();\n }\n }\n\n private async _validatePython(): Promise<void> {\n await this.run('test -x python');\n }\n\n private async _configurePip(): Promise<void> {\n const escapedUrl = this._pipIndexUrl!.replace(/'/g, \"'\\\\''\");\n await this.run(`pip config set global.index-url '${escapedUrl}'`);\n }\n\n private async _installPip(): Promise<void> {\n if (!this._pip) {\n return;\n }\n\n if (typeof this._pip === 'string') {\n // Treat as requirements.txt path - note: for remote sandbox, local file upload\n // would need to be handled differently. For now, we assume the file is already\n // in the sandbox or use the array form.\n // This is a simplified implementation - the Python SDK handles local file upload.\n await this.run(`pip install -r '${this._pip.replace(/'/g, \"'\\\\''\")}'`);\n } else {\n // Treat as list of packages\n const packages = this._pip.map((pkg) => `'${pkg.replace(/'/g, \"'\\\\''\")}'`).join(' ');\n await this.run(`pip install ${packages}`);\n }\n }\n}","/**\n * Node.js runtime environment configuration and implementation\n */\n\nimport { z } from 'zod';\nimport { RuntimeEnvConfigSchema } from './config.js';\nimport { RuntimeEnv, type RuntimeEnvId, type SandboxLike } from './base.js';\nimport { envVars } from '../../env_vars.js';\n\n/** Default Node.js version */\nexport const NODE_DEFAULT_VERSION = '22.18.0';\n\n/**\n * Configuration for Node.js runtime environment.\n */\nexport const NodeRuntimeEnvConfigSchema = RuntimeEnvConfigSchema.extend({\n /** Runtime type discriminator. Must be 'node'. */\n type: z.literal('node').default('node'),\n\n /** Node.js version. Use \"default\" for 22.18.0. */\n version: z.enum(['22.18.0', 'default']).default('default'),\n\n /** NPM registry URL. If set, will run 'npm config set registry <url>' during init. */\n npmRegistry: z.string().nullable().default(null),\n\n /** List of Node.js executables to symlink. */\n extraSymlinkExecutables: z.array(z.string()).default(['node', 'npm', 'npx']),\n});\n\n/**\n * Node runtime environment configuration type\n */\nexport type NodeRuntimeEnvConfig = z.infer<typeof NodeRuntimeEnvConfigSchema>;\n\n/**\n * Node runtime environment\n *\n * Provides Node.js runtime with npm package management.\n * Supports Node.js 22.18.0.\n *\n * @example\n * ```typescript\n * const config: NodeRuntimeEnvConfig = {\n * version: 'default',\n * npmRegistry: 'https://registry.npmmirror.com',\n * };\n * const env = new NodeRuntimeEnv(sandbox, config);\n * await env.init();\n * await env.run('node --version');\n * ```\n */\nexport class NodeRuntimeEnv extends RuntimeEnv {\n readonly runtimeEnvType = 'node';\n\n private _npmRegistry: string | null | undefined;\n\n constructor(\n sandbox: SandboxLike & { runtimeEnvs: Record<RuntimeEnvId, RuntimeEnv> },\n config: NodeRuntimeEnvConfig\n ) {\n if (config.version !== 'default' && config.version !== NODE_DEFAULT_VERSION) {\n throw new Error(\n `Unsupported Node version: ${config.version}. Only ${NODE_DEFAULT_VERSION} is supported right now.`\n );\n }\n\n super(sandbox, config);\n\n this._npmRegistry = config.npmRegistry;\n }\n\n protected _getInstallCmd(): string {\n return envVars.ROCK_RTENV_NODE_V22180_INSTALL_CMD;\n }\n\n protected override async _postInit(): Promise<void> {\n // Step 1: validate node exists\n await this._validateNode();\n\n // Step 2: configure npm registry if specified\n if (this._npmRegistry) {\n await this._configureNpmRegistry();\n }\n }\n\n private async _validateNode(): Promise<void> {\n await this.run('test -x node');\n }\n\n private async _configureNpmRegistry(): Promise<void> {\n const escapedRegistry = this._npmRegistry!.replace(/'/g, \"'\\\\''\");\n await this.run(`npm config set registry '${escapedRegistry}'`);\n }\n}","/**\n * ModelService - manages model service installation and lifecycle in sandbox\n *\n * This module provides functionality to install, start, stop, and manage\n * the model service within a sandboxed environment.\n */\n\nimport { z } from 'zod';\nimport { PythonRuntimeEnv, PythonRuntimeEnvConfigSchema } from '../runtime_env/python_runtime_env.js';\nimport { type RuntimeEnvId, type SandboxLike } from '../runtime_env/base.js';\nimport { envVars } from '../../env_vars.js';\nimport { initLogger } from '../../logger.js';\n\nconst logger = initLogger('rock.model_service');\n\n/**\n * ModelService configuration schema\n */\nexport const ModelServiceConfigSchema = z.object({\n /** Whether to enable model service */\n enabled: z.boolean().default(false),\n\n /** Type of model service to start */\n type: z.string().default('local'),\n\n /** Command to install model service package */\n installCmd: z.string().default(envVars.ROCK_MODEL_SERVICE_INSTALL_CMD),\n\n /** Timeout for model service installation in seconds */\n installTimeout: z.number().positive().default(300),\n\n /** Runtime environment configuration for the model service */\n runtimeEnvConfig: PythonRuntimeEnvConfigSchema.default({ type: 'python', version: 'default' }),\n\n /** Command to start model service with type placeholder */\n startCmd: z.string().default('rock model-service start --type ${type}'),\n\n /** Command to stop model service */\n stopCmd: z.string().default('rock model-service stop'),\n\n /** Command to create Rock config file */\n configIniCmd: z.string().default('mkdir -p ~/.rock && touch ~/.rock/config.ini'),\n\n /** Command to watch agent with pid placeholder */\n watchAgentCmd: z.string().default('rock model-service watch-agent --pid ${pid}'),\n\n /** Command to anti-call LLM with index and response_payload placeholders */\n antiCallLlmCmd: z.string().default(\n 'rock model-service anti-call-llm --index ${index} --response ${response_payload}'\n ),\n\n /** Command to anti-call LLM with only index placeholder */\n antiCallLlmCmdNoResponse: z.string().default('rock model-service anti-call-llm --index ${index}'),\n\n /** Path for logging directory */\n loggingPath: z.string().default('/data/logs'),\n\n /** Name of the log file */\n loggingFileName: z.string().default('model_service.log'),\n});\n\n/**\n * ModelService configuration type\n */\nexport type ModelServiceConfig = z.infer<typeof ModelServiceConfigSchema>;\n\n/**\n * ModelService - manages model service installation and lifecycle in sandbox\n *\n * This class handles model service installation, startup, and agent management\n * within a sandboxed environment.\n *\n * Note:\n * Caller is responsible for ensuring proper sequencing of install/start/stop operations.\n */\nexport class ModelService {\n private _sandbox: SandboxLike;\n private _config: ModelServiceConfig;\n private _runtimeEnv: PythonRuntimeEnv | null = null;\n\n private _isInstalled = false;\n private _isStarted = false;\n\n constructor(\n sandbox: SandboxLike & { runtimeEnvs: Record<RuntimeEnvId, RuntimeEnvLike> },\n config: ModelServiceConfig\n ) {\n this._sandbox = sandbox;\n this._config = config;\n }\n\n /** Whether the model service has been installed */\n get isInstalled(): boolean {\n return this._isInstalled;\n }\n\n /** Whether the model service has been started */\n get isStarted(): boolean {\n return this._isStarted;\n }\n\n /**\n * Install model service in the sandbox.\n *\n * Performs the following installation steps:\n * 1. Create and initialize Python runtime environment (via RuntimeEnv).\n * 2. Install model service package.\n */\n async install(): Promise<void> {\n // Validate runtime config is Python\n if (this._config.runtimeEnvConfig.type !== 'python') {\n throw new Error('ModelService requires a Python runtime environment');\n }\n\n // Parse and validate the runtime config\n const runtimeConfigResult = PythonRuntimeEnvConfigSchema.safeParse(this._config.runtimeEnvConfig);\n if (!runtimeConfigResult.success) {\n throw new Error(`Invalid runtime config: ${runtimeConfigResult.error.message}`);\n }\n\n // Create Python runtime environment\n this._runtimeEnv = new PythonRuntimeEnv(\n this._sandbox as SandboxLike & { runtimeEnvs: Record<RuntimeEnvId, RuntimeEnvLike> },\n runtimeConfigResult.data\n );\n\n // Initialize the runtime (installs Python)\n await this._runtimeEnv.init();\n\n // Create rock config\n await this._createRockConfig();\n\n // Install model service package\n await this._installModelService();\n\n this._isInstalled = true;\n }\n\n private async _createRockConfig(): Promise<void> {\n if (!this._runtimeEnv) {\n throw new Error('Runtime environment not initialized');\n }\n await this._runtimeEnv.run(this._config.configIniCmd);\n }\n\n private async _installModelService(): Promise<void> {\n if (!this._runtimeEnv) {\n throw new Error('Runtime environment not initialized');\n }\n\n const installCmd = `cd ${this._runtimeEnv.workdir} && ${this._config.installCmd}`;\n await this._runtimeEnv.run(installCmd, {\n waitTimeout: this._config.installTimeout,\n errorMsg: 'Model service installation failed',\n });\n }\n\n /**\n * Start the model service in the sandbox.\n *\n * Starts the service with configured logging settings.\n */\n async start(): Promise<void> {\n if (!this._isInstalled) {\n throw new Error(\n `[${this._sandbox.sandboxId}] Cannot start model service: ModelService has not been installed yet. ` +\n 'Please call install() first.'\n );\n }\n\n if (!this._runtimeEnv) {\n throw new Error('Runtime environment not initialized');\n }\n\n const startCmd = this._config.startCmd.replace(/\\$\\{type\\}/g, this._config.type);\n const bashStartCmd =\n `export ROCK_LOGGING_PATH=${this._config.loggingPath} && ` +\n `export ROCK_LOGGING_FILE_NAME=${this._config.loggingFileName} && ` +\n `${this._config.stopCmd} && ` +\n startCmd;\n\n logger.debug(`[${this._sandbox.sandboxId}] Model service Start command: ${bashStartCmd}`);\n\n await this._runtimeEnv.run(bashStartCmd);\n\n this._isStarted = true;\n }\n\n /**\n * Stop the model service.\n */\n async stop(): Promise<void> {\n if (!this._isStarted) {\n logger.warn(\n `[${this._sandbox.sandboxId}] Model service is not running, skipping stop operation. is_started=${this._isStarted}`\n );\n return;\n }\n\n if (!this._runtimeEnv) {\n throw new Error('Runtime environment not initialized');\n }\n\n await this._runtimeEnv.run(this._config.stopCmd);\n\n this._isStarted = false;\n }\n\n /**\n * Watch agent process with the specified PID.\n */\n async watchAgent(pid: string): Promise<void> {\n if (!this._isStarted) {\n throw new Error(\n `[${this._sandbox.sandboxId}] Cannot watch agent: ModelService is not started. Please call start() first.`\n );\n }\n\n if (!this._runtimeEnv) {\n throw new Error('Runtime environment not initialized');\n }\n\n const watchCmd = this._config.watchAgentCmd.replace(/\\$\\{pid\\}/g, pid);\n logger.debug(\n `[${this._sandbox.sandboxId}] Model service watch agent with pid=${pid}, cmd: ${watchCmd}`\n );\n\n await this._runtimeEnv.run(watchCmd);\n }\n\n /**\n * Execute anti-call LLM command.\n */\n async antiCallLlm(\n index: number,\n responsePayload?: string,\n callTimeout = 600\n ): Promise<string> {\n if (!this._isStarted) {\n throw new Error(\n `[${this._sandbox.sandboxId}] Cannot execute anti-call LLM: ModelService is not started. Please call start() first.`\n );\n }\n\n if (!this._runtimeEnv) {\n throw new Error('Runtime environment not initialized');\n }\n\n logger.info(\n `[${this._sandbox.sandboxId}] Executing anti-call LLM: index=${index}, ` +\n `has_response=${responsePayload !== undefined}, timeout=${callTimeout}s`\n );\n\n let cmd: string;\n if (responsePayload !== undefined) {\n const escapedPayload = `'${responsePayload.replace(/'/g, \"'\\\\''\")}'`;\n cmd = this._config.antiCallLlmCmd\n .replace(/\\$\\{index\\}/g, String(index))\n .replace(/\\$\\{response_payload\\}/g, escapedPayload);\n } else {\n cmd = this._config.antiCallLlmCmdNoResponse.replace(/\\$\\{index\\}/g, String(index));\n }\n\n const bashCmd = this._runtimeEnv.wrappedCmd(cmd);\n logger.debug(`[${this._sandbox.sandboxId}] Executing command: ${bashCmd}`);\n\n const result = await this._sandbox.arun(bashCmd, {\n mode: 'nohup',\n waitTimeout: callTimeout,\n waitInterval: 3,\n });\n\n if (result.exitCode !== 0) {\n throw new Error(`Anti-call LLM command failed: ${result.output}`);\n }\n\n return result.output;\n }\n}\n\n/**\n * Minimal RuntimeEnv interface for type checking\n */\ninterface RuntimeEnvLike {\n init(): Promise<void>;\n run(cmd: string, mode?: string, waitTimeout?: number, errorMsg?: string): Promise<{ output: string; exitCode?: number }>;\n workdir: string;\n wrappedCmd(cmd: string): string;\n}\n","/**\n * Agent base classes\n */\n\nimport { initLogger } from '../../logger.js';\nimport type { RockAgentConfig } from './config.js';\nimport type { SandboxLike } from '../runtime_env/base.js';\nimport type { ModelService } from '../model_service/base.js';\nimport type { Observation } from '../../types/responses.js';\n\nconst logger = initLogger('rock.agent');\n\n/**\n * Abstract Agent base class\n */\nexport abstract class Agent {\n protected _sandbox: SandboxLike;\n protected _modelService: ModelService | null = null;\n\n constructor(sandbox: SandboxLike) {\n this._sandbox = sandbox;\n }\n\n get sandbox(): SandboxLike {\n return this._sandbox;\n }\n\n get modelService(): ModelService | null {\n return this._modelService;\n }\n\n abstract install(config: RockAgentConfig): Promise<void>;\n abstract run(prompt: string): Promise<Observation>;\n}\n\n/**\n * DefaultAgent with common initialization and execution logic\n */\nexport class DefaultAgent extends Agent {\n protected _config: RockAgentConfig | null = null;\n protected _agentSession: string | null = null;\n\n get config(): RockAgentConfig | null {\n return this._config;\n }\n\n get agentSession(): string | null {\n return this._agentSession;\n }\n\n override get modelService(): ModelService | null {\n return this._modelService;\n }\n\n async install(config: RockAgentConfig): Promise<void> {\n this._config = config;\n this._agentSession = config.agentSession;\n\n const sandboxId = this._sandbox.sandboxId;\n logger.info(`[${sandboxId}] Starting agent initialization`);\n\n try {\n // Setup bash session\n await this._setupSession();\n\n // Execute pre-init commands\n await this._executeInitCommands(config.preInitCmds, 'pre-init');\n\n // Execute post-init commands\n await this._executeInitCommands(config.postInitCmds, 'post-init');\n\n logger.info(`[${sandboxId}] Agent initialization completed`);\n } catch (e) {\n const error = e as Error;\n logger.error(`[${sandboxId}] Agent initialization failed: ${error.message}`);\n throw error;\n }\n }\n\n async run(prompt: string): Promise<Observation> {\n if (!this._config) {\n throw new Error('Agent is not installed. Please call install() first.');\n }\n\n if (!this._config.runCmd) {\n throw new Error('runCmd is not configured');\n }\n\n const cmd = await this._createAgentRunCmd(prompt);\n return this._agentRun(cmd);\n }\n\n protected async _setupSession(): Promise<void> {\n if (!this._config) return;\n\n const sandboxId = this._sandbox.sandboxId;\n logger.info(`[${sandboxId}] Creating bash session: ${this._agentSession}`);\n\n await this._sandbox.createSession({\n session: this._agentSession!,\n envEnable: true,\n env: this._config.env,\n });\n\n logger.info(`[${sandboxId}] Bash session '${this._agentSession}' created successfully`);\n }\n\n protected async _executeInitCommands(\n cmdList: Array<{ command: string; timeoutSeconds: number }>,\n stepName: string\n ): Promise<void> {\n if (!cmdList || cmdList.length === 0) return;\n\n const sandboxId = this._sandbox.sandboxId;\n logger.info(`[${sandboxId}] ${stepName} started: Executing ${cmdList.length} commands`);\n\n for (let idx = 0; idx < cmdList.length; idx++) {\n const cmdConfig = cmdList[idx];\n if (!cmdConfig) continue;\n \n const command = cmdConfig.command;\n const timeout = cmdConfig.timeoutSeconds;\n\n logger.debug(\n `[${sandboxId}] Executing ${stepName} command ${idx + 1}/${cmdList.length}: ${command.substring(0, 100)}...`\n );\n\n const result = await this._sandbox.arun(`bash -c ${JSON.stringify(command)}`, {\n waitTimeout: timeout,\n mode: 'NOHUP',\n });\n\n if (result.exitCode !== 0) {\n throw new Error(\n `[${sandboxId}] ${stepName} command ${idx + 1} failed with exit code ${result.exitCode}: ${result.output.substring(0, 200)}`\n );\n }\n\n logger.debug(`[${sandboxId}] ${stepName} command ${idx + 1} completed successfully`);\n }\n\n logger.info(`[${sandboxId}] ${stepName} completed: Completed ${cmdList.length} commands`);\n }\n\n protected async _createAgentRunCmd(prompt: string): Promise<string> {\n if (!this._config || !this._config.runCmd) {\n throw new Error('runCmd is not configured');\n }\n\n // Replace {prompt} placeholder\n let runCmd = this._config.runCmd.replace(/{prompt}/g, JSON.stringify(prompt));\n\n // Skip wrap if configured\n if (this._config.skipWrapRunCmd) {\n return `bash -c ${JSON.stringify(runCmd)}`;\n }\n\n return `bash -c ${JSON.stringify(runCmd)}`;\n }\n\n protected async _agentRun(cmd: string): Promise<Observation> {\n const sandboxId = this._sandbox.sandboxId;\n\n try {\n const timestamp = Date.now().toString();\n const tmpFile = `/tmp/tmp_${timestamp}.out`;\n\n // Check if startNohupProcess is available\n if (!this._sandbox.startNohupProcess) {\n const msg = 'startNohupProcess method is not available on sandbox';\n return { output: msg, exitCode: 1, failureReason: msg, expectString: '' };\n }\n\n // Start nohup process and get PID\n const { pid, errorResponse } = await this._sandbox.startNohupProcess(cmd, tmpFile, this._agentSession!);\n\n if (errorResponse) {\n return errorResponse;\n }\n\n if (!pid) {\n const msg = 'Failed to submit command, nohup failed to extract PID';\n return { output: msg, exitCode: 1, failureReason: msg, expectString: '' };\n }\n\n logger.info(`[${sandboxId}] Agent process started with PID: ${pid}`);\n\n // Check if waitForProcessCompletion is available\n if (!this._sandbox.waitForProcessCompletion) {\n const msg = 'waitForProcessCompletion method is not available on sandbox';\n return { output: msg, exitCode: 1, failureReason: msg, expectString: '' };\n }\n\n // Wait for agent process to complete\n const { success, message } = await this._sandbox.waitForProcessCompletion(\n pid,\n this._agentSession!,\n this._config!.agentRunTimeout,\n this._config!.agentRunCheckInterval\n );\n\n // Check if handleNohupOutput is available\n if (!this._sandbox.handleNohupOutput) {\n const msg = 'handleNohupOutput method is not available on sandbox';\n return { output: msg, exitCode: 1, failureReason: msg, expectString: '' };\n }\n\n // Handle nohup output and return result\n const result = await this._sandbox.handleNohupOutput(tmpFile, this._agentSession!, success, message, false, null);\n\n return result;\n } catch (e) {\n const error = e as Error;\n const errorMsg = `Failed to execute nohup command: ${error.message}`;\n logger.error(`[${sandboxId}] ${errorMsg}`);\n return { output: errorMsg, exitCode: 1, failureReason: errorMsg, expectString: '' };\n }\n }\n}\n","/**\n * Agent configuration schemas\n */\n\nimport { z } from 'zod';\nimport { randomUUID } from 'crypto';\nimport { envVars } from '../../env_vars.js';\nimport type { ModelServiceConfig } from '../model_service/base.js';\n\n/**\n * Base agent configuration schema\n */\nexport const AgentConfigSchema = z.object({\n agentType: z.string(),\n version: z.string().default('default'),\n});\n\nexport type AgentConfig = z.infer<typeof AgentConfigSchema>;\n\n/**\n * Configuration for a command execution with timeout control\n */\nexport const AgentBashCommandSchema = z.object({\n command: z.string(),\n timeoutSeconds: z.number().int().positive().default(300),\n});\n\nexport type AgentBashCommand = z.infer<typeof AgentBashCommandSchema>;\n\n/**\n * Default agent configuration schema\n */\nexport const DefaultAgentConfigSchema = z.object({\n agentType: z.string(),\n version: z.string().default('default'),\n\n // Session management\n agentSession: z.string().default('default-agent-session'),\n\n // Startup/shutdown commands\n preInitBashCmdList: z.array(AgentBashCommandSchema).default(\n envVars.ROCK_AGENT_PRE_INIT_BASH_CMD_LIST.map((cmd) => ({\n command: cmd.command,\n timeoutSeconds: cmd.timeoutSeconds || 300,\n }))\n ),\n postInitBashCmdList: z.array(AgentBashCommandSchema).default([]),\n\n // Environment variables for the session\n sessionEnvs: z.record(z.string()).default({}),\n\n // Optional ModelService configuration\n modelServiceConfig: z.custom<ModelServiceConfig>().nullable().default(null),\n});\n\nexport type DefaultAgentConfig = z.infer<typeof DefaultAgentConfigSchema>;\n\n/**\n * RockAgent configuration schema with validation\n */\nexport const RockAgentConfigSchema = z\n .object({\n agentType: z.string().default('default'),\n agentName: z.string().default(() => randomUUID().replace(/-/g, '')),\n version: z.string().default('default'),\n\n agentInstalledDir: z.string().default('/tmp/installed_agent'),\n instanceId: z.string().default(() => `instance-id-${randomUUID().replace(/-/g, '')}`),\n\n projectPath: z.string().nullable().default(null),\n useDeployWorkingDirAsFallback: z.boolean().default(true),\n\n agentSession: z.string().default(() => `agent-session-${randomUUID().replace(/-/g, '')}`),\n\n env: z.record(z.string()).default({}),\n\n preInitCmds: z.array(AgentBashCommandSchema).default(\n envVars.ROCK_AGENT_PRE_INIT_BASH_CMD_LIST.map((cmd) => ({\n command: cmd.command,\n timeoutSeconds: cmd.timeoutSeconds || 300,\n }))\n ),\n postInitCmds: z.array(AgentBashCommandSchema).default([]),\n\n agentInstallTimeout: z.number().int().positive().default(600),\n agentRunTimeout: z.number().int().positive().default(1800),\n agentRunCheckInterval: z.number().int().positive().default(30),\n\n workingDir: z.string().nullable().default(null),\n runCmd: z.string().nullable().default(null),\n skipWrapRunCmd: z.boolean().default(false),\n\n runtimeEnvConfig: z.any().nullable().default(null),\n modelServiceConfig: z.custom<ModelServiceConfig>().nullable().default(null),\n })\n .refine((data) => data.agentRunCheckInterval < data.agentRunTimeout, {\n message: 'agentRunCheckInterval must be less than agentRunTimeout',\n });\n\nexport type RockAgentConfig = z.infer<typeof RockAgentConfigSchema>;\n","/**\n * ROCK TypeScript SDK\n * Main entry point\n */\n\nimport { readFileSync } from 'fs';\nimport { join } from 'path';\n\n// Version - read from package.json to ensure consistency\nfunction getVersion(): string {\n const packageJsonPath = join(__dirname, '..', 'package.json');\n const content = readFileSync(packageJsonPath, 'utf-8');\n return JSON.parse(content).version;\n}\n\nexport const VERSION: string = getVersion();\n\n// Types\nexport * from './types/index.js';\n\n// Common - explicit exports to avoid conflicts\nexport {\n RockException,\n InvalidParameterRockException,\n BadRequestRockError,\n InternalServerRockError,\n CommandRockError,\n raiseForCode,\n fromRockException,\n} from './common/index.js';\nexport { RunMode, RunModeType, PID_PREFIX, PID_SUFFIX } from './common/constants.js';\n\n// Utils - explicit exports to avoid conflicts\nexport { HttpUtils } from './utils/http.js';\nexport { retryAsync, sleep, withRetry } from './utils/retry.js';\nexport { deprecated, deprecatedClass } from './utils/deprecated.js';\nexport { isNode, getEnv, getRequiredEnv, isEnvSet } from './utils/system.js';\n\n// EnvHub\nexport * from './envhub/index.js';\n\n// Envs\nexport * from './envs/index.js';\n\n// Sandbox - selective exports\nexport { Sandbox, SandboxGroup } from './sandbox/client.js';\nexport type { RunModeType as SandboxRunModeType } from './common/constants.js';\nexport {\n SandboxConfigSchema,\n SandboxGroupConfigSchema,\n createSandboxConfig,\n createSandboxGroupConfig,\n} from './sandbox/config.js';\nexport type { SandboxConfig, SandboxGroupConfig, BaseConfig } from './sandbox/config.js';\nexport { Deploy } from './sandbox/deploy.js';\nexport { LinuxFileSystem } from './sandbox/file_system.js';\nexport { Network, SpeedupType } from './sandbox/network.js';\nexport { Process } from './sandbox/process.js';\nexport { LinuxRemoteUser } from './sandbox/remote_user.js';\nexport { withTimeLogging, arunWithRetry, extractNohupPid as extractNohupPidFromSandbox } from './sandbox/utils.js';\n\n// Model\nexport * from './model/index.js';\n\n// RuntimeEnv\nexport * from './sandbox/runtime_env/index.js';\n\n// ModelService (sandbox)\nexport * from './sandbox/model_service/index.js';\n\n// Agent\nexport * from './sandbox/agent/index.js';\n"]}
1
+ {"version":3,"sources":["../src/types/codes.ts","../src/types/requests.ts","../src/types/responses.ts","../src/common/constants.ts","../src/common/exceptions.ts","../src/utils/case.ts","../src/utils/http.ts","../src/utils/retry.ts","../src/utils/system.ts","../src/env_vars.ts","../src/logger.ts","../src/utils/deprecated.ts","../src/envhub/schema.ts","../src/envhub/client.ts","../src/envs/rock_env.ts","../src/envs/registration.ts","../src/sandbox/config.ts","../src/sandbox/deploy.ts","../src/utils/shell.ts","../src/sandbox/file_system.ts","../src/sandbox/constants.ts","../src/sandbox/network.ts","../src/sandbox/process.ts","../src/sandbox/remote_user.ts","../src/sandbox/utils.ts","../src/sandbox/client.ts","../src/model/client.ts","../src/sandbox/runtime_env/config.ts","../src/sandbox/runtime_env/base.ts","../src/sandbox/runtime_env/python_runtime_env.ts","../src/sandbox/runtime_env/node_runtime_env.ts","../src/sandbox/model_service/base.ts","../src/sandbox/agent/base.ts","../src/sandbox/agent/config.ts","../src/index.ts"],"names":["Codes","z","toCamel","toSnake","https","axios","resolve","join","homedir","winston","existsSync","mkdirSync","logger","statSync","randomUUID","mkdtempSync","tmpdir","basename","rmSync","SpeedupType","readFile","appendFile","readFileSync"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * ROCK status codes enumeration\n */\n\n/**\n * Status codes with phrase descriptions\n */\nexport enum Codes {\n /**\n * Success codes (2xxx)\n */\n OK = 2000,\n\n /**\n * Client error codes (4xxx)\n */\n BAD_REQUEST = 4000,\n\n /**\n * Server error codes (5xxx)\n */\n INTERNAL_SERVER_ERROR = 5000,\n\n /**\n * Command/execution error codes (6xxx)\n */\n COMMAND_ERROR = 6000,\n}\n\n/**\n * Human-readable reason phrases for status codes\n */\nexport const ReasonPhrases: Record<Codes, string> = {\n [Codes.OK]: 'OK',\n [Codes.BAD_REQUEST]: 'Bad Request',\n [Codes.INTERNAL_SERVER_ERROR]: 'Internal Server Error',\n [Codes.COMMAND_ERROR]: 'Command Error',\n};\n\n/**\n * Get the reason phrase for a given status code\n */\nexport function getReasonPhrase(code: Codes): string {\n return ReasonPhrases[code] ?? '';\n}\n\n/**\n * Check if a status code indicates success (2xxx range)\n */\nexport function isSuccess(code: Codes): boolean {\n return code >= 2000 && code <= 2999;\n}\n\n/**\n * Check if a status code indicates a client error (4xxx range)\n */\nexport function isClientError(code: Codes): boolean {\n return code >= 4000 && code <= 4999;\n}\n\n/**\n * Check if a status code indicates a server error (5xxx range)\n */\nexport function isServerError(code: Codes): boolean {\n return code >= 5000 && code <= 5999;\n}\n\n/**\n * Check if a status code indicates a command error (6xxx range)\n */\nexport function isCommandError(code: Codes): boolean {\n return code >= 6000 && code <= 6999;\n}\n\n/**\n * Check if a status code indicates any kind of error\n */\nexport function isError(code: Codes): boolean {\n return code >= 4000 && code <= 6999;\n}\n","/**\n * Request types\n */\n\nimport { z } from 'zod';\n\n/**\n * Command execution request\n */\nexport const CommandSchema = z.object({\n command: z.union([z.string(), z.array(z.string())]),\n timeout: z.number().optional().default(1200),\n env: z.record(z.string()).optional(),\n cwd: z.string().optional(),\n});\n\nexport type Command = z.infer<typeof CommandSchema>;\n\n/**\n * Bash session creation request\n */\nexport const CreateBashSessionRequestSchema = z.object({\n session: z.string().default('default'),\n startupSource: z.array(z.string()).default([]),\n envEnable: z.boolean().default(false),\n env: z.record(z.string()).optional(),\n remoteUser: z.string().optional(),\n});\n\nexport type CreateBashSessionRequest = z.infer<typeof CreateBashSessionRequestSchema>;\n\n/**\n * Bash action for session execution\n */\nexport const BashActionSchema = z.object({\n command: z.string(),\n session: z.string().default('default'),\n timeout: z.number().optional(),\n check: z.enum(['silent', 'raise', 'ignore']).default('raise'),\n});\n\nexport type BashAction = z.infer<typeof BashActionSchema>;\n\n/**\n * Write file request\n */\nexport const WriteFileRequestSchema = z.object({\n content: z.string(),\n path: z.string(),\n});\n\nexport type WriteFileRequest = z.infer<typeof WriteFileRequestSchema>;\n\n/**\n * Read file request\n */\nexport const ReadFileRequestSchema = z.object({\n path: z.string(),\n encoding: z.string().optional(),\n errors: z.string().optional(),\n});\n\nexport type ReadFileRequest = z.infer<typeof ReadFileRequestSchema>;\n\n/**\n * Upload mode enum\n * - auto: Automatically choose upload method based on file size and OSS availability\n * - direct: Force direct HTTP upload\n * - oss: Force OSS upload\n */\nexport const UploadModeSchema = z.enum(['auto', 'direct', 'oss']);\n\nexport type UploadMode = z.infer<typeof UploadModeSchema>;\n\n/**\n * Upload file request\n * Note: uploadMode defaults to 'auto' in the implementation, not in the schema\n */\nexport const UploadRequestSchema = z.object({\n sourcePath: z.string(),\n targetPath: z.string(),\n uploadMode: UploadModeSchema.optional(),\n});\n\nexport type UploadRequest = z.infer<typeof UploadRequestSchema>;\n\n/**\n * Close session request\n */\nexport const CloseSessionRequestSchema = z.object({\n session: z.string().default('default'),\n});\n\nexport type CloseSessionRequest = z.infer<typeof CloseSessionRequestSchema>;\n\n/**\n * Chown request\n */\nexport const ChownRequestSchema = z.object({\n remoteUser: z.string(),\n paths: z.array(z.string()).default([]),\n recursive: z.boolean().default(false),\n});\n\nexport type ChownRequest = z.infer<typeof ChownRequestSchema>;\n\n/**\n * Chmod request\n */\nexport const ChmodRequestSchema = z.object({\n paths: z.array(z.string()).default([]),\n mode: z.string().default('755'),\n recursive: z.boolean().default(false),\n});\n\nexport type ChmodRequest = z.infer<typeof ChmodRequestSchema>;\n","/**\n * Response types\n * All field names use camelCase for TypeScript convention\n * HTTP layer automatically converts from API snake_case\n */\n\nimport { z } from 'zod';\nimport { Codes } from './codes.js';\n\n/**\n * Base sandbox response\n */\nexport const SandboxResponseSchema = z.object({\n code: z.nativeEnum(Codes).optional(),\n exitCode: z.number().optional(),\n failureReason: z.string().optional(),\n});\n\nexport type SandboxResponse = z.infer<typeof SandboxResponseSchema>;\n\n/**\n * Is alive response\n */\nexport const IsAliveResponseSchema = z.object({\n isAlive: z.boolean(),\n message: z.string().default(''),\n});\n\nexport type IsAliveResponse = z.infer<typeof IsAliveResponseSchema>;\n\n/**\n * Sandbox status response\n */\nexport const SandboxStatusResponseSchema = z.object({\n sandboxId: z.string().optional(),\n status: z.record(z.unknown()).optional(),\n portMapping: z.record(z.unknown()).optional(),\n hostName: z.string().optional(),\n hostIp: z.string().optional(),\n isAlive: z.boolean().default(true),\n image: z.string().optional(),\n gatewayVersion: z.string().optional(),\n sweRexVersion: z.string().optional(),\n userId: z.string().optional(),\n experimentId: z.string().optional(),\n namespace: z.string().optional(),\n cpus: z.number().optional(),\n memory: z.string().optional(),\n state: z.unknown().optional(),\n // Response headers info\n cluster: z.string().optional(),\n requestId: z.string().optional(),\n eagleeyeTraceid: z.string().optional(),\n});\n\nexport type SandboxStatusResponse = z.infer<typeof SandboxStatusResponseSchema>;\n\n/**\n * Command execution response\n */\nexport const CommandResponseSchema = z.object({\n stdout: z.string().default(''),\n stderr: z.string().default(''),\n exitCode: z.number().optional(),\n});\n\nexport type CommandResponse = z.infer<typeof CommandResponseSchema>;\n\n/**\n * Write file response\n */\nexport const WriteFileResponseSchema = z.object({\n success: z.boolean().default(false),\n message: z.string().default(''),\n});\n\nexport type WriteFileResponse = z.infer<typeof WriteFileResponseSchema>;\n\n/**\n * Read file response\n */\nexport const ReadFileResponseSchema = z.object({\n content: z.string().default(''),\n});\n\nexport type ReadFileResponse = z.infer<typeof ReadFileResponseSchema>;\n\n/**\n * Upload response\n */\nexport const UploadResponseSchema = z.object({\n success: z.boolean().default(false),\n message: z.string().default(''),\n fileName: z.string().optional(),\n});\n\nexport type UploadResponse = z.infer<typeof UploadResponseSchema>;\n\n/**\n * Bash observation (execution result)\n */\nexport const ObservationSchema = z.object({\n output: z.string().default(''),\n exitCode: z.number().optional(),\n failureReason: z.string().default(''),\n expectString: z.string().default(''),\n});\n\nexport type Observation = z.infer<typeof ObservationSchema>;\n\n/**\n * Create session response\n */\nexport const CreateSessionResponseSchema = z.object({\n output: z.string().default(''),\n sessionType: z.literal('bash').default('bash'),\n});\n\nexport type CreateSessionResponse = z.infer<typeof CreateSessionResponseSchema>;\n\n/**\n * Close session response\n */\nexport const CloseSessionResponseSchema = z.object({\n sessionType: z.literal('bash').default('bash'),\n});\n\nexport type CloseSessionResponse = z.infer<typeof CloseSessionResponseSchema>;\n\n/**\n * Close response\n */\nexport const CloseResponseSchema = z.object({});\n\nexport type CloseResponse = z.infer<typeof CloseResponseSchema>;\n\n/**\n * Chown response\n */\nexport const ChownResponseSchema = z.object({\n success: z.boolean().default(false),\n message: z.string().default(''),\n});\n\nexport type ChownResponse = z.infer<typeof ChownResponseSchema>;\n\n/**\n * Chmod response\n */\nexport const ChmodResponseSchema = z.object({\n success: z.boolean().default(false),\n message: z.string().default(''),\n});\n\nexport type ChmodResponse = z.infer<typeof ChmodResponseSchema>;\n\n/**\n * Execute bash session response\n */\nexport const ExecuteBashSessionResponseSchema = z.object({\n success: z.boolean().default(false),\n message: z.string().default(''),\n});\n\nexport type ExecuteBashSessionResponse = z.infer<typeof ExecuteBashSessionResponseSchema>;\n\n/**\n * OSS setup response\n */\nexport const OssSetupResponseSchema = z.object({\n success: z.boolean().default(false),\n message: z.string().default(''),\n});\n\nexport type OssSetupResponse = z.infer<typeof OssSetupResponseSchema>;\n\n/**\n * Download file response\n */\nexport const DownloadFileResponseSchema = z.object({\n success: z.boolean().default(false),\n message: z.string().default(''),\n});\n\nexport type DownloadFileResponse = z.infer<typeof DownloadFileResponseSchema>;\n\n/**\n * OSS STS credentials from sandbox /get_token API\n * API returns snake_case, which gets converted to camelCase by HttpUtils\n */\nexport const OssCredentialsSchema = z.object({\n accessKeyId: z.string(),\n accessKeySecret: z.string(),\n securityToken: z.string(),\n expiration: z.string(),\n});\n\nexport type OssCredentials = z.infer<typeof OssCredentialsSchema>;","/**\n * Common constants\n */\n\n/**\n * Run mode type\n */\nexport type RunModeType = 'normal' | 'nohup';\n\n/**\n * Run mode enum\n */\nexport const RunMode = {\n NORMAL: 'normal' as const,\n NOHUP: 'nohup' as const,\n};\n\n/**\n * PID prefix and suffix for nohup output parsing\n */\nexport const PID_PREFIX = '__ROCK_PID_START__';\nexport const PID_SUFFIX = '__ROCK_PID_END__';\n","/**\n * ROCK Exception classes\n */\n\nimport { Codes } from '../types/codes.js';\nimport { SandboxResponse } from '../types/responses.js';\n\n/**\n * Base ROCK exception\n */\nexport class RockException extends Error {\n protected _code: Codes | null = null;\n\n constructor(message: string, code?: Codes) {\n super(message);\n this.name = 'RockException';\n this._code = code ?? null;\n }\n\n get code(): Codes | null {\n return this._code;\n }\n}\n\n/**\n * Invalid parameter exception (deprecated)\n * @deprecated Use BadRequestRockError instead\n */\nexport class InvalidParameterRockException extends RockException {\n constructor(message: string) {\n super(message);\n this.name = 'InvalidParameterRockException';\n }\n}\n\n/**\n * Bad request error (4xxx)\n */\nexport class BadRequestRockError extends RockException {\n constructor(message: string, code: Codes = Codes.BAD_REQUEST) {\n super(message, code);\n this.name = 'BadRequestRockError';\n }\n}\n\n/**\n * Internal server error (5xxx)\n */\nexport class InternalServerRockError extends RockException {\n constructor(message: string, code: Codes = Codes.INTERNAL_SERVER_ERROR) {\n super(message, code);\n this.name = 'InternalServerRockError';\n }\n}\n\n/**\n * Command execution error (6xxx)\n */\nexport class CommandRockError extends RockException {\n constructor(message: string, code: Codes = Codes.COMMAND_ERROR) {\n super(message, code);\n this.name = 'CommandRockError';\n }\n}\n\n/**\n * Raise appropriate exception based on status code\n */\nexport function raiseForCode(code: Codes | null | undefined, message: string): void {\n if (code === null || code === undefined || isSuccessCode(code)) {\n return;\n }\n\n if (isClientErrorCode(code)) {\n throw new BadRequestRockError(message, code);\n }\n if (isServerErrorCode(code)) {\n throw new InternalServerRockError(message, code);\n }\n if (isCommandErrorCode(code)) {\n throw new CommandRockError(message, code);\n }\n\n throw new RockException(message, code);\n}\n\n/**\n * Convert RockException to SandboxResponse\n */\nexport function fromRockException(e: RockException): SandboxResponse {\n return {\n code: e.code ?? undefined,\n exitCode: 1,\n failureReason: e.message,\n };\n}\n\n// Helper functions for code checking\nfunction isSuccessCode(code: Codes): boolean {\n return code >= 2000 && code <= 2999;\n}\n\nfunction isClientErrorCode(code: Codes): boolean {\n return code >= 4000 && code <= 4999;\n}\n\nfunction isServerErrorCode(code: Codes): boolean {\n return code >= 5000 && code <= 5999;\n}\n\nfunction isCommandErrorCode(code: Codes): boolean {\n return code >= 6000 && code <= 6999;\n}\n","/**\n * Case conversion utilities\n * Wraps ts-case-convert for consistent API\n */\n\nimport {\n objectToCamel as toCamel,\n objectToSnake as toSnake,\n} from 'ts-case-convert';\n\n/**\n * Convert object keys from snake_case to camelCase\n */\nexport const objectToCamel = toCamel;\n\n/**\n * Convert object keys from camelCase to snake_case\n */\nexport const objectToSnake = toSnake;\n","/**\n * HTTP utilities using axios\n */\n\nimport axios, { AxiosInstance, AxiosError, AxiosResponse } from 'axios';\nimport https from 'https';\nimport { PID_PREFIX, PID_SUFFIX } from '../common/constants.js';\nimport { objectToCamel, objectToSnake } from './case.js';\n\n/**\n * Shared HTTPS agent for connection pooling and TLS session reuse.\n * Following Python SDK pattern: _SHARED_SSL_CONTEXT\n * \n * This prevents performance degradation under load by:\n * - Enabling TLS session reuse\n * - Enabling connection pooling via keepAlive\n */\nexport const sharedHttpsAgent = new https.Agent({\n rejectUnauthorized: true,\n keepAlive: true,\n});\n\n/**\n * HTTP client configuration\n */\nexport interface HttpConfig {\n baseURL?: string;\n timeout?: number;\n headers?: Record<string, string>;\n}\n\n/**\n * HTTP response with headers\n */\nexport interface HttpResponse<T = unknown> {\n status: string;\n result?: T;\n error?: string;\n headers: Record<string, string>;\n}\n\n/**\n * HTTP utilities class\n */\nexport class HttpUtils {\n private static defaultTimeout = 300000; // 5 minutes\n private static defaultConnectTimeout = 300000;\n\n /**\n * Create axios instance with default config\n */\n private static createClient(config?: HttpConfig): AxiosInstance {\n return axios.create({\n timeout: config?.timeout ?? this.defaultTimeout,\n headers: {\n 'Content-Type': 'application/json',\n ...config?.headers,\n },\n httpsAgent: sharedHttpsAgent,\n });\n }\n\n /**\n * Send POST request\n * Automatically converts request body from camelCase to snake_case\n * Automatically converts response from snake_case to camelCase\n */\n static async post<T = unknown>(\n url: string,\n headers: Record<string, string>,\n data: Record<string, unknown>,\n readTimeout?: number\n ): Promise<HttpResponse<T>> {\n const client = this.createClient({\n timeout: readTimeout ?? this.defaultTimeout,\n headers,\n });\n\n // Convert request body to snake_case for API\n const snakeData = objectToSnake(data);\n\n try {\n const response = await client.post<unknown>(url, snakeData);\n // Convert response to camelCase for SDK users\n const camelData = objectToCamel(response.data as object) as { status?: string; result?: T; error?: string };\n const httpResponse: HttpResponse<T> = {\n status: camelData.status ?? 'Success',\n headers: this.extractHeaders(response),\n };\n if (camelData.result !== undefined) {\n httpResponse.result = camelData.result;\n }\n if (camelData.error !== undefined) {\n httpResponse.error = camelData.error;\n }\n return httpResponse;\n } catch (error) {\n // Re-throw original error to preserve response property (e.g., status code)\n // This allows callers to detect specific HTTP errors like 401, 403, etc.\n throw error;\n }\n }\n\n /**\n * Send GET request\n * Automatically converts response from snake_case to camelCase\n */\n static async get<T = unknown>(\n url: string,\n headers: Record<string, string>\n ): Promise<HttpResponse<T>> {\n const client = this.createClient({ headers });\n\n try {\n const response = await client.get<unknown>(url);\n // Convert response to camelCase for SDK users\n const camelData = objectToCamel(response.data as object) as { status?: string; result?: T; error?: string };\n const httpResponse: HttpResponse<T> = {\n status: camelData.status ?? 'Success',\n headers: this.extractHeaders(response),\n };\n if (camelData.result !== undefined) {\n httpResponse.result = camelData.result;\n }\n if (camelData.error !== undefined) {\n httpResponse.error = camelData.error;\n }\n return httpResponse;\n } catch (error) {\n // Re-throw original error to preserve response property (e.g., status code)\n throw error;\n }\n }\n\n /**\n * Extract headers from axios response\n */\n private static extractHeaders(response: AxiosResponse): Record<string, string> {\n const headers: Record<string, string> = {};\n for (const [key, value] of Object.entries(response.headers)) {\n if (typeof value === 'string') {\n headers[key.toLowerCase()] = value;\n } else if (Array.isArray(value)) {\n headers[key.toLowerCase()] = value.join(', ');\n }\n }\n return headers;\n }\n\n /**\n * Convert camelCase key to snake_case\n */\n private static camelToSnakeKey(key: string): string {\n return key.replace(/[A-Z]/g, (letter) => `_${letter.toLowerCase()}`);\n }\n\n /**\n * Send multipart/form-data request\n * Automatically converts form data keys to snake_case\n * Automatically converts response from snake_case to camelCase\n */\n static async postMultipart<T = unknown>(\n url: string,\n headers: Record<string, string>,\n data?: Record<string, string | number | boolean>,\n files?: Record<string, File | Buffer | [string, Buffer, string]>\n ): Promise<HttpResponse<T>> {\n const formData = new FormData();\n\n // Add form fields (convert keys to snake_case)\n if (data) {\n for (const [key, value] of Object.entries(data)) {\n if (value !== undefined && value !== null) {\n const snakeKey = this.camelToSnakeKey(key);\n formData.append(snakeKey, String(value));\n }\n }\n }\n\n // Add files (convert field names to snake_case)\n if (files) {\n for (const [fieldName, fileData] of Object.entries(files)) {\n if (fileData !== undefined && fileData !== null) {\n const snakeFieldName = this.camelToSnakeKey(fieldName);\n if (Array.isArray(fileData)) {\n // [filename, content, contentType]\n const [filename, content, contentType] = fileData;\n const blob = new Blob([content], { type: contentType });\n formData.append(snakeFieldName, blob, filename);\n } else if (fileData instanceof Buffer) {\n const blob = new Blob([fileData], { type: 'application/octet-stream' });\n formData.append(snakeFieldName, blob, 'file');\n } else if (fileData instanceof File) {\n formData.append(snakeFieldName, fileData);\n }\n }\n }\n }\n\n const client = this.createClient({\n headers: {\n ...headers,\n },\n });\n\n try {\n // CRITICAL: Use post with config to override Content-Type.\n // Setting Content-Type to null tells axios to remove the default\n // 'application/json' and auto-detect FormData, setting the correct\n // Content-Type with boundary (e.g., 'multipart/form-data; boundary=xxx')\n const response = await client.post<unknown>(url, formData, {\n headers: {\n 'Content-Type': null,\n },\n });\n // Convert response to camelCase for SDK users\n const camelData = objectToCamel(response.data as object) as { status?: string; result?: T; error?: string };\n const httpResponse: HttpResponse<T> = {\n status: camelData.status ?? 'Success',\n headers: this.extractHeaders(response),\n };\n if (camelData.result !== undefined) {\n httpResponse.result = camelData.result;\n }\n if (camelData.error !== undefined) {\n httpResponse.error = camelData.error;\n }\n return httpResponse;\n } catch (error) {\n // Re-throw original error to preserve response property (e.g., status code)\n throw error;\n }\n }\n\n /**\n * Guess MIME type from filename\n */\n static guessContentType(filename: string): string {\n const ext = filename.split('.').pop()?.toLowerCase();\n const mimeTypes: Record<string, string> = {\n txt: 'text/plain',\n html: 'text/html',\n css: 'text/css',\n js: 'application/javascript',\n json: 'application/json',\n xml: 'application/xml',\n pdf: 'application/pdf',\n zip: 'application/zip',\n tar: 'application/x-tar',\n gz: 'application/gzip',\n png: 'image/png',\n jpg: 'image/jpeg',\n jpeg: 'image/jpeg',\n gif: 'image/gif',\n svg: 'image/svg+xml',\n };\n\n return mimeTypes[ext ?? ''] ?? 'application/octet-stream';\n }\n}\n\n/**\n * Extract nohup PID from output\n */\nexport function extractNohupPid(output: string): number | null {\n const pattern = new RegExp(`${PID_PREFIX}(\\\\d+)${PID_SUFFIX}`);\n const match = output.match(pattern);\n if (match?.[1]) {\n return parseInt(match[1], 10);\n }\n return null;\n}\n","/**\n * Retry utilities\n */\n\n/**\n * Retry options\n */\nexport interface RetryOptions {\n maxAttempts?: number;\n delaySeconds?: number;\n backoff?: number;\n jitter?: boolean;\n}\n\n/**\n * Retry decorator for async functions\n */\nexport function retryAsync<T>(\n fn: () => Promise<T>,\n options: RetryOptions = {}\n): Promise<T> {\n const {\n maxAttempts = 3,\n delaySeconds = 1.0,\n backoff = 2.0,\n jitter = false,\n } = options;\n\n return retryAsyncImpl(fn, {\n maxAttempts,\n delaySeconds,\n backoff,\n jitter,\n });\n}\n\nasync function retryAsyncImpl<T>(\n fn: () => Promise<T>,\n options: Required<RetryOptions>\n): Promise<T> {\n const { maxAttempts, delaySeconds, backoff, jitter } = options;\n let lastError: Error | null = null;\n let currentDelay = delaySeconds;\n\n for (let attempt = 1; attempt <= maxAttempts; attempt++) {\n try {\n return await fn();\n } catch (e) {\n lastError = e instanceof Error ? e : new Error(String(e));\n\n if (attempt === maxAttempts) {\n break;\n }\n\n let sleepTime = currentDelay;\n if (jitter) {\n sleepTime = Math.random() * currentDelay * 2;\n }\n\n await sleep(sleepTime * 1000);\n currentDelay *= backoff;\n }\n }\n\n throw lastError ?? new Error('All retry attempts failed');\n}\n\n/**\n * Sleep utility\n */\nexport function sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\n/**\n * Create a retry wrapper for a function\n */\nexport function withRetry<T extends (...args: unknown[]) => Promise<unknown>>(\n fn: T,\n options: RetryOptions = {}\n): T {\n return (async (...args: Parameters<T>) => {\n return retryAsync(() => fn(...args), options);\n }) as T;\n}\n","/**\n * System utilities\n * \n * Note: This SDK requires Node.js environment (v20.8.0+).\n * It cannot run in browsers due to dependencies on Node.js modules.\n */\n\n/**\n * Check if running in Node.js environment\n */\nexport function isNode(): boolean {\n return (\n typeof process !== 'undefined' &&\n process.versions != null &&\n process.versions.node != null\n );\n}\n\n/**\n * Get environment variable\n * Directly accesses process.env since this SDK requires Node.js\n */\nexport function getEnv(key: string, defaultValue?: string): string | undefined {\n return process.env[key] ?? defaultValue;\n}\n\n/**\n * Get required environment variable\n */\nexport function getRequiredEnv(key: string): string {\n const value = getEnv(key);\n if (value === undefined) {\n throw new Error(`Required environment variable ${key} is not set`);\n }\n return value;\n}\n\n/**\n * Check if environment variable is set\n * Directly checks process.env since this SDK requires Node.js\n */\nexport function isEnvSet(key: string): boolean {\n return key in process.env;\n}\n","/**\n * Environment variables configuration\n */\n\nimport { getEnv, isEnvSet } from './utils/system.js';\nimport { homedir } from 'os';\nimport { join } from 'path';\n\n/**\n * Environment variable definitions\n */\nexport const envVars = {\n // Logging\n get ROCK_LOGGING_PATH(): string | undefined {\n return getEnv('ROCK_LOGGING_PATH');\n },\n\n get ROCK_LOGGING_FILE_NAME(): string {\n return getEnv('ROCK_LOGGING_FILE_NAME', 'rocklet.log')!;\n },\n\n get ROCK_LOGGING_LEVEL(): string {\n return getEnv('ROCK_LOGGING_LEVEL', 'INFO')!;\n },\n\n // Service\n get ROCK_SERVICE_STATUS_DIR(): string {\n return getEnv('ROCK_SERVICE_STATUS_DIR', '/data/service_status')!;\n },\n\n get ROCK_SCHEDULER_STATUS_DIR(): string {\n return getEnv('ROCK_SCHEDULER_STATUS_DIR', '/data/scheduler_status')!;\n },\n\n // Config\n get ROCK_CONFIG(): string | undefined {\n return getEnv('ROCK_CONFIG');\n },\n\n get ROCK_CONFIG_DIR_NAME(): string {\n return getEnv('ROCK_CONFIG_DIR_NAME', 'rock-conf')!;\n },\n\n // Base URLs\n get ROCK_BASE_URL(): string {\n return getEnv('ROCK_BASE_URL', 'http://localhost:8080')!;\n },\n\n get ROCK_WORKER_ROCKLET_PORT(): number | undefined {\n const val = getEnv('ROCK_WORKER_ROCKLET_PORT');\n return val ? parseInt(val, 10) : undefined;\n },\n\n get ROCK_SANDBOX_STARTUP_TIMEOUT_SECONDS(): number {\n return parseInt(getEnv('ROCK_SANDBOX_STARTUP_TIMEOUT_SECONDS', '180')!, 10);\n },\n\n get ROCK_CODE_SANDBOX_BASE_URL(): string {\n return getEnv('ROCK_CODE_SANDBOX_BASE_URL', '')!;\n },\n\n // EnvHub\n get ROCK_ENVHUB_BASE_URL(): string {\n return getEnv('ROCK_ENVHUB_BASE_URL', 'http://localhost:8081')!;\n },\n\n get ROCK_ENVHUB_DEFAULT_DOCKER_IMAGE(): string {\n return getEnv('ROCK_ENVHUB_DEFAULT_DOCKER_IMAGE', 'python:3.11')!;\n },\n\n get ROCK_ENVHUB_DB_URL(): string {\n return getEnv(\n 'ROCK_ENVHUB_DB_URL',\n `sqlite:///${join(homedir(), '.rock', 'rock_envs.db')}`\n )!;\n },\n\n // Auto clear\n get ROCK_DEFAULT_AUTO_CLEAR_TIME_MINUTES(): number {\n return parseInt(getEnv('ROCK_DEFAULT_AUTO_CLEAR_TIME_MINUTES', '360')!, 10);\n },\n\n // Ray\n get ROCK_RAY_NAMESPACE(): string {\n return getEnv('ROCK_RAY_NAMESPACE', 'xrl-sandbox')!;\n },\n\n get ROCK_SANDBOX_EXPIRE_TIME_KEY(): string {\n return getEnv('ROCK_SANDBOX_EXPIRE_TIME_KEY', 'expire_time')!;\n },\n\n get ROCK_SANDBOX_AUTO_CLEAR_TIME_KEY(): string {\n return getEnv('ROCK_SANDBOX_AUTO_CLEAR_TIME_KEY', 'auto_clear_time')!;\n },\n\n // Timezone\n get ROCK_TIME_ZONE(): string {\n return getEnv('ROCK_TIME_ZONE', 'Asia/Shanghai')!;\n },\n\n // OSS\n get ROCK_OSS_ENABLE(): boolean {\n return getEnv('ROCK_OSS_ENABLE', 'false')?.toLowerCase() === 'true';\n },\n\n get ROCK_OSS_BUCKET_ENDPOINT(): string | undefined {\n return getEnv('ROCK_OSS_BUCKET_ENDPOINT');\n },\n\n get ROCK_OSS_BUCKET_NAME(): string | undefined {\n return getEnv('ROCK_OSS_BUCKET_NAME');\n },\n\n get ROCK_OSS_BUCKET_REGION(): string | undefined {\n return getEnv('ROCK_OSS_BUCKET_REGION');\n },\n\n // Pip\n get ROCK_PIP_INDEX_URL(): string {\n return getEnv('ROCK_PIP_INDEX_URL', 'https://pypi.org/simple/')!;\n },\n\n // Monitor\n get ROCK_MONITOR_ENABLE(): boolean {\n return getEnv('ROCK_MONITOR_ENABLE', 'false')?.toLowerCase() === 'true';\n },\n\n // Project\n get ROCK_PROJECT_ROOT(): string {\n return getEnv('ROCK_PROJECT_ROOT', process.cwd())!;\n },\n\n get ROCK_WORKER_ENV_TYPE(): string {\n return getEnv('ROCK_WORKER_ENV_TYPE', 'local')!;\n },\n\n get ROCK_PYTHON_ENV_PATH(): string {\n return getEnv('ROCK_PYTHON_ENV_PATH', process.cwd())!;\n },\n\n // Admin\n get ROCK_ADMIN_ENV(): string {\n return getEnv('ROCK_ADMIN_ENV', 'dev')!;\n },\n\n get ROCK_ADMIN_ROLE(): string {\n return getEnv('ROCK_ADMIN_ROLE', 'write')!;\n },\n\n // CLI\n get ROCK_CLI_LOAD_PATHS(): string {\n return getEnv('ROCK_CLI_LOAD_PATHS', '')!;\n },\n\n get ROCK_CLI_DEFAULT_CONFIG_PATH(): string {\n return getEnv('ROCK_CLI_DEFAULT_CONFIG_PATH', join(homedir(), '.rock', 'config.ini'))!;\n },\n\n // Model Service\n get ROCK_MODEL_SERVICE_DATA_DIR(): string {\n return getEnv('ROCK_MODEL_SERVICE_DATA_DIR', '/data/logs')!;\n },\n\n get ROCK_MODEL_SERVICE_TRAJ_APPEND_MODE(): boolean {\n return getEnv('ROCK_MODEL_SERVICE_TRAJ_APPEND_MODE', 'false')?.toLowerCase() === 'true';\n },\n\n // RuntimeEnv\n get ROCK_RTENV_PYTHON_V31114_INSTALL_CMD(): string {\n return getEnv(\n 'ROCK_RTENV_PYTHON_V31114_INSTALL_CMD',\n '[ -f cpython31114.tar.gz ] && rm cpython31114.tar.gz; [ -d python ] && rm -rf python; wget -q -O cpython31114.tar.gz https://github.com/astral-sh/python-build-standalone/releases/download/20251120/cpython-3.11.14+20251120-x86_64-unknown-linux-gnu-install_only.tar.gz && tar -xzf cpython31114.tar.gz && mv python runtime-env'\n )!;\n },\n\n get ROCK_RTENV_PYTHON_V31212_INSTALL_CMD(): string {\n return getEnv(\n 'ROCK_RTENV_PYTHON_V31212_INSTALL_CMD',\n '[ -f cpython-3.12.12.tar.gz ] && rm cpython-3.12.12.tar.gz; [ -d python ] && rm -rf python; wget -q -O cpython-3.12.12.tar.gz https://github.com/astral-sh/python-build-standalone/releases/download/20251217/cpython-3.12.12+20251217-x86_64-unknown-linux-gnu-install_only.tar.gz && tar -xzf cpython-3.12.12.tar.gz && mv python runtime-env'\n )!;\n },\n\n get ROCK_RTENV_NODE_V22180_INSTALL_CMD(): string {\n return getEnv(\n 'ROCK_RTENV_NODE_V22180_INSTALL_CMD',\n '[ -f node.tar.xz ] && rm node.tar.xz; [ -d node ] && rm -rf node; wget -q -O node.tar.xz --tries=10 --waitretry=2 https://nodejs.org/dist/v22.18.0/node-v22.18.0-linux-x64.tar.xz && tar -xf node.tar.xz && mv node-v22.18.0-linux-x64 runtime-env'\n )!;\n },\n\n // Agent\n get ROCK_AGENT_PRE_INIT_BASH_CMD_LIST(): Array<{ command: string; timeoutSeconds: number }> {\n const val = getEnv('ROCK_AGENT_PRE_INIT_BASH_CMD_LIST', '[]');\n try {\n return JSON.parse(val!);\n } catch {\n return [];\n }\n },\n\n get ROCK_AGENT_IFLOW_CLI_INSTALL_CMD(): string {\n return getEnv('ROCK_AGENT_IFLOW_CLI_INSTALL_CMD', 'npm i -g @iflow-ai/iflow-cli@latest')!;\n },\n\n get ROCK_MODEL_SERVICE_INSTALL_CMD(): string {\n return getEnv('ROCK_MODEL_SERVICE_INSTALL_CMD', 'pip install rl_rock[model-service]')!;\n },\n\n // Doccuum\n get ROCK_DOCUUM_INSTALL_URL(): string {\n return getEnv(\n 'ROCK_DOCUUM_INSTALL_URL',\n 'https://raw.githubusercontent.com/stepchowfun/docuum/main/install.sh'\n )!;\n },\n\n // ========== Sandbox Defaults ==========\n // Sandbox configuration defaults - allow users to override via environment variables\n\n get ROCK_DEFAULT_IMAGE(): string {\n return getEnv('ROCK_DEFAULT_IMAGE', 'python:3.11')!;\n },\n\n get ROCK_DEFAULT_MEMORY(): string {\n return getEnv('ROCK_DEFAULT_MEMORY', '8g')!;\n },\n\n get ROCK_DEFAULT_CPUS(): number {\n return parseFloat(getEnv('ROCK_DEFAULT_CPUS', '2')!);\n },\n\n get ROCK_DEFAULT_CLUSTER(): string {\n return getEnv('ROCK_DEFAULT_CLUSTER', 'zb')!;\n },\n\n get ROCK_DEFAULT_AUTO_CLEAR_SECONDS(): number {\n return parseInt(getEnv('ROCK_DEFAULT_AUTO_CLEAR_SECONDS', '300')!, 10);\n },\n\n // ========== SandboxGroup Defaults ==========\n\n get ROCK_DEFAULT_GROUP_SIZE(): number {\n return parseInt(getEnv('ROCK_DEFAULT_GROUP_SIZE', '2')!, 10);\n },\n\n get ROCK_DEFAULT_START_CONCURRENCY(): number {\n return parseInt(getEnv('ROCK_DEFAULT_START_CONCURRENCY', '2')!, 10);\n },\n\n get ROCK_DEFAULT_START_RETRY_TIMES(): number {\n return parseInt(getEnv('ROCK_DEFAULT_START_RETRY_TIMES', '3')!, 10);\n },\n\n // ========== Client Timeouts (in seconds) ==========\n\n get ROCK_DEFAULT_ARUN_TIMEOUT(): number {\n return parseInt(getEnv('ROCK_DEFAULT_ARUN_TIMEOUT', '300')!, 10);\n },\n\n get ROCK_DEFAULT_NOHUP_WAIT_TIMEOUT(): number {\n return parseInt(getEnv('ROCK_DEFAULT_NOHUP_WAIT_TIMEOUT', '300')!, 10);\n },\n\n get ROCK_DEFAULT_NOHUP_WAIT_INTERVAL(): number {\n return parseInt(getEnv('ROCK_DEFAULT_NOHUP_WAIT_INTERVAL', '10')!, 10);\n },\n\n get ROCK_DEFAULT_STATUS_CHECK_INTERVAL(): number {\n return parseInt(getEnv('ROCK_DEFAULT_STATUS_CHECK_INTERVAL', '3')!, 10);\n },\n};\n\n/**\n * Check if an environment variable is explicitly set\n */\nexport function isSet(name: string): boolean {\n return isEnvSet(name);\n}\n","/**\n * Winston-based logger module\n */\n\nimport winston from 'winston';\nimport { envVars } from './env_vars.js';\nimport { join } from 'path';\nimport { existsSync, mkdirSync } from 'fs';\n\n/**\n * Log levels\n */\nconst levels: winston.config.AbstractConfigSetLevels = {\n error: 0,\n warn: 1,\n info: 2,\n http: 3,\n debug: 4,\n};\n\n/**\n * Log level colors\n */\nconst colors: winston.config.AbstractConfigSetColors = {\n error: 'red',\n warn: 'yellow',\n info: 'green',\n http: 'magenta',\n debug: 'cyan',\n};\n\nwinston.addColors(colors);\n\n/**\n * Custom format for console output\n */\nconst consoleFormat = winston.format.combine(\n winston.format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss.SSS' }),\n winston.format.colorize({ all: true }),\n winston.format.printf((info) => {\n const { timestamp, level, message, ...meta } = info;\n const metaStr = Object.keys(meta).length ? JSON.stringify(meta) : '';\n return `${timestamp} ${level}: ${message} ${metaStr}`;\n })\n);\n\n/**\n * Custom format for file output\n */\nconst fileFormat = winston.format.combine(\n winston.format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss.SSS' }),\n winston.format.json()\n);\n\n/**\n * Get log level from environment\n */\nfunction getLogLevel(): string {\n const level = envVars.ROCK_LOGGING_LEVEL.toLowerCase();\n if (level in levels) {\n return level;\n }\n return 'info';\n}\n\n/**\n * Logger cache using winston Container for proper lifecycle management\n */\nconst loggerContainer = new winston.Container();\n\n/**\n * Get the number of cached loggers\n */\nexport function getLoggerCacheSize(): number {\n return loggerContainer.loggers.size;\n}\n\n/**\n * Clear all cached loggers\n */\nexport function clearLoggerCache(): void {\n // Close all loggers and clear the cache\n for (const name of loggerContainer.loggers.keys()) {\n loggerContainer.close(name);\n }\n}\n\n/**\n * Initialize and return a logger instance\n */\nexport function initLogger(name: string = 'rock', fileName?: string): winston.Logger {\n // Check if logger already exists in container\n if (loggerContainer.has(name)) {\n return loggerContainer.get(name);\n }\n\n const transports: winston.transport[] = [];\n const logLevel = getLogLevel();\n\n // File transport\n const logPath = envVars.ROCK_LOGGING_PATH;\n const logFileName = fileName ?? envVars.ROCK_LOGGING_FILE_NAME;\n\n if (logPath) {\n // Ensure directory exists\n if (!existsSync(logPath)) {\n mkdirSync(logPath, { recursive: true });\n }\n\n transports.push(\n new winston.transports.File({\n filename: join(logPath, logFileName),\n format: fileFormat,\n level: logLevel,\n })\n );\n } else {\n // Console transport\n transports.push(\n new winston.transports.Console({\n format: consoleFormat,\n level: logLevel,\n })\n );\n }\n\n // Use winston.Container to create and cache the logger\n const logger = loggerContainer.add(name, {\n levels,\n defaultMeta: { service: name },\n transports,\n });\n\n return logger;\n}\n\n/**\n * Get or create a child logger\n */\nexport function getChildLogger(parentName: string, childName: string): winston.Logger {\n const fullName = `${parentName}:${childName}`;\n return initLogger(fullName);\n}\n\n/**\n * Create a logger with context\n */\nexport function createContextLogger(context: string): winston.Logger {\n const logger = initLogger(context);\n return logger;\n}\n\n/**\n * Default logger instance\n */\nexport const defaultLogger = initLogger('rock');\n\n// Re-export winston types\nexport type Logger = winston.Logger;\nexport type LogEntry = winston.LogEntry;\n","/**\n * Deprecated decorator utilities\n */\n\nimport { initLogger } from '../logger.js';\nimport type { Logger } from '../logger.js';\n\n/**\n * Set to track which deprecation warnings have already been shown\n */\nconst warnedKeys = new Set<string>();\n\n/**\n * Get or create the deprecation logger (lazy initialization)\n */\nfunction getLogger(): Logger {\n return initLogger('rock.deprecated');\n}\n\n/**\n * Clear all deprecation warning states (useful for testing)\n */\nexport function clearDeprecatedWarnings(): void {\n warnedKeys.clear();\n}\n\n/**\n * Issue a deprecation warning only once per key\n */\nfunction warnOnce(key: string, message: string): void {\n if (warnedKeys.has(key)) {\n return;\n }\n getLogger().warn(message);\n warnedKeys.add(key);\n}\n\n/**\n * Mark a function as deprecated\n */\nexport function deprecated(reason: string = ''): MethodDecorator {\n return function (\n target: unknown,\n propertyKey: string | symbol,\n descriptor: PropertyDescriptor\n ): PropertyDescriptor {\n const originalMethod = descriptor.value;\n const key = String(propertyKey);\n\n descriptor.value = function (...args: unknown[]): unknown {\n warnOnce(key, `${key} is deprecated. ${reason}`);\n return originalMethod.apply(this, args);\n };\n\n return descriptor;\n };\n}\n\n/**\n * Mark a class as deprecated\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function deprecatedClass(reason: string = ''): <T extends new (...args: any[]) => any>(constructor: T) => T {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return function <T extends new (...args: any[]) => any>(\n constructor: T\n ): T {\n const key = constructor.name;\n return class extends constructor {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n constructor(...args: any[]) {\n warnOnce(key, `${key} is deprecated. ${reason}`);\n super(...args);\n }\n };\n };\n}\n","/**\n * EnvHub data model definitions\n */\n\nimport { z } from 'zod';\nimport { envVars } from '../env_vars.js';\n\n/**\n * EnvHub client configuration\n */\nexport const EnvHubClientConfigSchema = z.object({\n baseUrl: z.string().default(envVars.ROCK_ENVHUB_BASE_URL),\n});\n\nexport type EnvHubClientConfig = z.infer<typeof EnvHubClientConfigSchema>;\n\n/**\n * Rock environment info\n */\nexport const RockEnvInfoSchema = z.object({\n envName: z.string(),\n image: z.string(),\n owner: z.string().default(''),\n createAt: z.string().default(''),\n updateAt: z.string().default(''),\n description: z.string().default(''),\n tags: z.array(z.string()).default([]),\n extraSpec: z.record(z.unknown()).optional(),\n});\n\nexport type RockEnvInfo = z.infer<typeof RockEnvInfoSchema>;\n\n/**\n * Create RockEnvInfo from API response (already camelCase after HTTP layer conversion)\n */\nexport function createRockEnvInfo(data: Record<string, unknown>): RockEnvInfo {\n return RockEnvInfoSchema.parse(data);\n}","/**\n * EnvHub client for communicating with EnvHub server\n */\n\nimport { HttpUtils } from '../utils/http.js';\nimport {\n EnvHubClientConfig,\n EnvHubClientConfigSchema,\n RockEnvInfo,\n createRockEnvInfo,\n} from './schema.js';\n\n/**\n * EnvHub error exception\n */\nexport class EnvHubError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'EnvHubError';\n }\n}\n\n/**\n * EnvHub client for communicating with EnvHub server\n */\nexport class EnvHubClient {\n private config: EnvHubClientConfig;\n private baseUrl: string;\n private headers: Record<string, string>;\n\n constructor(config?: Partial<EnvHubClientConfig>) {\n this.config = EnvHubClientConfigSchema.parse(config ?? {});\n this.baseUrl = this.config.baseUrl;\n this.headers = { 'Content-Type': 'application/json' };\n }\n\n /**\n * Register or update an environment\n */\n async register(options: {\n envName: string;\n image: string;\n owner?: string;\n description?: string;\n tags?: string[];\n extraSpec?: Record<string, unknown>;\n }): Promise<RockEnvInfo> {\n const url = `${this.baseUrl}/env/register`;\n // Use camelCase - HTTP layer will convert to snake_case\n const payload = {\n envName: options.envName,\n image: options.image,\n owner: options.owner ?? '',\n description: options.description ?? '',\n tags: options.tags ?? [],\n extraSpec: options.extraSpec,\n };\n\n try {\n const response = await HttpUtils.post<Record<string, unknown>>(\n url,\n this.headers,\n payload\n );\n // Response is already camelCase (converted by HTTP layer)\n return createRockEnvInfo(response.result!);\n } catch (e) {\n throw new EnvHubError(`Failed to register environment: ${e}`);\n }\n }\n\n /**\n * Get environment by name\n */\n async getEnv(envName: string): Promise<RockEnvInfo> {\n const url = `${this.baseUrl}/env/get`;\n const payload = { envName };\n\n try {\n const response = await HttpUtils.post<Record<string, unknown>>(\n url,\n this.headers,\n payload\n );\n return createRockEnvInfo(response.result!);\n } catch (e) {\n throw new EnvHubError(`Failed to get environment ${envName}: ${e}`);\n }\n }\n\n /**\n * List environments\n */\n async listEnvs(options?: {\n owner?: string;\n tags?: string[];\n }): Promise<RockEnvInfo[]> {\n const url = `${this.baseUrl}/env/list`;\n const payload = {\n owner: options?.owner,\n tags: options?.tags,\n };\n\n try {\n const response = await HttpUtils.post<{ envs: Record<string, unknown>[] }>(\n url,\n this.headers,\n payload\n );\n const envsData = response.result?.envs ?? [];\n return envsData.map((envData) => createRockEnvInfo(envData));\n } catch (e) {\n throw new EnvHubError(`Failed to list environments: ${e}`);\n }\n }\n\n /**\n * Delete environment\n */\n async deleteEnv(envName: string): Promise<boolean> {\n const url = `${this.baseUrl}/env/delete`;\n const payload = { envName };\n\n try {\n await HttpUtils.post(url, this.headers, payload);\n return true;\n } catch (e) {\n const errorMessage = e instanceof Error ? e.message : String(e);\n if (errorMessage.includes('404')) {\n return false;\n }\n throw new EnvHubError(`Failed to delete environment ${envName}: ${e}`);\n }\n }\n\n /**\n * Health check\n */\n async healthCheck(): Promise<Record<string, string>> {\n const url = `${this.baseUrl}/health`;\n\n try {\n const response = await HttpUtils.get<Record<string, string>>(\n url,\n this.headers\n );\n return response.result ?? {};\n } catch (e) {\n throw new EnvHubError(`Failed to health check: ${e}`);\n }\n }\n}","/**\n * RockEnv - Gym-style environment interface\n */\n\nimport { envVars } from '../env_vars.js';\nimport { HttpUtils } from '../utils/http.js';\nimport { initLogger } from '../logger.js';\n\nconst logger = initLogger('rock.envs');\n\n/**\n * Step result tuple type\n */\nexport type StepResult = [\n observation: unknown,\n reward: number,\n terminated: boolean,\n truncated: boolean,\n info: Record<string, unknown>\n];\n\n/**\n * Reset result tuple type\n */\nexport type ResetResult = [observation: unknown, info: Record<string, unknown>];\n\n/**\n * RockEnv configuration\n */\nexport interface RockEnvConfig {\n envId: string;\n}\n\n/**\n * RockEnv - Gym-style environment for ROCK\n */\nexport class RockEnv {\n private readonly envId: string;\n private sandboxId: string | null = null;\n private isClosed = false;\n\n private constructor(config: RockEnvConfig) {\n this.envId = config.envId;\n }\n\n /**\n * Create and initialize a RockEnv instance\n *\n * @param config - Environment configuration\n * @returns Initialized RockEnv instance\n */\n static async create(config: RockEnvConfig): Promise<RockEnv> {\n const env = new RockEnv(config);\n try {\n await env.initializeEnvironment();\n } catch (e) {\n throw new Error(`Failed to initialize environment: ${e}`);\n }\n return env;\n }\n\n /**\n * Get the sandbox ID\n */\n getSandboxId(): string | null {\n return this.sandboxId;\n }\n\n /**\n * Initialize environment instance\n */\n private async initializeEnvironment(): Promise<void> {\n logger.debug(`Initializing environment: ${this.envId}`);\n const response = await HttpUtils.post<{ sandboxId: string }>(\n `${envVars.ROCK_BASE_URL}/apis/v1/envs/gem/make`,\n { 'Content-Type': 'application/json' },\n { envId: this.envId }\n );\n\n this.sandboxId = response.result?.sandboxId ?? null;\n if (!this.sandboxId) {\n throw new Error('Failed to get environment instance ID');\n }\n }\n\n /**\n * Execute an action step\n *\n * @param action - Action ID to execute\n * @returns Tuple containing observation, reward, terminated, truncated, info\n */\n async step(action: string | number): Promise<StepResult> {\n this.ensureNotClosed();\n\n const response = await HttpUtils.post<{\n observation: unknown;\n reward: number;\n terminated: boolean;\n truncated: boolean;\n info: Record<string, unknown>;\n }>(\n `${envVars.ROCK_BASE_URL}/apis/v1/envs/gem/step`,\n { 'Content-Type': 'application/json' },\n { sandboxId: this.sandboxId, action }\n );\n\n return this.parseStepResult(response.result);\n }\n\n /**\n * Reset environment to initial state\n *\n * @param seed - Optional random seed\n * @returns Tuple containing initial observation and info\n */\n async reset(seed?: number): Promise<ResetResult> {\n this.ensureNotClosed();\n\n const params: Record<string, unknown> = { sandboxId: this.sandboxId };\n if (seed !== undefined) {\n params.seed = seed;\n }\n\n const response = await HttpUtils.post<{\n observation: unknown;\n info: Record<string, unknown>;\n }>(\n `${envVars.ROCK_BASE_URL}/apis/v1/envs/gem/reset`,\n { 'Content-Type': 'application/json' },\n params\n );\n\n return this.parseResetResult(response.result);\n }\n\n /**\n * Close environment and clean up resources\n */\n async close(): Promise<void> {\n if (this.isClosed || !this.sandboxId) {\n return;\n }\n\n try {\n await HttpUtils.post(\n `${envVars.ROCK_BASE_URL}/apis/v1/envs/gem/close`,\n { 'Content-Type': 'application/json' },\n { sandboxId: this.sandboxId }\n );\n } catch (e) {\n throw new Error(`Failed to close environment: ${e}`);\n } finally {\n this.isClosed = true;\n this.sandboxId = null;\n }\n }\n\n /**\n * Parse step result from API response\n */\n private parseStepResult(\n data:\n | {\n observation: unknown;\n reward: number;\n terminated: boolean;\n truncated: boolean;\n info: Record<string, unknown>;\n }\n | undefined\n ): StepResult {\n if (!data) {\n throw new Error('Invalid step result: no data');\n }\n return [\n data.observation,\n data.reward,\n data.terminated,\n data.truncated,\n data.info,\n ];\n }\n\n /**\n * Parse reset result from API response\n */\n private parseResetResult(\n data: { observation: unknown; info: Record<string, unknown> } | undefined\n ): ResetResult {\n if (!data) {\n throw new Error('Invalid reset result: no data');\n }\n return [data.observation, data.info];\n }\n\n /**\n * Ensure environment is not closed\n */\n private ensureNotClosed(): void {\n if (this.isClosed) {\n throw new Error('Environment is closed');\n }\n }\n}","/**\n * Environment factory function\n */\n\nimport { RockEnv } from './rock_env.js';\n\n/**\n * Create a Rock environment instance\n *\n * @param envId - Environment ID\n * @param options - Environment options\n * @returns Promise resolving to RockEnv instance\n */\nexport async function make(\n envId: string,\n options?: Record<string, unknown>\n): Promise<RockEnv> {\n return RockEnv.create({ envId, ...options });\n}","/**\n * Sandbox configuration\n */\n\nimport { z } from 'zod';\nimport { envVars } from '../env_vars.js';\n\n/**\n * Base configuration schema\n */\nexport const BaseConfigSchema = z.object({\n baseUrl: z.string().default(() => envVars.ROCK_BASE_URL),\n xrlAuthorization: z.string().optional(),\n extraHeaders: z.record(z.string()).default({}),\n});\n\nexport type BaseConfig = z.infer<typeof BaseConfigSchema>;\n\n/**\n * Sandbox configuration schema\n */\nexport const SandboxConfigSchema = BaseConfigSchema.extend({\n image: z.string().default(() => envVars.ROCK_DEFAULT_IMAGE),\n autoClearSeconds: z.number().default(() => envVars.ROCK_DEFAULT_AUTO_CLEAR_SECONDS),\n routeKey: z.string().optional(),\n startupTimeout: z.number().default(() => envVars.ROCK_SANDBOX_STARTUP_TIMEOUT_SECONDS),\n memory: z.string().default(() => envVars.ROCK_DEFAULT_MEMORY),\n cpus: z.number().default(() => envVars.ROCK_DEFAULT_CPUS),\n userId: z.string().optional(),\n experimentId: z.string().optional(),\n cluster: z.string().default(() => envVars.ROCK_DEFAULT_CLUSTER),\n namespace: z.string().optional(),\n});\n\nexport type SandboxConfig = z.infer<typeof SandboxConfigSchema>;\n\n/**\n * Sandbox group configuration schema\n */\nexport const SandboxGroupConfigSchema = SandboxConfigSchema.extend({\n size: z.number().default(() => envVars.ROCK_DEFAULT_GROUP_SIZE),\n startConcurrency: z.number().default(() => envVars.ROCK_DEFAULT_START_CONCURRENCY),\n startRetryTimes: z.number().default(() => envVars.ROCK_DEFAULT_START_RETRY_TIMES),\n});\n\nexport type SandboxGroupConfig = z.infer<typeof SandboxGroupConfigSchema>;\n\n/**\n * Create sandbox config with defaults\n */\nexport function createSandboxConfig(\n config?: Partial<SandboxConfig>\n): SandboxConfig {\n return SandboxConfigSchema.parse(config ?? {});\n}\n\n/**\n * Create sandbox group config with defaults\n */\nexport function createSandboxGroupConfig(\n config?: Partial<SandboxGroupConfig>\n): SandboxGroupConfig {\n return SandboxGroupConfigSchema.parse(config ?? {});\n}\n","/**\n * Deploy - Sandbox resource deployment manager\n */\n\nimport { existsSync, statSync } from 'fs';\nimport { resolve } from 'path';\nimport { randomUUID } from 'crypto';\nimport { initLogger } from '../logger.js';\nimport type { Sandbox } from './client.js';\n\nconst logger = initLogger('rock.sandbox.deploy');\n\n/**\n * Deploy - Manages deployment of local directories to sandbox\n */\nexport class Deploy {\n private sandbox: Sandbox;\n private workingDir: string | null = null;\n\n constructor(sandbox: Sandbox) {\n this.sandbox = sandbox;\n }\n\n /**\n * Get the current working directory\n */\n getWorkingDir(): string | null {\n return this.workingDir;\n }\n\n /**\n * Deploy local directory to sandbox\n *\n * @param localPath - Local directory path\n * @param targetPath - Target path in sandbox (optional)\n * @returns The target path in sandbox\n */\n async deployWorkingDir(\n localPath: string,\n targetPath?: string\n ): Promise<string> {\n const localAbs = resolve(localPath);\n\n // Validate local path\n if (!existsSync(localAbs)) {\n throw new Error(`local_path not found: ${localAbs}`);\n }\n const stats = statSync(localAbs);\n if (!stats.isDirectory()) {\n throw new Error(`local_path must be a directory: ${localAbs}`);\n }\n\n // Determine target path\n const target = targetPath ?? `/tmp/rock_workdir_${randomUUID().replace(/-/g, '')}`;\n\n const sandboxId = this.sandbox.getSandboxId();\n logger.info(`[${sandboxId}] Deploying working_dir: ${localAbs} -> ${target}`);\n\n // Upload directory\n const uploadResult = await this.sandbox.getFs().uploadDir(localAbs, target);\n if (uploadResult.exitCode !== 0) {\n throw new Error(`Failed to upload directory: ${uploadResult.failureReason}`);\n }\n\n // Update working directory\n this.workingDir = target;\n logger.info(`[${sandboxId}] working_dir deployed: ${target}`);\n\n return target;\n }\n\n /**\n * Format command template supporting ${} and <<>> syntax\n *\n * @param template - Template string with placeholders\n * @param kwargs - Additional substitution variables\n * @returns Formatted string\n */\n format(template: string, kwargs: Record<string, string> = {}): string {\n // Build substitution map\n const subs: Record<string, string | undefined> = {\n ...kwargs,\n ...(this.workingDir ? { working_dir: this.workingDir } : {}),\n };\n\n // Replace <<key>> with ${key} for template substitution\n let result = template;\n for (const key of Object.keys(subs)) {\n result = result.replace(new RegExp(`<<${key}>>`, 'g'), `\\${${key}}`);\n }\n\n // Perform substitution\n for (const [key, value] of Object.entries(subs)) {\n if (value !== undefined) {\n result = result.replace(new RegExp(`\\\\$\\\\{${key}\\\\}`, 'g'), value);\n }\n }\n\n return result;\n }\n}\n","/**\n * Shell utility functions for safe command construction\n * Provides protection against command injection attacks\n *\n * Inspired by Python's shlex module and security best practices\n */\n\n/**\n * Safely escape a string for use in shell commands\n * This is the TypeScript equivalent of Python's shlex.quote()\n *\n * The algorithm wraps the string in single quotes and escapes any\n * existing single quotes by ending the quote, adding an escaped quote,\n * and starting a new quote.\n *\n * @param str - The string to escape\n * @returns The escaped string, safe for shell use\n *\n * @example\n * ```typescript\n * shellQuote('hello'); // Returns: 'hello'\n * shellQuote(\"it's\"); // Returns: 'it'\\''s'\n * shellQuote('/tmp; rm -rf /'); // Returns: '/tmp; rm -rf /'\n * ```\n */\nexport function shellQuote(str: string): string {\n // Empty string\n if (str === '') {\n return \"''\";\n }\n\n // If string only contains safe characters (alphanumeric, underscore, hyphen, dot, slash)\n // we could potentially skip quoting, but for maximum safety we always quote.\n // This follows the principle of \"defense in depth\".\n\n // Wrap in single quotes and escape any single quotes within\n // The pattern: 'str' becomes 'str'\\''str' for each embedded quote\n return `'${str.replace(/'/g, \"'\\\\''\")}'`;\n}\n\n/**\n * Mark a string as safe (not to be escaped)\n * Use with caution - only for trusted, pre-validated strings\n */\nexport class SafeString {\n constructor(public readonly value: string) {}\n}\n\n/**\n * Build a safe command from parts\n * Strings are automatically quoted, SafeString instances are passed through\n *\n * @param parts - Array of command parts (strings or SafeString)\n * @returns The constructed command string\n *\n * @example\n * ```typescript\n * const cmd = buildCommand(['echo', 'hello world']);\n * // Returns: \"echo 'hello world'\"\n *\n * const cmd2 = buildCommand(['rm', '-rf', new SafeString('/tmp/*')]);\n * // Returns: \"rm -rf /tmp/*\"\n * ```\n */\nexport function buildCommand(parts: Array<string | SafeString>): string {\n return parts.map((p) => (p instanceof SafeString ? p.value : shellQuote(p))).join(' ');\n}\n\n/**\n * Wrap a command with bash -c safely\n * The entire command string is quoted to prevent injection\n *\n * @param cmd - The command to wrap\n * @returns The wrapped command string\n *\n * @example\n * ```typescript\n * const wrapped = bashWrap('echo \"hello world\"');\n * // Returns: \"bash -c 'echo \\\"hello world\\\"'\"\n * ```\n */\nexport function bashWrap(cmd: string): string {\n return `bash -c ${shellQuote(cmd)}`;\n}\n\n/**\n * Validate and normalize a URL\n * Returns the normalized URL or throws an error\n *\n * @param url - The URL to validate\n * @param allowedProtocols - Array of allowed protocols (default: ['http:', 'https:'])\n * @returns The normalized URL (trailing slash removed)\n * @throws Error if URL is invalid or uses disallowed protocol\n *\n * @example\n * ```typescript\n * validateUrl('https://example.com/'); // Returns 'https://example.com'\n * validateUrl('ftp://example.com'); // Throws error\n * ```\n */\nexport function validateUrl(url: string, allowedProtocols = ['http:', 'https:']): string {\n try {\n const parsed = new URL(url);\n if (!allowedProtocols.includes(parsed.protocol)) {\n throw new Error(\n `Protocol ${parsed.protocol} is not allowed. Allowed: ${allowedProtocols.join(', ')}`\n );\n }\n // Remove trailing slash for consistency\n return url.replace(/\\/$/, '');\n } catch (e) {\n if (e instanceof Error && e.message.includes('Protocol')) {\n throw e;\n }\n throw new Error(`Invalid URL: ${url}. ${e instanceof Error ? e.message : String(e)}`);\n }\n}\n\n/**\n * Validate an IPv4 address\n * Returns the validated IP or throws an error\n *\n * @param ip - The IP address to validate\n * @returns The validated IP address\n * @throws Error if IP format is invalid\n *\n * @example\n * ```typescript\n * validateIpAddress('192.168.1.1'); // Returns '192.168.1.1'\n * validateIpAddress('192.168.1.256'); // Throws error\n * ```\n */\nexport function validateIpAddress(ip: string): string {\n const pattern = /^(\\d{1,3}\\.){3}\\d{1,3}$/;\n if (!pattern.test(ip)) {\n throw new Error(`Invalid IP address format: ${ip}. Expected format: x.x.x.x`);\n }\n const octets = ip.split('.');\n for (const octet of octets) {\n const value = parseInt(octet, 10);\n if (value < 0 || value > 255) {\n throw new Error(`Invalid IP address: ${ip}. Each octet must be 0-255.`);\n }\n }\n return ip;\n}\n\n/**\n * Validate a file path for basic security\n * Checks for:\n * - Absolute path requirement\n * - Path traversal attempts (..)\n * - Forbidden shell metacharacters\n *\n * @param path - The path to validate\n * @throws Error if path fails validation\n *\n * @example\n * ```typescript\n * validatePath('/tmp/file.txt'); // OK\n * validatePath('/tmp/../etc/passwd'); // Throws error\n * validatePath('/tmp/$(whoami)'); // Throws error\n * ```\n */\nexport function validatePath(path: string): void {\n if (!path.startsWith('/')) {\n throw new Error(`Path must be absolute: ${path}`);\n }\n if (path.includes('..')) {\n throw new Error(`Path cannot contain ..: ${path}`);\n }\n // Check for shell metacharacters that could enable injection\n if (/[`$(){};|&<>()]/.test(path)) {\n throw new Error(`Path contains forbidden characters: ${path}`);\n }\n}\n\n/**\n * Validate a Unix username\n * Only allows alphanumeric characters and underscore\n * Cannot start with a dash or digit\n *\n * @param username - The username to validate\n * @throws Error if username fails validation\n *\n * @example\n * ```typescript\n * validateUsername('root'); // OK\n * validateUsername('valid_user'); // OK\n * validateUsername('-rf'); // Throws error\n * validateUsername('user;rm'); // Throws error\n * ```\n */\nexport function validateUsername(username: string): void {\n if (username.length === 0) {\n throw new Error('Username cannot be empty');\n }\n // Cannot start with dash (could be interpreted as option)\n if (username.startsWith('-')) {\n throw new Error(`Username starting with dash is not allowed: ${username}`);\n }\n // Only allow alphanumeric and underscore (POSIX username rules)\n if (!/^[a-zA-Z_][a-zA-Z0-9_-]*$/.test(username)) {\n throw new Error(`Invalid username format: ${username}. Only alphanumeric, underscore, and hyphen allowed.`);\n }\n}\n\n/**\n * Validate a chmod mode string\n * Accepts octal (e.g., '755', '0755') or symbolic modes (e.g., 'u+x', 'go-w')\n *\n * @param mode - The mode string to validate\n * @throws Error if mode fails validation\n *\n * @example\n * ```typescript\n * validateChmodMode('755'); // OK\n * validateChmodMode('u+x'); // OK\n * validateChmodMode('abc'); // Throws error\n * ```\n */\nexport function validateChmodMode(mode: string): void {\n if (mode.length === 0) {\n throw new Error('Mode cannot be empty');\n }\n // Octal mode: 3-4 digits (optional leading 0)\n if (/^[0-7]{3,4}$/.test(mode)) {\n return;\n }\n // Symbolic mode: [ugoa...][+-=][rwxXst...]\n // Multiple clauses separated by comma\n if (/^[ugoa]*[+-=][rwxXstugo]*([,][ugoa]*[+-=][rwxXstugo]*)*$/.test(mode)) {\n return;\n }\n throw new Error(`Invalid chmod mode: ${mode}. Expected octal (e.g., 755) or symbolic (e.g., u+x)`);\n}","/**\n * FileSystem - File system operations for sandbox\n */\n\nimport { existsSync, statSync, mkdtempSync, rmSync } from 'fs';\nimport { tmpdir } from 'os';\nimport { join, resolve, basename } from 'path';\nimport { initLogger } from '../logger.js';\nimport type { Observation, CommandResponse } from '../types/responses.js';\nimport type { ChownRequest, ChmodRequest } from '../types/requests.js';\nimport type { AbstractSandbox } from './client.js';\nimport { RunMode } from '../common/constants.js';\nimport { validatePath, validateUsername, validateChmodMode, shellQuote } from '../utils/shell.js';\n\nconst logger = initLogger('rock.sandbox.fs');\n\n/**\n * Create a tar.gz archive of a directory (simplified implementation)\n * Uses shell command `tar` for reliability\n */\nasync function createTarGz(sourceDir: string, outputPath: string): Promise<void> {\n const { spawn } = await import('child_process');\n \n return new Promise((resolve, reject) => {\n const tar = spawn('tar', ['-czf', outputPath, '-C', sourceDir, '.']);\n \n let stderr = '';\n tar.stderr.on('data', (data) => {\n stderr += data.toString();\n });\n \n tar.on('close', (code) => {\n if (code === 0) {\n resolve();\n } else {\n reject(new Error(`tar command failed with code ${code}: ${stderr}`));\n }\n });\n \n tar.on('error', (err) => {\n reject(err);\n });\n });\n}\n\n/**\n * Abstract file system interface\n */\nexport abstract class FileSystem {\n protected sandbox: AbstractSandbox;\n\n constructor(sandbox: AbstractSandbox) {\n this.sandbox = sandbox;\n }\n\n abstract chown(request: ChownRequest): Promise<{ success: boolean; message: string }>;\n abstract chmod(request: ChmodRequest): Promise<{ success: boolean; message: string }>;\n abstract uploadDir(\n sourceDir: string,\n targetDir: string,\n extractTimeout?: number\n ): Promise<Observation>;\n}\n\n/**\n * Linux file system implementation\n */\nexport class LinuxFileSystem extends FileSystem {\n constructor(sandbox: AbstractSandbox) {\n super(sandbox);\n }\n\n async chown(request: ChownRequest): Promise<{ success: boolean; message: string }> {\n const { paths, recursive, remoteUser } = request;\n\n if (!paths || paths.length === 0) {\n throw new Error('paths is empty');\n }\n\n // Validate username to prevent injection\n validateUsername(remoteUser);\n\n // Validate all paths\n for (const p of paths) {\n validatePath(p);\n }\n\n const command = ['chown'];\n if (recursive) {\n command.push('-R');\n }\n command.push(`${remoteUser}:${remoteUser}`, ...paths);\n\n logger.info(`chown command: ${command.join(' ')}`);\n\n const response: CommandResponse = await this.sandbox.execute({ command, timeout: 300 });\n if (response.exitCode !== 0) {\n return { success: false, message: JSON.stringify(response) };\n }\n return { success: true, message: JSON.stringify(response) };\n }\n\n async chmod(request: ChmodRequest): Promise<{ success: boolean; message: string }> {\n const { paths, recursive, mode } = request;\n\n if (!paths || paths.length === 0) {\n throw new Error('paths is empty');\n }\n\n // Validate mode to prevent injection\n validateChmodMode(mode);\n\n // Validate all paths\n for (const p of paths) {\n validatePath(p);\n }\n\n const command = ['chmod'];\n if (recursive) {\n command.push('-R');\n }\n command.push(mode, ...paths);\n\n logger.info(`chmod command: ${command.join(' ')}`);\n const response: CommandResponse = await this.sandbox.execute({ command, timeout: 300 });\n if (response.exitCode !== 0) {\n return { success: false, message: JSON.stringify(response) };\n }\n return { success: true, message: JSON.stringify(response) };\n }\n\n async uploadDir(\n sourceDir: string,\n targetDir: string,\n extractTimeout: number = 600\n ): Promise<Observation> {\n let localTarPath: string | null = null;\n let remoteTarPath: string | null = null;\n let session: string | null = null;\n\n try {\n // Validate source directory\n const src = resolve(sourceDir);\n if (!existsSync(src)) {\n return {\n output: '',\n exitCode: 1,\n failureReason: `source_dir not found: ${src}`,\n expectString: '',\n };\n }\n const stats = statSync(src);\n if (!stats.isDirectory()) {\n return {\n output: '',\n exitCode: 1,\n failureReason: `source_dir must be a directory: ${src}`,\n expectString: '',\n };\n }\n\n // Validate target directory for security\n try {\n validatePath(targetDir);\n } catch (e) {\n return {\n output: '',\n exitCode: 1,\n failureReason: e instanceof Error ? e.message : 'Invalid target directory',\n expectString: '',\n };\n }\n\n // Generate unique names using timestamp\n const ts = Date.now().toString();\n const tmpDir = mkdtempSync(join(tmpdir(), 'rock-upload-'));\n localTarPath = join(tmpDir, `rock_upload_${ts}.tar.gz`);\n remoteTarPath = `/tmp/rock_upload_${ts}.tar.gz`;\n session = `bash-${ts}`;\n\n logger.info(`uploadDir: ${src} -> ${targetDir}`);\n\n // Create bash session\n await this.sandbox.createSession({ session, startupSource: [], envEnable: false });\n\n // Check tar exists in sandbox\n const checkResult = await this.sandbox.arun('command -v tar >/dev/null 2>&1', {\n session,\n mode: RunMode.NORMAL,\n });\n if (checkResult.exitCode !== 0) {\n return {\n output: '',\n exitCode: 1,\n failureReason: 'sandbox has no tar command; cannot extract tarball',\n expectString: '',\n };\n }\n\n // Pack locally\n try {\n await createTarGz(src, localTarPath);\n } catch (e) {\n throw new Error(`tar pack failed: ${e}`);\n }\n\n // Upload tarball\n const uploadResponse = await this.sandbox.upload({\n sourcePath: localTarPath,\n targetPath: remoteTarPath,\n });\n if (!uploadResponse.success) {\n return {\n output: '',\n exitCode: 1,\n failureReason: `tar upload failed: ${uploadResponse.message}`,\n expectString: '',\n };\n }\n\n // Extract in sandbox using properly escaped paths\n const escapedTargetDir = shellQuote(targetDir);\n const escapedRemoteTar = shellQuote(remoteTarPath);\n const extractCmd = `rm -rf ${escapedTargetDir} && mkdir -p ${escapedTargetDir} && tar -xzf ${escapedRemoteTar} -C ${escapedTargetDir}`;\n const extractResult = await this.sandbox.arun(`bash -c ${shellQuote(extractCmd)}`, {\n session,\n mode: RunMode.NOHUP,\n waitTimeout: extractTimeout,\n });\n\n if (extractResult.exitCode !== 0) {\n return {\n output: '',\n exitCode: 1,\n failureReason: `tar extract failed: ${extractResult.output}`,\n expectString: '',\n };\n }\n\n // Cleanup remote tarball\n try {\n await this.sandbox.execute({ command: ['rm', '-f', remoteTarPath], timeout: 30 });\n } catch {\n // Ignore cleanup errors\n }\n\n return {\n output: `uploaded ${src} -> ${targetDir} via tar`,\n exitCode: 0,\n failureReason: '',\n expectString: '',\n };\n } catch (e) {\n return {\n output: '',\n exitCode: 1,\n failureReason: `upload_dir unexpected error: ${e}`,\n expectString: '',\n };\n } finally {\n // Cleanup local tarball and temp directory\n try {\n if (localTarPath) {\n const tmpDir = basename(localTarPath).replace(/\\.tar\\.gz$/, '');\n rmSync(join(tmpdir(), `rock-upload-${tmpDir.split('_').pop()}`), { recursive: true, force: true });\n }\n } catch {\n // Ignore cleanup errors\n }\n }\n }\n}\n","/**\n * Sandbox constants - Script templates and constants for sandbox operations\n */\n\n/**\n * Ensure ossutil is installed in the sandbox.\n * - Checks wget/curl availability (fails fast if neither is present)\n * - Checks unzip availability (fails fast if missing)\n * - Skips installation if ossutil is already in PATH\n * - Downloads ossutil v2.2.1 for linux-amd64\n * - Installs to /usr/local/bin\n */\nexport const ENSURE_OSSUTIL_SCRIPT = `#!/bin/bash\nset -e\n\n# Check downloader\nif command -v wget >/dev/null 2>&1; then\n DOWNLOADER=\"wget\"\nelif command -v curl >/dev/null 2>&1; then\n DOWNLOADER=\"curl\"\nelse\n echo \"ERROR: neither wget nor curl is available. Please install one first.\" >&2\n exit 1\nfi\n\n# Check unzip\nif ! command -v unzip >/dev/null 2>&1; then\n echo \"ERROR: unzip is not available. Please install unzip first.\" >&2\n exit 1\nfi\n\n# Skip if already installed\nif command -v ossutil >/dev/null 2>&1; then\n echo \"ossutil already installed, skipping.\"\n exit 0\nfi\n\n# Download\ncd /tmp\nif [ \"$DOWNLOADER\" = \"wget\" ]; then\n wget -q https://gosspublic.alicdn.com/ossutil/v2/2.2.1/ossutil-2.2.1-linux-amd64.zip -O /tmp/ossutil.zip\nelse\n curl -sL -o /tmp/ossutil.zip https://gosspublic.alicdn.com/ossutil/v2/2.2.1/ossutil-2.2.1-linux-amd64.zip\nfi\n\n# Extract and install\nunzip -o -q ossutil.zip\nchmod 755 /tmp/ossutil-2.2.1-linux-amd64/ossutil\nmkdir -p /usr/local/bin\nmv /tmp/ossutil-2.2.1-linux-amd64/ossutil /usr/local/bin/\n\n# Cleanup\nrm -rf /tmp/ossutil.zip /tmp/ossutil-2.2.1-linux-amd64\n\n# Verify\nossutil version\n`;\n","/**\n * Network - Network management for sandbox\n */\n\nimport { initLogger } from '../logger.js';\nimport type { Observation } from '../types/responses.js';\nimport type { Sandbox } from './client.js';\nimport { validateUrl, validateIpAddress, shellQuote } from '../utils/shell.js';\n\nconst logger = initLogger('rock.sandbox.network');\n\n/**\n * Speedup type enum\n */\nexport enum SpeedupType {\n APT = 'apt',\n PIP = 'pip',\n GITHUB = 'github',\n}\n\n/**\n * Network management for sandbox\n */\nexport class Network {\n private sandbox: Sandbox;\n\n constructor(sandbox: Sandbox) {\n this.sandbox = sandbox;\n }\n\n /**\n * Configure acceleration for package managers or network resources\n *\n * @param speedupType - Type of speedup configuration\n * @param speedupValue - Speedup value (mirror URL or IP address)\n * @param timeout - Execution timeout in seconds\n * @returns Observation with execution result\n */\n async speedup(\n speedupType: SpeedupType,\n speedupValue: string,\n timeout: number = 300\n ): Promise<Observation> {\n const sandboxId = this.sandbox.getSandboxId();\n logger.info(\n `[${sandboxId}] Configuring ${speedupType} speedup: ${speedupValue}`\n );\n\n // Validate input based on type\n let validatedValue: string;\n switch (speedupType) {\n case SpeedupType.APT:\n case SpeedupType.PIP:\n validatedValue = validateUrl(speedupValue);\n break;\n case SpeedupType.GITHUB:\n validatedValue = validateIpAddress(speedupValue);\n break;\n default:\n throw new Error(`Unsupported speedup type: ${speedupType}`);\n }\n\n // Generate script content\n const scriptContent = this.generateSpeedupScript(speedupType, validatedValue);\n\n // Execute script using the process module (uploads script file and executes)\n const result = await this.sandbox.getProcess().executeScript({\n scriptContent,\n waitTimeout: timeout,\n });\n\n return result;\n }\n\n /**\n * Generate speedup script content based on type\n */\n private generateSpeedupScript(speedupType: SpeedupType, value: string): string {\n switch (speedupType) {\n case SpeedupType.APT:\n return this.buildAptSpeedupScript(value);\n case SpeedupType.PIP:\n return this.buildPipSpeedupScript(value);\n case SpeedupType.GITHUB:\n return this.buildGithubSpeedupScript(value);\n default:\n throw new Error(`Unsupported speedup type: ${speedupType}`);\n }\n }\n\n /**\n * Build APT speedup script\n * Uses script file approach for safety\n */\n private buildAptSpeedupScript(mirrorUrl: string): string {\n return `#!/bin/bash\ndetect_system_and_version() {\n if [ -f /etc/debian_version ]; then\n . /etc/os-release\n if [ \"$ID\" = \"ubuntu\" ]; then\n echo \"ubuntu:$VERSION_CODENAME\"\n elif [ \"$ID\" = \"debian\" ]; then\n echo \"debian:$VERSION_CODENAME\"\n else\n echo \"unknown:\"\n fi\n else\n echo \"unknown:\"\n fi\n}\n\nSYSTEM_INFO=$(detect_system_and_version)\nSYSTEM=$(echo \"$SYSTEM_INFO\" | cut -d: -f1)\nCODENAME=$(echo \"$SYSTEM_INFO\" | cut -d: -f2)\necho \"System type: $SYSTEM, Version codename: $CODENAME\"\n\n# Backup original sources file\nif [ ! -f /etc/apt/sources.list.backup ]; then\n cp /etc/apt/sources.list /etc/apt/sources.list.backup\nfi\n\nif [ \"$SYSTEM\" = \"debian\" ]; then\n if [ -z \"$CODENAME\" ]; then\n CODENAME=\"bookworm\"\n fi\n cat > /etc/apt/sources.list <<EOF\ndeb ${mirrorUrl}/debian/ \\${CODENAME} main non-free non-free-firmware contrib\ndeb ${mirrorUrl}/debian-security/ \\${CODENAME}-security main\ndeb ${mirrorUrl}/debian/ \\${CODENAME}-updates main non-free non-free-firmware contrib\nEOF\nelif [ \"$SYSTEM\" = \"ubuntu\" ]; then\n if [ -z \"$CODENAME\" ]; then\n if [ -f /etc/os-release ]; then\n VERSION_ID=$(grep VERSION_ID /etc/os-release | cut -d'\"' -f2)\n case \"$VERSION_ID\" in\n \"24.04\") CODENAME=\"noble\" ;;\n \"22.04\") CODENAME=\"jammy\" ;;\n \"20.04\") CODENAME=\"focal\" ;;\n *) CODENAME=\"noble\" ;;\n esac\n else\n CODENAME=\"noble\"\n fi\n fi\n cat > /etc/apt/sources.list <<EOF\ndeb ${mirrorUrl}/ubuntu/ $CODENAME main restricted universe multiverse\ndeb ${mirrorUrl}/ubuntu/ $CODENAME-security main restricted universe multiverse\ndeb ${mirrorUrl}/ubuntu/ $CODENAME-updates main restricted universe multiverse\ndeb ${mirrorUrl}/ubuntu/ $CODENAME-backports main restricted universe multiverse\nEOF\nfi\n\n# Clean up other source files\nrm -rf /etc/apt/sources.list.d\n\n# Clean APT cache and update\napt-get clean\nrm -rf /var/lib/apt/lists/*\necho \">>> APT source configuration completed\"\n`;\n }\n\n /**\n * Build PIP speedup script\n * Uses script file approach for safety\n */\n private buildPipSpeedupScript(mirrorUrl: string): string {\n const parsed = new URL(mirrorUrl);\n const trustedHost = parsed.host;\n const indexUrl = `${mirrorUrl}/pypi/simple/`;\n\n return `#!/bin/bash\necho \">>> Configuring pip source...\"\n\n# Configure for root user\nmkdir -p /root/.pip\ncat > /root/.pip/pip.conf <<EOF\n[global]\nindex-url = ${indexUrl}\ntrusted-host = ${trustedHost}\ntimeout = 120\n\n[install]\ntrusted-host = ${trustedHost}\nEOF\n\n# Configure for other existing users\nfor home_dir in /home/*; do\n if [ -d \"$home_dir\" ]; then\n username=$(basename \"$home_dir\")\n mkdir -p \"$home_dir/.pip\"\n cat > \"$home_dir/.pip/pip.conf\" <<EOF\n[global]\nindex-url = ${indexUrl}\ntrusted-host = ${trustedHost}\ntimeout = 120\n\n[install]\ntrusted-host = ${trustedHost}\nEOF\n chown -R \"$username:$username\" \"$home_dir/.pip\" 2>/dev/null || true\n fi\ndone\n\necho \">>> pip source configuration completed\"\n`;\n }\n\n /**\n * Build GitHub speedup script\n * Uses script file approach for safety\n */\n private buildGithubSpeedupScript(ipAddress: string): string {\n return `#!/bin/bash\necho \">>> Configuring GitHub hosts for github.com acceleration...\"\n\n# Backup original hosts file if not already backed up\nif [ ! -f /etc/hosts.backup ]; then\n cp /etc/hosts /etc/hosts.backup\n echo \"Hosts file backed up to /etc/hosts.backup\"\nfi\n\n# Remove existing github.com entry if any\nsed -i '/github\\.com$/d' /etc/hosts\n\n# Add new github.com hosts entry\necho \"${ipAddress} github.com\" | tee -a /etc/hosts\n\necho \">>> GitHub hosts configuration completed\"\necho \"Current github.com entry in /etc/hosts:\"\ngrep 'github\\.com$' /etc/hosts || echo \"No github.com entry found\"\n`;\n }\n}","/**\n * Process - Process management for sandbox execution\n */\n\nimport { initLogger } from '../logger.js';\nimport type { Observation } from '../types/responses.js';\nimport type { Sandbox } from './client.js';\n\nconst logger = initLogger('rock.sandbox.process');\n\n/**\n * Process management for sandbox execution\n */\nexport class Process {\n private sandbox: Sandbox;\n\n constructor(sandbox: Sandbox) {\n this.sandbox = sandbox;\n }\n\n /**\n * Execute a script in the sandbox\n *\n * @param scriptContent - The script content to execute\n * @param scriptName - Optional custom script name\n * @param waitTimeout - Maximum time to wait for script completion\n * @param waitInterval - Interval between process checks\n * @param cleanup - Whether to delete the script file after execution\n * @returns Observation with execution result\n */\n async executeScript(options: {\n scriptContent: string;\n scriptName?: string;\n waitTimeout?: number;\n waitInterval?: number;\n cleanup?: boolean;\n }): Promise<Observation> {\n const {\n scriptContent,\n scriptName,\n waitTimeout = 300,\n cleanup = true,\n } = options;\n\n const sandboxId = this.sandbox.getSandboxId();\n const timestamp = Date.now();\n const name = scriptName ?? `script_${timestamp}.sh`;\n const scriptPath = `/tmp/${name}`;\n\n try {\n // Upload script\n logger.info(`[${sandboxId}] Uploading script to ${scriptPath}`);\n const writeResult = await this.sandbox.writeFile({\n content: scriptContent,\n path: scriptPath,\n });\n\n if (!writeResult.success) {\n const errorMsg = `Failed to upload script: ${writeResult.message}`;\n logger.error(errorMsg);\n return { output: errorMsg, exitCode: 1, failureReason: 'Script upload failed', expectString: '' };\n }\n\n // Execute script\n logger.info(`[${sandboxId}] Executing script: ${scriptPath} (timeout=${waitTimeout}s)`);\n const result = await this.sandbox.arun(`bash ${scriptPath}`, {\n mode: 'nohup',\n waitTimeout,\n });\n\n return result;\n } catch (e) {\n const errorMsg = `Script execution failed: ${e}`;\n logger.error(errorMsg);\n return { output: errorMsg, exitCode: 1, failureReason: errorMsg, expectString: '' };\n } finally {\n // Cleanup script if requested\n if (cleanup) {\n try {\n logger.info(`[${sandboxId}] Cleaning up script: ${scriptPath}`);\n await this.sandbox.execute({ command: ['rm', '-f', scriptPath], timeout: 30 });\n } catch (e) {\n logger.warn(`Failed to cleanup script ${scriptPath}: ${e}`);\n }\n }\n }\n }\n}\n","/**\n * RemoteUser - Remote user management for sandbox\n */\n\nimport { initLogger } from '../logger.js';\nimport type { CommandResponse } from '../types/responses.js';\nimport type { AbstractSandbox } from './client.js';\n\nconst logger = initLogger('rock.sandbox.user');\n\n/**\n * Abstract remote user interface\n */\nexport abstract class RemoteUser {\n protected sandbox: AbstractSandbox;\n protected currentUser: string = 'root';\n\n constructor(sandbox: AbstractSandbox) {\n this.sandbox = sandbox;\n }\n\n getCurrentUser(): string {\n return this.currentUser;\n }\n\n abstract createRemoteUser(userName: string): Promise<boolean>;\n abstract isUserExist(userName: string): Promise<boolean>;\n}\n\n/**\n * Linux remote user implementation\n */\nexport class LinuxRemoteUser extends RemoteUser {\n constructor(sandbox: AbstractSandbox) {\n super(sandbox);\n }\n\n async createRemoteUser(userName: string): Promise<boolean> {\n try {\n if (await this.isUserExist(userName)) {\n return true;\n }\n\n const response: CommandResponse = await this.sandbox.execute({\n command: ['useradd', '-m', '-s', '/bin/bash', userName],\n timeout: 30,\n });\n\n logger.info(`user add execute response: ${JSON.stringify(response)}`);\n\n if (response.exitCode !== 0) {\n return false;\n }\n\n return true;\n } catch (e) {\n logger.error('create_remote_user failed', e as Error);\n throw e;\n }\n }\n\n async isUserExist(userName: string): Promise<boolean> {\n try {\n const response: CommandResponse = await this.sandbox.execute({\n command: ['id', userName],\n timeout: 30,\n });\n\n if (response.exitCode === 0) {\n logger.info(`user ${userName} already exists`);\n return true;\n }\n return false;\n } catch (e) {\n logger.info(`is_user_exist exception: ${e}`);\n throw e;\n }\n }\n}\n","/**\n * Sandbox utilities\n */\n\nimport { initLogger } from '../logger.js';\nimport { sleep } from '../utils/retry.js';\nimport type { Sandbox } from './client.js';\nimport type { RunModeType } from '../common/constants.js';\nimport type { Observation } from '../types/responses.js';\n\nconst logger = initLogger('rock.sandbox.utils');\n\n/**\n * Get the caller's module name for logger naming\n */\nfunction getCallerLoggerName(): string {\n const stack = new Error().stack;\n if (!stack) return 'unknown';\n\n const lines = stack.split('\\n');\n // Skip first two lines (Error and this function)\n for (let i = 2; i < lines.length; i++) {\n const line = lines[i];\n if (line && !line.includes('utils.ts')) {\n const match = line.match(/at\\s+(?:(?:async\\s+)?(?:\\w+\\.)?(\\w+)|(\\w+))/);\n if (match) {\n return match[1] ?? match[2] ?? 'unknown';\n }\n }\n }\n return 'unknown';\n}\n\n/**\n * Decorator to add timing and logging to functions\n */\nexport function withTimeLogging(operationName: string): MethodDecorator {\n return function (\n target: unknown,\n propertyKey: string | symbol,\n descriptor: PropertyDescriptor\n ): PropertyDescriptor {\n const originalMethod = descriptor.value;\n\n descriptor.value = async function (...args: unknown[]): Promise<unknown> {\n const startTime = Date.now();\n const name = getCallerLoggerName();\n const log = initLogger(name);\n\n log.debug(`${operationName} started`);\n\n try {\n const result = await originalMethod.apply(this, args);\n const elapsed = Date.now() - startTime;\n log.info(`${operationName} completed (elapsed: ${elapsed / 1000}s)`);\n return result;\n } catch (e) {\n const elapsed = Date.now() - startTime;\n log.error(`${operationName} failed: ${e} (elapsed: ${elapsed / 1000}s)`);\n throw e;\n }\n };\n\n return descriptor;\n };\n}\n\n/**\n * Run command with retry\n */\nexport async function arunWithRetry(\n sandbox: Sandbox,\n cmd: string,\n session: string,\n mode: RunModeType,\n options: {\n waitTimeout?: number;\n waitInterval?: number;\n maxAttempts?: number;\n errorMsg?: string;\n } = {}\n): Promise<Observation> {\n const {\n waitTimeout = 300,\n waitInterval = 10,\n maxAttempts = 3,\n errorMsg = 'Command failed',\n } = options;\n\n let lastError: Error | null = null;\n let currentDelay = 5000;\n\n for (let attempt = 1; attempt <= maxAttempts; attempt++) {\n try {\n const result = await sandbox.arun(cmd, {\n session,\n mode,\n waitTimeout,\n waitInterval,\n });\n\n if (result.exitCode !== 0) {\n throw new Error(\n `${errorMsg} with exit code: ${result.exitCode}, output: ${result.output}`\n );\n }\n return result;\n } catch (e) {\n lastError = e instanceof Error ? e : new Error(String(e));\n logger.warn(`Attempt ${attempt}/${maxAttempts} failed: ${lastError.message}`);\n\n if (attempt < maxAttempts) {\n await sleep(currentDelay);\n currentDelay *= 2;\n }\n }\n }\n\n throw lastError ?? new Error(`${errorMsg}: all attempts failed`);\n}\n\n/**\n * Re-export extractNohupPid from utils/http.ts to avoid duplication\n */\nexport { extractNohupPid } from '../utils/http.js';\n","/**\n * Sandbox client - Core sandbox management\n */\n\nimport { randomUUID } from 'crypto';\nimport { initLogger } from '../logger.js';\nimport { raiseForCode, InternalServerRockError } from '../common/exceptions.js';\nimport { HttpUtils } from '../utils/http.js';\nimport { sleep } from '../utils/retry.js';\nimport {\n SandboxConfig,\n SandboxGroupConfig,\n createSandboxConfig,\n createSandboxGroupConfig,\n} from './config.js';\nimport { Deploy } from './deploy.js';\nimport { LinuxFileSystem } from './file_system.js';\nimport { ENSURE_OSSUTIL_SCRIPT } from './constants.js';\nimport { Network } from './network.js';\nimport { Process } from './process.js';\nimport { LinuxRemoteUser } from './remote_user.js';\nimport { extractNohupPid } from './utils.js';\nimport { RunModeType, RunMode as RunModeEnum } from '../common/constants.js';\nexport type { RunModeType };\nexport { RunModeEnum as RunMode };\nimport {\n ObservationSchema,\n CommandResponseSchema,\n IsAliveResponseSchema,\n SandboxStatusResponseSchema,\n CreateSessionResponseSchema,\n WriteFileResponseSchema,\n ReadFileResponseSchema,\n UploadResponseSchema,\n CloseSessionResponseSchema,\n DownloadFileResponseSchema,\n OssCredentialsSchema,\n} from '../types/responses.js';\nimport type {\n Observation,\n CommandResponse,\n IsAliveResponse,\n SandboxStatusResponse,\n CreateSessionResponse,\n WriteFileResponse,\n ReadFileResponse,\n UploadResponse,\n CloseSessionResponse,\n DownloadFileResponse,\n OssCredentials,\n} from '../types/responses.js';\nimport type {\n Command,\n CreateBashSessionRequest,\n WriteFileRequest,\n ReadFileRequest,\n UploadRequest,\n CloseSessionRequest,\n UploadMode,\n} from '../types/requests.js';\nimport { envVars } from '../env_vars.js';\n\nconst logger = initLogger('rock.sandbox');\n\n/**\n * Abstract sandbox interface\n */\nexport abstract class AbstractSandbox {\n abstract isAlive(): Promise<IsAliveResponse>;\n abstract createSession(request: CreateBashSessionRequest): Promise<CreateSessionResponse>;\n abstract execute(command: Command): Promise<CommandResponse>;\n abstract readFile(request: ReadFileRequest): Promise<ReadFileResponse>;\n abstract writeFile(request: WriteFileRequest): Promise<WriteFileResponse>;\n abstract upload(request: UploadRequest): Promise<UploadResponse>;\n abstract closeSession(request: CloseSessionRequest): Promise<CloseSessionResponse>;\n abstract arun(\n cmd: string,\n options?: {\n session?: string;\n mode?: RunModeType;\n timeout?: number;\n waitTimeout?: number;\n waitInterval?: number;\n responseLimitedBytesInNohup?: number;\n ignoreOutput?: boolean;\n outputFile?: string;\n }\n ): Promise<Observation>;\n abstract close(): Promise<void>;\n}\n\n/**\n * Sandbox - Main sandbox client\n */\nexport class Sandbox extends AbstractSandbox {\n private config: SandboxConfig;\n private url: string;\n private routeKey: string;\n private sandboxId: string | null = null;\n private hostName: string | null = null;\n private hostIp: string | null = null;\n private cluster: string;\n\n // OSS-related properties\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private ossBucket: any = null;\n private ossTokenExpireTime: string = '';\n\n // Sub-components\n private deploy: Deploy;\n private fs: LinuxFileSystem;\n private network: Network;\n private process: Process;\n private remoteUser: LinuxRemoteUser;\n\n constructor(config: Partial<SandboxConfig> = {}) {\n super();\n this.config = createSandboxConfig(config);\n this.url = `${this.config.baseUrl}/apis/envs/sandbox/v1`;\n this.routeKey = this.config.routeKey ?? randomUUID().replace(/-/g, '');\n this.cluster = this.config.cluster;\n\n this.deploy = new Deploy(this);\n this.fs = new LinuxFileSystem(this);\n this.network = new Network(this);\n this.process = new Process(this);\n this.remoteUser = new LinuxRemoteUser(this);\n }\n\n // Getters\n getSandboxId(): string {\n if (!this.sandboxId) {\n throw new Error('Sandbox not started');\n }\n return this.sandboxId;\n }\n\n getHostName(): string | null {\n return this.hostName;\n }\n\n getHostIp(): string | null {\n return this.hostIp;\n }\n\n getCluster(): string {\n return this.cluster;\n }\n\n getUrl(): string {\n return this.url;\n }\n\n getFs(): LinuxFileSystem {\n return this.fs;\n }\n\n getNetwork(): Network {\n return this.network;\n }\n\n getProcess(): Process {\n return this.process;\n }\n\n getRemoteUser(): LinuxRemoteUser {\n return this.remoteUser;\n }\n\n getDeploy(): Deploy {\n return this.deploy;\n }\n\n getConfig(): SandboxConfig {\n return this.config;\n }\n\n // Build headers\n private buildHeaders(): Record<string, string> {\n const headers: Record<string, string> = {\n 'ROUTE-KEY': this.routeKey,\n 'X-Cluster': this.cluster,\n };\n\n if (this.config.extraHeaders) {\n Object.assign(headers, this.config.extraHeaders);\n }\n\n this.addUserDefinedTags(headers);\n\n return headers;\n }\n\n private addUserDefinedTags(headers: Record<string, string>): void {\n if (this.config.userId) {\n headers['X-User-Id'] = this.config.userId;\n }\n if (this.config.experimentId) {\n headers['X-Experiment-Id'] = this.config.experimentId;\n }\n if (this.config.namespace) {\n headers['X-Namespace'] = this.config.namespace;\n }\n }\n\n // Lifecycle methods\n async start(): Promise<void> {\n logger.info('Starting sandbox...');\n const url = `${this.url}/start_async`;\n const headers = this.buildHeaders();\n // Use camelCase - HTTP layer will convert to snake_case\n const data = {\n image: this.config.image,\n autoClearTime: this.config.autoClearSeconds / 60,\n autoClearTimeMinutes: this.config.autoClearSeconds / 60,\n startupTimeout: this.config.startupTimeout,\n memory: this.config.memory,\n cpus: this.config.cpus,\n };\n\n logger.debug(`Calling start_async API: ${url}`);\n logger.debug(`Request data: ${JSON.stringify(data)}`);\n\n const response = await HttpUtils.post<{ sandboxId?: string; hostName?: string; hostIp?: string; code?: number }>(\n url,\n headers,\n data\n );\n\n logger.debug(`Start sandbox response: ${JSON.stringify(response)}`);\n\n if (response.status !== 'Success') {\n // Check for error code and throw appropriate exception\n const code = response.result?.code;\n raiseForCode(code, `Failed to start sandbox: ${JSON.stringify(response)}`);\n // If no error code, throw generic error\n throw new Error(`Failed to start sandbox: ${JSON.stringify(response)}`);\n }\n\n // Response is already camelCase (converted by HTTP layer)\n this.sandboxId = response.result?.sandboxId ?? null;\n this.hostName = response.result?.hostName ?? null;\n this.hostIp = response.result?.hostIp ?? null;\n\n logger.info(`Sandbox ID: ${this.sandboxId}`);\n\n // Wait for sandbox to be alive\n // First, wait a bit for the backend to process the start request\n await sleep(2000);\n\n const startTime = Date.now();\n const checkTimeout = 10000; // 10s timeout for each status check\n const checkInterval = 3000; // 3s between checks\n\n while (Date.now() - startTime < this.config.startupTimeout * 1000) {\n try {\n logger.info(`Checking status... (elapsed: ${Math.round((Date.now() - startTime) / 1000)}s)`);\n // Use Promise.race to implement timeout for status check\n const statusPromise = this.getStatus();\n const timeoutPromise = new Promise<null>((_, reject) =>\n setTimeout(() => reject(new Error('Status check timeout')), checkTimeout)\n );\n\n const status = await Promise.race([statusPromise, timeoutPromise]);\n if (status && status.isAlive) {\n logger.info('Sandbox is alive');\n return;\n }\n } catch (e) {\n // Status check may fail temporarily during startup, continue waiting\n logger.debug(`Status check failed (will retry): ${e}`);\n }\n await sleep(checkInterval);\n }\n\n throw new InternalServerRockError(\n `Failed to start sandbox within ${this.config.startupTimeout}s, sandbox: ${this.toString()}`\n );\n }\n\n async stop(): Promise<void> {\n if (!this.sandboxId) return;\n\n try {\n const url = `${this.url}/stop`;\n const headers = this.buildHeaders();\n await HttpUtils.post(url, headers, { sandboxId: this.sandboxId });\n } catch (e) {\n logger.warn(`Failed to stop sandbox, IGNORE: ${e}`);\n }\n }\n\n async isAlive(): Promise<IsAliveResponse> {\n try {\n const status = await this.getStatus();\n // Validate response with Zod schema\n return IsAliveResponseSchema.parse({\n isAlive: status.isAlive,\n message: status.hostName ?? '',\n });\n } catch (e) {\n throw new Error(`Failed to get is alive: ${e}`);\n }\n }\n\n async getStatus(): Promise<SandboxStatusResponse> {\n const url = `${this.url}/get_status?sandbox_id=${this.sandboxId}`;\n const headers = this.buildHeaders();\n const response = await HttpUtils.get<SandboxStatusResponse & { code?: number }>(url, headers);\n\n if (response.status !== 'Success') {\n const errorDetail = response.error ? `, error=${response.error}` : '';\n const code = response.result?.code;\n raiseForCode(code, `Failed to get status: status=${response.status}${errorDetail}, result=${JSON.stringify(response.result)}`);\n throw new Error(`Failed to get status: status=${response.status}${errorDetail}, result=${JSON.stringify(response.result)}`);\n }\n\n // Validate response with Zod schema (similar to Python: SandboxStatusResponse(**result))\n const result = SandboxStatusResponseSchema.parse(response.result);\n\n // Extract additional info from response headers (backward compatible)\n result.cluster = response.headers['x-rock-gateway-target-cluster'] || this.config.cluster || 'N/A';\n result.requestId = response.headers['x-request-id'] || response.headers['request-id'] || 'N/A';\n result.eagleeyeTraceid = response.headers['eagleeye-traceid'] || 'N/A';\n\n return result;\n }\n\n // Command execution\n async execute(command: Command): Promise<CommandResponse> {\n const url = `${this.url}/execute`;\n const headers = this.buildHeaders();\n const data = {\n command: command.command,\n sandboxId: this.sandboxId,\n timeout: command.timeout,\n cwd: command.cwd,\n env: command.env,\n };\n\n const response = await HttpUtils.post<CommandResponse & { code?: number }>(\n url,\n headers,\n data\n );\n\n if (response.status !== 'Success') {\n const errorDetail = response.error ? `, error=${response.error}` : '';\n const code = response.result?.code;\n raiseForCode(code, `Failed to execute command: status=${response.status}${errorDetail}, result=${JSON.stringify(response.result)}`);\n throw new Error(`Failed to execute command: status=${response.status}${errorDetail}, result=${JSON.stringify(response.result)}`);\n }\n\n // Validate response with Zod schema (similar to Python: CommandResponse(**result))\n return CommandResponseSchema.parse(response.result);\n }\n\n // Session management\n async createSession(request: CreateBashSessionRequest): Promise<CreateSessionResponse> {\n const url = `${this.url}/create_session`;\n const headers = this.buildHeaders();\n const data = {\n sandboxId: this.sandboxId,\n ...request,\n };\n\n const response = await HttpUtils.post<CreateSessionResponse & { code?: number }>(\n url,\n headers,\n data\n );\n\n if (response.status !== 'Success') {\n const errorDetail = response.error ? `, error=${response.error}` : '';\n const code = response.result?.code;\n raiseForCode(code, `Failed to create session: status=${response.status}${errorDetail}, result=${JSON.stringify(response.result)}`);\n throw new Error(`Failed to create session: status=${response.status}${errorDetail}, result=${JSON.stringify(response.result)}`);\n }\n\n // Validate response with Zod schema (similar to Python: CreateBashSessionResponse(**result))\n return CreateSessionResponseSchema.parse(response.result);\n }\n\n async closeSession(request: CloseSessionRequest): Promise<CloseSessionResponse> {\n const url = `${this.url}/close_session`;\n const headers = this.buildHeaders();\n const data = {\n sandboxId: this.sandboxId,\n ...request,\n };\n\n const response = await HttpUtils.post<CloseSessionResponse & { code?: number }>(\n url,\n headers,\n data\n );\n\n if (response.status !== 'Success') {\n const errorDetail = response.error ? `, error=${response.error}` : '';\n const code = response.result?.code;\n raiseForCode(code, `Failed to close session: status=${response.status}${errorDetail}, result=${JSON.stringify(response.result)}`);\n throw new Error(`Failed to close session: status=${response.status}${errorDetail}, result=${JSON.stringify(response.result)}`);\n }\n\n // Validate response with Zod schema (similar to Python: CloseSessionResponse(**result))\n return CloseSessionResponseSchema.parse(response.result ?? {});\n }\n\n // Run command in session\n async arun(\n cmd: string,\n options: {\n session?: string;\n mode?: RunModeType;\n timeout?: number;\n waitTimeout?: number;\n waitInterval?: number;\n responseLimitedBytesInNohup?: number;\n ignoreOutput?: boolean;\n outputFile?: string;\n } = {}\n ): Promise<Observation> {\n const {\n session,\n mode = 'normal',\n timeout = 300,\n } = options;\n\n const sessionName = session ?? 'default';\n\n if (mode === 'normal') {\n // Run command directly without pre-creating session (matches Python SDK behavior)\n return this.runInSession({ command: cmd, session: sessionName, timeout });\n }\n\n return this.arunWithNohup(cmd, options);\n }\n\n private async runInSession(action: { command: string; session: string; timeout?: number }): Promise<Observation> {\n const url = `${this.url}/run_in_session`;\n const headers = this.buildHeaders();\n const data = {\n actionType: 'bash',\n session: action.session,\n command: action.command,\n sandboxId: this.sandboxId,\n timeout: action.timeout,\n };\n\n // Convert timeout from seconds to milliseconds for axios\n const timeoutMs = action.timeout ? action.timeout * 1000 : undefined;\n const response = await HttpUtils.post<Observation & { code?: number }>(\n url,\n headers,\n data,\n timeoutMs\n );\n\n if (response.status !== 'Success') {\n const errorDetail = response.error ? `, error=${response.error}` : '';\n const code = response.result?.code;\n raiseForCode(code, `Failed to run in session: status=${response.status}${errorDetail}, result=${JSON.stringify(response.result)}`);\n throw new Error(`Failed to run in session: status=${response.status}${errorDetail}, result=${JSON.stringify(response.result)}`);\n }\n\n // Validate response with Zod schema (similar to Python: Observation(**result))\n return ObservationSchema.parse(response.result);\n }\n\n private async arunWithNohup(\n cmd: string,\n options: {\n session?: string;\n waitTimeout?: number;\n waitInterval?: number;\n responseLimitedBytesInNohup?: number;\n ignoreOutput?: boolean;\n outputFile?: string;\n }\n ): Promise<Observation> {\n const {\n session,\n waitTimeout = 300,\n waitInterval = 10,\n responseLimitedBytesInNohup,\n ignoreOutput = false,\n outputFile,\n } = options;\n\n const timestamp = Date.now();\n \n // Only create session if not provided (matches Python SDK behavior)\n let tmpSession: string;\n if (session === undefined || session === null) {\n tmpSession = `bash-${timestamp}`;\n await this.createSession({ session: tmpSession, startupSource: [], envEnable: false });\n } else {\n tmpSession = session;\n }\n\n const tmpFile = outputFile ?? `/tmp/tmp_${timestamp}.out`;\n\n // Start nohup process\n const nohupCommand = `nohup ${cmd} < /dev/null > ${tmpFile} 2>&1 & echo __ROCK_PID_START__$!__ROCK_PID_END__;disown`;\n const response = await this.runInSession({\n command: nohupCommand,\n session: tmpSession,\n timeout: 30,\n });\n\n // Check if nohup command failed (non-zero exit code and not undefined)\n if (response.exitCode !== undefined && response.exitCode !== 0) {\n return response;\n }\n\n // Extract PID\n const pid = extractNohupPid(response.output);\n if (!pid) {\n return {\n output: 'Failed to submit command, nohup failed to extract PID',\n exitCode: 1,\n failureReason: 'PID extraction failed',\n expectString: '',\n };\n }\n\n // Wait for process completion\n const success = await this.waitForProcessCompletion(pid, tmpSession, waitTimeout, waitInterval);\n\n // Read output\n if (ignoreOutput) {\n return {\n output: `Command executed in nohup mode. Output file: ${tmpFile}`,\n exitCode: success ? 0 : 1,\n failureReason: success ? '' : 'Process did not complete successfully',\n expectString: '',\n };\n }\n\n const readCmd = responseLimitedBytesInNohup\n ? `head -c ${responseLimitedBytesInNohup} ${tmpFile}`\n : `cat ${tmpFile}`;\n\n const outputResult = await this.runInSession({\n command: readCmd,\n session: tmpSession,\n });\n\n return {\n output: outputResult.output,\n exitCode: success ? 0 : 1,\n failureReason: success ? '' : 'Process did not complete successfully',\n expectString: '',\n };\n }\n\n private async waitForProcessCompletion(\n pid: number,\n session: string,\n waitTimeout: number,\n waitInterval: number\n ): Promise<boolean> {\n const startTime = Date.now();\n const checkInterval = Math.max(1, waitInterval);\n const effectiveTimeout = Math.min(checkInterval * 2, waitTimeout);\n\n while (Date.now() - startTime < waitTimeout * 1000) {\n try {\n const result = await this.runInSession({\n command: `kill -0 ${pid}`,\n session,\n timeout: effectiveTimeout,\n });\n // If exitCode is 0, process is still running\n if (result.exitCode === 0) {\n await sleep(checkInterval * 1000);\n } else {\n // Process does not exist - completed\n return true;\n }\n } catch {\n // Process does not exist - completed\n return true;\n }\n }\n\n return false; // Timeout\n }\n\n // File operations\n async writeFile(request: WriteFileRequest): Promise<WriteFileResponse> {\n const url = `${this.url}/write_file`;\n const headers = this.buildHeaders();\n const data = {\n content: request.content,\n path: request.path,\n sandboxId: this.sandboxId,\n };\n\n const response = await HttpUtils.post<void>(url, headers, data);\n\n if (response.status !== 'Success') {\n return { success: false, message: `Failed to write file ${request.path}` };\n }\n\n return { success: true, message: `Successfully write content to file ${request.path}` };\n }\n\n async readFile(request: ReadFileRequest): Promise<ReadFileResponse> {\n const url = `${this.url}/read_file`;\n const headers = this.buildHeaders();\n const data = {\n path: request.path,\n encoding: request.encoding,\n errors: request.errors,\n sandboxId: this.sandboxId,\n };\n\n const response = await HttpUtils.post<{ content: string }>(\n url,\n headers,\n data\n );\n\n // Validate response with Zod schema (similar to Python: ReadFileResponse(**result))\n return ReadFileResponseSchema.parse(response.result ?? {});\n }\n\n // Upload\n async upload(request: UploadRequest): Promise<UploadResponse> {\n return this.uploadByPath(request.sourcePath, request.targetPath);\n }\n\n async uploadByPath(sourcePath: string, targetPath: string, uploadMode: UploadMode = 'auto'): Promise<UploadResponse> {\n const url = `${this.url}/upload`;\n const headers = this.buildHeaders();\n\n try {\n const fs = await import('fs/promises');\n \n // Use async access instead of sync existsSync\n try {\n await fs.access(sourcePath);\n } catch {\n return { success: false, message: `File not found: ${sourcePath}` };\n }\n\n // Check if we should use OSS upload\n const stats = await fs.stat(sourcePath);\n const fileSize = stats.size;\n const ossEnabled = envVars.ROCK_OSS_ENABLE;\n const ossThreshold = 1024 * 1024; // 1MB\n\n if (uploadMode === 'oss' || (uploadMode === 'auto' && ossEnabled && fileSize > ossThreshold)) {\n return this.uploadViaOss(sourcePath, targetPath);\n }\n\n // Use async readFile instead of sync readFileSync\n const fileBuffer = await fs.readFile(sourcePath);\n const fileName = sourcePath.split('/').pop() ?? 'file';\n\n const response = await HttpUtils.postMultipart<void>(\n url,\n headers,\n { targetPath: targetPath, sandboxId: this.sandboxId ?? '' },\n { file: [fileName, fileBuffer, 'application/octet-stream'] }\n );\n\n if (response.status !== 'Success') {\n return { success: false, message: 'Upload failed' };\n }\n\n return { success: true, message: `Successfully uploaded file ${fileName} to ${targetPath}` };\n } catch (e) {\n return { success: false, message: `Upload failed: ${e}` };\n }\n }\n\n /**\n * Get OSS STS credentials from sandbox\n */\n async getOssStsCredentials(): Promise<OssCredentials> {\n const url = `${this.url}/get_token`;\n const headers = this.buildHeaders();\n\n const response = await HttpUtils.get<OssCredentials>(url, headers);\n\n if (response.status !== 'Success') {\n throw new Error(`Failed to get OSS STS token: ${JSON.stringify(response)}`);\n }\n\n const credentials = OssCredentialsSchema.parse(response.result);\n this.ossTokenExpireTime = credentials.expiration;\n\n return credentials;\n }\n\n /**\n * Check if OSS token is expired (with 5-minute buffer)\n */\n isTokenExpired(): boolean {\n if (!this.ossTokenExpireTime) {\n return true;\n }\n\n try {\n const expireTime = new Date(this.ossTokenExpireTime);\n const currentTime = new Date();\n const bufferMs = 5 * 60 * 1000; // 5 minutes in milliseconds\n\n return currentTime.getTime() >= (expireTime.getTime() - bufferMs);\n } catch {\n return true;\n }\n }\n\n /**\n * Download file from sandbox via OSS\n */\n async downloadFile(remotePath: string, localPath: string): Promise<DownloadFileResponse> {\n // Check OSS is enabled\n if (!envVars.ROCK_OSS_ENABLE) {\n return {\n success: false,\n message: 'OSS download is not enabled. Please set ROCK_OSS_ENABLE=true',\n };\n }\n\n try {\n // Validate remote path\n if (!remotePath || remotePath.trim() === '') {\n return { success: false, message: 'Remote path is required' };\n }\n\n // Check if remote file exists\n const checkResult = await this.execute({ command: ['test', '-f', remotePath], timeout: 60 });\n if (checkResult.exitCode !== 0) {\n return { success: false, message: `Remote file does not exist: ${remotePath}` };\n }\n\n // Setup OSS bucket if needed\n if (this.ossBucket === null || this.isTokenExpired()) {\n await this.setupOss();\n }\n\n if (!this.ossBucket) {\n return { success: false, message: 'Failed to setup OSS bucket' };\n }\n\n // Install ossutil in sandbox\n await this.arun(ENSURE_OSSUTIL_SCRIPT, { mode: 'nohup', waitTimeout: 300 });\n\n // Generate unique object name\n const timestamp = Date.now();\n const fileName = remotePath.split('/').pop() ?? 'file';\n const objectName = `download-${timestamp}-${fileName}`;\n\n // Get STS credentials for ossutil config\n const credentials = await this.getOssStsCredentials();\n const bucketName = envVars.ROCK_OSS_BUCKET_NAME ?? '';\n const region = envVars.ROCK_OSS_BUCKET_REGION ?? '';\n const endpoint = `https://oss-${region}.aliyuncs.com`;\n\n // Upload from sandbox to OSS via ossutil\n const ossutilConfigCmd = `ossutil config -e ${endpoint} -i ${credentials.accessKeyId} -k ${credentials.accessKeySecret} -t ${credentials.securityToken} -b ${bucketName}`;\n await this.arun(ossutilConfigCmd, { mode: 'nohup', waitTimeout: 60 });\n\n const uploadToOssCmd = `ossutil cp ${remotePath} oss://${bucketName}/${objectName}`;\n const uploadResult = await this.arun(uploadToOssCmd, { mode: 'nohup', waitTimeout: 600 });\n if (uploadResult.exitCode !== 0) {\n return { success: false, message: `Sandbox to OSS upload failed: ${uploadResult.output}` };\n }\n\n // Download from OSS to local via ali-oss\n const result = await this.ossBucket.get(objectName, localPath);\n\n // Cleanup OSS object\n try {\n await this.ossBucket.delete(objectName);\n } catch {\n // Ignore cleanup errors\n }\n\n return { success: true, message: `Successfully downloaded ${remotePath} to ${localPath}` };\n } catch (e) {\n return { success: false, message: `Download failed: ${e}` };\n }\n }\n\n /**\n * Upload file via OSS (internal method)\n */\n private async uploadViaOss(sourcePath: string, targetPath: string): Promise<UploadResponse> {\n try {\n // Setup OSS bucket if needed\n if (this.ossBucket === null || this.isTokenExpired()) {\n await this.setupOss();\n }\n\n if (!this.ossBucket) {\n return { success: false, message: 'Failed to setup OSS bucket' };\n }\n\n const timestamp = Date.now();\n const fileName = sourcePath.split('/').pop() ?? 'file';\n const objectName = `${timestamp}-${fileName}`;\n\n // Upload to OSS\n await this.ossBucket.put(objectName, sourcePath);\n\n // Generate signed URL for sandbox to download\n const signedUrl = this.ossBucket.signatureUrl(objectName, 600);\n\n // Download in sandbox using wget\n const downloadCmd = `wget -c -O '${targetPath}' '${signedUrl}'`;\n await this.arun(downloadCmd, { mode: 'nohup', waitTimeout: 600 });\n\n // Verify file exists in sandbox\n const checkResult = await this.execute({ command: ['test', '-f', targetPath], timeout: 60 });\n if (checkResult.exitCode !== 0) {\n return { success: false, message: 'Sandbox download phase failed' };\n }\n\n return { success: true, message: `Successfully uploaded file ${fileName} to ${targetPath} via OSS` };\n } catch (e) {\n return { success: false, message: `OSS upload failed: ${e}` };\n }\n }\n\n /**\n * Setup OSS bucket with STS credentials\n */\n private async setupOss(): Promise<void> {\n const credentials = await this.getOssStsCredentials();\n\n const OSS = (await import('ali-oss')).default;\n\n this.ossBucket = new OSS({\n region: envVars.ROCK_OSS_BUCKET_REGION ?? '',\n accessKeyId: credentials.accessKeyId,\n accessKeySecret: credentials.accessKeySecret,\n stsToken: credentials.securityToken,\n bucket: envVars.ROCK_OSS_BUCKET_NAME ?? '',\n refreshSTSToken: async () => {\n const newCreds = await this.getOssStsCredentials();\n return {\n accessKeyId: newCreds.accessKeyId,\n accessKeySecret: newCreds.accessKeySecret,\n stsToken: newCreds.securityToken,\n };\n },\n refreshSTSTokenInterval: 300000, // 5 minutes\n });\n }\n\n // Close\n override async close(): Promise<void> {\n await this.stop();\n }\n\n override toString(): string {\n return `Sandbox(sandboxId=${this.sandboxId}, hostName=${this.hostName}, image=${this.config.image}, cluster=${this.cluster})`;\n }\n}\n\n/**\n * SandboxGroup - Group of sandboxes with concurrent operations\n */\nexport class SandboxGroup {\n private config: SandboxGroupConfig;\n private sandboxList: Sandbox[];\n\n constructor(config: Partial<SandboxGroupConfig> = {}) {\n this.config = createSandboxGroupConfig(config);\n this.sandboxList = Array.from(\n { length: this.config.size },\n () => new Sandbox(this.config)\n );\n }\n\n getSandboxList(): Sandbox[] {\n return this.sandboxList;\n }\n\n async start(): Promise<void> {\n const concurrency = this.config.startConcurrency;\n const retryTimes = this.config.startRetryTimes;\n\n const startSandbox = async (index: number, sandbox: Sandbox): Promise<void> => {\n logger.info(`Starting sandbox ${index} with ${sandbox.getConfig().image}...`);\n\n for (let attempt = 0; attempt < retryTimes; attempt++) {\n try {\n await sandbox.start();\n return;\n } catch (e) {\n if (attempt === retryTimes - 1) {\n logger.error(`Failed to start sandbox after ${retryTimes} attempts: ${e}`);\n throw e;\n }\n logger.warn(`Failed to start sandbox (attempt ${attempt + 1}/${retryTimes}): ${e}, retrying...`);\n await sleep(1000);\n }\n }\n };\n\n // Start with concurrency limit\n for (let i = 0; i < this.sandboxList.length; i += concurrency) {\n const batch = this.sandboxList.slice(i, i + concurrency);\n const promises = batch.map((sandbox, idx) => startSandbox(i + idx, sandbox));\n await Promise.all(promises);\n }\n\n logger.info(`Successfully started ${this.sandboxList.length} sandboxes`);\n }\n\n async stop(): Promise<void> {\n const promises = this.sandboxList.map((sandbox) => sandbox.stop());\n await Promise.allSettled(promises);\n logger.info(`Stopped ${this.sandboxList.length} sandboxes`);\n }\n}","/**\n * Model client for LLM interaction\n */\n\nimport { existsSync } from 'fs';\nimport { readFile, appendFile } from 'fs/promises';\nimport { initLogger } from '../logger.js';\nimport { envVars } from '../env_vars.js';\nimport { sleep } from '../utils/retry.js';\n\nconst logger = initLogger('rock.model.client');\n\n/**\n * Default timeout for polling operations (in seconds)\n */\nconst DEFAULT_POLL_TIMEOUT = 60.0;\n\n/**\n * Request/Response markers\n */\nconst REQUEST_START_MARKER = '__REQUEST_START__';\nconst REQUEST_END_MARKER = '__REQUEST_END__';\nconst RESPONSE_START_MARKER = '__RESPONSE_START__';\nconst RESPONSE_END_MARKER = '__RESPONSE_END__';\nconst SESSION_END_MARKER = '__SESSION_END__';\n\n/**\n * Model client configuration\n */\nexport interface ModelClientConfig {\n logFileName?: string;\n}\n\n/**\n * Options for polling operations (popRequest, waitForFirstRequest)\n */\nexport interface PollOptions {\n /** Maximum time to wait in seconds. Defaults to DEFAULT_POLL_TIMEOUT */\n timeout?: number;\n /** AbortSignal for cancellation support */\n signal?: AbortSignal;\n}\n\n/**\n * Model client for LLM interaction\n */\nexport class ModelClient {\n private logFile: string;\n\n constructor(config?: ModelClientConfig) {\n this.logFile = config?.logFileName ?? envVars.ROCK_MODEL_SERVICE_DATA_DIR + '/model.log';\n }\n\n /**\n * Anti-call LLM - input is response, output is next request\n */\n async antiCallLlm(index: number, lastResponse?: string): Promise<string> {\n if (index < 0) {\n throw new Error('index must be greater than 0');\n }\n\n if (index === 0) {\n if (lastResponse !== undefined) {\n throw new Error('lastResponse must be undefined when index is 0');\n }\n await this.waitForFirstRequest();\n return this.popRequest(index + 1);\n }\n\n if (lastResponse === undefined) {\n throw new Error('lastResponse must not be undefined when index is greater than 0');\n }\n\n await this.pushResponse(index, lastResponse);\n return this.popRequest(index + 1);\n }\n\n /**\n * Push response to log file\n */\n async pushResponse(index: number, lastResponse: string): Promise<void> {\n const content = this.constructResponse(lastResponse, index);\n const lastResponseLine = await this.readLastResponseLine();\n\n if (lastResponseLine === null) {\n await this.appendResponse(content);\n return;\n }\n\n const { meta } = this.parseResponseLine(lastResponseLine);\n const lastResponseIndex = meta.index as number;\n\n if (index < lastResponseIndex) {\n throw new Error(`index ${index} must not be smaller than last_response_index ${lastResponseIndex}`);\n }\n\n if (index === lastResponseIndex) {\n logger.debug(`response index ${index} already exists, skip`);\n return;\n }\n\n await this.appendResponse(content);\n }\n\n /**\n * Pop request from log file\n *\n * @param index - The index of the request to pop\n * @param options - Optional configuration for timeout and cancellation\n * @returns The request JSON string or SESSION_END_MARKER\n * @throws Error if timeout expires or operation is aborted\n */\n async popRequest(index: number, options?: PollOptions): Promise<string> {\n const timeout = options?.timeout ?? DEFAULT_POLL_TIMEOUT;\n const startTime = Date.now();\n\n while (true) {\n // Check for abort signal\n if (options?.signal?.aborted) {\n throw new Error(`popRequest(index=${index}) aborted`);\n }\n\n // Check for timeout\n if ((Date.now() - startTime) / 1000 > timeout) {\n throw new Error(`popRequest timed out after ${timeout} seconds`);\n }\n\n try {\n const lastRequestLine = await this.readLastRequestLine();\n const { requestJson, meta } = this.parseRequestLine(lastRequestLine);\n\n if (requestJson === SESSION_END_MARKER) {\n return SESSION_END_MARKER;\n }\n\n if (meta.index === index) {\n return requestJson;\n }\n\n logger.debug(`Last request is not the index ${index} we want, waiting...`);\n await sleep(1000);\n } catch (e) {\n // Re-throw abort errors and parse errors immediately\n if (e instanceof Error) {\n if (e.message.includes('aborted')) {\n throw e;\n }\n // Re-throw parse errors (invalid format) immediately - don't retry\n if (e.message.includes('Invalid request line format')) {\n throw e;\n }\n }\n // For other errors (like file not found), wait and retry\n logger.debug(`Error reading request: ${e}, waiting...`);\n await sleep(1000);\n }\n }\n }\n\n /**\n * Wait for first request\n *\n * @param options - Optional configuration for timeout and cancellation\n * @throws Error if timeout expires or operation is aborted\n */\n async waitForFirstRequest(options?: PollOptions): Promise<void> {\n const timeout = options?.timeout ?? DEFAULT_POLL_TIMEOUT;\n const startTime = Date.now();\n\n while (true) {\n // Check for abort signal\n if (options?.signal?.aborted) {\n throw new Error('waitForFirstRequest aborted');\n }\n\n // Check for timeout\n if ((Date.now() - startTime) / 1000 > timeout) {\n throw new Error(`waitForFirstRequest timed out after ${timeout} seconds`);\n }\n\n if (!existsSync(this.logFile)) {\n logger.debug(`Log file ${this.logFile} not found, waiting...`);\n await sleep(1000);\n continue;\n }\n\n const content = await readFile(this.logFile, 'utf-8');\n const lines = content.split('\\n').filter((l) => l.trim());\n\n if (lines.length === 0) {\n logger.debug(`Log file ${this.logFile} is empty, waiting for the first request...`);\n await sleep(1000);\n continue;\n }\n\n return;\n }\n }\n\n private parseRequestLine(lineContent: string): { requestJson: string; meta: Record<string, unknown> } {\n if (lineContent.includes(SESSION_END_MARKER)) {\n return { requestJson: SESSION_END_MARKER, meta: {} };\n }\n\n try {\n const parts = lineContent.split(REQUEST_END_MARKER);\n const metaJson = parts[1] ?? '';\n const requestJson = parts[0]?.split(REQUEST_START_MARKER)[1] ?? '';\n const meta = JSON.parse(metaJson);\n\n return { requestJson, meta };\n } catch (e) {\n logger.error(`Failed to parse request line: ${lineContent}, error: ${e}`);\n throw new Error(`Invalid request line format: ${e}`);\n }\n }\n\n private parseResponseLine(lineContent: string): { responseJson: string; meta: Record<string, unknown> } {\n try {\n const parts = lineContent.split(RESPONSE_END_MARKER);\n const metaJson = parts[1] ?? '';\n const responseJson = parts[0]?.split(RESPONSE_START_MARKER)[1] ?? '';\n const meta = JSON.parse(metaJson);\n\n return { responseJson, meta };\n } catch (e) {\n logger.error(`Failed to parse response line: ${lineContent}, error: ${e}`);\n throw new Error(`Invalid response line format: ${e}`);\n }\n }\n\n private async readLastRequestLine(): Promise<string> {\n const content = await readFile(this.logFile, 'utf-8');\n const lines = content.split('\\n').filter((l) => l.trim());\n\n for (let i = lines.length - 1; i >= 0; i--) {\n const line = lines[i];\n if (line && (line.includes(REQUEST_START_MARKER) || line.includes(SESSION_END_MARKER))) {\n return line;\n }\n }\n\n throw new Error(`No request found in log file ${this.logFile}`);\n }\n\n private async readLastResponseLine(): Promise<string | null> {\n const content = await readFile(this.logFile, 'utf-8');\n const lines = content.split('\\n').filter((l) => l.trim());\n\n for (let i = lines.length - 1; i >= 0; i--) {\n const line = lines[i];\n if (line && line.includes(RESPONSE_START_MARKER)) {\n return line;\n }\n }\n\n return null;\n }\n\n private async appendResponse(content: string): Promise<void> {\n await appendFile(this.logFile, content);\n }\n\n private constructResponse(lastResponse: string, index: number): string {\n const meta = {\n timestamp: Date.now(),\n index,\n };\n const metaJson = JSON.stringify(meta);\n return `${RESPONSE_START_MARKER}${lastResponse}${RESPONSE_END_MARKER}${metaJson}\\n`;\n }\n}\n","import { z } from 'zod';\n\n/**\n * Base configuration for runtime environments.\n */\nexport const RuntimeEnvConfigSchema = z.object({\n /** Runtime type discriminator. */\n type: z.string(),\n\n /** Runtime version. Use 'default' for the default version of each runtime. */\n version: z.string().default('default'),\n\n /** Environment variables for the runtime session. */\n env: z.record(z.string()).default({}),\n\n /** Timeout in seconds for installation commands. */\n installTimeout: z.number().int().positive().default(600),\n\n /** Custom install command to run after init. */\n customInstallCmd: z.string().nullable().default(null),\n\n /** Directory to create symlinks of executables. If null, no symlinks are created. */\n extraSymlinkDir: z.string().nullable().default(null),\n\n /** List of executable names to symlink. Empty list means no symlinks. */\n extraSymlinkExecutables: z.array(z.string()).default([]),\n});\n\nexport type RuntimeEnvConfig = z.infer<typeof RuntimeEnvConfigSchema>;\n","import { randomUUID } from 'crypto';\nimport { initLogger } from '../../logger.js';\nimport { RuntimeEnvConfig } from './config.js';\nimport type { Observation } from '../../types/responses.js';\n\nconst logger = initLogger('rock.sandbox.runtime_env');\n\n/** Unique identifier for a RuntimeEnv instance */\nexport type RuntimeEnvId = string;\n\n/** Create a new unique RuntimeEnvId */\nexport function createRuntimeEnvId(): RuntimeEnvId {\n return randomUUID().slice(0, 8);\n}\n\n/** Registry for RuntimeEnv subclasses */\nconst RUNTIME_ENV_REGISTRY: Record<string, typeof RuntimeEnv> = {};\n\n/**\n * Interface for Sandbox with methods needed by RuntimeEnv\n */\nexport interface SandboxLike {\n sandboxId: string;\n runtimeEnvs: Record<RuntimeEnvId, RuntimeEnv>;\n createSession(request: { session: string; envEnable: boolean; env?: Record<string, string> }): Promise<unknown>;\n arun(\n cmd: string,\n options?: {\n session?: string;\n mode?: 'normal' | 'nohup' | 'NOHUP';\n waitTimeout?: number;\n waitInterval?: number;\n }\n ): Promise<Observation>;\n startNohupProcess?(\n cmd: string,\n tmpFile: string,\n session: string\n ): Promise<{ pid: number | null; errorResponse: Observation | null }>;\n waitForProcessCompletion?(\n pid: number,\n session: string,\n waitTimeout: number,\n waitInterval: number\n ): Promise<{ success: boolean; message: string }>;\n handleNohupOutput?(\n tmpFile: string,\n session: string,\n success: boolean,\n message: string,\n ignoreOutput: boolean,\n responseLimitedBytes: number | null\n ): Promise<Observation>;\n}\n\n/**\n * Runtime environment (e.g., Python/Node).\n *\n * Each RuntimeEnv is identified by (type, version) tuple and is managed by Sandbox.runtimeEnvs.\n * workdir is auto-generated as: /tmp/rock-runtime-envs/{type}/{version}/{runtimeEnvId}\n * session is auto-generated as: runtime-env-{type}-{version}-{runtimeEnvId}\n *\n * @example\n * ```typescript\n * const env = await RuntimeEnv.create(sandbox, config);\n * await env.run(\"python --version\");\n * ```\n */\nexport abstract class RuntimeEnv {\n /** Registry for subclasses */\n protected static registry: Record<string, typeof RuntimeEnv> = RUNTIME_ENV_REGISTRY;\n\n /** Runtime type discriminator - must be defined by subclass */\n abstract readonly runtimeEnvType: string;\n\n /** Sandbox instance */\n protected _sandbox: SandboxLike;\n\n /** Configuration */\n protected _config: RuntimeEnvConfig;\n\n /** Version */\n protected _version: string;\n\n /** Environment variables */\n protected _env: Record<string, string>;\n\n /** Install timeout in seconds */\n protected _installTimeout: number;\n\n /** Custom install command */\n protected _customInstallCmd: string | null;\n\n /** Extra symlink directory */\n protected _extraSymlinkDir: string | null;\n\n /** Extra symlink executables */\n protected _extraSymlinkExecutables: string[];\n\n /** Unique ID for this runtime env instance */\n protected _runtimeEnvId: RuntimeEnvId;\n\n /** Working directory */\n protected _workdir: string;\n\n /** Session name */\n protected _session: string;\n\n /** Whether the runtime has been initialized */\n protected _initialized: boolean = false;\n\n /** Whether the session is ready */\n protected _sessionReady: boolean = false;\n\n constructor(sandbox: SandboxLike, config: RuntimeEnvConfig) {\n this._sandbox = sandbox;\n this._config = config;\n\n // Extract values from config\n this._version = config.version;\n this._env = config.env;\n this._installTimeout = config.installTimeout;\n this._customInstallCmd = config.customInstallCmd;\n this._extraSymlinkDir = config.extraSymlinkDir;\n this._extraSymlinkExecutables = config.extraSymlinkExecutables;\n\n // Unique ID for this runtime env instance\n this._runtimeEnvId = createRuntimeEnvId();\n\n // Generate workdir and session\n const versionStr = this._version || 'default'; // avoid empty version\n this._workdir = `/tmp/rock-runtime-envs/${config.type}/${versionStr}/${this._runtimeEnvId}`;\n this._session = `runtime-env-${config.type}-${versionStr}-${this._runtimeEnvId}`;\n }\n\n /** Whether the runtime has been initialized */\n get initialized(): boolean {\n return this._initialized;\n }\n\n /** Unique ID for this runtime env instance */\n get runtimeEnvId(): RuntimeEnvId {\n return this._runtimeEnvId;\n }\n\n /** Working directory for this runtime env instance */\n get workdir(): string {\n return this._workdir;\n }\n\n /** Binary directory for this runtime env instance */\n get binDir(): string {\n return `${this._workdir}/runtime-env/bin`;\n }\n\n /**\n * Initialize the runtime environment.\n * This method performs installation and validation.\n * It is idempotent: calling multiple times only initializes once.\n */\n async init(): Promise<void> {\n if (this._initialized) {\n return;\n }\n\n // Common setup: ensure session and workdir\n await this._ensureSession();\n await this._ensureWorkdir();\n\n // Install runtime and then do additional initialization\n await this._installRuntime();\n await this._postInit();\n\n // Execute custom install command after _postInit\n if (this._customInstallCmd) {\n await this._doCustomInstall();\n }\n\n // Create symlinks for executables\n await this._createSysPathLinks();\n\n this._initialized = true;\n }\n\n /**\n * Run a command under this runtime\n */\n async run(\n cmd: string,\n options: {\n mode?: 'normal' | 'nohup';\n waitTimeout?: number;\n errorMsg?: string;\n } = {}\n ): Promise<Observation> {\n const { mode = 'nohup', waitTimeout = 600, errorMsg = 'runtime env command failed' } = options;\n\n await this._ensureSession();\n const wrapped = this.wrappedCmd(cmd, true);\n\n logger.debug(`[${this._sandbox.sandboxId}] RuntimeEnv run cmd: ${wrapped}`);\n\n const result = await this._sandbox.arun(wrapped, {\n session: this._session,\n mode,\n waitTimeout,\n });\n\n // If exit_code is not 0, raise an exception to trigger retry\n if (result.exitCode !== undefined && result.exitCode !== 0) {\n throw new Error(`${errorMsg} with exit code: ${result.exitCode}, output: ${result.output}`);\n }\n return result;\n }\n\n /**\n * Wrap command with PATH export.\n * Always wrap with bash -c to ensure it only affects current cmd.\n * Default prepend=true to give current runtime_env highest priority.\n */\n wrappedCmd(cmd: string, prepend: boolean = true): string {\n const binDir = this.binDir;\n let wrapped: string;\n if (prepend) {\n wrapped = `export PATH='${binDir}':$PATH && ${cmd}`;\n } else {\n wrapped = `export PATH=$PATH:'${binDir}' && ${cmd}`;\n }\n return `bash -c '${wrapped.replace(/'/g, \"'\\\"'\\\"'\")}'`;\n }\n\n /**\n * Ensure runtime env session exists. Safe to call multiple times.\n */\n protected async _ensureSession(): Promise<void> {\n if (this._sessionReady) {\n return;\n }\n\n await this._sandbox.createSession({\n session: this._session,\n envEnable: true,\n env: this._env,\n });\n this._sessionReady = true;\n }\n\n /**\n * Create workdir for runtime environment.\n */\n protected async _ensureWorkdir(): Promise<void> {\n const result = await this._sandbox.arun(`mkdir -p ${this._workdir}`, {\n session: this._session,\n });\n if (result.exitCode !== undefined && result.exitCode !== 0) {\n throw new Error(`Failed to create workdir: ${this._workdir}, exit_code: ${result.exitCode}`);\n }\n }\n\n /**\n * Get installation command for this runtime environment.\n */\n protected abstract _getInstallCmd(): string;\n\n /**\n * Install the runtime environment.\n */\n protected async _installRuntime(): Promise<void> {\n const installCmd = `cd '${this._workdir}' && ${this._getInstallCmd()}`;\n const wrappedCmd = `bash -c '${installCmd.replace(/'/g, \"'\\\"'\\\"'\")}'`;\n\n const result = await this._sandbox.arun(wrappedCmd, {\n session: this._session,\n mode: 'nohup',\n waitTimeout: this._installTimeout,\n });\n\n if (result.exitCode !== undefined && result.exitCode !== 0) {\n throw new Error(\n `${this.runtimeEnvType} runtime installation failed with exit code: ${result.exitCode}, output: ${result.output}`\n );\n }\n }\n\n /**\n * Additional initialization after runtime installation.\n * Override in subclasses.\n */\n protected async _postInit(): Promise<void> {\n // Default: no additional initialization\n }\n\n /**\n * Execute custom install command after _postInit.\n */\n protected async _doCustomInstall(): Promise<void> {\n if (!this._customInstallCmd) {\n return;\n }\n await this.run(this._customInstallCmd, {\n waitTimeout: this._installTimeout,\n errorMsg: 'custom_install_cmd failed',\n });\n }\n\n /**\n * Create symlinks in target directory for executables.\n */\n protected async _createSysPathLinks(): Promise<void> {\n if (this._extraSymlinkDir === null) {\n return;\n }\n if (this._extraSymlinkExecutables.length === 0) {\n return;\n }\n\n // Build a single command with all symlinks\n const links = this._extraSymlinkExecutables\n .map((exe) => `ln -sf '${this.binDir}/${exe}' '${this._extraSymlinkDir}/${exe}'`)\n .join(' && ');\n\n await this.run(links);\n }\n}\n","/**\n * Python runtime environment configuration and implementation\n */\n\nimport { z } from 'zod';\nimport { RuntimeEnvConfigSchema } from './config.js';\nimport { RuntimeEnv, type RuntimeEnvId, type SandboxLike } from './base.js';\nimport { envVars } from '../../env_vars.js';\n\n/**\n * Python runtime environment configuration schema\n */\nexport const PythonRuntimeEnvConfigSchema = RuntimeEnvConfigSchema.extend({\n /** Runtime type discriminator. Must be 'python'. */\n type: z.literal('python').default('python'),\n\n /** Python version. Use \"default\" for 3.11. */\n version: z.enum(['3.11', '3.12', 'default']).default('default'),\n\n /**\n * Pip packages to install.\n * Can be:\n * - string[]: List of package names to install\n * - string: Path to requirements.txt file\n * - null: No packages to install\n */\n pip: z.union([z.array(z.string()), z.string()]).nullable().default(null),\n\n /** Pip index URL for package installation. If set, will use this mirror. */\n pipIndexUrl: z.string().nullable().default(null),\n\n /** List of Python executables to symlink. */\n extraSymlinkExecutables: z.array(z.string()).default(['python', 'python3', 'pip', 'pip3']),\n});\n\n/**\n * Python runtime environment configuration type\n */\nexport type PythonRuntimeEnvConfig = z.infer<typeof PythonRuntimeEnvConfigSchema>;\n\n/**\n * Get default pip index URL from environment variable.\n */\nexport function getDefaultPipIndexUrl(): string {\n return envVars.ROCK_PIP_INDEX_URL;\n}\n\n/**\n * Python runtime environment\n *\n * Provides Python runtime with pip package management.\n * Supports Python 3.11 and 3.12 versions.\n *\n * @example\n * ```typescript\n * const config: PythonRuntimeEnvConfig = {\n * version: 'default',\n * pip: ['langchain', 'langchain-openai'],\n * pipIndexUrl: 'https://mirrors.aliyun.com/pypi/simple/',\n * };\n * const env = new PythonRuntimeEnv(sandbox, config);\n * await env.init();\n * await env.run('python --version');\n * ```\n */\nexport class PythonRuntimeEnv extends RuntimeEnv {\n readonly runtimeEnvType = 'python';\n\n private _pip: string[] | string | null | undefined;\n private _pipIndexUrl: string | null | undefined;\n\n constructor(\n sandbox: SandboxLike & { runtimeEnvs: Record<RuntimeEnvId, RuntimeEnv> },\n config: PythonRuntimeEnvConfig\n ) {\n // Validate version early\n if (config.version !== '3.11' && config.version !== '3.12' && config.version !== 'default') {\n throw new Error(\n `Unsupported Python version: ${config.version}. Supported versions: 3.11, 3.12, default`\n );\n }\n\n super(sandbox, config);\n\n this._pip = config.pip;\n this._pipIndexUrl = config.pipIndexUrl;\n }\n\n protected _getInstallCmd(): string {\n const version = this._version;\n if (version === '3.11' || version === 'default') {\n return envVars.ROCK_RTENV_PYTHON_V31114_INSTALL_CMD;\n }\n return envVars.ROCK_RTENV_PYTHON_V31212_INSTALL_CMD;\n }\n\n protected override async _postInit(): Promise<void> {\n // Step 1: validate python exists\n await this._validatePython();\n\n // Step 2: configure pip index url if specified\n if (this._pipIndexUrl) {\n await this._configurePip();\n }\n\n // Step 3: install pip packages if specified\n if (this._pip) {\n await this._installPip();\n }\n }\n\n private async _validatePython(): Promise<void> {\n await this.run('test -x python');\n }\n\n private async _configurePip(): Promise<void> {\n const escapedUrl = this._pipIndexUrl!.replace(/'/g, \"'\\\\''\");\n await this.run(`pip config set global.index-url '${escapedUrl}'`);\n }\n\n private async _installPip(): Promise<void> {\n if (!this._pip) {\n return;\n }\n\n if (typeof this._pip === 'string') {\n // Treat as requirements.txt path - note: for remote sandbox, local file upload\n // would need to be handled differently. For now, we assume the file is already\n // in the sandbox or use the array form.\n // This is a simplified implementation - the Python SDK handles local file upload.\n await this.run(`pip install -r '${this._pip.replace(/'/g, \"'\\\\''\")}'`);\n } else {\n // Treat as list of packages\n const packages = this._pip.map((pkg) => `'${pkg.replace(/'/g, \"'\\\\''\")}'`).join(' ');\n await this.run(`pip install ${packages}`);\n }\n }\n}","/**\n * Node.js runtime environment configuration and implementation\n */\n\nimport { z } from 'zod';\nimport { RuntimeEnvConfigSchema } from './config.js';\nimport { RuntimeEnv, type RuntimeEnvId, type SandboxLike } from './base.js';\nimport { envVars } from '../../env_vars.js';\n\n/** Default Node.js version */\nexport const NODE_DEFAULT_VERSION = '22.18.0';\n\n/**\n * Configuration for Node.js runtime environment.\n */\nexport const NodeRuntimeEnvConfigSchema = RuntimeEnvConfigSchema.extend({\n /** Runtime type discriminator. Must be 'node'. */\n type: z.literal('node').default('node'),\n\n /** Node.js version. Use \"default\" for 22.18.0. */\n version: z.enum(['22.18.0', 'default']).default('default'),\n\n /** NPM registry URL. If set, will run 'npm config set registry <url>' during init. */\n npmRegistry: z.string().nullable().default(null),\n\n /** List of Node.js executables to symlink. */\n extraSymlinkExecutables: z.array(z.string()).default(['node', 'npm', 'npx']),\n});\n\n/**\n * Node runtime environment configuration type\n */\nexport type NodeRuntimeEnvConfig = z.infer<typeof NodeRuntimeEnvConfigSchema>;\n\n/**\n * Node runtime environment\n *\n * Provides Node.js runtime with npm package management.\n * Supports Node.js 22.18.0.\n *\n * @example\n * ```typescript\n * const config: NodeRuntimeEnvConfig = {\n * version: 'default',\n * npmRegistry: 'https://registry.npmmirror.com',\n * };\n * const env = new NodeRuntimeEnv(sandbox, config);\n * await env.init();\n * await env.run('node --version');\n * ```\n */\nexport class NodeRuntimeEnv extends RuntimeEnv {\n readonly runtimeEnvType = 'node';\n\n private _npmRegistry: string | null | undefined;\n\n constructor(\n sandbox: SandboxLike & { runtimeEnvs: Record<RuntimeEnvId, RuntimeEnv> },\n config: NodeRuntimeEnvConfig\n ) {\n if (config.version !== 'default' && config.version !== NODE_DEFAULT_VERSION) {\n throw new Error(\n `Unsupported Node version: ${config.version}. Only ${NODE_DEFAULT_VERSION} is supported right now.`\n );\n }\n\n super(sandbox, config);\n\n this._npmRegistry = config.npmRegistry;\n }\n\n protected _getInstallCmd(): string {\n return envVars.ROCK_RTENV_NODE_V22180_INSTALL_CMD;\n }\n\n protected override async _postInit(): Promise<void> {\n // Step 1: validate node exists\n await this._validateNode();\n\n // Step 2: configure npm registry if specified\n if (this._npmRegistry) {\n await this._configureNpmRegistry();\n }\n }\n\n private async _validateNode(): Promise<void> {\n await this.run('test -x node');\n }\n\n private async _configureNpmRegistry(): Promise<void> {\n const escapedRegistry = this._npmRegistry!.replace(/'/g, \"'\\\\''\");\n await this.run(`npm config set registry '${escapedRegistry}'`);\n }\n}","/**\n * ModelService - manages model service installation and lifecycle in sandbox\n *\n * This module provides functionality to install, start, stop, and manage\n * the model service within a sandboxed environment.\n */\n\nimport { z } from 'zod';\nimport { PythonRuntimeEnv, PythonRuntimeEnvConfigSchema } from '../runtime_env/python_runtime_env.js';\nimport { type RuntimeEnvId, type SandboxLike } from '../runtime_env/base.js';\nimport { envVars } from '../../env_vars.js';\nimport { initLogger } from '../../logger.js';\n\nconst logger = initLogger('rock.model_service');\n\n/**\n * ModelService configuration schema\n */\nexport const ModelServiceConfigSchema = z.object({\n /** Whether to enable model service */\n enabled: z.boolean().default(false),\n\n /** Type of model service to start */\n type: z.string().default('local'),\n\n /** Command to install model service package */\n installCmd: z.string().default(envVars.ROCK_MODEL_SERVICE_INSTALL_CMD),\n\n /** Timeout for model service installation in seconds */\n installTimeout: z.number().positive().default(300),\n\n /** Runtime environment configuration for the model service */\n runtimeEnvConfig: PythonRuntimeEnvConfigSchema.default({ type: 'python', version: 'default' }),\n\n /** Command to start model service with type placeholder */\n startCmd: z.string().default('rock model-service start --type ${type}'),\n\n /** Command to stop model service */\n stopCmd: z.string().default('rock model-service stop'),\n\n /** Command to create Rock config file */\n configIniCmd: z.string().default('mkdir -p ~/.rock && touch ~/.rock/config.ini'),\n\n /** Command to watch agent with pid placeholder */\n watchAgentCmd: z.string().default('rock model-service watch-agent --pid ${pid}'),\n\n /** Command to anti-call LLM with index and response_payload placeholders */\n antiCallLlmCmd: z.string().default(\n 'rock model-service anti-call-llm --index ${index} --response ${response_payload}'\n ),\n\n /** Command to anti-call LLM with only index placeholder */\n antiCallLlmCmdNoResponse: z.string().default('rock model-service anti-call-llm --index ${index}'),\n\n /** Path for logging directory */\n loggingPath: z.string().default('/data/logs'),\n\n /** Name of the log file */\n loggingFileName: z.string().default('model_service.log'),\n});\n\n/**\n * ModelService configuration type\n */\nexport type ModelServiceConfig = z.infer<typeof ModelServiceConfigSchema>;\n\n/**\n * ModelService - manages model service installation and lifecycle in sandbox\n *\n * This class handles model service installation, startup, and agent management\n * within a sandboxed environment.\n *\n * Note:\n * Caller is responsible for ensuring proper sequencing of install/start/stop operations.\n */\nexport class ModelService {\n private _sandbox: SandboxLike;\n private _config: ModelServiceConfig;\n private _runtimeEnv: PythonRuntimeEnv | null = null;\n\n private _isInstalled = false;\n private _isStarted = false;\n\n constructor(\n sandbox: SandboxLike & { runtimeEnvs: Record<RuntimeEnvId, RuntimeEnvLike> },\n config: ModelServiceConfig\n ) {\n this._sandbox = sandbox;\n this._config = config;\n }\n\n /** Whether the model service has been installed */\n get isInstalled(): boolean {\n return this._isInstalled;\n }\n\n /** Whether the model service has been started */\n get isStarted(): boolean {\n return this._isStarted;\n }\n\n /**\n * Install model service in the sandbox.\n *\n * Performs the following installation steps:\n * 1. Create and initialize Python runtime environment (via RuntimeEnv).\n * 2. Install model service package.\n */\n async install(): Promise<void> {\n // Validate runtime config is Python\n if (this._config.runtimeEnvConfig.type !== 'python') {\n throw new Error('ModelService requires a Python runtime environment');\n }\n\n // Parse and validate the runtime config\n const runtimeConfigResult = PythonRuntimeEnvConfigSchema.safeParse(this._config.runtimeEnvConfig);\n if (!runtimeConfigResult.success) {\n throw new Error(`Invalid runtime config: ${runtimeConfigResult.error.message}`);\n }\n\n // Create Python runtime environment\n this._runtimeEnv = new PythonRuntimeEnv(\n this._sandbox as SandboxLike & { runtimeEnvs: Record<RuntimeEnvId, RuntimeEnvLike> },\n runtimeConfigResult.data\n );\n\n // Initialize the runtime (installs Python)\n await this._runtimeEnv.init();\n\n // Create rock config\n await this._createRockConfig();\n\n // Install model service package\n await this._installModelService();\n\n this._isInstalled = true;\n }\n\n private async _createRockConfig(): Promise<void> {\n if (!this._runtimeEnv) {\n throw new Error('Runtime environment not initialized');\n }\n await this._runtimeEnv.run(this._config.configIniCmd);\n }\n\n private async _installModelService(): Promise<void> {\n if (!this._runtimeEnv) {\n throw new Error('Runtime environment not initialized');\n }\n\n const installCmd = `cd ${this._runtimeEnv.workdir} && ${this._config.installCmd}`;\n await this._runtimeEnv.run(installCmd, {\n waitTimeout: this._config.installTimeout,\n errorMsg: 'Model service installation failed',\n });\n }\n\n /**\n * Start the model service in the sandbox.\n *\n * Starts the service with configured logging settings.\n */\n async start(): Promise<void> {\n if (!this._isInstalled) {\n throw new Error(\n `[${this._sandbox.sandboxId}] Cannot start model service: ModelService has not been installed yet. ` +\n 'Please call install() first.'\n );\n }\n\n if (!this._runtimeEnv) {\n throw new Error('Runtime environment not initialized');\n }\n\n const startCmd = this._config.startCmd.replace(/\\$\\{type\\}/g, this._config.type);\n const bashStartCmd =\n `export ROCK_LOGGING_PATH=${this._config.loggingPath} && ` +\n `export ROCK_LOGGING_FILE_NAME=${this._config.loggingFileName} && ` +\n `${this._config.stopCmd} && ` +\n startCmd;\n\n logger.debug(`[${this._sandbox.sandboxId}] Model service Start command: ${bashStartCmd}`);\n\n await this._runtimeEnv.run(bashStartCmd);\n\n this._isStarted = true;\n }\n\n /**\n * Stop the model service.\n */\n async stop(): Promise<void> {\n if (!this._isStarted) {\n logger.warn(\n `[${this._sandbox.sandboxId}] Model service is not running, skipping stop operation. is_started=${this._isStarted}`\n );\n return;\n }\n\n if (!this._runtimeEnv) {\n throw new Error('Runtime environment not initialized');\n }\n\n await this._runtimeEnv.run(this._config.stopCmd);\n\n this._isStarted = false;\n }\n\n /**\n * Watch agent process with the specified PID.\n */\n async watchAgent(pid: string): Promise<void> {\n if (!this._isStarted) {\n throw new Error(\n `[${this._sandbox.sandboxId}] Cannot watch agent: ModelService is not started. Please call start() first.`\n );\n }\n\n if (!this._runtimeEnv) {\n throw new Error('Runtime environment not initialized');\n }\n\n const watchCmd = this._config.watchAgentCmd.replace(/\\$\\{pid\\}/g, pid);\n logger.debug(\n `[${this._sandbox.sandboxId}] Model service watch agent with pid=${pid}, cmd: ${watchCmd}`\n );\n\n await this._runtimeEnv.run(watchCmd);\n }\n\n /**\n * Execute anti-call LLM command.\n */\n async antiCallLlm(\n index: number,\n responsePayload?: string,\n callTimeout = 600\n ): Promise<string> {\n if (!this._isStarted) {\n throw new Error(\n `[${this._sandbox.sandboxId}] Cannot execute anti-call LLM: ModelService is not started. Please call start() first.`\n );\n }\n\n if (!this._runtimeEnv) {\n throw new Error('Runtime environment not initialized');\n }\n\n logger.info(\n `[${this._sandbox.sandboxId}] Executing anti-call LLM: index=${index}, ` +\n `has_response=${responsePayload !== undefined}, timeout=${callTimeout}s`\n );\n\n let cmd: string;\n if (responsePayload !== undefined) {\n const escapedPayload = `'${responsePayload.replace(/'/g, \"'\\\\''\")}'`;\n cmd = this._config.antiCallLlmCmd\n .replace(/\\$\\{index\\}/g, String(index))\n .replace(/\\$\\{response_payload\\}/g, escapedPayload);\n } else {\n cmd = this._config.antiCallLlmCmdNoResponse.replace(/\\$\\{index\\}/g, String(index));\n }\n\n const bashCmd = this._runtimeEnv.wrappedCmd(cmd);\n logger.debug(`[${this._sandbox.sandboxId}] Executing command: ${bashCmd}`);\n\n const result = await this._sandbox.arun(bashCmd, {\n mode: 'nohup',\n waitTimeout: callTimeout,\n waitInterval: 3,\n });\n\n if (result.exitCode !== 0) {\n throw new Error(`Anti-call LLM command failed: ${result.output}`);\n }\n\n return result.output;\n }\n}\n\n/**\n * Minimal RuntimeEnv interface for type checking\n */\ninterface RuntimeEnvLike {\n init(): Promise<void>;\n run(cmd: string, mode?: string, waitTimeout?: number, errorMsg?: string): Promise<{ output: string; exitCode?: number }>;\n workdir: string;\n wrappedCmd(cmd: string): string;\n}\n","/**\n * Agent base classes\n */\n\nimport { initLogger } from '../../logger.js';\nimport type { RockAgentConfig } from './config.js';\nimport type { SandboxLike } from '../runtime_env/base.js';\nimport type { ModelService } from '../model_service/base.js';\nimport type { Observation } from '../../types/responses.js';\n\nconst logger = initLogger('rock.agent');\n\n/**\n * Abstract Agent base class\n */\nexport abstract class Agent {\n protected _sandbox: SandboxLike;\n protected _modelService: ModelService | null = null;\n\n constructor(sandbox: SandboxLike) {\n this._sandbox = sandbox;\n }\n\n get sandbox(): SandboxLike {\n return this._sandbox;\n }\n\n get modelService(): ModelService | null {\n return this._modelService;\n }\n\n abstract install(config: RockAgentConfig): Promise<void>;\n abstract run(prompt: string): Promise<Observation>;\n}\n\n/**\n * DefaultAgent with common initialization and execution logic\n */\nexport class DefaultAgent extends Agent {\n protected _config: RockAgentConfig | null = null;\n protected _agentSession: string | null = null;\n\n get config(): RockAgentConfig | null {\n return this._config;\n }\n\n get agentSession(): string | null {\n return this._agentSession;\n }\n\n override get modelService(): ModelService | null {\n return this._modelService;\n }\n\n async install(config: RockAgentConfig): Promise<void> {\n this._config = config;\n this._agentSession = config.agentSession;\n\n const sandboxId = this._sandbox.sandboxId;\n logger.info(`[${sandboxId}] Starting agent initialization`);\n\n try {\n // Setup bash session\n await this._setupSession();\n\n // Execute pre-init commands\n await this._executeInitCommands(config.preInitCmds, 'pre-init');\n\n // Execute post-init commands\n await this._executeInitCommands(config.postInitCmds, 'post-init');\n\n logger.info(`[${sandboxId}] Agent initialization completed`);\n } catch (e) {\n const error = e as Error;\n logger.error(`[${sandboxId}] Agent initialization failed: ${error.message}`);\n throw error;\n }\n }\n\n async run(prompt: string): Promise<Observation> {\n if (!this._config) {\n throw new Error('Agent is not installed. Please call install() first.');\n }\n\n if (!this._config.runCmd) {\n throw new Error('runCmd is not configured');\n }\n\n const cmd = await this._createAgentRunCmd(prompt);\n return this._agentRun(cmd);\n }\n\n protected async _setupSession(): Promise<void> {\n if (!this._config) return;\n\n const sandboxId = this._sandbox.sandboxId;\n logger.info(`[${sandboxId}] Creating bash session: ${this._agentSession}`);\n\n await this._sandbox.createSession({\n session: this._agentSession!,\n envEnable: true,\n env: this._config.env,\n });\n\n logger.info(`[${sandboxId}] Bash session '${this._agentSession}' created successfully`);\n }\n\n protected async _executeInitCommands(\n cmdList: Array<{ command: string; timeoutSeconds: number }>,\n stepName: string\n ): Promise<void> {\n if (!cmdList || cmdList.length === 0) return;\n\n const sandboxId = this._sandbox.sandboxId;\n logger.info(`[${sandboxId}] ${stepName} started: Executing ${cmdList.length} commands`);\n\n for (let idx = 0; idx < cmdList.length; idx++) {\n const cmdConfig = cmdList[idx];\n if (!cmdConfig) continue;\n \n const command = cmdConfig.command;\n const timeout = cmdConfig.timeoutSeconds;\n\n logger.debug(\n `[${sandboxId}] Executing ${stepName} command ${idx + 1}/${cmdList.length}: ${command.substring(0, 100)}...`\n );\n\n const result = await this._sandbox.arun(`bash -c ${JSON.stringify(command)}`, {\n waitTimeout: timeout,\n mode: 'NOHUP',\n });\n\n if (result.exitCode !== 0) {\n throw new Error(\n `[${sandboxId}] ${stepName} command ${idx + 1} failed with exit code ${result.exitCode}: ${result.output.substring(0, 200)}`\n );\n }\n\n logger.debug(`[${sandboxId}] ${stepName} command ${idx + 1} completed successfully`);\n }\n\n logger.info(`[${sandboxId}] ${stepName} completed: Completed ${cmdList.length} commands`);\n }\n\n protected async _createAgentRunCmd(prompt: string): Promise<string> {\n if (!this._config || !this._config.runCmd) {\n throw new Error('runCmd is not configured');\n }\n\n // Replace {prompt} placeholder\n let runCmd = this._config.runCmd.replace(/{prompt}/g, JSON.stringify(prompt));\n\n // Skip wrap if configured\n if (this._config.skipWrapRunCmd) {\n return `bash -c ${JSON.stringify(runCmd)}`;\n }\n\n return `bash -c ${JSON.stringify(runCmd)}`;\n }\n\n protected async _agentRun(cmd: string): Promise<Observation> {\n const sandboxId = this._sandbox.sandboxId;\n\n try {\n const timestamp = Date.now().toString();\n const tmpFile = `/tmp/tmp_${timestamp}.out`;\n\n // Check if startNohupProcess is available\n if (!this._sandbox.startNohupProcess) {\n const msg = 'startNohupProcess method is not available on sandbox';\n return { output: msg, exitCode: 1, failureReason: msg, expectString: '' };\n }\n\n // Start nohup process and get PID\n const { pid, errorResponse } = await this._sandbox.startNohupProcess(cmd, tmpFile, this._agentSession!);\n\n if (errorResponse) {\n return errorResponse;\n }\n\n if (!pid) {\n const msg = 'Failed to submit command, nohup failed to extract PID';\n return { output: msg, exitCode: 1, failureReason: msg, expectString: '' };\n }\n\n logger.info(`[${sandboxId}] Agent process started with PID: ${pid}`);\n\n // Check if waitForProcessCompletion is available\n if (!this._sandbox.waitForProcessCompletion) {\n const msg = 'waitForProcessCompletion method is not available on sandbox';\n return { output: msg, exitCode: 1, failureReason: msg, expectString: '' };\n }\n\n // Wait for agent process to complete\n const { success, message } = await this._sandbox.waitForProcessCompletion(\n pid,\n this._agentSession!,\n this._config!.agentRunTimeout,\n this._config!.agentRunCheckInterval\n );\n\n // Check if handleNohupOutput is available\n if (!this._sandbox.handleNohupOutput) {\n const msg = 'handleNohupOutput method is not available on sandbox';\n return { output: msg, exitCode: 1, failureReason: msg, expectString: '' };\n }\n\n // Handle nohup output and return result\n const result = await this._sandbox.handleNohupOutput(tmpFile, this._agentSession!, success, message, false, null);\n\n return result;\n } catch (e) {\n const error = e as Error;\n const errorMsg = `Failed to execute nohup command: ${error.message}`;\n logger.error(`[${sandboxId}] ${errorMsg}`);\n return { output: errorMsg, exitCode: 1, failureReason: errorMsg, expectString: '' };\n }\n }\n}\n","/**\n * Agent configuration schemas\n */\n\nimport { z } from 'zod';\nimport { randomUUID } from 'crypto';\nimport { envVars } from '../../env_vars.js';\nimport type { ModelServiceConfig } from '../model_service/base.js';\n\n/**\n * Base agent configuration schema\n */\nexport const AgentConfigSchema = z.object({\n agentType: z.string(),\n version: z.string().default('default'),\n});\n\nexport type AgentConfig = z.infer<typeof AgentConfigSchema>;\n\n/**\n * Configuration for a command execution with timeout control\n */\nexport const AgentBashCommandSchema = z.object({\n command: z.string(),\n timeoutSeconds: z.number().int().positive().default(300),\n});\n\nexport type AgentBashCommand = z.infer<typeof AgentBashCommandSchema>;\n\n/**\n * Default agent configuration schema\n */\nexport const DefaultAgentConfigSchema = z.object({\n agentType: z.string(),\n version: z.string().default('default'),\n\n // Session management\n agentSession: z.string().default('default-agent-session'),\n\n // Startup/shutdown commands\n preInitBashCmdList: z.array(AgentBashCommandSchema).default(\n envVars.ROCK_AGENT_PRE_INIT_BASH_CMD_LIST.map((cmd) => ({\n command: cmd.command,\n timeoutSeconds: cmd.timeoutSeconds || 300,\n }))\n ),\n postInitBashCmdList: z.array(AgentBashCommandSchema).default([]),\n\n // Environment variables for the session\n sessionEnvs: z.record(z.string()).default({}),\n\n // Optional ModelService configuration\n modelServiceConfig: z.custom<ModelServiceConfig>().nullable().default(null),\n});\n\nexport type DefaultAgentConfig = z.infer<typeof DefaultAgentConfigSchema>;\n\n/**\n * RockAgent configuration schema with validation\n */\nexport const RockAgentConfigSchema = z\n .object({\n agentType: z.string().default('default'),\n agentName: z.string().default(() => randomUUID().replace(/-/g, '')),\n version: z.string().default('default'),\n\n agentInstalledDir: z.string().default('/tmp/installed_agent'),\n instanceId: z.string().default(() => `instance-id-${randomUUID().replace(/-/g, '')}`),\n\n projectPath: z.string().nullable().default(null),\n useDeployWorkingDirAsFallback: z.boolean().default(true),\n\n agentSession: z.string().default(() => `agent-session-${randomUUID().replace(/-/g, '')}`),\n\n env: z.record(z.string()).default({}),\n\n preInitCmds: z.array(AgentBashCommandSchema).default(\n envVars.ROCK_AGENT_PRE_INIT_BASH_CMD_LIST.map((cmd) => ({\n command: cmd.command,\n timeoutSeconds: cmd.timeoutSeconds || 300,\n }))\n ),\n postInitCmds: z.array(AgentBashCommandSchema).default([]),\n\n agentInstallTimeout: z.number().int().positive().default(600),\n agentRunTimeout: z.number().int().positive().default(1800),\n agentRunCheckInterval: z.number().int().positive().default(30),\n\n workingDir: z.string().nullable().default(null),\n runCmd: z.string().nullable().default(null),\n skipWrapRunCmd: z.boolean().default(false),\n\n runtimeEnvConfig: z.any().nullable().default(null),\n modelServiceConfig: z.custom<ModelServiceConfig>().nullable().default(null),\n })\n .refine((data) => data.agentRunCheckInterval < data.agentRunTimeout, {\n message: 'agentRunCheckInterval must be less than agentRunTimeout',\n });\n\nexport type RockAgentConfig = z.infer<typeof RockAgentConfigSchema>;\n","/**\n * ROCK TypeScript SDK\n * Main entry point\n */\n\nimport { readFileSync } from 'fs';\nimport { join } from 'path';\n\n// Version - read from package.json to ensure consistency\nfunction getVersion(): string {\n const packageJsonPath = join(__dirname, '..', 'package.json');\n const content = readFileSync(packageJsonPath, 'utf-8');\n return JSON.parse(content).version;\n}\n\nexport const VERSION: string = getVersion();\n\n// Types\nexport * from './types/index.js';\n\n// Common - explicit exports to avoid conflicts\nexport {\n RockException,\n InvalidParameterRockException,\n BadRequestRockError,\n InternalServerRockError,\n CommandRockError,\n raiseForCode,\n fromRockException,\n} from './common/index.js';\nexport { RunMode, RunModeType, PID_PREFIX, PID_SUFFIX } from './common/constants.js';\n\n// Utils - explicit exports to avoid conflicts\nexport { HttpUtils } from './utils/http.js';\nexport { retryAsync, sleep, withRetry } from './utils/retry.js';\nexport { deprecated, deprecatedClass } from './utils/deprecated.js';\nexport { isNode, getEnv, getRequiredEnv, isEnvSet } from './utils/system.js';\n\n// EnvHub\nexport * from './envhub/index.js';\n\n// Envs\nexport * from './envs/index.js';\n\n// Sandbox - selective exports\nexport { Sandbox, SandboxGroup } from './sandbox/client.js';\nexport type { RunModeType as SandboxRunModeType } from './common/constants.js';\nexport {\n SandboxConfigSchema,\n SandboxGroupConfigSchema,\n createSandboxConfig,\n createSandboxGroupConfig,\n} from './sandbox/config.js';\nexport type { SandboxConfig, SandboxGroupConfig, BaseConfig } from './sandbox/config.js';\nexport { Deploy } from './sandbox/deploy.js';\nexport { LinuxFileSystem } from './sandbox/file_system.js';\nexport { Network, SpeedupType } from './sandbox/network.js';\nexport { Process } from './sandbox/process.js';\nexport { LinuxRemoteUser } from './sandbox/remote_user.js';\nexport { withTimeLogging, arunWithRetry, extractNohupPid as extractNohupPidFromSandbox } from './sandbox/utils.js';\n\n// Model\nexport * from './model/index.js';\n\n// RuntimeEnv\nexport * from './sandbox/runtime_env/index.js';\n\n// ModelService (sandbox)\nexport * from './sandbox/model_service/index.js';\n\n// Agent\nexport * from './sandbox/agent/index.js';\n"]}