Skip to content

feat(sandbox-tensorlake): add Tensorlake sandbox provider package#16265

Open
cooleel wants to merge 3 commits into
vercel:mainfrom
tensorlakeai:tl/sandbox
Open

feat(sandbox-tensorlake): add Tensorlake sandbox provider package#16265
cooleel wants to merge 3 commits into
vercel:mainfrom
tensorlakeai:tl/sandbox

Conversation

@cooleel

@cooleel cooleel commented Jun 19, 2026

Copy link
Copy Markdown

Summary

Adds @ai-sdk/sandbox-tensorlake, a HarnessV1SandboxProvider backed by Tensorlake sandboxes, so harnesses like Claude Code can run inside a Tensorlake sandbox.

Manual Verification

pnpm tsx examples/ai-functions/src/harness-agent/claude-code/stream-tensorlake-sandbox.ts
pnpm tsx examples/ai-functions/src/harness-agent/claude-code/generate-tensorlake-sandbox.ts

What's included

  • Provider (createTensorlakeSandbox): createSession / resumeSession, suspend-based stop with resume, and snapshot-backed session forking (bootstrap once per identity, fork per session).
  • Sessions: Experimental_SandboxSession surface (run/spawn/file I/O) plus the HarnessV1NetworkSandboxSession infra surface (ports, getPortUrl, restricted()).
  • Bridge access: getPortUrl opens an authenticated Tensorlake TCP tunnel and returns a plain ws/wss localhost URL — no public ingress, no custom handshake. A dedicated bridge port is advertised automatically.
  • setup option: runs shell commands as root once at create time to provision tools the base image lacks (e.g. pnpm) without a custom image; with a snapshot recipe the setup is baked into every fork.
  • Session ids are sanitized into valid Tensorlake sandbox names deterministically so resume locates the sandbox by name.

Testing

  • 46 unit tests (provider lifecycle, snapshot/fork, setup, resume, sessions).
  • Live WebSocket 101-upgrade test through the tunnel (stock ws client, end-to-end token enforcement).
  • Verified end-to-end against live Tensorlake via the examples/ai-functions/src/harness-agent/claude-code examples.

Docs & examples

  • Package README.md + docs/getting-started.md.
  • generate-tensorlake-sandbox.ts and stream-tensorlake-sandbox.ts examples.
  • Note in 02-harness-agent.mdx.

Checklist

  • All commits are signed (PRs with unsigned commits cannot be merged)
  • Tests have been added / updated (for bug fixes / features)
  • Documentation has been added / updated (for bug fixes / features)
  • A patch changeset for relevant packages has been added (for bug fixes / features - run pnpm changeset in the project root)
  • I have reviewed this pull request (self-review)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
cooleel and others added 2 commits June 19, 2026 13:37
- Honor `workingDirectory` for bare commands: thread the resolved default
  working dir into the base session and `restricted()` so `run`/`spawn`
  without a per-call dir resolve against the advertised
  `defaultWorkingDirectory` instead of the image default.
- Surface genuine resume failures: gate `resume()` on the matched sandbox
  status (only SUSPENDED/SUSPENDING) and let errors propagate, rather than
  swallowing every resume error and returning a session that fails opaquely.
- Avoid cross-provider snapshot reuse: fold a stable settings/credentials
  hash into the template name so providers sharing a harness identity but
  differing in settings don't reuse each other's snapshot.
- Don't leak sandboxes on failed initialization: terminate the sandbox (and
  named template) when setup/onFirstCreate/checkpoint throws.
- Evict tunnels from the cache on failure so a transient error doesn't
  permanently poison `getPortUrl`.

Adds regression tests for each.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant