@cloudflare/sandbox 0.5.6 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. package/Dockerfile +54 -56
  2. package/dist/index.d.ts +1 -0
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +3 -1
  5. package/dist/index.js.map +1 -1
  6. package/package.json +11 -6
  7. package/.turbo/turbo-build.log +0 -23
  8. package/CHANGELOG.md +0 -463
  9. package/src/clients/base-client.ts +0 -356
  10. package/src/clients/command-client.ts +0 -133
  11. package/src/clients/file-client.ts +0 -300
  12. package/src/clients/git-client.ts +0 -98
  13. package/src/clients/index.ts +0 -64
  14. package/src/clients/interpreter-client.ts +0 -339
  15. package/src/clients/port-client.ts +0 -105
  16. package/src/clients/process-client.ts +0 -198
  17. package/src/clients/sandbox-client.ts +0 -39
  18. package/src/clients/types.ts +0 -88
  19. package/src/clients/utility-client.ts +0 -156
  20. package/src/errors/adapter.ts +0 -238
  21. package/src/errors/classes.ts +0 -594
  22. package/src/errors/index.ts +0 -109
  23. package/src/file-stream.ts +0 -175
  24. package/src/index.ts +0 -121
  25. package/src/interpreter.ts +0 -168
  26. package/src/openai/index.ts +0 -465
  27. package/src/request-handler.ts +0 -184
  28. package/src/sandbox.ts +0 -1937
  29. package/src/security.ts +0 -119
  30. package/src/sse-parser.ts +0 -147
  31. package/src/storage-mount/credential-detection.ts +0 -41
  32. package/src/storage-mount/errors.ts +0 -51
  33. package/src/storage-mount/index.ts +0 -17
  34. package/src/storage-mount/provider-detection.ts +0 -93
  35. package/src/storage-mount/types.ts +0 -17
  36. package/src/version.ts +0 -6
  37. package/tests/base-client.test.ts +0 -582
  38. package/tests/command-client.test.ts +0 -444
  39. package/tests/file-client.test.ts +0 -831
  40. package/tests/file-stream.test.ts +0 -310
  41. package/tests/get-sandbox.test.ts +0 -172
  42. package/tests/git-client.test.ts +0 -455
  43. package/tests/openai-shell-editor.test.ts +0 -434
  44. package/tests/port-client.test.ts +0 -283
  45. package/tests/process-client.test.ts +0 -649
  46. package/tests/request-handler.test.ts +0 -292
  47. package/tests/sandbox.test.ts +0 -890
  48. package/tests/sse-parser.test.ts +0 -291
  49. package/tests/storage-mount/credential-detection.test.ts +0 -119
  50. package/tests/storage-mount/provider-detection.test.ts +0 -77
  51. package/tests/utility-client.test.ts +0 -339
  52. package/tests/version.test.ts +0 -16
  53. package/tests/wrangler.jsonc +0 -35
  54. package/tsconfig.json +0 -11
  55. package/tsdown.config.ts +0 -13
  56. package/vitest.config.ts +0 -31
package/Dockerfile CHANGED
@@ -25,6 +25,9 @@ FROM node:20-alpine AS builder
25
25
 
26
26
  WORKDIR /app
27
27
 
28
+ # Install Bun runtime (needed for sandbox-container build script)
29
+ COPY --from=oven/bun:1-alpine /usr/local/bin/bun /usr/local/bin/bun
30
+
28
31
  # Copy pruned lockfile and package.json files (for Docker layer caching)
29
32
  COPY --from=pruner /app/out/json/ .
30
33
  COPY --from=pruner /app/out/package-lock.json ./package-lock.json
@@ -41,24 +44,7 @@ COPY --from=pruner /app/out/full/ .
41
44
  RUN npx turbo run build
42
45
 
43
46
  # ============================================================================
44
- # Stage 3: Install production-only dependencies
45
- # ============================================================================
46
- FROM node:20-alpine AS prod-deps
47
-
48
- WORKDIR /app
49
-
50
- # Copy package files from builder
51
- COPY --from=builder /app/package.json ./package.json
52
- COPY --from=builder /app/package-lock.json ./package-lock.json
53
- COPY --from=builder /app/packages ./packages
54
- COPY --from=builder /app/tooling ./tooling
55
-
56
- # Install ONLY production dependencies (excludes typescript, @types/*, etc.)
57
- RUN --mount=type=cache,target=/root/.npm \
58
- CI=true npm ci --production
59
-
60
- # ============================================================================
61
- # Stage 4: Download pre-built Python 3.11.14
47
+ # Stage 3: Download pre-built Python 3.11.14
62
48
  # ============================================================================
63
49
  FROM ubuntu:22.04 AS python-builder
64
50
 
@@ -100,9 +86,9 @@ RUN --mount=type=cache,target=/tmp/python-cache \
100
86
  rm -rf /tmp/cpython-*
101
87
 
102
88
  # ============================================================================
103
- # Stage 5: Runtime - Ubuntu 22.04 with only runtime dependencies
89
+ # Stage 4: Runtime base - Ubuntu 22.04 with Node.js and Bun (no Python)
104
90
  # ============================================================================
105
- FROM ubuntu:22.04 AS runtime
91
+ FROM ubuntu:22.04 AS runtime-base
106
92
 
107
93
  # Accept version as build argument (passed from npm_package_version)
108
94
  ARG SANDBOX_VERSION=unknown
@@ -128,23 +114,6 @@ RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
128
114
  # Enable FUSE in container - allow non-root users to use FUSE
129
115
  RUN sed -i 's/#user_allow_other/user_allow_other/' /etc/fuse.conf
130
116
 
131
- # Copy pre-built Python from python-builder stage
132
- COPY --from=python-builder /usr/local/python /usr/local/python
133
-
134
- # Create symlinks and update shared library cache
135
- RUN ln -s /usr/local/python/bin/python3.11 /usr/local/bin/python3.11 && \
136
- ln -s /usr/local/python/bin/python3 /usr/local/bin/python3 && \
137
- ln -s /usr/local/python/bin/pip3 /usr/local/bin/pip3 && \
138
- echo "/usr/local/python/lib" > /etc/ld.so.conf.d/python.conf && \
139
- ldconfig
140
-
141
- # Set Python 3.11 as default python3
142
- RUN update-alternatives --install /usr/bin/python3 python3 /usr/local/bin/python3.11 1
143
-
144
- # Install Python packages
145
- RUN --mount=type=cache,target=/root/.cache/pip \
146
- pip3 install --no-cache-dir matplotlib numpy pandas ipython
147
-
148
117
  # Install Node.js 20 LTS from official Node image
149
118
  COPY --from=node:20-slim /usr/local/bin/node /usr/local/bin/node
150
119
  COPY --from=node:20-slim /usr/local/lib/node_modules /usr/local/lib/node_modules
@@ -157,25 +126,13 @@ COPY --from=oven/bun:1 /usr/local/bin/bun /usr/local/bin/bun
157
126
  # Set up runtime container server directory
158
127
  WORKDIR /container-server
159
128
 
160
- # Copy built sandbox-container package
161
- COPY --from=builder /app/packages/sandbox-container/dist ./dist
162
- COPY --from=builder /app/packages/sandbox-container/package.json ./package.json
129
+ # Copy bundled container server (all dependencies inlined, no node_modules needed)
130
+ COPY --from=builder /app/packages/sandbox-container/dist/index.js ./dist/
131
+ COPY --from=builder /app/packages/sandbox-container/dist/index.js.map ./dist/
163
132
 
164
- # Copy Python executor to runtime location
165
- COPY --from=builder /app/packages/sandbox-container/src/runtime/executors/python/ipython_executor.py ./dist/runtime/executors/python/
166
-
167
- # Copy production-only node_modules (excludes typescript, @types/*, etc.)
168
- # Includes: @repo/shared, zod, esbuild (runtime dependencies)
169
- COPY --from=prod-deps /app/node_modules ./node_modules
170
-
171
- # Copy workspace packages
172
- COPY --from=prod-deps /app/packages/shared/dist ./packages/shared/dist
173
- COPY --from=prod-deps /app/packages/shared/package.json ./packages/shared/package.json
174
-
175
- # Configure process pool sizes (minimum only)
176
- ENV PYTHON_POOL_MIN_SIZE=3
177
- ENV JAVASCRIPT_POOL_MIN_SIZE=3
178
- ENV TYPESCRIPT_POOL_MIN_SIZE=3
133
+ # Copy bundled JavaScript executor
134
+ COPY --from=builder /app/packages/sandbox-container/dist/runtime/executors/javascript/node_executor.js ./dist/runtime/executors/javascript/
135
+ COPY --from=builder /app/packages/sandbox-container/dist/runtime/executors/javascript/node_executor.js.map ./dist/runtime/executors/javascript/
179
136
 
180
137
  # Create clean workspace directory for user code
181
138
  RUN mkdir -p /workspace
@@ -187,5 +144,46 @@ EXPOSE 3000
187
144
  COPY packages/sandbox/startup.sh ./
188
145
  RUN chmod +x startup.sh
189
146
 
190
- # Use startup script
147
+ # ============================================================================
148
+ # Stage 5a: Default image - lean, no Python
149
+ # ============================================================================
150
+ FROM runtime-base AS default
151
+
152
+ # Disable Python pool (Python not available in this image)
153
+ ENV PYTHON_POOL_MIN_SIZE=0
154
+ ENV JAVASCRIPT_POOL_MIN_SIZE=3
155
+ ENV TYPESCRIPT_POOL_MIN_SIZE=3
156
+
157
+ CMD ["/container-server/startup.sh"]
158
+
159
+ # ============================================================================
160
+ # Stage 5b: Python image - full, with Python + data science packages
161
+ # ============================================================================
162
+ FROM runtime-base AS python
163
+
164
+ # Copy pre-built Python from python-builder stage
165
+ COPY --from=python-builder /usr/local/python /usr/local/python
166
+
167
+ # Create symlinks and update shared library cache
168
+ RUN ln -s /usr/local/python/bin/python3.11 /usr/local/bin/python3.11 && \
169
+ ln -s /usr/local/python/bin/python3 /usr/local/bin/python3 && \
170
+ ln -s /usr/local/python/bin/pip3 /usr/local/bin/pip3 && \
171
+ echo "/usr/local/python/lib" > /etc/ld.so.conf.d/python.conf && \
172
+ ldconfig
173
+
174
+ # Set Python 3.11 as default python3
175
+ RUN update-alternatives --install /usr/bin/python3 python3 /usr/local/bin/python3.11 1
176
+
177
+ # Install Python packages for data science and code interpreter
178
+ RUN --mount=type=cache,target=/root/.cache/pip \
179
+ pip3 install --no-cache-dir matplotlib numpy pandas ipython
180
+
181
+ # Copy Python executor
182
+ COPY --from=builder /app/packages/sandbox-container/src/runtime/executors/python/ipython_executor.py ./dist/runtime/executors/python/
183
+
184
+ # Enable all interpreter pools
185
+ ENV PYTHON_POOL_MIN_SIZE=3
186
+ ENV JAVASCRIPT_POOL_MIN_SIZE=3
187
+ ENV TYPESCRIPT_POOL_MIN_SIZE=3
188
+
191
189
  CMD ["/container-server/startup.sh"]
package/dist/index.d.ts CHANGED
@@ -193,6 +193,7 @@ declare const ErrorCode: {
193
193
  readonly INTERPRETER_NOT_READY: "INTERPRETER_NOT_READY";
194
194
  readonly CONTEXT_NOT_FOUND: "CONTEXT_NOT_FOUND";
195
195
  readonly CODE_EXECUTION_ERROR: "CODE_EXECUTION_ERROR";
196
+ readonly PYTHON_NOT_AVAILABLE: "PYTHON_NOT_AVAILABLE";
196
197
  readonly VALIDATION_FAILED: "VALIDATION_FAILED";
197
198
  readonly INVALID_JSON_RESPONSE: "INVALID_JSON_RESPONSE";
198
199
  readonly UNKNOWN_ERROR: "UNKNOWN_ERROR";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":["ExecuteRequest","Record","StartProcessRequest","ReadFileRequest","WriteFileRequest","DeleteFileRequest","RenameFileRequest","MoveFileRequest","MkdirRequest","FileExistsRequest","ExposePortRequest","GitCheckoutRequest","SessionCreateRequest","SessionDeleteRequest","ErrorCode"],"sources":["../../shared/dist/request-types.d.ts","../src/file-stream.ts","../src/interpreter.ts","../src/request-handler.ts","../src/sse-parser.ts","../../shared/dist/errors/codes.d.ts","../src/storage-mount/errors.ts"],"sourcesContent":["/**\n * Request types for API calls to the container\n * These types enforce the contract between the Durable Object client and container handlers\n *\n * IMPORTANT: These types must match the Zod schemas in:\n * @repo/sandbox-container/src/validation/schemas.ts\n */\n/**\n * Request to execute a command\n */\nexport interface ExecuteRequest {\n command: string;\n sessionId?: string;\n background?: boolean;\n timeoutMs?: number;\n env?: Record<string, string>;\n cwd?: string;\n}\n/**\n * Request to start a background process\n * Uses flat structure consistent with other endpoints\n */\nexport interface StartProcessRequest {\n command: string;\n sessionId?: string;\n processId?: string;\n timeoutMs?: number;\n env?: Record<string, string>;\n cwd?: string;\n encoding?: string;\n autoCleanup?: boolean;\n}\n/**\n * Request to read a file\n */\nexport interface ReadFileRequest {\n path: string;\n encoding?: string;\n sessionId?: string;\n}\n/**\n * Request to write a file\n */\nexport interface WriteFileRequest {\n path: string;\n content: string;\n encoding?: string;\n sessionId?: string;\n}\n/**\n * Request to delete a file\n */\nexport interface DeleteFileRequest {\n path: string;\n sessionId?: string;\n}\n/**\n * Request to rename a file\n */\nexport interface RenameFileRequest {\n oldPath: string;\n newPath: string;\n sessionId?: string;\n}\n/**\n * Request to move a file\n */\nexport interface MoveFileRequest {\n sourcePath: string;\n destinationPath: string;\n sessionId?: string;\n}\n/**\n * Request to create a directory\n */\nexport interface MkdirRequest {\n path: string;\n recursive?: boolean;\n sessionId?: string;\n}\n/**\n * Request to check if a file or directory exists\n */\nexport interface FileExistsRequest {\n path: string;\n sessionId?: string;\n}\n/**\n * Request to expose a port\n */\nexport interface ExposePortRequest {\n port: number;\n name?: string;\n}\n/**\n * Request to clone a Git repository\n */\nexport interface GitCheckoutRequest {\n repoUrl: string;\n branch?: string;\n targetDir?: string;\n sessionId?: string;\n}\n/**\n * Request to create a session\n */\nexport interface SessionCreateRequest {\n id?: string;\n name?: string;\n env?: Record<string, string>;\n cwd?: string;\n}\n/**\n * Request to delete a session\n */\nexport interface SessionDeleteRequest {\n sessionId: string;\n}\n//# sourceMappingURL=request-types.d.ts.map","/**\n * Centralized error code registry\n * Each code maps to a specific error type with consistent semantics\n */\nexport declare const ErrorCode: {\n readonly FILE_NOT_FOUND: \"FILE_NOT_FOUND\";\n readonly PERMISSION_DENIED: \"PERMISSION_DENIED\";\n readonly FILE_EXISTS: \"FILE_EXISTS\";\n readonly IS_DIRECTORY: \"IS_DIRECTORY\";\n readonly NOT_DIRECTORY: \"NOT_DIRECTORY\";\n readonly NO_SPACE: \"NO_SPACE\";\n readonly TOO_MANY_FILES: \"TOO_MANY_FILES\";\n readonly RESOURCE_BUSY: \"RESOURCE_BUSY\";\n readonly READ_ONLY: \"READ_ONLY\";\n readonly NAME_TOO_LONG: \"NAME_TOO_LONG\";\n readonly TOO_MANY_LINKS: \"TOO_MANY_LINKS\";\n readonly FILESYSTEM_ERROR: \"FILESYSTEM_ERROR\";\n readonly COMMAND_NOT_FOUND: \"COMMAND_NOT_FOUND\";\n readonly COMMAND_PERMISSION_DENIED: \"COMMAND_PERMISSION_DENIED\";\n readonly INVALID_COMMAND: \"INVALID_COMMAND\";\n readonly COMMAND_EXECUTION_ERROR: \"COMMAND_EXECUTION_ERROR\";\n readonly STREAM_START_ERROR: \"STREAM_START_ERROR\";\n readonly PROCESS_NOT_FOUND: \"PROCESS_NOT_FOUND\";\n readonly PROCESS_PERMISSION_DENIED: \"PROCESS_PERMISSION_DENIED\";\n readonly PROCESS_ERROR: \"PROCESS_ERROR\";\n readonly PORT_ALREADY_EXPOSED: \"PORT_ALREADY_EXPOSED\";\n readonly PORT_IN_USE: \"PORT_IN_USE\";\n readonly PORT_NOT_EXPOSED: \"PORT_NOT_EXPOSED\";\n readonly INVALID_PORT_NUMBER: \"INVALID_PORT_NUMBER\";\n readonly INVALID_PORT: \"INVALID_PORT\";\n readonly SERVICE_NOT_RESPONDING: \"SERVICE_NOT_RESPONDING\";\n readonly PORT_OPERATION_ERROR: \"PORT_OPERATION_ERROR\";\n readonly CUSTOM_DOMAIN_REQUIRED: \"CUSTOM_DOMAIN_REQUIRED\";\n readonly GIT_REPOSITORY_NOT_FOUND: \"GIT_REPOSITORY_NOT_FOUND\";\n readonly GIT_BRANCH_NOT_FOUND: \"GIT_BRANCH_NOT_FOUND\";\n readonly GIT_AUTH_FAILED: \"GIT_AUTH_FAILED\";\n readonly GIT_NETWORK_ERROR: \"GIT_NETWORK_ERROR\";\n readonly INVALID_GIT_URL: \"INVALID_GIT_URL\";\n readonly GIT_CLONE_FAILED: \"GIT_CLONE_FAILED\";\n readonly GIT_CHECKOUT_FAILED: \"GIT_CHECKOUT_FAILED\";\n readonly GIT_OPERATION_FAILED: \"GIT_OPERATION_FAILED\";\n readonly BUCKET_MOUNT_ERROR: \"BUCKET_MOUNT_ERROR\";\n readonly S3FS_MOUNT_ERROR: \"S3FS_MOUNT_ERROR\";\n readonly MISSING_CREDENTIALS: \"MISSING_CREDENTIALS\";\n readonly INVALID_MOUNT_CONFIG: \"INVALID_MOUNT_CONFIG\";\n readonly INTERPRETER_NOT_READY: \"INTERPRETER_NOT_READY\";\n readonly CONTEXT_NOT_FOUND: \"CONTEXT_NOT_FOUND\";\n readonly CODE_EXECUTION_ERROR: \"CODE_EXECUTION_ERROR\";\n readonly VALIDATION_FAILED: \"VALIDATION_FAILED\";\n readonly INVALID_JSON_RESPONSE: \"INVALID_JSON_RESPONSE\";\n readonly UNKNOWN_ERROR: \"UNKNOWN_ERROR\";\n readonly INTERNAL_ERROR: \"INTERNAL_ERROR\";\n};\nexport type ErrorCode = (typeof ErrorCode)[keyof typeof ErrorCode];\n//# sourceMappingURL=codes.d.ts.map"],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","names":["ExecuteRequest","Record","StartProcessRequest","ReadFileRequest","WriteFileRequest","DeleteFileRequest","RenameFileRequest","MoveFileRequest","MkdirRequest","FileExistsRequest","ExposePortRequest","GitCheckoutRequest","SessionCreateRequest","SessionDeleteRequest","ErrorCode"],"sources":["../../shared/dist/request-types.d.ts","../src/file-stream.ts","../src/interpreter.ts","../src/request-handler.ts","../src/sse-parser.ts","../../shared/dist/errors/codes.d.ts","../src/storage-mount/errors.ts"],"sourcesContent":["/**\n * Request types for API calls to the container\n * These types enforce the contract between the Durable Object client and container handlers\n *\n * IMPORTANT: These types must match the Zod schemas in:\n * @repo/sandbox-container/src/validation/schemas.ts\n */\n/**\n * Request to execute a command\n */\nexport interface ExecuteRequest {\n command: string;\n sessionId?: string;\n background?: boolean;\n timeoutMs?: number;\n env?: Record<string, string>;\n cwd?: string;\n}\n/**\n * Request to start a background process\n * Uses flat structure consistent with other endpoints\n */\nexport interface StartProcessRequest {\n command: string;\n sessionId?: string;\n processId?: string;\n timeoutMs?: number;\n env?: Record<string, string>;\n cwd?: string;\n encoding?: string;\n autoCleanup?: boolean;\n}\n/**\n * Request to read a file\n */\nexport interface ReadFileRequest {\n path: string;\n encoding?: string;\n sessionId?: string;\n}\n/**\n * Request to write a file\n */\nexport interface WriteFileRequest {\n path: string;\n content: string;\n encoding?: string;\n sessionId?: string;\n}\n/**\n * Request to delete a file\n */\nexport interface DeleteFileRequest {\n path: string;\n sessionId?: string;\n}\n/**\n * Request to rename a file\n */\nexport interface RenameFileRequest {\n oldPath: string;\n newPath: string;\n sessionId?: string;\n}\n/**\n * Request to move a file\n */\nexport interface MoveFileRequest {\n sourcePath: string;\n destinationPath: string;\n sessionId?: string;\n}\n/**\n * Request to create a directory\n */\nexport interface MkdirRequest {\n path: string;\n recursive?: boolean;\n sessionId?: string;\n}\n/**\n * Request to check if a file or directory exists\n */\nexport interface FileExistsRequest {\n path: string;\n sessionId?: string;\n}\n/**\n * Request to expose a port\n */\nexport interface ExposePortRequest {\n port: number;\n name?: string;\n}\n/**\n * Request to clone a Git repository\n */\nexport interface GitCheckoutRequest {\n repoUrl: string;\n branch?: string;\n targetDir?: string;\n sessionId?: string;\n}\n/**\n * Request to create a session\n */\nexport interface SessionCreateRequest {\n id?: string;\n name?: string;\n env?: Record<string, string>;\n cwd?: string;\n}\n/**\n * Request to delete a session\n */\nexport interface SessionDeleteRequest {\n sessionId: string;\n}\n//# sourceMappingURL=request-types.d.ts.map","/**\n * Centralized error code registry\n * Each code maps to a specific error type with consistent semantics\n */\nexport declare const ErrorCode: {\n readonly FILE_NOT_FOUND: \"FILE_NOT_FOUND\";\n readonly PERMISSION_DENIED: \"PERMISSION_DENIED\";\n readonly FILE_EXISTS: \"FILE_EXISTS\";\n readonly IS_DIRECTORY: \"IS_DIRECTORY\";\n readonly NOT_DIRECTORY: \"NOT_DIRECTORY\";\n readonly NO_SPACE: \"NO_SPACE\";\n readonly TOO_MANY_FILES: \"TOO_MANY_FILES\";\n readonly RESOURCE_BUSY: \"RESOURCE_BUSY\";\n readonly READ_ONLY: \"READ_ONLY\";\n readonly NAME_TOO_LONG: \"NAME_TOO_LONG\";\n readonly TOO_MANY_LINKS: \"TOO_MANY_LINKS\";\n readonly FILESYSTEM_ERROR: \"FILESYSTEM_ERROR\";\n readonly COMMAND_NOT_FOUND: \"COMMAND_NOT_FOUND\";\n readonly COMMAND_PERMISSION_DENIED: \"COMMAND_PERMISSION_DENIED\";\n readonly INVALID_COMMAND: \"INVALID_COMMAND\";\n readonly COMMAND_EXECUTION_ERROR: \"COMMAND_EXECUTION_ERROR\";\n readonly STREAM_START_ERROR: \"STREAM_START_ERROR\";\n readonly PROCESS_NOT_FOUND: \"PROCESS_NOT_FOUND\";\n readonly PROCESS_PERMISSION_DENIED: \"PROCESS_PERMISSION_DENIED\";\n readonly PROCESS_ERROR: \"PROCESS_ERROR\";\n readonly PORT_ALREADY_EXPOSED: \"PORT_ALREADY_EXPOSED\";\n readonly PORT_IN_USE: \"PORT_IN_USE\";\n readonly PORT_NOT_EXPOSED: \"PORT_NOT_EXPOSED\";\n readonly INVALID_PORT_NUMBER: \"INVALID_PORT_NUMBER\";\n readonly INVALID_PORT: \"INVALID_PORT\";\n readonly SERVICE_NOT_RESPONDING: \"SERVICE_NOT_RESPONDING\";\n readonly PORT_OPERATION_ERROR: \"PORT_OPERATION_ERROR\";\n readonly CUSTOM_DOMAIN_REQUIRED: \"CUSTOM_DOMAIN_REQUIRED\";\n readonly GIT_REPOSITORY_NOT_FOUND: \"GIT_REPOSITORY_NOT_FOUND\";\n readonly GIT_BRANCH_NOT_FOUND: \"GIT_BRANCH_NOT_FOUND\";\n readonly GIT_AUTH_FAILED: \"GIT_AUTH_FAILED\";\n readonly GIT_NETWORK_ERROR: \"GIT_NETWORK_ERROR\";\n readonly INVALID_GIT_URL: \"INVALID_GIT_URL\";\n readonly GIT_CLONE_FAILED: \"GIT_CLONE_FAILED\";\n readonly GIT_CHECKOUT_FAILED: \"GIT_CHECKOUT_FAILED\";\n readonly GIT_OPERATION_FAILED: \"GIT_OPERATION_FAILED\";\n readonly BUCKET_MOUNT_ERROR: \"BUCKET_MOUNT_ERROR\";\n readonly S3FS_MOUNT_ERROR: \"S3FS_MOUNT_ERROR\";\n readonly MISSING_CREDENTIALS: \"MISSING_CREDENTIALS\";\n readonly INVALID_MOUNT_CONFIG: \"INVALID_MOUNT_CONFIG\";\n readonly INTERPRETER_NOT_READY: \"INTERPRETER_NOT_READY\";\n readonly CONTEXT_NOT_FOUND: \"CONTEXT_NOT_FOUND\";\n readonly CODE_EXECUTION_ERROR: \"CODE_EXECUTION_ERROR\";\n readonly PYTHON_NOT_AVAILABLE: \"PYTHON_NOT_AVAILABLE\";\n readonly VALIDATION_FAILED: \"VALIDATION_FAILED\";\n readonly INVALID_JSON_RESPONSE: \"INVALID_JSON_RESPONSE\";\n readonly UNKNOWN_ERROR: \"UNKNOWN_ERROR\";\n readonly INTERNAL_ERROR: \"INTERNAL_ERROR\";\n};\nexport type ErrorCode = (typeof ErrorCode)[keyof typeof ErrorCode];\n//# sourceMappingURL=codes.d.ts.map"],"mappings":"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"}
package/dist/index.js CHANGED
@@ -50,6 +50,7 @@ const ErrorCode = {
50
50
  INTERPRETER_NOT_READY: "INTERPRETER_NOT_READY",
51
51
  CONTEXT_NOT_FOUND: "CONTEXT_NOT_FOUND",
52
52
  CODE_EXECUTION_ERROR: "CODE_EXECUTION_ERROR",
53
+ PYTHON_NOT_AVAILABLE: "PYTHON_NOT_AVAILABLE",
53
54
  VALIDATION_FAILED: "VALIDATION_FAILED",
54
55
  INVALID_JSON_RESPONSE: "INVALID_JSON_RESPONSE",
55
56
  UNKNOWN_ERROR: "UNKNOWN_ERROR",
@@ -93,6 +94,7 @@ const ERROR_STATUS_MAP = {
93
94
  [ErrorCode.RESOURCE_BUSY]: 409,
94
95
  [ErrorCode.SERVICE_NOT_RESPONDING]: 502,
95
96
  [ErrorCode.GIT_NETWORK_ERROR]: 502,
97
+ [ErrorCode.PYTHON_NOT_AVAILABLE]: 501,
96
98
  [ErrorCode.INTERPRETER_NOT_READY]: 503,
97
99
  [ErrorCode.NO_SPACE]: 500,
98
100
  [ErrorCode.TOO_MANY_FILES]: 500,
@@ -2061,7 +2063,7 @@ function resolveS3fsOptions(provider, userOptions) {
2061
2063
  * This file is auto-updated by .github/changeset-version.ts during releases
2062
2064
  * DO NOT EDIT MANUALLY - Changes will be overwritten on the next version bump
2063
2065
  */
2064
- const SDK_VERSION = "0.5.6";
2066
+ const SDK_VERSION = "0.6.0";
2065
2067
 
2066
2068
  //#endregion
2067
2069
  //#region src/sandbox.ts