Problem
Today pkg/chat.MessagePartTypeFile{Path,...} hard-codes a local FS path; only images flow end-to-end; PDFs work only via Anthropic's bespoke FileManager; audio/video are silently dropped by every non-Anthropic converter. Embedders (pkg/app, pkg/cli) hand-roll resize+base64+data-URL before the runtime sees anything. No storage abstraction, no per-alias capability matrix, no cleanup wiring.
What we're building
A single chat.Document + pluggable attachment.Sources on LocalRuntime + pure attachment.Decide over per-alias capability tables + per-alias AliasProfile (caps, prefs, uploader, image constraints). Newly enables PDFs across all PDF-capable aliases, audio on Gemini/OpenAI, video on Anthropic/Gemini/Vertex AI, clean text inline with size-aware promotion. Tenant isolation by construction via per-request runtime in serve api.
Detailed design
https://gist.github.com/simonferquel-clanker/4848e15f66cc0c271f8c7ac1847263b3
Delivery plan (5 PRs)
Problem
Today
pkg/chat.MessagePartTypeFile{Path,...}hard-codes a local FS path; only images flow end-to-end; PDFs work only via Anthropic's bespokeFileManager; audio/video are silently dropped by every non-Anthropic converter. Embedders (pkg/app,pkg/cli) hand-roll resize+base64+data-URL before the runtime sees anything. No storage abstraction, no per-alias capability matrix, no cleanup wiring.What we're building
A single
chat.Document+ pluggableattachment.Sources onLocalRuntime+ pureattachment.Decideover per-alias capability tables + per-aliasAliasProfile(caps, prefs, uploader, image constraints). Newly enables PDFs across all PDF-capable aliases, audio on Gemini/OpenAI, video on Anthropic/Gemini/Vertex AI, clean text inline with size-aware promotion. Tenant isolation by construction via per-request runtime inserve api.Detailed design
https://gist.github.com/simonferquel-clanker/4848e15f66cc0c271f8c7ac1847263b3
Delivery plan (5 PRs)
pkg/attachment+pkg/chat.Document+ mandatoryWithAttachmentSourceResolverOpt + testsFileManager→memstore.FileIDStoreImageConstraintsLocalRuntimeregistry + TUI/CLI plumbing + per-request runtime inserve api+ deprecateMessagePartTypeFile