@cloudflare/sandbox 0.0.0-d951819 → 0.0.0-da2cfb8

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 (104) hide show
  1. package/CHANGELOG.md +28 -6
  2. package/Dockerfile +91 -57
  3. package/README.md +88 -825
  4. package/dist/chunk-BFVUNTP4.js +104 -0
  5. package/dist/chunk-BFVUNTP4.js.map +1 -0
  6. package/dist/chunk-EKSWCBCA.js +86 -0
  7. package/dist/chunk-EKSWCBCA.js.map +1 -0
  8. package/dist/chunk-JXZMAU2C.js +559 -0
  9. package/dist/chunk-JXZMAU2C.js.map +1 -0
  10. package/dist/chunk-PG2V52M2.js +2420 -0
  11. package/dist/chunk-PG2V52M2.js.map +1 -0
  12. package/dist/chunk-QDBKO3CL.js +7 -0
  13. package/dist/chunk-QDBKO3CL.js.map +1 -0
  14. package/dist/chunk-Z532A7QC.js +78 -0
  15. package/dist/chunk-Z532A7QC.js.map +1 -0
  16. package/dist/file-stream.d.ts +43 -0
  17. package/dist/file-stream.js +9 -0
  18. package/dist/file-stream.js.map +1 -0
  19. package/dist/index.d.ts +9 -0
  20. package/dist/index.js +67 -0
  21. package/dist/index.js.map +1 -0
  22. package/dist/interpreter.d.ts +33 -0
  23. package/dist/interpreter.js +8 -0
  24. package/dist/interpreter.js.map +1 -0
  25. package/dist/request-handler.d.ts +18 -0
  26. package/dist/request-handler.js +13 -0
  27. package/dist/request-handler.js.map +1 -0
  28. package/dist/sandbox-DMlNr93l.d.ts +596 -0
  29. package/dist/sandbox.d.ts +4 -0
  30. package/dist/sandbox.js +13 -0
  31. package/dist/sandbox.js.map +1 -0
  32. package/dist/security.d.ts +31 -0
  33. package/dist/security.js +13 -0
  34. package/dist/security.js.map +1 -0
  35. package/dist/sse-parser.d.ts +28 -0
  36. package/dist/sse-parser.js +11 -0
  37. package/dist/sse-parser.js.map +1 -0
  38. package/dist/version.d.ts +8 -0
  39. package/dist/version.js +7 -0
  40. package/dist/version.js.map +1 -0
  41. package/package.json +12 -4
  42. package/src/clients/base-client.ts +280 -0
  43. package/src/clients/command-client.ts +115 -0
  44. package/src/clients/file-client.ts +269 -0
  45. package/src/clients/git-client.ts +92 -0
  46. package/src/clients/index.ts +64 -0
  47. package/src/{interpreter-client.ts → clients/interpreter-client.ts} +148 -171
  48. package/src/clients/port-client.ts +105 -0
  49. package/src/clients/process-client.ts +177 -0
  50. package/src/clients/sandbox-client.ts +41 -0
  51. package/src/clients/types.ts +84 -0
  52. package/src/clients/utility-client.ts +119 -0
  53. package/src/errors/adapter.ts +180 -0
  54. package/src/errors/classes.ts +469 -0
  55. package/src/errors/index.ts +105 -0
  56. package/src/file-stream.ts +119 -117
  57. package/src/index.ts +81 -69
  58. package/src/interpreter.ts +17 -8
  59. package/src/request-handler.ts +69 -43
  60. package/src/sandbox.ts +778 -537
  61. package/src/security.ts +14 -23
  62. package/src/sse-parser.ts +4 -8
  63. package/src/version.ts +6 -0
  64. package/startup.sh +3 -0
  65. package/tests/base-client.test.ts +328 -0
  66. package/tests/command-client.test.ts +407 -0
  67. package/tests/file-client.test.ts +643 -0
  68. package/tests/file-stream.test.ts +306 -0
  69. package/tests/get-sandbox.test.ts +110 -0
  70. package/tests/git-client.test.ts +328 -0
  71. package/tests/port-client.test.ts +301 -0
  72. package/tests/process-client.test.ts +658 -0
  73. package/tests/sandbox.test.ts +465 -0
  74. package/tests/sse-parser.test.ts +290 -0
  75. package/tests/utility-client.test.ts +332 -0
  76. package/tests/version.test.ts +16 -0
  77. package/tests/wrangler.jsonc +35 -0
  78. package/tsconfig.json +9 -1
  79. package/vitest.config.ts +31 -0
  80. package/container_src/bun.lock +0 -76
  81. package/container_src/circuit-breaker.ts +0 -121
  82. package/container_src/control-process.ts +0 -784
  83. package/container_src/handler/exec.ts +0 -185
  84. package/container_src/handler/file.ts +0 -457
  85. package/container_src/handler/git.ts +0 -130
  86. package/container_src/handler/ports.ts +0 -314
  87. package/container_src/handler/process.ts +0 -568
  88. package/container_src/handler/session.ts +0 -92
  89. package/container_src/index.ts +0 -601
  90. package/container_src/interpreter-service.ts +0 -276
  91. package/container_src/isolation.ts +0 -1213
  92. package/container_src/mime-processor.ts +0 -255
  93. package/container_src/package.json +0 -18
  94. package/container_src/runtime/executors/javascript/node_executor.ts +0 -123
  95. package/container_src/runtime/executors/python/ipython_executor.py +0 -338
  96. package/container_src/runtime/executors/typescript/ts_executor.ts +0 -138
  97. package/container_src/runtime/process-pool.ts +0 -464
  98. package/container_src/shell-escape.ts +0 -42
  99. package/container_src/startup.sh +0 -11
  100. package/container_src/types.ts +0 -131
  101. package/src/client.ts +0 -1048
  102. package/src/errors.ts +0 -219
  103. package/src/interpreter-types.ts +0 -390
  104. package/src/types.ts +0 -571
package/CHANGELOG.md CHANGED
@@ -1,22 +1,44 @@
1
1
  # @cloudflare/sandbox
2
2
 
3
- ## 0.3.6
3
+ ## 0.4.5
4
4
 
5
5
  ### Patch Changes
6
6
 
7
- - [#90](https://github.com/cloudflare/sandbox-sdk/pull/90) [`66cc85b`](https://github.com/cloudflare/sandbox-sdk/commit/66cc85b679b466b3ffb1f00fbd697670fc186f06) Thanks [@eastlondoner](https://github.com/eastlondoner)! - set bun idletimeout
7
+ - [#127](https://github.com/cloudflare/sandbox-sdk/pull/127) [`e79ac80`](https://github.com/cloudflare/sandbox-sdk/commit/e79ac80bc855a3ec527d44cc14585794b23cb129) Thanks [@whoiskatrin](https://github.com/whoiskatrin)! - configurable sleepAfter
8
8
 
9
- ## 0.3.5
9
+ ## 0.4.4
10
10
 
11
11
  ### Patch Changes
12
12
 
13
- - [#88](https://github.com/cloudflare/sandbox-sdk/pull/88) [`46eb4e6`](https://github.com/cloudflare/sandbox-sdk/commit/46eb4e6b6c671b682fc74f83563ccf5f316011cb) Thanks [@ghostwriternr](https://github.com/ghostwriternr)! - Add binary file support with automatic MIME detection and streaming
13
+ - [#125](https://github.com/cloudflare/sandbox-sdk/pull/125) [`fddccfd`](https://github.com/cloudflare/sandbox-sdk/commit/fddccfdce8204ce2aa7dadc0ad9fb2acbdeaec51) Thanks [@whoiskatrin](https://github.com/whoiskatrin)! - add docker image to pkg workflow
14
14
 
15
- ## 0.3.4
15
+ ## 0.4.3
16
16
 
17
17
  ### Patch Changes
18
18
 
19
- - [#86](https://github.com/cloudflare/sandbox-sdk/pull/86) [`feafd32`](https://github.com/cloudflare/sandbox-sdk/commit/feafd32a51f50dfaf4994bddcbfb56d46cada622) Thanks [@ghostwriternr](https://github.com/ghostwriternr)! - Fix session reuse to reuse existing healthy session
19
+ - [#114](https://github.com/cloudflare/sandbox-sdk/pull/114) [`8c1f440`](https://github.com/cloudflare/sandbox-sdk/commit/8c1f440ad6fd89a5c69f9ca9d055ad9b183dd1c3) Thanks [@ghostwriternr](https://github.com/ghostwriternr)! - Debloat base docker image (2.63GB 1.03GB)
20
+
21
+ ## 0.4.2
22
+
23
+ ### Patch Changes
24
+
25
+ - [`e53d7e7`](https://github.com/cloudflare/sandbox-sdk/commit/e53d7e7ce185f79bdd899029bb532e9651ae7ba5) Thanks [@threepointone](https://github.com/threepointone)! - fix build by inlining repo/shared
26
+
27
+ ## 0.4.1
28
+
29
+ ### Patch Changes
30
+
31
+ - [#111](https://github.com/cloudflare/sandbox-sdk/pull/111) [`1b5496b`](https://github.com/cloudflare/sandbox-sdk/commit/1b5496bfceaee53c31911b409476ea87bebffe4c) Thanks [@threepointone](https://github.com/threepointone)! - trigger a release
32
+
33
+ ## 0.4.0
34
+
35
+ ### Minor Changes
36
+
37
+ - [#95](https://github.com/cloudflare/sandbox-sdk/pull/95) [`7aee736`](https://github.com/cloudflare/sandbox-sdk/commit/7aee736bf07a4bf9020e2109bdaaa70214d52a01) Thanks [@ghostwriternr](https://github.com/ghostwriternr)! - Rewrite SDK with cleaner design patterns and tests. Remove the unnecessary isolation cruft and fix foundational issues with streaming, sessions, validations and error handling. Cover the SDK with unit & e2e tests.
38
+
39
+ ### Patch Changes
40
+
41
+ - [#106](https://github.com/cloudflare/sandbox-sdk/pull/106) [`da947cd`](https://github.com/cloudflare/sandbox-sdk/commit/da947cd9543fc99831eefb1e8741fc905cb8fa42) Thanks [@jahands](https://github.com/jahands)! - fix examples failing to deploy and prevent committing node_modules
20
42
 
21
43
  ## 0.3.3
22
44
 
package/Dockerfile CHANGED
@@ -1,43 +1,88 @@
1
- # Sandbox base image with development tools, Python, Node.js, and Bun
2
- FROM oven/bun:latest AS bun-source
3
- FROM ubuntu:22.04
1
+ # Sandbox container image with full development environment
2
+ # Multi-stage build optimized for Turborepo monorepo
3
+
4
+ # ============================================================================
5
+ # Stage 1: Prune monorepo to only include necessary packages
6
+ # ============================================================================
7
+ FROM node:20-alpine AS pruner
8
+
9
+ WORKDIR /app
10
+
11
+ # Install Turborepo globally
12
+ RUN npm install -g turbo
13
+
14
+ # Copy entire monorepo
15
+ COPY . .
16
+
17
+ # Prune to only @repo/sandbox-container and its dependencies (@repo/shared)
18
+ # The --docker flag generates out/json and out/full directories
19
+ RUN turbo prune @repo/sandbox-container --docker
20
+
21
+ # ============================================================================
22
+ # Stage 2: Install dependencies and build packages
23
+ # ============================================================================
24
+ FROM node:20-alpine AS builder
25
+
26
+ WORKDIR /app
27
+
28
+ # Copy pruned lockfile and package.json files (for Docker layer caching)
29
+ COPY --from=pruner /app/out/json/ .
30
+ COPY --from=pruner /app/out/package-lock.json ./package-lock.json
31
+
32
+ # Install ALL dependencies (including devDependencies for build)
33
+ RUN npm ci
34
+
35
+ # Copy pruned source code
36
+ COPY --from=pruner /app/out/full/ .
37
+
38
+ # Build all packages (Turborepo handles dependency order automatically)
39
+ # This builds @repo/shared first, then @repo/sandbox-container
40
+ RUN npx turbo run build
41
+
42
+ # ============================================================================
43
+ # Stage 3: Install production-only dependencies
44
+ # ============================================================================
45
+ FROM node:20-alpine AS prod-deps
46
+
47
+ WORKDIR /app
48
+
49
+ # Copy package files from builder
50
+ COPY --from=builder /app/package.json ./package.json
51
+ COPY --from=builder /app/package-lock.json ./package-lock.json
52
+ COPY --from=builder /app/packages ./packages
53
+ COPY --from=builder /app/tooling ./tooling
54
+
55
+ # Install ONLY production dependencies (excludes typescript, @types/*, etc.)
56
+ RUN npm ci --production
57
+
58
+ # ============================================================================
59
+ # Stage 4: Runtime - Ubuntu 22.04 with only runtime dependencies
60
+ # ============================================================================
61
+ FROM ubuntu:22.04 AS runtime
62
+
63
+ # Accept version as build argument (passed from npm_package_version)
64
+ ARG SANDBOX_VERSION=unknown
4
65
 
5
66
  # Prevent interactive prompts during package installation
6
67
  ENV DEBIAN_FRONTEND=noninteractive
7
68
 
8
- # Install essential system packages and development tools
9
- RUN apt-get update && apt-get install -y \
10
- # Basic utilities
69
+ # Set the sandbox version as an environment variable for version checking
70
+ ENV SANDBOX_VERSION=${SANDBOX_VERSION}
71
+
72
+ # Install essential runtime packages
73
+ RUN apt-get update && apt-get install -y --no-install-recommends \
11
74
  curl \
12
75
  wget \
76
+ ca-certificates \
77
+ python3.11 \
78
+ python3-pip \
79
+ python3.11-venv \
80
+ procps \
13
81
  git \
14
82
  unzip \
15
83
  zip \
16
- file \
17
- # Process management
18
- procps \
19
- htop \
20
- # Build tools
21
- build-essential \
22
- pkg-config \
23
- # Network tools
24
- net-tools \
25
- iputils-ping \
26
- dnsutils \
27
- # Text processing
28
84
  jq \
29
- vim \
30
- nano \
31
- # Python dependencies
32
- python3.11 \
33
- python3.11-dev \
34
- python3-pip \
35
- python3.11-venv \
36
- # Other useful tools
37
- ca-certificates \
38
- gnupg \
39
- lsb-release \
40
- strace \
85
+ file \
41
86
  && rm -rf /var/lib/apt/lists/*
42
87
 
43
88
  # Set Python 3.11 as default python3
@@ -48,15 +93,8 @@ RUN curl -fsSL https://deb.nodesource.com/setup_20.x | bash - \
48
93
  && apt-get install -y nodejs \
49
94
  && rm -rf /var/lib/apt/lists/*
50
95
 
51
- # Install Bun from official image (avoids architecture compatibility issues)
52
- COPY --from=bun-source /usr/local/bin/bun /usr/local/bin/bun
53
- COPY --from=bun-source /usr/local/bin/bunx /usr/local/bin/bunx
54
-
55
- # Install development tools globally
56
- RUN npm install -g \
57
- wrangler \
58
- vite \
59
- opencode-ai
96
+ # Install Bun runtime from official image
97
+ COPY --from=oven/bun:1 /usr/local/bin/bun /usr/local/bin/bun
60
98
 
61
99
  # Install essential Python packages for code execution
62
100
  RUN pip3 install --no-cache-dir \
@@ -65,25 +103,23 @@ RUN pip3 install --no-cache-dir \
65
103
  pandas \
66
104
  ipython
67
105
 
68
- # Set up container server directory
106
+ # Set up runtime container server directory
69
107
  WORKDIR /container-server
70
108
 
71
- # Verify installations
72
- RUN python3 --version && \
73
- node --version && \
74
- npm --version && \
75
- bun --version
109
+ # Copy built sandbox-container package
110
+ COPY --from=builder /app/packages/sandbox-container/dist ./dist
111
+ COPY --from=builder /app/packages/sandbox-container/package.json ./package.json
76
112
 
77
- # Copy container source files to server directory
78
- COPY container_src/package.json container_src/bun.lock ./
79
- RUN bun install --frozen-lockfile
113
+ # Copy Python executor to runtime location
114
+ COPY --from=builder /app/packages/sandbox-container/src/runtime/executors/python/ipython_executor.py ./dist/runtime/executors/python/
80
115
 
81
- COPY container_src/ ./
116
+ # Copy production-only node_modules (excludes typescript, @types/*, etc.)
117
+ # Includes: @repo/shared, zod, esbuild (runtime dependencies)
118
+ COPY --from=prod-deps /app/node_modules ./node_modules
82
119
 
83
- # Compile TypeScript files using the locally installed TypeScript
84
- RUN npx tsc control-process.ts --outDir . --module commonjs --target es2020 --esModuleInterop --skipLibCheck
85
- RUN cd runtime/executors/javascript && npx tsc node_executor.ts --module commonjs --target es2020 --esModuleInterop --skipLibCheck
86
- RUN cd runtime/executors/typescript && npx tsc ts_executor.ts --module commonjs --target es2020 --esModuleInterop --skipLibCheck
120
+ # Copy workspace packages
121
+ COPY --from=prod-deps /app/packages/shared/dist ./packages/shared/dist
122
+ COPY --from=prod-deps /app/packages/shared/package.json ./packages/shared/package.json
87
123
 
88
124
  # Configure process pool sizes (can be overridden at runtime)
89
125
  ENV PYTHON_POOL_MIN_SIZE=3
@@ -94,15 +130,13 @@ ENV TYPESCRIPT_POOL_MIN_SIZE=3
94
130
  ENV TYPESCRIPT_POOL_MAX_SIZE=10
95
131
 
96
132
  # Create clean workspace directory for user code
97
- # Architecture:
98
- # /container-server/ - SDK infrastructure (server, executors, dependencies)
99
- # /workspace/ - User's clean workspace for their code
100
133
  RUN mkdir -p /workspace
101
134
 
102
135
  # Expose the application port (3000 for control)
103
136
  EXPOSE 3000
104
137
 
105
- # Make startup script executable
138
+ # Copy and make startup script executable
139
+ COPY packages/sandbox/startup.sh ./
106
140
  RUN chmod +x startup.sh
107
141
 
108
142
  # Use startup script