Skip to content

v0.43.0

Choose a tag to compare

@github-actions github-actions released this 02 Jul 19:24
· 2264 commits to main since this release

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_search is no longer blocked by a grep deny rule (#147): it now asks under its own aft_search permission id, so a rule steering agents away from grep no longer kills the tool it steers them toward.
  • No more repeated /tmp permission prompts (#145): system temp directories (/tmp, /var/tmp, $TMPDIR, and macOS /private aliases) 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.
  • enabled config toggle (#149): set "enabled": false in <root>/.cortexkit/aft.jsonc to disable AFT for one project, or in ~/.config/cortexkit/aft.jsonc to disable it everywhere (a project can re-enable). Disabled projects register no tools, spawn no processes, and aft doctor reports the state.
  • Pi: filePath/path argument 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 by aft 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 subc daemon 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_file key 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.
  • glob results are sorted deterministically before truncation.
  • Windows: display paths in apply_patch normalize 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 setup if you ever want it re-registered.