Öffentliches Register
Software-GesundheitsberichtSchema 0.27.0 · Metriken 1.13.0 · 2026-07-23 14:48 UTC

mag123c / toktrack

Ultra-fast token & cost tracker for LLM Token Usage (e.g. Claude Code)

RustMIT★ 180 Sterne⑂ 18 Forksseit Jan. 2026Auf GitHub ansehen ↗

mag123c/toktrack erreicht einen Gesundheitsindex von 65 von 100 und liegt damit im Bereich Mittel. Am stärksten schneidet es bei AI Readiness (84/100) ab, am schwächsten bei Security (36/100). Zuletzt vor 1 Tag aktualisiert. Ein einzelner Mitwirkender trägt den Großteil der jüngsten Arbeit.

65
gesamt / 100
Mittel

Software-Gesundheitsindex

Metriken werden auf einer Skala von 1–100 in gewichtete Kategorien gruppiert. Der Gesamtwert beginnt als ihr Mittel; sobald öffentliche Evidenz die Richtlinie für Hochrisikojurisdiktionen auslöst, wird die Bewertung angepasst und erhält die Obergrenze 49 (Gefährdet). AI Readiness liegt außerhalb.

65
Exzellent85-100Vorbildlich; erfüllt im Wesentlichen alle geprüften Kriterien
Gut70-84Gesund; geringfügige Lücken
Mittel50-69Akzeptabel mit deutlichen Lücken; Überprüfung empfohlen
Gefährdet30-49Erhebliche Schwächen; eine Übernahme erfordert Vorsicht
Kritisch1-29Schwerwiegende Probleme (aufgegeben, nur ein Maintainer, keine Hygiene)
VitalitätCommunity &VerbreitungNachhaltigkeit &GovernanceEngineering-QualitätSicherheitAI Readiness

Bewertungsprofil

Jede Achse ist eine Kategorie. Die Form zählt mehr als der Durchschnitt — ein gesundes Projekt füllt die gesamte Fläche, während ein Profil aus Spitzen und Kratern bedeutet, dass Stärke in einer Dimension Risiken in einer anderen verdeckt.

Eigentümerschaft

mag123cPersönliches Konto
97 Follower88 öffentliche Reposseit Dez. 2022

Dieses Repository gehört einem persönlichen Konto. Ein Projekt mit nur einem Eigentümer trägt ein höheres Kontinuitätsrisiko als ein organisationsgetragenes.

Paket-Ökosysteme

Metriken nach Kategorie

Vitalität

Lebt das Projekt — wird Code geschrieben und werden Releases ausgeliefert?

83Gut · 22 % des Gesamtindex
Wie die Bewertung erfolgt
36/36Push-Aktualität — letzter Push vor 1 Tagen
15.2/36Commit-Rhythmus — 22/52 Wochen mit Commits
18/18Commit-Volumen — 365 Commits im letzten Jahr
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 5 issue activity found in the last 90 days -- score normalized to 10
Verwendete Eingangsdaten
commits_last_year365
human_commit_share0,57
days_since_last_push1
active_weeks_last_year22
Wie die Bewertung erfolgt
27/27Liefert Releases aus — 91 Releases veröffentlicht
36/36Release-Aktualität — letztes Release vor 5 Tagen
27/27Release-Rhythmus — ein Release etwa alle 4,7 Tage
0/10OpenSSF Scorecard: Signed-Releases — Project has not signed or included provenance with any releases.
Verwendete Eingangsdaten
releases_count91
latest_release_tagv2.16.0
releases_from_tagsnein
days_since_latest_release5
mean_days_between_releases4,7

Community & Verbreitung

Hat das Projekt Nutzer, Downloads, Aufmerksamkeit und ein einladendes Umfeld für Beitragende?

58Mittel · 18 % des Gesamtindex
Wie die Bewertung erfolgt
36.5/60Stars — 180 Stars
10.3/25Forks — 18 Forks
0/15Watcher — 0 Watcher
Verwendete Eingangsdaten
forks18
stars180
watchers0
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Wie die Bewertung erfolgt
22.5/22.5README
22.5/22.5Lizenz — anerkannte Lizenz (MIT)
18/18CONTRIBUTING-Leitfaden
0/13.5Verhaltenskodex
0/7.2Issue-Vorlage
0/6.3PR-Vorlage
Verwendete Eingangsdaten
has_readmeja
has_licenseja
has_contributingja
has_issue_templatenein
has_code_of_conductnein
has_pull_request_templatenein
Wie die Bewertung erfolgt
47.4/80Downloads pro Monat — 3.562 Downloads/Monat über npm
0/20Abhängige in der Registry — von diesem Ökosystem nicht ausgewiesen
Verwendete Eingangsdaten
packagestoktrack
dependents
ecosystemsnpm
total_downloads
monthly_downloads3.562
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): Abhängige in der Registry. Die verbleibenden Gewichte wurden renormalisiert.

Nachhaltigkeit & Governance

Überdauert das Projekt die Menschen, die es tragen — Bus-Faktor, Reaktionsfähigkeit, Trägerschaft und Paketpflege?

61Mittel · 24 % des Gesamtindex
Wie die Bewertung erfolgt
9/54Bus-Faktor — 1 Beitragende decken die Hälfte aller Commits ab
1.7/22.5Commit-Verteilung — wichtigste beitragende Person verfasste 92 % der Commits
8.1/13.5Breite der Beitragenden — 6 Beitragende
0/10OpenSSF Scorecard: Contributors — project has 0 contributing companies or organizations -- score normalized to 0
Verwendete Eingangsdaten
bus_factor1
contributors_sampled6
top_contributor_share0,924
Wie die Bewertung erfolgt
46.8/46.8Issue-Lösungsquote — 100 % der Issues geschlossen
36.6/38.3PR-Annahme — 195/204 entschiedene PRs gemergt
3/15OpenSSF Scorecard: Code-Review — Found 4/20 approved changesets -- score normalized to 2
Verwendete Eingangsdaten
merged_prs195
open_issues0
closed_issues16
issue_closed_ratio1
closed_unmerged_prs9
Wie die Bewertung erfolgt
10/30Organisatorische Trägerschaft — persönliches (Nutzer-)Konto
0/20Verifizierte Domain — für Nutzerkonten nicht anwendbar
14.3/25Reichweite des Inhabers — 97 Follower von mag123c
20.2/25Kontohistorie — 88 öffentliche Repos, Kontoalter ca. 3 Jahre
Verwendete Eingangsdaten
followers97
owner_typeUser
is_verified
owner_loginmag123c
public_repos88
account_age_days1.315
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): Verifizierte Domain. Die verbleibenden Gewichte wurden renormalisiert.

Paketpflege

100Exzellent
Wie die Bewertung erfolgt
25/25Veröffentlicht & auflösbar — 1 Paket(e) auf npm
35/35Veröffentlichungsaktualität — letzte Veröffentlichung vor 5 Tagen
20/20Versionshistorie — 82 veröffentlichte Versionen
20/20Nicht veraltet — aktiv, nicht veraltet oder zurückgezogen
Verwendete Eingangsdaten
packagestoktrack
ecosystemsnpm
any_deprecatednein
min_days_since_publish5

Engineering-Qualität

Sind grundlegende Engineering- und Dokumentationspraktiken vorhanden?

78Gut · 20 % des Gesamtindex
Wie die Bewertung erfolgt
24/24CI-Workflows — 6 Workflow(s)
24/24Tests vorhanden
0/16Linter-Konfiguration
0/9.6Pre-Commit-Hooks
0/6.4.editorconfig
16/20OpenSSF Scorecard: CI-Tests — 19 out of 22 merged PRs checked by a CI test -- score normalized to 8
Verwendete Eingangsdaten
has_cija
has_testsja
has_editorconfignein
has_linter_confignein
has_precommit_confignein

Dokumentation

100Exzellent
Wie die Bewertung erfolgt
30/30README
25/25Dokumentationsverzeichnis
15/15Dokumentations-/Homepage-Site — https://www.npmjs.com/package/toktrack
10/10Repository-Beschreibung
10/10Topics — 20 Topics
10/10Wiki
Verwendete Eingangsdaten
topicsai-billing, ai-coding, ai-cost, ai-tools, anthropic, claude-code, cli, codex-cli, cost-monitor, cost-tracking, developer-tools, gemini-cli, llm, multi-cli, openai, rust, terminal, token-tracker, token-usage, tui
has_wikija
homepagehttps://www.npmjs.com/package/toktrack
has_readmeja
has_docs_dirja
has_descriptionja

Sicherheit

Sind die sichtbaren Sicherheits- und Lieferkettenpraktiken belastbar, ohne ungeklärte Exposition gegenüber Hochrisikojurisdiktionen?

36Gefährdet · 16 % des Gesamtindex

Sicherheitslage

36Gefährdet
Wie die Bewertung erfolgt
7.5/7.5Binary-Artifacts — no binaries found in the repo
3/7.5Branch-Protection — branch protection is not maximal on development and all release branches
2/2.5CI-Tests — 19 out of 22 merged PRs checked by a CI test -- score normalized to 8
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
1.5/7.5Code-Review — Found 4/20 approved changesets -- score normalized to 2
0/2.5Contributors — project has 0 contributing companies or organizations -- score normalized to 0
0/10Dangerous-Workflow — dangerous workflow patterns detected
7.5/7.5Dependency-Update-Tool — update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5Lizenz — license file detected
7.5/7.5Maintained — 30 commit(s) and 5 issue activity found in the last 90 days -- score normalized to 10
5/5Packaging — packaging workflow detected
0/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
0/5SAST — SAST tool is not run on all commits -- score normalized to 0
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — Project has not signed or included provenance with any releases.
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
0.8/7.5Vulnerabilities — 9 existing vulnerabilities detected
Verwendete Eingangsdaten
sourceopenssf_scorecard
checks_evaluated18
scorecard_versionv5.5.0
checks_inconclusive0
scorecard_aggregate3,5

AI Readiness

Wie gut ist das Repository dafür ausgestattet, mit KI-Coding-Agenten entwickelt und gepflegt zu werden? Ein unabhängiges, experimentelles Badge — Gewicht 0,0, es wird eigenständig ausgewiesen und verändert den Gesamt-Gesundheitswert nicht.

84Gut · 0 % des Gesamtindex
Wie die Bewertung erfolgt
45/45Agentenanweisungen — AGENTS.md, CLAUDE.md
0/15Maschinenlesbare Doku (llms.txt)
40/40Lesbare Commit-Historie — 56 von 57 menschlichen Commits benennen ihre Absicht (strukturierter Betreff oder erläuternder Text)
Verwendete Eingangsdaten
has_llms_txtnein
legible_history_share0,982
agent_instruction_filesAGENTS.md, CLAUDE.md
agent_instruction_max_bytes1.595
Wie die Bewertung erfolgt
18/18Bootstrap mit einem Befehl — Makefile
22/22Automatisierte Tests
0/11Lint-/Format-Konfiguration
11/11Statische Typprüfung — Rust (statisch typisiert)
10/10Reproduzierbare Umgebung — lockfile
10/10Belegte Agentenpraxis — 17 der letzten 100 Commits von Agenten verfasst oder ihnen zugeschrieben
8/8Automatisierte Wartung — 25 der letzten 100 Commits sind automatisierte Abhängigkeits-Updates
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Verwendete Eingangsdaten
has_nixnein
has_testsja
lockfilesCargo.lock
has_dockerfilenein
typed_languageja
bootstrap_filesMakefile
has_devcontainernein
has_linter_confignein
typecheck_configs
agent_commit_share0,17
toolchain_manifestsCargo.toml
dependency_bot_commit_share0,25
Wie die Bewertung erfolgt
45/45Typprüfbarer Code — Rust (statisch typisiert)
51.8/55Handhabbare Dateigrößen — 3/52 Quelldateien über 60 KB
Verwendete Eingangsdaten
primary_languageRust
largest_source_bytes93.288
source_files_sampled52
oversized_source_files3

Eckdaten

180GitHub-Sterne
6Mitwirkende
365Commits, letzte 12 Monate
1Tage seit letztem Push
91Releases
1Bus-Faktor
0offene Issues
crates.io, npmPaket-Ökosysteme

Warnungen zur Datenerhebung

  • Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token
  • Could not fetch crates package 'toktrack' from its registry
  • GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository
  • deps.dev does not index npm:toktrack@2.16.0; advisories assessed against the repository dependency graph instead

Weitere Details

Stern- und Fork-Verlauf 0 ★ / 18 ⇿
0Sterne
18Forks
41Releases

Wann jeder Stern und Fork hinzugefügt wurde, von GitHub erfasst und nach Tagen gruppiert. Das kumulierte Wachstum steht direkt über den täglichen Zugängen, aus denen es besteht, sodass beide gegeneinander lesbar sind: stetiger organischer Zuwachs sieht ganz anders aus als ein abrupter, kurzlebiger Ausschlag. Wo dieser Unterschied messbar ist, wird er als Wachstumsauthentizität ausgewiesen.

0481216201812026-022026-052026-07
Major 2Minor 18Patch 21
OpenSSF Scorecard 3.5 / 10
3.5Gesamtwert

Unabhängige, werkzeugneutrale Sicherheitsbewertung durch das quelloffene OpenSSF Scorecard. Jede Prüfung honoriert eine Sicherheits-Praxis, nicht das Werkzeug eines bestimmten Anbieters. Prüfungen, die Scorecard nicht ermitteln konnte, sind mit k. A. markiert und vom Sicherheitswert ausgeschlossen (nie als null gezählt).Scorecard v5.5.0 · 2026-07-23 14:48 UTC

10Binary-Artifactsno binaries found in the repo
4Branch-Protectionbranch protection is not maximal on development and all release branches
8CI-Tests19 out of 22 merged PRs checked by a CI test -- score normalized to 8
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
2Code-ReviewFound 4/20 approved changesets -- score normalized to 2
0Contributorsproject has 0 contributing companies or organizations -- score normalized to 0
0Dangerous-Workflowdangerous workflow patterns detected
10Dependency-Update-Toolupdate tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
10Maintained30 commit(s) and 5 issue activity found in the last 90 days -- score normalized to 10
10Packagingpackaging workflow detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
0SASTSAST tool is not run on all commits -- score normalized to 0
0Security-Policysecurity policy file not detected
0Signed-ReleasesProject has not signed or included provenance with any releases.
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
1Vulnerabilities9 existing vulnerabilities detected
Direkte Abhängigkeiten 18
RegistryPaketVersionsvorgabeManifest
crates.iosimd-json0.17Cargo.toml
crates.ioserde1Cargo.toml
crates.ioserde_json1Cargo.toml
crates.iorusqlite0.40Cargo.toml
crates.ioratatui0.30Cargo.toml
crates.iocrossterm0.28Cargo.toml
crates.ioclap4Cargo.toml
crates.iorayon1.12Cargo.toml
crates.iotokio1Cargo.toml
crates.iochrono0.4Cargo.toml
crates.iodirectories5Cargo.toml
crates.ioglob0.3Cargo.toml
crates.iothiserror2Cargo.toml
crates.ioanyhow1Cargo.toml
crates.ioreqwest0.12Cargo.toml
crates.iofs20.4Cargo.toml
crates.ioterminal-light1Cargo.toml
crates.iotoml1.1.2Cargo.toml
Alle Abhängigkeiten nicht erhoben

Der aufgelöste Abhängigkeitssatz konnte für diesen Bericht nicht erhoben werden: GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

JSON-Rohbericht maschinenlesbar
{
  "data": {
    "repo": {
      "topics": [
        "ai-billing",
        "ai-coding",
        "ai-cost",
        "ai-tools",
        "anthropic",
        "claude-code",
        "cli",
        "codex-cli",
        "cost-monitor",
        "cost-tracking",
        "developer-tools",
        "gemini-cli",
        "llm",
        "multi-cli",
        "openai",
        "rust",
        "terminal",
        "token-tracker",
        "token-usage",
        "tui"
      ],
      "is_fork": false,
      "size_kb": 6758,
      "has_wiki": true,
      "homepage": "https://www.npmjs.com/package/toktrack",
      "languages": {
        "Rust": 857424,
        "Shell": 5365,
        "Makefile": 359,
        "JavaScript": 1695
      },
      "pushed_at": "2026-07-22T02:12:28Z",
      "created_at": "2026-01-26T13:17:10Z",
      "owner_type": "User",
      "updated_at": "2026-07-22T02:12:32Z",
      "description": "Ultra-fast token & cost tracker for LLM Token Usage (e.g. Claude Code)",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "MIT",
      "default_branch": "main",
      "license_spdx_raw": "MIT",
      "primary_language": "Rust",
      "significant_languages": [
        "Rust"
      ]
    },
    "owner": {
      "blog": "https://mag1c.tistory.com/",
      "name": null,
      "type": "User",
      "login": "mag123c",
      "company": null,
      "location": "Republic of Korea",
      "followers": 97,
      "avatar_url": "https://avatars.githubusercontent.com/u/120711308?v=4",
      "created_at": "2022-12-16T08:14:52Z",
      "is_verified": null,
      "public_repos": 88,
      "account_age_days": 1315
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v2.16.0",
          "kind": "minor",
          "published_at": "2026-07-18T07:04:07Z"
        },
        {
          "tag": "v2.15.0",
          "kind": "minor",
          "published_at": "2026-07-08T12:17:48Z"
        },
        {
          "tag": "v2.14.1",
          "kind": "patch",
          "published_at": "2026-07-03T00:50:13Z"
        },
        {
          "tag": "v2.14.0",
          "kind": "minor",
          "published_at": "2026-07-02T04:34:43Z"
        },
        {
          "tag": "v2.13.1",
          "kind": "patch",
          "published_at": "2026-06-27T13:05:16Z"
        },
        {
          "tag": "v2.13.0",
          "kind": "minor",
          "published_at": "2026-06-26T13:03:45Z"
        },
        {
          "tag": "v2.12.0",
          "kind": "minor",
          "published_at": "2026-06-21T08:35:29Z"
        },
        {
          "tag": "v2.11.0",
          "kind": "minor",
          "published_at": "2026-06-20T14:41:43Z"
        },
        {
          "tag": "v2.10.0",
          "kind": "minor",
          "published_at": "2026-06-08T06:16:38Z"
        },
        {
          "tag": "v2.9.0",
          "kind": "minor",
          "published_at": "2026-06-06T08:47:29Z"
        },
        {
          "tag": "v2.8.1",
          "kind": "patch",
          "published_at": "2026-06-04T02:54:58Z"
        },
        {
          "tag": "v2.8.0",
          "kind": "minor",
          "published_at": "2026-06-01T08:48:15Z"
        },
        {
          "tag": "v2.7.4",
          "kind": "patch",
          "published_at": "2026-05-14T20:59:56Z"
        },
        {
          "tag": "v2.7.3",
          "kind": "patch",
          "published_at": "2026-05-14T20:32:58Z"
        },
        {
          "tag": "v2.7.2",
          "kind": "patch",
          "published_at": "2026-05-14T13:15:09Z"
        },
        {
          "tag": "v2.7.1",
          "kind": "patch",
          "published_at": "2026-05-14T13:02:04Z"
        },
        {
          "tag": "v2.7.0",
          "kind": "minor",
          "published_at": "2026-05-02T01:55:49Z"
        },
        {
          "tag": "v2.6.0",
          "kind": "minor",
          "published_at": "2026-04-27T12:36:23Z"
        },
        {
          "tag": "v2.5.0",
          "kind": "minor",
          "published_at": "2026-04-19T02:44:55Z"
        },
        {
          "tag": "v2.4.1",
          "kind": "patch",
          "published_at": "2026-04-18T14:13:29Z"
        },
        {
          "tag": "v2.4.0",
          "kind": "minor",
          "published_at": "2026-04-08T11:50:40Z"
        },
        {
          "tag": "v2.3.2",
          "kind": "patch",
          "published_at": "2026-04-04T13:51:11Z"
        },
        {
          "tag": "v2.3.1",
          "kind": "patch",
          "published_at": "2026-04-04T06:19:34Z"
        },
        {
          "tag": "v2.3.0",
          "kind": "minor",
          "published_at": "2026-04-04T04:43:01Z"
        },
        {
          "tag": "v2.2.0",
          "kind": "minor",
          "published_at": "2026-04-03T12:23:53Z"
        },
        {
          "tag": "v2.1.2",
          "kind": "patch",
          "published_at": "2026-03-18T04:49:50Z"
        },
        {
          "tag": "v2.1.1",
          "kind": "patch",
          "published_at": "2026-03-18T04:36:53Z"
        },
        {
          "tag": "v2.1.0",
          "kind": "minor",
          "published_at": "2026-03-18T02:44:30Z"
        },
        {
          "tag": "v2.0.0",
          "kind": "major",
          "published_at": "2026-03-17T00:22:48Z"
        },
        {
          "tag": "v1.2.1",
          "kind": "patch",
          "published_at": "2026-03-14T05:11:28Z"
        },
        {
          "tag": "v1.2.0",
          "kind": "minor",
          "published_at": "2026-03-13T13:37:44Z"
        },
        {
          "tag": "v1.1.2",
          "kind": "patch",
          "published_at": "2026-03-03T07:53:45Z"
        },
        {
          "tag": "v1.1.1",
          "kind": "patch",
          "published_at": "2026-02-27T11:54:01Z"
        },
        {
          "tag": "v1.1.0",
          "kind": "minor",
          "published_at": "2026-02-25T13:00:22Z"
        },
        {
          "tag": "v1.0.5",
          "kind": "patch",
          "published_at": "2026-02-25T07:06:56Z"
        },
        {
          "tag": "v1.0.4",
          "kind": "patch",
          "published_at": "2026-02-09T14:10:20Z"
        },
        {
          "tag": "v1.0.3",
          "kind": "patch",
          "published_at": "2026-02-09T13:06:02Z"
        },
        {
          "tag": "v1.0.2",
          "kind": "patch",
          "published_at": "2026-02-09T12:58:53Z"
        },
        {
          "tag": "v1.0.1",
          "kind": "patch",
          "published_at": "2026-02-09T08:40:25Z"
        },
        {
          "tag": "v1.0.0",
          "kind": "major",
          "published_at": "2026-02-09T05:49:02Z"
        },
        {
          "tag": "v0.1.52",
          "kind": "patch",
          "published_at": "2026-02-09T05:17:30Z"
        },
        {
          "tag": "v0.1.51",
          "kind": "patch",
          "published_at": "2026-02-06T12:09:37Z"
        },
        {
          "tag": "v0.1.50",
          "kind": "patch",
          "published_at": "2026-02-06T10:49:48Z"
        },
        {
          "tag": "v0.1.49",
          "kind": "patch",
          "published_at": "2026-02-06T07:07:42Z"
        },
        {
          "tag": "v0.1.48",
          "kind": "patch",
          "published_at": "2026-02-06T06:51:02Z"
        },
        {
          "tag": "v0.1.47",
          "kind": "patch",
          "published_at": "2026-02-06T06:44:48Z"
        },
        {
          "tag": "v0.1.46",
          "kind": "patch",
          "published_at": "2026-02-06T05:53:08Z"
        },
        {
          "tag": "v0.1.45",
          "kind": "patch",
          "published_at": "2026-02-06T05:01:21Z"
        },
        {
          "tag": "v0.1.44",
          "kind": "patch",
          "published_at": "2026-02-06T03:10:50Z"
        },
        {
          "tag": "v0.1.42",
          "kind": "patch",
          "published_at": "2026-02-06T02:28:31Z"
        },
        {
          "tag": "v0.1.41",
          "kind": "patch",
          "published_at": "2026-02-06T01:34:37Z"
        },
        {
          "tag": "v0.1.40",
          "kind": "patch",
          "published_at": "2026-02-05T08:29:16Z"
        },
        {
          "tag": "v0.1.39",
          "kind": "patch",
          "published_at": "2026-02-05T08:16:42Z"
        },
        {
          "tag": "v0.1.38",
          "kind": "patch",
          "published_at": "2026-02-05T08:00:10Z"
        },
        {
          "tag": "v0.1.37",
          "kind": "patch",
          "published_at": "2026-02-05T06:41:19Z"
        },
        {
          "tag": "v0.1.36",
          "kind": "patch",
          "published_at": "2026-02-05T03:02:59Z"
        },
        {
          "tag": "v0.1.35",
          "kind": "patch",
          "published_at": "2026-02-05T02:38:49Z"
        },
        {
          "tag": "v0.1.34",
          "kind": "patch",
          "published_at": "2026-02-05T01:53:18Z"
        },
        {
          "tag": "v0.1.33",
          "kind": "patch",
          "published_at": "2026-02-05T01:40:58Z"
        },
        {
          "tag": "v0.1.32",
          "kind": "patch",
          "published_at": "2026-02-04T05:02:10Z"
        },
        {
          "tag": "v0.1.31",
          "kind": "patch",
          "published_at": "2026-02-03T02:31:55Z"
        },
        {
          "tag": "v0.1.30",
          "kind": "patch",
          "published_at": "2026-02-03T02:06:51Z"
        },
        {
          "tag": "v0.1.29",
          "kind": "patch",
          "published_at": "2026-02-02T08:51:01Z"
        },
        {
          "tag": "v0.1.28",
          "kind": "patch",
          "published_at": "2026-02-02T06:19:08Z"
        },
        {
          "tag": "v0.1.27",
          "kind": "patch",
          "published_at": "2026-02-02T06:18:53Z"
        },
        {
          "tag": "v0.1.26",
          "kind": "patch",
          "published_at": "2026-02-01T06:14:54Z"
        },
        {
          "tag": "v0.1.25",
          "kind": "patch",
          "published_at": "2026-02-01T06:13:55Z"
        },
        {
          "tag": "v0.1.24",
          "kind": "patch",
          "published_at": "2026-02-01T06:11:59Z"
        },
        {
          "tag": "v0.1.23",
          "kind": "patch",
          "published_at": "2026-02-01T05:58:01Z"
        },
        {
          "tag": "v0.1.22",
          "kind": "patch",
          "published_at": "2026-01-31T03:21:28Z"
        },
        {
          "tag": "v0.1.21",
          "kind": "patch",
          "published_at": "2026-01-30T07:42:32Z"
        },
        {
          "tag": "v0.1.20",
          "kind": "patch",
          "published_at": "2026-01-30T03:21:54Z"
        },
        {
          "tag": "v0.1.19",
          "kind": "patch",
          "published_at": "2026-01-30T02:07:02Z"
        },
        {
          "tag": "v0.1.18",
          "kind": "patch",
          "published_at": "2026-01-30T00:27:50Z"
        },
        {
          "tag": "v0.1.17",
          "kind": "patch",
          "published_at": "2026-01-29T08:52:53Z"
        },
        {
          "tag": "v0.1.16",
          "kind": "patch",
          "published_at": "2026-01-29T07:15:11Z"
        },
        {
          "tag": "v0.1.15",
          "kind": "patch",
          "published_at": "2026-01-29T05:45:14Z"
        },
        {
          "tag": "v0.1.14",
          "kind": "patch",
          "published_at": "2026-01-29T05:13:21Z"
        },
        {
          "tag": "v0.1.13",
          "kind": "patch",
          "published_at": "2026-01-29T05:05:31Z"
        },
        {
          "tag": "v0.1.12",
          "kind": "patch",
          "published_at": "2026-01-29T04:24:26Z"
        },
        {
          "tag": "v0.1.11",
          "kind": "patch",
          "published_at": "2026-01-29T02:50:07Z"
        },
        {
          "tag": "v0.1.10",
          "kind": "patch",
          "published_at": "2026-01-28T13:27:15Z"
        },
        {
          "tag": "v0.1.9",
          "kind": "patch",
          "published_at": "2026-01-28T13:18:00Z"
        },
        {
          "tag": "v0.1.8",
          "kind": "patch",
          "published_at": "2026-01-28T13:16:37Z"
        },
        {
          "tag": "v0.1.7",
          "kind": "patch",
          "published_at": "2026-01-28T13:15:08Z"
        },
        {
          "tag": "v0.1.6",
          "kind": "patch",
          "published_at": "2026-01-28T13:12:37Z"
        },
        {
          "tag": "v0.1.5",
          "kind": "patch",
          "published_at": "2026-01-28T13:04:42Z"
        },
        {
          "tag": "v0.1.4",
          "kind": "patch",
          "published_at": "2026-01-28T12:59:35Z"
        },
        {
          "tag": "toktrack-v0.1.3",
          "kind": "other",
          "published_at": "2026-01-28T12:51:56Z"
        },
        {
          "tag": "toktrack-v0.1.2",
          "kind": "other",
          "published_at": "2026-01-28T12:47:30Z"
        },
        {
          "tag": "v0.1.1",
          "kind": "patch",
          "published_at": "2026-01-28T07:46:31Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "d83d75d7e624284b68d75d9edfd4f66ee8889fe2",
          "body": "Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(hooks): translate hook messages to English",
          "author_name": "mag123c",
          "author_login": "mag123c",
          "committed_at": "2026-07-22T02:12:27Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "257ce0eea6c95a0d01571c03359073aaf96b104a",
          "body": "Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(review): add direction-fit signal to author review gate",
          "author_name": "mag123c",
          "author_login": "mag123c",
          "committed_at": "2026-07-22T02:12:27Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "964550a293a820d0841a887c1c05150e5c433c39",
          "body": "Bumps [clap](https://github.com/clap-rs/clap) from 4.6.1 to 4.6.3.\n- [Release notes](https://github.com/clap-rs/clap/releases)\n- [Changelog](https://github.com/clap-rs/clap/blob/master/CHANGELOG.md)\n- [Commits](https://github.com/clap-rs/clap/compare/clap_complete-v4.6.1...clap_complete-v4.6.3)\n\n---\n[…]\nirect:production\n  update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(deps): bump clap from 4.6.1 to 4.6.3 (#220)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-21T04:37:10Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "162ae145bfce48b2de5daea24dfd3396e5dcbc89",
          "body": "Bumps [thiserror](https://github.com/dtolnay/thiserror) from 2.0.18 to 2.0.19.\n- [Release notes](https://github.com/dtolnay/thiserror/releases)\n- [Commits](https://github.com/dtolnay/thiserror/compare/2.0.18...2.0.19)\n\n---\nupdated-dependencies:\n- dependency-name: thiserror\n  dependency-version: 2.0.\n[…]\nirect:production\n  update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(deps): bump thiserror from 2.0.18 to 2.0.19 (#219)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-21T04:37:01Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "947b308f2b327996342693ce540845ac93b2f3db",
          "body": "Bumps [toml](https://github.com/toml-rs/toml) from 1.1.2+spec-1.1.0 to 1.1.3+spec-1.1.0.\n- [Commits](https://github.com/toml-rs/toml/compare/toml-v1.1.2...toml-v1.1.3)\n\n---\nupdated-dependencies:\n- dependency-name: toml\n  dependency-version: 1.1.3+spec-1.1.0\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(deps): bump toml from 1.1.2+spec-1.1.0 to 1.1.3+spec-1.1.0 (#218)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-21T04:36:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8c4aa0759edd3cbdbb35a84534199119ddca3371",
          "body": "Bumps [tokio](https://github.com/tokio-rs/tokio) from 1.52.3 to 1.53.1.\n- [Release notes](https://github.com/tokio-rs/tokio/releases)\n- [Commits](https://github.com/tokio-rs/tokio/compare/tokio-1.52.3...tokio-1.53.1)\n\n---\nupdated-dependencies:\n- dependency-name: tokio\n  dependency-version: 1.53.1\n  \n[…]\nirect:production\n  update-type: version-update:semver-minor\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(deps): bump tokio from 1.52.3 to 1.53.1 (#217)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-21T04:36:48Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "cf600cdb0cf8f565ab194acc73a8cc60e9a53175",
          "body": "Bumps [actions/setup-node](https://github.com/actions/setup-node) from 6 to 7.\n- [Release notes](https://github.com/actions/setup-node/releases)\n- [Commits](https://github.com/actions/setup-node/compare/v6...v7)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-node\n  dependency-version: '\n[…]\nirect:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(ci): bump actions/setup-node from 6 to 7 (#216)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-21T04:36:41Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5fdf24040f823a91623b7b03c3d754f93e8c1430",
          "body": "Bumps [serde](https://github.com/serde-rs/serde) from 1.0.228 to 1.0.229.\n- [Release notes](https://github.com/serde-rs/serde/releases)\n- [Commits](https://github.com/serde-rs/serde/compare/v1.0.228...v1.0.229)\n\n---\nupdated-dependencies:\n- dependency-name: serde\n  dependency-version: 1.0.229\n  depen\n[…]\nirect:production\n  update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(deps): bump serde from 1.0.228 to 1.0.229 (#215)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-21T04:36:15Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "7ac8a50af1dab9a6df312b1d268fd9d5982dda84",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release 2.16.0 (#212)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-18T07:03:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "62864b6859ff8588f7efcfa81fc40927b7a96f4a",
          "body": null,
          "is_bot": false,
          "headline": "refactor(cli): remove redundant comments (#214)",
          "author_name": "mag123c",
          "author_login": "mag123c",
          "committed_at": "2026-07-17T09:28:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e7c17539f24054ba5d3397da88512cb1b248383d",
          "body": "…ns (#213)\n\nFollow-up to the review on #211.\n\n- Dedup collision: a multi-model session.shutdown with no matching\n  assistant.message events sent every model through the else-branch with an\n  identical message_id:request_id key (\"<session>:session.shutdown\"), so\n  parse_and_dedup dropped all but the \n[…]\nll re-parse) instead of dropping it or recomputing a day from recent\n  files alone (which would clobber that day's other, non-recent sessions).\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(parser): stop silent token loss and stale cache in copilot sessio…",
          "author_name": "mag123c",
          "author_login": "mag123c",
          "committed_at": "2026-07-17T09:01:40Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "6916b771591b453582f647ebb3e680131872ace1",
          "body": "- Implement GitHub Copilot CLI log tracking\n- Parse session events and attribute per-model\n- Normalize token counts by subtracting cached input\n- Reconcile shutdown totals across message times\n- Avoid cross-midnight token double-counting\n- Handle resumed sessions by preserving open events\n- Support COPILOT_HOME environment overrides\n- Estimate usage costs using LiteLLM pricing\n- Strip provider suffixes from model display names",
          "is_bot": false,
          "headline": "feat(main): Add copilot usage tracking (#211)",
          "author_name": "Nicholas Lim",
          "author_login": "niclimcy",
          "committed_at": "2026-07-17T08:44:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "741cb3f6ef71b2f98a41b167b473657edd8ac607",
          "body": "Branch ruleset now requires the 3 test checks + up-to-date before\nmerging into main, so PR CI already validates the exact post-merge\nstate — the push:[main] trigger only re-ran the same matrix redundantly.\nDrop it and cancel superseded per-PR runs.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "ci: run only on pull_request, add concurrency cancel",
          "author_name": "mag123c",
          "author_login": "mag123c",
          "committed_at": "2026-07-14T12:37:05Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "e7ed003f7a79d61a3c89bd165f5e3928cffc979c",
          "body": "Keep only the non-obvious WHY (gemini-default is a moving default alias,\nnot a fixed model); the helper call already states the WHAT.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(parser): trim WHAT-restating comment on gemini-default resolve",
          "author_name": "mag123c",
          "author_login": "mag123c",
          "committed_at": "2026-07-14T12:21:40Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "1ac99ec6c11583ef284aee2a51e89852e67fcd26",
          "body": "Bumps [simd-json](https://github.com/simd-lite/simd-json) from 0.14.3 to 0.17.3.\n- [Commits](https://github.com/simd-lite/simd-json/compare/v0.14.3...v0.17.3)\n\n---\nupdated-dependencies:\n- dependency-name: simd-json\n  dependency-version: 0.17.3\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(deps): bump simd-json from 0.14.3 to 0.17.3 (#210)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-14T12:19:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "efc2f34f4e26d3795e5323dc9d9f0692f5a86bce",
          "body": "The gemini-default/missing-model timestamp dispatch was duplicated\nverbatim across the Some and None match arms — extract it into a single\n`resolve_gemini_default(ts)` helper so the era boundaries live in one\nplace. Behavior is unchanged.\n\nAlso add a focused unit test covering the exact bucket bound\n[…]\n existing\nmid-bucket cases didn't pin — this locks the `<` (exclusive upper\nbound) semantics against a `<`/`<=` regression.\n\nFollow-up to #209.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "refactor(parser): dedupe gemini-default resolver, pin boundaries",
          "author_name": "mag123c",
          "author_login": "mag123c",
          "committed_at": "2026-07-14T12:17:20Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "89a4de047f40ea8a9ab2d2e2d5fd4696d9792cc9",
          "body": "Map gemini-default / missing model to a concrete Gemini model by the record's timestamp (pre-2025-03-25 → 2.0-flash, pre-2026-05-19 → 2.5-flash, else 3.5-flash). Add normalizer fallbacks for gemini-default / gemini-3-flash-a / gemini-3-pro-a. Bump CACHE_VERSION 14→15.",
          "is_bot": false,
          "headline": "fix(parser): Resolve gemini-default by timestamp (#209)",
          "author_name": "Nicholas Lim",
          "author_login": "niclimcy",
          "committed_at": "2026-07-14T12:15:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e2f43907f121a412a634d9d6fe94a0ce221f647a",
          "body": "release-please's Auto-merge step was squash-merging the Release PR\nimmediately, so every feat/fix that landed on main shipped a release\nright away. Remove that step (and the GITHUB_TOKEN-gotcha workaround\nsecond release-please invocation it required) to restore the native\ntwo-step flow: merges accumulate in a single \"chore(main): release\nX.Y.Z\" PR, and a release only goes out when a maintainer merges that\nPR by hand.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(ci): switch to manual release-cut (drop auto-merge)",
          "author_name": "mag123c",
          "author_login": "mag123c",
          "committed_at": "2026-07-14T12:09:11Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "dbb198c1c266293621e3f7357cd4600defcfcc8b",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release 2.15.0 (#208)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-08T12:17:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "558efc30e9cd69e0804feaf0435878853fc2249a",
          "body": "…tables (#207)\n\n* feat(tui): add sort key/direction types and DailyData sorting\n\nGroundwork for the daily-table sort toggle (#206): SortKey cycles\ndate -> cost -> tokens with per-key default directions (date ascending,\ncost/tokens descending), and DailyData::apply_sort re-orders the daily,\nweekly, a\n[…]\n, passed to SourceDetailView\nvia a with_sort builder), add `s/S: Sort` to the keybinding footer, and\nlist `s / S` in the `?` help overlay.\n\n* docs(readme): document s/S sort keybinding in both READMEs",
          "is_bot": false,
          "headline": "feat(tui): add sort key/direction toggle (date/cost/tokens) to daily …",
          "author_name": "KANGUK LEE",
          "author_login": "iamkanguk97",
          "committed_at": "2026-07-08T12:06:43Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f05f5715fc3b5e62913c9f1927c2a7546fb92b15",
          "body": "Bumps [terminal-light](https://github.com/Canop/terminal-light) from 1.8.0 to 1.9.0.\n- [Commits](https://github.com/Canop/terminal-light/commits)\n\n---\nupdated-dependencies:\n- dependency-name: terminal-light\n  dependency-version: 1.9.0\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(deps): bump terminal-light from 1.8.0 to 1.9.0 (#205)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-07T04:54:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "50a074ffc7aa7ec9b02ad4f10cdd0c08d8ad530a",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release 2.14.1 (#204)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-03T00:50:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7acdd1f81ade01013945816409be36f8cee04266",
          "body": "* This allows brew to track updates properly",
          "is_bot": false,
          "headline": "fix(cli): Add explicit version to homebrew formula (#203)",
          "author_name": "Nicholas Lim",
          "author_login": "niclimcy",
          "committed_at": "2026-07-03T00:39:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "877cbbce97b8628da3bf0dd97eab4ced571cef54",
          "body": "README.md's Keyboard Shortcuts table got the 'r' refresh key from\n#199 but README.ko.md's mirrored table was missed.\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(readme): add 'r' refresh keybinding to Korean README (#202)",
          "author_name": "mag123c",
          "author_login": "mag123c",
          "committed_at": "2026-07-02T13:10:58Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "7a23488ab3a8870c0f0d81725e3ed68d79ba5879",
          "body": "Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(review): pin code review sub-agent to Sonnet 5",
          "author_name": "mag123c",
          "author_login": "mag123c",
          "committed_at": "2026-07-02T06:46:08Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "19b9ffa5c8078d00aba6a7e90ad3b46c53ac9f68",
          "body": "Fix the OIDC->app-token 401 by posting comments with the default Actions\ntoken instead of the Claude GitHub App exchange (which 401s unless the app\nis installed); drop the now-unneeded id-token permission. Add paths-ignore\nso PRs touching only docs/agent-context/assets are not reviewed.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "ci: post review via GITHUB_TOKEN and skip docs-only PRs",
          "author_name": "mag123c",
          "author_login": "mag123c",
          "committed_at": "2026-07-02T06:46:08Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "d1e33d080f8a2afb7a5fa435d53ea17536413bd5",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release 2.14.0 (#201)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-02T04:34:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3d806f6d8a4a5fd78918c00614371456c84b0e08",
          "body": "Press 'r' in the dashboard or drill-down views to reload usage data on\na background thread without leaving the TUI. The current data stays on\nscreen with a top-right indicator while the refresh runs; a failed\nrefresh keeps the previous data, and 'r' on the error screen retries.\nRefreshed data invalidates any previously computed audit.\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(tui): add manual refresh with 'r' key (#198) (#199)",
          "author_name": "mag123c",
          "author_login": "mag123c",
          "committed_at": "2026-07-02T04:23:36Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "b5cd4b80863f8db8bdee4711160333e713ec9e6f",
          "body": "The review job fails at startup with \"Could not fetch an OIDC token\" —\nclaude-code-action exchanges an OIDC token for its GitHub token, which\nrequires id-token: write in the workflow permissions.\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "ci: add id-token permission for Claude review action (#200)",
          "author_name": "mag123c",
          "author_login": "mag123c",
          "committed_at": "2026-07-02T04:18:28Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "749f7f73136d0ab8c25c7528ca76ef125a7da0d5",
          "body": "Bumps [anyhow](https://github.com/dtolnay/anyhow) from 1.0.102 to 1.0.103.\n- [Release notes](https://github.com/dtolnay/anyhow/releases)\n- [Commits](https://github.com/dtolnay/anyhow/compare/1.0.102...1.0.103)\n\n---\nupdated-dependencies:\n- dependency-name: anyhow\n  dependency-version: 1.0.103\n  depen\n[…]\nirect:production\n  update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(deps): bump anyhow from 1.0.102 to 1.0.103 (#197)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-06-30T14:01:26Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "acfef0d5b8b04930c7baff9ff155f82842978231",
          "body": "Bumps [actions/checkout](https://github.com/actions/checkout) from 4 to 7.\n- [Release notes](https://github.com/actions/checkout/releases)\n- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/actions/checkout/compare/v4...v7)\n\n---\nupdated-dependenc\n[…]\nirect:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(ci): bump actions/checkout from 4 to 7 (#196)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-06-30T14:01:15Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "bb864a84e16c6de0f260d5f233fa2cd1fdee7460",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release 2.13.1 (#195)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-06-27T13:05:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d9e65c0eabf024c9b4f5b891fe319b1f77e325af",
          "body": "…194)\n\n* fix(parser): close unresolved review nits from recently merged PRs\n\nMops up the non-blocking \"whenever you're next in there\" nits that\nreviewers left on PRs #187, #188, and #192 and that weren't part of the\nrespective merges.\n\n- antigravity (#192): `file_mtime` uses `i64::try_from` instead \n[…]\nap summary branch is exercised.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: mag123c <diehreo@gmail.com>\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(parser): close unresolved review nits from recently merged PRs (#…",
          "author_name": "Michael Burr",
          "author_login": "CubityFirst",
          "committed_at": "2026-06-27T12:54:02Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "27ada5f0b2481b5514a83d58f64db7a9374575d1",
          "body": "- Add .github/workflows/claude-review.yml: automated author-perspective PR\n  review. Uses pull_request_target with base-only checkout (PR diff read via\n  `gh pr diff`, never executed); auto-runs for owner/collaborator PRs, fork\n  PRs gated behind the `claude-review` label. Injects the review guide a\n[…]\nmensions, asymmetric\n  rigor) since CI can only see checked-in files.\n- Translate all repo-local skill files to English (repo is English-main).\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "ci: add Claude PR review action and translate skills to English",
          "author_name": "mag123c",
          "author_login": "mag123c",
          "committed_at": "2026-06-27T09:32:25Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "ae23a1a7bd7b8009021201f9441e0649c10c2052",
          "body": null,
          "is_bot": false,
          "headline": "chore(skill): impl·verify·review 게이트-인식 반영",
          "author_name": "mag123c",
          "author_login": "mag123c",
          "committed_at": "2026-06-26T13:04:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2b0e75eb2c6807a725bfe88b133be9d282887145",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release 2.13.0 (#193)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-06-26T13:03:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f5ac9bfef042b085e92bcb4ea67d4a694dbc3bdf",
          "body": "Adds an Antigravity (Google agentic IDE/CLI) parser: decodes per-conversation SQLite protobuf blobs into token/cost usage, promoting Antigravity from a detected-but-unsupported stub to a first-class source.\n\nCo-authored-by: Michael Burr <cubity@cubityfir.st>",
          "is_bot": false,
          "headline": "feat(parser): add Antigravity IDE/CLI token tracking (#192)",
          "author_name": "Michael Burr",
          "author_login": "CubityFirst",
          "committed_at": "2026-06-26T12:52:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a424c72bd8f56778055b68646cf7edaab305a238",
          "body": "…ight+chained)",
          "is_bot": false,
          "headline": "chore(skill): clarify·wrap provenance·probe·plan-reconciliation 반영 (l…",
          "author_name": "mag123c",
          "author_login": "mag123c",
          "committed_at": "2026-06-26T12:46:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "52155f751cec3a76eef96e6e50f7077c08a6edf1",
          "body": "Bumps [ratatui](https://github.com/ratatui/ratatui) from 0.30.1 to 0.30.2.\n- [Release notes](https://github.com/ratatui/ratatui/releases)\n- [Changelog](https://github.com/ratatui/ratatui/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/ratatui/ratatui/compare/ratatui-v0.30.1...ratatui-v0.30.2)\n[…]\nirect:production\n  update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(deps): bump ratatui from 0.30.1 to 0.30.2 (#191)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-06-23T12:09:33Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "202aaabec0f6ad0790009537cd54490f1e85d73f",
          "body": "Bumps [actions/checkout](https://github.com/actions/checkout) from 4 to 7.\n- [Release notes](https://github.com/actions/checkout/releases)\n- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/actions/checkout/compare/v4...v7)\n\n---\nupdated-dependenc\n[…]\nirect:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(ci): bump actions/checkout from 4 to 7 (#190)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-06-23T12:09:25Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f14c3f181e36bb18f2f51932ec736c366da71828",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release 2.12.0 (#189)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-06-21T08:35:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1cc982397dddb58ad588c4fd671ad8e9b2ac8523",
          "body": "Removes the leading top-padding row from the Stats/Models/Projects/Audit widgets and the source/project drilldown so the tab bar sits on row 0 everywhere (Overview already did), and updates effective_visible_rows overhead constants (Dashboard 7→6, detail 8→7) so scroll math stays correct.\n\nCo-authored-by: Michael Burr <cubity@cubityfir.st>",
          "is_bot": false,
          "headline": "fix(tui): render nav bar on the top row across all views (#188)",
          "author_name": "Michael Burr",
          "author_login": "CubityFirst",
          "committed_at": "2026-06-21T08:24:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "19221fd8411f89cc4549c8746c538de4fd84b4fd",
          "body": "Adds a dedicated QwenParser handling both the new ~/.qwen/projects/<slug>/chats/<uuid>.jsonl layout (Qwen 0.18+) and the legacy ~/.qwen/tmp/*/chats/session-*.jsonl format, so Qwen usage is no longer silently dropped. New format reads tokens from usageMetadata (output de-counts thoughts to reconcile with totalTokenCount) and attributes per-project usage from the per-line cwd. Honors QWEN_HOME.\n\nCo-authored-by: Michael Burr <cubity@cubityfir.st>",
          "is_bot": false,
          "headline": "feat(parser): support Qwen Code >=0.18 projects log format (#187)",
          "author_name": "Michael Burr",
          "author_login": "CubityFirst",
          "committed_at": "2026-06-21T08:24:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "73d924acb4b315889ab94ac45a164a3e1fdf769d",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release 2.11.0 (#186)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-06-20T14:41:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f8316b76b09cd258490411f783f748dd1cb10b67",
          "body": "Adds a Projects tab with per-project (working-directory) token & cost breakdown, drill-down into per-day/per-model views, cwd extraction across Claude Code / Codex / OpenCode / PI Agent / Gemini, and a history-preserving cache migration (v14). Per-project paths are kept out of the public --json surface.\n\nCo-authored-by: Michael Burr <cubity@cubityfir.st>",
          "is_bot": false,
          "headline": "feat(tui): add Projects tab with per-project token breakdown (#185)",
          "author_name": "Michael Burr",
          "author_login": "CubityFirst",
          "committed_at": "2026-06-20T14:30:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9ca242fc7311d3998e91ea5c2c41b4c1a7b9163f",
          "body": "Bumps [rusqlite](https://github.com/rusqlite/rusqlite) from 0.40.0 to 0.40.1.\n- [Release notes](https://github.com/rusqlite/rusqlite/releases)\n- [Changelog](https://github.com/rusqlite/rusqlite/blob/master/Changelog.md)\n- [Commits](https://github.com/rusqlite/rusqlite/compare/v0.40.0...v0.40.1)\n\n---\n[…]\nirect:production\n  update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(deps): bump rusqlite from 0.40.0 to 0.40.1 (#183)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-06-16T09:10:31Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "47486bcc31314f4a34037e4d5b31583919abf0ae",
          "body": "Bumps [chrono](https://github.com/chronotope/chrono) from 0.4.44 to 0.4.45.\n- [Release notes](https://github.com/chronotope/chrono/releases)\n- [Changelog](https://github.com/chronotope/chrono/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/chronotope/chrono/compare/v0.4.44...v0.4.45)\n\n---\nupd\n[…]\nirect:production\n  update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(deps): bump chrono from 0.4.44 to 0.4.45 (#184)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-06-16T08:57:51Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e751f4b7956b14e5a5529b44c189cb01fcbb3d50",
          "body": "Bumps [ratatui](https://github.com/ratatui/ratatui) from 0.30.0 to 0.30.1.\n- [Release notes](https://github.com/ratatui/ratatui/releases)\n- [Changelog](https://github.com/ratatui/ratatui/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/ratatui/ratatui/compare/ratatui-v0.30.0...ratatui-v0.30.1)\n[…]\nirect:production\n  update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(deps): bump ratatui from 0.30.0 to 0.30.1 (#182)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-06-16T08:57:16Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "0259173b375ef6002606c46b38f93ceccb9a2ef1",
          "body": "Add docs/shell-integration.md showing how to surface today's total AI spend in the zsh/bash/fish prompt via `toktrack daily --json --local-only` + jq. The helper guards against stale (non-today) and empty data, uses the warm local-only cache path for low latency, and includes a background-cached variant for zero prompt overhead. Linked from both READMEs under Usage.\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: add shell prompt integration guide (#180)",
          "author_name": "mag123c",
          "author_login": "mag123c",
          "committed_at": "2026-06-08T06:30:11Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "7bb0bcefe3b6d8d854959491fc703cf74e394744",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release 2.10.0 (#179)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-06-08T06:16:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a2794d9c7c62178af96d0c823985ed5aefd1fc45",
          "body": "* feat(cli): add audit subcommand for data-preservation coverage\n\nNew `toktrack audit` (text) and `toktrack audit --json` report per-source, per-day coverage: live (raw file on disk), cache_only (raw deleted but preserved by toktrack), or missing (no data — labelled 'unused or lost', never claimed a\n[…]\n; drop the unused AuditView::with_tab; clarify the succ_opt expect message.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: data-preservation audit (CLI + TUI) (#178)",
          "author_name": "mag123c",
          "author_login": "mag123c",
          "committed_at": "2026-06-08T06:05:38Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "c88c4f6357d40898f41eccf704d85e52c03d8e63",
          "body": "Reposition the README and package descriptions around the persistent-cache data-preservation wedge instead of raw speed, which is no longer a defensible differentiator now that the main alternative is also Rust.\n\n- Rewrite README lead (en/ko) to name the wedge and the mechanism competitors lack (per\n[…]\nture list\n- Update npm/package.json description (was 3 CLIs, outdated) and Cargo.toml to lead with preservation and list all six supported CLIs\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: lead with data-preservation wedge, demote speed messaging (#177)",
          "author_name": "mag123c",
          "author_login": "mag123c",
          "committed_at": "2026-06-08T06:05:26Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "5ee9c601a1a9e0d5a1aac2b689dc2611673add38",
          "body": "clarify가 EnterPlanMode 진입 대신 PLAN을 인라인 제시 후 /implement를 직접 호출하도록 변경. 관련 추적 훅(plan-exit-detector, impl-after-plan) 비활성화 및 settings.json hook 정리.",
          "is_bot": false,
          "headline": "chore: remove plan mode entry from clarify workflow",
          "author_name": "mag123c",
          "author_login": "mag123c",
          "committed_at": "2026-06-08T01:26:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bf43919dac292311f90eb02f7672df54dfffcbc2",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release 2.9.0 (#176)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-06-06T08:47:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6d0cdd7df12cfdca7a9b5e1da3f58605f0c66762",
          "body": "…ts. (#156)\n\n* feat:Refactor parsers into source instances\n\n* feat:Add configurable SSH remote Codex sources",
          "is_bot": false,
          "headline": "feat: Add support for tracking codex usage from SSH remote environmen…",
          "author_name": "Sun Yihang",
          "author_login": "Ayakaee",
          "committed_at": "2026-06-06T08:36:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0601ec8153f434e9efb53f39d9e65eac2fb44ab1",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release 2.8.1 (#175)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-06-04T02:54:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d857c7f6a839e32912186e2b1e3372536cbf88ae",
          "body": "The antigravity detection emitted a stderr eprintln! note. In TUI mode\ndata loads in a background thread after ratatui enters the alternate\nscreen + raw mode, so the line wrote straight to the terminal, overlapped\nthe heatmap, and persisted across tab switches (ratatui's diff buffer\nnever repaints t\n[…]\n.\n\nThe unsupported status is already surfaced in the TUI as the dimmed\n\"(unsupported — no local usage)\" source row, so drop the redundant\nstderr note and keep returning the disabled SourceUsage entry.",
          "is_bot": false,
          "headline": "fix(services): Stop antigravity notice from bleeding over the TUI (#174)",
          "author_name": "Nicholas Lim",
          "author_login": "niclimcy",
          "committed_at": "2026-06-04T02:43:49Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "fbe791bb1cb1a4f63ff1b936ea451f5f1d3960db",
          "body": "Bumps [rusqlite](https://github.com/rusqlite/rusqlite) from 0.39.0 to 0.40.0.\n- [Release notes](https://github.com/rusqlite/rusqlite/releases)\n- [Changelog](https://github.com/rusqlite/rusqlite/blob/master/Changelog.md)\n- [Commits](https://github.com/rusqlite/rusqlite/compare/v0.39.0...v0.40.0)\n\n---\n[…]\nncies:\n- dependency-name: rusqlite\n  dependency-version: 0.40.0\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "chore(deps): bump rusqlite from 0.39.0 to 0.40.0",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-06-04T02:37:49Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "55f8025463bf45e717a37d79832b210b50c5c654",
          "body": "docs: sync Korean README for 2.8.0",
          "is_bot": false,
          "headline": "docs: sync Korean README for 2.8.0 (#172)",
          "author_name": "mag123c",
          "author_login": "mag123c",
          "committed_at": "2026-06-01T12:14:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2ee9a55f358996c48c2829fc0091c09b8a7dee9a",
          "body": "README.ko.md was missed in the 2.8.0 docs pass. Mirror the English updates:\nQwen Code + Antigravity(unsupported) in supported sources, per-source env-var\ntable, estimated (~) cost marker + offline snapshot note. Refresh the roadmap\nline in both READMEs (6 CLIs + planned milestones).",
          "is_bot": false,
          "headline": "docs: sync Korean README and refresh roadmap for 2.8.0",
          "author_name": "mag123c",
          "author_login": "mag123c",
          "committed_at": "2026-06-01T12:04:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ab589505780030e0168fd9a7f9b3f6e4f6412ae1",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release 2.8.0 (#170)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-06-01T08:48:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2d8ccc5231c2a7c5899b6df2c1f50e22a238b4ec",
          "body": "release: 2.8.0 — accuracy fixes + Qwen, tiered pricing, web_fetch, offline snapshot",
          "is_bot": false,
          "headline": "release: 2.8.0 (#169)",
          "author_name": "mag123c",
          "author_login": "mag123c",
          "committed_at": "2026-06-01T08:36:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2fbee2ebbdd8c133eefacb7de584e8172d2dcc34",
          "body": "- gemini.rs: use saturating_add when folding tool tokens into input (was bare\n  `+`), matching the codebase's overflow-safe convention (P1).\n- pricing.rs: warn instead of silently producing empty pricing if the bundled\n  snapshot ever fails to parse (P3).",
          "is_bot": false,
          "headline": "fix: address 2.8.0 review findings",
          "author_name": "mag123c",
          "author_login": "mag123c",
          "committed_at": "2026-06-01T08:29:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f995148edd508bb4c264645bc732c08603f70893",
          "body": "Reflect the round 1-4 changes in user-facing docs:\n- Add Qwen Code to supported sources (README, npm, crate description, homebrew desc).\n- Add Antigravity as detected-but-unsupported.\n- Document per-source data-dir env vars (CLAUDE_CONFIG_DIR, CODEX_HOME,\n  GEMINI_CLI_HOME, QWEN_HOME, OPENCODE_DATA_DIR/XDG_DATA_HOME,\n  PI_CODING_AGENT_SESSION_DIR) and the estimated-cost (~) marker + offline snapshot.\n- Update internal architecture parser table.",
          "is_bot": false,
          "headline": "docs: update README/crate/homebrew for 2.8.0 sources",
          "author_name": "mag123c",
          "author_login": "mag123c",
          "committed_at": "2026-06-01T08:25:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ac39686c8c5f14dd3079f356831c0b7a235b8caa",
          "body": "Qwen Code stores sessions at ~/.qwen/tmp/*/chats/session-*.{json,jsonl} with a\nformat identical to Gemini CLI (it is a fork), including `input` containing\n`cached` and a reconciling `total`. Parameterize GeminiParser with a source\nlabel + data dir and add new_qwen() (honors QWEN_HOME, default ~/.qwe\n[…]\ntotal reconciliation apply\nverbatim. Registry now has 6 parsers.\n\nFixtures: a sanitized Qwen session + a contract test (cached excluded from\ninput, total_tokens() == reported total, source == \"qwen\").",
          "is_bot": false,
          "headline": "feat(parser): add Qwen Code support (Gemini-format fork)",
          "author_name": "mag123c",
          "author_login": "mag123c",
          "committed_at": "2026-06-01T08:15:22Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4b36d21a6750aa5027f9a6a40f58fc5742a97fdb",
          "body": "Claude logs report server_tool_use.web_fetch_requests, previously dropped.\nCapture it into UsageEntry.web_fetch_requests and the Claude parser. There is\nno LiteLLM price for web fetch (Anthropic bills the fetched content as tokens),\nso it is priced only via a new custom `global.web_fetch_per_request\n[…]\nult $0) — get_web_fetch_cost mirrors get_web_search_cost. Tracked for\ncompleteness/visibility regardless.\n\nTests: capture from the real-shape Claude fixture; $0 without override, priced\nwith override.",
          "is_bot": false,
          "headline": "feat: capture Claude web_fetch_requests with optional custom pricing",
          "author_name": "mag123c",
          "author_login": "mag123c",
          "committed_at": "2026-06-01T08:09:52Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "9dd247bfb4eefab3fc5b176d2ff2ab8d23e44b66",
          "body": "Tiered pricing was hardcoded to a single 200k threshold, so models whose\nLiteLLM breakpoint is 128k/256k/272k (14/1/24 models) mis-priced above their\nreal tier. Add the variant ModelPricing fields, resolve the single active tier\nper token kind (tier() helper, precedence 128k->200k->256k->272k by presence),\nand make tiered_cost take (threshold, rate). Regenerate the vendored snapshot to\ncarry the new tier fields (38 models with 128k/272k tiers).\n\n200k behavior and custom pricing are unchanged.",
          "is_bot": false,
          "headline": "feat(services): generalize tiered pricing to 128k/256k/272k breakpoints",
          "author_name": "mag123c",
          "author_login": "mag123c",
          "committed_at": "2026-06-01T08:04:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3bbef87d8cf35c3dd701b2eae14a94a3172e853b",
          "body": "Sources without upstream cost (Gemini, Codex, modern Claude) have their cost\ncomputed from LiteLLM — an estimate — while OpenCode/PI provide authoritative\ncost. Surface that distinction rather than presenting all costs as equal:\n\n- Capture per-source \"estimated\" in the load loop (batch_estimated: an\n[…]\n rows + an estimated-cost\n  legend line (one extra row reserved only when needed).\n\nTests cover the determination (incl. Copilot=free not estimated), the flag\nflow, and the report/TUI marker + legend.",
          "is_bot": false,
          "headline": "feat(services): label estimated (LiteLLM-calculated) source costs",
          "author_name": "mag123c",
          "author_login": "mag123c",
          "committed_at": "2026-06-01T07:51:10Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1572470d2ffa644b3a6e0ecfcb56dc2299f1c7b5",
          "body": "Antigravity CLI (the Gemini CLI successor) stores no file-readable token usage,\nso toktrack cannot track it. Rather than silently ignore it:\n- Detect `<gemini home>/.gemini/antigravity-cli` (honors GEMINI_CLI_HOME) during\n  load and emit a one-line stderr notice.\n- Add `supported: bool` to SourceUsa\n[…]\nas \"(unsupported — no local usage)\" with no bar.\n- Make parsers::discovery pub so the gemini-home base is resolved consistently.\n\nDetection split into antigravity_notice_at(path) for env-free testing.",
          "is_bot": false,
          "headline": "feat(services): detect and surface unsupported Antigravity CLI",
          "author_name": "mag123c",
          "author_login": "mag123c",
          "committed_at": "2026-06-01T07:39:23Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f0026e9da6b5246b8625e165da1040ccdad4dadf",
          "body": "PricingService previously returned no pricing when there was no on-disk cache\nand the network was unavailable (first-run offline → $0 costs). Bundle a trimmed\nLiteLLM snapshot (assets/pricing_snapshot.json, 2293 models, only the fields\nModelPricing reads) via include_str! and use it as the final fal\n[…]\nrefreshed once the network is reachable. eprintln notes when the fallback is used.\n\nTest asserts the snapshot parses and resolves known models via exact, dotted-key,\nand date-suffix-normalized lookup.",
          "is_bot": false,
          "headline": "feat(services): vendored pricing snapshot as offline fallback",
          "author_name": "mag123c",
          "author_login": "mag123c",
          "committed_at": "2026-06-01T07:29:24Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3a119ed53156efa23000663ee0604fe78397fe73",
          "body": "Add src/parsers/discovery.rs (`first_env_dir`) centralizing the\n\"first non-empty env var wins, empty = unset, comma-list takes first\" rule,\nand route all five parsers through it. Confirmed upstream override vars:\n\n- Codex: CODEX_HOME (root) -> <root>/sessions\n- Claude: CLAUDE_CONFIG_DIR (root) -> <r\n[…]\nING_AGENT_SESSION_DIR (== --session-dir, v0.71.0) > PI_AGENT_DIR\n- Gemini: GEMINI_CLI_HOME routed through the helper (no behavior change)\n\nPer-parser tests lock the env override + subpath composition.",
          "is_bot": false,
          "headline": "feat(parser): common data-dir discovery with env-var overrides",
          "author_name": "mag123c",
          "author_login": "mag123c",
          "committed_at": "2026-06-01T07:24:42Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "42aa3ea12427f960f490315387e02de74f3c6be8",
          "body": "Add a parser fixture harness so upstream schema drift is caught by tests:\n\n- claude/real-shape-session.jsonl: sanitized real Claude Code log (content,\n  paths, ids redacted) exercising cache TTL 5m/1h, web_search, and fields\n  toktrack intentionally ignores (web_fetch_requests, service_tier, iterati\n[…]\nents the v2 token contract, per-source\n  provenance/sanitization, and known-but-unconsumed upstream fields\n  (Claude web_fetch_requests).\n- Update collect_files / parse_all counts for the new fixture.",
          "is_bot": false,
          "headline": "test(parser): pin real-shape fixtures and document token contract",
          "author_name": "mag123c",
          "author_login": "mag123c",
          "committed_at": "2026-06-01T07:09:37Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "9876a725d4779fa8c68b4e46875efec1e2e87cb0",
          "body": "…mini cached fix)\n\nEstablish an enforced token-field contract so per-provider variance stops\nproducing silent double-count/omission on upstream changes.\n\n- Rename `thinking_tokens` -> `reasoning_tokens` (and `total_thinking_tokens`\n  -> `total_reasoning_tokens`) across the stack. `#[serde(alias = ..\n[…]\n that had encoded the old additive-cached bug.\n\nPer-parser audit: Claude (input already non-cached), Codex (already subtracts\ncached), OpenCode/PI (cache separate, upstream cost) need no logic change.",
          "is_bot": false,
          "headline": "feat(types): token semantics v2 (reasoning rename, reported total, Ge…",
          "author_name": "mag123c",
          "author_login": "mag123c",
          "committed_at": "2026-06-01T07:04:00Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "8c7ed0d4eeb47e67f9b1420bd26b395ab3aeb8e5",
          "body": "Two silent cost under-counting bugs in the pricing service:\n\n1. Web search cost was always $0. ModelPricing read a LiteLLM field\n   `web_search_cost_per_request` that does not exist in the upstream\n   JSON (0 of 2748 keys). The real field is `search_context_cost_per_query`,\n   a nested object with l\n[…]\nost_per_reasoning_token when present, else the output rate. Claude\n   is unaffected (thinking folded into output, thinking_tokens=0); Gemini\n   (thoughts) and OpenCode (reasoning) were under-counting.",
          "is_bot": false,
          "headline": "fix(services): correct web search and reasoning token cost",
          "author_name": "mag123c",
          "author_login": "mag123c",
          "committed_at": "2026-06-01T06:45:59Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ce7661484e5b55a88c9c39721224129793902e16",
          "body": "Introduce develop as a standing integration branch. CI previously\ntriggered only on main, so PRs into develop would run no checks.\nAdd develop to both push and pull_request triggers. GitHub evaluates\npull_request trigger filters from the base branch, so this must live\non develop for PRs targeting it to run CI.",
          "is_bot": false,
          "headline": "chore(ci): run CI on develop branch",
          "author_name": "mag123c",
          "author_login": "mag123c",
          "committed_at": "2026-06-01T06:41:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "aeb81558f4bd5e538d8e5c2374455885cc0449aa",
          "body": "…tion",
          "is_bot": false,
          "headline": "docs: add AGENTS.md and document graceful-degrade data-loading conven…",
          "author_name": "mag123c",
          "author_login": "mag123c",
          "committed_at": "2026-05-31T02:24:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "09d6b23f64192d50e45d9d5cd7dbcac8a5af0713",
          "body": "Bumps [serde_json](https://github.com/serde-rs/json) from 1.0.149 to 1.0.150.\n- [Release notes](https://github.com/serde-rs/json/releases)\n- [Commits](https://github.com/serde-rs/json/compare/v1.0.149...v1.0.150)\n\n---\nupdated-dependencies:\n- dependency-name: serde_json\n  dependency-version: 1.0.150\n\n[…]\nirect:production\n  update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(deps): bump serde_json from 1.0.149 to 1.0.150 (#155)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-05-26T08:05:45Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f349431fc29f1f168635ae04c8d808890e5f706e",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release 2.7.4 (#153)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-05-14T20:59:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b70206f05b86ee34cf3ade9a94f07a50a1e9bf09",
          "body": "dawidd6/action-homebrew-bump-formula@v7 mangled formula URLs by\nreplacing the version substring anywhere it matched — e.g., `2.6.0` →\n`2.7.2` would also touch `linux-x64` → `linux-x2.7.2`, producing 404\ndownload URLs. v2.7.2 had to be bumped by hand for that reason.\n\nReplace the action with a self-c\n[…]\nball and compute sha256.\n3. Rewrite Formula/toktrack.rb from a template using the new tag.\n4. Commit and push (no-op if already up to date).\n\nNow any new release tag updates the tap deterministically.",
          "is_bot": false,
          "headline": "fix(ci): rewrite homebrew bump with explicit URL + sha256 (#152)",
          "author_name": "mag123c",
          "author_login": "mag123c",
          "committed_at": "2026-05-14T20:49:00Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e372d7849ad98ffead6b10a98fc89c933286730f",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release 2.7.3 (#151)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-05-14T20:32:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "30fe3cf7400edd085b09cbff6381a4d942b5715e",
          "body": "… (#150)\n\nSame dtolnay/rust-toolchain regression as ci.yml — `cargo build` invokes\nrustup-init instead of cargo on the current runner images. Apply the\nsame fix that unblocked ci.yml (#146).\n\nThe v2.7.1/v2.7.2 release runs failed because of this; next tagged\nrelease will pick up the fix automatically via release-please.",
          "is_bot": false,
          "headline": "fix(ci): switch release.yml to actions-rust-lang/setup-rust-toolchain…",
          "author_name": "mag123c",
          "author_login": "mag123c",
          "committed_at": "2026-05-14T20:21:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4bcb459f8ba9cac77919cfeaae670e1b2624e504",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release 2.7.2 (#149)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-05-14T13:15:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "317ddec531428edba9ada97d52c4c30a183cdb65",
          "body": "…(#148)\n\nThe two `GEMINI_CLI_HOME` tests ran in parallel under cargo test and\nclobbered each other's env state — case 2's `remove_var` ran while\ncase 1 was mid-assertion, producing intermittent failures on main CI.\n\nCombine both scenarios into a single `#[test]` so they execute serially\nwithin one thread.",
          "is_bot": false,
          "headline": "fix(parser): merge gemini env-var tests to avoid cargo-parallel race …",
          "author_name": "mag123c",
          "author_login": "mag123c",
          "committed_at": "2026-05-14T13:04:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "26e45425c723c8d87864de3320100834c2f7cfa7",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release 2.7.1 (#147)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-05-14T13:01:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7ea890a6bd6d4e37eda1cb1614edf069035884cd",
          "body": "gemini-cli migrated chat recording from single-object `.json` to streaming\n`.jsonl` on 2026-04-09 (google-gemini/gemini-cli#23749). The legacy parser\nonly matched `*/chats/session-*.json` so new sessions were silently\ndropped — issue #144 (v2.7.0).\n\n- `collect_files`: 3-glob union (main `.jsonl`, le\n[…]\n same gemini-cli\n  release) is folded into input_tokens so totals match gemini-cli's own\n- `GEMINI_CLI_HOME` env var honored, matching gemini-cli paths.ts\n- Cache invalidates via CACHE_VERSION 12 → 13",
          "is_bot": false,
          "headline": "fix(parser): support gemini-cli JSONL format (#144) (#145)",
          "author_name": "mag123c",
          "author_login": "mag123c",
          "committed_at": "2026-05-14T12:57:14Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a8f0ec9a09c9ad1baef5e3f6f2e193e9ff1ef8d3",
          "body": "* fix(ci): pin dtolnay/rust-toolchain to @stable ref\n\nCI started failing on 2026-05-14 with `cargo fmt` invoking rustup-init\ninstead of cargo. The dtolnay action installed the toolchain successfully\n(\"info: default toolchain set to stable-...\") but subsequent steps\nresolved `cargo` to the rustup-ini\n[…]\ne refs hit the same failure mode on the current\nrunner images.\n\nSwitch to actions-rust-lang/setup-rust-toolchain@v1, which includes\nits own PATH wiring and caching (replaces Swatinem/rust-cache step).",
          "is_bot": false,
          "headline": "fix(ci): pin dtolnay/rust-toolchain to @stable ref (#146)",
          "author_name": "mag123c",
          "author_login": "mag123c",
          "committed_at": "2026-05-14T12:50:37Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "64a09f8371fe4a57a08862b686eea41ebce45d6e",
          "body": "Bumps [tokio](https://github.com/tokio-rs/tokio) from 1.52.2 to 1.52.3.\n- [Release notes](https://github.com/tokio-rs/tokio/releases)\n- [Commits](https://github.com/tokio-rs/tokio/compare/tokio-1.52.2...tokio-1.52.3)\n\n---\nupdated-dependencies:\n- dependency-name: tokio\n  dependency-version: 1.52.3\n  \n[…]\nirect:production\n  update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(deps): bump tokio from 1.52.2 to 1.52.3 (#143)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-05-14T05:21:17Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "0de8b2087eab6e03c2c23e17117f77af47460406",
          "body": "Bumps [rusqlite](https://github.com/rusqlite/rusqlite) from 0.32.1 to 0.39.0.\n- [Release notes](https://github.com/rusqlite/rusqlite/releases)\n- [Changelog](https://github.com/rusqlite/rusqlite/blob/master/Changelog.md)\n- [Commits](https://github.com/rusqlite/rusqlite/compare/v0.32.1...v0.39.0)\n\n---\n[…]\nirect:production\n  update-type: version-update:semver-minor\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(deps): bump rusqlite from 0.32.1 to 0.39.0 (#142)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-05-05T06:31:55Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5ba015b80ef94de14f05d3aabadb6f04a69794d4",
          "body": "Bumps [tokio](https://github.com/tokio-rs/tokio) from 1.52.1 to 1.52.2.\n- [Release notes](https://github.com/tokio-rs/tokio/releases)\n- [Commits](https://github.com/tokio-rs/tokio/compare/tokio-1.52.1...tokio-1.52.2)\n\n---\nupdated-dependencies:\n- dependency-name: tokio\n  dependency-version: 1.52.2\n  \n[…]\nirect:production\n  update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(deps): bump tokio from 1.52.1 to 1.52.2 (#141)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-05-05T06:31:49Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2a5a9bd5aa6fbda64756dee32adcbac8d024a948",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release 2.7.0 (#140)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-05-02T01:55:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b47e5885522939769ca3935ba001b77a328fdd3a",
          "body": "OpenCode v1.2.0 (2026-02-14) moved all message storage from per-file\nJSON to a single SQLite database (`~/.local/share/opencode/opencode.db`).\nThe previous JSON-only parser reported near-zero token usage for users\non the new version, since new sessions are written exclusively to SQLite.\n\nAdopt a SQL\n[…]\nthe same conversion logic.\n\nAdds `rusqlite = { version = \"0.32\", features = [\"bundled\"] }` so the\n5-platform release matrix (incl. musl Linux, Windows MSVC) does not\ndepend on a system sqlite library.",
          "is_bot": false,
          "headline": "feat(parser): add SQLite reader for OpenCode v1.2.0+ (#138) (#139)",
          "author_name": "mag123c",
          "author_login": "mag123c",
          "committed_at": "2026-05-02T01:44:56Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6e403f7f2384ff767caa5460dc80c45a202d7a78",
          "body": null,
          "is_bot": false,
          "headline": "docs: add star history chart to README",
          "author_name": "mag123c",
          "author_login": "mag123c",
          "committed_at": "2026-04-28T12:45:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3bb60e83a9dcceca0b964c8fad6aa9cfe0bf58ab",
          "body": "Bumps [googleapis/release-please-action](https://github.com/googleapis/release-please-action) from 4 to 5.\n- [Release notes](https://github.com/googleapis/release-please-action/releases)\n- [Changelog](https://github.com/googleapis/release-please-action/blob/main/CHANGELOG.md)\n- [Commits](https://git\n[…]\nirect:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(ci): bump googleapis/release-please-action from 4 to 5 (#137)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-04-28T11:50:32Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1f47352ec945e662472a5091c15e72b87844d945",
          "body": null,
          "is_bot": false,
          "headline": "clarify deep.md changed",
          "author_name": "mag123c",
          "author_login": "mag123c",
          "committed_at": "2026-04-27T12:44:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b2ae316e5a0143cfc34b73dec72c610aec218e9c",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release 2.6.0 (#136)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-04-27T12:36:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a82e4b3e0ebcfc50e30eb6a5b7013993b130609a",
          "body": "…#135)\n\n* feat(services): expose provider info in JSON model breakdown (#134)\n\nDailySummary.models now uses composite \"{model}::{provider}\" keys when an\nentry carries a provider, so the same model billed through different\nproviders (e.g. github-copilot vs direct API) appears as separate\nentries in `\n[…]\nstyle(comments): translate korean comments to english (#134)\n\nMatch the repo convention — all existing src/ comments are English.\nKorean comments were introduced inadvertently in the previous commits.",
          "is_bot": false,
          "headline": "feat(services): expose provider info in JSON model breakdown (#134) (…",
          "author_name": "mag123c",
          "author_login": "mag123c",
          "committed_at": "2026-04-27T12:25:23Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "fd98e717fe96ea239c72665b15a4655ab8ea0023",
          "body": "Bumps [rayon](https://github.com/rayon-rs/rayon) from 1.11.0 to 1.12.0.\n- [Changelog](https://github.com/rayon-rs/rayon/blob/main/RELEASES.md)\n- [Commits](https://github.com/rayon-rs/rayon/compare/rayon-core-v1.11.0...rayon-core-v1.12.0)\n\n---\nupdated-dependencies:\n- dependency-name: rayon\n  dependen\n[…]\nirect:production\n  update-type: version-update:semver-minor\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(deps): bump rayon from 1.11.0 to 1.12.0 (#131)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-04-20T23:57:41Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f6ee3f5c813379558e1ea2b4ff0ac213b12dffb5",
          "body": "Bumps [tokio](https://github.com/tokio-rs/tokio) from 1.51.1 to 1.52.1.\n- [Release notes](https://github.com/tokio-rs/tokio/releases)\n- [Commits](https://github.com/tokio-rs/tokio/compare/tokio-1.51.1...tokio-1.52.1)\n\n---\nupdated-dependencies:\n- dependency-name: tokio\n  dependency-version: 1.52.1\n  \n[…]\nirect:production\n  update-type: version-update:semver-minor\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(deps): bump tokio from 1.51.1 to 1.52.1 (#133)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-04-20T23:57:34Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e5d18b0ac7abf7e8e5f921b67eee49849885774b",
          "body": "Bumps [clap](https://github.com/clap-rs/clap) from 4.6.0 to 4.6.1.\n- [Release notes](https://github.com/clap-rs/clap/releases)\n- [Changelog](https://github.com/clap-rs/clap/blob/master/CHANGELOG.md)\n- [Commits](https://github.com/clap-rs/clap/compare/clap_complete-v4.6.0...clap_complete-v4.6.1)\n\n---\n[…]\nirect:production\n  update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(deps): bump clap from 4.6.0 to 4.6.1 (#132)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-04-20T23:57:28Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3758b243c62621f7c39ebfa5a665cba18b9edfff",
          "body": "Bumps [dawidd6/action-homebrew-bump-formula](https://github.com/dawidd6/action-homebrew-bump-formula) from 6 to 7.\n- [Release notes](https://github.com/dawidd6/action-homebrew-bump-formula/releases)\n- [Commits](https://github.com/dawidd6/action-homebrew-bump-formula/compare/v6...v7)\n\n---\nupdated-dep\n[…]\nirect:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(ci): bump dawidd6/action-homebrew-bump-formula from 6 to 7 (#130)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-04-20T23:57:20Z",
          "body_truncated": true,
          "is_coding_agent": false
        }
      ],
      "releases_count": 91,
      "commits_last_year": 365,
      "latest_release_at": "2026-07-18T07:04:07Z",
      "latest_release_tag": "v2.16.0",
      "releases_from_tags": false,
      "days_since_last_push": 1,
      "active_weeks_last_year": 22,
      "days_since_latest_release": 5,
      "mean_days_between_releases": 4.7
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": true,
      "health_percentage": 71,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "toktrack",
          "exists": true,
          "license": "MIT",
          "keywords": [
            "ai",
            "token",
            "usage",
            "tracker",
            "cli",
            "claude",
            "claude-code",
            "anthropic",
            "openai",
            "llm",
            "token-counter",
            "token-tracker",
            "cost-tracker",
            "usage-tracker",
            "usage-monitor",
            "api-usage",
            "codex",
            "codex-cli",
            "gemini",
            "gemini-cli",
            "cursor",
            "opencode",
            "tokscale",
            "ai-cost",
            "ai-billing",
            "ai-analytics",
            "tui",
            "terminal",
            "rust"
          ],
          "ecosystem": "npm",
          "matches_repo": true,
          "registry_url": "https://www.npmjs.com/package/toktrack",
          "is_deprecated": false,
          "latest_version": "2.16.0",
          "repository_url": "https://github.com/mag123c/toktrack",
          "versions_count": 82,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 1,
          "monthly_downloads": 3562,
          "first_published_at": "2026-01-28T07:55:31.394000Z",
          "latest_published_at": "2026-07-18T07:09:45.943000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 5
        }
      ]
    },
    "popularity": {
      "forks": 18,
      "stars": 180,
      "watchers": 0,
      "fork_history": {
        "days": [
          {
            "date": "2026-02-09",
            "count": 1
          },
          {
            "date": "2026-02-12",
            "count": 1
          },
          {
            "date": "2026-03-04",
            "count": 1
          },
          {
            "date": "2026-03-16",
            "count": 1
          },
          {
            "date": "2026-03-27",
            "count": 1
          },
          {
            "date": "2026-04-06",
            "count": 1
          },
          {
            "date": "2026-04-17",
            "count": 1
          },
          {
            "date": "2026-04-25",
            "count": 1
          },
          {
            "date": "2026-04-29",
            "count": 1
          },
          {
            "date": "2026-05-19",
            "count": 1
          },
          {
            "date": "2026-05-21",
            "count": 1
          },
          {
            "date": "2026-05-30",
            "count": 1
          },
          {
            "date": "2026-06-10",
            "count": 1
          },
          {
            "date": "2026-06-19",
            "count": 1
          },
          {
            "date": "2026-07-02",
            "count": 1
          },
          {
            "date": "2026-07-07",
            "count": 1
          },
          {
            "date": "2026-07-13",
            "count": 1
          },
          {
            "date": "2026-07-21",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 18,
        "total_forks": 18
      },
      "star_history": null,
      "open_issues_and_prs": 1
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": false,
      "bootstrap_files": [
        "Makefile"
      ],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [],
      "toolchain_manifests": [
        "Cargo.toml"
      ],
      "largest_source_bytes": 93288,
      "source_files_sampled": 52,
      "oversized_source_files": 3,
      "agent_instruction_files": [
        "AGENTS.md",
        "CLAUDE.md"
      ],
      "agent_instruction_max_bytes": 1595
    },
    "dependencies": {
      "manifests": [
        "Cargo.toml",
        "npm/package.json"
      ],
      "advisories": {
        "error": null,
        "scope": null,
        "source": null,
        "findings": [],
        "collected": false,
        "malicious": [],
        "truncated": false,
        "by_severity": {},
        "advisory_count": 0,
        "affected_count": 0,
        "assessed_count": 0,
        "malicious_count": 0,
        "assessed_package": null,
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "crates",
        "npm"
      ],
      "dependencies": [
        {
          "name": "simd-json",
          "manifest": "Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.17"
        },
        {
          "name": "serde",
          "manifest": "Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1"
        },
        {
          "name": "serde_json",
          "manifest": "Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1"
        },
        {
          "name": "rusqlite",
          "manifest": "Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.40"
        },
        {
          "name": "ratatui",
          "manifest": "Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.30"
        },
        {
          "name": "crossterm",
          "manifest": "Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.28"
        },
        {
          "name": "clap",
          "manifest": "Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "4"
        },
        {
          "name": "rayon",
          "manifest": "Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1.12"
        },
        {
          "name": "tokio",
          "manifest": "Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1"
        },
        {
          "name": "chrono",
          "manifest": "Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.4"
        },
        {
          "name": "directories",
          "manifest": "Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "5"
        },
        {
          "name": "glob",
          "manifest": "Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.3"
        },
        {
          "name": "thiserror",
          "manifest": "Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "2"
        },
        {
          "name": "anyhow",
          "manifest": "Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1"
        },
        {
          "name": "reqwest",
          "manifest": "Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.12"
        },
        {
          "name": "fs2",
          "manifest": "Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.4"
        },
        {
          "name": "terminal-light",
          "manifest": "Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1"
        },
        {
          "name": "toml",
          "manifest": "Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1.1.2"
        }
      ],
      "all_dependencies": {
        "error": "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
        "source": null,
        "packages": [],
        "collected": false,
        "truncated": false,
        "total_count": null,
        "direct_count": null,
        "indirect_count": null
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 1,
        "merged_prs": 195,
        "open_issues": 0,
        "closed_ratio": 1,
        "closed_issues": 16,
        "closed_unmerged_prs": 9
      },
      "bus_factor": 1,
      "bot_contributors": 2,
      "top_contributors": [
        {
          "type": "User",
          "login": "mag123c",
          "commits": 208,
          "avatar_url": "https://avatars.githubusercontent.com/u/120711308?v=4"
        },
        {
          "type": "User",
          "login": "ryunseo",
          "commits": 6,
          "avatar_url": "https://avatars.githubusercontent.com/u/1538778?v=4"
        },
        {
          "type": "User",
          "login": "CubityFirst",
          "commits": 5,
          "avatar_url": "https://avatars.githubusercontent.com/u/14070268?v=4"
        },
        {
          "type": "User",
          "login": "niclimcy",
          "commits": 4,
          "avatar_url": "https://avatars.githubusercontent.com/u/6513413?v=4"
        },
        {
          "type": "User",
          "login": "iamkanguk97",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/121025796?v=4"
        },
        {
          "type": "User",
          "login": "Ayakaee",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/63800047?v=4"
        }
      ],
      "contributors_sampled": 6,
      "top_contributor_share": 0.924
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "bump-homebrew.yml",
        "ci.yml",
        "claude-review.yml",
        "release-please.yml",
        "release.yml",
        "stale.yml"
      ],
      "has_docs_dir": true,
      "linter_configs": [],
      "has_editorconfig": false,
      "has_linter_config": false,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "Cargo.lock"
      ],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 10,
            "reason": "no binaries found in the repo",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
          },
          {
            "name": "Branch-Protection",
            "score": 4,
            "reason": "branch protection is not maximal on development and all release branches",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": 8,
            "reason": "19 out of 22 merged PRs checked by a CI test -- score normalized to 8",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
          },
          {
            "name": "CII-Best-Practices",
            "score": 0,
            "reason": "no effort to earn an OpenSSF best practices badge detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
          },
          {
            "name": "Code-Review",
            "score": 2,
            "reason": "Found 4/20 approved changesets -- score normalized to 2",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 0,
            "reason": "project has 0 contributing companies or organizations -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": 0,
            "reason": "dangerous workflow patterns detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 10,
            "reason": "update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 10,
            "reason": "30 commit(s) and 5 issue activity found in the last 90 days -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": 10,
            "reason": "packaging workflow detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 0,
            "reason": "dependency not pinned by hash detected -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "SAST tool is not run on all commits -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 0,
            "reason": "security policy file not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": 0,
            "reason": "Project has not signed or included provenance with any releases.",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": 0,
            "reason": "detected GitHub workflow tokens with excessive permissions",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 1,
            "reason": "9 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "d83d75d7e624284b68d75d9edfd4f66ee8889fe2",
        "ran_at": "2026-07-23T14:48:40Z",
        "aggregate_score": 3.5,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": false,
      "has_dependabot_config": true
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-23T02:26:21Z",
      "oldest_open_prs": [
        {
          "number": 221,
          "created_at": "2026-07-21T01:11:56Z",
          "last_comment_at": "2026-07-22T01:11:12Z",
          "last_comment_author": "mag123c"
        }
      ],
      "last_merged_pr_at": "2026-07-21T04:37:10Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": []
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/mag123c/toktrack",
    "host": "github.com",
    "name": "toktrack",
    "owner": "mag123c"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 65,
      "inputs": {
        "security": 36,
        "vitality": 83,
        "community": 58,
        "governance": 61,
        "engineering": 78
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "good",
        "name": "Vitality",
        "value": 83,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "good",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 79,
            "inputs": {
              "commits_last_year": 365,
              "human_commit_share": 0.57,
              "days_since_last_push": 1,
              "active_weeks_last_year": 22
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 1 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 1
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "22/52 weeks with commits",
                "points": 15.2,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 22
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "365 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 365
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "30 commit(s) and 5 issue activity found in the last 90 days -- score normalized to 10",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "excellent",
            "name": "Release discipline",
            "note": null,
            "notes": [],
            "value": 90,
            "inputs": {
              "releases_count": 91,
              "latest_release_tag": "v2.16.0",
              "releases_from_tags": false,
              "days_since_latest_release": 5,
              "mean_days_between_releases": 4.7
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "91 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 91
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 5 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 5
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~4.7 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 4.7
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "Project has not signed or included provenance with any releases.",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "unverified",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": "repository_too_young",
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": null,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "maintenance record not established from the collected data",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_unverified",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "moderate",
        "name": "Community & Adoption",
        "value": 58,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "at_risk",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 47,
            "inputs": {
              "forks": 18,
              "stars": 180,
              "watchers": 0,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "180 stars",
                "points": 36.5,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 180
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "18 forks",
                "points": 10.3,
                "status": "partial",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 18
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "0 watchers",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "good",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 70,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": true,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "has_pull_request_template": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (MIT)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "MIT"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 18,
                "status": "met",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.3
              }
            ]
          },
          {
            "key": "ecosystem_adoption",
            "band": "moderate",
            "name": "Ecosystem adoption (downloads)",
            "note": "Excluded from scoring (no data or not applicable): Registry dependents. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "registry_dependents"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 59,
            "inputs": {
              "packages": [
                "toktrack"
              ],
              "dependents": null,
              "ecosystems": "npm",
              "total_downloads": null,
              "monthly_downloads": 3562
            },
            "components": [
              {
                "key": "monthly_downloads",
                "name": "Monthly downloads",
                "detail": "3,562 downloads/month across npm",
                "points": 47.4,
                "status": "partial",
                "details": [
                  {
                    "code": "downloads_monthly",
                    "params": {
                      "count": 3562,
                      "ecosystems": "npm"
                    }
                  }
                ],
                "max_points": 80
              },
              {
                "key": "registry_dependents",
                "name": "Registry dependents",
                "detail": "not reported by this ecosystem",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "not_reported_by_this_ecosystem",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "moderate",
        "name": "Sustainability & Governance",
        "value": 61,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 19,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 6,
              "top_contributor_share": 0.924
            },
            "components": [
              {
                "key": "bus_factor",
                "name": "Bus factor",
                "detail": "1 contributor(s) cover half of all commits",
                "points": 9,
                "status": "partial",
                "details": [
                  {
                    "code": "bus_factor",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 54
              },
              {
                "key": "commit_distribution",
                "name": "Commit distribution",
                "detail": "top contributor authored 92% of commits",
                "points": 1.7,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 92
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "6 contributors",
                "points": 8.1,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 6
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 0 contributing companies or organizations -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "excellent",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 86,
            "inputs": {
              "merged_prs": 195,
              "open_issues": 0,
              "closed_issues": 16,
              "issue_closed_ratio": 1,
              "closed_unmerged_prs": 9
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "100% of issues closed",
                "points": 46.8,
                "status": "met",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 100
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "195/204 decided PRs merged",
                "points": 36.6,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 195,
                      "decided": 204
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 4/20 approved changesets -- score normalized to 2",
                "points": 3,
                "status": "partial",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "moderate",
            "name": "Ownership & stewardship",
            "note": "Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "verified_domain"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 56,
            "inputs": {
              "followers": 97,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "mag123c",
              "public_repos": 88,
              "account_age_days": 1315
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "personal (user) account",
                "points": 10,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_personal",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": "not applicable to user accounts",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "not_applicable_to_user_accounts",
                    "params": {}
                  }
                ],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "97 followers of mag123c",
                "points": 14.3,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 97,
                      "login": "mag123c"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "88 public repos, account ~3 yr old",
                "points": 20.2,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 88
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 3
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "toktrack"
              ],
              "ecosystems": "npm",
              "any_deprecated": false,
              "min_days_since_publish": 5
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "1 package(s) on npm",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 1,
                      "ecosystems": "npm"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "publish_recency",
                "name": "Publish recency",
                "detail": "latest publish 5 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 5
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "82 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 82
                    }
                  }
                ],
                "max_points": 20
              },
              {
                "key": "not_deprecated",
                "name": "Not deprecated",
                "detail": "active, not deprecated or yanked",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "package_not_deprecated",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "good",
        "name": "Engineering Quality",
        "value": 78,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "moderate",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 64,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": false,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "6 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 6
                    }
                  }
                ],
                "max_points": 24
              },
              {
                "key": "tests_present",
                "name": "Tests present",
                "detail": null,
                "points": 24,
                "status": "met",
                "details": [],
                "max_points": 24
              },
              {
                "key": "linter_config",
                "name": "Linter config",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "19 out of 22 merged PRs checked by a CI test -- score normalized to 8",
                "points": 16,
                "status": "partial",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "excellent",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "topics": [
                "ai-billing",
                "ai-coding",
                "ai-cost",
                "ai-tools",
                "anthropic",
                "claude-code",
                "cli",
                "codex-cli",
                "cost-monitor",
                "cost-tracking",
                "developer-tools",
                "gemini-cli",
                "llm",
                "multi-cli",
                "openai",
                "rust",
                "terminal",
                "token-tracker",
                "token-usage",
                "tui"
              ],
              "has_wiki": true,
              "homepage": "https://www.npmjs.com/package/toktrack",
              "has_readme": true,
              "has_docs_dir": true,
              "has_description": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 25,
                "status": "met",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": "https://www.npmjs.com/package/toktrack",
                "points": 15,
                "status": "met",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": "20 topics",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "topics_count",
                    "params": {
                      "count": 20
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "at_risk",
        "name": "Security",
        "value": 36,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "at_risk",
            "name": "Security posture",
            "note": null,
            "notes": [],
            "value": 36,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 18,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 0,
              "scorecard_aggregate": 3.5
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "no binaries found in the repo",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "branch_protection",
                "name": "Branch-Protection",
                "detail": "branch protection is not maximal on development and all release branches",
                "points": 3,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "19 out of 22 merged PRs checked by a CI test -- score normalized to 8",
                "points": 2,
                "status": "partial",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 4/20 approved changesets -- score normalized to 2",
                "points": 1.5,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 0 contributing companies or organizations -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "dangerous workflow patterns detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "update tool detected",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "30 commit(s) and 5 issue activity found in the last 90 days -- score normalized to 10",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow detected",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "SAST tool is not run on all commits -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file not detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "Project has not signed or included provenance with any releases.",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "detected GitHub workflow tokens with excessive permissions",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "9 existing vulnerabilities detected",
                "points": 0.8,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "high_risk_jurisdiction_exposure",
            "band": "excellent",
            "name": "High-Risk Jurisdiction Exposure",
            "note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
            "notes": [
              {
                "code": "jurisdiction_evidence_limits",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "meaning": "self-published location evidence; not nationality or citizenship",
              "red_flag": false,
              "exposures": [],
              "policy_countries": [
                "Russia",
                "Iran",
                "North Korea"
              ],
              "review_only_matches": 0,
              "assessed_self_published_locations": 4
            },
            "components": [
              {
                "key": "policy_exposure_multiplier",
                "name": "Policy exposure multiplier",
                "detail": "no confirmed policy-scope location match",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "jurisdiction_no_match",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "good",
        "name": "AI Readiness",
        "value": 84,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "excellent",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 85,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.982,
              "agent_instruction_files": [
                "AGENTS.md",
                "CLAUDE.md"
              ],
              "agent_instruction_max_bytes": 1595
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "AGENTS.md, CLAUDE.md",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "AGENTS.md, CLAUDE.md"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "machine_readable_docs_llms_txt",
                "name": "Machine-readable docs (llms.txt)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "legible_commit_history",
                "name": "Legible commit history",
                "detail": "56 of 57 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 56,
                      "sampled": 57
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "good",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 79,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "Cargo.lock"
              ],
              "has_dockerfile": false,
              "typed_language": true,
              "bootstrap_files": [
                "Makefile"
              ],
              "has_devcontainer": false,
              "has_linter_config": false,
              "typecheck_configs": [],
              "agent_commit_share": 0.17,
              "toolchain_manifests": [
                "Cargo.toml"
              ],
              "dependency_bot_commit_share": 0.25
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": "Makefile",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "Makefile"
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "automated_tests",
                "name": "Automated tests",
                "detail": null,
                "points": 22,
                "status": "met",
                "details": [],
                "max_points": 22
              },
              {
                "key": "lint_format_config",
                "name": "Lint / format config",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "Rust (statically typed)",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "Rust"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "17 of the last 100 commits agent-authored or agent-credited",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 17,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "25 of the last 100 commits are automated dependency updates",
                "points": 8,
                "status": "met",
                "details": [
                  {
                    "code": "dependency_bot_commits",
                    "params": {
                      "count": 25,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "excellent",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 97,
            "inputs": {
              "primary_language": "Rust",
              "largest_source_bytes": 93288,
              "source_files_sampled": 52,
              "oversized_source_files": 3
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "Rust (statically typed)",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "Rust"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "3/52 source files over 60KB",
                "points": 51.8,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 52,
                      "oversized": 3
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [
    "Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token",
    "Could not fetch crates package 'toktrack' from its registry",
    "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
    "deps.dev does not index npm:toktrack@2.16.0; advisories assessed against the repository dependency graph instead"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-23T14:48:58.146008Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/m/mag123c/toktrack.svg",
  "full_name": "mag123c/toktrack",
  "license_state": "standard",
  "license_spdx": "MIT"
}

Bewertungen sind Signale, keine Garantien. Sie spiegeln öffentlich sichtbare Praxis auf GitHub wider — kein Code-Audit und keine Sicherheitsgarantie.

Fehlende Daten werden ausgeschlossen und die Gewichte neu normiert, nie als null bewertet. Die Methodik ist versioniert und offen: Metriken v1.13.0, Schema v0.27.0 — vollständige Methodik · Metriken-Wiki.

Wie ein einzelnes Ergebnis im Gesamtregister steht: aggregierte Statistikennpm.