Skip to content

perf(headless-computer): send files straight to and from the bucket - #7421

Open
reachjalil wants to merge 1 commit into
devfrom
perf/computer-files-skip-the-runner
Open

reachjalil wants to merge 1 commit into
devfrom
perf/computer-files-skip-the-runner

Conversation

@reachjalil

@reachjalil reachjalil commented Nov 14, 2026 •

Copy link
Copy Markdown
Member

What is this about?

A Workbot computer now fetches the person's files from the files bucket, and sends its outputs back, by itself. The bytes no longer pass through the runner.

What problem does it solve?

Every file was held whole in the runner's memory on its way in or out, one at a time, 30 seconds each. A large video could time out or crowd the cell that serves all of a person's chats.

What was the situation before?

Before a command, the runner asked the computer about each upload, read it from the bucket and wrote it through the provider's file API. After a command it read each changed output back the same way. Every new runner process asked about every upload again.

How is this implemented?

  • blobs.ts: the S3 store signs a link for one object and one method that expires within minutes, and can measure and copy an object.
  • saved-files.ts: an output is sent to a holding object; finish measures it, applies the limits, then copies it into place.
  • computer.ts: one command reads the folder and a record of copied uploads; curl then moves all pending files in one command. Links go in a file removed afterwards, never on a command line.
  • A disk store, or a file that doesn't arrive, uses the old path.

What else changed?

  • README.md: how the bytes move.

Release note

Large files move between your Files and a Workbot computer directly, without the earlier 30-second copy limit.

Evidence

ee/packages/headless-computer/src/computer-files.test.ts, ee/apps/headless-runner/scripts/saved-file-links.test.ts — before: each file went through the runner; after: the computer moves it with curl, and an output larger than announced is not kept. Not run against a real bucket. No E2E.

A person's files reached their computer through the runner: one stat per
file, then each file read whole from the bucket into the runner and written
through the provider's file API, 30 seconds at most. Which files were
already copied was only remembered in memory, so every new runner process
asked about every file again. Outputs came back the same way, each read
through the runner after every command.

With the S3 store the computer now moves the bytes itself. The runner signs
a link per file, for one object and one method, that stops working within
minutes; the computer runs curl over all of them in one command. The links
are written to a file that is removed when the command ends, never to a
command line, a log or what the model sees.

An output is sent to a holding object. The runner measures what arrived,
applies the per-file and per-conversation limits, and only then copies it
into place inside the bucket, so a kept file is never larger than its row
says and a version that doesn't fit leaves the kept one untouched.

What is already on a computer is read in one command: the folder's names
and sizes, and a record kept in /workspace/.jobs/.copied.json. The record
only counts while the file is still there, because a replacement computer
carries .jobs over but not /workspace/files.

A disk store has no links, and a file that doesn't arrive by link goes
through the runner as before. After a transfer in which nothing arrives,
links are skipped for ten minutes.

Signed-off-by: Jalil <reachjalil@gmail.com>
@vercel

vercel Bot commented Nov 14, 2026 •

Copy link
Copy Markdown
Contributor

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

3 Skipped Deployments
Project Deployment Actions Updated
openwork-app Skipped Skipped Nov 14, 2026 1:38am UTC
openwork-den Skipped Skipped Nov 14, 2026 1:38am UTC
openwork-landing Skipped Skipped v0 Nov 14, 2026 1:38am UTC

Request Review

@vercel
vercel Bot temporarily deployed to Preview – openwork-den November 14, 2026 01:38 Inactive
@vercel
vercel Bot temporarily deployed to Preview – openwork-landing November 14, 2026 01:38 Inactive
@vercel
vercel Bot temporarily deployed to Preview – openwork-app November 14, 2026 01:38 Inactive

This branch was previously deployed

3 inactive deployments
Preview – openwork-app — 2ceeff33 Deployed Nov 14, 2026 by vercel[bot]
Preview – openwork-den — 2ceeff33 Deployed Nov 14, 2026 by vercel[bot]
Preview – openwork-landing — 2ceeff33 Deployed Nov 14, 2026 by vercel[bot]
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