v0.53.0
v0.53.0
Standing indexed roots (index.roots)
Directories can now stay indexed without an open session. Configure standing roots in ~/.config/cortexkit/aft.jsonc:
- Per-entry index selection (
search,semantic,callgraph) with no default ladder — you get exactly what you list. - Standing maintenance yields to live sessions: binding a session to a standing root suspends standing work and hands the artifacts over; unbinding hands them back.
- Subtree roots get their own isolated artifact identity (
scoped-v1), so a standing subtree never collides with or pre-warms the repository's session indexes. npx @cortexkit/aft indexbuilds all configured entries once and exits — a finite snapshot operation with per-entry disclosure rows and honest aggregate exit codes. Later daemonless queries that detect drift serve the last usable snapshot and say so, naming the rerun command.- Health, doctor, and memory surfaces report standing roots in the existing per-root tables (
standing: true), including breaker suspensions.
Pi: host-native tools can win (hoist_builtin_tools)
hoist_builtin_tools is now shared vocabulary across OpenCode and Pi (previously OpenCode-only). With hoist_builtin_tools: false, the Pi adapter registers aft_read / aft_write / aft_edit / aft_grep / aft_bash alongside the host's native tools instead of replacing them — built for Pi forks that ship their own file tools. The bash companion family (bash_status / bash_watch / bash_write / bash_kill) registers independently of hoisted bash. The key is project-safe, and harness-specific keys now warn when ignored instead of vanishing silently.
Fixes
- Pi rendering: edit diffs no longer render as blank blocks on Windows (CRLF carriage returns overprinted the diff lines; rendered text is now CR-normalized at the shared renderer seam).
- Home-root callgraph fuse:
callgraph_storenow auto-disables on home-directory roots exactly likesearch_indexandsemantic_search— no more GB-scale callgraph builds when an editor session opens$HOME. Callgraph-dependent surfaces report a terminal "disabled for home root" state instead of retrying. - gh shim: flags-only invocations (
gh --version,gh --help) pass through on governed repos; provably-GETgh apicalls and actions-read verbs (run view,run list) classify as mechanical reads; upstream GitHub API failures now propagate as nonzero exits instead of printing an error and exiting 0. - Background tasks: a daemon restart can no longer silently orphan running background tasks — on first bind after a restart, dead or unknown tasks are terminalized as
fate_unknownwith an exactly-once completion notice naming the retained output path; live detached children keep running. GC and quarantine refuse to touch bundles whose recorded process is still alive. - Storage:
AFT_STORAGE_DIRenvironment override is honored identically at every entry point (plugins, binary fallback, warmup CLI) with a committed resolution order — for NFS-homed machines that need SQLite and indexes on local disk. Explicitly configured storage paths keep their exact spelling. - Locks: filesystem lease liveness is now PID + process-start-time identity (plus boot id on Linux), so PID-namespaced sandboxes (bubblewrap) no longer deadlock on recycled PIDs while genuinely suspended owners still block conservatively.
- Pi expand/collapse: all custom tool renderers honor Ctrl+O (collapsed summaries per tool, full output expanded), matching native tool behavior.
{ "index": { "roots": [ { "path": "~/Work/notes", "indexes": ["search", "semantic"] }, { "path": "~/Work/libs/shared", "indexes": ["search", "callgraph"] } ] } }