Skip to content

v0.3.0

Latest

Choose a tag to compare

@github-actions github-actions released this 13 Jul 08:47
a062d91

Added

  • suivi track <path> [--name NAME] — first-class command to add a project to tracking. Auto-backfills historical (untracked) turns whose cwd falls under the new path, using config::find_project longest-match semantics so nested tracked projects keep ownership of their own turns.
  • suivi untrack <path-or-name> — remove a project from tracking. Confirms with (y/N) by default (--yes to skip). Historical DB rows are preserved.
  • stats --until YYYY-MM-DD — closes the open-ended --since into a finite range. clap-enforced constraints: requires --since, conflicts with --today/--week/--month/--all. Renders custom range (YYYY-MM-DD → YYYY-MM-DD) in section titles.
  • Config [[exclude]] list with built-in defaults (/private/var/folders, /tmp, ~/.cache). Excluded paths are skipped at hook time — turns from temp dirs never enter the DB.
  • suivi doctor --prune-excluded — one-shot cleanup of already-recorded turns whose cwd matches an exclude entry.
  • suivi doctor --fix-outliers — clamps historical turns whose agent_duration_secs or wall window exceeds tracking.max_turn_secs. Dry-run by default, --yes to apply.
  • suivi doctor --fix-from-transcripts — for historical Claude Code turns, rewrites ended_at and agent_duration_secs by scanning the JSONL transcript for the last live-activity event. Reclaims phantom idle time recorded when sessions were suspended (laptop sleep, walk-away). Reclaimed 84.7 hours on the maintainer's DB.
  • Config knobs: tracking.max_turn_secs (fallback cap for agents without transcripts, default 7200s), tracking.transcript_gap_threshold_secs (transcript inter-event gap for Claude Code, default 300s).

Changed

  • Claude Code ended_at now comes from the transcript, not from now. The Stop hook scans the JSONL for the last user/assistant/system/attachment event within the turn's window and truncates at the first gap larger than transcript_gap_threshold_secs (default 5 min). Suspended sessions no longer record hours of phantom work; legitimate long autonomous runs are preserved without a cap.
  • Signal-less turns (transcript has no in-window events) now record agent_duration_secs = 0 and effective_duration_secs = 0 — the human buffer is skipped when there's nothing to attribute it to.
  • stats --today/--week/--month scopes the Top projects/agents section to the active flag (was hardcoded to "this week"). The activity graph in project/agent views does the same.
  • Daily activity graph now correctly clips turns that span midnight, splitting attribution across the calendar days they touch. A turn from 23:00 to 02:00 no longer credits 3 hours to the start day.
  • stats silently auto-clamps outliers on every invocation (belt-and-suspenders alongside the write-time clamp).

Fixed

  • The write-time cap was setting ended_at = started_at + 2h when clamping — plausible-looking but wrong for suspended sessions. Claude Code turns now use the transcript-derived end; other agents still use the cap fallback with the same behavior as before.
  • stats --today silently used an unbounded window because the since-filter for the "today" branch was None. Now correctly bounded.
  • The per-project and per-agent activity graphs used a hardcoded 30-day window regardless of the active flag; they now follow the flag's window.