v0.43.0
v0.43.0
Highlights
Fixes you asked for
- Bash compression no longer fabricates output: seven builtin filters (kubectl, helm, gradle, make, ansible-playbook, xcodebuild, docker) replaced empty successful output with synthesized text like
kubectl: no resources found, misleading agents about what actually happened. Empty output now stays empty, and a guard test ensures no filter can ever synthesize text from empty input again. (Discord report) aft_searchis no longer blocked by agrepdeny rule (#147): it now asks under its ownaft_searchpermission id, so a rule steering agents away from grep no longer kills the tool it steers them toward.- No more repeated
/tmppermission prompts (#145): system temp directories (/tmp,/var/tmp,$TMPDIR, and macOS/privatealiases) no longer trigger external-directory asks. Prompting for world-writable scratch space protected nothing, the host's "Always Allow" doesn't persist across restarts, and macOS's per-boot-randomized temp paths made persistent rules impossible to write. Hard path restriction (restrict_to_project_root) is unchanged. enabledconfig toggle (#149): set"enabled": falsein<root>/.cortexkit/aft.jsoncto disable AFT for one project, or in~/.config/cortexkit/aft.jsoncto disable it everywhere (a project can re-enable). Disabled projects register no tools, spawn no processes, andaft doctorreports the state.- Pi:
filePath/pathargument aliases (#148): models that mix up the two parameter names (common with GLM) now work on read/write/edit instead of failing validation.
TUI
- WebSocket push replaces sidebar polling: the sidebar now updates when state actually changes instead of polling every 1.5s, cutting idle CPU.
- AFT no longer re-adds itself to
tui.json(c): if you remove the sidebar plugin entry, it stays removed. Registration is owned byaft setup/aft doctor --fix.
Under the hood: Subconscious daemon readiness
This release completes AFT's daemon-mode plumbing (dormant by default, nothing changes for standalone users):
- All 21 tools callable through the
subcdaemon transport, with server-side rendering, deferred bash orchestration, PTY screens rendered in Rust (vt100), and reliable background-completion delivery with replay. - Principal-based trust enforcement: MCP-facade connections get forced path restriction, no shell access, and project-tier config caps: verified end-to-end with a real MCP client (all trust checks held on the wire).
- A user-tier
subc.connection_filekey selects the daemon transport; when set, the standalone spawn path is structurally disabled (fail-loud if the daemon is unreachable, never a silent fallback).
Other fixes
- Semantic search e2e now exercises the real ready path when a local ONNX Runtime is present.
globresults are sorted deterministically before truncation.- Windows: display paths in
apply_patchnormalize to forward slashes; PTY golden fixtures checkout with LF; assorted CI-contention deflakes. - Background bash task ids widened to 16-hex slugs (collision hardening).
Upgrade notes
- No breaking changes. Standalone mode (the default) is byte-identical in behavior aside from the fixes above.
- If you previously removed the AFT TUI entry and it kept coming back: it won't anymore. Run
npx @cortexkit/aft setupif you ever want it re-registered.