we added drag and drop for files in the web client, alongside the existing image support. the whole chat acts as a drop target, and paste and the picker accept files too. images keep their previews; other files get removable cards with their name and size. the previews and cards replace the inline text markers in the draft and chat.
other files use the same storage and cleanup as saved pastes. the model gets a path it can read, while the chat shows the filename; those storage paths stay out of messages, titles and previews. files expire after 14 days by default and currently need a local workspace. images still work remotely.
attachments stay with their messages as you move around the app. changing boards doesn't lose them, retrying a send doesn't mean picking them again, and stopping a turn brings queued messages back to the composer with their files. the browser allows 10 images and 10 other files, with 20 MiB shared between them.
attachment tests pass, have used it with a variety of file types. the full gate hit the unrelated proxy test needing my occupied port 4318; the remaining go e2e tests pass with that case skipped.