v1.0.1
Fixed
- Agent selector corrupts after terminal wrapping: Long agent URLs could wrap on narrow terminals, while the interactive redraw assumed every option consumed one row. URLs are now truncated to the current terminal width so redraw height stays correct.
- Agent selector corrupts on terminal events: The selector reused a fixed number of cursor-up operations between frames; terminal resize or focus events could leave stale frames on screen. It now renders in an alternate screen and clears each frame.
- Agent selector columns drift in raw mode: Raw terminal mode disables automatic LF-to-CRLF conversion, so option rows began at the previous row's ending column. Selector rows now explicitly return to column zero.
- UI progress bar splits multi-word agent names:
Progress::stopsplit status messages on the first space, causing multi-word agent labels (Claude Code,GitHub Copilot,Devin / Cascade,Warp / Oz) to wrap after the progress bar (✔ Claude [████...] 100% Code). Addedparse_label_and_tailinsrc/util/ui.rswhich matches against known agent/tool labels (sorted longest-first) before splitting. Unit tests added. (@jondmarien in #23) - Doctor probe misreports managed hooks as missing:
MANAGED_HOOKSinsrc/util/probe.rsdid not listcodex-perm-hookorcontext-mode-hook, causingtoksave doctorto treat them as unmanaged external binaries and report "binary not found". Both now registered. (@jondmarien in #23) - Caveman version mismatch after update:
installed_version()always returned the hardcoded embedded fallback1.9.1, causingtoksave doctorto perpetually report an upgrade available. Now writes the fetched release version tocache_dir()/caveman.versionon install and reads it first. Bumped embeddedCAVEMAN_SKILL_VERSIONto1.10.0. (@jondmarien in #23) - Legacy Bun binary paths persist across upgrades: Old
/$bunfs/root/toksavevirtual paths in~/.claude/settings.jsonand~/.codex/hooks.jsonpersisted because rewiring logic was not stripping stale paths. Claudeoverride_claude_rtk_hooknow replaces any existingrtk-hook claudecommand (including legacy paths) with the active binary path. Codex RTK wiring usesmerge_hook_groupfor deduplication. (@jondmarien in #23) - Codex
unwire(Principles)leaves orphanPermissionRequesthook:wire(Principles)added acodex-perm-hooktoPermissionRequest, butunwire(Principles)only calledremove_ownerwithout cleaning the hook. Now removes managedPermissionRequestentries and prunes emptyhooksobject.
Changed
- Status coloring in
doctorandupdate:all tools wiredand up-to-date versions now print in green;not installed/not on PATHin red; outdated versions in yellow. Consistent across both commands. (@jondmarien in #23) - Generic
merge_hook_group/remove_hook_group: Refactoredmerge_pretool_useandremove_pretool_useinsrc/util/json.rsto delegate to genericmerge_hook_group/remove_hook_groupthat work with any hook key (PreToolUse,PermissionRequest, etc.). Backward-compatible — existing callers unchanged. - CI
fail-fast: false:.github/workflows/ci.ymlmatrix strategy no longer cancels sibling OS jobs on single-job failures. (@jondmarien in #23)
Added
- Wiring matrix heatmap: Added
scripts/generate_wiring_heatmap.py(stdlib-only) that generates color-coded SVG heatmaps (assets/wiring-matrix-dark.svg,assets/wiring-matrix-light.svg) of the tool x agent wiring matrix. README updated with<picture>element for light/dark theme support. (@jondmarien in #23)
Contributors
Thanks to community contributor:
- @jondmarien: Fix UI label splitting, doctor probe hooks, Caveman update detection, legacy path cleanup, status coloring, CI matrix, wiring heatmap (#23)