Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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).
Expand Down