Compare commits

...

9 commits

Author SHA1 Message Date
Nathan Flurry
7ab3226204 fix: add Linux ARM64 support to install script and docs 2026-02-04 22:51:42 -08:00
Nathan Flurry
79a4c4ec16 fix: use Alpine-based Rust image for native musl ARM64 builds 2026-02-04 14:16:27 -08:00
Nathan Flurry
8b718ad28f fix: use native compilation for ARM64 builds (not cross-compile) 2026-02-04 14:12:11 -08:00
Nathan Flurry
689e13c79b fix: remove g++-multilib from ARM64 Dockerfile (not available on ARM) 2026-02-04 14:08:04 -08:00
Nathan Flurry
f3a8c8235a fix: override React types to v18 to fix lucide-react compatibility 2026-02-04 14:03:16 -08:00
Nathan Flurry
9e748d1bd9 chore(release): update version to 0.1.6-rc.2 2026-02-04 14:00:02 -08:00
Nathan Flurry
2f2c33abc9 chore: add linux-arm64 to pnpm-lock 2026-02-04 13:57:04 -08:00
Nathan Flurry
778c7b3064 fix: linux-arm64 cross-compilation and docs 2026-02-04 13:56:52 -08:00
Topper Bowers
5233334d11 linux-arm64 support 2026-02-03 22:27:02 +01:00
25 changed files with 222 additions and 60 deletions

View file

@ -96,6 +96,11 @@ jobs:
target: x86_64-unknown-linux-musl target: x86_64-unknown-linux-musl
binary_ext: "" binary_ext: ""
arch: x86_64 arch: x86_64
- platform: linux
runner: depot-ubuntu-24.04-arm-8
target: aarch64-unknown-linux-musl
binary_ext: ""
arch: aarch64
- platform: windows - platform: windows
runner: depot-ubuntu-24.04-8 runner: depot-ubuntu-24.04-8
target: x86_64-pc-windows-gnu target: x86_64-pc-windows-gnu

View file

@ -3,7 +3,7 @@ resolver = "2"
members = ["server/packages/*"] members = ["server/packages/*"]
[workspace.package] [workspace.package]
version = "0.1.6-rc.1" version = "0.1.6-rc.2"
edition = "2021" edition = "2021"
authors = [ "Rivet Gaming, LLC <developer@rivet.gg>" ] authors = [ "Rivet Gaming, LLC <developer@rivet.gg>" ]
license = "Apache-2.0" license = "Apache-2.0"
@ -12,12 +12,12 @@ description = "Universal API for automatic coding agents in sandboxes. Supprots
[workspace.dependencies] [workspace.dependencies]
# Internal crates # Internal crates
sandbox-agent = { version = "0.1.6-rc.1", path = "server/packages/sandbox-agent" } sandbox-agent = { version = "0.1.6-rc.2", path = "server/packages/sandbox-agent" }
sandbox-agent-error = { version = "0.1.6-rc.1", path = "server/packages/error" } sandbox-agent-error = { version = "0.1.6-rc.2", path = "server/packages/error" }
sandbox-agent-agent-management = { version = "0.1.6-rc.1", path = "server/packages/agent-management" } sandbox-agent-agent-management = { version = "0.1.6-rc.2", path = "server/packages/agent-management" }
sandbox-agent-agent-credentials = { version = "0.1.6-rc.1", path = "server/packages/agent-credentials" } sandbox-agent-agent-credentials = { version = "0.1.6-rc.2", path = "server/packages/agent-credentials" }
sandbox-agent-universal-agent-schema = { version = "0.1.6-rc.1", path = "server/packages/universal-agent-schema" } sandbox-agent-universal-agent-schema = { version = "0.1.6-rc.2", path = "server/packages/universal-agent-schema" }
sandbox-agent-extracted-agent-schemas = { version = "0.1.6-rc.1", path = "server/packages/extracted-agent-schemas" } sandbox-agent-extracted-agent-schemas = { version = "0.1.6-rc.2", path = "server/packages/extracted-agent-schemas" }
# Serialization # Serialization
serde = { version = "1.0", features = ["derive"] } serde = { version = "1.0", features = ["derive"] }

View file

@ -84,7 +84,7 @@ npm install sandbox-agent
```bash ```bash
bun add sandbox-agent bun add sandbox-agent
# Optional: allow Bun to run postinstall scripts for native binaries (required for SandboxAgent.start()). # Optional: allow Bun to run postinstall scripts for native binaries (required for SandboxAgent.start()).
bun pm trust @sandbox-agent/cli-linux-x64 @sandbox-agent/cli-darwin-arm64 @sandbox-agent/cli-darwin-x64 @sandbox-agent/cli-win32-x64 bun pm trust @sandbox-agent/cli-linux-x64 @sandbox-agent/cli-linux-arm64 @sandbox-agent/cli-darwin-arm64 @sandbox-agent/cli-darwin-x64 @sandbox-agent/cli-win32-x64
``` ```
**Setup** **Setup**
@ -167,7 +167,7 @@ npm install -g @sandbox-agent/cli
```bash ```bash
# Allow Bun to run postinstall scripts for native binaries. # Allow Bun to run postinstall scripts for native binaries.
bun add -g @sandbox-agent/cli bun add -g @sandbox-agent/cli
bun pm -g trust @sandbox-agent/cli-linux-x64 @sandbox-agent/cli-darwin-arm64 @sandbox-agent/cli-darwin-x64 @sandbox-agent/cli-win32-x64 bun pm -g trust @sandbox-agent/cli-linux-x64 @sandbox-agent/cli-linux-arm64 @sandbox-agent/cli-darwin-arm64 @sandbox-agent/cli-darwin-x64 @sandbox-agent/cli-win32-x64
``` ```
Create a session and send a message: Create a session and send a message:

View file

@ -18,6 +18,12 @@ case $TARGET in
TARGET_STAGE="x86_64-builder" TARGET_STAGE="x86_64-builder"
BINARY="sandbox-agent-$TARGET" BINARY="sandbox-agent-$TARGET"
;; ;;
aarch64-unknown-linux-musl)
echo "Building for Linux aarch64 musl"
DOCKERFILE="linux-aarch64.Dockerfile"
TARGET_STAGE="aarch64-builder"
BINARY="sandbox-agent-$TARGET"
;;
x86_64-pc-windows-gnu) x86_64-pc-windows-gnu)
echo "Building for Windows x86_64" echo "Building for Windows x86_64"
DOCKERFILE="windows.Dockerfile" DOCKERFILE="windows.Dockerfile"

View file

@ -0,0 +1,103 @@
# syntax=docker/dockerfile:1.10.0
# Build inspector frontend
FROM node:22-alpine AS inspector-build
WORKDIR /app
RUN npm install -g pnpm
# Copy package files for workspaces
COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./
COPY frontend/packages/inspector/package.json ./frontend/packages/inspector/
COPY sdks/cli-shared/package.json ./sdks/cli-shared/
COPY sdks/typescript/package.json ./sdks/typescript/
# Install dependencies
RUN pnpm install --filter @sandbox-agent/inspector...
# Copy SDK source (with pre-generated types from docs/openapi.json)
COPY docs/openapi.json ./docs/
COPY sdks/cli-shared ./sdks/cli-shared
COPY sdks/typescript ./sdks/typescript
# Build cli-shared and SDK (just tsup, skip generate since types are pre-generated)
RUN cd sdks/cli-shared && pnpm exec tsup
RUN cd sdks/typescript && SKIP_OPENAPI_GEN=1 pnpm exec tsup
# Copy inspector source and build
COPY frontend/packages/inspector ./frontend/packages/inspector
RUN cd frontend/packages/inspector && pnpm exec vite build
# Use Alpine-based Rust image which has native musl support
FROM rust:1.88.0-alpine AS base
# Install dependencies for native ARM64 musl build
RUN apk add --no-cache \
musl-dev \
clang \
llvm \
openssl-dev \
openssl-libs-static \
pkgconfig \
ca-certificates \
git \
curl \
build-base \
linux-headers \
perl \
make
# Install musl target for Rust (should be native on Alpine)
RUN rustup target add aarch64-unknown-linux-musl
# Set environment variables for native musl build
ENV LIBCLANG_PATH=/usr/lib \
CC=gcc \
CXX=g++ \
AR=ar \
CARGO_INCREMENTAL=0 \
RUSTFLAGS="-C target-feature=+crt-static" \
CARGO_NET_GIT_FETCH_WITH_CLI=true
# Set working directory
WORKDIR /build
# Build for aarch64
FROM base AS aarch64-builder
# Accept version as build arg
ARG SANDBOX_AGENT_VERSION
ENV SANDBOX_AGENT_VERSION=${SANDBOX_AGENT_VERSION}
# Build OpenSSL with musl (native on Alpine ARM64)
ENV SSL_VER=1.1.1w
RUN wget https://www.openssl.org/source/openssl-$SSL_VER.tar.gz \
&& tar -xzf openssl-$SSL_VER.tar.gz \
&& cd openssl-$SSL_VER \
&& ./Configure no-shared no-async --prefix=/musl --openssldir=/musl/ssl linux-aarch64 \
&& make -j$(nproc) \
&& make install_sw \
&& cd .. \
&& rm -rf openssl-$SSL_VER*
# Configure OpenSSL env vars for the build
ENV OPENSSL_DIR=/musl \
OPENSSL_INCLUDE_DIR=/musl/include \
OPENSSL_LIB_DIR=/musl/lib \
OPENSSL_STATIC=1
# Copy the source code
COPY . .
# Copy pre-built inspector frontend
COPY --from=inspector-build /app/frontend/packages/inspector/dist ./frontend/packages/inspector/dist
# Build for Linux with musl (static binary) - aarch64
RUN --mount=type=cache,target=/usr/local/cargo/registry \
--mount=type=cache,target=/usr/local/cargo/git \
--mount=type=cache,target=/build/target \
cargo build -p sandbox-agent --release --target aarch64-unknown-linux-musl && \
mkdir -p /artifacts && \
cp target/aarch64-unknown-linux-musl/release/sandbox-agent /artifacts/sandbox-agent-aarch64-unknown-linux-musl
# Default command to show help
CMD ["ls", "-la", "/artifacts"]

View file

@ -75,9 +75,21 @@ await client.createSession("my-session", {
To build a static binary for use in minimal containers: To build a static binary for use in minimal containers:
```bash <Tabs>
docker build -f docker/release/linux-x86_64.Dockerfile -t sandbox-agent-build . <Tab title="x86_64">
docker run --rm -v "$PWD/artifacts:/artifacts" sandbox-agent-build ```bash
``` docker build -f docker/release/linux-x86_64.Dockerfile -t sandbox-agent-build .
docker run --rm -v "$PWD/artifacts:/artifacts" sandbox-agent-build
```
The binary will be at `./artifacts/sandbox-agent-x86_64-unknown-linux-musl`. The binary will be at `./artifacts/sandbox-agent-x86_64-unknown-linux-musl`.
</Tab>
<Tab title="ARM64 (aarch64)">
```bash
docker build -f docker/release/linux-aarch64.Dockerfile -t sandbox-agent-build .
docker run --rm -v "$PWD/artifacts:/artifacts" sandbox-agent-build
```
The binary will be at `./artifacts/sandbox-agent-aarch64-unknown-linux-musl`.
</Tab>
</Tabs>

View file

@ -10,7 +10,7 @@
"license": { "license": {
"name": "Apache-2.0" "name": "Apache-2.0"
}, },
"version": "0.1.6-rc.1" "version": "0.1.6-rc.2"
}, },
"servers": [ "servers": [
{ {

View file

@ -120,7 +120,7 @@ icon: "rocket"
```bash ```bash
bun add -g @sandbox-agent/cli bun add -g @sandbox-agent/cli
# Allow Bun to run postinstall scripts for native binaries (required for SandboxAgent.start()). # Allow Bun to run postinstall scripts for native binaries (required for SandboxAgent.start()).
bun pm -g trust @sandbox-agent/cli-linux-x64 @sandbox-agent/cli-darwin-arm64 @sandbox-agent/cli-darwin-x64 @sandbox-agent/cli-win32-x64 bun pm -g trust @sandbox-agent/cli-linux-x64 @sandbox-agent/cli-linux-arm64 @sandbox-agent/cli-darwin-arm64 @sandbox-agent/cli-darwin-x64 @sandbox-agent/cli-win32-x64
sandbox-agent server --no-token --host 0.0.0.0 --port 2468 sandbox-agent server --no-token --host 0.0.0.0 --port 2468
``` ```
@ -146,7 +146,7 @@ icon: "rocket"
```bash ```bash
bun add sandbox-agent bun add sandbox-agent
# Allow Bun to run postinstall scripts for native binaries (required for SandboxAgent.start()). # Allow Bun to run postinstall scripts for native binaries (required for SandboxAgent.start()).
bun pm trust @sandbox-agent/cli-linux-x64 @sandbox-agent/cli-darwin-arm64 @sandbox-agent/cli-darwin-x64 @sandbox-agent/cli-win32-x64 bun pm trust @sandbox-agent/cli-linux-x64 @sandbox-agent/cli-linux-arm64 @sandbox-agent/cli-darwin-arm64 @sandbox-agent/cli-darwin-x64 @sandbox-agent/cli-win32-x64
``` ```
```typescript ```typescript

View file

@ -19,7 +19,7 @@ client for sessions, events, and agent operations.
```bash ```bash
bun add sandbox-agent bun add sandbox-agent
# Allow Bun to run postinstall scripts for native binaries (required for SandboxAgent.start()). # Allow Bun to run postinstall scripts for native binaries (required for SandboxAgent.start()).
bun pm trust @sandbox-agent/cli-linux-x64 @sandbox-agent/cli-darwin-arm64 @sandbox-agent/cli-darwin-x64 @sandbox-agent/cli-win32-x64 bun pm trust @sandbox-agent/cli-linux-x64 @sandbox-agent/cli-linux-arm64 @sandbox-agent/cli-darwin-arm64 @sandbox-agent/cli-darwin-x64 @sandbox-agent/cli-win32-x64
``` ```
</Tab> </Tab>
</Tabs> </Tabs>

View file

@ -17,6 +17,7 @@ release-build target="x86_64-unknown-linux-musl":
[group('release')] [group('release')]
release-build-all: release-build-all:
./docker/release/build.sh x86_64-unknown-linux-musl ./docker/release/build.sh x86_64-unknown-linux-musl
./docker/release/build.sh aarch64-unknown-linux-musl
./docker/release/build.sh x86_64-pc-windows-gnu ./docker/release/build.sh x86_64-pc-windows-gnu
./docker/release/build.sh x86_64-apple-darwin ./docker/release/build.sh x86_64-apple-darwin
./docker/release/build.sh aarch64-apple-darwin ./docker/release/build.sh aarch64-apple-darwin

View file

@ -12,5 +12,11 @@
"devDependencies": { "devDependencies": {
"turbo": "^2.4.0", "turbo": "^2.4.0",
"vitest": "^3.0.0" "vitest": "^3.0.0"
},
"pnpm": {
"overrides": {
"@types/react": "^18.3.3",
"@types/react-dom": "^18.3.0"
}
} }
} }

55
pnpm-lock.yaml generated
View file

@ -4,6 +4,10 @@ settings:
autoInstallPeers: true autoInstallPeers: true
excludeLinksFromLockfile: false excludeLinksFromLockfile: false
overrides:
'@types/react': ^18.3.3
'@types/react-dom': ^18.3.0
importers: importers:
.: .:
@ -37,11 +41,11 @@ importers:
specifier: latest specifier: latest
version: 25.2.0 version: 25.2.0
'@types/react': '@types/react':
specifier: ^19.1.0 specifier: ^18.3.3
version: 19.2.10 version: 18.3.27
'@types/react-dom': '@types/react-dom':
specifier: ^19.1.0 specifier: ^18.3.0
version: 19.2.3(@types/react@19.2.10) version: 18.3.7(@types/react@18.3.27)
'@vitejs/plugin-react': '@vitejs/plugin-react':
specifier: ^4.5.0 specifier: ^4.5.0
version: 4.7.0(vite@6.4.1(@types/node@25.2.0)(jiti@1.21.7)(tsx@4.21.0)(yaml@2.8.2)) version: 4.7.0(vite@6.4.1(@types/node@25.2.0)(jiti@1.21.7)(tsx@4.21.0)(yaml@2.8.2))
@ -200,7 +204,7 @@ importers:
dependencies: dependencies:
'@astrojs/react': '@astrojs/react':
specifier: ^4.2.0 specifier: ^4.2.0
version: 4.4.2(@types/node@25.2.0)(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(jiti@1.21.7)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(tsx@4.21.0)(yaml@2.8.2) version: 4.4.2(@types/node@25.2.0)(@types/react-dom@18.3.7(@types/react@18.3.27))(@types/react@18.3.27)(jiti@1.21.7)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(tsx@4.21.0)(yaml@2.8.2)
'@astrojs/tailwind': '@astrojs/tailwind':
specifier: ^6.0.0 specifier: ^6.0.0
version: 6.0.2(astro@5.16.15(@types/node@25.2.0)(jiti@1.21.7)(rollup@4.56.0)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2))(tailwindcss@3.4.19(tsx@4.21.0)(yaml@2.8.2)) version: 6.0.2(astro@5.16.15(@types/node@25.2.0)(jiti@1.21.7)(rollup@4.56.0)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2))(tailwindcss@3.4.19(tsx@4.21.0)(yaml@2.8.2))
@ -224,11 +228,11 @@ importers:
version: 3.4.19(tsx@4.21.0)(yaml@2.8.2) version: 3.4.19(tsx@4.21.0)(yaml@2.8.2)
devDependencies: devDependencies:
'@types/react': '@types/react':
specifier: ^19.0.0 specifier: ^18.3.3
version: 19.2.10 version: 18.3.27
'@types/react-dom': '@types/react-dom':
specifier: ^19.0.0 specifier: ^18.3.0
version: 19.2.3(@types/react@19.2.10) version: 18.3.7(@types/react@18.3.27)
typescript: typescript:
specifier: ^5.7.0 specifier: ^5.7.0
version: 5.9.3 version: 5.9.3
@ -342,6 +346,9 @@ importers:
'@sandbox-agent/cli-darwin-x64': '@sandbox-agent/cli-darwin-x64':
specifier: workspace:* specifier: workspace:*
version: link:platforms/darwin-x64 version: link:platforms/darwin-x64
'@sandbox-agent/cli-linux-arm64':
specifier: workspace:*
version: link:platforms/linux-arm64
'@sandbox-agent/cli-linux-x64': '@sandbox-agent/cli-linux-x64':
specifier: workspace:* specifier: workspace:*
version: link:platforms/linux-x64 version: link:platforms/linux-x64
@ -369,6 +376,8 @@ importers:
sdks/cli/platforms/darwin-x64: {} sdks/cli/platforms/darwin-x64: {}
sdks/cli/platforms/linux-arm64: {}
sdks/cli/platforms/linux-x64: {} sdks/cli/platforms/linux-x64: {}
sdks/cli/platforms/win32-x64: {} sdks/cli/platforms/win32-x64: {}
@ -423,8 +432,8 @@ packages:
resolution: {integrity: sha512-1tl95bpGfuaDMDn8O3x/5Dxii1HPvzjvpL2YTuqOOrQehs60I2DKiDgh1jrKc7G8lv+LQT5H15V6QONQ+9waeQ==} resolution: {integrity: sha512-1tl95bpGfuaDMDn8O3x/5Dxii1HPvzjvpL2YTuqOOrQehs60I2DKiDgh1jrKc7G8lv+LQT5H15V6QONQ+9waeQ==}
engines: {node: 18.20.8 || ^20.3.0 || >=22.0.0} engines: {node: 18.20.8 || ^20.3.0 || >=22.0.0}
peerDependencies: peerDependencies:
'@types/react': ^17.0.50 || ^18.0.21 || ^19.0.0 '@types/react': ^18.3.3
'@types/react-dom': ^17.0.17 || ^18.0.6 || ^19.0.0 '@types/react-dom': ^18.3.0
react: ^17.0.2 || ^18.0.0 || ^19.0.0 react: ^17.0.2 || ^18.0.0 || ^19.0.0
react-dom: ^17.0.2 || ^18.0.0 || ^19.0.0 react-dom: ^17.0.2 || ^18.0.0 || ^19.0.0
@ -2203,19 +2212,11 @@ packages:
'@types/react-dom@18.3.7': '@types/react-dom@18.3.7':
resolution: {integrity: sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==} resolution: {integrity: sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==}
peerDependencies: peerDependencies:
'@types/react': ^18.0.0 '@types/react': ^18.3.3
'@types/react-dom@19.2.3':
resolution: {integrity: sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==}
peerDependencies:
'@types/react': ^19.2.0
'@types/react@18.3.27': '@types/react@18.3.27':
resolution: {integrity: sha512-cisd7gxkzjBKU2GgdYrTdtQx1SORymWyaAFhaxQPK9bYO9ot3Y5OikQRvY0VYQtvwjeQnizCINJAenh/V7MK2w==} resolution: {integrity: sha512-cisd7gxkzjBKU2GgdYrTdtQx1SORymWyaAFhaxQPK9bYO9ot3Y5OikQRvY0VYQtvwjeQnizCINJAenh/V7MK2w==}
'@types/react@19.2.10':
resolution: {integrity: sha512-WPigyYuGhgZ/cTPRXB2EwUw+XvsRA3GqHlsP4qteqrnnjDrApbS7MxcGr/hke5iUoeB7E/gQtrs9I37zAJ0Vjw==}
'@types/semver@7.7.1': '@types/semver@7.7.1':
resolution: {integrity: sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA==} resolution: {integrity: sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA==}
@ -4556,10 +4557,10 @@ snapshots:
dependencies: dependencies:
prismjs: 1.30.0 prismjs: 1.30.0
'@astrojs/react@4.4.2(@types/node@25.2.0)(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(jiti@1.21.7)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(tsx@4.21.0)(yaml@2.8.2)': '@astrojs/react@4.4.2(@types/node@25.2.0)(@types/react-dom@18.3.7(@types/react@18.3.27))(@types/react@18.3.27)(jiti@1.21.7)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(tsx@4.21.0)(yaml@2.8.2)':
dependencies: dependencies:
'@types/react': 19.2.10 '@types/react': 18.3.27
'@types/react-dom': 19.2.3(@types/react@19.2.10) '@types/react-dom': 18.3.7(@types/react@18.3.27)
'@vitejs/plugin-react': 4.7.0(vite@6.4.1(@types/node@25.2.0)(jiti@1.21.7)(tsx@4.21.0)(yaml@2.8.2)) '@vitejs/plugin-react': 4.7.0(vite@6.4.1(@types/node@25.2.0)(jiti@1.21.7)(tsx@4.21.0)(yaml@2.8.2))
react: 19.2.4 react: 19.2.4
react-dom: 19.2.4(react@19.2.4) react-dom: 19.2.4(react@19.2.4)
@ -6475,19 +6476,11 @@ snapshots:
dependencies: dependencies:
'@types/react': 18.3.27 '@types/react': 18.3.27
'@types/react-dom@19.2.3(@types/react@19.2.10)':
dependencies:
'@types/react': 19.2.10
'@types/react@18.3.27': '@types/react@18.3.27':
dependencies: dependencies:
'@types/prop-types': 15.7.15 '@types/prop-types': 15.7.15
csstype: 3.2.3 csstype: 3.2.3
'@types/react@19.2.10':
dependencies:
csstype: 3.2.3
'@types/semver@7.7.1': {} '@types/semver@7.7.1': {}
'@types/ssh2@1.15.5': '@types/ssh2@1.15.5':

View file

@ -18,6 +18,7 @@ const CRATES = [
const CLI_PACKAGES = [ const CLI_PACKAGES = [
"@sandbox-agent/cli", "@sandbox-agent/cli",
"@sandbox-agent/cli-linux-x64", "@sandbox-agent/cli-linux-x64",
"@sandbox-agent/cli-linux-arm64",
"@sandbox-agent/cli-win32-x64", "@sandbox-agent/cli-win32-x64",
"@sandbox-agent/cli-darwin-x64", "@sandbox-agent/cli-darwin-x64",
"@sandbox-agent/cli-darwin-arm64", "@sandbox-agent/cli-darwin-arm64",
@ -26,6 +27,7 @@ const CLI_PACKAGES = [
// Mapping from npm package name to Rust target and binary extension // Mapping from npm package name to Rust target and binary extension
const CLI_PLATFORM_MAP: Record<string, { target: string; binaryExt: string }> = { const CLI_PLATFORM_MAP: Record<string, { target: string; binaryExt: string }> = {
"@sandbox-agent/cli-linux-x64": { target: "x86_64-unknown-linux-musl", binaryExt: "" }, "@sandbox-agent/cli-linux-x64": { target: "x86_64-unknown-linux-musl", binaryExt: "" },
"@sandbox-agent/cli-linux-arm64": { target: "aarch64-unknown-linux-musl", binaryExt: "" },
"@sandbox-agent/cli-win32-x64": { target: "x86_64-pc-windows-gnu", binaryExt: ".exe" }, "@sandbox-agent/cli-win32-x64": { target: "x86_64-pc-windows-gnu", binaryExt: ".exe" },
"@sandbox-agent/cli-darwin-x64": { target: "x86_64-apple-darwin", binaryExt: "" }, "@sandbox-agent/cli-darwin-x64": { target: "x86_64-apple-darwin", binaryExt: "" },
"@sandbox-agent/cli-darwin-arm64": { target: "aarch64-apple-darwin", binaryExt: "" }, "@sandbox-agent/cli-darwin-arm64": { target: "aarch64-apple-darwin", binaryExt: "" },

View file

@ -30,9 +30,16 @@ if [ "$(printf '%s' "$UNAME" | cut -c 1-6)" = "Darwin" ]; then
fi fi
elif [ "$(printf '%s' "$UNAME" | cut -c 1-5)" = "Linux" ]; then elif [ "$(printf '%s' "$UNAME" | cut -c 1-5)" = "Linux" ]; then
echo echo
echo "> Detected Linux ($(getconf LONG_BIT) bit)" echo "> Detected Linux ($ARCH)"
if [ "$ARCH" = "x86_64" ]; then
FILE_NAME="sandbox-agent-x86_64-unknown-linux-musl" FILE_NAME="sandbox-agent-x86_64-unknown-linux-musl"
elif [ "$ARCH" = "aarch64" ] || [ "$ARCH" = "arm64" ]; then
FILE_NAME="sandbox-agent-aarch64-unknown-linux-musl"
else
echo "Unknown arch $ARCH" 1>&2
exit 1
fi
else else
echo "Unable to determine platform" 1>&2 echo "Unable to determine platform" 1>&2
exit 1 exit 1

View file

@ -1,6 +1,6 @@
{ {
"name": "@sandbox-agent/cli-shared", "name": "@sandbox-agent/cli-shared",
"version": "0.1.6-rc.1", "version": "0.1.6-rc.2",
"description": "Shared helpers for sandbox-agent CLI and SDK", "description": "Shared helpers for sandbox-agent CLI and SDK",
"license": "Apache-2.0", "license": "Apache-2.0",
"repository": { "repository": {

View file

@ -8,7 +8,7 @@ const fs = require("fs");
const path = require("path"); const path = require("path");
const TRUST_PACKAGES = const TRUST_PACKAGES =
"@sandbox-agent/cli-linux-x64 @sandbox-agent/cli-darwin-arm64 @sandbox-agent/cli-darwin-x64 @sandbox-agent/cli-win32-x64"; "@sandbox-agent/cli-linux-x64 @sandbox-agent/cli-linux-arm64 @sandbox-agent/cli-darwin-arm64 @sandbox-agent/cli-darwin-x64 @sandbox-agent/cli-win32-x64";
function formatHint(binPath) { function formatHint(binPath) {
return formatNonExecutableBinaryMessage({ return formatNonExecutableBinaryMessage({
@ -37,6 +37,7 @@ const PLATFORMS = {
"darwin-arm64": "@sandbox-agent/cli-darwin-arm64", "darwin-arm64": "@sandbox-agent/cli-darwin-arm64",
"darwin-x64": "@sandbox-agent/cli-darwin-x64", "darwin-x64": "@sandbox-agent/cli-darwin-x64",
"linux-x64": "@sandbox-agent/cli-linux-x64", "linux-x64": "@sandbox-agent/cli-linux-x64",
"linux-arm64": "@sandbox-agent/cli-linux-arm64",
"win32-x64": "@sandbox-agent/cli-win32-x64", "win32-x64": "@sandbox-agent/cli-win32-x64",
}; };

View file

@ -1,6 +1,6 @@
{ {
"name": "@sandbox-agent/cli", "name": "@sandbox-agent/cli",
"version": "0.1.6-rc.1", "version": "0.1.6-rc.2",
"description": "CLI for sandbox-agent - run AI coding agents in sandboxes", "description": "CLI for sandbox-agent - run AI coding agents in sandboxes",
"license": "Apache-2.0", "license": "Apache-2.0",
"repository": { "repository": {
@ -23,6 +23,7 @@
"@sandbox-agent/cli-darwin-arm64": "workspace:*", "@sandbox-agent/cli-darwin-arm64": "workspace:*",
"@sandbox-agent/cli-darwin-x64": "workspace:*", "@sandbox-agent/cli-darwin-x64": "workspace:*",
"@sandbox-agent/cli-linux-x64": "workspace:*", "@sandbox-agent/cli-linux-x64": "workspace:*",
"@sandbox-agent/cli-linux-arm64": "workspace:*",
"@sandbox-agent/cli-win32-x64": "workspace:*" "@sandbox-agent/cli-win32-x64": "workspace:*"
}, },
"files": [ "files": [

View file

@ -1,6 +1,6 @@
{ {
"name": "@sandbox-agent/cli-darwin-arm64", "name": "@sandbox-agent/cli-darwin-arm64",
"version": "0.1.6-rc.1", "version": "0.1.6-rc.2",
"description": "sandbox-agent CLI binary for macOS ARM64", "description": "sandbox-agent CLI binary for macOS ARM64",
"license": "Apache-2.0", "license": "Apache-2.0",
"repository": { "repository": {

View file

@ -1,6 +1,6 @@
{ {
"name": "@sandbox-agent/cli-darwin-x64", "name": "@sandbox-agent/cli-darwin-x64",
"version": "0.1.6-rc.1", "version": "0.1.6-rc.2",
"description": "sandbox-agent CLI binary for macOS x64", "description": "sandbox-agent CLI binary for macOS x64",
"license": "Apache-2.0", "license": "Apache-2.0",
"repository": { "repository": {

View file

@ -0,0 +1,22 @@
{
"name": "@sandbox-agent/cli-linux-arm64",
"version": "0.1.6-rc.2",
"description": "sandbox-agent CLI binary for Linux arm64",
"license": "Apache-2.0",
"repository": {
"type": "git",
"url": "https://github.com/rivet-dev/sandbox-agent"
},
"os": [
"linux"
],
"cpu": [
"arm64"
],
"scripts": {
"postinstall": "chmod +x bin/sandbox-agent || true"
},
"files": [
"bin"
]
}

View file

@ -1,6 +1,6 @@
{ {
"name": "@sandbox-agent/cli-linux-x64", "name": "@sandbox-agent/cli-linux-x64",
"version": "0.1.6-rc.1", "version": "0.1.6-rc.2",
"description": "sandbox-agent CLI binary for Linux x64", "description": "sandbox-agent CLI binary for Linux x64",
"license": "Apache-2.0", "license": "Apache-2.0",
"repository": { "repository": {

View file

@ -1,6 +1,6 @@
{ {
"name": "@sandbox-agent/cli-win32-x64", "name": "@sandbox-agent/cli-win32-x64",
"version": "0.1.6-rc.1", "version": "0.1.6-rc.2",
"description": "sandbox-agent CLI binary for Windows x64", "description": "sandbox-agent CLI binary for Windows x64",
"license": "Apache-2.0", "license": "Apache-2.0",
"repository": { "repository": {

View file

@ -38,6 +38,7 @@ describe("CLI Launcher", () => {
"darwin-arm64": "@sandbox-agent/cli-darwin-arm64", "darwin-arm64": "@sandbox-agent/cli-darwin-arm64",
"darwin-x64": "@sandbox-agent/cli-darwin-x64", "darwin-x64": "@sandbox-agent/cli-darwin-x64",
"linux-x64": "@sandbox-agent/cli-linux-x64", "linux-x64": "@sandbox-agent/cli-linux-x64",
"linux-arm64": "@sandbox-agent/cli-linux-arm64",
"win32-x64": "@sandbox-agent/cli-win32-x64", "win32-x64": "@sandbox-agent/cli-win32-x64",
}; };
@ -45,6 +46,7 @@ describe("CLI Launcher", () => {
expect(PLATFORMS["darwin-arm64"]).toBe("@sandbox-agent/cli-darwin-arm64"); expect(PLATFORMS["darwin-arm64"]).toBe("@sandbox-agent/cli-darwin-arm64");
expect(PLATFORMS["darwin-x64"]).toBe("@sandbox-agent/cli-darwin-x64"); expect(PLATFORMS["darwin-x64"]).toBe("@sandbox-agent/cli-darwin-x64");
expect(PLATFORMS["linux-x64"]).toBe("@sandbox-agent/cli-linux-x64"); expect(PLATFORMS["linux-x64"]).toBe("@sandbox-agent/cli-linux-x64");
expect(PLATFORMS["linux-arm64"]).toBe("@sandbox-agent/cli-linux-arm64");
expect(PLATFORMS["win32-x64"]).toBe("@sandbox-agent/cli-win32-x64"); expect(PLATFORMS["win32-x64"]).toBe("@sandbox-agent/cli-win32-x64");
}); });

View file

@ -1,6 +1,6 @@
{ {
"name": "sandbox-agent", "name": "sandbox-agent",
"version": "0.1.6-rc.1", "version": "0.1.6-rc.2",
"description": "Universal API for automatic coding agents in sandboxes. Supprots Claude Code, Codex, OpenCode, and Amp.", "description": "Universal API for automatic coding agents in sandboxes. Supprots Claude Code, Codex, OpenCode, and Amp.",
"license": "Apache-2.0", "license": "Apache-2.0",
"repository": { "repository": {

View file

@ -29,11 +29,12 @@ const PLATFORM_PACKAGES: Record<string, string> = {
"darwin-arm64": "@sandbox-agent/cli-darwin-arm64", "darwin-arm64": "@sandbox-agent/cli-darwin-arm64",
"darwin-x64": "@sandbox-agent/cli-darwin-x64", "darwin-x64": "@sandbox-agent/cli-darwin-x64",
"linux-x64": "@sandbox-agent/cli-linux-x64", "linux-x64": "@sandbox-agent/cli-linux-x64",
"linux-arm64": "@sandbox-agent/cli-linux-arm64",
"win32-x64": "@sandbox-agent/cli-win32-x64", "win32-x64": "@sandbox-agent/cli-win32-x64",
}; };
const TRUST_PACKAGES = const TRUST_PACKAGES =
"@sandbox-agent/cli-linux-x64 @sandbox-agent/cli-darwin-arm64 @sandbox-agent/cli-darwin-x64 @sandbox-agent/cli-win32-x64"; "@sandbox-agent/cli-linux-x64 @sandbox-agent/cli-linux-arm64 @sandbox-agent/cli-darwin-arm64 @sandbox-agent/cli-darwin-x64 @sandbox-agent/cli-win32-x64";
export function isNodeRuntime(): boolean { export function isNodeRuntime(): boolean {
return typeof process !== "undefined" && !!process.versions?.node; return typeof process !== "undefined" && !!process.versions?.node;