Skip to content

v0.46.0

Choose a tag to compare

@github-actions github-actions released this 08 Jul 11:50
· 2122 commits to main since this release

AFT v0.46.0

96 commits since v0.45.1. This release hardens the daemon (subc) execution path end to end, fixes a broken TUI sidebar on current OpenCode versions, and unifies storage resolution across all entry points.

OpenCode TUI sidebar fix

OpenCode 1.17.x stopped applying its Solid compile-time transform to plugins loaded from the package cache, which broke the AFT sidebar in two ways: installs with a stale plugin cache failed at import, and fresh installs rendered once and froze (values never updated). The TUI is now precompiled at build time against the host's runtime modules, with a loader that falls back to raw TSX for older hosts and development checkouts. The release pipeline gained a packed-install smoke test that verifies the compiled path is reactive, so this class of breakage cannot ship silently again.

Daemon path hardening

The subc transport arc that started in v0.45 is now production-shaped:

  • Typed elicitation capability: bash permission prompts over MCP hosts (e.g. Claude Code) activate from the consumer_capabilities field introduced in subc-protocol 0.8. Hosts that do not declare the capability fail closed.
  • Bind responsiveness under load: artifact-owner heartbeats moved off the per-root mutating lane to a dedicated timer thread; maintenance drains are decomposed into bounded jobs with batch caps; a pending bind now defers maintenance for its root instead of queueing behind it; and overdue binds receive an explicit deadline error instead of hanging.
  • A production-shaped rebind storm test rig (multiple roots and sessions rebinding over a slow embedding backend) now gates releases, asserting bind acknowledgment, tool, health, and completion push latencies.
  • Killed daemons on Windows surface as connection resets rather than clean EOF; the module now treats both as a clean close, matching Unix behavior.

One storage universe

Plugin-less invocations (the daemon-supervised module, aft warmup, bare CLI) resolved storage to the legacy ~/.cache/aft fallback instead of the CortexKit data root the plugins use. Each front paid its own cold indexes, and artifact-owner leases could not see each other across the split. All fallback sites now resolve to the same CortexKit data root, locked by a regression test.

Search and inspect

  • Cross-root search (multi-project sessions) now serves borrowed indexes with drift warnings instead of failing when checkouts differ in untracked ignore files; nonexistent paths return path_not_found.
  • Duplicate detection has a 10-line minimum span, ending flags on 3-4 line idiomatic blocks. The dead inspect.duplicates config knobs were removed.
  • Cheaper directory outlines (top-level symbols only) and callgraph summaries (top-15 with a summary line past 20 entries), with tests hidden by default across both.

Fixes

  • Search index changes now persist on clean shutdown. The in-memory trigram delta is flushed to the shared cache when a bridge or daemon module exits cleanly, so restarts and cross-worktree searches see current results instead of the state at the last background compaction.
  • TUI sidebar now works when the TUI is attached to a serve/Desktop host from a different directory. The sidebar's status lookup and push subscription follow the session's verified project directory to the process that actually hosts the bridge, instead of staying stuck on the lazy-spawn placeholder.
  • aft_delete accepts stringified booleans for recursive (and all boolean tool parameters coerce consistently).
  • Batch edits[] support on Pi's edit tool, matching OpenCode.
  • aft_outline accepts array-coerced target parameters.
  • Bash pipelines route to raw generic output instead of risking failure-hiding head-token compression; empty command output is never fabricated into non-empty summaries.
  • Grep-nudge no longer fires on suppressed-output commands.
  • The /aft-status dialog no longer resets the session's selected model on OpenCode Desktop.
  • Windows: fixed three CI-only test failures (verbatim path as git clone source, a process-global env-var race between parallel tests, and a resulting poison cascade).