Repository navigation
[Goal by Claude Opus 5.5] Add Agent Tank Usage History Charts to ProPR - #3218
Conversation
…nt new update - different/unified JSO
|
❌ Failed to resolve merge conflicts from System-triggered merge conflict resolution |
11 similar comments
|
❌ Failed to resolve merge conflicts from System-triggered merge conflict resolution |
|
❌ Failed to resolve merge conflicts from System-triggered merge conflict resolution |
|
❌ Failed to resolve merge conflicts from System-triggered merge conflict resolution |
|
❌ Failed to resolve merge conflicts from System-triggered merge conflict resolution |
|
❌ Failed to resolve merge conflicts from System-triggered merge conflict resolution |
|
❌ Failed to resolve merge conflicts from System-triggered merge conflict resolution |
|
❌ Failed to resolve merge conflicts from System-triggered merge conflict resolution |
|
❌ Failed to resolve merge conflicts from System-triggered merge conflict resolution |
|
❌ Failed to resolve merge conflicts from System-triggered merge conflict resolution |
|
❌ Failed to resolve merge conflicts from System-triggered merge conflict resolution |
|
❌ Failed to resolve merge conflicts from System-triggered merge conflict resolution |
|
🔀 Resolved merge conflicts from Conflicting Files
Resolution SummaryI resolved the one merge conflict, in What the conflict was: both branches changed the route-coverage counts in the spec's How I resolved it: this spec is generated from the route registry, so I reran Why: editing a generated file by hand would likely fail the Checks:
🤖 Resolution Details
System-triggered merge conflict resolution |
…-agent-tank-has-received-a-20261017-2303-az4 Automatically resolved merge conflicts after merging target branch into PR branch. Resolved conflicts in: - docs/static/openapi/propr-api.yaml PR: #3218 Model: Claude Opus 5.5
|
/merge |
|
🔀 Auto-merged No conflicts were found — the merge was verified by an AI agent. 🤖 Verification Details
System-triggered merge conflict resolution |
|
/review |
|
✅ AI Code Review Complete requested by @integry Posted 1 review: |
🔍 AI Code Review — codex:gpt-6-astraOverall EvaluationThe PR adds compatible status parsing, persistent usage history, an Analytics chart, and sidebar history overlays. It needs changes before merge: some metrics are permanently inaccessible, downsampling makes summary statistics inaccurate, and failed writes can suppress later retries. ✅ Backward compatibility — Both canonical provider arrays and legacy status maps pass through shared parsing used by bundled and external reads. ✅ Scoped history access — The new endpoint reuses the existing usage-access guard and validates timestamp ordering. ✅ Interaction coverage — Added tests cover hover intent, touch interaction, cancellation, metric filtering, and history persistence. Current head checks report 28 passed and no failures. This assessment is based on static inspection of the supplied code; no commands were run. Merge blockersEvery finding below was introduced by this PR and must be resolved before merging. F1: 🔴 Metrics beyond eight cannot be selected
F2: 🔴 Downsampling changes reported extrema
F3: 🔴 Failed writes suppress snapshot retries
SuggestionsThese are optional follow-ups and are not sent to S1: 🟢 Validate the actual daemon contractRun a smoke test against Agent Tank 0.10 and the rebuilt image, including S2: 🟢 Refresh open Analytics chartsConsider refreshing history on usage-update events or a bounded interval. ScoreThe implementation has substantial coverage and clean current checks, but three localized correctness issues remain in metric access, summary accuracy, and persistence recovery. Score: 6/10 🤖 Review Details
Copy and edit to choose records from this review: 🤖 Review by ProPR |
|
/ultrafix |
|
🔄 Ultrafix loop started (goal: 8/10, max cycles: 10) First action:
|
|
✅ Applied the requested follow-up changes in commit c3765b2
Summary of ChangesF1, F2 and F3 are fixed, each with regression tests. Every new backend and UI unit test failed against the old code and passes now. F1: metrics past eight can now be selected (
F2: lowest and highest readings now match the recorded data (
F3: a failed write no longer blocks retries (
Checks run:
Separate issue, not fixed: the cleanup of rows older than 15 days records its run time before the delete runs. If the delete fails, it won't retry for an hour. That's outside F3, which is about the duplicate check. I attached a preview of the Analytics pane with ten series, after one line was swapped for an extra metric. It uses mocked data. Visual previewAnalytics: more than eight metricsTen series with mocked data. Every metric has a chip. After Claude · Fable is hidden, Gemini 4 Flash takes its line and color. GPT-OSS stays selected with a hollow dot and is marked not plotted, and the note explains how to swap lines or use the table. Original unavailable: managed storage is unavailable or the upload has expired. 🤖 Implementation Details
Undo Changes • View Task Execution 💡 ProPR Slash Commands
🤖 Generated by ProPR |
…new backend and UI unit test failed against the old code and passes now. F1, F2 and F3 are fixed, each with regression tests. Every new backend and UI unit test failed against the old code and passes now. **F1: metrics past eight can now be selected** (`AgentUsageHistory.tsx`, `usageHistoryView.ts`) - Every series gets a chip. The eight-line limit now applies only to what the chart draws: the first eight selected series. The table lists every selected series. - A new helper, `planPlottedSeries`, picks which series are drawn and their colors. Drawn series keep their usual color, so nothing changes when there are eight or fewer. A series past the palette takes the color of a line you've hidden, so hiding one metric lets an extra one onto the chart without recoloring the rest. - A selected series that isn't drawn shows a hollow dot and a "not plotted" label. The message now reads "N selected metrics are not plotted… hide one to plot another, or see them all in the table". - Tests: a component test with 10 series (all chips present, swapping a line in, table shows all selected), a test for the color rule, and a new Playwright case. **F2: lowest and highest readings now match the recorded data** (`downsampleHistoryPoints`) - Thinning now keeps the lowest and highest reading in each time bucket, in time order, plus the first and last points. It stays within the point limit. - Every recorded extreme reaches the client, so the table's lowest and highest values are exact. Short spikes also stay visible on the chart. - Points with no percentage are never picked as an extreme. Points that all share one timestamp are handled too. - Test: your example (1,200 readings, a 100% spike at the second reading) now keeps 100%, plus an interior minimum and the same-timestamp case. **F3: a failed write no longer blocks retries** (`agentTankUsageHistory.ts`) - The duplicate check no longer updates its record of the last stored reading per metric while scanning. It saves those values only after the database insert succeeds. If the insert fails, nothing is saved, so the same cached snapshot is retried later. - Recording attempts now run one at a time. A later attempt waits for the one in progress, so it never deduplicates against a write that hasn't succeeded yet, and a failed attempt can't overwrite a newer successful one. - Tests: a database that rejects inserts, then recovers and stores the same snapshot; and two concurrent attempts where the first fails, the second succeeds, and the failed older snapshot isn't stored afterwards. **Checks run:** - History storage suite: 11/11 pass. - History endpoint suite: 14/14 pass (it needs `--experimental-test-module-mocks`). - Analytics and usage-history UI tests: 62/62 pass. - The Playwright spec: 5/5 pass in Chromium. - `tsc` passes for core and the UI, and eslint with zero warnings passes on the changed core, UI and e2e files. The root `test/` file isn't covered by any eslint config. **Separate issue, not fixed:** the cleanup of rows older than 15 days records its run time before the delete runs. If the delete fails, it won't retry for an hour. That's outside F3, which is about the duplicate check. I attached a preview of the Analytics pane with ten series, after one line was swapped for an extra metric. It uses mocked data. PR: #3218 Comment by: @integry (ID: 6254080496) Model: Claude Opus 5.5
|
✅ AI Code Review Complete requested by @propr-ultrafix Posted 1 review: |
🔍 AI Code Review — codex:gpt-6-astraOverall EvaluationThe PR adds compatibility parsing, persistent usage history, Analytics charts, and sidebar overlays. It needs changes before merge, primarily to preserve the demo-data access boundary. ✅ Backward compatibility — Both canonical provider envelopes and legacy status maps pass through a shared parser. ✅ Recoverable history writes — Recording is serialized, and failed inserts leave snapshots eligible for retry. ✅ Accessible numeric alternative — The Analytics table includes every selected metric, including those beyond the chart’s eight-line limit. This review uses static analysis of the supplied code; no commands were run. Current checks report 20 passed, six pending, and no failures. Merge blockersEvery finding below was introduced by this PR and must be resolved before merging. F4: 🔴 Demo access exposes real usage history
F5: 🔴 Disabling history permanently disables sidebar triggers
F6: 🔴 Analytics exposes raw model identifiers
SuggestionsThese are optional follow-ups and are not sent to S3: 🟢 Refresh open Analytics historyThe Analytics reader fetches only on mount or range changes, despite existing usage-update events. Subscribing to those events would keep an open chart current. This is an optional freshness improvement; the existing response still represents its captured time range. S4: 🟢 Validate the actual daemon contractAdd integration coverage against Agent Tank 0.10.0 and the rebuilt image. The supplied tests exercise mocked canonical responses and local storage, while daemon-history parsing and source selection lack equivalent end-to-end evidence. This would strengthen confidence beyond the mocked previews. ScoreThe implementation has useful compatibility and storage coverage, but the demo-data disclosure and two UI regressions require correction. Pending checks are not treated as failures. Score: 6/10 🤖 Review Details
Copy and edit to choose records from this review: 🤖 Review by ProPR |
|
✅ Applied the requested follow-up changes in commit 3455113
Summary of ChangesI fixed F4, F5 and F6. Each new unit test failed on the previous code and passes now. F4: demo access exposed real usage history
F5: disabling history switched sidebar triggers off for good
F6: Analytics showed raw model identifiers
Verification
Something else I ran into: the end-to-end spec's shared fixture signs in as a demo user. Its two sidebar-overlay tests only passed because of the F4 leak, so with the fix they failed. I changed that spec to sign in as a user with agent-management permission. I didn't attach previews. With the mocked data, none of these fixes changes anything you'd see on screen. 🤖 Implementation Details
💡 ProPR Slash Commands
🤖 Generated by ProPR |
…vious code and passes now. I fixed F4, F5 and F6. Each new unit test failed on the previous code and passes now. **F4: demo access exposed real usage history** - `GET /api/config/agent-tank/history` now requires the agent-management permission (`packages/api/routeRegistry.ts:121`). I didn't find any synthetic history to return, so refusing demo viewers was the safe choice. Demo viewers can still read the synthetic usage feed. - The UI side: in demo mode the sidebar metric rows no longer open a history overlay, so demo viewers don't get a 403 error inside it. The Analytics pane already hides itself when the request is refused. - Regressions: the route test now expects a 403 for demo viewers on the history endpoint, includes it in the member-denied and admin-allowed lists, and a UI test covers the demo sidebar. **F5: disabling history switched sidebar triggers off for good** - The "history is off" flag now: - turns off by itself after 60 seconds, the same as the cache. - clears as soon as the sidebar reads usage with Agent Tank enabled. - clears when any history response comes back enabled. - Clearing it also drops cached "off" answers, so the next hover or tap really asks the server again. - Rows now update straight away when the flag changes. Before, closed rows only noticed on their next render. - Regressions cover rows going inactive while history is off, coming back after re-enabling (with a fresh request), and the 60-second expiry for rows outside the sidebar. - One timing gap remains and I left it: if an older "enabled" usage read lands after history was reported off, the flag clears early. The only cost is one extra request when someone next hovers a row. **F6: Analytics showed raw model identifiers** - A new `readableSeriesLabel` in `usageHistoryModel.ts` puts model-derived labels through `getModelDisplayName`, the same helper the sidebar uses. `gemini-2.5-pro` now shows as "Gemini 2.5 Pro". - The same fix covers Codex per-model limits, which had the same raw-name problem. - Quota pool names such as "Claude and GPT · Weekly" and "Gemini 4 Argon Weekly" keep their wording. Series keys, colors and URL filters are unchanged. - The display name is now used for the chip text, accessible name, tooltip, chart legend and table. **Verification** - UI: typecheck and lint are clean, and 302 tests pass across the usage-history, Analytics, sidebar and Settings suites. - Backend: the route authorization, OpenAPI route coverage and history route suites pass (35 tests). - End-to-end: `agent-tank-usage-history.pw.ts` passes 5 of 5. **Something else I ran into:** the end-to-end spec's shared fixture signs in as a demo user. Its two sidebar-overlay tests only passed because of the F4 leak, so with the fix they failed. I changed that spec to sign in as a user with agent-management permission. I didn't attach previews. With the mocked data, none of these fixes changes anything you'd see on screen. PR: #3218 Comment by: @propr-ultrafix (ID: 0) Model: Claude Opus 5.5
|
✅ AI Code Review Complete requested by @propr-ultrafix Posted 1 review: |
🔍 AI Code Review — codex:gpt-6-astraOverall EvaluationThe PR adds compatible status parsing, persistent usage history, an Analytics chart, and sidebar overlays. It needs a localized change before merge: the chart cannot display all selected metrics as requested. ✅ Backward compatibility — Both canonical provider arrays and legacy status maps use shared parsing, with focused tests for both formats. ✅ Reliable recording retries — History writes serialize baseline updates and preserve failed snapshots for retry; tests cover concurrent and failed inserts. ✅ History authorization — The new endpoint requires agent-management permission and excludes the synthetic demo exception. Current checks show 27 passed, none failed, and one pending. This review used static analysis only; no commands were run. Merge blockersEvery finding below was introduced by this PR and must be resolved before merging. F7: 🔴 Allow plotting all selected metrics
SuggestionsThese are optional follow-ups and are not sent to S5: 🟢 Validate the real daemon contractThe reported validation uses mocked data, and the new tests do not exercise history retrieval against a real Agent Tank 0.10 daemon. A focused integration check covering history-enabled, history-disabled, and bundled execution would strengthen confidence in the upstream response assumptions. This is additional verification, not a demonstrated code defect. S6: 🟢 Refresh Analytics history while open
ScoreThe implementation has substantial focused coverage and sound compatibility and recording logic, but its deliberate plotting limit leaves an explicit objective unmet. Real-daemon validation also remains outstanding. Score: 6/10 🤖 Review Details
Copy and edit to choose records from this review: 🤖 Review by ProPR |
|
✅ Applied the requested follow-up changes in commit bd54fe9
Summary of ChangesI fixed F7: the Analytics usage chart now draws every selected metric. The eight-line limit is gone. What changed
Same limit elsewhere: nothing else had it. The cap was only in the Analytics chart; the sidebar overlay draws a single line and was never capped. Tests
I captured a preview of the desktop chart with all ten metrics drawn, using mocked data. The two extra lines are dashed, and their buttons and tooltip rows show the same dash. Visual previewAnalytics usage chart plotting all ten metricsWith ten metrics selected, every one is drawn. The ninth and tenth lines reuse a hue with a dashed stroke, and their chip swatches and tooltip rows show the same dash. Mocked history data. Original unavailable: managed storage is unavailable or the upload has expired. 🤖 Implementation Details
💡 ProPR Slash Commands
🤖 Generated by ProPR |
…ted metric. The eight-line limit is gone. I fixed F7: the Analytics usage chart now draws every selected metric. The eight-line limit is gone. **What changed** - **Line styles** (`usageHistoryModel.ts`): the first eight series stay solid in the existing colors. Each further group of eight reuses those colors with a dash pattern (long dash, then dotted, then dash-dot), so up to 32 series all look different. After 32 the styles repeat, but the labels on the metric buttons still tell them apart. As before, each metric's style comes from its position in the whole history, so hiding one never restyles the others. - **Rendering** (`usageHistoryView.ts`, `AgentUsageHistory.tsx`, `AgentUsageHistoryChart.tsx`): the chart now gets every selected series. I removed `planPlottedSeries`, the grey "not plotted" color, the "not plotted" labels on the metric buttons and the notice under the filters. The provider and metric toggles and "Show all" work as before. - **Matching samples:** a new `UsageSeriesSwatch.tsx` shows a short sample of each line, in its color and dash, on the metric buttons, in the chart tooltip and in the table. A dashed line's sample is dashed too, so they all match the chart. **Same limit elsewhere:** nothing else had it. The cap was only in the Analytics chart; the sidebar overlay draws a single line and was never capped. **Tests** - I replaced the unit tests that enforced the cap: - With ten metrics, all ten lines are drawn, each with a different color and dash pair. - The 9th metric's button shows the same dash as its line. - Hiding a metric removes only its line and leaves the others' styles unchanged. - The table still lists every selected metric. - The first 32 series all get different styles. - To make the chart draw lines in the unit tests, I gave it a fixed size in that test file. The new ten-line test would fail on the old code, which drew only eight; I didn't run it against the old code to confirm. - The Playwright test for more than eight metrics now expects all ten lines, with the last two dashed. - Results: - The Analytics, usage-history and Analytics page unit suites pass, 66 tests. - All 5 tests in the usage-history Playwright spec pass. - `tsc --noEmit` and ESLint with zero warnings allowed are clean on the changed folders. I captured a preview of the desktop chart with all ten metrics drawn, using mocked data. The two extra lines are dashed, and their buttons and tooltip rows show the same dash. PR: #3218 Comment by: @propr-ultrafix (ID: 0) Model: Claude Opus 5.5
|
✅ AI Code Review Complete requested by @propr-ultrafix Posted 1 review: |
🔍 AI Code Review — codex:gpt-6-astraOverall EvaluationThe PR adds compatible Agent Tank parsing, persistent usage history, and charts in Analytics and the sidebar. It needs a localized correction before merge: the Analytics history never refreshes while the page remains open. ✅ Backward compatibility — Both aggregate and individual status reads normalize the canonical and legacy response shapes. ✅ Resilient recording — History writes are serialized, and failed inserts leave samples eligible for retry. ✅ Authorization boundary — The history endpoint requires agent-management permission and excludes the synthetic-demo exception. The supplied checks show 27 passed, no failures, and one pending. This review used static analysis only; no commands were run. Merge blockersEvery finding below was introduced by this PR and must be resolved before merging. F8: 🔴 Refresh Analytics history after new samples
SuggestionsThese are optional follow-ups and are not sent to S7: 🟢 Verify the real daemon contractThe supplied tests cover parsing, storage, and mocked UI responses, but do not exercise S8: 🟢 Preserve history across source transitions
ScoreThe implementation has substantial coverage and sound compatibility and storage handling, but the Analytics refresh defect leaves a central new feature stale during normal use. The correction should be localized. Score: 6/10 🤖 Review Details
Copy and edit to choose records from this review: 🤖 Review by ProPR |
|
✅ Applied the requested follow-up changes in commit 3460119
Summary of ChangesF8 is fixed: an open Analytics page now picks up new usage history by itself, with no navigation and no range change. Before, it read history once when it opened and never again. The full UI unit suite passes (2,957 tests), as does the history Playwright spec (5 of 5), with lint and typecheck clean. How it works now (
Same problem in the sidebar overlay ( Tests
What can't be avoided: a sample recorded between the server's usage checks (for example, during a sidebar refresh) with no value change sends no event. It shows up at the next 5-minute re-read at the latest. I didn't add a preview: the change is the chart updating over time, which a screenshot can't show. Visual previewAnalytics usage all metricsOriginal unavailable: managed storage is unavailable or the upload has expired. Analytics usage desktopOriginal unavailable: managed storage is unavailable or the upload has expired. Analytics usage mobileOriginal unavailable: managed storage is unavailable or the upload has expired. Sidebar usage overlay desktopOriginal unavailable: managed storage is unavailable or the upload has expired. Sidebar usage overlay mobileOriginal unavailable: managed storage is unavailable or the upload has expired. 🤖 Implementation Details
💡 ProPR Slash Commands
🤖 Generated by ProPR |
…history by itself, with no navigation and no range change. Before, it read history once when it opened and never again. The full UI unit suite passes (2,957 tests), as does the history Playwright spec (5 of 5), with lint and typecheck clean. F8 is fixed: an open Analytics page now picks up new usage history by itself, with no navigation and no range change. Before, it read history once when it opened and never again. The full UI unit suite passes (2,957 tests), as does the history Playwright spec (5 of 5), with lint and typecheck clean. **How it works now** (`propr-ui/src/components/Analytics/AgentUsageHistory.tsx`) - The history read now goes through the app's existing `useLiveResource` mechanism, the same one the sidebar's usage section uses. - It reads again whenever the server sends a usage-changed event. The backend writes the new sample before it sends that event, so the re-read always includes it. - Even without an event, it reads again every 5 minutes while connected, or every 30 seconds while disconnected. - Each read asks for the selected range ending at that moment, so the chart and "Latest" values move forward. - While a refresh is in flight the current chart stays on screen. - If a refresh fails, the last good data stays up. An error only shows when nothing has loaded yet. - Changing the range still cancels the old request, and closing the page stops the listening. **Same problem in the sidebar overlay** (`useUsageMetricHistory.ts`): the metric chart overlay read once when opened. Pinned open by a tap, it could stay stale or say "Not enough history yet" forever. It now reads again, skipping its 60-second cache, on each usage-changed event while open, and stops listening when closed. Settings' agent cards show this overlay without a live connection, so there it keeps its single read. **Tests** - **Analytics:** three new tests. An empty history fills in after a usage event, with the same 7-day range ending later. The latest value updates (17% → 44%) while the chart stays up. A failed refresh keeps the last good data. - **Overlay:** one new test. A pinned overlay fills in after a usage event and stops reading once closed. - **Checked against the old code:** all four of these fail on the previous code and pass now. A fifth new test (an error on the first read with nothing to keep, and no listeners left after closing) is a guard, not a regression test. - **Test mocks:** the socket mocks in `AnalyticsPage.test.tsx`, `AgentTankSidebar.test.tsx` and `MobileBottomNavigation.test.tsx` gained the socket functions the new code calls. These are mock-only changes. **What can't be avoided:** a sample recorded between the server's usage checks (for example, during a sidebar refresh) with no value change sends no event. It shows up at the next 5-minute re-read at the latest. I didn't add a preview: the change is the chart updating over time, which a screenshot can't show. PR: #3218 Comment by: @propr-ultrafix (ID: 0) Model: Claude Opus 5.5
|
✅ AI Code Review Complete requested by @integry Posted 1 review: |
|
|
|
/ultrafix |
|
🔄 Ultrafix loop started (goal: 8/10, max cycles: 10) First action:
|
🔍 AI Code Review — codex:gpt-6-astraOverall EvaluationThe PR implements the requested history storage, Analytics chart, sidebar overlays, and Gemini 4 Argon grouping with a reasonably clear separation between parsing, persistence, and presentation. It is merge-ready based on the supplied code review, with runtime integration verification remaining a useful follow-up. ✅ Backward-compatible parsing — Both canonical provider envelopes and legacy status maps pass through shared parsers, with tests covering bundled and external entry points. ✅ Recoverable history writes — Recording is serialized, and deduplication baselines advance only after successful insertion, allowing failed writes to be retried. ✅ Permission boundary preserved — The history endpoint requires agent-management permission, and demo sidebar rows do not offer access to real history. The authoritative checks report 28 passed, none failed or pending, and 17 neutral/skipped. This review used static analysis only; no commands were run. Merge blockersNo merge blockers. SuggestionsThese are optional follow-ups and are not sent to S9: 🟢 Exercise the actual daemon contractAdd integration coverage for S10: 🟢 Make singleton series visible
S11: 🟢 Preserve history across source transitions
ScoreThe implementation substantially satisfies the objective, has broad targeted coverage, and has no verified merge blocker in the supplied diff. Actual daemon and rebuilt-image integration remain less thoroughly validated than the mocked paths. Score: 8/10 🤖 Review Details
Copy and edit to choose records from this review: 🤖 Review by ProPR |







Goal Implementation Summary
✅ Goal completed successfully.
Goal: Agent Tank has received a significant new update - different/unified JSON data structure, support for Gemini 4 Argon (separately tracked value) and historical data, which would also allow plotting graphs in ProPR to show the usage change line for different agents/metrics. We could show a unified usage chart in Analytics (with options to show only certain agents/metrics or all of them). In addition when hovering (or tapping on mobile), a specific metric in the usage section in the sidebar it would show a chart overlay showing the changes in usage for the last 2 periods (for example for a 5h session, it would be a 10h chart, for a weekly limit it would be a 2 week chart, etc)
Branch:
goal-e0d6a5d6/claude-opus-5-5-agent-tank-has-received-a-20261017-2303-az4Goal ID:
e0d6a5d6-fd83-43c1-ba9e-45254c61b1e6Summary of Changes
Everything the goal asked for is built and published; the last checkpoint is commit
851e99d. The charts have only been tested and screenshotted against mocked data. They haven't run against a real Agent Tank 0.10 daemon or a rebuilt agent image.{ "providers": [...] }format and still accepts the old 0.9.x map, so an external daemon can be upgraded before or after ProPR. ProPR's local fixes still weren't upstream, so I rebased the patch onto 0.10.0.GET /api/config/agent-tank/history.Results:
Things you might trip over:
The previews are attached to the PR.
🤖 Implementation Details
💡 Need changes?
Comment on this PR to request refinements — the AI agent monitors comments and will update the implementation based on your feedback.
This PR description was updated automatically by ProPR after the goal completed.
Visual preview
Analytics: unified quota usage chart
Every agent's session, weekly and per-model quota (including Antigravity's Gemini 4 Argon) on one 0-100% chart over the last 7 days. Provider chips and per-metric chips toggle lines, with the crosshair tooltip open. Mocked history data.
Original unavailable: managed storage is unavailable or the upload has expired.
Analytics usage chart on a phone
The same pane at 390px over 3 days: filters wrap under each provider, and the chart fits above the bottom navigation.
Original unavailable: managed storage is unavailable or the upload has expired.
Sidebar metric hover overlay
Hovering Claude's Session row opens a chart of the last 10 hours (two 5-hour sessions), with a dashed marker where the current session started.
Original unavailable: managed storage is unavailable or the upload has expired.
Tapping a weekly metric on mobile
In the mobile API & quota usage sheet, tapping Antigravity's Gemini 4 Argon weekly quota shows the last 14 days (two weekly periods) in a full-width card with a close button.
Original unavailable: managed storage is unavailable or the upload has expired.