Skip to content

feat(antigravity): add Antigravity CLI usage adapter - #1544

Merged
ryoppippi merged 14 commits into
mainfrom
anti
Jul 29, 2026
Merged

ryoppippi merged 14 commits into
mainfrom
anti

Conversation

@ryoppippi

@ryoppippi ryoppippi commented Jul 29, 2026 •

Copy link
Copy Markdown
Member

Summary

Adds an antigravity adapter that reads Antigravity CLI usage from the
per-conversation SQLite databases it writes under
~/.gemini/antigravity-cli/conversations/, and exposes
ccusage antigravity daily|monthly|session plus inclusion in the unified report.

Antigravity was previously documented as investigated and unsupported. That entry
described a storage format it has since replaced, and the blocker it named is now
solvable — see Why this is now possible.

What Changed

  • New crate rust/adapters/antigravity with proto.rs, paths.rs, loader.rs,
    parser.rs and report.rs.
  • ccusage antigravity daily|monthly|session, --last support, the
    ANTIGRAVITY_DATA_DIR override, and the unified all-agents report.
  • An antigravity namespace in ccusage.json, with the published schema
    regenerated.
  • A new docs/guide/antigravity/ guide, listed across the READMEs,
    getting-started, all-reports, the environment variable reference and the
    VitePress sidebar.

Why this is now possible

Antigravity ships no .proto files, which is what made it look unreadable
before. Two things changed:

  1. It now writes SQLite databases rather than opaque
    conversations/<id>.pb payloads.
  2. The protobuf field numbers for the blobs inside them can be recovered from the
    FileDescriptorProto blobs embedded in the agy binary, so they are upstream
    numbers rather than guesses.

Decoding by field number is durable here because Antigravity has to read the same
blobs back after an upgrade, so it cannot renumber a field without breaking its
own persistence. A hand-rolled wire reader keeps prost and its build-time
codegen out of the dependency graph.

Token mapping

Follows ModelUsageStats. Two details matter:

  • input_tokens and cache_read_tokens are disjoint, which a real record proves
    by carrying an input_tokens of 4050 against a cache_read_tokens of 16275.
    Neither needs adjusting to fit ccusage's split.
  • output_tokens already contains thinking_output_tokens, so the thinking count
    is only used to rebuild a missing total.

Usage comes from two tables. steps is primary and holds one row per invocation,
including background calls nothing else records. gen_metadata is read because it
is the only place a human-readable model name appears, and because it keeps usage
visible for a step that has since been pruned.

Dedupe

Every invocation is deduplicated on response_id, falling back to
provider_assigned_message_id then message_id. One call can be recorded in more
than one place: retry_infos repeats the attempt that succeeded alongside those
that failed, and a sub-conversation may repeat a call its parent already recorded.

Deduplicating on the server-assigned id counts the failed attempts, which consumed
tokens of their own, without recounting the successful one. It holds whether or not
Antigravity repeats the successful attempt in its retry list, which is what makes
it safe to ship before that path has been seen in real data.

Cost

Antigravity leaves model_cost, credit_cost and consumed_credits unset on
consumer accounts, so there is nothing precomputed to read and --mode display
reports zero. Cost is calculated from LiteLLM rates and is an equivalent public API
cost, not an amount billed — Antigravity is quota-based.

Invocations gen_metadata never named are reported under
antigravity-model-<id>. The model id is opaque and Antigravity's own descriptor
only names those as MODEL_PLACEHOLDER_M<n>, so their tokens are counted while
they surface as missing pricing. Token totals stay complete; the cost total is
understated by that model's share.

Testing

  • just check — 15 flake checks pass (clippy, hawk, treefmt, schema drift,
    gitleaks, oxlint, publint).
  • just test — full Rust workspace plus Node tests pass. 32 new tests cover the
    wire decoder, path discovery, retry dedupe, cross-database dedupe, unnamed
    models, pruned steps, and malformed blobs.
  • Validated against a real conversation database. The reported
    44,463 input / 456 output / 16,275 cache read / $0.07239375 matches a hand
    calculation from the raw protobuf to the cent, with the only difference being
    the $0.000162 belonging to the model that cannot be priced.

Tests synthesise their protobuf blobs rather than committing a captured database,
which would embed absolute paths, user prompts and Antigravity's own system prompt.

Review notes

Two places worth extra attention:

  • docs/guide/source-support-qa.md reverses a previously documented decision.
  • docs/guide/antigravity/index.md states the limitations explicitly: cost is an
    estimate, unnamed model ids cannot be priced, --offline has no Gemini rates,
    and the retry, subagent and model-comparison paths are handled by design but have
    not yet been exercised against real data.

View with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need. Autofix is enabled.


Summary by cubic

Adds Antigravity CLI support to ccusage, with ccusage antigravity daily|monthly|session and inclusion in unified reports. Reads per‑conversation SQLite databases and estimates costs via LiteLLM, opening each DB once for better performance.

  • New Features

    • New ccusage-adapter-antigravity loads ~/.gemini/antigravity-cli/conversations/**/*.db (override with comma‑separated ANTIGRAVITY_DATA_DIR) via a minimal protobuf reader.
    • Unified and focused reports include Antigravity; supports --last, robust retry/sub‑conversation dedupe, and unnamed models as antigravity-model-<id>.
    • Session reports expose first/last activity and project_path. New antigravity config namespace in ccusage.json; docs updated, and the adapter README links to commands and the Antigravity guide.
  • Bug Fixes

    • Ignore out‑of‑range protobuf timestamp nanos to keep events in the correct day.
    • Session metadata now appears in JSON and tables (first/last activity, project_path).

Written for commit baa4715. Summary will update on new commits.

Review in cubic

Summary by CodeRabbit

  • New Features

    • Added experimental Antigravity support for daily, monthly, and session usage reports, including automatic inclusion in unified reports when supported local data is found.
    • Extended the CLI with the new antigravity command and added Antigravity configuration support, including ANTIGRAVITY_DATA_DIR and pricing override behavior for display vs calculated cost modes (with optional offline pricing).
  • Documentation

    • Added an Antigravity guide and updated the data-sources sidebar, supported-sources/all-reports, getting-started, environment variables, and source-support Q&A with examples, troubleshooting, and accuracy notes.
  • Chores

    • Updated schemas/CLI help and included Antigravity in supported agent lists.

Antigravity stores usage in per-conversation SQLite databases under
`~/.gemini/antigravity-cli/conversations/`, with the token counts held in
protobuf blobs. Antigravity publishes no `.proto` files, so `proto.rs`
decodes them by field number, recovered from the `FileDescriptorProto`
blobs embedded in the `agy` binary rather than guessed from the data.
Decoding by number is safe here because Antigravity has to read the same
blobs back after an upgrade, so it cannot renumber a field without
breaking its own persistence.

A hand-rolled wire reader keeps `prost` and its build-time codegen out of
the dependency graph; only the fields ccusage needs are decoded.

Token mapping follows `ModelUsageStats`. `input_tokens` and
`cache_read_tokens` are disjoint, which a real record proves by carrying
an `input_tokens` of 4050 against a `cache_read_tokens` of 16275, so
neither needs adjusting to fit ccusage's split. `output_tokens` already
contains `thinking_output_tokens`, so the thinking count is only used to
rebuild a missing total.

Usage comes from two tables. `steps` is primary and holds one row per
invocation, including the background calls nothing else records.
`gen_metadata` is read because it is the only place a human-readable
model name appears, and because it keeps usage visible for a step that
has since been pruned.

Every invocation is deduplicated on `response_id`, falling back to
`provider_assigned_message_id` then `message_id`. One call can be
recorded in more than one place: `retry_infos` repeats the attempt that
succeeded alongside those that failed, and a sub-conversation may repeat
a call its parent already recorded. Deduplicating on the server-assigned
id counts the failed attempts, which consumed tokens of their own,
without recounting the successful one — and it holds whether or not
Antigravity repeats the successful attempt in its retry list.

Antigravity leaves `model_cost`, `credit_cost` and `consumed_credits`
unset on consumer accounts, so cost is calculated from LiteLLM rates and
is an equivalent public API cost rather than a billed amount.
Invocations `gen_metadata` never named are reported under
`antigravity-model-<id>`: the model id is opaque and the shipped
descriptor only names those as `MODEL_PLACEHOLDER_M<n>`, so their tokens
are counted while they surface as missing pricing.

Tests synthesise their protobuf blobs. A captured conversation database
would embed absolute paths, user prompts and Antigravity's own system
prompt, none of which belong in this repository.
Wires the adapter into the CLI: `ccusage antigravity daily|monthly|
session`, the `--last` window, and the unified report, which now picks
Antigravity up whenever conversation databases are detected.

Antigravity takes the next index in `BUILT_IN_AGENT_NAMES` so the
all-agents loader spec, the agent label lookup, and the parser's
allowlists stay in step with each other.
Lets `ccusage.json` set Antigravity defaults and per-report overrides the
same way the other sources can, and regenerates the published schema.
Adds the Antigravity guide and lists the source across the READMEs, the
getting-started and all-reports pages, the environment variable
reference, and the VitePress sidebar.

The guide states the limitations rather than leaving them implied: cost
is an equivalent public API cost and never a billed amount, unnamed model
ids cannot be priced, `--offline` has no Gemini rates to use, and the
retry, subagent and model-comparison paths are handled by design but have
not yet been exercised against real data.

Antigravity was previously listed as investigated and unsupported,
because it stored conversations as opaque `.pb` payloads that needed an
unpublished schema. It now writes SQLite databases whose protobuf field
numbers can be recovered from the descriptors in its own binary, so that
entry moves to a new section recording how the blocker was resolved.
Copilot AI review requested due to automatic review settings July 29, 2026 17:26

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@ryoppippi

Copy link
Copy Markdown
Member Author

@coderabbitai full review

@coderabbitai

coderabbitai Bot commented Jul 29, 2026 •

Copy link
Copy Markdown

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Adds experimental Antigravity support to ccusage, including read-only SQLite/protobuf ingestion, token and pricing handling, daily/monthly/session reports, CLI and configuration integration, unified loading, and documentation.

Changes

Antigravity source support

Layer / File(s) Summary
Decode and price Antigravity usage
rust/adapters/antigravity/src/paths.rs, rust/adapters/antigravity/src/proto.rs, rust/adapters/antigravity/src/parser.rs
Discovers conversation databases, decodes protobuf usage, maps token fields, and resolves pricing candidates.
Load and summarize usage
rust/adapters/antigravity/src/loader.rs, rust/adapters/antigravity/src/report.rs, rust/adapters/antigravity/src/lib.rs
Reads SQLite blobs, deduplicates records, creates priced entries, summarizes report periods, and renders JSON or tables with tests.
Workspace adapter integration
rust/Cargo.toml, rust/adapters/antigravity/Cargo.toml, rust/crates/ccusage-adapter-all/..., rust/crates/ccusage/..., nix/cargo-artifacts.nix
Registers the crate, exports it through aggregate adapters, adds unified loading and labels, and includes build wiring.
CLI and configuration contracts
rust/crates/ccusage-cli-parser/..., rust/crates/ccusage-cli/src/types.rs, rust/crates/ccusage-config/..., apps/ccusage/config-schema.json
Adds the antigravity command with daily, monthly, and session reports, validation, snapshots, date-window routing, and configuration options.
Documentation and navigation
docs/guide/..., docs/.vitepress/config.ts, apps/ccusage/README.md, rust/adapters/antigravity/README.md
Documents commands, source locations, environment variables, navigation, troubleshooting, adapter behavior, and accuracy limitations.

Estimated code review effort: 4 (Complex) | ~60 minutes

Sequence Diagram(s)

sequenceDiagram
  participant User
  participant CLI
  participant AntigravityAdapter
  participant SQLiteDatabases
  participant Reports
  User->>CLI: ccusage antigravity daily
  CLI->>AntigravityAdapter: dispatch AgentCommandArgs
  AntigravityAdapter->>SQLiteDatabases: read conversation databases
  SQLiteDatabases-->>AntigravityAdapter: steps and gen_metadata blobs
  AntigravityAdapter->>Reports: summarize dated usage entries
  Reports-->>User: usage table or JSON report
Loading

Possibly related PRs

  • ccusage/ccusage#1487: Directly overlaps the Antigravity configuration, CLI wiring, and adapter integration.
  • ccusage/ccusage#1498: Introduces the --last date-window flow extended here for Antigravity.
  • ccusage/ccusage#1520: Uses the same built-in agent, CLI routing, adapter loading, and labeling integration points.

Suggested reviewers: copilot

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly and concisely summarizes the main change: adding an Antigravity CLI usage adapter.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch anti

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai

coderabbitai Bot commented Jul 29, 2026 •

Copy link
Copy Markdown
✅ Action performed

Full review finished.

@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented Jul 29, 2026 •

Copy link
Copy Markdown

Deploying with  Cloudflare Workers  Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

Status Name Latest Commit Preview URL Updated (UTC)
✅ Deployment successful!
View logs
ccusage-guide baa4715 Commit Preview URL

Branch Preview URL
Jul 29 2026, 09:06 PM

@pullfrog pullfrog Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed changes — new ccusage-adapter-antigravity crate that reads Antigravity CLI usage from per-conversation SQLite databases, exposing ccusage antigravity daily|monthly|session and unified report inclusion.

  • Hand-rolled protobuf wire reader for ModelUsageStats/CortexStepMetadata blobs — decodes by field number recovered from FileDescriptorProto blobs embedded in the agy binary, with 10 tests covering decoding, retry parsing, timestamps, identity fallback, gen_metadata wrapper discovery, and malformed-input tolerance.
  • Loader reading steps (primary) and gen_metadata (model names + pruned-step backstop) — deduplicates by response_id → provider_assigned_message_id → message_id; 10 tests covering naming, pricing, retry dedupe, cross-database dedupe, pruned steps, background calls, corrupt blobs, and missing tables.
  • Token mapping and pricing — input_tokens/cache_read_tokens are disjoint; output_tokens already includes thinking; cost calculated from LiteLLM rates with provider-qualified candidate lookups by model family; unnamed models surface as antigravity-model-<id>; --mode display correctly reports zero.
  • Standard adapter wiring — BUILT_IN_AGENT_NAMES, Command::Antigravity, parse_basic_agent_command, STANDARD_AGENT_REPORTS, CLI commands JSON, config schema namespace, progress tracking, and the full all-agents loader/report integration.
  • Documentation — new docs/guide/antigravity/ guide with accuracy notes, VitePress sidebar, README tables, env-var reference, all-reports, getting-started paths, and source-support-qa reversal documenting the previously-unsupported-to-now-supported transition.

✅ No new issues found.

Pullfrog  | ⚠️ this action is pinned to a commit SHA, which freezes the cleanup step — switch to @v0 or keep the SHA fresh with Dependabot | View workflow run | Using DeepSeek Pro (free via Pullfrog for OSS) | 𝕏

The docs state that every source-specific path variable can hold
comma-separated directories, so a current profile and an archive can be
reported together. Antigravity was taking the whole value as a single
path, which made that claim untrue for this source.
`collect_records` reads two tables, and each read was opening its own
read-only connection. Opening once and sharing it halves the connections
per conversation, which matters because Antigravity writes one database
per conversation rather than one for the whole history.
Copilot AI review requested due to automatic review settings July 29, 2026 17:32

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@pkg-pr-new

pkg-pr-new Bot commented Jul 29, 2026 •

Copy link
Copy Markdown

Open in StackBlitz

ccusage

npx https://pkg.pr.new/ccusage@1544

@ccusage/ccusage-darwin-arm64

npx https://pkg.pr.new/@ccusage/ccusage-darwin-arm64@1544

@ccusage/ccusage-darwin-x64

npx https://pkg.pr.new/@ccusage/ccusage-darwin-x64@1544

@ccusage/ccusage-linux-arm64

npx https://pkg.pr.new/@ccusage/ccusage-linux-arm64@1544

@ccusage/ccusage-linux-x64

npx https://pkg.pr.new/@ccusage/ccusage-linux-x64@1544

@ccusage/ccusage-win32-x64

npx https://pkg.pr.new/@ccusage/ccusage-win32-x64@1544

commit: baa4715

@github-actions

Copy link
Copy Markdown
Contributor

ccusage performance comparison

PR SHA: 5ef50ce73926
Base SHA: 28d54f968f14

This compares the Rust PR release binary against the configured base package on the same CI runner.

Package runtime diagnostics

Compares the PR package wrapper, the installed native optional dependency binary, and the workspace release binary on the same large fixture. This identifies whether slow package results come from JavaScript wrapper overhead, the published native binary build, or the Rust core itself.

Fixtures: Claude /home/runner/_work/_temp/ccusage-large-fixture (1.01 GiB, 2597 files), Codex /home/runner/_work/_temp/ccusage-large-codex-fixture (1.01 GiB, 2597 files)
All rows run --offline --json, measured by hyperfine with 0 warmups and 1 runs. This isolates wrapper overhead from the installed native optional dependency and the workspace release binary built on the runner.

Command Runtime Input Median Throughput Samples
claude --offline --json Package wrapper 1.01 GiB 328.7ms 3.06 GiB/s 1
claude --offline --json Installed native binary 1.01 GiB 290.8ms 3.46 GiB/s 1
codex --offline --json Package wrapper 1.01 GiB 114.7ms 8.78 GiB/s 1
codex --offline --json Installed native binary 1.01 GiB 109.6ms 9.19 GiB/s 1

Committed fixture performance

Committed small fixtures for stable PR-to-PR feedback and explicit Claude/Codex command coverage.

Fixtures: Claude apps/ccusage/test/fixtures/claude (0.00 MiB, 2 files), Codex apps/ccusage/test/fixtures/codex (0.00 MiB, 1 files)
Base runs the published ccusage package from pkg.pr.new, installed before measurement; PR runs the published native ccusage binary from pkg.pr.new, installed before measurement. Both run --offline --json, measured by hyperfine with 2 warmups and 7 runs.
Peak RSS is measured separately with /usr/bin/time using 1 runs. Lower RSS ratios are better.

Command Input Base median PR median PR vs base Base peak RSS PR peak RSS PR/base RSS Base throughput PR throughput
claude daily --offline --json 0.00 MiB 29.5ms 3.6ms 8.32x 55.00 MiB 12.46 MiB 0.23x 0.05 MiB/s 0.44 MiB/s
claude session --offline --json 0.00 MiB 25.2ms 3.3ms 7.55x 55.00 MiB 12.71 MiB 0.23x 0.06 MiB/s 0.46 MiB/s
codex daily --offline --json 0.00 MiB 25.3ms 2.3ms 10.93x 55.25 MiB 10.70 MiB 0.19x 0.03 MiB/s 0.37 MiB/s
codex session --offline --json 0.00 MiB 22.9ms 2.3ms 10.19x 55.00 MiB 10.70 MiB 0.19x 0.04 MiB/s 0.38 MiB/s

Large real-world-shaped fixture performance

Generated fixtures shaped from aggregate local log statistics: thousands of JSONL files, many small sessions, and a long tail of larger sessions. No real prompts, paths, or outputs are stored in the fixtures.

Fixtures: Claude /home/runner/_work/_temp/ccusage-large-fixture (1.01 GiB, 2597 files), Codex /home/runner/_work/_temp/ccusage-large-codex-fixture (1.01 GiB, 2597 files)
Base runs the published ccusage package from pkg.pr.new, installed before measurement; PR runs the published native ccusage binary from pkg.pr.new, installed before measurement. Both run --offline --json, measured by hyperfine with 0 warmups and 1 runs.
Peak RSS is measured separately with /usr/bin/time using 1 runs. Lower RSS ratios are better.

Command Input Base median PR median PR vs base Base peak RSS PR peak RSS PR/base RSS Base throughput PR throughput
claude --offline --json 1.01 GiB 360.0ms 308.6ms 1.17x 956.57 MiB 960.84 MiB 1.00x 2.80 GiB/s 3.26 GiB/s
codex --offline --json 1.01 GiB 117.4ms 91.7ms 1.28x 408.65 MiB 414.91 MiB 1.02x 8.57 GiB/s 10.97 GiB/s

Artifact size

Artifact Base PR Delta Ratio
packed ccusage-*.tgz 18.78 KiB 19.09 KiB +0.32 KiB 0.98x
installed native package binary 4158.97 KiB 4186.16 KiB +27.19 KiB 0.99x

Lower medians and smaller artifacts are better. CI runner noise still applies; use same-run ratios as directional PR feedback, not release guarantees.

@github-actions

Copy link
Copy Markdown
Contributor

ccusage performance comparison

PR SHA: 5ef50ce73926
Base SHA: 28d54f968f14

This compares the PR package against the configured base package on the same CI runner.

Package runtime diagnostics

Compares the PR package wrapper, the installed native optional dependency binary, and the workspace release binary on the same large fixture. This identifies whether slow package results come from JavaScript wrapper overhead, the published native binary build, or the Rust core itself.

Fixtures: Claude /home/runner/_work/_temp/ccusage-large-fixture (1.01 GiB, 2597 files), Codex /home/runner/_work/_temp/ccusage-large-codex-fixture (1.01 GiB, 2597 files)
All rows run --offline --json, measured by hyperfine with 0 warmups and 1 runs. This isolates wrapper overhead from the installed native optional dependency and the workspace release binary built on the runner.

Command Runtime Input Median Throughput Samples
claude --offline --json Package wrapper 1.01 GiB 336.0ms 3.00 GiB/s 1
claude --offline --json Installed native binary 1.01 GiB 304.3ms 3.31 GiB/s 1
codex --offline --json Package wrapper 1.01 GiB 119.7ms 8.41 GiB/s 1
codex --offline --json Installed native binary 1.01 GiB 107.2ms 9.39 GiB/s 1

Committed fixture performance

Committed small fixtures for stable PR-to-PR feedback and explicit Claude/Codex command coverage.

Fixtures: Claude apps/ccusage/test/fixtures/claude (0.00 MiB, 2 files), Codex apps/ccusage/test/fixtures/codex (0.00 MiB, 1 files)
Base runs the published ccusage package from pkg.pr.new, installed before measurement; PR runs the published ccusage package from pkg.pr.new, installed before measurement. Both run --offline --json, measured by hyperfine with 2 warmups and 7 runs.
Peak RSS is measured separately with /usr/bin/time using 1 runs. Lower RSS ratios are better.

Command Input Base median PR median PR vs base Base peak RSS PR peak RSS PR/base RSS Base throughput PR throughput
claude daily --offline --json 0.00 MiB 29.5ms 27.4ms 1.08x 55.25 MiB 55.00 MiB 1.00x 0.05 MiB/s 0.06 MiB/s
claude session --offline --json 0.00 MiB 26.4ms 27.5ms 0.96x 55.00 MiB 55.00 MiB 1.00x 0.06 MiB/s 0.06 MiB/s
codex daily --offline --json 0.00 MiB 23.3ms 23.2ms 1.01x 55.25 MiB 54.75 MiB 0.99x 0.04 MiB/s 0.04 MiB/s
codex session --offline --json 0.00 MiB 25.7ms 25.5ms 1.01x 54.75 MiB 55.25 MiB 1.01x 0.03 MiB/s 0.03 MiB/s

Large real-world-shaped fixture performance

Generated fixtures shaped from aggregate local log statistics: thousands of JSONL files, many small sessions, and a long tail of larger sessions. No real prompts, paths, or outputs are stored in the fixtures.

Fixtures: Claude /home/runner/_work/_temp/ccusage-large-fixture (1.01 GiB, 2597 files), Codex /home/runner/_work/_temp/ccusage-large-codex-fixture (1.01 GiB, 2597 files)
Base runs the published ccusage package from pkg.pr.new, installed before measurement; PR runs the published ccusage package from pkg.pr.new, installed before measurement. Both run --offline --json, measured by hyperfine with 0 warmups and 1 runs.
Peak RSS is measured separately with /usr/bin/time using 1 runs. Lower RSS ratios are better.

Command Input Base median PR median PR vs base Base peak RSS PR peak RSS PR/base RSS Base throughput PR throughput
claude --offline --json 1.01 GiB 382.3ms 341.4ms 1.12x 940.82 MiB 962.59 MiB 1.02x 2.63 GiB/s 2.95 GiB/s
codex --offline --json 1.01 GiB 114.4ms 122.5ms 0.93x 404.64 MiB 410.91 MiB 1.02x 8.80 GiB/s 8.22 GiB/s

Artifact size

Artifact Base PR Delta Ratio
packed ccusage-*.tgz 18.78 KiB 19.09 KiB +0.32 KiB 0.98x
installed native package binary 4158.97 KiB 4186.16 KiB +27.19 KiB 0.99x

Lower medians and smaller artifacts are better. CI runner noise still applies; use same-run ratios as directional PR feedback, not release guarantees.

@pullfrog pullfrog Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ No new issues found.

Reviewed changes — two follow-up commits on the Antigravity adapter: a performance fix that opens each conversation database once instead of twice, and comma-separated data directory support matching every other source-specific path variable.

  • Reused the SQLite connection across both read_blobs calls — collect_records opens the database once and passes &connection to the ANTIGRAVITY_GENERATION_QUERY and ANTIGRAVITY_STEP_QUERY reads, halving the per-database open cost. Error handling is identical; the sqlite::Connection::open_with_flags guard and the per-table prepare fallback remain unchanged.
  • Accepted comma-separated ANTIGRAVITY_DATA_DIR values — antigravity_roots splits on ,, trims, and filters empty entries, so a current profile and an archive directory can be reported together. A new test validates two-database discovery.

Pullfrog  | ⚠️ this action is pinned to a commit SHA, which freezes the cleanup step — switch to @v0 or keep the SHA fresh with Dependabot | View workflow run | Using DeepSeek Pro (free via Pullfrog for OSS) | 𝕏

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 4

🧹 Nitpick comments (2)
rust/crates/ccusage-adapter-all/Cargo.toml (1)

13-17: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Dependency line inserted out of alphabetical order.

ccusage-adapter-antigravity is placed between copilot and goose, but the file otherwise follows alphabetical order (and the sibling lib.rs/adapter/mod.rs re-exports correctly place antigravity right after amp). Consider moving it to keep the list scannable.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@rust/crates/ccusage-adapter-all/Cargo.toml` around lines 13 - 17, Reorder the
workspace dependency entries so ccusage-adapter-antigravity appears in
alphabetical order relative to the other ccusage-adapter entries, matching the
ordering used by the related re-exports.
rust/adapters/antigravity/src/proto.rs (1)

149-154: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Doc comments describe the wrong dedup fallback order.

The field docs say the fallback order is response_id → message_id (first fallback) → provider_assigned_message_id (second fallback), but identity() actually checks provider_message_id before message_id — and the test falls_back_through_the_identity_fields (Line 417) confirms this is the intended, tested behavior (provider-a wins over message-a). Update the comments to match the actual/tested precedence so future readers of this hand-rolled decoder aren't misled about dedup semantics.

📝 Proposed doc fix
-    /// `message_id` — dedup fallback when `response_id` is absent.
+    /// `message_id` — dedup fallback when `response_id` and
+    /// `provider_assigned_message_id` are both absent.
     pub(crate) message_id: Option<String>,
-    /// `provider_assigned_message_id` — second dedup fallback.
+    /// `provider_assigned_message_id` — first dedup fallback when
+    /// `response_id` is absent.
     pub(crate) provider_message_id: Option<String>,

Also applies to: 176-188

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@rust/adapters/antigravity/src/proto.rs` around lines 149 - 154, Update the
doc comments for response_id, provider_message_id, and message_id to document
the actual identity() precedence: response_id first, provider_message_id as the
first fallback, and message_id as the second fallback. Keep the implementation
and tested behavior in falls_back_through_the_identity_fields unchanged.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@docs/guide/antigravity/index.md`:
- Around line 68-72: Clarify the cost-mode explanation in the guide surrounding
the antigravity example: explicitly state that --mode calculate is the
alternative used to estimate cost, while --mode display shows only precomputed
costs. Keep the existing command example consistent with that explanation and
update any relevant guide examples affected by this wording.

In `@docs/guide/index.md`:
- Around line 75-97: Propagate Antigravity support through all documentation
inventories: in docs/guide/index.md (lines 75-97), add antigravity to
introductory source lists and focused-command examples; in
docs/guide/all-reports.md (lines 49-66), add it to unified-source lists and
focused examples; in docs/guide/environment-variables.md (line 20), include
ANTIGRAVITY_DATA_DIR in the export example; and in docs/guide/getting-started.md
(lines 179-200), include ANTIGRAVITY_DATA_DIR in comma-separated directory
examples.

In `@rust/adapters/antigravity/README.md`:
- Around line 83-88: Update the “Public surface” section in the antigravity
README to remove report::report_from_rows, since it is only pub(crate). Keep the
genuinely externally public items—loader::load_entries,
report::summarize_entries, and run—listed.

In `@rust/adapters/antigravity/src/paths.rs`:
- Around line 80-86: Update the test ignores_a_blank_data_dir_override to also
guard the home-directory environment variable(s) used by antigravity_roots,
setting them to a valid temporary or deterministic value before calling
antigravity_db_paths(). Preserve the existing blank override assertion while
ensuring the test does not depend on the process environment's real HOME or
USERPROFILE.

---

Nitpick comments:
In `@rust/adapters/antigravity/src/proto.rs`:
- Around line 149-154: Update the doc comments for response_id,
provider_message_id, and message_id to document the actual identity()
precedence: response_id first, provider_message_id as the first fallback, and
message_id as the second fallback. Keep the implementation and tested behavior
in falls_back_through_the_identity_fields unchanged.

In `@rust/crates/ccusage-adapter-all/Cargo.toml`:
- Around line 13-17: Reorder the workspace dependency entries so
ccusage-adapter-antigravity appears in alphabetical order relative to the other
ccusage-adapter entries, matching the ordering used by the related re-exports.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: a7e853f8-c70d-4dc7-8dd8-910f8e2c9724

📥 Commits

Reviewing files that changed from the base of the PR and between 28d54f9 and 5ef50ce.

⛔ Files ignored due to path filters (3)
  • rust/Cargo.lock is excluded by !**/*.lock
  • rust/crates/ccusage-cli-parser/src/snapshots/ccusage_cli_parser__tests__root_help.snap is excluded by !**/*.snap
  • rust/crates/ccusage-config/src/snapshots/ccusage_config__config_schema__tests__snapshots_schema_agent_specific_option_edges.snap is excluded by !**/*.snap
📒 Files selected for processing (33)
  • apps/ccusage/README.md
  • apps/ccusage/config-schema.json
  • docs/.vitepress/config.ts
  • docs/guide/all-reports.md
  • docs/guide/antigravity/index.md
  • docs/guide/environment-variables.md
  • docs/guide/getting-started.md
  • docs/guide/index.md
  • docs/guide/source-support-qa.md
  • nix/cargo-artifacts.nix
  • rust/Cargo.toml
  • rust/adapters/antigravity/Cargo.toml
  • rust/adapters/antigravity/README.md
  • rust/adapters/antigravity/src/lib.rs
  • rust/adapters/antigravity/src/loader.rs
  • rust/adapters/antigravity/src/parser.rs
  • rust/adapters/antigravity/src/paths.rs
  • rust/adapters/antigravity/src/proto.rs
  • rust/adapters/antigravity/src/report.rs
  • rust/crates/ccusage-adapter-all/Cargo.toml
  • rust/crates/ccusage-adapter-all/src/lib.rs
  • rust/crates/ccusage-adapter-all/src/loader.rs
  • rust/crates/ccusage-adapter-all/src/report.rs
  • rust/crates/ccusage-cli-parser/src/cli-commands.json
  • rust/crates/ccusage-cli-parser/src/parser.rs
  • rust/crates/ccusage-cli-parser/src/tests.rs
  • rust/crates/ccusage-cli/src/types.rs
  • rust/crates/ccusage-config/src/config_schema.rs
  • rust/crates/ccusage-core/src/lib.rs
  • rust/crates/ccusage/Cargo.toml
  • rust/crates/ccusage/src/adapter/mod.rs
  • rust/crates/ccusage/src/cli/last_window.rs
  • rust/crates/ccusage/src/main.rs

Comment thread docs/guide/antigravity/index.md Outdated
Comment thread docs/guide/index.md
Comment thread rust/adapters/antigravity/README.md
Comment thread rust/adapters/antigravity/src/paths.rs
@github-actions

Copy link
Copy Markdown
Contributor

ccusage performance comparison

PR SHA: 2a1442f31739
Base SHA: 28d54f968f14

This compares the PR package against the configured base package on the same CI runner.

Package runtime diagnostics

Compares the PR package wrapper, the installed native optional dependency binary, and the workspace release binary on the same large fixture. This identifies whether slow package results come from JavaScript wrapper overhead, the published native binary build, or the Rust core itself.

Fixtures: Claude /home/runner/_work/_temp/ccusage-large-fixture (1.01 GiB, 2597 files), Codex /home/runner/_work/_temp/ccusage-large-codex-fixture (1.01 GiB, 2597 files)
All rows run --offline --json, measured by hyperfine with 0 warmups and 1 runs. This isolates wrapper overhead from the installed native optional dependency and the workspace release binary built on the runner.

Command Runtime Input Median Throughput Samples
claude --offline --json Package wrapper 1.01 GiB 347.1ms 2.90 GiB/s 1
claude --offline --json Installed native binary 1.01 GiB 308.5ms 3.26 GiB/s 1
codex --offline --json Package wrapper 1.01 GiB 110.9ms 9.07 GiB/s 1
codex --offline --json Installed native binary 1.01 GiB 92.5ms 10.89 GiB/s 1

Committed fixture performance

Committed small fixtures for stable PR-to-PR feedback and explicit Claude/Codex command coverage.

Fixtures: Claude apps/ccusage/test/fixtures/claude (0.00 MiB, 2 files), Codex apps/ccusage/test/fixtures/codex (0.00 MiB, 1 files)
Base runs the published ccusage package from pkg.pr.new, installed before measurement; PR runs the published ccusage package from pkg.pr.new, installed before measurement. Both run --offline --json, measured by hyperfine with 2 warmups and 7 runs.
Peak RSS is measured separately with /usr/bin/time using 1 runs. Lower RSS ratios are better.

Command Input Base median PR median PR vs base Base peak RSS PR peak RSS PR/base RSS Base throughput PR throughput
claude daily --offline --json 0.00 MiB 27.3ms 28.0ms 0.98x 55.25 MiB 55.00 MiB 1.00x 0.06 MiB/s 0.06 MiB/s
claude session --offline --json 0.00 MiB 24.2ms 24.6ms 0.98x 55.00 MiB 55.25 MiB 1.00x 0.06 MiB/s 0.06 MiB/s
codex daily --offline --json 0.00 MiB 23.9ms 24.3ms 0.98x 55.00 MiB 55.00 MiB 1.00x 0.04 MiB/s 0.04 MiB/s
codex session --offline --json 0.00 MiB 22.3ms 23.2ms 0.96x 54.75 MiB 55.00 MiB 1.00x 0.04 MiB/s 0.04 MiB/s

Large real-world-shaped fixture performance

Generated fixtures shaped from aggregate local log statistics: thousands of JSONL files, many small sessions, and a long tail of larger sessions. No real prompts, paths, or outputs are stored in the fixtures.

Fixtures: Claude /home/runner/_work/_temp/ccusage-large-fixture (1.01 GiB, 2597 files), Codex /home/runner/_work/_temp/ccusage-large-codex-fixture (1.01 GiB, 2597 files)
Base runs the published ccusage package from pkg.pr.new, installed before measurement; PR runs the published ccusage package from pkg.pr.new, installed before measurement. Both run --offline --json, measured by hyperfine with 0 warmups and 1 runs.
Peak RSS is measured separately with /usr/bin/time using 1 runs. Lower RSS ratios are better.

Command Input Base median PR median PR vs base Base peak RSS PR peak RSS PR/base RSS Base throughput PR throughput
claude --offline --json 1.01 GiB 366.3ms 336.1ms 1.09x 924.82 MiB 972.58 MiB 1.05x 2.75 GiB/s 3.00 GiB/s
codex --offline --json 1.01 GiB 115.9ms 117.6ms 0.99x 426.90 MiB 398.90 MiB 0.93x 8.69 GiB/s 8.56 GiB/s

Artifact size

Artifact Base PR Delta Ratio
packed ccusage-*.tgz 18.78 KiB 19.09 KiB +0.32 KiB 0.98x
installed native package binary 4158.97 KiB 4186.66 KiB +27.69 KiB 0.99x

Lower medians and smaller artifacts are better. CI runner noise still applies; use same-run ratios as directional PR feedback, not release guarantees.

@github-actions

Copy link
Copy Markdown
Contributor

ccusage performance comparison

PR SHA: 2a1442f31739
Base SHA: 28d54f968f14

This compares the Rust PR release binary against the configured base package on the same CI runner.

Package runtime diagnostics

Compares the PR package wrapper, the installed native optional dependency binary, and the workspace release binary on the same large fixture. This identifies whether slow package results come from JavaScript wrapper overhead, the published native binary build, or the Rust core itself.

Fixtures: Claude /home/runner/_work/_temp/ccusage-large-fixture (1.01 GiB, 2597 files), Codex /home/runner/_work/_temp/ccusage-large-codex-fixture (1.01 GiB, 2597 files)
All rows run --offline --json, measured by hyperfine with 0 warmups and 1 runs. This isolates wrapper overhead from the installed native optional dependency and the workspace release binary built on the runner.

Command Runtime Input Median Throughput Samples
claude --offline --json Package wrapper 1.01 GiB 363.2ms 2.77 GiB/s 1
claude --offline --json Installed native binary 1.01 GiB 323.3ms 3.11 GiB/s 1
codex --offline --json Package wrapper 1.01 GiB 119.7ms 8.41 GiB/s 1
codex --offline --json Installed native binary 1.01 GiB 95.1ms 10.58 GiB/s 1

Committed fixture performance

Committed small fixtures for stable PR-to-PR feedback and explicit Claude/Codex command coverage.

Fixtures: Claude apps/ccusage/test/fixtures/claude (0.00 MiB, 2 files), Codex apps/ccusage/test/fixtures/codex (0.00 MiB, 1 files)
Base runs the published ccusage package from pkg.pr.new, installed before measurement; PR runs the published native ccusage binary from pkg.pr.new, installed before measurement. Both run --offline --json, measured by hyperfine with 2 warmups and 7 runs.
Peak RSS is measured separately with /usr/bin/time using 1 runs. Lower RSS ratios are better.

Command Input Base median PR median PR vs base Base peak RSS PR peak RSS PR/base RSS Base throughput PR throughput
claude daily --offline --json 0.00 MiB 26.7ms 5.4ms 4.93x 55.00 MiB 12.45 MiB 0.23x 0.06 MiB/s 0.29 MiB/s
claude session --offline --json 0.00 MiB 24.8ms 2.8ms 8.91x 55.00 MiB 12.70 MiB 0.23x 0.06 MiB/s 0.56 MiB/s
codex daily --offline --json 0.00 MiB 26.4ms 2.5ms 10.38x 55.25 MiB 10.70 MiB 0.19x 0.03 MiB/s 0.34 MiB/s
codex session --offline --json 0.00 MiB 26.9ms 2.6ms 10.50x 55.25 MiB 10.70 MiB 0.19x 0.03 MiB/s 0.33 MiB/s

Large real-world-shaped fixture performance

Generated fixtures shaped from aggregate local log statistics: thousands of JSONL files, many small sessions, and a long tail of larger sessions. No real prompts, paths, or outputs are stored in the fixtures.

Fixtures: Claude /home/runner/_work/_temp/ccusage-large-fixture (1.01 GiB, 2597 files), Codex /home/runner/_work/_temp/ccusage-large-codex-fixture (1.01 GiB, 2597 files)
Base runs the published ccusage package from pkg.pr.new, installed before measurement; PR runs the published native ccusage binary from pkg.pr.new, installed before measurement. Both run --offline --json, measured by hyperfine with 0 warmups and 1 runs.
Peak RSS is measured separately with /usr/bin/time using 1 runs. Lower RSS ratios are better.

Command Input Base median PR median PR vs base Base peak RSS PR peak RSS PR/base RSS Base throughput PR throughput
claude --offline --json 1.01 GiB 383.3ms 317.9ms 1.21x 942.58 MiB 958.58 MiB 1.02x 2.63 GiB/s 3.17 GiB/s
codex --offline --json 1.01 GiB 126.1ms 99.8ms 1.26x 424.64 MiB 410.90 MiB 0.97x 7.99 GiB/s 10.09 GiB/s

Artifact size

Artifact Base PR Delta Ratio
packed ccusage-*.tgz 18.78 KiB 19.09 KiB +0.32 KiB 0.98x
installed native package binary 4158.97 KiB 4186.66 KiB +27.69 KiB 0.99x

Lower medians and smaller artifacts are better. CI runner noise still applies; use same-run ratios as directional PR feedback, not release guarantees.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@docs/guide/antigravity/index.md`:
- Around line 31-40: The Antigravity guide currently documents only one data
root and direct conversation files. Update the `ANTIGRAVITY_DATA_DIR`
documentation to state that it accepts comma-separated roots and that ccusage
recursively discovers `.db` files beneath each root’s `conversations/`
directory, including archived or nested files; adjust the example path wording
accordingly.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: f5b90431-36da-44b6-8c8a-313ffaf2248b

📥 Commits

Reviewing files that changed from the base of the PR and between 28d54f9 and 2a1442f.

⛔ Files ignored due to path filters (3)
  • rust/Cargo.lock is excluded by !**/*.lock
  • rust/crates/ccusage-cli-parser/src/snapshots/ccusage_cli_parser__tests__root_help.snap is excluded by !**/*.snap
  • rust/crates/ccusage-config/src/snapshots/ccusage_config__config_schema__tests__snapshots_schema_agent_specific_option_edges.snap is excluded by !**/*.snap
📒 Files selected for processing (33)
  • apps/ccusage/README.md
  • apps/ccusage/config-schema.json
  • docs/.vitepress/config.ts
  • docs/guide/all-reports.md
  • docs/guide/antigravity/index.md
  • docs/guide/environment-variables.md
  • docs/guide/getting-started.md
  • docs/guide/index.md
  • docs/guide/source-support-qa.md
  • nix/cargo-artifacts.nix
  • rust/Cargo.toml
  • rust/adapters/antigravity/Cargo.toml
  • rust/adapters/antigravity/README.md
  • rust/adapters/antigravity/src/lib.rs
  • rust/adapters/antigravity/src/loader.rs
  • rust/adapters/antigravity/src/parser.rs
  • rust/adapters/antigravity/src/paths.rs
  • rust/adapters/antigravity/src/proto.rs
  • rust/adapters/antigravity/src/report.rs
  • rust/crates/ccusage-adapter-all/Cargo.toml
  • rust/crates/ccusage-adapter-all/src/lib.rs
  • rust/crates/ccusage-adapter-all/src/loader.rs
  • rust/crates/ccusage-adapter-all/src/report.rs
  • rust/crates/ccusage-cli-parser/src/cli-commands.json
  • rust/crates/ccusage-cli-parser/src/parser.rs
  • rust/crates/ccusage-cli-parser/src/tests.rs
  • rust/crates/ccusage-cli/src/types.rs
  • rust/crates/ccusage-config/src/config_schema.rs
  • rust/crates/ccusage-core/src/lib.rs
  • rust/crates/ccusage/Cargo.toml
  • rust/crates/ccusage/src/adapter/mod.rs
  • rust/crates/ccusage/src/cli/last_window.rs
  • rust/crates/ccusage/src/main.rs

Comment thread docs/guide/antigravity/index.md Outdated

@cubic-dev-ai cubic-dev-ai Bot left a comment •

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

All reported issues were addressed

Tip: cubic can generate docs of your entire codebase and keep them up to date. Try it here.

Re-trigger cubic

Comment thread rust/adapters/antigravity/src/report.rs Outdated
Comment thread rust/adapters/antigravity/src/proto.rs Outdated
The guide inventories that enumerate every source still stopped at Copilot
CLI and Gemini CLI, so the introduction, the unified-report source list, the
focused-command examples and the data directory export examples contradicted
the tables that already listed Antigravity.

Also drops report::report_from_rows from the adapter README's public surface;
it is re-exported as pub(crate) and only used by run.

Co-authored-by: Codesmith <[email protected]>
ignores_a_blank_data_dir_override only overrode ANTIGRAVITY_DATA_DIR, so the
fallback still read the real HOME and the assertion failed wherever it is
unset. Pinning it at a fixture also lets the test assert the fallback finds no
databases rather than merely that it returned Ok.

Both variables go through one EnvVarsGuard because EnvVarGuard holds the same
non-reentrant global env lock, so taking a second guard in one test deadlocks.

Co-authored-by: Codesmith <[email protected]>
Copilot AI review requested due to automatic review settings July 29, 2026 18:28

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

The session branch grouped by key and then moved the group key into
session_id, which left last_activity, first_activity and project_path unset:
the session table had no Last Activity column and the JSON exposed none of the
session metadata every other timestamped adapter reports.

Accumulating with SessionAccumulator, as qwen, pi, opencode and openclaw
already do, carries the activity range and project path onto the row, and the
JSON report now asks for session metadata for the session kind.

Co-authored-by: Codesmith <[email protected]>
google.protobuf.Timestamp constrains nanos to a single second, but a corrupt
blob carrying more than that was normalized into the millisecond total, which
reported the invocation up to four seconds late and near midnight moved it into
the next day's report. The seconds field is still trusted, so the invocation is
kept rather than dropped along with its tokens.

Co-authored-by: Codesmith <[email protected]>
@github-actions

Copy link
Copy Markdown
Contributor

ccusage performance comparison

PR SHA: a2cefac70c2b
Base SHA: 28d54f968f14

This compares the PR package against the configured base package on the same CI runner.

Package runtime diagnostics

Compares the PR package wrapper, the installed native optional dependency binary, and the workspace release binary on the same large fixture. This identifies whether slow package results come from JavaScript wrapper overhead, the published native binary build, or the Rust core itself.

Fixtures: Claude /home/runner/_work/_temp/ccusage-large-fixture (1.01 GiB, 2597 files), Codex /home/runner/_work/_temp/ccusage-large-codex-fixture (1.01 GiB, 2597 files)
All rows run --offline --json, measured by hyperfine with 0 warmups and 1 runs. This isolates wrapper overhead from the installed native optional dependency and the workspace release binary built on the runner.

Command Runtime Input Median Throughput Samples
claude --offline --json Package wrapper 1.01 GiB 352.6ms 2.86 GiB/s 1
claude --offline --json Installed native binary 1.01 GiB 320.6ms 3.14 GiB/s 1
codex --offline --json Package wrapper 1.01 GiB 117.8ms 8.54 GiB/s 1
codex --offline --json Installed native binary 1.01 GiB 91.6ms 10.99 GiB/s 1

Committed fixture performance

Committed small fixtures for stable PR-to-PR feedback and explicit Claude/Codex command coverage.

Fixtures: Claude apps/ccusage/test/fixtures/claude (0.00 MiB, 2 files), Codex apps/ccusage/test/fixtures/codex (0.00 MiB, 1 files)
Base runs the published ccusage package from pkg.pr.new, installed before measurement; PR runs the published ccusage package from pkg.pr.new, installed before measurement. Both run --offline --json, measured by hyperfine with 2 warmups and 7 runs.
Peak RSS is measured separately with /usr/bin/time using 1 runs. Lower RSS ratios are better.

Command Input Base median PR median PR vs base Base peak RSS PR peak RSS PR/base RSS Base throughput PR throughput
claude daily --offline --json 0.00 MiB 26.7ms 26.6ms 1.01x 55.50 MiB 55.00 MiB 0.99x 0.06 MiB/s 0.06 MiB/s
claude session --offline --json 0.00 MiB 25.9ms 26.3ms 0.99x 55.00 MiB 55.00 MiB 1.00x 0.06 MiB/s 0.06 MiB/s
codex daily --offline --json 0.00 MiB 25.2ms 23.4ms 1.08x 55.00 MiB 55.00 MiB 1.00x 0.03 MiB/s 0.04 MiB/s
codex session --offline --json 0.00 MiB 22.7ms 22.7ms 1.00x 55.00 MiB 55.00 MiB 1.00x 0.04 MiB/s 0.04 MiB/s

Large real-world-shaped fixture performance

Generated fixtures shaped from aggregate local log statistics: thousands of JSONL files, many small sessions, and a long tail of larger sessions. No real prompts, paths, or outputs are stored in the fixtures.

Fixtures: Claude /home/runner/_work/_temp/ccusage-large-fixture (1.01 GiB, 2597 files), Codex /home/runner/_work/_temp/ccusage-large-codex-fixture (1.01 GiB, 2597 files)
Base runs the published ccusage package from pkg.pr.new, installed before measurement; PR runs the published ccusage package from pkg.pr.new, installed before measurement. Both run --offline --json, measured by hyperfine with 0 warmups and 1 runs.
Peak RSS is measured separately with /usr/bin/time using 1 runs. Lower RSS ratios are better.

Command Input Base median PR median PR vs base Base peak RSS PR peak RSS PR/base RSS Base throughput PR throughput
claude --offline --json 1.01 GiB 361.3ms 337.0ms 1.07x 960.82 MiB 944.59 MiB 0.98x 2.79 GiB/s 2.99 GiB/s
codex --offline --json 1.01 GiB 118.5ms 119.7ms 0.99x 404.64 MiB 412.91 MiB 1.02x 8.50 GiB/s 8.41 GiB/s

Artifact size

Artifact Base PR Delta Ratio
packed ccusage-*.tgz 18.78 KiB 19.09 KiB +0.32 KiB 0.98x
installed native package binary 4158.97 KiB 4186.66 KiB +27.69 KiB 0.99x

Lower medians and smaller artifacts are better. CI runner noise still applies; use same-run ratios as directional PR feedback, not release guarantees.

@github-actions

Copy link
Copy Markdown
Contributor

ccusage performance comparison

PR SHA: 7febf884916e
Base SHA: 28d54f968f14

This compares the Rust PR release binary against the configured base package on the same CI runner.

Package runtime diagnostics

Compares the PR package wrapper, the installed native optional dependency binary, and the workspace release binary on the same large fixture. This identifies whether slow package results come from JavaScript wrapper overhead, the published native binary build, or the Rust core itself.

Fixtures: Claude /home/runner/_work/_temp/ccusage-large-fixture (1.01 GiB, 2597 files), Codex /home/runner/_work/_temp/ccusage-large-codex-fixture (1.01 GiB, 2597 files)
All rows run --offline --json, measured by hyperfine with 0 warmups and 1 runs. This isolates wrapper overhead from the installed native optional dependency and the workspace release binary built on the runner.

Command Runtime Input Median Throughput Samples
claude --offline --json Package wrapper 1.01 GiB 339.5ms 2.97 GiB/s 1
claude --offline --json Installed native binary 1.01 GiB 308.2ms 3.27 GiB/s 1
codex --offline --json Package wrapper 1.01 GiB 124.3ms 8.10 GiB/s 1
codex --offline --json Installed native binary 1.01 GiB 93.4ms 10.78 GiB/s 1

Committed fixture performance

Committed small fixtures for stable PR-to-PR feedback and explicit Claude/Codex command coverage.

Fixtures: Claude apps/ccusage/test/fixtures/claude (0.00 MiB, 2 files), Codex apps/ccusage/test/fixtures/codex (0.00 MiB, 1 files)
Base runs the published ccusage package from pkg.pr.new, installed before measurement; PR runs the published native ccusage binary from pkg.pr.new, installed before measurement. Both run --offline --json, measured by hyperfine with 2 warmups and 7 runs.
Peak RSS is measured separately with /usr/bin/time using 1 runs. Lower RSS ratios are better.

Command Input Base median PR median PR vs base Base peak RSS PR peak RSS PR/base RSS Base throughput PR throughput
claude daily --offline --json 0.00 MiB 26.9ms 5.3ms 5.07x 55.00 MiB 12.45 MiB 0.23x 0.06 MiB/s 0.29 MiB/s
claude session --offline --json 0.00 MiB 24.8ms 2.8ms 8.70x 55.00 MiB 12.46 MiB 0.23x 0.06 MiB/s 0.54 MiB/s
codex daily --offline --json 0.00 MiB 26.6ms 2.5ms 10.61x 54.75 MiB 10.71 MiB 0.20x 0.03 MiB/s 0.34 MiB/s
codex session --offline --json 0.00 MiB 22.7ms 2.4ms 9.33x 55.00 MiB 10.71 MiB 0.19x 0.04 MiB/s 0.35 MiB/s

Large real-world-shaped fixture performance

Generated fixtures shaped from aggregate local log statistics: thousands of JSONL files, many small sessions, and a long tail of larger sessions. No real prompts, paths, or outputs are stored in the fixtures.

Fixtures: Claude /home/runner/_work/_temp/ccusage-large-fixture (1.01 GiB, 2597 files), Codex /home/runner/_work/_temp/ccusage-large-codex-fixture (1.01 GiB, 2597 files)
Base runs the published ccusage package from pkg.pr.new, installed before measurement; PR runs the published native ccusage binary from pkg.pr.new, installed before measurement. Both run --offline --json, measured by hyperfine with 0 warmups and 1 runs.
Peak RSS is measured separately with /usr/bin/time using 1 runs. Lower RSS ratios are better.

Command Input Base median PR median PR vs base Base peak RSS PR peak RSS PR/base RSS Base throughput PR throughput
claude --offline --json 1.01 GiB 379.7ms 315.1ms 1.21x 966.58 MiB 940.59 MiB 0.97x 2.65 GiB/s 3.20 GiB/s
codex --offline --json 1.01 GiB 119.6ms 94.1ms 1.27x 394.90 MiB 420.91 MiB 1.07x 8.42 GiB/s 10.70 GiB/s

Artifact size

Artifact Base PR Delta Ratio
packed ccusage-*.tgz 18.78 KiB 19.09 KiB +0.32 KiB 0.98x
installed native package binary 4158.97 KiB 4190.28 KiB +31.31 KiB 0.99x

Lower medians and smaller artifacts are better. CI runner noise still applies; use same-run ratios as directional PR feedback, not release guarantees.

@github-actions

Copy link
Copy Markdown
Contributor

ccusage performance comparison

PR SHA: 7febf884916e
Base SHA: 28d54f968f14

This compares the PR package against the configured base package on the same CI runner.

Package runtime diagnostics

Compares the PR package wrapper, the installed native optional dependency binary, and the workspace release binary on the same large fixture. This identifies whether slow package results come from JavaScript wrapper overhead, the published native binary build, or the Rust core itself.

Fixtures: Claude /home/runner/_work/_temp/ccusage-large-fixture (1.01 GiB, 2597 files), Codex /home/runner/_work/_temp/ccusage-large-codex-fixture (1.01 GiB, 2597 files)
All rows run --offline --json, measured by hyperfine with 0 warmups and 1 runs. This isolates wrapper overhead from the installed native optional dependency and the workspace release binary built on the runner.

Command Runtime Input Median Throughput Samples
claude --offline --json Package wrapper 1.01 GiB 486.4ms 2.07 GiB/s 1
claude --offline --json Installed native binary 1.01 GiB 434.9ms 2.31 GiB/s 1
codex --offline --json Package wrapper 1.01 GiB 161.0ms 6.25 GiB/s 1
codex --offline --json Installed native binary 1.01 GiB 120.8ms 8.33 GiB/s 1

Committed fixture performance

Committed small fixtures for stable PR-to-PR feedback and explicit Claude/Codex command coverage.

Fixtures: Claude apps/ccusage/test/fixtures/claude (0.00 MiB, 2 files), Codex apps/ccusage/test/fixtures/codex (0.00 MiB, 1 files)
Base runs the published ccusage package from pkg.pr.new, installed before measurement; PR runs the published ccusage package from pkg.pr.new, installed before measurement. Both run --offline --json, measured by hyperfine with 2 warmups and 7 runs.
Peak RSS is measured separately with /usr/bin/time using 1 runs. Lower RSS ratios are better.

Command Input Base median PR median PR vs base Base peak RSS PR peak RSS PR/base RSS Base throughput PR throughput
claude daily --offline --json 0.00 MiB 26.8ms 27.3ms 0.98x 55.00 MiB 55.00 MiB 1.00x 0.06 MiB/s 0.06 MiB/s
claude session --offline --json 0.00 MiB 24.0ms 24.7ms 0.97x 55.00 MiB 55.00 MiB 1.00x 0.06 MiB/s 0.06 MiB/s
codex daily --offline --json 0.00 MiB 24.4ms 25.8ms 0.95x 55.00 MiB 54.75 MiB 1.00x 0.04 MiB/s 0.03 MiB/s
codex session --offline --json 0.00 MiB 23.2ms 22.9ms 1.01x 55.00 MiB 55.00 MiB 1.00x 0.04 MiB/s 0.04 MiB/s

Large real-world-shaped fixture performance

Generated fixtures shaped from aggregate local log statistics: thousands of JSONL files, many small sessions, and a long tail of larger sessions. No real prompts, paths, or outputs are stored in the fixtures.

Fixtures: Claude /home/runner/_work/_temp/ccusage-large-fixture (1.01 GiB, 2597 files), Codex /home/runner/_work/_temp/ccusage-large-codex-fixture (1.01 GiB, 2597 files)
Base runs the published ccusage package from pkg.pr.new, installed before measurement; PR runs the published ccusage package from pkg.pr.new, installed before measurement. Both run --offline --json, measured by hyperfine with 0 warmups and 1 runs.
Peak RSS is measured separately with /usr/bin/time using 1 runs. Lower RSS ratios are better.

Command Input Base median PR median PR vs base Base peak RSS PR peak RSS PR/base RSS Base throughput PR throughput
claude --offline --json 1.01 GiB 370.3ms 348.1ms 1.06x 964.83 MiB 956.59 MiB 0.99x 2.72 GiB/s 2.89 GiB/s
codex --offline --json 1.01 GiB 139.3ms 136.9ms 1.02x 424.66 MiB 412.91 MiB 0.97x 7.23 GiB/s 7.35 GiB/s

Artifact size

Artifact Base PR Delta Ratio
packed ccusage-*.tgz 18.78 KiB 19.09 KiB +0.32 KiB 0.98x
installed native package binary 4158.97 KiB 4190.28 KiB +31.31 KiB 0.99x

Lower medians and smaller artifacts are better. CI runner noise still applies; use same-run ratios as directional PR feedback, not release guarantees.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@rust/adapters/antigravity/README.md`:
- Around line 19-20: Update the README discovery examples to use recursive
conversations/**/*.db patterns, and document that the configured data directory
may contain comma-separated roots for the loader to search. Audit the relevant
guide pages and cross-links for the same discovery-path documentation and update
them consistently.
- Around line 1-15: Expand the Antigravity adapter README with a concise usage
section containing representative `ccusage antigravity ...` commands, and add
links to the Antigravity guide and related report documentation. Ensure the
corresponding guide content and VitePress navigation entries are added or
updated in the same change, using the repository’s existing documentation
structure and naming conventions.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 117c68e2-3c91-4e4f-b5b7-386957d98b51

📥 Commits

Reviewing files that changed from the base of the PR and between 28d54f9 and 7febf88.

⛔ Files ignored due to path filters (3)
  • rust/Cargo.lock is excluded by !**/*.lock
  • rust/crates/ccusage-cli-parser/src/snapshots/ccusage_cli_parser__tests__root_help.snap is excluded by !**/*.snap
  • rust/crates/ccusage-config/src/snapshots/ccusage_config__config_schema__tests__snapshots_schema_agent_specific_option_edges.snap is excluded by !**/*.snap
📒 Files selected for processing (33)
  • apps/ccusage/README.md
  • apps/ccusage/config-schema.json
  • docs/.vitepress/config.ts
  • docs/guide/all-reports.md
  • docs/guide/antigravity/index.md
  • docs/guide/environment-variables.md
  • docs/guide/getting-started.md
  • docs/guide/index.md
  • docs/guide/source-support-qa.md
  • nix/cargo-artifacts.nix
  • rust/Cargo.toml
  • rust/adapters/antigravity/Cargo.toml
  • rust/adapters/antigravity/README.md
  • rust/adapters/antigravity/src/lib.rs
  • rust/adapters/antigravity/src/loader.rs
  • rust/adapters/antigravity/src/parser.rs
  • rust/adapters/antigravity/src/paths.rs
  • rust/adapters/antigravity/src/proto.rs
  • rust/adapters/antigravity/src/report.rs
  • rust/crates/ccusage-adapter-all/Cargo.toml
  • rust/crates/ccusage-adapter-all/src/lib.rs
  • rust/crates/ccusage-adapter-all/src/loader.rs
  • rust/crates/ccusage-adapter-all/src/report.rs
  • rust/crates/ccusage-cli-parser/src/cli-commands.json
  • rust/crates/ccusage-cli-parser/src/parser.rs
  • rust/crates/ccusage-cli-parser/src/tests.rs
  • rust/crates/ccusage-cli/src/types.rs
  • rust/crates/ccusage-config/src/config_schema.rs
  • rust/crates/ccusage-core/src/lib.rs
  • rust/crates/ccusage/Cargo.toml
  • rust/crates/ccusage/src/adapter/mod.rs
  • rust/crates/ccusage/src/cli/last_window.rs
  • rust/crates/ccusage/src/main.rs
🚧 Files skipped from review as they are similar to previous changes (29)
  • rust/crates/ccusage/src/adapter/mod.rs
  • rust/adapters/antigravity/Cargo.toml
  • rust/crates/ccusage-adapter-all/src/lib.rs
  • docs/.vitepress/config.ts
  • rust/crates/ccusage-cli/src/types.rs
  • rust/Cargo.toml
  • rust/crates/ccusage/src/cli/last_window.rs
  • docs/guide/getting-started.md
  • rust/crates/ccusage-cli-parser/src/tests.rs
  • rust/adapters/antigravity/src/lib.rs
  • docs/guide/all-reports.md
  • rust/crates/ccusage-cli-parser/src/cli-commands.json
  • rust/crates/ccusage/Cargo.toml
  • nix/cargo-artifacts.nix
  • apps/ccusage/README.md
  • rust/adapters/antigravity/src/parser.rs
  • rust/crates/ccusage-config/src/config_schema.rs
  • docs/guide/index.md
  • rust/crates/ccusage-adapter-all/Cargo.toml
  • rust/adapters/antigravity/src/report.rs
  • docs/guide/environment-variables.md
  • rust/crates/ccusage-adapter-all/src/report.rs
  • rust/crates/ccusage/src/main.rs
  • rust/crates/ccusage-cli-parser/src/parser.rs
  • rust/crates/ccusage-adapter-all/src/loader.rs
  • rust/adapters/antigravity/src/loader.rs
  • apps/ccusage/config-schema.json
  • docs/guide/source-support-qa.md
  • rust/adapters/antigravity/src/proto.rs

Comment thread rust/adapters/antigravity/README.md
Comment thread rust/adapters/antigravity/README.md Outdated
@pullfrog

pullfrog Bot commented Jul 29, 2026 •

Copy link
Copy Markdown
Contributor

CI Fix Investigation

Diagnosis

The check suite (#82630698630) logs have expired and cannot be retrieved. I checked out the PR branch and ran all local CI checks:

  • nix flake check — passed (all checks: treefmt, clippy, oxlint, gitleaks, schema-gen, hawk, publint)
  • nix build .#ccusage-tests — passed (all Rust workspace tests)
  • cargo fmt --check — clean

All 15 flake checks pass locally. The CI failure appears to have been transient (check suite from an older commit with expired workflow runs).

Attempted Fix

Created an empty retrigger commit (af83e65) to trigger a new CI run.

Push Result

Push failed with permission error:

remote: Permission to ccusage/ccusage.git denied to github-actions[bot].
fatal: unable to access 'https://github.com/ccusage/ccusage.git/': The requested URL returned error: 403

The branch anti cannot be pushed to by the current token. The PR author (ryoppippi) will need to push a new commit (even a trivial one) to retrigger CI on this branch.

Task list (1/6 completed)
  • Fetch check suite logs to understand the failure
  • Verify the failure was introduced by this PR
  • Diagnose root cause of the CI failure
  • Implement fix and verify locally
  • Commit and push fix to PR branch
  • Report final progress

Pullfrog  | ⚠️ this action is pinned to a commit SHA, which freezes the cleanup step — switch to @v0 or keep the SHA fresh with Dependabot | View workflow run | via Pullfrog | Using DeepSeek Pro (free via Pullfrog for OSS) | 𝕏

Copilot AI review requested due to automatic review settings July 29, 2026 18:46

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@pullfrog pullfrog Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ No new issues found.

Reviewed changes — six follow-up commits on the Antigravity adapter: two behavioral fixes, a test environment hardening, and three documentation rounds that propagate Antigravity to every shared inventory and document recursive database discovery.

  • Discarded out-of-range protobuf timestamp nanos — proto.rs now drops nanos ≥ 1e9 instead of normalizing them, which prevents a corrupt blob from shifting an invocation across a day boundary. A new test exercises the guard.
  • Reported session activity and project path — session reports now use SessionAccumulator, so first_activity, last_activity, and project_path appear in the session table and JSON output.
  • Pinned HOME in the blank-override test — ignores_a_blank_data_dir_override now guards HOME alongside the blank ANTIGRAVITY_DATA_DIR, so the test no longer depends on the process environment's real home directory.
  • Documented recursive database discovery — the crate README and user guide now describe **/*.db patterns, comma-separated ANTIGRAVITY_DATA_DIR, and recursive sub-conversation database collection matching what collect_files_with_extension actually does.
  • Propagated Antigravity to shared documentation inventories — added to source-support-qa (removed from unsupported, added to now-supported), all-reports, getting-started, environment-variables, and the root guide.

Pullfrog  | ⚠️ this action is pinned to a commit SHA, which freezes the cleanup step — switch to @v0 or keep the SHA fresh with Dependabot | View workflow run | Using DeepSeek Pro (free via Pullfrog for OSS) | 𝕏

@github-actions

Copy link
Copy Markdown
Contributor

ccusage performance comparison

PR SHA: 087b936eec13
Base SHA: 28d54f968f14

This compares the Rust PR release binary against the configured base package on the same CI runner.

Package runtime diagnostics

Compares the PR package wrapper, the installed native optional dependency binary, and the workspace release binary on the same large fixture. This identifies whether slow package results come from JavaScript wrapper overhead, the published native binary build, or the Rust core itself.

Fixtures: Claude /home/runner/_work/_temp/ccusage-large-fixture (1.01 GiB, 2597 files), Codex /home/runner/_work/_temp/ccusage-large-codex-fixture (1.01 GiB, 2597 files)
All rows run --offline --json, measured by hyperfine with 0 warmups and 1 runs. This isolates wrapper overhead from the installed native optional dependency and the workspace release binary built on the runner.

Command Runtime Input Median Throughput Samples
claude --offline --json Package wrapper 1.01 GiB 343.0ms 2.93 GiB/s 1
claude --offline --json Installed native binary 1.01 GiB 312.6ms 3.22 GiB/s 1
codex --offline --json Package wrapper 1.01 GiB 119.6ms 8.42 GiB/s 1
codex --offline --json Installed native binary 1.01 GiB 94.2ms 10.69 GiB/s 1

Committed fixture performance

Committed small fixtures for stable PR-to-PR feedback and explicit Claude/Codex command coverage.

Fixtures: Claude apps/ccusage/test/fixtures/claude (0.00 MiB, 2 files), Codex apps/ccusage/test/fixtures/codex (0.00 MiB, 1 files)
Base runs the published ccusage package from pkg.pr.new, installed before measurement; PR runs the published native ccusage binary from pkg.pr.new, installed before measurement. Both run --offline --json, measured by hyperfine with 2 warmups and 7 runs.
Peak RSS is measured separately with /usr/bin/time using 1 runs. Lower RSS ratios are better.

Command Input Base median PR median PR vs base Base peak RSS PR peak RSS PR/base RSS Base throughput PR throughput
claude daily --offline --json 0.00 MiB 29.6ms 5.5ms 5.40x 55.25 MiB 12.46 MiB 0.23x 0.05 MiB/s 0.28 MiB/s
claude session --offline --json 0.00 MiB 27.9ms 2.8ms 9.82x 55.00 MiB 12.45 MiB 0.23x 0.06 MiB/s 0.54 MiB/s
codex daily --offline --json 0.00 MiB 24.5ms 2.3ms 10.50x 55.00 MiB 10.70 MiB 0.19x 0.03 MiB/s 0.37 MiB/s
codex session --offline --json 0.00 MiB 22.0ms 2.4ms 9.37x 55.00 MiB 10.70 MiB 0.19x 0.04 MiB/s 0.36 MiB/s

Large real-world-shaped fixture performance

Generated fixtures shaped from aggregate local log statistics: thousands of JSONL files, many small sessions, and a long tail of larger sessions. No real prompts, paths, or outputs are stored in the fixtures.

Fixtures: Claude /home/runner/_work/_temp/ccusage-large-fixture (1.01 GiB, 2597 files), Codex /home/runner/_work/_temp/ccusage-large-codex-fixture (1.01 GiB, 2597 files)
Base runs the published ccusage package from pkg.pr.new, installed before measurement; PR runs the published native ccusage binary from pkg.pr.new, installed before measurement. Both run --offline --json, measured by hyperfine with 0 warmups and 1 runs.
Peak RSS is measured separately with /usr/bin/time using 1 runs. Lower RSS ratios are better.

Command Input Base median PR median PR vs base Base peak RSS PR peak RSS PR/base RSS Base throughput PR throughput
claude --offline --json 1.01 GiB 371.1ms 310.3ms 1.20x 958.82 MiB 952.59 MiB 0.99x 2.71 GiB/s 3.24 GiB/s
codex --offline --json 1.01 GiB 119.5ms 111.5ms 1.07x 408.64 MiB 412.91 MiB 1.01x 8.43 GiB/s 9.03 GiB/s

Artifact size

Artifact Base PR Delta Ratio
packed ccusage-*.tgz 18.78 KiB 19.09 KiB +0.32 KiB 0.98x
installed native package binary 4158.97 KiB 4190.28 KiB +31.31 KiB 0.99x

Lower medians and smaller artifacts are better. CI runner noise still applies; use same-run ratios as directional PR feedback, not release guarantees.

@github-actions

Copy link
Copy Markdown
Contributor

ccusage performance comparison

PR SHA: 087b936eec13
Base SHA: 28d54f968f14

This compares the PR package against the configured base package on the same CI runner.

Package runtime diagnostics

Compares the PR package wrapper, the installed native optional dependency binary, and the workspace release binary on the same large fixture. This identifies whether slow package results come from JavaScript wrapper overhead, the published native binary build, or the Rust core itself.

Fixtures: Claude /home/runner/_work/_temp/ccusage-large-fixture (1.01 GiB, 2597 files), Codex /home/runner/_work/_temp/ccusage-large-codex-fixture (1.01 GiB, 2597 files)
All rows run --offline --json, measured by hyperfine with 0 warmups and 1 runs. This isolates wrapper overhead from the installed native optional dependency and the workspace release binary built on the runner.

Command Runtime Input Median Throughput Samples
claude --offline --json Package wrapper 1.01 GiB 339.5ms 2.97 GiB/s 1
claude --offline --json Installed native binary 1.01 GiB 306.2ms 3.29 GiB/s 1
codex --offline --json Package wrapper 1.01 GiB 119.1ms 8.45 GiB/s 1
codex --offline --json Installed native binary 1.01 GiB 90.7ms 11.10 GiB/s 1

Committed fixture performance

Committed small fixtures for stable PR-to-PR feedback and explicit Claude/Codex command coverage.

Fixtures: Claude apps/ccusage/test/fixtures/claude (0.00 MiB, 2 files), Codex apps/ccusage/test/fixtures/codex (0.00 MiB, 1 files)
Base runs the published ccusage package from pkg.pr.new, installed before measurement; PR runs the published ccusage package from pkg.pr.new, installed before measurement. Both run --offline --json, measured by hyperfine with 2 warmups and 7 runs.
Peak RSS is measured separately with /usr/bin/time using 1 runs. Lower RSS ratios are better.

Command Input Base median PR median PR vs base Base peak RSS PR peak RSS PR/base RSS Base throughput PR throughput
claude daily --offline --json 0.00 MiB 28.7ms 27.2ms 1.06x 55.00 MiB 55.00 MiB 1.00x 0.05 MiB/s 0.06 MiB/s
claude session --offline --json 0.00 MiB 23.2ms 24.9ms 0.93x 55.00 MiB 55.25 MiB 1.00x 0.07 MiB/s 0.06 MiB/s
codex daily --offline --json 0.00 MiB 27.2ms 22.9ms 1.19x 55.00 MiB 55.00 MiB 1.00x 0.03 MiB/s 0.04 MiB/s
codex session --offline --json 0.00 MiB 23.8ms 23.2ms 1.03x 55.00 MiB 55.00 MiB 1.00x 0.04 MiB/s 0.04 MiB/s

Large real-world-shaped fixture performance

Generated fixtures shaped from aggregate local log statistics: thousands of JSONL files, many small sessions, and a long tail of larger sessions. No real prompts, paths, or outputs are stored in the fixtures.

Fixtures: Claude /home/runner/_work/_temp/ccusage-large-fixture (1.01 GiB, 2597 files), Codex /home/runner/_work/_temp/ccusage-large-codex-fixture (1.01 GiB, 2597 files)
Base runs the published ccusage package from pkg.pr.new, installed before measurement; PR runs the published ccusage package from pkg.pr.new, installed before measurement. Both run --offline --json, measured by hyperfine with 0 warmups and 1 runs.
Peak RSS is measured separately with /usr/bin/time using 1 runs. Lower RSS ratios are better.

Command Input Base median PR median PR vs base Base peak RSS PR peak RSS PR/base RSS Base throughput PR throughput
claude --offline --json 1.01 GiB 376.0ms 332.0ms 1.13x 952.83 MiB 958.59 MiB 1.01x 2.68 GiB/s 3.03 GiB/s
codex --offline --json 1.01 GiB 119.7ms 117.0ms 1.02x 418.65 MiB 420.91 MiB 1.01x 8.41 GiB/s 8.61 GiB/s

Artifact size

Artifact Base PR Delta Ratio
packed ccusage-*.tgz 18.78 KiB 19.09 KiB +0.32 KiB 0.98x
installed native package binary 4158.97 KiB 4190.28 KiB +31.31 KiB 0.99x

Lower medians and smaller artifacts are better. CI runner noise still applies; use same-run ratios as directional PR feedback, not release guarantees.

The config namespaces list stopped at `gemini`, so the page did not mention
the namespace the schema already accepts.
Copilot AI review requested due to automatic review settings July 29, 2026 20:53

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@github-actions

Copy link
Copy Markdown
Contributor

ccusage performance comparison

PR SHA: 78ffeffdde4a
Base SHA: 28d54f968f14

This compares the PR package against the configured base package on the same CI runner.

Package runtime diagnostics

Compares the PR package wrapper, the installed native optional dependency binary, and the workspace release binary on the same large fixture. This identifies whether slow package results come from JavaScript wrapper overhead, the published native binary build, or the Rust core itself.

Fixtures: Claude /home/runner/_work/_temp/ccusage-large-fixture (1.01 GiB, 2597 files), Codex /home/runner/_work/_temp/ccusage-large-codex-fixture (1.01 GiB, 2597 files)
All rows run --offline --json, measured by hyperfine with 0 warmups and 1 runs. This isolates wrapper overhead from the installed native optional dependency and the workspace release binary built on the runner.

Command Runtime Input Median Throughput Samples
claude --offline --json Package wrapper 1.01 GiB 343.8ms 2.93 GiB/s 1
claude --offline --json Installed native binary 1.01 GiB 316.1ms 3.18 GiB/s 1
codex --offline --json Package wrapper 1.01 GiB 133.4ms 7.55 GiB/s 1
codex --offline --json Installed native binary 1.01 GiB 89.5ms 11.24 GiB/s 1

Committed fixture performance

Committed small fixtures for stable PR-to-PR feedback and explicit Claude/Codex command coverage.

Fixtures: Claude apps/ccusage/test/fixtures/claude (0.00 MiB, 2 files), Codex apps/ccusage/test/fixtures/codex (0.00 MiB, 1 files)
Base runs the published ccusage package from pkg.pr.new, installed before measurement; PR runs the published ccusage package from pkg.pr.new, installed before measurement. Both run --offline --json, measured by hyperfine with 2 warmups and 7 runs.
Peak RSS is measured separately with /usr/bin/time using 1 runs. Lower RSS ratios are better.

Command Input Base median PR median PR vs base Base peak RSS PR peak RSS PR/base RSS Base throughput PR throughput
claude daily --offline --json 0.00 MiB 29.0ms 24.2ms 1.20x 55.00 MiB 55.00 MiB 1.00x 0.05 MiB/s 0.06 MiB/s
claude session --offline --json 0.00 MiB 24.3ms 23.2ms 1.05x 55.00 MiB 55.25 MiB 1.00x 0.06 MiB/s 0.07 MiB/s
codex daily --offline --json 0.00 MiB 24.0ms 24.7ms 0.97x 55.00 MiB 55.25 MiB 1.00x 0.04 MiB/s 0.03 MiB/s
codex session --offline --json 0.00 MiB 23.3ms 22.0ms 1.06x 55.25 MiB 55.00 MiB 1.00x 0.04 MiB/s 0.04 MiB/s

Large real-world-shaped fixture performance

Generated fixtures shaped from aggregate local log statistics: thousands of JSONL files, many small sessions, and a long tail of larger sessions. No real prompts, paths, or outputs are stored in the fixtures.

Fixtures: Claude /home/runner/_work/_temp/ccusage-large-fixture (1.01 GiB, 2597 files), Codex /home/runner/_work/_temp/ccusage-large-codex-fixture (1.01 GiB, 2597 files)
Base runs the published ccusage package from pkg.pr.new, installed before measurement; PR runs the published ccusage package from pkg.pr.new, installed before measurement. Both run --offline --json, measured by hyperfine with 0 warmups and 1 runs.
Peak RSS is measured separately with /usr/bin/time using 1 runs. Lower RSS ratios are better.

Command Input Base median PR median PR vs base Base peak RSS PR peak RSS PR/base RSS Base throughput PR throughput
claude --offline --json 1.01 GiB 369.2ms 329.8ms 1.12x 934.82 MiB 962.59 MiB 1.03x 2.73 GiB/s 3.05 GiB/s
codex --offline --json 1.01 GiB 118.5ms 118.2ms 1.00x 422.65 MiB 410.91 MiB 0.97x 8.49 GiB/s 8.51 GiB/s

Artifact size

Artifact Base PR Delta Ratio
packed ccusage-*.tgz 18.78 KiB 19.09 KiB +0.32 KiB 0.98x
installed native package binary 4158.97 KiB 4190.28 KiB +31.31 KiB 0.99x

Lower medians and smaller artifacts are better. CI runner noise still applies; use same-run ratios as directional PR feedback, not release guarantees.

@github-actions

Copy link
Copy Markdown
Contributor

ccusage performance comparison

PR SHA: 78ffeffdde4a
Base SHA: 28d54f968f14

This compares the Rust PR release binary against the configured base package on the same CI runner.

Package runtime diagnostics

Compares the PR package wrapper, the installed native optional dependency binary, and the workspace release binary on the same large fixture. This identifies whether slow package results come from JavaScript wrapper overhead, the published native binary build, or the Rust core itself.

Fixtures: Claude /home/runner/_work/_temp/ccusage-large-fixture (1.01 GiB, 2597 files), Codex /home/runner/_work/_temp/ccusage-large-codex-fixture (1.01 GiB, 2597 files)
All rows run --offline --json, measured by hyperfine with 0 warmups and 1 runs. This isolates wrapper overhead from the installed native optional dependency and the workspace release binary built on the runner.

Command Runtime Input Median Throughput Samples
claude --offline --json Package wrapper 1.01 GiB 339.0ms 2.97 GiB/s 1
claude --offline --json Installed native binary 1.01 GiB 300.8ms 3.35 GiB/s 1
codex --offline --json Package wrapper 1.01 GiB 115.7ms 8.70 GiB/s 1
codex --offline --json Installed native binary 1.01 GiB 90.1ms 11.17 GiB/s 1

Committed fixture performance

Committed small fixtures for stable PR-to-PR feedback and explicit Claude/Codex command coverage.

Fixtures: Claude apps/ccusage/test/fixtures/claude (0.00 MiB, 2 files), Codex apps/ccusage/test/fixtures/codex (0.00 MiB, 1 files)
Base runs the published ccusage package from pkg.pr.new, installed before measurement; PR runs the published native ccusage binary from pkg.pr.new, installed before measurement. Both run --offline --json, measured by hyperfine with 2 warmups and 7 runs.
Peak RSS is measured separately with /usr/bin/time using 1 runs. Lower RSS ratios are better.

Command Input Base median PR median PR vs base Base peak RSS PR peak RSS PR/base RSS Base throughput PR throughput
claude daily --offline --json 0.00 MiB 29.2ms 4.5ms 6.48x 55.00 MiB 12.46 MiB 0.23x 0.05 MiB/s 0.34 MiB/s
claude session --offline --json 0.00 MiB 26.0ms 2.8ms 9.15x 55.00 MiB 12.45 MiB 0.23x 0.06 MiB/s 0.54 MiB/s
codex daily --offline --json 0.00 MiB 24.1ms 2.3ms 10.30x 55.00 MiB 10.71 MiB 0.19x 0.04 MiB/s 0.37 MiB/s
codex session --offline --json 0.00 MiB 23.8ms 2.3ms 10.44x 55.00 MiB 10.70 MiB 0.19x 0.04 MiB/s 0.38 MiB/s

Large real-world-shaped fixture performance

Generated fixtures shaped from aggregate local log statistics: thousands of JSONL files, many small sessions, and a long tail of larger sessions. No real prompts, paths, or outputs are stored in the fixtures.

Fixtures: Claude /home/runner/_work/_temp/ccusage-large-fixture (1.01 GiB, 2597 files), Codex /home/runner/_work/_temp/ccusage-large-codex-fixture (1.01 GiB, 2597 files)
Base runs the published ccusage package from pkg.pr.new, installed before measurement; PR runs the published native ccusage binary from pkg.pr.new, installed before measurement. Both run --offline --json, measured by hyperfine with 0 warmups and 1 runs.
Peak RSS is measured separately with /usr/bin/time using 1 runs. Lower RSS ratios are better.

Command Input Base median PR median PR vs base Base peak RSS PR peak RSS PR/base RSS Base throughput PR throughput
claude --offline --json 1.01 GiB 351.0ms 316.9ms 1.11x 956.58 MiB 940.59 MiB 0.98x 2.87 GiB/s 3.18 GiB/s
codex --offline --json 1.01 GiB 119.3ms 94.7ms 1.26x 424.65 MiB 410.92 MiB 0.97x 8.44 GiB/s 10.63 GiB/s

Artifact size

Artifact Base PR Delta Ratio
packed ccusage-*.tgz 18.78 KiB 19.09 KiB +0.32 KiB 0.98x
installed native package binary 4158.97 KiB 4190.28 KiB +31.31 KiB 0.99x

Lower medians and smaller artifacts are better. CI runner noise still applies; use same-run ratios as directional PR feedback, not release guarantees.

The crate README described internals only, so anyone landing there had no
route to the commands or to the guide that documents what the numbers mean.

Found by CodeRabbit on #1544.
Copilot AI review requested due to automatic review settings July 29, 2026 21:06

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@ryoppippi

Copy link
Copy Markdown
Member Author

Addressed the README finding: the crate README now opens with the
ccusage antigravity daily|monthly|session commands and links to the
Antigravity guide, all-reports, and cost-modes pages.

The other parts of that documentation contract were already covered elsewhere in
this PR — the package README source table and example list, the
docs/guide/antigravity/ guide, and the VitePress sidebar entry.

@github-actions

Copy link
Copy Markdown
Contributor

ccusage performance comparison

PR SHA: baa47157e530
Base SHA: 28d54f968f14

This compares the Rust PR release binary against the configured base package on the same CI runner.

Package runtime diagnostics

Compares the PR package wrapper, the installed native optional dependency binary, and the workspace release binary on the same large fixture. This identifies whether slow package results come from JavaScript wrapper overhead, the published native binary build, or the Rust core itself.

Fixtures: Claude /home/runner/_work/_temp/ccusage-large-fixture (1.01 GiB, 2597 files), Codex /home/runner/_work/_temp/ccusage-large-codex-fixture (1.01 GiB, 2597 files)
All rows run --offline --json, measured by hyperfine with 0 warmups and 1 runs. This isolates wrapper overhead from the installed native optional dependency and the workspace release binary built on the runner.

Command Runtime Input Median Throughput Samples
claude --offline --json Package wrapper 1.01 GiB 347.6ms 2.90 GiB/s 1
claude --offline --json Installed native binary 1.01 GiB 328.1ms 3.07 GiB/s 1
codex --offline --json Package wrapper 1.01 GiB 118.9ms 8.47 GiB/s 1
codex --offline --json Installed native binary 1.01 GiB 90.2ms 11.16 GiB/s 1

Committed fixture performance

Committed small fixtures for stable PR-to-PR feedback and explicit Claude/Codex command coverage.

Fixtures: Claude apps/ccusage/test/fixtures/claude (0.00 MiB, 2 files), Codex apps/ccusage/test/fixtures/codex (0.00 MiB, 1 files)
Base runs the published ccusage package from pkg.pr.new, installed before measurement; PR runs the published native ccusage binary from pkg.pr.new, installed before measurement. Both run --offline --json, measured by hyperfine with 2 warmups and 7 runs.
Peak RSS is measured separately with /usr/bin/time using 1 runs. Lower RSS ratios are better.

Command Input Base median PR median PR vs base Base peak RSS PR peak RSS PR/base RSS Base throughput PR throughput
claude daily --offline --json 0.00 MiB 27.2ms 5.4ms 5.02x 55.00 MiB 12.45 MiB 0.23x 0.06 MiB/s 0.28 MiB/s
claude session --offline --json 0.00 MiB 26.8ms 2.7ms 9.74x 55.00 MiB 12.46 MiB 0.23x 0.06 MiB/s 0.56 MiB/s
codex daily --offline --json 0.00 MiB 25.9ms 2.3ms 11.25x 55.00 MiB 10.70 MiB 0.19x 0.03 MiB/s 0.37 MiB/s
codex session --offline --json 0.00 MiB 22.4ms 2.4ms 9.46x 55.00 MiB 10.70 MiB 0.19x 0.04 MiB/s 0.36 MiB/s

Large real-world-shaped fixture performance

Generated fixtures shaped from aggregate local log statistics: thousands of JSONL files, many small sessions, and a long tail of larger sessions. No real prompts, paths, or outputs are stored in the fixtures.

Fixtures: Claude /home/runner/_work/_temp/ccusage-large-fixture (1.01 GiB, 2597 files), Codex /home/runner/_work/_temp/ccusage-large-codex-fixture (1.01 GiB, 2597 files)
Base runs the published ccusage package from pkg.pr.new, installed before measurement; PR runs the published native ccusage binary from pkg.pr.new, installed before measurement. Both run --offline --json, measured by hyperfine with 0 warmups and 1 runs.
Peak RSS is measured separately with /usr/bin/time using 1 runs. Lower RSS ratios are better.

Command Input Base median PR median PR vs base Base peak RSS PR peak RSS PR/base RSS Base throughput PR throughput
claude --offline --json 1.01 GiB 358.6ms 319.7ms 1.12x 948.58 MiB 938.59 MiB 0.99x 2.81 GiB/s 3.15 GiB/s
codex --offline --json 1.01 GiB 126.1ms 96.5ms 1.31x 418.65 MiB 408.91 MiB 0.98x 7.98 GiB/s 10.43 GiB/s

Artifact size

Artifact Base PR Delta Ratio
packed ccusage-*.tgz 18.78 KiB 19.09 KiB +0.32 KiB 0.98x
installed native package binary 4158.97 KiB 4190.28 KiB +31.31 KiB 0.99x

Lower medians and smaller artifacts are better. CI runner noise still applies; use same-run ratios as directional PR feedback, not release guarantees.

@github-actions

Copy link
Copy Markdown
Contributor

ccusage performance comparison

PR SHA: baa47157e530
Base SHA: 28d54f968f14

This compares the PR package against the configured base package on the same CI runner.

Package runtime diagnostics

Compares the PR package wrapper, the installed native optional dependency binary, and the workspace release binary on the same large fixture. This identifies whether slow package results come from JavaScript wrapper overhead, the published native binary build, or the Rust core itself.

Fixtures: Claude /home/runner/_work/_temp/ccusage-large-fixture (1.01 GiB, 2597 files), Codex /home/runner/_work/_temp/ccusage-large-codex-fixture (1.01 GiB, 2597 files)
All rows run --offline --json, measured by hyperfine with 0 warmups and 1 runs. This isolates wrapper overhead from the installed native optional dependency and the workspace release binary built on the runner.

Command Runtime Input Median Throughput Samples
claude --offline --json Package wrapper 1.01 GiB 355.6ms 2.83 GiB/s 1
claude --offline --json Installed native binary 1.01 GiB 318.5ms 3.16 GiB/s 1
codex --offline --json Package wrapper 1.01 GiB 119.9ms 8.40 GiB/s 1
codex --offline --json Installed native binary 1.01 GiB 89.8ms 11.21 GiB/s 1

Committed fixture performance

Committed small fixtures for stable PR-to-PR feedback and explicit Claude/Codex command coverage.

Fixtures: Claude apps/ccusage/test/fixtures/claude (0.00 MiB, 2 files), Codex apps/ccusage/test/fixtures/codex (0.00 MiB, 1 files)
Base runs the published ccusage package from pkg.pr.new, installed before measurement; PR runs the published ccusage package from pkg.pr.new, installed before measurement. Both run --offline --json, measured by hyperfine with 2 warmups and 7 runs.
Peak RSS is measured separately with /usr/bin/time using 1 runs. Lower RSS ratios are better.

Command Input Base median PR median PR vs base Base peak RSS PR peak RSS PR/base RSS Base throughput PR throughput
claude daily --offline --json 0.00 MiB 27.3ms 25.5ms 1.07x 55.25 MiB 55.00 MiB 1.00x 0.06 MiB/s 0.06 MiB/s
claude session --offline --json 0.00 MiB 26.2ms 23.4ms 1.12x 55.00 MiB 55.00 MiB 1.00x 0.06 MiB/s 0.07 MiB/s
codex daily --offline --json 0.00 MiB 23.9ms 25.8ms 0.93x 54.75 MiB 55.00 MiB 1.00x 0.04 MiB/s 0.03 MiB/s
codex session --offline --json 0.00 MiB 23.4ms 23.2ms 1.01x 55.25 MiB 55.00 MiB 1.00x 0.04 MiB/s 0.04 MiB/s

Large real-world-shaped fixture performance

Generated fixtures shaped from aggregate local log statistics: thousands of JSONL files, many small sessions, and a long tail of larger sessions. No real prompts, paths, or outputs are stored in the fixtures.

Fixtures: Claude /home/runner/_work/_temp/ccusage-large-fixture (1.01 GiB, 2597 files), Codex /home/runner/_work/_temp/ccusage-large-codex-fixture (1.01 GiB, 2597 files)
Base runs the published ccusage package from pkg.pr.new, installed before measurement; PR runs the published ccusage package from pkg.pr.new, installed before measurement. Both run --offline --json, measured by hyperfine with 0 warmups and 1 runs.
Peak RSS is measured separately with /usr/bin/time using 1 runs. Lower RSS ratios are better.

Command Input Base median PR median PR vs base Base peak RSS PR peak RSS PR/base RSS Base throughput PR throughput
claude --offline --json 1.01 GiB 375.5ms 341.2ms 1.10x 962.82 MiB 948.59 MiB 0.99x 2.68 GiB/s 2.95 GiB/s
codex --offline --json 1.01 GiB 144.8ms 127.1ms 1.14x 404.65 MiB 416.91 MiB 1.03x 6.95 GiB/s 7.92 GiB/s

Artifact size

Artifact Base PR Delta Ratio
packed ccusage-*.tgz 18.78 KiB 19.09 KiB +0.32 KiB 0.98x
installed native package binary 4158.97 KiB 4190.28 KiB +31.31 KiB 0.99x

Lower medians and smaller artifacts are better. CI runner noise still applies; use same-run ratios as directional PR feedback, not release guarantees.

@ryoppippi
ryoppippi merged commit 50614f1 into main Jul 29, 2026
36 checks passed
@ryoppippi
ryoppippi deleted the anti branch July 29, 2026 21:18
ryoppippi added a commit that referenced this pull request Aug 3, 2026
…#1569)

revert: "feat(antigravity): add Antigravity CLI usage adapter (#1544)"

This reverts commit 50614f1.

Temporary, so that v20.0.20 does not ship a half-finished adapter. The
intent is to reapply Antigravity support, not to drop it — see #1488.

#1544 landed while the contribution proposal in #1488 was still open, and
it covers less ground than @sambitcreate's #1487:

- It reads only `~/.gemini/antigravity-cli`, missing `antigravity`,
  `antigravity-ide` and `antigravity-backup`, so IDE users get nothing.
- Opaque model ids stay as `antigravity-model-<id>` with no alias table,
  so they cannot be priced and cost is silently understated.
- The offline pricing snapshot has no Gemini rates, so `--offline`
  reports no cost for Gemini models.
- It was validated against three chat turns in one CLI conversation.
- Retries, subagents and model comparison ship unexercised.

The first three are already solved in #1487, which is the better base to
build on. Reverting now keeps the release clean while that is sorted out,
and costs nothing: the adapter has not been released, so no user has it.

Nothing about the reverse engineering is lost. The recovered field numbers
and the reasoning behind the dedupe are written up in #1488.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants