rl-rock 1.2.2 → 1.2.4
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.d.mts +33 -11
- package/dist/index.d.ts +33 -11
- package/dist/index.js +77 -17
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +77 -17
- package/dist/index.mjs.map +1 -1
- package/package.json +13 -11
package/dist/index.mjs.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/deprecated.ts","../src/utils/system.ts","../src/env_vars.ts","../src/envhub/schema.ts","../src/envhub/client.ts","../src/logger.ts","../src/envs/rock_env.ts","../src/envs/registration.ts","../src/sandbox/config.ts","../src/sandbox/deploy.ts","../src/sandbox/file_system.ts","../src/sandbox/types.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/model/service.ts","../src/index.ts"],"names":["Codes","z","toCamel","toSnake","axios","resolve","join","logger","existsSync","SpeedupType","PID_PREFIX","PID_SUFFIX","randomUUID","process"],"mappings":"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","file":"index.mjs","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});\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 * Constants class (deprecated, use envs module instead)\n * @deprecated Use envs module instead\n */\nexport class Constants {\n static readonly BASE_URL_PRODUCT = '';\n static readonly BASE_URL_ALIYUN = '';\n static readonly BASE_URL_INNER = '';\n static readonly BASE_URL_PRE = '';\n static readonly BASE_URL_LOCAL = '';\n static readonly REQUEST_TIMEOUT_SECONDS = 180;\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 } from 'axios';\nimport https from 'https';\nimport { PID_PREFIX, PID_SUFFIX } from '../common/constants.js';\nimport { objectToCamel, objectToSnake } from './case.js';\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 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: new https.Agent({\n rejectUnauthorized: true,\n }),\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<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 return objectToCamel(response.data as object) as T;\n } catch (error) {\n if (error instanceof AxiosError) {\n throw new Error(`Failed to POST ${url}: ${error.message}`);\n }\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<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 return objectToCamel(response.data as object) as T;\n } catch (error) {\n if (error instanceof AxiosError) {\n throw new Error(`Failed to GET ${url}: ${error.message}`);\n }\n throw error;\n }\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<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 'Content-Type': 'multipart/form-data',\n },\n });\n\n try {\n const response = await client.post<unknown>(url, formData);\n // Convert response to camelCase for SDK users\n return objectToCamel(response.data as object) as T;\n } catch (error) {\n if (error instanceof AxiosError) {\n throw new Error(`Failed to POST multipart ${url}: ${error.message}`);\n }\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 = 1.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 * Deprecated decorator utilities\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\n descriptor.value = function (...args: unknown[]): unknown {\n console.warn(\n `${String(propertyKey)} is deprecated. ${reason}`\n );\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 return class extends constructor {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n constructor(...args: any[]) {\n console.warn(`${constructor.name} is deprecated. ${reason}`);\n super(...args);\n }\n };\n };\n}\n","/**\n * System utilities\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 * Check if running in browser environment\n */\nexport function isBrowser(): boolean {\n return typeof globalThis !== 'undefined' && \n 'window' in globalThis && \n typeof (globalThis as Record<string, unknown>).window !== 'undefined';\n}\n\n/**\n * Get environment variable\n */\nexport function getEnv(key: string, defaultValue?: string): string | undefined {\n if (isNode()) {\n return process.env[key] ?? defaultValue;\n }\n return 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 */\nexport function isEnvSet(key: string): boolean {\n if (isNode()) {\n return key in process.env;\n }\n return false;\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://mirrors.aliyun.com/pypi/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/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\n/**\n * Check if an environment variable is explicitly set\n */\nexport function isSet(name: string): boolean {\n return isEnvSet(name);\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);\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);\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.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;\n } catch (e) {\n throw new EnvHubError(`Failed to health check: ${e}`);\n }\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\n */\nconst loggerCache = new Map<string, winston.Logger>();\n\n/**\n * Initialize and return a logger instance\n */\nexport function initLogger(name: string = 'rock', fileName?: string): winston.Logger {\n // Return cached logger if exists\n if (loggerCache.has(name)) {\n return loggerCache.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 const logger = winston.createLogger({\n levels,\n defaultMeta: { service: name },\n transports,\n });\n\n // Cache the logger\n loggerCache.set(name, logger);\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 * RockEnv - Gym-style environment interface\n */\n\nimport axios, { AxiosInstance } from 'axios';\nimport { envVars } from '../env_vars.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 private client: AxiosInstance;\n\n constructor(config: RockEnvConfig) {\n this.envId = config.envId;\n this.client = axios.create({\n baseURL: envVars.ROCK_BASE_URL,\n timeout: 300000,\n headers: { 'Content-Type': 'application/json' },\n });\n\n try {\n this.initializeEnvironment();\n } catch (e) {\n throw new Error(`Failed to initialize environment: ${e}`);\n }\n }\n\n /**\n * Initialize environment instance\n */\n private initializeEnvironment(): void {\n logger.debug(`Initializing environment: ${this.envId}`);\n // This would normally call the admin API\n // For now, we'll leave the implementation as a stub\n // that can be filled in based on actual API requirements\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 params = {\n sandbox_id: this.sandboxId,\n action,\n };\n\n try {\n const response = await this.client.post(\n '/apis/v1/envs/gem/step',\n params\n );\n return this.parseStepResult(response.data);\n } catch (e) {\n throw new Error(`Failed to execute step with action ${action}: ${e}`);\n }\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> = { sandbox_id: this.sandboxId };\n if (seed !== undefined) {\n params.seed = seed;\n }\n\n try {\n const response = await this.client.post(\n '/apis/v1/envs/gem/reset',\n params\n );\n return this.parseResetResult(response.data);\n } catch (e) {\n throw new Error(`Failed to reset environment: ${e}`);\n }\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 this.client.post('/apis/v1/envs/gem/close', {\n sandbox_id: 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(data: Record<string, unknown>): StepResult {\n return [\n data.observation,\n data.reward as number,\n data.terminated as boolean,\n data.truncated as boolean,\n data.info as Record<string, unknown>,\n ];\n }\n\n /**\n * Parse reset result from API response\n */\n private parseResetResult(data: Record<string, unknown>): ResetResult {\n return [data.observation, data.info as Record<string, unknown>];\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","/**\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 RockEnv instance\n */\nexport function make(envId: string, options?: Record<string, unknown>): RockEnv {\n return new RockEnv({ envId, ...options });\n}\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('python:3.11'),\n autoClearSeconds: z.number().default(300),\n routeKey: z.string().optional(),\n startupTimeout: z.number().default(envVars.ROCK_SANDBOX_STARTUP_TIMEOUT_SECONDS),\n memory: z.string().default('8g'),\n cpus: z.number().default(2),\n userId: z.string().optional(),\n experimentId: z.string().optional(),\n cluster: z.string().default('zb'),\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(2),\n startConcurrency: z.number().default(2),\n startRetryTimes: z.number().default(3),\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 * FileSystem - File system operations for sandbox\n */\n\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';\n\nconst logger = initLogger('rock.sandbox.fs');\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 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 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 // Simplified implementation - would need tar/untar logic\n // This is a placeholder that would be implemented with actual\n // tar file creation and upload logic\n logger.info(`uploadDir: ${sourceDir} -> ${targetDir}`);\n\n // For now, return a placeholder observation\n return {\n output: `uploaded ${sourceDir} -> ${targetDir}`,\n exitCode: 0,\n failureReason: '',\n expectString: '',\n };\n }\n}\n","/**\n * Sandbox types\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 * Speedup type enum\n */\nexport enum SpeedupType {\n APT = 'apt',\n PIP = 'pip',\n GITHUB = 'github',\n}\n\n/**\n * Runtime environment ID type\n */\nexport type RuntimeEnvId = string;\n\n/**\n * Agent type\n */\nexport type AgentType = 'default' | 'iflow-cli' | 'openhands' | 'swe-agent';\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 { SpeedupType } from './types.js';\n\nconst logger = initLogger('rock.sandbox.network');\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 let command: string;\n\n switch (speedupType) {\n case SpeedupType.APT:\n command = this.buildAptSpeedupCommand(speedupValue);\n break;\n case SpeedupType.PIP:\n command = this.buildPipSpeedupCommand(speedupValue);\n break;\n case SpeedupType.GITHUB:\n command = this.buildGithubSpeedupCommand(speedupValue);\n break;\n default:\n throw new Error(`Unsupported speedup type: ${speedupType}`);\n }\n\n const result = await this.sandbox.arun(command, {\n mode: 'nohup',\n waitTimeout: timeout,\n });\n\n return result;\n }\n\n private buildAptSpeedupCommand(mirrorUrl: string): string {\n return `cat > /etc/apt/sources.list << 'EOF'\ndeb ${mirrorUrl} $(lsb_release -cs) main restricted universe multiverse\ndeb ${mirrorUrl} $(lsb_release -cs)-updates main restricted universe multiverse\ndeb ${mirrorUrl} $(lsb_release -cs)-backports main restricted universe multiverse\ndeb ${mirrorUrl} $(lsb_release -cs)-security main restricted universe multiverse\nEOF\napt-get update`;\n }\n\n private buildPipSpeedupCommand(mirrorUrl: string): string {\n const safeUrl = mirrorUrl.replace(/'/g, \"'\\\\''\");\n return `mkdir -p ~/.pip && cat > ~/.pip/pip.conf << 'EOF'\n[global]\nindex-url = ${safeUrl}\ntrusted-host = $(echo ${safeUrl} | sed 's|https\\\\?://||' | cut -d'/' -f1)\nEOF`;\n }\n\n private buildGithubSpeedupCommand(ipAddress: string): string {\n return `echo \"${ipAddress} github.com\" >> /etc/hosts`;\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.write_file({\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 './types.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 * Extract nohup PID from output\n */\nexport function extractNohupPid(output: string): number | null {\n const PID_PREFIX = '__ROCK_PID_START__';\n const PID_SUFFIX = '__ROCK_PID_END__';\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 * Sandbox client - Core sandbox management\n */\n\nimport { randomUUID } from 'crypto';\nimport { initLogger } from '../logger.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 './types.js';\nexport type { RunModeType };\nexport { RunModeEnum as RunMode };\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 read_file(request: ReadFileRequest): Promise<ReadFileResponse>;\n abstract write_file(request: WriteFileRequest): Promise<WriteFileResponse>;\n abstract upload(request: UploadRequest): Promise<UploadResponse>;\n abstract closeSession(request: CloseSessionRequest): Promise<CloseSessionResponse>;\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 try {\n const response = await HttpUtils.post<{ status: string; result?: { sandboxId?: string; hostName?: string; hostIp?: string } }>(\n url,\n headers,\n data\n );\n\n logger.debug(`Start sandbox response: ${JSON.stringify(response)}`);\n\n if (response.status !== 'Success') {\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 Error(`Failed to start sandbox within ${this.config.startupTimeout}s`);\n } catch (e) {\n throw new Error(`Failed to start sandbox: ${e}`);\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 return {\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<{ status: string; result?: SandboxStatusResponse }>(url, headers);\n\n if (response.status !== 'Success') {\n throw new Error(`Failed to get status: ${JSON.stringify(response)}`);\n }\n\n return response.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 try {\n const response = await HttpUtils.post<{ status: string; result?: CommandResponse }>(\n url,\n headers,\n data\n );\n\n if (response.status !== 'Success') {\n throw new Error(`Failed to execute command: ${JSON.stringify(response)}`);\n }\n\n return response.result!;\n } catch (e) {\n throw new Error(`Failed to execute command: ${e}`);\n }\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 try {\n const response = await HttpUtils.post<{ status: string; result?: CreateSessionResponse }>(\n url,\n headers,\n data\n );\n\n if (response.status !== 'Success') {\n throw new Error(`Failed to create session: ${JSON.stringify(response)}`);\n }\n\n return response.result!;\n } catch (e) {\n throw new Error(`Failed to create session: ${e}`);\n }\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 try {\n const response = await HttpUtils.post<{ status: string; result?: CloseSessionResponse }>(\n url,\n headers,\n data\n );\n\n if (response.status !== 'Success') {\n throw new Error(`Failed to close session: ${JSON.stringify(response)}`);\n }\n\n return response.result ?? { sessionType: 'bash' };\n } catch (e) {\n throw new Error(`Failed to close session: ${e}`);\n }\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 // Ensure session exists before running command (ignore if already exists)\n try {\n await this.createSession({ session: sessionName, startupSource: [], envEnable: false });\n } catch (e) {\n if (String(e).includes('already exists')) {\n // Session already exists, reuse it\n } else {\n throw e;\n }\n }\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 try {\n // Convert timeout from seconds to milliseconds for axios\n const timeoutMs = action.timeout ? action.timeout * 1000 : undefined;\n const response = await HttpUtils.post<{ status: string; result?: Observation }>(\n url,\n headers,\n data,\n timeoutMs\n );\n\n if (response.status !== 'Success') {\n throw new Error(`Failed to execute command: ${JSON.stringify(response)}`);\n }\n\n // Response is already camelCase (converted by HTTP layer)\n return response.result!;\n } catch (e) {\n throw new Error(`Failed to run in session: ${e}`);\n }\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 const tmpSession = session ?? `bash-${timestamp}`;\n\n // Ensure session exists (ignore if already exists)\n try {\n await this.createSession({ session: tmpSession, startupSource: [], envEnable: false });\n } catch (e) {\n if (!String(e).includes('already exists')) {\n throw e;\n }\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 write_file(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<{ status: string }>(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 read_file(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<{ status: string; result?: { content: string } }>(\n url,\n headers,\n data\n );\n\n return { content: response.result?.content ?? '' };\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');\n if (!fs.existsSync(sourcePath)) {\n return { success: false, message: `File not found: ${sourcePath}` };\n }\n\n const fileBuffer = fs.readFileSync(sourcePath);\n const fileName = sourcePath.split('/').pop() ?? 'file';\n\n const response = await HttpUtils.postMultipart<{ status: string }>(\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, readFileSync, appendFileSync } from 'fs';\nimport { initLogger } from '../logger.js';\nimport { envVars } from '../env_vars.js';\n\nconst logger = initLogger('rock.model.client');\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 * 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 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 this.appendResponse(content);\n }\n\n /**\n * Pop request from log file\n */\n // eslint-disable-next-line no-constant-condition\n async popRequest(index: number): Promise<string> {\n while (true) {\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 this.sleep(1000);\n }\n }\n\n /**\n * Wait for first request\n */\n // eslint-disable-next-line no-constant-condition\n async waitForFirstRequest(): Promise<void> {\n while (true) {\n if (!existsSync(this.logFile)) {\n logger.debug(`Log file ${this.logFile} not found, waiting...`);\n await this.sleep(1000);\n continue;\n }\n\n const content = readFileSync(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 this.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 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 }\n\n private parseResponseLine(lineContent: string): { responseJson: string; meta: Record<string, unknown> } {\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 }\n\n private async readLastRequestLine(): Promise<string> {\n const content = readFileSync(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 = readFileSync(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 appendResponse(content: string): void {\n appendFileSync(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 private sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n}\n","/**\n * Model service for managing local LLM service\n */\n\nimport { spawn, ChildProcess } from 'child_process';\nimport { resolve } from 'path';\nimport axios from 'axios';\n\n/**\n * Model service configuration\n */\nexport interface ModelServiceConfig {\n modelServiceType?: string;\n configFile?: string;\n host?: string;\n port?: number;\n proxyBaseUrl?: string;\n retryableStatusCodes?: string;\n requestTimeout?: number;\n}\n\n/**\n * Model service for managing local LLM service\n */\nexport class ModelService {\n private process: ChildProcess | null = null;\n\n /**\n * Start sandbox service\n */\n startSandboxService(config: ModelServiceConfig = {}): ChildProcess {\n const {\n modelServiceType = 'local',\n configFile,\n host,\n port,\n proxyBaseUrl,\n retryableStatusCodes,\n requestTimeout,\n } = config;\n\n const cmd = ['node', 'main.js', '--type', modelServiceType];\n\n if (configFile) {\n cmd.push('--config-file', configFile);\n }\n if (host) {\n cmd.push('--host', host);\n }\n if (port) {\n cmd.push('--port', String(port));\n }\n if (proxyBaseUrl) {\n cmd.push('--proxy-base-url', proxyBaseUrl);\n }\n if (retryableStatusCodes) {\n cmd.push('--retryable-status-codes', retryableStatusCodes);\n }\n if (requestTimeout) {\n cmd.push('--request-timeout', String(requestTimeout));\n }\n\n const command = cmd[0] ?? 'node';\n this.process = spawn(command, cmd.slice(1), {\n cwd: resolve(__dirname, 'server'),\n stdio: 'inherit',\n });\n\n if (!this.process) {\n throw new Error('Failed to spawn model service process');\n }\n\n return this.process;\n }\n\n /**\n * Start and wait for service to be available\n */\n async start(config: ModelServiceConfig & { timeoutSeconds?: number } = {}): Promise<string> {\n const { timeoutSeconds = 30, ...serviceConfig } = config;\n\n const process = this.startSandboxService(serviceConfig);\n const pid = process.pid?.toString();\n\n if (!pid) {\n throw new Error('Failed to start model service');\n }\n\n const success = await this.waitServiceAvailable(\n timeoutSeconds,\n serviceConfig.host ?? '127.0.0.1',\n serviceConfig.port ?? 8080\n );\n\n if (!success) {\n await this.stop(pid);\n throw new Error('Model service start failed');\n }\n\n return pid;\n }\n\n /**\n * Start watching agent\n */\n async startWatchAgent(\n agentPid: number,\n host: string = '127.0.0.1',\n port: number = 8080\n ): Promise<void> {\n await axios.post(`http://${host}:${port}/v1/agent/watch`, { pid: agentPid });\n }\n\n /**\n * Stop service\n */\n async stop(pid: string): Promise<void> {\n const { execSync } = await import('child_process');\n try {\n execSync(`kill -9 ${pid}`);\n } catch {\n // Ignore errors\n }\n }\n\n /**\n * Wait for service to be available\n */\n private async waitServiceAvailable(\n timeoutSeconds: number,\n host: string,\n port: number\n ): Promise<boolean> {\n const startTime = Date.now();\n\n while ((Date.now() - startTime) / 1000 < timeoutSeconds) {\n try {\n await axios.get(`http://${host}:${port}/health`);\n return true;\n } catch {\n await this.sleep(1000);\n }\n }\n\n return false;\n }\n\n private sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n}\n","/**\n * ROCK TypeScript SDK\n * Main entry point\n */\n\n// Version\nexport const VERSION = '1.2.1';\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 { Constants, 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, isBrowser, 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 './sandbox/types.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 } 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';\nexport { SpeedupType } from './sandbox/types.js';\n\n// Model\nexport * from './model/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/deprecated.ts","../src/utils/system.ts","../src/env_vars.ts","../src/envhub/schema.ts","../src/envhub/client.ts","../src/logger.ts","../src/envs/rock_env.ts","../src/envs/registration.ts","../src/sandbox/config.ts","../src/sandbox/deploy.ts","../src/sandbox/file_system.ts","../src/sandbox/types.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/model/service.ts","../src/index.ts"],"names":["Codes","z","toCamel","toSnake","axios","resolve","join","logger","existsSync","SpeedupType","PID_PREFIX","PID_SUFFIX","randomUUID","process"],"mappings":"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","file":"index.mjs","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 * Constants class (deprecated, use envs module instead)\n * @deprecated Use envs module instead\n */\nexport class Constants {\n static readonly BASE_URL_PRODUCT = '';\n static readonly BASE_URL_ALIYUN = '';\n static readonly BASE_URL_INNER = '';\n static readonly BASE_URL_PRE = '';\n static readonly BASE_URL_LOCAL = '';\n static readonly REQUEST_TIMEOUT_SECONDS = 180;\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 * 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: new https.Agent({\n rejectUnauthorized: true,\n }),\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 if (error instanceof AxiosError) {\n throw new Error(`Failed to POST ${url}: ${error.message}`);\n }\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 if (error instanceof AxiosError) {\n throw new Error(`Failed to GET ${url}: ${error.message}`);\n }\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 'Content-Type': 'multipart/form-data',\n },\n });\n\n try {\n const response = await client.post<unknown>(url, formData);\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 if (error instanceof AxiosError) {\n throw new Error(`Failed to POST multipart ${url}: ${error.message}`);\n }\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 = 1.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 * Deprecated decorator utilities\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\n descriptor.value = function (...args: unknown[]): unknown {\n console.warn(\n `${String(propertyKey)} is deprecated. ${reason}`\n );\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 return class extends constructor {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n constructor(...args: any[]) {\n console.warn(`${constructor.name} is deprecated. ${reason}`);\n super(...args);\n }\n };\n };\n}\n","/**\n * System utilities\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 * Check if running in browser environment\n */\nexport function isBrowser(): boolean {\n return typeof globalThis !== 'undefined' && \n 'window' in globalThis && \n typeof (globalThis as Record<string, unknown>).window !== 'undefined';\n}\n\n/**\n * Get environment variable\n */\nexport function getEnv(key: string, defaultValue?: string): string | undefined {\n if (isNode()) {\n return process.env[key] ?? defaultValue;\n }\n return 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 */\nexport function isEnvSet(key: string): boolean {\n if (isNode()) {\n return key in process.env;\n }\n return false;\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://mirrors.aliyun.com/pypi/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/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\n/**\n * Check if an environment variable is explicitly set\n */\nexport function isSet(name: string): boolean {\n return isEnvSet(name);\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 * 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\n */\nconst loggerCache = new Map<string, winston.Logger>();\n\n/**\n * Initialize and return a logger instance\n */\nexport function initLogger(name: string = 'rock', fileName?: string): winston.Logger {\n // Return cached logger if exists\n if (loggerCache.has(name)) {\n return loggerCache.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 const logger = winston.createLogger({\n levels,\n defaultMeta: { service: name },\n transports,\n });\n\n // Cache the logger\n loggerCache.set(name, logger);\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 * RockEnv - Gym-style environment interface\n */\n\nimport axios, { AxiosInstance } from 'axios';\nimport { envVars } from '../env_vars.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 private client: AxiosInstance;\n\n constructor(config: RockEnvConfig) {\n this.envId = config.envId;\n this.client = axios.create({\n baseURL: envVars.ROCK_BASE_URL,\n timeout: 300000,\n headers: { 'Content-Type': 'application/json' },\n });\n\n try {\n this.initializeEnvironment();\n } catch (e) {\n throw new Error(`Failed to initialize environment: ${e}`);\n }\n }\n\n /**\n * Initialize environment instance\n */\n private initializeEnvironment(): void {\n logger.debug(`Initializing environment: ${this.envId}`);\n // This would normally call the admin API\n // For now, we'll leave the implementation as a stub\n // that can be filled in based on actual API requirements\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 params = {\n sandbox_id: this.sandboxId,\n action,\n };\n\n try {\n const response = await this.client.post(\n '/apis/v1/envs/gem/step',\n params\n );\n return this.parseStepResult(response.data);\n } catch (e) {\n throw new Error(`Failed to execute step with action ${action}: ${e}`);\n }\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> = { sandbox_id: this.sandboxId };\n if (seed !== undefined) {\n params.seed = seed;\n }\n\n try {\n const response = await this.client.post(\n '/apis/v1/envs/gem/reset',\n params\n );\n return this.parseResetResult(response.data);\n } catch (e) {\n throw new Error(`Failed to reset environment: ${e}`);\n }\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 this.client.post('/apis/v1/envs/gem/close', {\n sandbox_id: 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(data: Record<string, unknown>): StepResult {\n return [\n data.observation,\n data.reward as number,\n data.terminated as boolean,\n data.truncated as boolean,\n data.info as Record<string, unknown>,\n ];\n }\n\n /**\n * Parse reset result from API response\n */\n private parseResetResult(data: Record<string, unknown>): ResetResult {\n return [data.observation, data.info as Record<string, unknown>];\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","/**\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 RockEnv instance\n */\nexport function make(envId: string, options?: Record<string, unknown>): RockEnv {\n return new RockEnv({ envId, ...options });\n}\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('python:3.11'),\n autoClearSeconds: z.number().default(300),\n routeKey: z.string().optional(),\n startupTimeout: z.number().default(envVars.ROCK_SANDBOX_STARTUP_TIMEOUT_SECONDS),\n memory: z.string().default('8g'),\n cpus: z.number().default(2),\n userId: z.string().optional(),\n experimentId: z.string().optional(),\n cluster: z.string().default('zb'),\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(2),\n startConcurrency: z.number().default(2),\n startRetryTimes: z.number().default(3),\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 * FileSystem - File system operations for sandbox\n */\n\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';\n\nconst logger = initLogger('rock.sandbox.fs');\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 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 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 // Simplified implementation - would need tar/untar logic\n // This is a placeholder that would be implemented with actual\n // tar file creation and upload logic\n logger.info(`uploadDir: ${sourceDir} -> ${targetDir}`);\n\n // For now, return a placeholder observation\n return {\n output: `uploaded ${sourceDir} -> ${targetDir}`,\n exitCode: 0,\n failureReason: '',\n expectString: '',\n };\n }\n}\n","/**\n * Sandbox types\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 * Speedup type enum\n */\nexport enum SpeedupType {\n APT = 'apt',\n PIP = 'pip',\n GITHUB = 'github',\n}\n\n/**\n * Runtime environment ID type\n */\nexport type RuntimeEnvId = string;\n\n/**\n * Agent type\n */\nexport type AgentType = 'default' | 'iflow-cli' | 'openhands' | 'swe-agent';\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 { SpeedupType } from './types.js';\n\nconst logger = initLogger('rock.sandbox.network');\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 let command: string;\n\n switch (speedupType) {\n case SpeedupType.APT:\n command = this.buildAptSpeedupCommand(speedupValue);\n break;\n case SpeedupType.PIP:\n command = this.buildPipSpeedupCommand(speedupValue);\n break;\n case SpeedupType.GITHUB:\n command = this.buildGithubSpeedupCommand(speedupValue);\n break;\n default:\n throw new Error(`Unsupported speedup type: ${speedupType}`);\n }\n\n const result = await this.sandbox.arun(command, {\n mode: 'nohup',\n waitTimeout: timeout,\n });\n\n return result;\n }\n\n private buildAptSpeedupCommand(mirrorUrl: string): string {\n return `cat > /etc/apt/sources.list << 'EOF'\ndeb ${mirrorUrl} $(lsb_release -cs) main restricted universe multiverse\ndeb ${mirrorUrl} $(lsb_release -cs)-updates main restricted universe multiverse\ndeb ${mirrorUrl} $(lsb_release -cs)-backports main restricted universe multiverse\ndeb ${mirrorUrl} $(lsb_release -cs)-security main restricted universe multiverse\nEOF\napt-get update`;\n }\n\n private buildPipSpeedupCommand(mirrorUrl: string): string {\n const safeUrl = mirrorUrl.replace(/'/g, \"'\\\\''\");\n return `mkdir -p ~/.pip && cat > ~/.pip/pip.conf << 'EOF'\n[global]\nindex-url = ${safeUrl}\ntrusted-host = $(echo ${safeUrl} | sed 's|https\\\\?://||' | cut -d'/' -f1)\nEOF`;\n }\n\n private buildGithubSpeedupCommand(ipAddress: string): string {\n return `echo \"${ipAddress} github.com\" >> /etc/hosts`;\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 './types.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 * Extract nohup PID from output\n */\nexport function extractNohupPid(output: string): number | null {\n const PID_PREFIX = '__ROCK_PID_START__';\n const PID_SUFFIX = '__ROCK_PID_END__';\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 * Sandbox client - Core sandbox management\n */\n\nimport { randomUUID } from 'crypto';\nimport { initLogger } from '../logger.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 './types.js';\nexport type { RunModeType };\nexport { RunModeEnum as RunMode };\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 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 try {\n const response = await HttpUtils.post<{ sandboxId?: string; hostName?: string; hostIp?: string }>(\n url,\n headers,\n data\n );\n\n logger.debug(`Start sandbox response: ${JSON.stringify(response)}`);\n\n if (response.status !== 'Success') {\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 Error(`Failed to start sandbox within ${this.config.startupTimeout}s`);\n } catch (e) {\n throw new Error(`Failed to start sandbox: ${e}`);\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 return {\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>(url, headers);\n\n if (response.status !== 'Success') {\n const errorDetail = response.error ? `, error=${response.error}` : '';\n throw new Error(`Failed to get status: status=${response.status}${errorDetail}, result=${JSON.stringify(response.result)}`);\n }\n\n const result = 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 try {\n const response = await HttpUtils.post<CommandResponse>(\n url,\n headers,\n data\n );\n\n if (response.status !== 'Success') {\n const errorDetail = response.error ? `, error=${response.error}` : '';\n throw new Error(`Failed to execute command: status=${response.status}${errorDetail}, result=${JSON.stringify(response.result)}`);\n }\n\n return response.result!;\n } catch (e) {\n throw new Error(`Failed to execute command: ${e}`);\n }\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 try {\n const response = await HttpUtils.post<CreateSessionResponse>(\n url,\n headers,\n data\n );\n\n if (response.status !== 'Success') {\n const errorDetail = response.error ? `, error=${response.error}` : '';\n throw new Error(`Failed to create session: status=${response.status}${errorDetail}, result=${JSON.stringify(response.result)}`);\n }\n\n return response.result!;\n } catch (e) {\n throw new Error(`Failed to create session: ${e}`);\n }\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 try {\n const response = await HttpUtils.post<CloseSessionResponse>(\n url,\n headers,\n data\n );\n\n if (response.status !== 'Success') {\n const errorDetail = response.error ? `, error=${response.error}` : '';\n throw new Error(`Failed to close session: status=${response.status}${errorDetail}, result=${JSON.stringify(response.result)}`);\n }\n\n return response.result ?? { sessionType: 'bash' };\n } catch (e) {\n throw new Error(`Failed to close session: ${e}`);\n }\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 // Ensure session exists before running command (ignore if already exists)\n try {\n await this.createSession({ session: sessionName, startupSource: [], envEnable: false });\n } catch (e) {\n if (String(e).includes('already exists')) {\n // Session already exists, reuse it\n } else {\n throw e;\n }\n }\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 try {\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>(\n url,\n headers,\n data,\n timeoutMs\n );\n\n if (response.status !== 'Success') {\n const errorDetail = response.error ? `, error=${response.error}` : '';\n throw new Error(`Failed to run in session: status=${response.status}${errorDetail}, result=${JSON.stringify(response.result)}`);\n }\n\n // Response is already camelCase (converted by HTTP layer)\n return response.result!;\n } catch (e) {\n throw new Error(`Failed to run in session: ${e}`);\n }\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 const tmpSession = session ?? `bash-${timestamp}`;\n\n // Ensure session exists (ignore if already exists)\n try {\n await this.createSession({ session: tmpSession, startupSource: [], envEnable: false });\n } catch (e) {\n if (!String(e).includes('already exists')) {\n throw e;\n }\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 return { content: response.result?.content ?? '' };\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');\n if (!fs.existsSync(sourcePath)) {\n return { success: false, message: `File not found: ${sourcePath}` };\n }\n\n const fileBuffer = fs.readFileSync(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, readFileSync, appendFileSync } from 'fs';\nimport { initLogger } from '../logger.js';\nimport { envVars } from '../env_vars.js';\n\nconst logger = initLogger('rock.model.client');\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 * 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 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 this.appendResponse(content);\n }\n\n /**\n * Pop request from log file\n */\n // eslint-disable-next-line no-constant-condition\n async popRequest(index: number): Promise<string> {\n while (true) {\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 this.sleep(1000);\n }\n }\n\n /**\n * Wait for first request\n */\n // eslint-disable-next-line no-constant-condition\n async waitForFirstRequest(): Promise<void> {\n while (true) {\n if (!existsSync(this.logFile)) {\n logger.debug(`Log file ${this.logFile} not found, waiting...`);\n await this.sleep(1000);\n continue;\n }\n\n const content = readFileSync(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 this.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 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 }\n\n private parseResponseLine(lineContent: string): { responseJson: string; meta: Record<string, unknown> } {\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 }\n\n private async readLastRequestLine(): Promise<string> {\n const content = readFileSync(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 = readFileSync(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 appendResponse(content: string): void {\n appendFileSync(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 private sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n}\n","/**\n * Model service for managing local LLM service\n */\n\nimport { spawn, ChildProcess } from 'child_process';\nimport { resolve } from 'path';\nimport axios from 'axios';\n\n/**\n * Model service configuration\n */\nexport interface ModelServiceConfig {\n modelServiceType?: string;\n configFile?: string;\n host?: string;\n port?: number;\n proxyBaseUrl?: string;\n retryableStatusCodes?: string;\n requestTimeout?: number;\n}\n\n/**\n * Model service for managing local LLM service\n */\nexport class ModelService {\n private process: ChildProcess | null = null;\n\n /**\n * Start sandbox service\n */\n startSandboxService(config: ModelServiceConfig = {}): ChildProcess {\n const {\n modelServiceType = 'local',\n configFile,\n host,\n port,\n proxyBaseUrl,\n retryableStatusCodes,\n requestTimeout,\n } = config;\n\n const cmd = ['node', 'main.js', '--type', modelServiceType];\n\n if (configFile) {\n cmd.push('--config-file', configFile);\n }\n if (host) {\n cmd.push('--host', host);\n }\n if (port) {\n cmd.push('--port', String(port));\n }\n if (proxyBaseUrl) {\n cmd.push('--proxy-base-url', proxyBaseUrl);\n }\n if (retryableStatusCodes) {\n cmd.push('--retryable-status-codes', retryableStatusCodes);\n }\n if (requestTimeout) {\n cmd.push('--request-timeout', String(requestTimeout));\n }\n\n const command = cmd[0] ?? 'node';\n this.process = spawn(command, cmd.slice(1), {\n cwd: resolve(__dirname, 'server'),\n stdio: 'inherit',\n });\n\n if (!this.process) {\n throw new Error('Failed to spawn model service process');\n }\n\n return this.process;\n }\n\n /**\n * Start and wait for service to be available\n */\n async start(config: ModelServiceConfig & { timeoutSeconds?: number } = {}): Promise<string> {\n const { timeoutSeconds = 30, ...serviceConfig } = config;\n\n const process = this.startSandboxService(serviceConfig);\n const pid = process.pid?.toString();\n\n if (!pid) {\n throw new Error('Failed to start model service');\n }\n\n const success = await this.waitServiceAvailable(\n timeoutSeconds,\n serviceConfig.host ?? '127.0.0.1',\n serviceConfig.port ?? 8080\n );\n\n if (!success) {\n await this.stop(pid);\n throw new Error('Model service start failed');\n }\n\n return pid;\n }\n\n /**\n * Start watching agent\n */\n async startWatchAgent(\n agentPid: number,\n host: string = '127.0.0.1',\n port: number = 8080\n ): Promise<void> {\n await axios.post(`http://${host}:${port}/v1/agent/watch`, { pid: agentPid });\n }\n\n /**\n * Stop service\n */\n async stop(pid: string): Promise<void> {\n const { execSync } = await import('child_process');\n try {\n execSync(`kill -9 ${pid}`);\n } catch {\n // Ignore errors\n }\n }\n\n /**\n * Wait for service to be available\n */\n private async waitServiceAvailable(\n timeoutSeconds: number,\n host: string,\n port: number\n ): Promise<boolean> {\n const startTime = Date.now();\n\n while ((Date.now() - startTime) / 1000 < timeoutSeconds) {\n try {\n await axios.get(`http://${host}:${port}/health`);\n return true;\n } catch {\n await this.sleep(1000);\n }\n }\n\n return false;\n }\n\n private sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n}\n","/**\n * ROCK TypeScript SDK\n * Main entry point\n */\n\n// Version\nexport const VERSION = '1.2.1';\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 { Constants, 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, isBrowser, 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 './sandbox/types.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 } 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';\nexport { SpeedupType } from './sandbox/types.js';\n\n// Model\nexport * from './model/index.js';\n"]}
|