Skip to content

v0.58.0

Choose a tag to compare

@github-actions github-actions released this 28 Sep 14:55
· 7950 commits to main since this release

v0.58.0

AFT 0.58.0 makes configuration feature-based: every tool is on unless listed in disabled_tools, and all three indexes, semantic included, are on by default. aft setup gains a feature checklist and doctor --fix migrates old keys. Plugins start faster, the daemon recovers better from restarts, and many reported issues are fixed.

Upgrading

  • Run npx @cortexkit/aft doctor --fix to rewrite retired keys such as tool_surface, search_index and github.enabled; they work in 0.58 and are rejected from 0.59 (full list).
  • gh_read, gh_shim.enabled and config files that do not parse are now errors: AFT tools return the error and the fix until the file is corrected.
  • New defaults: all three indexes on; aft_callgraph, aft_search, grep and glob registered; aft_move and aft_delete off. Explicit settings are kept.
  • Semantic indexing may download ONNX Runtime and a model and use CPU; existing installs see a one-time notice. Set indexes.semantic: false to opt out.
  • enabled: false no longer stops indexing; also set indexes.trigram, indexes.semantic and indexes.callgraph to false.
  • Project configs can only turn tools and indexes off, not on.
  • worktree.ram_overlay now defaults to true; set it to false for the old behaviour.
  • aft_search with no ready index now refuses instead of grepping; use grep meanwhile.
  • With an absolute XDG_CACHE_HOME, the embedding model is downloaded once more, to $XDG_CACHE_HOME/fastembed.

New

  • Feature-based configuration: disabled_tools and indexes.* replace surface levels and old index keys (docs).
  • aft setup shows a checklist of tools, indexes, bash settings and GitHub access; --plan, --answers and --yes script it (docs).
  • npx @cortexkit/aft backups purge removes undo backups early by path or session (docs).
  • Tools say when an index is off or still building instead of returning empty results (docs).
  • grep shows up to 100 matching lines per call and pages with offset.
  • aft_outline and aft_zoom show items defined inside Rust macros.
  • OpenCode 2: setup offers to turn off OpenCode's own shell tool, and AFT's bash follows your shell permission rules.
  • gh shim: operator rows for label-only edits and label create (docs).
  • Subconscious clients can call bash_status, bash_kill and bash_write.

Changed

  • The OpenCode and Pi plugins no longer run the aft binary on the host's thread at startup.
  • aft_search ranks source code above large JSON data files.
  • Linked worktrees and borrowed checkouts check the shared index against their own files before search is ready.
  • A recursive aft_delete is refused when its undo backup would exceed 2,000 files or 100 MiB.
  • Subagent bash_watch waits up to bash.watch_sync_max_ms; Pi worker sessions honour bash.subagent_background.
  • aft_zoom targets and aft_inspect sections also accept a JSON string.
  • Callgraph updates after a small edit are much faster: 1.4 s to 0.36 s on a 6,761-file repository (#214, thanks @iceteaSA).
  • Editing package.json or overflowing the file watcher no longer forces a full callgraph rebuild.
  • setup and doctor report every feature's state and give one-line causes and fixes for permission or download failures.
  • gh shim: the target repository decides the bot identity, and bot writes go through the AFT daemon without double posts.
  • Daemon: faster rebinds and clean exits after restarts, stall detection, and stopped index builds for projects left unbound.
  • Health and memory reports are more accurate (#344, thanks @iceteaSA).
  • The subconscious manifest declares the services AFT connects to (#345, thanks @iceteaSA).
  • Log lines carry their level (#361), and background plugin calls no longer log as slow (#362, thanks @iceteaSA).
  • Lock heartbeats no longer force disk writes every 5 seconds (#358, thanks @iceteaSA).
  • Git co-author hooks are written once per user; the write description suggests splitting very large files.

Fixed

  • ONNX Runtime auto-install works again (broken in 0.57.0–0.57.2), and semantic search recovers when the download finishes after AFT starts.
  • Semantic search works on OpenCode 2, and a broken system ONNX Runtime is skipped (#341, thanks @jjjermiah).
  • The AFT status bar appears in tool results again (#331, thanks @iceteaSA).
  • Pi: pi -p exits after answering, and SIGTERM/SIGINT end the host within 5 s (#336, thanks @johnpwilkinson).
  • Linked worktrees and subfolder sessions now search the right files (#337, #338, #339, #340, thanks @johnpwilkinson).
  • Windows: the file watcher no longer crashes AFT, and console windows no longer steal focus (#360, thanks @Cle2ment).
  • Linux: a directory that vanishes before it is watched no longer stops change detection (#352, thanks @iceteaSA).
  • bash_watch respects bash.detach_on_user_message: false (#366, thanks @iceteaSA).
  • Bash timeout is enforced on every call, and bash_kill works on tasks that survived a daemon restart.
  • Finished bash tasks release file handles, retention runs on time, and stale task records are removed (#354, #355, #357, thanks @iceteaSA).
  • aft_safety checkpoints no longer fail when sessions wait on the same lock (#342, thanks @iceteaSA).
  • The repeat breaker no longer counts each edit twice (#347, thanks @iceteaSA).
  • Glob patterns without ** no longer walk the whole tree (#349, thanks @iceteaSA).
  • A tsconfig that extends a package is resolved, so excluded files stay out of diagnostics (#353, thanks @iceteaSA).
  • Idle projects with an unsaved index change are freed from memory (#356, thanks @iceteaSA).
  • One huge or non-UTF-8 file no longer forces a rebuild on every start or disables the callgraph (#364, thanks @Tahmid-kabir-addin).
  • The callgraph stays correct after edits, is usable as soon as a build finishes, and handles two spellings of one path.
  • Empty projects report zero dead code instead of D?.
  • Language servers are no longer killed right after starting, and scoped aft_inspect starts only the servers it needs, without blocking other calls.
  • grep and glob on a named ignored or symlinked folder search it instead of returning nothing.
  • .DS_Store, Thumbs.db and similar files are no longer indexed and no longer trigger refreshes.
  • Touching files without changing them no longer empties the semantic index.
  • write and edit on issue:// or pr:// never create a local file.
  • An unreachable embedding backend is shown as unavailable with its URL; the OpenCode 2 footer shows "no LSP" instead of waiting.
  • doctor --fix no longer plans a tui.json change on OpenCode 2 (#367, fixed in #368 by @coleleavitt).
  • macOS without developer tools: no "install developer tools" dialog; the sidebar says "git features off".
  • Pi no longer indexes your home directory when it is reached through a symlink.
  • AFT no longer crashes at exit while a semantic build is running.
  • The file watcher excludes the folders that actually overflowed it and keeps build folders excluded after a restart.
  • Daemon: a few failed requests no longer drop every session, and background bash checks no longer stall other sessions.
  • Subconscious clients no longer see plugin-only bash fields, or powershell where pwsh is missing.
  • The update checker never offers an older version.
  • Test runs no longer touch your live AFT logs, config or temp directory (#348, #350, #351, thanks @iceteaSA).

Security

  • Undo backups, checkpoints and logs are readable only by you (#346, thanks @iceteaSA).
  • Tokens, keys and passwords are removed from logs and doctor --issue reports.