Skip to content

fix(eve): fix Vercel Sandbox file reads#117

Open
remiconnesson wants to merge 2 commits into
mainfrom
codex/sandbox-ports-and-downloads
Open

fix(eve): fix Vercel Sandbox file reads#117
remiconnesson wants to merge 2 commits into
mainfrom
codex/sandbox-ports-and-downloads

Conversation

@remiconnesson

@remiconnesson remiconnesson commented Jun 19, 2026

Copy link
Copy Markdown

Summary

  • adapt Vercel Sandbox's Node file stream to Eve's ReadableStream<Uint8Array> contract
  • correct Eve's vendored Vercel Sandbox declaration to match the provider SDK
  • add a regression test that consumes the returned stream through Eve's public SandboxSession.readFile() API

Root cause

Vercel Sandbox returns a Node.js readable stream from readFile(). Eve's vendored declaration described that value as a Web ReadableStream, and the Vercel backend passed it through unchanged.

Consumers therefore received a value without getReader(). Download helpers mapped that resulting TypeError to a generic unreadable-file error even though the file existed and was readable inside the sandbox.

User impact

Vercel-backed Eve agents can stream existing sandbox files through SandboxSession.readFile(), including bounded download flows.

Fixes #120.

Verification

  • regression test failed before the fix because the returned value was not a ReadableStream
  • 3,631 unit tests pass, including the 700-line structural guard
  • Eve typecheck, formatting, and lint pass

Also tried the same kind of change locally here, and it worked
image

@vercel

vercel Bot commented Jun 19, 2026

Copy link
Copy Markdown

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

Project Deployment Actions Updated (UTC)
eve-docs Ready Ready Preview, Comment, Open in v0 Jun 19, 2026 9:09pm

@remiconnesson remiconnesson changed the title [codex] expose sandbox downloads and ports [Experiment] expose sandbox downloads and ports Jun 19, 2026
@github-actions

github-actions Bot commented Jun 19, 2026

Copy link
Copy Markdown
Contributor

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

Key takeaways

  • No notable deltas vs main (bfc7191).

Delta vs main (bfc7191)

Area Metric Baseline Current Delta
Package Packed tarball 3.23 MB 3.23 MB -114 B ✅
Package Unpacked publish size 11.58 MB 11.58 MB +61 B ⚠️
Package Installed footprint 51.79 MB 51.79 MB +61 B ⚠️
Package Published files 2163 2163 0
Package Installed files 5368 5368 0
Runtime Unique function payloads 2 2 0
Runtime Total function bytes 9.34 MB 9.34 MB -12 B ✅
Runtime Public routes 9 9 0
Changed function payloads vs main (bfc7191) (2)
Function Status Baseline Current Delta Route changes
functions/__server.func changed 3.86 MB 3.86 MB -62 B ✅ none
functions/.well-known/workflow/v1/flow.func changed 5.47 MB 5.47 MB +50 B ⚠️ none
Build Metadata
  • Preset: vercel
  • Nitro: nitro@3.0.260610-beta
  • Output directory: apps/fixtures/weather-agent/.vercel/output
  • Build metadata timestamp: 2026-06-19T21:09:42.633Z
  • Route aliases: 9 public, 1 internal (10 total aliases)
  • Vercel routes in config: 10
  • Severity legend: 🔴 dominant/large, 🟠 notable, 🟡 watch, ⚪ small
Package Drill-Down

Package Details

  • Package: eve@0.11.7
  • Package directory: packages/eve
  • Tarball: 3.23 MB (eve-0.11.7.tgz)
  • Unpacked payload: 11.58 MB across 2163 published files
  • Installed footprint: 51.79 MB across 5368 installed files
  • Installed root package: 10.47 MB
  • Installed dependencies: 41.32 MB
  • Runtime dependencies: 1
  • Peer dependencies: 12 (11 optional)

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

Heavy installed dependencies

  • @rolldown/binding-linux-x64-gnu: 20.61 MB (39.8%)
  • eve: 10.47 MB (20.2%)
  • ai: 6.20 MB (12.0%)
  • zod: 4.97 MB (9.6%)
  • nitro: 2.41 MB (4.6%)
Publish payload breakdown
Published file size
🟠 dist/src/compiled/experimental-ai-sdk-code-mo... [#####...................] 1.51 MB 13.0%
🟡 dist/src/compiled/@workflow/core/runtime.js      [##......................] 775.4 kB 6.7%
🟡 dist/src/compiled/@vercel/sandbox/index.js       [##......................] 632.0 kB 5.5%
🟡 dist/src/compiled/@chat-adapter/slack/index.js   [#.......................] 436.9 kB 3.8%
🟡 dist/src/compiled/_chunks/workflow/attribute-... [#.......................] 370.9 kB 3.2%
🔴 Other published files                            [########################] 7.86 MB 67.9%
Installed footprint breakdown
Installed package size
🔴 @rolldown/binding-linux-x64-gnu [########################] 20.61 MB 39.8%
🔴 eve                             [############............] 10.47 MB 20.2%
🔴 ai                              [#######.................] 6.20 MB 12.0%
🟠 zod                             [######..................] 4.97 MB 9.6%
🟠 nitro                           [###.....................] 2.41 MB 4.6%
🟡 rolldown                        [#.......................] 771.0 kB 1.5%
🔴 Other installed packages        [#######.................] 6.37 MB 12.3%
Runtime dependencies (1)
Package Range Notes
nitro 3.0.260610-beta
Peer dependencies (12)
Package Range Notes
@opentelemetry/api ^1.0.0 optional peer
@sveltejs/kit ^2.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
next ^16.0.0 optional peer
nuxt ^4.0.0 optional peer
react ^19.0.0 optional peer
svelte ^5.0.0 optional peer
vite ^8.0.0 optional peer
vue ^3.5.0 optional peer
Function Drill-Down

Payload Size Graph

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

Top Function Payloads

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

🟠 🔎 Dependency Analysis

📦 Bundled files:

Bundled file size
🟠 __eve_nitro_handler__.mjs              [########################] 1.50 MB 27.5%
🟠 _chunks/runtime.mjs                    [###############.........] 958.4 kB 17.5%
🟡 _chunks/sandbox.mjs                    [############............] 766.0 kB 14.0%
🟡 _chunks/attribute-changes-Bi5DLT8S.mjs [########................] 472.2 kB 8.6%
🟡 _chunks/dist-DTchiX0N.mjs              [#######.................] 460.6 kB 8.4%
🟠 Other bundled files                    [#####################...] 1.31 MB 24.0%

🧾 Vercel Config

{
  "handler": "index.mjs",
  "launcherType": "Nodejs",
  "shouldAddHelpers": false,
  "supportsResponseStreaming": true,
  "runtime": "nodejs24.x",
  "environment": {
    "NODE_OPTIONS": "--experimental-require-module",
    "WORKFLOW_QUEUE_NAMESPACE": "eve"
  },
  "maxDuration": "max",
  "experimentalTriggers": [
    {
      "type": "queue/v2beta",
      "topic": "__eve_wkf_workflow_*",
      "consumer": "default",
      "retryAfterSeconds": 5,
      "initialDelaySeconds": 0
    }
  ]
}

🟠 functions/__server.func • 8 public routes, 1 internal alias • 3.86 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]/stream
Internal aliases /__server
Runtime nodejs24.x
Handler index.mjs
Payload 3.86 MB
Function files 3.86 MB across 21 files
Traced dependencies 0 B
Signal 🟠 Bundled file index.mjs is 1.40 MB (36.3%)

🟠 🔎 Dependency Analysis

📦 Bundled files:

Bundled file size
🟠 index.mjs                              [########################] 1.40 MB 36.3%
🟠 _chunks/runtime.mjs                    [###############.........] 875.8 kB 22.7%
🟠 _chunks/sandbox.mjs                    [#############...........] 766.0 kB 19.8%
🟡 _chunks/attribute-changes-Bi5DLT8S.mjs [########................] 448.5 kB 11.6%
⚪ _libs/zod.mjs                          [##......................] 114.2 kB 3.0%
🟡 Other bundled files                    [####....................] 258.8 kB 6.7%

🧾 Vercel Config

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

@remiconnesson

remiconnesson commented Jun 19, 2026

Copy link
Copy Markdown
Author

Vercel readFile() verification (1f3f8cc)

The regression was reproduced before the fix with a Node Readable returned by the Vercel SDK. Eve passed that value through, and the test failed because it was not an instance of ReadableStream—the same condition that makes the starter's bounded reader fail at stream.getReader().

After the fix:

  • the provider Node stream is converted at the Vercel adapter boundary
  • Eve's public SandboxSession.readFile() returns a Web ReadableStream
  • the regression consumes the stream and matches the original bytes
  • provider errors are not caught or replaced by the adapter

The real Vercel Sandbox pass also traversed this adapter successfully: 45 bytes matched with SHA-256 cee7126090710957909be4c25dfff28428432d7416752a2baa4d4f4066400557. Sandbox pr117-vercel-mqlb9eu3-038458 was then deleted and lookup confirmed it was absent.

Current branch verification:

  • 3,631 unit tests passed
  • focused Vercel suite: 38 tests passed
  • typecheck, lint, and formatting passed
  • vercel.ts remains at the repository's 700-line structural limit

Reproduction: remiconnesson/eve-single-user-agent-starter#18.

@remiconnesson remiconnesson changed the title [Experiment] expose sandbox downloads and ports Expose sandbox downloads and ports Jun 19, 2026
@remiconnesson remiconnesson marked this pull request as ready for review June 19, 2026 19:33

@ctgowrie ctgowrie left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's see if readFile solves the requirements now to keep surface area small

@remiconnesson remiconnesson force-pushed the codex/sandbox-ports-and-downloads branch from ed88402 to f8c76e8 Compare June 19, 2026 19:57
@remiconnesson remiconnesson changed the title Expose sandbox downloads and ports [codex] fix Vercel Sandbox file reads Jun 19, 2026
Signed-off-by: Rémi Connesson <remiconnesson2@gmail.com>
@remiconnesson

Copy link
Copy Markdown
Author

Follow-up documentation is in #121. It documents the existing readFile() Web-stream contract, reader selection, and frontend rendering for generated images and file downloads. The docs PR targets main separately and should merge after this runtime fix.

@remiconnesson remiconnesson force-pushed the codex/sandbox-ports-and-downloads branch from 866f41a to 1f3f8cc Compare June 19, 2026 20:46
@remiconnesson remiconnesson changed the title [codex] fix Vercel Sandbox file reads fix(eve): fix Vercel Sandbox file reads Jun 19, 2026
@remiconnesson remiconnesson requested a review from ctgowrie June 19, 2026 20:59
Signed-off-by: Rémi Connesson <remiconnesson2@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.

Vercel Sandbox readFile violates Eve’s Web stream contract

2 participants