v0.39.1
v0.39.1: lighter background CPU, sharper Code Health, and a calmer bash watch
A patch focused on what AFT does while you work: the background scans cost far less CPU per edit, Code Health gets more accurate, and a couple of sharp edges are filed off.
Background scans barely touch your CPU now
Tier-2 (dead code, unused exports, duplicates) re-checked file freshness by re-hashing every file in the project on each change. It now compares file stat metadata and only re-reads the file that actually changed — about 10x less work per edit, and the gain grows with repository size. This is the background-CPU cost that large-repo users felt after every save.
A companion fix makes the watcher recover correctly when the OS drops filesystem events under load (a large checkout or branch switch): instead of silently missing changes, it falls back to a single project rescan.
Code Health accuracy
- Modules imported only for their side effects (
import "./setup") no longer make their exports look dead, and reachable code behind them is counted. - After a failed incremental refresh, stale call-graph rows are no longer projected as if fresh — dead-code results report honestly instead of showing wrong counts.
- Editing a
tsconfig/jsconfig(includingextendschains and a package's owntsconfigfield) now correctly invalidates dead-code and unused-export results that depend on path resolution. aft_searchreports files it couldn't read instead of silently counting them as zero matches.
Code Health speed
The call-graph cold build is about 13% faster, and the incremental call-graph reads, oxc reachability pass, and search-index cold build all do less redundant work. Results are unchanged.
Fixes
- bash watch could freeze the host. A sync
bash_watchwith a regex pattern compiled and ran that regex on the host event loop; a pathological pattern over large output could hang the UI. Regex matching now runs in the Rust engine (linear, no catastrophic backtracking), and sync/async watches now share the same line-anchor semantics. - apply_patch checkpoints and diffs. A multi-hunk patch that touched the same file twice could lose the original from the undo checkpoint or report the wrong per-file diff. Checkpoints now snapshot every touched path up front, and metadata is tracked per hunk.
Quality of life
aft_zoomaccepts space-separated symbol names in thesymbolsstring for code files (e.g."foo bar baz"), splitting them into separate lookups.- The "use aft_search" nudge on bash
grepno longer fires when the search targets a path outside the project, whereaft_searchwouldn't help. - The sidebar remembers its collapsed state across restarts, sorts predictably alongside other CortexKit sidebars, and lets you hide individual sections via
tui-preferences.jsonc.
Questions or feedback? Join us on Discord.