Skip to content

feat(eve): expose userspace sandbox drives - #1726

Draft
ruiconti wants to merge 3 commits into
feat/durable-sandbox-apifrom
rui/userspace-sandbox-drives
Draft

feat(eve): expose userspace sandbox drives#1726
ruiconti wants to merge 3 commits into
feat/durable-sandbox-apifrom
rui/userspace-sandbox-drives

Conversation

@ruiconti

@ruiconti ruiconti commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

What

The full proposal and research trail are in research/sandbox-drives.md. The code in this PR is its tested prototype.

  • define Drives as userspace-owned sequential durability rather than framework-owned shared live state
  • re-export Drive from eve/sandbox/vercel
  • accept mounts when creating a live Vercel Sandbox session
  • keep drive mounts out of build-time template options
  • vendor the drives-capable @vercel/sandbox@2.10.0-beta.0

Data flow

Before: an author returned a durable Vercel sandbox, but eve’s vendored SDK and session options could not represent a drive mount.

After: author code calls Drive.getOrCreate, passes the resulting name to template.create({ mounts }) or template.getOrCreate({ mounts }), and createVercelSandboxResource forwards that session option to Sandbox.create.

Why this shape

Drives mount only during sandbox creation, so mounts belongs to live session-create options. It is excluded from template options so build prewarming never claims a userspace drive. Re-exporting Drive keeps CRUD on the same vendored SDK and credential path as sandbox creation rather than requiring applications to install a second SDK copy.

Drive naming, seeding, deletion, and attach-conflict policy remain application-owned. The platform currently permits only one attachment, so eve cannot make one live drive concurrently writable across sessions (Drives guide).

Stack and scope

Stacked on #1455; #1408 is the authoring proposal beneath that implementation. #509 is the earlier framework-owned per-session alternative.

This remains a draft until we verify stop/resume behavior: when eve restores an idle-stopped sandbox through Sandbox.get, the platform must either restore its persisted mount or return a detectable conflict if another sandbox claimed that drive. This PR covers and tests the fresh-create path; it does not add a resume policy without that runtime evidence.

Signed-off-by: Rui Conti <ruiconti@gmail.com>
@vercel

vercel Bot commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
eve-docs Ready Ready Preview Aug 6, 2026 7:53pm
eve-docs-4759 Ready Ready Preview, v0 Aug 6, 2026 7:53pm

@github-actions

github-actions Bot commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

Bundle + Package Summary: apps/fixtures/weather-agent

Key takeaways

  • No notable deltas vs feat/durable-sandbox-api (80ab7ae).

Delta vs feat/durable-sandbox-api (80ab7ae)

Area Metric Baseline Current Delta
Package Packed tarball 7.46 MB 7.47 MB +4.9 kB ⚠️
Package Unpacked publish size 27.86 MB 27.88 MB +21.5 kB ⚠️
Package Installed footprint 71.25 MB 71.27 MB +21.5 kB ⚠️
Package Published files 2895 2896 +1
Package Installed files 6603 6604 +1
Runtime Unique function payloads 2 2 0
Runtime Total function bytes 16.95 MB 16.96 MB +9.2 kB ⚠️
Runtime Public routes 11 11 0
Changed function payloads vs feat/durable-sandbox-api (80ab7ae) (2)
Function Status Baseline Current Delta Route changes
functions/__server.func changed 8.47 MB 8.48 MB +4.6 kB ⚠️ none
functions/.well-known/workflow/v1/flow.func changed 8.47 MB 8.48 MB +4.6 kB ⚠️ none

eve init install

Metric Baseline Current Delta
Installed footprint 109.66 MB 109.68 MB +21.5 kB ⚠️
Installed packages 121 121 0
dependencies 4 4 0
devDependencies 2 2 0
Dependency package bytes 42.32 MB 42.35 MB +21.5 kB ⚠️
devDependency package bytes 5.04 MB 5.04 MB 0 B ➖
Build Metadata
  • Preset: vercel
  • Nitro: nitro@3.0.260610-beta
  • Output directory: apps/fixtures/weather-agent/.vercel/output
  • Build metadata timestamp: 2026-08-06T17:32:18.411Z
  • Route aliases: 11 public, 1 internal (12 total aliases)
  • Vercel routes in config: 14
  • Severity legend: 🔴 dominant/large, 🟠 notable, 🟡 watch, ⚪ small
Package Drill-Down

Package Details

  • Package: eve@0.29.2
  • Package directory: packages/eve
  • Tarball: 7.47 MB (eve-0.29.2.tgz)
  • Unpacked payload: 27.88 MB across 2896 published files
  • Installed footprint: 71.27 MB across 6604 installed files
  • Installed root package: 26.53 MB
  • Installed dependencies: 44.74 MB
  • Runtime dependencies: 2
  • Peer dependencies: 5 (4 optional)

Installed footprint is measured from an isolated temporary npm install of the packed tarball.

Heavy installed dependencies

  • eve: 26.53 MB (37.2%)
  • @rolldown/binding-linux-x64-gnu: 19.35 MB (27.1%)
  • ai: 6.65 MB (9.3%)
  • zod: 5.07 MB (7.1%)
  • undici: 3.50 MB (4.9%)
Publish payload breakdown
Published file size
🔴 dist/src/compiled/shadcn-registry/index.js       [##################......] 9.68 MB 34.7%
🟠 dist/src/compiled/@photon-ai/chat-adapter-ime... [####....................] 2.42 MB 8.7%
🟠 dist/src/compiled/experimental-ai-sdk-code-mo... [###.....................] 1.51 MB 5.4%
🟡 dist/src/compiled/_chunks/node/undici-DWL_MYm... [#.......................] 502.4 kB 1.8%
🟡 dist/src/compiled/_chunks/workflow/undici-DWL... [#.......................] 502.4 kB 1.8%
🔴 Other published files                            [########################] 13.27 MB 47.6%
Installed footprint breakdown
Installed package size
🔴 eve                             [########################] 26.53 MB 37.2%
🔴 @rolldown/binding-linux-x64-gnu [##################......] 19.35 MB 27.1%
🔴 ai                              [######..................] 6.65 MB 9.3%
🔴 zod                             [#####...................] 5.07 MB 7.1%
🟠 undici                          [###.....................] 3.50 MB 4.9%
🟠 nitro                           [##......................] 2.41 MB 3.4%
🔴 Other installed packages        [#######.................] 7.77 MB 10.9%
Runtime dependencies (2)
Package Range Notes
nitro 3.0.260610-beta
undici 8.9.0
Peer dependencies (5)
Package Range Notes
@opentelemetry/api ^1.0.0 optional peer
ai catalog:
braintrust ^3.0.0 optional peer
just-bash ^3.0.0 optional peer
microsandbox ^0.5.0 optional peer
eve init install drill-down

eve init install details

  • Command: eve init my-agent
  • Package manager: npm
  • Installed footprint: 109.68 MB across 8480 installed files
  • Installed packages: 121 total (115 transitive-only)
  • dependencies: 4 direct packages totaling 42.35 MB
  • devDependencies: 2 direct packages totaling 5.04 MB
  • Other transitive package files: 62.29 MB

Installed footprint is measured from an isolated temporary eve init my-agent using the current packed eve tarball.

Heavy installed dependencies

  • @typescript/typescript-linux-x64: 27.95 MB (25.5%)
  • eve: 26.53 MB (24.2%)
  • @rolldown/binding-linux-x64-gnu: 19.35 MB (17.6%)
  • zod: 9.02 MB (8.2%)
  • ai: 6.65 MB (6.1%)
Installed footprint breakdown
Installed package size
🔴 @typescript/typescript-linux-x64 [########################] 27.95 MB 25.5%
🔴 eve                              [#######################.] 26.53 MB 24.2%
🔴 @rolldown/binding-linux-x64-gnu  [#################.......] 19.35 MB 17.6%
🔴 zod                              [########................] 9.02 MB 8.2%
🔴 ai                               [######..................] 6.65 MB 6.1%
🟠 undici                           [###.....................] 3.50 MB 3.2%
🔴 Other installed packages         [##############..........] 16.68 MB 15.2%
dependencies (4)
Package Range Installed size Share
@vercel/connect 0.4.3 141.0 kB 0.1%
ai ^7.0.38 6.65 MB 6.1%
eve file:eve-0.29.2.tgz 26.53 MB 24.2%
zod 4.4.3 9.02 MB 8.2%
devDependencies (2)
Package Range Installed size Share
@types/node 24.x 2.54 MB 2.3%
typescript 7.0.2 2.50 MB 2.3%
Function Drill-Down

Payload Size Graph

Unique function payload size and share of total
🔴 functions/.well-known/workflow/v1/flow.func     [########################] 8.48 MB 50.0%
🔴 functions/__server.func                         [########################] 8.48 MB 50.0%

Top Function Payloads

🟠 functions/.well-known/workflow/v1/flow.func • 1 public route • 8.48 MB
Metric Value
Public routes /.well-known/workflow/v1/flow
Runtime nodejs24.x
Handler index.mjs
Payload 8.48 MB
Function files 8.48 MB across 44 files
Traced dependencies 0 B
Signal 🟠 Bundled file index.mjs is 2.36 MB (27.8%)

🟠 🔎 Dependency Analysis

📦 Bundled files:

Bundled file size
🟠 index.mjs                       [########################] 2.36 MB 27.8%
🟠 _chunks/runtime-artifacts.mjs   [################........] 1.56 MB 18.5%
🟡 _libs/undici.mjs                [##########..............] 980.5 kB 11.6%
🟡 _chunks/sandbox.mjs             [########................] 773.1 kB 9.1%
🟡 _libs/@ai-sdk/gateway+[...].mjs [####....................] 432.8 kB 5.1%
🟠 Other bundled files             [########################] 2.37 MB 27.9%

🧾 Vercel Config

{
  "handler": "index.mjs",
  "launcherType": "Nodejs",
  "shouldAddHelpers": false,
  "supportsResponseStreaming": true,
  "runtime": "nodejs24.x",
  "maxDuration": "max",
  "experimentalTriggers": [
    {
      "type": "queue/v2beta",
      "topic": "__eve776561746865722d6167656e74_wkf_workflow_*",
      "consumer": "default",
      "retryAfterSeconds": 5,
      "initialDelaySeconds": 0
    }
  ],
  "environment": {
    "WORKFLOW_PRECONDITION_GUARD": "1"
  }
}

🟠 functions/__server.func • 10 public routes, 1 internal alias • 8.48 MB
Metric Value
Public routes /
/eve/v1/callback/[token]
/eve/v1/connections/[name]/callback/[token]
/eve/v1/health
/eve/v1/info
/eve/v1/session
/eve/v1/session/[sessionId]
/eve/v1/session/[sessionId]/cancel
/eve/v1/session/[sessionId]/stream
/eve/v1/session/reset
Internal aliases /__server
Runtime nodejs24.x
Handler index.mjs
Payload 8.48 MB
Function files 8.48 MB across 44 files
Traced dependencies 0 B
Signal 🟠 Bundled file index.mjs is 2.36 MB (27.8%)

🟠 🔎 Dependency Analysis

📦 Bundled files:

Bundled file size
🟠 index.mjs                       [########################] 2.36 MB 27.8%
🟠 _chunks/runtime-artifacts.mjs   [################........] 1.56 MB 18.5%
🟡 _libs/undici.mjs                [##########..............] 980.5 kB 11.6%
🟡 _chunks/sandbox.mjs             [########................] 773.1 kB 9.1%
🟡 _libs/@ai-sdk/gateway+[...].mjs [####....................] 432.8 kB 5.1%
🟠 Other bundled files             [########################] 2.37 MB 27.9%

🧾 Vercel Config

{
  "handler": "index.mjs",
  "launcherType": "Nodejs",
  "shouldAddHelpers": false,
  "supportsResponseStreaming": true,
  "runtime": "nodejs24.x"
}

Build Timing: e2e/fixtures/agent-tools-sandbox

This is an informational timing measurement inside eve build, from preflight through publication. Output-size measurement and profile writing are excluded.

Build mode: deployable Vercel build with sandbox template prewarm included.

  • Build pipeline: 10.43 s -> 10.60 s (+169.6 ms) vs feat/durable-sandbox-api (80ab7ae).
  • Timing is informational: shared GitHub runners are too variable for a hard timing budget.
Detailed phase timings vs `feat/durable-sandbox-api (80ab7ae)`
Phase Baseline Current Delta
extension.check 12.4 ms 8.7 ms -3.7 ms
project.resolve 6.5 ms 0.8 ms -5.7 ms
workspace.create 1.2 ms 4.1 ms +2.9 ms
host.prepare 281.6 ms 238.8 ms -42.8 ms
sandbox.prewarm 4.82 s 5.13 s +305.9 ms
vercel.service-prefix.resolve 1.8 ms 1.6 ms -0.2 ms
nitro.create 247.9 ms 214.3 ms -33.6 ms
nitro.cache.prepare 0.3 ms 0.4 ms +0.1 ms
nitro.prepare 0.8 ms 1.8 ms +1.0 ms
nitro.public-assets 0.8 ms 1.0 ms +0.2 ms
nitro.prerender 0.4 ms 0.6 ms +0.2 ms
nitro.bundle 4.87 s 4.80 s -64.9 ms
nitro.cache.write 0.3 ms 0.3 ms 0.0 ms
vercel.workflow-function.materialize 179.0 ms 189.8 ms +10.8 ms
agent-summary.emit 0.6 ms 0.5 ms -0.1 ms
nitro.close 0.1 ms 0.1 ms 0.0 ms
output.publish 4.0 ms 3.5 ms -0.5 ms
workspace.remove 1.9 ms 2.0 ms +0.1 ms

Signed-off-by: Rui Conti <ruiconti@gmail.com>
Signed-off-by: Rui Conti <ruiconti@gmail.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