|
| 1 | +# v0.26.0 |
| 2 | + |
| 3 | +A performance release for large, long-running sessions: per-message transform overhead is **at least 2× lower on typical passes, and up to ~10× lower on the heavy ones** (when history summarization fires). Also removes a source of confusing "model not found" errors by dropping the built-in model fallback chain, fixes prompt-cache and Anthropic thinking-block issues, and folds in three community fixes. |
| 4 | + |
| 5 | +## Faster on large sessions |
| 6 | + |
| 7 | +Every message you send runs Magic Context's transform, and on very large sessions (hundreds of thousands to millions of tokens) several steps in that path were scaling with the *whole* session instead of just the live tail. They've been scoped to read only the part that can actually change. Measured on a real ~2M-token session, the typical per-pass transform cost roughly halved (median ~220 ms → ~95 ms), and the worst passes improved far more. |
| 8 | + |
| 9 | +- The summarization trigger and message-tagging now read only the live conversation tail, not the entire tag history. On that session this cut the trigger's per-pass cost from ~70 ms to low single digits and tagging from ~38 ms to well under a millisecond. |
| 10 | +- When history summarization actually fires, it no longer blocks the turn while it gathers and prepares its input — that preparation read raw history straight off disk on the main path and could stall a large session for **several seconds** before the model even started responding. It now reads only the tail it needs (~9.6 s → ~150 ms on that session). |
| 11 | + |
| 12 | +Net effect: noticeably less lag per message on big sessions, and no multi-second pause when summarization kicks in. |
| 13 | + |
| 14 | +## No more surprise models: the built-in fallback chain is gone |
| 15 | + |
| 16 | +The historian and dreamer agents had a built-in fallback chain — a hardcoded list of models across several providers, tried automatically when the configured model failed. If you only have one provider, *every* entry in that chain was a "model not found", producing a burst of confusing errors (e.g. `Model not found: opencode/gemini-3.1-pro` for someone who never configured Gemini). |
| 17 | + |
| 18 | +Fallbacks are now **only what you configure**. If a hidden agent's model fails, Magic Context tries the `fallback_models` you set for it (if any) — never a model you don't have. The historian additionally falls back to your active session model as a last resort; with nothing configured, a failing model just retries cleanly instead of cascading through providers you've never used. |
| 19 | + |
| 20 | +To make a genuinely failing model visible, `doctor` now has a **Historian runs** section that records every summarization run (success / failure / no-op) and is never reset — so a "fails several times, then succeeds" pattern is no longer hidden by a counter that clears on every success. |
| 21 | + |
| 22 | +## Anthropic thinking-block & prompt-cache fixes |
| 23 | + |
| 24 | +- **Stale "[cleared]" thinking blocks.** When Magic Context clears the text of an old reasoning/thinking block to save space, it could leave a `[cleared]` placeholder paired with the block's original cryptographic signature — a content/signature mismatch that some Anthropic-family routes (direct Claude, Bedrock-Claude, proxied Claude) can reject. Clearing is now safe on every provider: on canonical Anthropic the block is dropped before the wire, on other OpenCode providers the reasoning is left untouched, and on Pi the block is emptied so the serializer drops it. The latest turn's reasoning is never touched on either harness. (#162) |
| 25 | +- **Fewer prompt-cache busts.** A hard cache rebuild (model switch, idle timeout, memory change) now also drains any pending content drops in the same pass, instead of forcing a second rebuild a turn later. And a compartment with no embeddable raw text (e.g. a tool-only span) no longer loops the background embedder forever on Desktop. |
| 26 | + |
| 27 | +## Community fixes |
| 28 | + |
| 29 | +- **TUI crash on the recompile/upgrade progress panel (#168).** A reactive race could dereference a momentarily-null progress value and crash the TUI. Fixed. (Thanks @jiuxingwang.) |
| 30 | +- **`historian.disallowed_tools` for weak models (#166).** Some weak instruction-following models get stuck in tool-calling loops when tool definitions are present. You can now strip tools from the historian's request (`["*"]` removes all); the historian gets its full prompt inline and doesn't need them. (Thanks @tobwen.) |
| 31 | +- **Pi-only `thinking_level` leaking into OpenCode agent config (#167).** It's now stripped from all three hidden agents. (Thanks @tobwen.) |
| 32 | + |
| 33 | +## Also in this release |
| 34 | + |
| 35 | +- **`doctor migrate-session` — re-home a session to another project.** A new interactive command to move a session (and, optionally, the memories it created) from one project to another, with a dry-run preview. `npx @cortexkit/magic-context doctor migrate-session --session <id> --to <dir>`. |
| 36 | +- **Asymmetric embedding models (#155).** Embedding providers that distinguish query vs. document input types are now driven correctly per call (`query_input_type`), without invalidating your stored vectors. |
| 37 | +- **Release tooling fails fast.** The dashboard release script now surfaces a failed build leg immediately instead of waiting out the slow legs first, and the build is hardened against transient crates.io network drops. |
0 commit comments