Tags: subinium/agf
Tags
agf v0.11.4 — pi/codex robustness + README clarity pi scanner no longer drops sessions on invalid-UTF-8 lines (same bug class as the cursor .ok()? fix shipped in v0.11.3). codex history.jsonl read is now bounded by the live_session_ids set, so the CACHE_VERSION=6 cold-rescan in v0.11.3 stops scaling with lifetime codex usage. README clarifies Kiro (no per-session resume) and Hermes (cwd-independent). .gitignore picks up /.claude/. Verified end-to-end: 599 sessions identical pre/post upgrade.
agf v0.11.3 — cursor scanner fix + critical follow-ups Cursor scanner now finds sessions on current Cursor CLI (Composer 2+ JSONL at depth 4 — previous scanner returned zero sessions). Built on @rooty0's #45 with verified follow-ups: - panic-fix on extract_first_prompt for inverted <user_query> tags (rustc reproducer confirmed) - skip-not-abort on malformed JSON / invalid UTF-8 lines - legacy .txt deletion (was silent no-op since remove_dirs_matching_name filters on is_dir()) - CACHE_VERSION 5 -> 6 so upgraders see the orphan fix immediately - 512 KiB byte budget on extract_first_prompt (matches pi.rs cap) - stem == parent UUID invariant on the .jsonl arm - 6 new regression tests (3 portable, 3 cfg(unix)) Closes #35.
agf v0.11.2 — pi session resume + scoped follow-ups pi sessions now resume by id (pi --session '<id>'), keep every session per project, and show prompt summaries + full History — thanks to @shellus (#43, authorship preserved). Scoped follow-ups: reverted the default-to-cwd search query (it changed no-arg behavior for every agent), bounded pi parse_session with a 512 KiB read budget so the forced cold rescan can't stall on multi-MB transcripts, restored the Kiro resume-latest note, and made the pi scanner tests portable (Windows-safe).
agf v0.11.1 — SLT 0.20 bump + UX polish superlighttui 0.17 → 0.20.1 drop-in upgrade. agf does not use any of v0.20's breaking surface, so the bump is pure gains: 3-5x flush-path speedup on redraw frames, ~1000x speedup on static frames via per-row hash skip, rgb_to_ansi256 u8 overflow fix, and stdout BufWriter. UX fixes: - DeleteConfirm: Up/Down + j/k toggle Yes/No (#38) - ActionSelect / AgentSelect / PermissionSelect / ResumeSelect arrow keys cycle-wrap (#39) - Footer shows agf v<version> on the leftmost cell of every mode (#40)
v0.11.0 — Hermes Agent (thanks @SHL0MS) Adds Hermes Agent support (#34, by @SHL0MS) — Nous Research's self-improving agent — plus follow-up usability fixes: - scanner/hermes: up to 4 user-message previews on CLI/TUI sessions - scanner/hermes: empty project_path so resume stays in user's cwd (shell::cd_and skips cd when path is empty) - delete/hermes: cascade in a single SQLite transaction - TUI: apply_sort() always called on first frame (default time) - TUI: cwd-match boost removed from secondary sort - cache: CACHE_VERSION bumped 2 → 3 (forces one-time rescan on upgrade) Cursor scanner regression on new agent-transcripts/<id>/<id>.jsonl layout tracked in #35 — out of scope for this release.
release: v0.10.2 — cache write race fix (#24) * fix(cache): preserve prior cache entry for in-flight agents on TUI exit v0.10.1 introduced streaming background scans: the TUI opens on cached sessions immediately and stale agents stream their results in. `cache::write_cache` runs at TUI exit to persist the merged result. But if the user exits before a worker has reported in, `write_cache` would re-emit that agent with an empty session list and the current `mtime` of its data sources — making the cache look "fresh + empty" on the next launch and hiding the agent's sessions until a new file write changed the mtime again. Fix: pass the still-scanning agent set into `write_cache`. For each agent in that set, carry its prior cache entry (mtime + sessions) verbatim from the on-disk file, so an interrupted scan doesn't overwrite known-good cache state with `(now, [])`. Behavior of completed scans is unchanged. * chore: release v0.10.2 Bumps version + CHANGELOG for the cache-write-race fix in this PR. Tag and release happen after merge.
perf(scanner): cap Claude per-session JSONL I/O + stream stale scan t… …o TUI Claude session metadata extraction read every JSONL line through EOF on every cold scan. Each session file (commonly 5-30 MB on long Claude Code projects) was fully parsed to find the latest \`away_summary\` recap, which sits at the tail. With rayon parsing thousands of files in parallel the cold scan never finished — the TUI hung on \"loading\" indefinitely on users with multi-GB \`~/.claude/projects\` directories. Fix: new \`scanner::read_head_tail(path, head, tail)\` helper reads at most 16 KB from the start and 256 KB from the end of large files, returning UTF-8-safe complete lines (boundary partial lines dropped). \`cwd\` and \`aiTitle\` come from the head slice, latest \`away_summary\` from the tail. Small files (≤ 272 KB) still read in full. Cold scan dropped from 48 s → 0.7 s on a 1.6 GB Claude log directory in local testing (3124 jsonl files, 35 of them > 10 MB). Streaming UX: \`cache::start_stale_scan\` now returns \`mpsc::Receiver<ScanResult>\` and the TUI drains it every render frame. The footer shows \`• scanning N…\` while workers run; new sessions appear as soon as their agent finishes instead of after the slowest one. Final \`cache::write_cache\` happens at TUI exit so the next launch reflects everything that completed. Other: - \`AGF_DEBUG=1\` now prints per-agent scan timing so users can locate the slow agent on their machine. - Cross-platform safe: \`SeekFrom::End\` + \`read_exact\` work the same on Windows; \`String::lines()\` handles \`\r\n\` correctly; byte-level newline detection finds the boundary regardless of line ending.
PreviousNext