@cloudflare/sandbox 0.4.12 → 0.4.15
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/.turbo/turbo-build.log +13 -47
- package/CHANGELOG.md +46 -16
- package/Dockerfile +78 -31
- package/README.md +9 -2
- package/dist/index.d.ts +1889 -9
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3144 -65
- package/dist/index.js.map +1 -1
- package/package.json +5 -5
- package/src/clients/base-client.ts +39 -24
- package/src/clients/command-client.ts +8 -8
- package/src/clients/file-client.ts +31 -26
- package/src/clients/git-client.ts +3 -4
- package/src/clients/index.ts +12 -16
- package/src/clients/interpreter-client.ts +51 -47
- package/src/clients/port-client.ts +10 -10
- package/src/clients/process-client.ts +11 -8
- package/src/clients/sandbox-client.ts +2 -4
- package/src/clients/types.ts +6 -2
- package/src/clients/utility-client.ts +10 -6
- package/src/errors/adapter.ts +90 -32
- package/src/errors/classes.ts +189 -64
- package/src/errors/index.ts +9 -5
- package/src/file-stream.ts +11 -6
- package/src/index.ts +22 -15
- package/src/interpreter.ts +50 -41
- package/src/request-handler.ts +24 -21
- package/src/sandbox.ts +339 -149
- package/src/security.ts +21 -6
- package/src/sse-parser.ts +4 -3
- package/src/version.ts +1 -1
- package/tests/base-client.test.ts +116 -80
- package/tests/command-client.test.ts +149 -112
- package/tests/file-client.test.ts +309 -197
- package/tests/file-stream.test.ts +24 -20
- package/tests/get-sandbox.test.ts +10 -10
- package/tests/git-client.test.ts +188 -101
- package/tests/port-client.test.ts +100 -108
- package/tests/process-client.test.ts +204 -179
- package/tests/request-handler.test.ts +117 -65
- package/tests/sandbox.test.ts +219 -67
- package/tests/sse-parser.test.ts +17 -16
- package/tests/utility-client.test.ts +79 -72
- package/tsdown.config.ts +12 -0
- package/vitest.config.ts +6 -6
- package/dist/chunk-BFVUNTP4.js +0 -104
- package/dist/chunk-BFVUNTP4.js.map +0 -1
- package/dist/chunk-EKSWCBCA.js +0 -86
- package/dist/chunk-EKSWCBCA.js.map +0 -1
- package/dist/chunk-JXZMAU2C.js +0 -559
- package/dist/chunk-JXZMAU2C.js.map +0 -1
- package/dist/chunk-UJ3TV4M6.js +0 -7
- package/dist/chunk-UJ3TV4M6.js.map +0 -1
- package/dist/chunk-YE265ASX.js +0 -2484
- package/dist/chunk-YE265ASX.js.map +0 -1
- package/dist/chunk-Z532A7QC.js +0 -78
- package/dist/chunk-Z532A7QC.js.map +0 -1
- package/dist/file-stream.d.ts +0 -43
- package/dist/file-stream.js +0 -9
- package/dist/file-stream.js.map +0 -1
- package/dist/interpreter.d.ts +0 -33
- package/dist/interpreter.js +0 -8
- package/dist/interpreter.js.map +0 -1
- package/dist/request-handler.d.ts +0 -18
- package/dist/request-handler.js +0 -13
- package/dist/request-handler.js.map +0 -1
- package/dist/sandbox-CLZWpfGc.d.ts +0 -613
- package/dist/sandbox.d.ts +0 -4
- package/dist/sandbox.js +0 -13
- package/dist/sandbox.js.map +0 -1
- package/dist/security.d.ts +0 -31
- package/dist/security.js +0 -13
- package/dist/security.js.map +0 -1
- package/dist/sse-parser.d.ts +0 -28
- package/dist/sse-parser.js +0 -11
- package/dist/sse-parser.js.map +0 -1
- package/dist/version.d.ts +0 -8
- package/dist/version.js +0 -7
- package/dist/version.js.map +0 -1
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,49 +1,15 @@
|
|
|
1
1
|
|
|
2
|
-
> @cloudflare/sandbox@0.4.
|
|
3
|
-
> rm -rf dist &&
|
|
2
|
+
> @cloudflare/sandbox@0.4.15 build
|
|
3
|
+
> rm -rf dist && tsdown --config tsdown.config.ts
|
|
4
4
|
|
|
5
|
-
[
|
|
6
|
-
[
|
|
7
|
-
[
|
|
8
|
-
[
|
|
9
|
-
[
|
|
10
|
-
[
|
|
11
|
-
[
|
|
12
|
-
[
|
|
13
|
-
[
|
|
14
|
-
[
|
|
15
|
-
[
|
|
16
|
-
[32mESM[39m [1mdist/chunk-YE265ASX.js [22m[32m76.11 KB[39m
|
|
17
|
-
[32mESM[39m [1mdist/chunk-JXZMAU2C.js [22m[32m14.43 KB[39m
|
|
18
|
-
[32mESM[39m [1mdist/security.js [22m[32m233.00 B[39m
|
|
19
|
-
[32mESM[39m [1mdist/chunk-Z532A7QC.js [22m[32m1.75 KB[39m
|
|
20
|
-
[32mESM[39m [1mdist/sse-parser.js [22m[32m233.00 B[39m
|
|
21
|
-
[32mESM[39m [1mdist/chunk-EKSWCBCA.js [22m[32m2.28 KB[39m
|
|
22
|
-
[32mESM[39m [1mdist/version.js [22m[32m114.00 B[39m
|
|
23
|
-
[32mESM[39m [1mdist/chunk-UJ3TV4M6.js [22m[32m115.00 B[39m
|
|
24
|
-
[32mESM[39m [1mdist/file-stream.js.map [22m[32m71.00 B[39m
|
|
25
|
-
[32mESM[39m [1mdist/chunk-BFVUNTP4.js.map [22m[32m6.71 KB[39m
|
|
26
|
-
[32mESM[39m [1mdist/index.js.map [22m[32m71.00 B[39m
|
|
27
|
-
[32mESM[39m [1mdist/request-handler.js.map [22m[32m71.00 B[39m
|
|
28
|
-
[32mESM[39m [1mdist/interpreter.js.map [22m[32m71.00 B[39m
|
|
29
|
-
[32mESM[39m [1mdist/sandbox.js.map [22m[32m71.00 B[39m
|
|
30
|
-
[32mESM[39m [1mdist/chunk-JXZMAU2C.js.map [22m[32m33.44 KB[39m
|
|
31
|
-
[32mESM[39m [1mdist/security.js.map [22m[32m71.00 B[39m
|
|
32
|
-
[32mESM[39m [1mdist/chunk-Z532A7QC.js.map [22m[32m3.96 KB[39m
|
|
33
|
-
[32mESM[39m [1mdist/sse-parser.js.map [22m[32m71.00 B[39m
|
|
34
|
-
[32mESM[39m [1mdist/chunk-EKSWCBCA.js.map [22m[32m5.61 KB[39m
|
|
35
|
-
[32mESM[39m [1mdist/chunk-YE265ASX.js.map [22m[32m156.35 KB[39m
|
|
36
|
-
[32mESM[39m [1mdist/version.js.map [22m[32m71.00 B[39m
|
|
37
|
-
[32mESM[39m [1mdist/chunk-UJ3TV4M6.js.map [22m[32m391.00 B[39m
|
|
38
|
-
[32mESM[39m ⚡️ Build success in 107ms
|
|
39
|
-
[34mDTS[39m Build start
|
|
40
|
-
[32mDTS[39m ⚡️ Build success in 2679ms
|
|
41
|
-
[32mDTS[39m [1mdist/index.d.ts [22m[32m1.46 KB[39m
|
|
42
|
-
[32mDTS[39m [1mdist/file-stream.d.ts [22m[32m1.34 KB[39m
|
|
43
|
-
[32mDTS[39m [1mdist/interpreter.d.ts [22m[32m1007.00 B[39m
|
|
44
|
-
[32mDTS[39m [1mdist/request-handler.d.ts [22m[32m565.00 B[39m
|
|
45
|
-
[32mDTS[39m [1mdist/security.d.ts [22m[32m1.05 KB[39m
|
|
46
|
-
[32mDTS[39m [1mdist/sse-parser.d.ts [22m[32m1.18 KB[39m
|
|
47
|
-
[32mDTS[39m [1mdist/version.d.ts [22m[32m303.00 B[39m
|
|
48
|
-
[32mDTS[39m [1mdist/sandbox.d.ts [22m[32m156.00 B[39m
|
|
49
|
-
[32mDTS[39m [1mdist/sandbox-CLZWpfGc.d.ts [22m[32m21.79 KB[39m
|
|
5
|
+
[34mℹ[39m tsdown [2mv0.15.11[22m powered by rolldown [2mv1.0.0-beta.45[22m
|
|
6
|
+
[34mℹ[39m Using tsdown config: [4m/home/runner/work/sandbox-sdk/sandbox-sdk/packages/sandbox/tsdown.config.ts[24m
|
|
7
|
+
[34mℹ[39m entry: [34msrc/index.ts[39m
|
|
8
|
+
[34mℹ[39m tsconfig: [34mtsconfig.json[39m
|
|
9
|
+
[34mℹ[39m Build start
|
|
10
|
+
[34mℹ[39m [2mdist/[22m[1mindex.js[22m [2m 95.61 kB[22m [2m│ gzip: 21.55 kB[22m
|
|
11
|
+
[34mℹ[39m [2mdist/[22mindex.js.map [2m202.56 kB[22m [2m│ gzip: 44.33 kB[22m
|
|
12
|
+
[34mℹ[39m [2mdist/[22mindex.d.ts.map [2m 72.31 kB[22m [2m│ gzip: 19.90 kB[22m
|
|
13
|
+
[34mℹ[39m [2mdist/[22m[32m[1mindex.d.ts[22m[39m [2m 53.99 kB[22m [2m│ gzip: 11.70 kB[22m
|
|
14
|
+
[34mℹ[39m 4 files, total: 424.47 kB
|
|
15
|
+
[32m✔[39m Build complete in [32m1968ms[39m
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,39 @@
|
|
|
1
1
|
# @cloudflare/sandbox
|
|
2
2
|
|
|
3
|
+
## 0.4.15
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [#185](https://github.com/cloudflare/sandbox-sdk/pull/185) [`7897cdd`](https://github.com/cloudflare/sandbox-sdk/commit/7897cddefc366bbd640ea138b34a520a0b2ddf8c) Thanks [@ghostwriternr](https://github.com/ghostwriternr)! - Fix foreground commands blocking on background processes
|
|
8
|
+
|
|
9
|
+
- [#183](https://github.com/cloudflare/sandbox-sdk/pull/183) [`ff2fa91`](https://github.com/cloudflare/sandbox-sdk/commit/ff2fa91479357ef88cfb22418f88acb257462faa) Thanks [@whoiskatrin](https://github.com/whoiskatrin)! - update python to 3.11.14
|
|
10
|
+
|
|
11
|
+
## 0.4.14
|
|
12
|
+
|
|
13
|
+
### Patch Changes
|
|
14
|
+
|
|
15
|
+
- [#172](https://github.com/cloudflare/sandbox-sdk/pull/172) [`1bf3576`](https://github.com/cloudflare/sandbox-sdk/commit/1bf35768b02532c77df6f30a2f2eb08cb2b12115) Thanks [@threepointone](https://github.com/threepointone)! - Update dependencies
|
|
16
|
+
|
|
17
|
+
- [#176](https://github.com/cloudflare/sandbox-sdk/pull/176) [`7edbfa9`](https://github.com/cloudflare/sandbox-sdk/commit/7edbfa906668d75f540527f50b52483dc787192c) Thanks [@ghostwriternr](https://github.com/ghostwriternr)! - Add cache mounts to Dockerfile for faster builds
|
|
18
|
+
|
|
19
|
+
Adds cache mounts for npm, apt, and pip package managers in the Dockerfile. This speeds up Docker image builds when dependencies change, particularly beneficial for users building from source.
|
|
20
|
+
|
|
21
|
+
- [#172](https://github.com/cloudflare/sandbox-sdk/pull/172) [`1bf3576`](https://github.com/cloudflare/sandbox-sdk/commit/1bf35768b02532c77df6f30a2f2eb08cb2b12115) Thanks [@threepointone](https://github.com/threepointone)! - Fix type generation
|
|
22
|
+
|
|
23
|
+
We inline types from `@repo/shared` so that it includes the types we reexport. Fixes #165
|
|
24
|
+
|
|
25
|
+
- [#175](https://github.com/cloudflare/sandbox-sdk/pull/175) [`77cb937`](https://github.com/cloudflare/sandbox-sdk/commit/77cb93762a619523758f769a10509e665ca819fe) Thanks [@ghostwriternr](https://github.com/ghostwriternr)! - Move .connect to .wsConnect within DO stub
|
|
26
|
+
|
|
27
|
+
## 0.4.13
|
|
28
|
+
|
|
29
|
+
### Patch Changes
|
|
30
|
+
|
|
31
|
+
- [#168](https://github.com/cloudflare/sandbox-sdk/pull/168) [`6b08f02`](https://github.com/cloudflare/sandbox-sdk/commit/6b08f02c061aef07cc98188abef2973ac92365f8) Thanks [@threepointone](https://github.com/threepointone)! - Fix type generation
|
|
32
|
+
|
|
33
|
+
We inline types from `@repo/shared` so that it includes the types we reexport. Fixes #165
|
|
34
|
+
|
|
35
|
+
- [#162](https://github.com/cloudflare/sandbox-sdk/pull/162) [`c4db459`](https://github.com/cloudflare/sandbox-sdk/commit/c4db459389a7b86048a03410d67d4dd7bf4a6085) Thanks [@whoiskatrin](https://github.com/whoiskatrin)! - Add WebSocket support via connect() method for routing client WebSocket connections directly to container services
|
|
36
|
+
|
|
3
37
|
## 0.4.12
|
|
4
38
|
|
|
5
39
|
### Patch Changes
|
|
@@ -27,7 +61,6 @@
|
|
|
27
61
|
This adds a new `exists()` method to the SDK that checks whether a file or directory exists at a given path. The method returns a boolean indicating existence, similar to Python's `os.path.exists()` and JavaScript's `fs.existsSync()`.
|
|
28
62
|
|
|
29
63
|
The implementation is end-to-end:
|
|
30
|
-
|
|
31
64
|
- New `FileExistsResult` and `FileExistsRequest` types in shared package
|
|
32
65
|
- Handler endpoint at `/api/exists` in container layer
|
|
33
66
|
- Client method in `FileClient` and `Sandbox` classes
|
|
@@ -126,50 +159,47 @@
|
|
|
126
159
|
Implements PID namespace isolation to protect control plane processes (Jupyter, Bun) from sandboxed code. Commands executed via `exec()` now run in isolated namespaces that cannot see or interact with system processes.
|
|
127
160
|
|
|
128
161
|
**Key security improvements:**
|
|
129
|
-
|
|
130
162
|
- Control plane processes are hidden from sandboxed commands
|
|
131
163
|
- Platform secrets in `/proc/1/environ` are inaccessible
|
|
132
164
|
- Ports 8888 (Jupyter) and 3000 (Bun) are protected from hijacking
|
|
133
165
|
|
|
134
166
|
**Breaking changes:**
|
|
135
|
-
|
|
136
167
|
1. **Removed `sessionId` parameter**: The `sessionId` parameter has been removed from all methods (`exec()`, `execStream()`, `startProcess()`, etc.). Each sandbox now maintains its own persistent session automatically.
|
|
137
168
|
|
|
138
169
|
```javascript
|
|
139
170
|
// Before: manual session management
|
|
140
|
-
await sandbox.exec(
|
|
171
|
+
await sandbox.exec('cd /app', { sessionId: 'my-session' });
|
|
141
172
|
|
|
142
173
|
// After: automatic session per sandbox
|
|
143
|
-
await sandbox.exec(
|
|
174
|
+
await sandbox.exec('cd /app');
|
|
144
175
|
```
|
|
145
176
|
|
|
146
177
|
2. **Commands now maintain state**: Commands within the same sandbox now share state (working directory, environment variables, background processes). Previously each command was stateless.
|
|
147
178
|
|
|
148
179
|
```javascript
|
|
149
180
|
// Before: each exec was independent
|
|
150
|
-
await sandbox.exec(
|
|
151
|
-
await sandbox.exec(
|
|
181
|
+
await sandbox.exec('cd /app');
|
|
182
|
+
await sandbox.exec('pwd'); // Output: /workspace
|
|
152
183
|
|
|
153
184
|
// After: state persists in session
|
|
154
|
-
await sandbox.exec(
|
|
155
|
-
await sandbox.exec(
|
|
185
|
+
await sandbox.exec('cd /app');
|
|
186
|
+
await sandbox.exec('pwd'); // Output: /app
|
|
156
187
|
```
|
|
157
188
|
|
|
158
189
|
**Migration guide:**
|
|
159
|
-
|
|
160
190
|
- Remove `sessionId` from all method calls - each sandbox maintains its own session
|
|
161
191
|
- If you need isolated execution contexts within the same sandbox, use `sandbox.createSession()`:
|
|
162
192
|
```javascript
|
|
163
193
|
// Create independent sessions with different environments
|
|
164
194
|
const buildSession = await sandbox.createSession({
|
|
165
|
-
name:
|
|
166
|
-
env: { NODE_ENV:
|
|
167
|
-
cwd:
|
|
195
|
+
name: 'build',
|
|
196
|
+
env: { NODE_ENV: 'production' },
|
|
197
|
+
cwd: '/build'
|
|
168
198
|
});
|
|
169
199
|
const testSession = await sandbox.createSession({
|
|
170
|
-
name:
|
|
171
|
-
env: { NODE_ENV:
|
|
172
|
-
cwd:
|
|
200
|
+
name: 'test',
|
|
201
|
+
env: { NODE_ENV: 'test' },
|
|
202
|
+
cwd: '/test'
|
|
173
203
|
});
|
|
174
204
|
```
|
|
175
205
|
- Environment variables set in one command persist to the next
|
package/Dockerfile
CHANGED
|
@@ -29,8 +29,9 @@ WORKDIR /app
|
|
|
29
29
|
COPY --from=pruner /app/out/json/ .
|
|
30
30
|
COPY --from=pruner /app/out/package-lock.json ./package-lock.json
|
|
31
31
|
|
|
32
|
-
# Install ALL dependencies
|
|
33
|
-
RUN npm
|
|
32
|
+
# Install ALL dependencies with cache mount for npm packages
|
|
33
|
+
RUN --mount=type=cache,target=/root/.npm \
|
|
34
|
+
npm ci
|
|
34
35
|
|
|
35
36
|
# Copy pruned source code
|
|
36
37
|
COPY --from=pruner /app/out/full/ .
|
|
@@ -53,10 +54,53 @@ COPY --from=builder /app/packages ./packages
|
|
|
53
54
|
COPY --from=builder /app/tooling ./tooling
|
|
54
55
|
|
|
55
56
|
# Install ONLY production dependencies (excludes typescript, @types/*, etc.)
|
|
56
|
-
RUN npm
|
|
57
|
+
RUN --mount=type=cache,target=/root/.npm \
|
|
58
|
+
npm ci --production
|
|
57
59
|
|
|
58
60
|
# ============================================================================
|
|
59
|
-
# Stage 4:
|
|
61
|
+
# Stage 4: Download pre-built Python 3.11.14
|
|
62
|
+
# ============================================================================
|
|
63
|
+
FROM ubuntu:22.04 AS python-builder
|
|
64
|
+
|
|
65
|
+
# Prevent interactive prompts during package installation
|
|
66
|
+
ENV DEBIAN_FRONTEND=noninteractive
|
|
67
|
+
|
|
68
|
+
# Accept architecture from Docker BuildKit (for multi-arch builds)
|
|
69
|
+
ARG TARGETARCH
|
|
70
|
+
|
|
71
|
+
# Install minimal dependencies for downloading
|
|
72
|
+
RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
|
|
73
|
+
--mount=type=cache,target=/var/lib/apt,sharing=locked \
|
|
74
|
+
rm -f /etc/apt/apt.conf.d/docker-clean && \
|
|
75
|
+
echo 'Binary::apt::APT::Keep-Downloaded-Packages "true";' >/etc/apt/apt.conf.d/keep-cache && \
|
|
76
|
+
apt-get update && apt-get install -y --no-install-recommends \
|
|
77
|
+
wget ca-certificates
|
|
78
|
+
|
|
79
|
+
# Download and extract pre-built Python 3.11.14 from python-build-standalone
|
|
80
|
+
# Using PGO+LTO optimized builds for better performance
|
|
81
|
+
# Supports multi-arch: amd64 (x86_64) and arm64 (aarch64)
|
|
82
|
+
RUN --mount=type=cache,target=/tmp/python-cache \
|
|
83
|
+
# Map Docker TARGETARCH to python-build-standalone arch naming
|
|
84
|
+
if [ "$TARGETARCH" = "amd64" ]; then \
|
|
85
|
+
PYTHON_ARCH="x86_64-unknown-linux-gnu"; \
|
|
86
|
+
EXPECTED_SHA256="edd8d11aa538953d12822fab418359a692fd1ee4ca2675579fbf0fa31e3688f1"; \
|
|
87
|
+
elif [ "$TARGETARCH" = "arm64" ]; then \
|
|
88
|
+
PYTHON_ARCH="aarch64-unknown-linux-gnu"; \
|
|
89
|
+
EXPECTED_SHA256="08141d31f95d86a23f23e4c741b726de0055f12f83200d1d4867b4e8e6e967c5"; \
|
|
90
|
+
else \
|
|
91
|
+
echo "Unsupported architecture: $TARGETARCH" && exit 1; \
|
|
92
|
+
fi && \
|
|
93
|
+
cd /tmp/python-cache && \
|
|
94
|
+
wget -nc https://github.com/indygreg/python-build-standalone/releases/download/20251028/cpython-3.11.14+20251028-${PYTHON_ARCH}-install_only.tar.gz && \
|
|
95
|
+
# Verify SHA256 checksum for security
|
|
96
|
+
echo "${EXPECTED_SHA256} cpython-3.11.14+20251028-${PYTHON_ARCH}-install_only.tar.gz" | sha256sum -c - && \
|
|
97
|
+
cd /tmp && \
|
|
98
|
+
tar -xzf /tmp/python-cache/cpython-3.11.14+20251028-${PYTHON_ARCH}-install_only.tar.gz && \
|
|
99
|
+
mv python /usr/local/ && \
|
|
100
|
+
rm -rf /tmp/cpython-*
|
|
101
|
+
|
|
102
|
+
# ============================================================================
|
|
103
|
+
# Stage 5: Runtime - Ubuntu 22.04 with only runtime dependencies
|
|
60
104
|
# ============================================================================
|
|
61
105
|
FROM ubuntu:22.04 AS runtime
|
|
62
106
|
|
|
@@ -69,40 +113,43 @@ ENV DEBIAN_FRONTEND=noninteractive
|
|
|
69
113
|
# Set the sandbox version as an environment variable for version checking
|
|
70
114
|
ENV SANDBOX_VERSION=${SANDBOX_VERSION}
|
|
71
115
|
|
|
72
|
-
# Install
|
|
73
|
-
RUN apt
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
116
|
+
# Install runtime packages and Python runtime libraries
|
|
117
|
+
RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
|
|
118
|
+
--mount=type=cache,target=/var/lib/apt,sharing=locked \
|
|
119
|
+
rm -f /etc/apt/apt.conf.d/docker-clean && \
|
|
120
|
+
echo 'Binary::apt::APT::Keep-Downloaded-Packages "true";' >/etc/apt/apt.conf.d/keep-cache && \
|
|
121
|
+
apt-get update && apt-get install -y --no-install-recommends \
|
|
122
|
+
ca-certificates curl wget procps git unzip zip jq file \
|
|
123
|
+
libssl3 zlib1g libbz2-1.0 libreadline8 libsqlite3-0 \
|
|
124
|
+
libncursesw6 libtinfo6 libxml2 libxmlsec1 libffi8 liblzma5 libtk8.6 && \
|
|
125
|
+
update-ca-certificates
|
|
126
|
+
|
|
127
|
+
# Copy pre-built Python from python-builder stage
|
|
128
|
+
COPY --from=python-builder /usr/local/python /usr/local/python
|
|
129
|
+
|
|
130
|
+
# Create symlinks and update shared library cache
|
|
131
|
+
RUN ln -s /usr/local/python/bin/python3.11 /usr/local/bin/python3.11 && \
|
|
132
|
+
ln -s /usr/local/python/bin/python3 /usr/local/bin/python3 && \
|
|
133
|
+
ln -s /usr/local/python/bin/pip3 /usr/local/bin/pip3 && \
|
|
134
|
+
echo "/usr/local/python/lib" > /etc/ld.so.conf.d/python.conf && \
|
|
135
|
+
ldconfig
|
|
87
136
|
|
|
88
137
|
# Set Python 3.11 as default python3
|
|
89
|
-
RUN update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.11 1
|
|
138
|
+
RUN update-alternatives --install /usr/bin/python3 python3 /usr/local/bin/python3.11 1
|
|
90
139
|
|
|
91
|
-
# Install
|
|
92
|
-
RUN
|
|
93
|
-
|
|
94
|
-
|
|
140
|
+
# Install Python packages
|
|
141
|
+
RUN --mount=type=cache,target=/root/.cache/pip \
|
|
142
|
+
pip3 install --no-cache-dir matplotlib numpy pandas ipython
|
|
143
|
+
|
|
144
|
+
# Install Node.js 20 LTS from official Node image
|
|
145
|
+
COPY --from=node:20-slim /usr/local/bin/node /usr/local/bin/node
|
|
146
|
+
COPY --from=node:20-slim /usr/local/lib/node_modules /usr/local/lib/node_modules
|
|
147
|
+
RUN ln -s /usr/local/lib/node_modules/npm/bin/npm-cli.js /usr/local/bin/npm && \
|
|
148
|
+
ln -s /usr/local/lib/node_modules/npm/bin/npx-cli.js /usr/local/bin/npx
|
|
95
149
|
|
|
96
150
|
# Install Bun runtime from official image
|
|
97
151
|
COPY --from=oven/bun:1 /usr/local/bin/bun /usr/local/bin/bun
|
|
98
152
|
|
|
99
|
-
# Install essential Python packages for code execution
|
|
100
|
-
RUN pip3 install --no-cache-dir \
|
|
101
|
-
matplotlib \
|
|
102
|
-
numpy \
|
|
103
|
-
pandas \
|
|
104
|
-
ipython
|
|
105
|
-
|
|
106
153
|
# Set up runtime container server directory
|
|
107
154
|
WORKDIR /container-server
|
|
108
155
|
|
package/README.md
CHANGED
|
@@ -116,9 +116,17 @@ export default {
|
|
|
116
116
|
- **Preview URLs** - Expose services with public URLs
|
|
117
117
|
- **Git Integration** - Clone repositories directly
|
|
118
118
|
|
|
119
|
+
## Contributing
|
|
120
|
+
|
|
121
|
+
We welcome contributions from the community! See [CONTRIBUTING.md](./CONTRIBUTING.md) for guidelines on:
|
|
122
|
+
|
|
123
|
+
- Setting up your development environment
|
|
124
|
+
- Creating pull requests
|
|
125
|
+
- Code style and testing requirements
|
|
126
|
+
|
|
119
127
|
## Development
|
|
120
128
|
|
|
121
|
-
This repository contains the SDK source code.
|
|
129
|
+
This repository contains the SDK source code. Quick start:
|
|
122
130
|
|
|
123
131
|
```bash
|
|
124
132
|
# Clone the repo
|
|
@@ -144,7 +152,6 @@ See the [examples directory](./examples) for complete working examples:
|
|
|
144
152
|
|
|
145
153
|
- [Minimal](./examples/minimal) - Basic sandbox setup
|
|
146
154
|
- [Code Interpreter](./examples/code-interpreter) - Use sandbox as an interpreter tool with gpt-oss
|
|
147
|
-
- [Complete](./examples/basic) - Huge example integrated with every sandbox feature
|
|
148
155
|
|
|
149
156
|
## Status
|
|
150
157
|
|