From 959bd5a1f0716929910e53465797caf37a399862 Mon Sep 17 00:00:00 2001 From: Eric Lee Date: Sat, 16 May 2026 11:33:00 -0700 Subject: [PATCH] docs(readme): shorten 2026-05-16 image-handling-parity news item Bring it in line with the length of the surrounding entries: four facts joined by semicolons, no inline rationale or low-level implementation details. The longer write-up lives in the PR descriptions for #149/#154/#155/#156. Co-Authored-By: Claude Opus 4.7 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 96f932a..0b0bfd5 100644 --- a/README.md +++ b/README.md @@ -42,7 +42,7 @@ python -m src.cli # start the REPL ## πŸ“° News - **2026-05-16:** **Codebase stats** β€” Total Python files: 894 files; Total Lines of Python Code: **177,428 lines** (up from 167,034 lines on 2026-05-14; ~+10.4k lines in two days, mostly ESC-cancellation hardening + image-handling parity). -- **2026-05-16:** **Image-handling parity (Tier C, #149/#154/#155/#156)** β€” Read tool ported the TS image pipeline (magic-byte format sniff, bounded byte read, resize/compress to the 3.75 MB / 1568 px envelope, base64 size validation); `@image.png` @-mentions now inline as real `ImageBlock` content (the prior text-mode read shipped mojibake the model latched onto); image `tool_result` list shape preserved end-to-end through `_dispatch_single_tool`; OpenAI-compat / GLM / Minimax / DeepSeek / OpenRouter now translate Anthropic `image` and `document` blocks into `image_url` / `file` shapes (with `tool_use_id` correlation across the toolβ†’user split); `validate_images_for_api` promoted into `BaseProvider._prepare_messages` so every provider validates client-side; BOM-aware text decoding (`utf-16` / `utf-32` / `utf-8-sig`) handles Windows-emitted Unicode files without mojibake. +- **2026-05-16:** **Image-handling parity (Tier C, #149/#154/#155/#156)** β€” Read tool TS image pipeline (sniff, resize/compress, base64 cap); `@image.png` mentions inline as real `ImageBlock`s instead of mojibake; cross-provider Anthropic `image`/`document` β†’ OpenAI `image_url`/`file` translation; pre-API base64 size validation in `BaseProvider`. - **2026-05-16:** **Subagent + Bash reliability** β€” custom subagents now discovered from `.claude/agents/` (#151); Bash `tool_result` distinguishes timeout from ESC-abort so the model can tell the two apart (#152); async-subagent `AbortController` isolation pinned by regression tests so a parent's ESC doesn't fire a sibling's abort listeners (#153); cancelled `tool_result` reliably surfaces `REJECT_MESSAGE` on the production path (#150). - **2026-05-15 to 2026-05-16:** **ESC cancellation hardening across providers (#144–#148)** β€” mid-stream cancellation closes the streaming HTTP response within ~50ms for every supported provider (Anthropic, OpenAI, GLM, Minimax, DeepSeek, OpenRouter); shared `StreamAbortGuard` helper extracted; LiteLLM worker-thread iteration fixes long-tail hangs on OpenAI-compat backends. - **2026-05-14:** **ESC cancellation latency fix (#130)** β€” pressing ESC now cancels in-flight Bash commands and streaming responses within ~50ms, on top of the diff color-bar full-width render fix (#129) and the bypass-permissions outside-paths fix (#128).