Files
oh-my-pi/scripts/session-stats
can1357 0c8d52950f refactor(scripts/session-stats): adjusted session-stats defaults and dynamic output formatting
- Lowered the default session scan limit for edits and tools from 100000 to 1000 and updated usage text to match.
- Reworked grand-total and per-tool table rendering in session-stats to compute aligned column widths and include an aggregated "(N others)" row.
- Tuned the session-stats release profile by replacing full stripping with line-tables-only debug symbols and disabled split debuginfo stripping.
2026-04-30 02:34:26 +02:00
..

session-stats

Ad-hoc analyses over the local agent session corpus (~/.omp/agent/sessions/). Single Rust binary with subcommands.

Subcommands

edits — edit-tool reliability audit

Audits how agents have used the edit / ast_edit / write tools.

For each call we:

  • detect the argument-schema family in use (the edit tool has shipped many shapes over time: oldText/newText, op+pos+end+lines, loc+content, loc+splice/pre/post/sed, etc.);
  • record the locator shape and verb combination (for the current schema);
  • pair the call with its toolResult and classify the outcome (success / truncated / aborted / fail:anchor-stale / fail:no-match / fail:parse / fail:no-enclosing-block / …).

Output: markdown-ish report on stdout plus per-call CSV at $EDIT_ANALYSIS_CSV (default ./edit-analysis.csv).

tools — per-tool token budget

Aggregates token usage across the most-recent N sessions. Buckets:

  • tool ARGS — assistant tool-call argument JSON
  • tool RESULTS — tool result content text
  • assistant THINKING — assistant thinking blocks
  • assistant TEXT — assistant prose
  • user TEXT — user-authored text content

Token counting uses o200k_base via tiktoken-rs (the GPT-4o / GPT-5 family BPE — well-defined offline and within ~5-10% of Claude's own counts in aggregate across English/code).

Output: grand totals + per-tool breakdown sorted by total (arg+res) tokens. Optional CSV at $TOOL_USAGE_CSV.

Usage

# Edit audit on the most-recent sessions.
cargo run --release --manifest-path scripts/session-stats/Cargo.toml -- edits

# Edit audit on the 200 most-recent sessions.
cargo run --release --manifest-path scripts/session-stats/Cargo.toml -- edits -n 200

# Edit audit on a specific date.
cargo run --release --manifest-path scripts/session-stats/Cargo.toml -- edits 2026-04-28

# Tool token budget on the 1000 most-recent sessions.
cargo run --release --manifest-path scripts/session-stats/Cargo.toml -- tools -n 1000

# Tool token budget on every jsonl on disk.
cargo run --release --manifest-path scripts/session-stats/Cargo.toml -- tools -n 0

# Dump per-tool CSV alongside the report.
TOOL_USAGE_CSV=tools.csv \
  cargo run --release --manifest-path scripts/session-stats/Cargo.toml -- tools -n 200

The walk root is ~/.omp/agent/sessions/. Subagent jsonls (<session-id>/<n>-<name>.jsonl) count as their own session and are included in the recency window independently.

Layout

scripts/session-stats/
  Cargo.toml
  src/
    main.rs        # subcommand dispatch
    common.rs      # shared JSONL shapes, walk, tokenizer, formatting helpers
    cmd_edits.rs   # edits subcommand
    cmd_tools.rs   # tools subcommand

The crate is a standalone Cargo project (it carries its own [workspace] declaration) so it does not perturb the main workspace's lockfile.