Hacktoberfest 2026: the issues maintainers tagged for October, open and beginner-friendly. Browse Hacktoberfest issues

A delivered file has no download control in the page, though the backend already serves it as an attachment

Open
#473 0 comments 0 reactions 0 assignees View on GitHub

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

  1. Ask the agent for a file (a deck, a rendered image) so it appears under "Delivered this turn" and in the deliverables shelf.
  2. 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 is showFile(p): the inline viewer, served from /file?path=... with Content-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

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from EverMind-AI/Raven

All issues in EverMind-AI/Raven

Similar issues

More Python issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.