Skip to content

v0.49.27

Choose a tag to compare

@github-actions github-actions released this 28 Oct 10:14
· 130 commits to master since this release

v0.49.27

This patch stops Magic Context from deleting data for sessions another OpenCode instance owns, and fixes four smaller issues: a historian retry loop, an OpenCode 2 memory leak, a Windows doctor false refusal, and a dreamer check that threw away good results.

Upgrading

  • Restart OpenCode or Pi after updating. No database migration is needed.

Fixed

  • Sessions deleted when several OpenCode instances share one store (#782, thanks @OlegAndreych): a background sweep treated any session missing from the local OpenCode database as deleted and removed its Magic Context data, including its history summaries. When several OpenCode instances share one Magic Context store, for example in Docker sandboxes or with separate data folders, each instance deleted the others' idle sessions.
    • The sweep is gone. Magic Context no longer deletes a session's data because it can't find the session.
    • What still deletes data: deleting a session in OpenCode cleans up its Magic Context data, as before.
    • Sessions you deleted while Magic Context wasn't running: their data now stays in the store.
  • Historian retrying the same failed chunk (#802, thanks @manorit2001): when a historian run finished without being able to publish anything, the next trigger could send the same messages to the model again, paying for the same rejection each time.
    • What happens now: after such a run, automatic runs wait until the session has a newer message.
    • What still runs: the near-full-context and emergency paths still get one attempt, and /ctx-recomp and wrap-up work as before.
    • Hosts: OpenCode and Pi.
  • OpenCode 2 holding the first request's messages in memory (#800, thanks @null-axiom): the transform kept a reference to the first request's full message list, attachments included, for the server's whole lifetime, once per OpenCode 2 location. Each request's messages are now released when the request ends. What is sent to the model doesn't change.
  • Windows doctor refusing because of its own command line (#799, thanks @mcheiyue): doctor checks that no host process holds the database before opening it. On Windows it matched "opencode" anywhere in a process's command line, so doctor --harness opencode, or any tool started with a path like D:\OpenCode, counted as a running host. Doctor now recognizes a host by the program it runs, or by the script Node, Bun or Deno runs, never by argument values. A process doctor can't identify still blocks the check, as before.
  • Dreamer discarding a valid memory check (#803, thanks @Harry-zklcdc): a correct verification reply can be very short when it covers a single memory. The dreamer treated any reply of 32 tokens or fewer as a provider outage before reading it, discarded it, and tried the fallback models. It now accepts a complete, well-formed reply that covers exactly the memories it asked about. A short reply that's malformed or covers the wrong memories still counts as an outage.