Skip to content

v4.0.0

Choose a tag to compare

@github-actions github-actions released this 20 Oct 03:03
· 26 commits to main since this release

4.0.0 (2026-10-20)

⚠ BREAKING CHANGES

  • --after/--before are now exclusive, by_role.user counts human prompts only, partial means budget truncation (see MIGRATION.md)

Features

  • api: export programmatic read(), loadSessionByPath, and registerSource (closes #5) (c0709d2)
  • claude: expose per-turn completion events outside messages (802d0ea)
  • compaction: normalize compaction boundaries into system messages and stats.compactions (closes #9) (05737f9)
  • parser: add agy (Antigravity CLI) source adapter (closes #4) (f55a258)
  • tokens: track per-turn usage, context window size, effort, and rate limits (closes #8) (1e2a691)
  • turns: extract per-turn execution facts, files changed, commands and errors (closes #13) (8a8d62a)
  • turns: implement turn segmentation with stable IDs and --turn filtering (closes #12) (30d366c)

Bug Fixes

  • agy: determine emptiness from conversation evidence (fe7b754)
  • agy: include antigravity in the list source catalog (eea4b39)
  • agy: link background task completions to their calls (6d2ab2f)
  • agy: prefer transcript_full.jsonl over the truncated transcript (e74b7f9)
  • agy: prefer user requests over system preambles in summaries (60d846a)
  • agy: quote resume hints and mirror runner arguments (d6c3994)
  • agy: recognize agent-started mission prompts (6db34b5)
  • agy: skip malformed record shapes and field types (c5c329e)
  • api: always close format-sniff file descriptors (4add128)
  • api: detect sessions from canonical roots and record shapes (ef6a137)
  • api: distinguish role-filtered views in etags (a415277)
  • api: give read() the same slicing inputs as the CLI (4ffd08a)
  • api: make read() honest about budgets, pages, empty sessions and exhausted cursors (4d9c4a6)
  • api: preserve aliases after mixed-case source replacement (99481d0)
  • api: preserve original indexes when filtering roles (bca9a09)
  • api: refuse to load goose/opencode sessions from outside their own store (cabeca8)
  • api: reject nonpositive and nonfinite token budgets (35d42c9)
  • api: support typed custom adapter sources safely (f976385)
  • api: surface invalid discovery source errors (905efdc)
  • claude: anchor interrupt markers and honor human provenance (11dea58)
  • claude: classify non-prompt user records and exclude from stats.byRole.user (fixes #16) (1470bc3)
  • claude: classify observed cross-session peer preambles (8f57e3d)
  • claude: classify queued task-notification attachments as notifications (6aa7b67), closes #21
  • claude: distinguish notification attachments from absorbed prompts (cf31424)
  • claude: honor hidden metadata on absorbed attachments (e0ad189)
  • claude: ingest mid-turn absorbed commands and expose turn duration (fixes #14) (5449bfe)
  • claude: keep usage from responses with no renderable content in session stats (e55e1e6)
  • claude: normalize notifications with the system role (39ba265)
  • claude: normalize unknown queued prompt content to text (4356278)
  • claude: prefer physical raw indices for absorbed attachments (cff42b1)
  • claude: preserve absorbed prompt origin kind (bb72ede)
  • claude: preserve physical line index across streaming de-duplication (fixes #15) (e904c1e)
  • claude: recognize exact unnamed tool-use interrupts (6304b1e)
  • claude: report the physical line index on compaction messages (e80c6b4)
  • claude: restrict durations to valid turn completion records (498dc0a)
  • claude: skip turn_duration records with malformed timestamps (ae6a2e3)
  • claude: treat peer-message wrappers as non-human (79253da)
  • codex: decode JavaScript string literals without evaluation (1c7fa0b)
  • codex: detect failures inside text-block exec results (311c169)
  • codex: distinguish exec invocations from patch contents (828075d)
  • codex: keep a forked session's own id instead of its parent's (8db8b8c)
  • codex: preserve JSON command argv arrays (a35bd4d)
  • codex: preserve literal patch paths and diff header context (7ac5590)
  • codex: preserve quoted command keys in selected calls (58f2f20)
  • codex: read only literal top-level invocation arguments (41d4053)
  • codex: retain wrapped tool names and static arguments (f06b7d9)
  • codex: store one canonical decoded patch argument (c4db6af)
  • codex: unroll exec tool calls, detect errors and extract patched files (fixes #7) (d8fd064)
  • compaction: count emitted summaries in the token budget; ignore markers for turn completion (b9cf047)
  • compaction: preserve boundaries and gate summaries at full detail (d370f2f)
  • cursor: keep complete forward and backward pagination walks (b7c43f6)
  • cursor: make --after and --before strictly exclusive to prevent duplicate paging (fixes #11) (011e45e)
  • output: serialize Claude source provenance independently (9f0325d)
  • read: bound turn pending-call inputs and keep turn meta on empty cursor slices (faeaf4c)
  • read: keep pending_tool_calls in the empty cursor-boundary response (0172278)
  • read: omit non-prompts from minimal and standard views (581facd)
  • search: report non-matching query explicitly and support searching tool inputs (fixes #10) (9d8319f)
  • search: retain matches and honor search fields consistently (e83f990)
  • slicer: measure partial against the requested slice, not the whole session (a0ee2d6), closes #23
  • slicer: preserve and bound pending tool call metadata (d2616bb)
  • slicer: preserve trailing unresolved tool calls and expose pending_tool_calls (fixes #6) (0094907)
  • tokens: clear obsolete per-turn rate snapshots (8a1fbde)
  • tokens: preserve request usage and current context snapshots (518f02d)
  • tokens: retain cache writes and distinguish unreported usage (312d713)
  • turns: include successful notebook edit targets (ae2f461)
  • turns: page against the turn window, keep cursor.first valid, bound command metadata (ec96c30)
  • turns: preserve prompt provenance and successful execution facts (2d20a3d)
  • turns: use Claude-reported turn durations and join argv-array commands (140ff5a), closes #21 #18

Refactoring

  • serialize: drop duplicate message source emission after merge (b1e4352), closes #19 #21

Docs

  • --after/--before are now exclusive, by_role.user counts human prompts only, partial means budget truncation (see MIGRATION.md) (1c499fd)