Skip to content

v0.58.1

Choose a tag to compare

@github-actions github-actions released this 30 Sep 01:55
· 6237 commits to main since this release

v0.58.1

AFT 0.58.1 is a patch release. aft_search now finds the file that defines a regex or identifier, most aft.jsonc settings apply without a restart, and a recursive aft_delete can be undone exactly. It also fixes the issues reported against 0.58.0, including slow reads and lock errors when several AFT processes share one database.

New

  • Most aft.jsonc settings, such as formatting, inspect, idle, sandbox and bash options, apply on save; indexes, language servers and disabled_tools still need a restart.
  • If a saved aft.jsonc is invalid or deleted, AFT keeps the last valid settings and warns you.
  • Recursive aft_delete accepts symlinks, empty directories and hard links, and one aft_safety undo restores the tree exactly (docs).
  • read on a directory pages with offset and limit, up to 1,000 entries per call.
  • gh shim: an operator row for gh run cancel, for v15 manifests (docs).

Changed

  • Tools in disabled_tools are refused for every client, including Subconscious clients, not only hidden by the plugins.
  • An edit or write that changes nothing returns no_change and records no undo step.
  • aft_search replies stop at 50 KB and show at most 500 characters of a matching line, so one-line JSON files no longer flood the reply.
  • Scoped aft_inspect answers from cached results instead of waiting for project-wide scans, and returns partial results with named gaps when time runs out.
  • aft_inspect groups files without diagnostics by cause, lists at most topK of them, and names the install step when a language server is missing.
  • TypeScript diagnostics work in checkouts without node_modules, using a cached TypeScript and saying so.
  • read, aft_outline, call trees and index-less search stop at a work limit on huge files or trees and say what they skipped.
  • At most two images are decoded at once; further image reads say AFT is busy instead of queueing.
  • Linked worktrees keep sharing one semantic index after local edits; in a ten-worktree test, private semantic memory fell from 3.3 GB to under 100 KB.
  • Search keeps serving its previous index while a shared index reloads, and a reload no longer waits behind full index builds.
  • aft_search and aft_zoom repeat less work per call; results are unchanged.
  • If AFT's database cannot open, tools that need it wait up to 10 s, then refuse with the reason; read-only tools keep working.
  • The daemon no longer re-reads its whole task table every few seconds, and callgraph refreshes make far fewer path lookups.
  • Tool calls stop at their deadlines while a project is loading, and gh shim requests no longer retry past one 30 s budget.
  • bash_watch times its wait with a monotonic clock and replies "Waited Nms (limit Lms)".
  • The repeat breaker now counts bash calls on every transport, so a repeated shell command gets the reminder.
  • Pi: Magic Context's short-lived child sessions no longer get AFT's workflow hints.

Fixed

  • aft_search ranks every file matching a regex or identifier before paging, so the defining file comes first at any page size (#375, thanks @Tahmid-kabir-addin).
  • OpenCode: read no longer waits seconds on session-history and model lookups before reading an ordinary file (#375, thanks @Tahmid-kabir-addin).
  • AFT processes sharing aft.db no longer log "database is locked", time out status, or fail to open it on a brief lock (#375, thanks @Tahmid-kabir-addin).
  • doctor --issue includes the selected session's own log lines and leaves out other projects' (#375, thanks @Tahmid-kabir-addin).
  • After a restart, the search index checks its files in parallel and reads each file's metadata once (#377, thanks @null-axiom).
  • A self-matching .gitignore is reloaded when edited; on macOS, changes made while ignore rules change are no longer missed (#371, thanks @iceteaSA).
  • The bash truncation trailer no longer claims every line was shown when some were dropped (#372, thanks @iceteaSA).
  • Rust: aft_import no longer adds a name already imported through use a::{x, y}, and remove and organize handle such lists (#373, thanks @iceteaSA).
  • grep and glob say nothing was searched when include or exclude matches no file (#374, thanks @iceteaSA).
  • Pi 0.99 no longer warns at startup that AFT lists typebox as a dependency (#378, thanks @rohan-patra).
  • Undo no longer overwrites a file changed outside AFT: that content is saved as a checkpoint first, and repeated undo still reaches the oldest state.
  • Fuzzy edit matches keep the indentation and trailing text around the match instead of replacing whole lines.
  • Background bash tasks still deliver their output after a daemon restart, and are never reported erased while running, when several harnesses share a project.
  • aft_inspect and the status bar show diagnostics as unknown, not zero, when a language server did not report or failed to start.
  • rust-analyzer no longer rewrites Cargo.lock during aft_inspect, and its non-fatal warnings no longer hide diagnostics.
  • OpenCode: the update checker honours your npm registry settings, including scoped registries and .npmrc when npm is not on PATH.
  • Error messages for invalid edit arguments name the actual problem, and aft_delete accepts a JSON-encoded file list.
  • A bun install with nothing to change shows bun's summary instead of an empty reply.

Security

  • gh shim with a signed routing manifest: agent writes to unbound repositories, gh auth token and login changes are refused unless GH_SHIM_BYPASS=operator (docs).