A delivered file has no download control in the page, though the backend already serves it as an attachment
Maintainers usually reply within 1 day
Nobody has claimed this yet.
Assessment
- Difficulty
- 2/5
- Estimated time
- 1-3 hours
- Newbie friendliness
- 55/100
- Issue type
- Feature
- Clarity
- Clearly specified
- Activity status
- Active
- Tech stack
- python, typescript
- Domain
- frontend
Research direction
Start with the delivered-file tile in ui-web/src/features/transcript/TranscriptPage.tsx and the viewer header in ui-web/src/features/workspace/WorkspacePage.tsx; trace how each currently uses download_path and the existing gui.kb.download string. Done means a delivered file has a browser download control in both relevant views, using the existing attachment route without backend changes. The UI is frozen at filing, so confirm that work has reopened before starting.
Written by the indexing model from the issue text.
Description
Summary
A deliverable the agent produces has no download control in the web page. The backend already serves deliverables as downloads -- GET /files/download?token=... with an RFC 6266 attachment disposition, plus /files/download-archive for several at once -- and deliverables.list already hands the page a ready download_path for every file. The page uses that path for one thing only: a HEAD probe to tell "expired" (410) from "never existed" (404). It never renders it as a link.
Steps to reproduce
- Ask the agent for a file (a deck, a rendered image) so it appears under "Delivered this turn" and in the deliverables shelf.
- Look for a way to save it: the tile, the shelf entry, the file viewer's header.
Expected behavior
A download control that hands the browser the file as an attachment -- the response the backend already produces at download_path.
Actual behavior
- Clicking the tile calls
openDelivery(ui-web/src/features/workspace/store.ts), which isshowFile(p): the inline viewer, served from/file?path=...withContent-Disposition: inline(raven/rpc/transports/ws.py:276,361). The viewer renders; it does not save. - The viewer header offers
reveal(fs.reveal,raven/rpc/methods/console.py:1588), which opens the host's file manager with the file selected. That works only when the page and the server are the same machine, which its docstring says is the case it is for; from any other browser it is a no-op for the reader. - The only "Download" string in the page is
gui.kb.download, on the knowledge page.
So a reader on another machine has no path from a delivered file to a saved file, while the server has been ready to serve one.
Where the pieces already are
| piece | location | state |
|---|---|---|
| download route, attachment disposition | raven/rpc/transports/deliverables.py (add_files_routes, _attachment) |
exists, mounted behind the transport's origin + session guard |
| archive download | same module, /files/download-archive |
exists |
per-file download_path on the wire |
raven/rpc/methods/console.py:1768, in deliverables.list |
exists |
| a link using it | ui-web/src/features/transcript/TranscriptPage.tsx (tile), ui-web/src/features/workspace/WorkspacePage.tsx (viewer header) |
missing; the tile only HEADs it |
The fix, and why it is not filed as a PR
An anchor on the delivered tile -- <a href={download_path} download> -- and the same in the viewer header for a file that is a deliverable. No backend change is needed; the route, the disposition and the wire field are all in place. It is entirely ui-web/, which is frozen at the time of filing, so this is recorded rather than opened. When the freeze lifts it is a small change with an existing string (gui.kb.download) to reuse or generalise.
Environment
macOS, raven from the repo working tree at current main, web UI. Seen with a delivered PNG and a delivered .pptx.
- Dominant language
- Python
- Stars
- 4.1k
- Forks
- 94
- Avg merge
- 10h 2m
- Merged PRs (30d)
- 376
Getting set up
This project ships no dev container, Dockerfile or contributing guide, so setting up is up to you: start from its README, and see our first-contribution guide for the general steps.
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from EverMind-AI/Raven
-
Difficulty 2/5 1-3 hours Newbie friendliness 82/100
EverMind-AI/Raven#798 ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 88/100
EverMind-AI/Raven#797 ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
EverMind-AI/Raven#640 ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 82/100
EverMind-AI/Raven#479 · 1 comment ·
Maintainers usually reply within 1 day
-
Difficulty 1/5 Under an hour Newbie friendliness 75/100
EverMind-AI/Raven#474 · 2 comments ·
Maintainers usually reply within 1 day
All issues in EverMind-AI/Raven
Similar issues
-
bug server
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
sportsdataverse/sportsdataverse-py#641 ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 82/100
googleapis/google-cloud-python#18532 ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
Maintainers usually reply within 1 day