Skip to content

Releases: cortexkit/magic-context

v0.30.4

Choose a tag to compare

@github-actions github-actions released this 01 Jul 23:32

v0.30.4

Patch release fixing two issues, one of them breaking historian and dreamer runs for many Pi users.

Pi: historian and dreamer can now use models from provider extensions

Pi subagents (historian, dreamer, sidekick, recomp) were spawned with extension discovery disabled. If your configured model came from a provider extension — Antigravity, Anthropic OAuth, or any other auth extension — every subagent run failed instantly with Model "..." not found, so the historian and dreamer never ran at all. Models defined in models.json were unaffected, which is why this only hit extension-based setups.

Subagent processes now load your extensions, so extension-provided models resolve the same way they do in your interactive session. What changed underneath:

  • Recursion protection moved from disabling all extensions to a targeted guard: the full Magic Context extension detects it is inside a Magic Context subagent and stays inert there.
  • Every subagent now runs under an explicit per-agent tool allow-list. Unknown agents get no tools at all. Extension tools you have installed cannot leak into a subagent that was not meant to use them.
  • Dreamer code-reading tasks (memory mapping, verification, docs maintenance, primer investigation) now get AFT's read-only navigation tools on Pi when the AFT extension is installed, matching OpenCode.

Pi: retrospective and refresh-primers read sessions through the right API

The Pi dreamer's session readers probed an API that does not exist in pi-coding-agent (SessionManager.listSessions), so the retrospective task failed with Pi session APIs unavailable and refresh-primers silently fell back to closed-book seeds. Both providers now share one resolver using the real API (SessionManager.listAll + parseSessionEntries), with tests against the installed package so a future Pi API change fails in CI instead of degrading quietly.

OpenCode: the sidebar entry in tui.json is yours again

The plugin used to re-add its TUI sidebar entry to tui.json(c) on every OpenCode start. If you removed the sidebar deliberately, it came back on the next launch. The entry is now written only by the setup wizard and doctor — removing it from tui.jsonc disables the sidebar permanently.

v0.30.3

Choose a tag to compare

@github-actions github-actions released this 01 Jul 14:01

v0.30.3

A patch release fixing the Pi retrospective dream task, the /ctx-embed loop on oversized compartments, and adding a log-path override.

Fixes

  • Pi retrospective dream task no longer fails silently (#201). On Pi, the retrospective task called pi-coding-agent session APIs that don't exist (SessionManager.listSessions and a public loadEntriesFromFile), so it threw "Pi session APIs unavailable" every run and reported "Skipped (no work)" — meaning Pi users got no retrospective learning at all. It now uses the correct SessionManager.listAll and reconstructs entries via the public parseSessionEntries. Thanks to @kachook for the fix.

  • /ctx-embed no longer stalls on oversized compartments (#206). When a single canonical line inside a compartment (for example a large file dump rendered into one message) was larger than the embedding model's context window, it was sent whole and the provider rejected it — so that compartment could never embed and /ctx-embed reported no progress. Oversized lines are now split down to the window budget before embedding, and empty inputs are coerced to a single space so one blank string can't fail the whole batch. Thanks to @randomvariable for the fix.

Additions

  • MAGIC_CONTEXT_LOG_PATH overrides the diagnostic log location (#183). Set this environment variable to redirect magic-context.log away from the default temp-dir path — useful in Docker/CI where the temp dir is disposable, or to point the plugin and dashboard at a shared file. Blank is treated as unset. Both the plugin and the dashboard log tail honor it. Thanks to @kecsap for the feature.

Docs & internals

  • Documented the system_prompt_injection and keep_subagents config keys, which were in the schema but missing from the configuration reference.
  • Removed the stale compressor config stanza from the configuration docs (the LLM-compressor subsystem was replaced by the decay renderer; the schema already rejected the key, so IDEs flagged it) (#204).
  • Fixed a test-isolation mock leak so the memory test directory passes when run on its own.

v0.30.2

Choose a tag to compare

@github-actions github-actions released this 29 Jun 10:33

v0.30.2

A patch release fixing high idle CPU from the TUI sidebar.

Fixes

  • High idle CPU from the TUI sidebar (#200). The sidebar polled the plugin every 500ms over a localhost connection. Because the TUI and the plugin run in separate runtimes inside the same process, each poll opened a brand-new loopback connection, so an idle session kept burning CPU continuously (a few percent on fast machines, noticeably more on slower ones, and additive when other sidebar plugins were also installed). The sidebar now holds a single persistent WebSocket to the plugin and receives updates the instant they happen, instead of polling. Idle CPU drops back to baseline. Thanks to @null-axiom for the report and the cross-plugin cross-check that pointed at the shared mechanism.

    As part of this, the plugin's detection of whether a TUI is connected is now based on the live connection itself rather than a recent-poll timeout, so server-initiated dialogs (/ctx-status, /ctx-recomp, the upgrade prompt) route to the TUI reliably instead of depending on timing.

v0.30.1

Choose a tag to compare

@github-actions github-actions released this 28 Jun 13:08

v0.30.1

A patch release fixing local embeddings on OpenCode Desktop.

Fixes

  • Local embeddings work on OpenCode Desktop (#195). /ctx-embed failed on the Desktop app with Unsupported device: "cpu". On Electron, Magic Context supplies its own WebAssembly ONNX runtime (to bypass a native-module load failure), but that made @huggingface/transformers skip its device registration, so every device selection threw. The embedding pipeline now selects the runtime explicitly on that path, and resolves the local WASM assets correctly instead of falling back to a remote URL. Local embeddings load and run on Desktop again. Thanks to @Treeed for the precise, source-grounded report.

v0.30.0

Choose a tag to compare

@github-actions github-actions released this 28 Jun 08:53

v0.30.0

Setup and doctor now recognize OpenCode Desktop installs that have no CLI, the TUI sidebar badge matches your theme again, and the doctor plugin-cache check is more reliable. Also a dependency refresh (newer OpenCode and Pi SDKs) and security updates.

Fixes

  • Setup and doctor recognize OpenCode Desktop without a CLI (#196). Installing OpenCode only through the Desktop app leaves no opencode binary on PATH (its server runs inside Electron), so setup reported "OpenCode not found" and refused to continue, and model discovery came up empty. Setup and doctor now detect a Desktop-only install and continue with manual model entry instead of claiming OpenCode is absent. A stock CLI installed outside PATH (for example under a version manager) is also found and used for model discovery. Thanks to @Treeed for the report.
  • TUI sidebar badge color follows your theme again (#198). On dark themes the Magic Context badge rendered white text while sibling badges (such as AFT) rendered the theme's own background color, so the two looked inconsistent. The badge now uses the theme background like the others, with a safety fallback for transparent-background themes so the label can never disappear. Thanks to @null-axiom for the report.
  • doctor clears a stale plugin cache reliably (#199). The cache check compared the cached plugin against the CLI's own version rather than the plugin's latest published version, so a stale @latest cache could survive when run through an older cached CLI. It now compares against the plugin's npm-latest, clears the versionless cache root as well, and preserves the cache (rather than clearing it) when the version check is offline. Thanks to @coleleavitt for the fix.

Maintenance

  • Refreshed dependencies and resolved several security advisories, including newer OpenCode (@opencode-ai/plugin, @opencode-ai/sdk) and Pi (@earendil-works/pi-coding-agent, @earendil-works/pi-tui) SDKs.

Dashboard dashboard-v0.9.1

Choose a tag to compare

@github-actions github-actions released this 28 Jun 13:20

Dashboard v0.9.1

A patch release fixing model discovery for pnpm-installed OpenCode on Windows.

Fixes

  • Finds a pnpm-installed OpenCode CLI on Windows (#149). pnpm places global binaries at %LOCALAPPDATA%\pnpm\bin\opencode.cmd, which is not on the GUI process's PATH and was not in the set of locations the dashboard checks, so model dropdowns came up empty for pnpm users. That path (and the pnpm store location) is now included, so the dashboard discovers and queries a pnpm-installed OpenCode. Verified on Windows. Thanks to @nielpattin for the report and diagnosis.

Maintenance

  • The updater manifest now pins download URLs to each release tag, so Desktop auto-update keeps working regardless of which package release is GitHub's "latest" (the earlier broken manifest was already corrected in place).

Dashboard dashboard-v0.9.0

Choose a tag to compare

@github-actions github-actions released this 28 Jun 09:28

Dashboard v0.9.0

Adds a browser mode so the dashboard works on Linux and WSL2 setups where the desktop window comes up blank, and recognizes OpenCode Desktop installs that have no CLI.

Features

  • Browser mode (--serve). On some Linux distributions and under WSL2 the desktop window opens blank (often with Could not create default EGL display) because the bundled WebView cannot start against the host's graphics stack. The same binary can now run as a local web server instead: magic-context-dashboard --serve prints a URL (with a one-time access token) that you open in your normal browser, bypassing the embedded WebView entirely. It binds 127.0.0.1:9077 by default; --serve <port> changes the port, and --host 0.0.0.0 --allow-remote exposes it to other machines (off by default, behind an explicit flag, since the dashboard can read transcripts and edit config). See the dashboard docs.

Fixes

  • Recognizes OpenCode Desktop installs without a CLI (#196). Installing OpenCode only through the Desktop app leaves no opencode binary to query, so model dropdowns came up empty with no explanation. The dashboard now detects a Desktop-only install and lets you type a model id manually, with a hint explaining why auto-population is unavailable. A stock CLI installed outside PATH is also found and used.

Maintenance

  • Pre-release hardening: --serve API responses are marked no-store, and Desktop detection has more robust path fallbacks when environment variables are unset.

v0.29.1

Choose a tag to compare

@github-actions github-actions released this 27 Jun 11:39

v0.29.1

A small patch release: fixes a multi-project Desktop warning, a tool-call edge case for GPT-family models, and simplifies an internal nudge path.

Fixes

  • No more MaxListenersExceededWarning on OpenCode Desktop with several projects open. Each plugin instance was registering its own process-exit listener; past Node's 10-listener default this logged a warning. All instances now share a single exit listener.
  • ctx_note defaults to read correctly for GPT-family models. Models that fill every optional parameter (sending content: "" for a read) made ctx_note infer a write and reject the empty content. It now infers write only on non-empty content.
  • Pi resolves OpenAI and Google models from a shared OpenCode/Pi config. OpenCode and Pi name a few providers differently (openai vs openai-codex, google vs google-antigravity); a model configured in one harness' form is now translated automatically so the same shared config works on both. Anthropic and other providers were already identical.
  • Dreamer "last run" time is accurate again (#194). After upgrading to Dreamer V2, the sidebar and /ctx-status showed a frozen timestamp from the old V1 dream cycle even though V2 tasks were running nightly. They now read the most recent task run, so the displayed time tracks real execution. Thanks to @wjiuxing for the precise report.

Internal

  • Channel 2 ceiling nudges now deliver through the in-process client OpenCode hands the plugin instead of a separate live-server client + reachability probe (the upstream duplicate-runner bug the workaround guarded against is fixed in OpenCode ≥ 1.17.7). As a side effect they also work on plain TUI now.
  • Removed dead code and a circular import (storage-dbmigrations) surfaced while dogfooding our code-health tooling.

Dashboard dashboard-v0.8.3

Choose a tag to compare

@github-actions github-actions released this 27 Jun 18:18

Dashboard v0.8.3

Fixes

  • OpenCode model dropdowns no longer hide your configured providers. Model discovery briefly used opencode --pure models, which skips external plugins and so omitted providers registered by auth plugins (e.g. anthropic, google). The pickers now use the full opencode models list, restoring every provider you have set up.
  • Wider model pickers. The model selectors (and the "Add fallback model" dropdown in particular) were cramped and wrapped their options. They now fill the column.
  • Cleaner Cache Diagnostics. Removed the combined "Show all" view: the page always focuses a single session's cache timeline instead of merging every session into one chart, which made the numbers confusing. A session is always selected; clicking a card focuses it.

Maintenance

  • Updated the Tauri stack to the latest 2.x and refreshed dependencies, resolving several security advisories.

Dashboard dashboard-v0.8.2

Choose a tag to compare

@github-actions github-actions released this 27 Jun 11:53

Dashboard v0.8.2

New

  • Primer candidates are now visible. The Primers page shows a read-only Candidates section beneath the promoted primers: standing questions the historian has recorded that have not yet recurred often enough to be promoted. Previously the page looked empty until a primer was promoted, even when candidates were accruing. The empty state now explains the recurrence requirement, so the page is self-describing.