v0.10.3
Patch release. Thanks to @Mert-coderoid for all three fixes — careful diagnoses, repro/impact numbers, and green test suites in every PR.
Fixed
- scanner/claude: skip Claude sessions whose per-session JSONL is missing (#27, #29, by @Mert-coderoid) —
~/.claude/history.jsonlaccumulates session IDs forever; Claude Code never trims it when a per-session JSONL is deleted. Those orphan IDs surfaced in the listing andclaude --resumefailed withNo conversation found. Reported impact on a one-year-old~/.claude: 99 → 10 sessions (89 dead resume targets removed). - delete/codex: also remove the SQLite
threadsrow (#28, #30, by @Mert-coderoid) — since the Codex scanner moved tostate_*.sqliteas primary source, deletes that only removed the rollout JSONL came back on the next rescan.delete_codex_sessionnow walks everystate_*.sqliteandDELETEs the matching row. - scanner/codex: prune orphan
threadsrows on scan (#31, #32, by @Mert-coderoid) —state_*.sqliterows whose rollout JSONL was already gone dominated the listing forever (reporter saw 324 ghost rows on an empty~/.codex/sessions/). Scans now build a live-id set from disk, exclude orphans, andDELETEthem from everystate_*.sqlite.
Heads-up for users
Codex scans are no longer strictly read-only. Every scan walks ~/.codex/sessions/, builds the live session-id set, and any state_*.sqlite threads row not in that set is hard-deleted. Codex cannot resume those rows once the rollout JSONL is gone, so this is consistent cleanup, not data loss. A walker error with no live IDs collected falls back to the legacy "surface every row" behavior so a transient I/O failure cannot wipe the table.
Install
cargo install agfOr download the prebuilt binary for your platform from the Assets below.
Full Changelog: v0.10.2...v0.10.3