What's Changed
- [PR] gate: fix upstream recorder leak causing real model gate deadlock (pipe inheritance) | gate: 修上游 recorder 泄漏导致真模型门禁卡死(管道继承) by @ranxianglei in #6671
- [PR] chore(branch): land 40 single-purpose fixes as one history-preserving batch (wave 5) by @ranxianglei in #6677
- [PR] fix: map search evidence offsets back to original Unicode text by @Afloat16 in #6494
- [PR] fix: interpret cache-diff byte offsets in original text coordinates by @Afloat16 in #6496
- [PR] fix: preserve null response bodies in the inline HTTP engine by @Afloat16 in #6502
- [PR] fix: preserve cancellation across native Request reconstruction by @Afloat16 in #6556
- [PR] fix: preserve caller cancellation before inline fallback by @Afloat16 in #6560
- [PR] fix: preserve Request fields during inline fallback by @Afloat16 in #6566
- [PR] fix: detach inline abort listeners after synchronous completion by @Afloat16 in #6575
- [PR] fix: reject proxy CONNECT handshakes on premature close by @Afloat16 in #6577
- [PR] perf: scan native compaction SSE frames in linear time by @Afloat16 in #6579
- [PR] fix(guardrails): preserve multimodal tool output order by @Afloat16 in #6581
- [PR] fix(proxy): apply configured CA trust to both TLS connectors by @Afloat16 in #6583
- [PR] fix(agent): account for Gemini REST inline media by @Afloat16 in #6585
- [PR] fix(web): avoid full-text arrays for message previews by @Afloat16 in #6593
- [PR] fix(proxy): preserve buffered data after CONNECT handshake by @Afloat16 in #6595
- [PR] perf(stream): serialize request evidence only for filtered JSON replies by @Afloat16 in #6597
- [PR] fix: align watermark scanner with JSON whitespace and number grammar by @Afloat16 in #6599
- [PR] fix: transform complete CloudCode SSE event payloads by @Afloat16 in #6603
- [PR] fix(storage): keep retired-message reactivation linear by @Afloat16 in #6604
- [PR] fix: replace egress plugin headers case-insensitively by @Afloat16 in #6606
- [PR] fix: discard header edits from failed egress plugins by @Afloat16 in #6608
- [PR] perf(storage): index session GC companion suffix lookups by @Afloat16 in #6611
- [PR] perf: index message lookups for fold image notes by @Afloat16 in #6612
- [PR] perf(storage): use a point lookup for session removal by @Afloat16 in #6615
- [PR] perf(storage): join block content in SQLite reads by @Afloat16 in #6618
- [PR] fix: parse and rewrite complete core-loop SSE payloads by @Afloat16 in #6619
- [PR] fix(storage): report actual session cleanup ownership by @Afloat16 in #6622
- [PR] fix: forward complete Google response frames once by @Afloat16 in #6623
- [PR] fix(storage): count active blocks without loading content by @Afloat16 in #6626
- [PR] fix: keep CommandCode proxy tool calls inside the loop by @Afloat16 in #6627
- [PR] fix: cancel discarded compress-loop response bodies by @Afloat16 in #6630
- [PR] fix: preserve Google stream errors across loop rounds by @Afloat16 in #6631
- [PR] fix: canonicalize APIG query parameters before signing by @Afloat16 in #6484
- [PR] fix: bound memory for log time-window queries by @Afloat16 in #6487
- [PR] fix: decode zstd requests asynchronously when supported by @Afloat16 in #6489
- [PR] fix: return failure status when foreign block archives fail by @Afloat16 in #6498
- [PR] fix: keep compatibility field deletion on own JSON properties by @Afloat16 in #6500
- [PR] fix: normalize inline requests with Fetch semantics by @Afloat16 in #6563
- [PR] fix: stop inline upstream work when the response body is cancelled by @Afloat16 in #6571
- [PR] chore(branch): land 17 single-purpose fixes as one history-preserving batch (wave 6) by @ranxianglei in #6713
- [PR] fix(affinity): preserve parallel tool rounds across wire formats by @Afloat16 in #6660
- [PR] fix: filter long message histories without argument overflow by @Afloat16 in #6670
- [PR] fix: retain recent tool-use routing witnesses across clock changes by @Afloat16 in #6679
- [PR] perf: reuse the fork prefix index when inheriting ref state by @Afloat16 in #6683
- [PR] perf: index selected block IDs for external summary references by @Afloat16 in #6685
- [PR] fix: keep large cache size buckets within the argument limit by @Afloat16 in #6689
- [PR] fix: locate root message arrays in cache-diff attribution by @Afloat16 in #6691
- [PR] fix: keep Markdown inline code literal in handoff rendering by @Afloat16 in #6696
- [PR] fix: stop Markdown entity lines from looping in blockquote parsing by @Afloat16 in #6698
- [PR] fix: preserve image recovery for escaped JSON markers by @Afloat16 in #6701
- [PR] perf: rewrite fold coverage without repeated scans by @Afloat16 in #6705
- [PR] fix(proxy): honor equivalent IPv6 bypass addresses by @Afloat16 in #6708
- [PR] fix: preserve literal buffered SSE field semantics by @Afloat16 in #6654
- [PR] perf: bound the initial context profile sample by @Afloat16 in #6656
- [PR] perf(storage): build bounded boot file indexes incrementally by @Afloat16 in #6663
- [PR] perf: deduplicate captured subagent sessions in linear time by @Afloat16 in #6668
- [PR] perf: count preflight covered message characters in linear time by @Afloat16 in #6674
- [PR] feat: -c/--config named config — select a same-named .json in the config directory by name only | feat: -c/--config 命名配置 — 纯名字选中配置目录里的同名 .json by @ranxianglei in #6711
- [PR] ci: add real npm layout e2e for self-update (#6643 regression class now covered by CI) | ci: 自更新补真实 npm 布局 e2e(#6643 回归类从此 CI 兜底) by @ranxianglei in #6676
- [PR] chore(branch): land 14 single-purpose fixes as one history-preserving batch (waves 7+8) by @ranxianglei in #6758
- [PR] fix(web): preserve frozen message whitespace on retrieval by @Afloat16 in #6718
- [PR] fix: preserve null historical rows in full JSONL exports by @Afloat16 in #6725
- [PR] fix: export CCR originals instead of reference metadata by @Afloat16 in #6727
- [PR] perf: batch message bodies for storage readers by @Afloat16 in #6733
- [PR] fix: retry unreadable cache keepalive responses by @Afloat16 in #6735
- [PR] fix: keep whole-message inserts out of semantic appends by @Afloat16 in #6738
- [PR] fix: cancel invalidated keepalive timers on credential rotation by @Afloat16 in #6739
- [PR] fix: read logger attribution tags in cache usage by @Afloat16 in #6742
- [PR] fix: retain nested transport codes in upstream health reports by @Afloat16 in #6743
- [PR] perf: meter streamed handoff replies incrementally by @Afloat16 in #6748
- [PR] fix(ci): intermediate pushes marked [ework:ci-held] no longer trigger PR CI (only the final push triggers a full run) | fix(ci): [ework:ci-held] 标记的中间 push 不再触发 PR CI(最终 push 唯一全量) by @ranxianglei in #6784
- [PR] kernel: let content-free BLOCKED partners close their turn (#6709) by @ranxianglei in #6754
- [PR] 0.1.214 Flush to disk twice before each forwarding round: skip the second no-op ingest when state is unchanged (#6780) | 0.1.214 每轮转发前落盘两次:状态没变时跳过第二次的空转 ingest(#6780) by @ranxianglei in #6791
- [PR] Gate tool added to repo: full real-model gate container + config-driven launcher | gate 工具进仓库:完整真模型 gate 容器 + 配置驱动启动器 by @ranxianglei in #6798
- [PR] release v0.1.215 by @github-actions[bot] in #6793
Full Changelog: v0.1.214...v0.1.215