Skip to content

v0.29.0

Choose a tag to compare

@github-actions github-actions released this 26 Jun 15:14
· 2508 commits to master since this release

v0.29.0

Adds smart drops (opt-in): content-aware reclaim that frees more context on long, edit-heavy sessions by dropping tool output a later call has made obsolete, instead of only the oldest output. Also stops the nightly docs maintainer from flattening hand-written ARCHITECTURE.md / STRUCTURE.md, and unifies commit detection so its three call sites can't drift apart.

Features

  • smart_drops: reclaim superseded tool output, not just the oldest (opt-in, default off). The normal auto-drop reclaims the oldest tool outputs first when a session gets long. Smart drops adds reclaim by supersession: output that a later call has made obsolete, regardless of age:

    • Superseded edits are the big one. When you edit the same file more than once, the older edits' full diffs are dead weight, but dropping them entirely loses the record that the file was touched. Smart drops keeps the newest edit in full and compresses each older edit to a marker that preserves its filePath and a short hint of the region, so the agent still sees which file and region it changed.
    • Spent control-plane output: older todowrite snapshots (the live task list is kept), older ctx_reduce calls (the most recent few are kept), and zero-value status output (bash_status, bash_kill, ctx_note reads) are dropped once superseded.

    It only ever acts during a transform pass that is already rewriting the message array, so it never causes a prompt-cache miss on its own, and every drop uses the same deterministic placeholder as the normal drops so cached turns stay byte-identical. When smart_drops is off (the default), the messages sent to the model are byte-for-byte identical to previous versions: the whole feature is inert until you turn it on. Enable it with "smart_drops": true (it's also a toggle in the dashboard's Advanced config). It's experimental and stays off by default while cache stability is validated in the wild; if you run long, edit-heavy sessions and want to reclaim more context, it's worth turning on. One note: once enabled, every binary that shares your Magic Context database (multiple OpenCode instances, or OpenCode + Pi) should be on this release or newer.

Fixes

  • The nightly docs maintainer no longer flattens hand-written architecture docs. The maintain-docs dreamer task was rewriting dense, hand-authored ARCHITECTURE.md / STRUCTURE.md into its generic boilerplate template, dropping hard-won detail (invariants, edge cases, subsystem specifics) even though only a few sections had actually drifted. It now treats an existing doc as the source of truth for shape: it makes the smallest edits that re-sync the changed sections with the code and preserves the existing structure, depth, and voice, rather than regenerating the whole file. The creation-from-scratch templates are unchanged.

  • Commit detection unified across its three call sites. The historian's commit-cluster trigger, the note-nudge "a commit just happened" boundary, and the Pi note detector each carried their own hash + keyword patterns that had quietly drifted apart (different hash lengths, different keyword sets). They now share one definition, so a commit is recognized consistently everywhere.

  • With memory.enabled: false, the ctx_memory tool and its guidance are no longer presented. Previously, even with memory off, the agent was still given the ctx_memory tool and told to "save to memory proactively", but with memory off the <project-memory> block is never injected, so anything it wrote could never resurface, making those writes silent busywork. The tool and all its guidance are now omitted when memory is off. ctx_search stays available (it still searches your conversation history and indexed git commits, just not memories).

  • Fixed a crash in the WASM sandbox that runs compiled smart-note checks. When two projects' nightly smart-note sweeps overlapped (common at multi-project startup), the shared sandbox could throw QuickJSUseAfterFree: Lifetime not alive and fail the check. Sandbox runs are now serialized, so a check that pauses for a file read or network request can no longer corrupt a concurrent one.

  • Pi: the ctx_memory tool now stays consistent when you switch projects. In a single Pi session that moves between projects (one with memory enabled, one without), the tool could end up registered for the wrong project's setting. It is now always registered and gates per-project at call time, matching what the prompt advertises for the current project.

Docs

  • Added Chinese (Simplified & Traditional), Korean, and German README translations.