mirror of
https://github.com/getpaseo/paseo.git
synced 2026-07-29 12:01:31 +00:00
* feat(providers): render images Claude Code emits instead of base64 Claude returns images as base64 blocks inside tool_result content; they were dumped into the tool output as a wall of raw base64 text. Materialize them to a temp file and emit an assistant_message markdown image — the path Codex already uses — so the client fetches the bytes over the existing WebSocket binary-frame channel. No protocol or client change; assistant_message is an existing type. Also strips the base64 out of the failed-tool-call error field, and widens the Claude history-replay filter so the image survives reload. Collapses the image writer Codex had duplicated twice into one shared materializeProviderImage. * fix(providers): match only materialized image paths in the history filter The history-replay filter recognized a provider image by a leading "![". Review flagged that user-authored text starting with an image-markdown pointing at the attachments dir could then replay as assistant output. Tighten the predicate to the content-hashed <sha256>.<ext> shape the writer actually emits, so only materialized images pass. * fix(providers): handle Windows paths in the image-markdown predicate On Windows the materialized image path uses backslash separators, and escapeMarkdownImageSource doubles each backslash in the markdown source. The history-replay predicate matched a single separator, so on a Windows daemon the image was dropped on reload; the test path assertions failed for the same reason. Allow one-or-more separators in the predicate, unescape the source in the test helper, and add a Windows-path case to the predicate test.