Repository navigation
docs(research): plan first-class attachments - #4223
Closed
AndrewBarba wants to merge 4 commits into
Closed
AndrewBarba wants to merge 4 commits into
AndrewBarba wants to merge 4 commits into
Conversation
Signed-off-by: Andrew Barba <barba@hey.com>
cmpadden
marked this pull request as ready for review
October 2, 2026 19:16
cmpadden
marked this pull request as draft
October 2, 2026 19:17
chadhietala
reviewed
Oct 6, 2026
| | ------------------------------------ | --------------------------------------------------- | | ||
| | `undefined` | The original, under the native policy | | ||
| | `{ type: "text", text }` | The text, in place of the file | | ||
| | `{ type: "file", bytes, mediaType }` | The replacement file (for example, a smaller image) | |
Contributor
There was a problem hiding this comment.
Is there anyway to pass by reference with some url? Just thinking through the implications of this for tracing.
Collaborator
Author
There was a problem hiding this comment.
Good question. d34ff90 adds a Tracing section with two answers:
- Traces: yes. With refs, model-call spans record the attachment descriptor instead of base64. A trace viewer opens the file through the session-authorized route
GET /eve/v1/sessions/:id/attachments/:sha, so traces do not store a copy. - Providers: no, for now. A signed store URL changes each time eve mints it. The same message then renders differently on each call, which breaks the prompt cache (see
research/tool-result-media.md). Private URLs also fail when the provider fetches them (Slack channel: a Google Drive/Dropbox file linked in a thread crashes every later mention (AI_DownloadError: 401) #855). If payload size becomes a problem, provider Files APIfile_ids are the better option.
AndrewBarba
marked this pull request as ready for review
October 7, 2026 17:38
Signed-off-by: Andrew Barba <barba@hey.com>
…g fixes Signed-off-by: Andrew Barba <barba@hey.com>
1 of 3 tasks
Collaborator
Author
|
Superseded by #4625. That plan keeps today's sandbox storage and fixes the attachment pipeline without a new store primitive. The path labels, the inline gate, and PDFs in |
3 tasks done
This branch was successfully deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
#4224 keeps attachment bytes out of session history, but the session sandbox is still the only store. Files can vanish when a snapshot changes, and every attachment boots a sandbox. The model also can't reopen a visible image by path, and one oversized image breaks every later call. This research plan proposes a pluggable attachment store with the sandbox as the default, so behavior without configuration does not change. Vercel Blob is opt-in. Two model-facing fixes ship first: path labels on every attachment and a pixel gate.
Related to #3833, #276, and #4194.
Scope decisions:
eve-url:file part when the cancellation lands before the harness step starts; every later model call fails with AI_DownloadError #3419, and eveChannel: support fetchFile for URL file parts (large web uploads) #4194.eve-sandbox:refs keep working, so live sessions keep their images.agentcopies can read the parent's attachments, as they can today through the shared sandbox. Declared subagents stay isolated.toModel, pending Slack files, model capability gating, and trace content.The plan also compares the attachment handling in opencode v2, Codex, and pi. This PR adds only the plan. It changes no code.
Validation
oxfmt --check research/first-class-attachments.mdandgit diff --checkpass.Checklist
CONTRIBUTING.mdevepackagegit commit --signoff)