- Extend ClaudeSession type to include optional billing source.
- Introduce ToolAnalyticsResponse type for API response structure.
- Implement getToolAnalytics function to fetch tool analytics data.
- Create RankedAnalyticsList component for displaying ranked items.
- Develop ToolAnalyticsPanel component to manage and display tool analytics.
- Add ToolFrequencyChart component to visualize tool call frequency.
- Implement loading and empty states for better user experience.
- Implemented the ClaudeSessionDetailPage component to display session details, including messages and timeline navigation.
- Created SessionHeroHeader for displaying session metadata and status.
- Added SessionMessageThread to render individual messages and their details.
- Introduced SessionTimelineNav for quick navigation through messages.
- Developed ToolCallBlock to show tool usage details within messages.
- Integrated API functions for fetching session and message data.
- Add PerGatewayUsage interface and buildPerGatewayUsage() function
- Each gateway's most constrained limit shown independently, sorted by exhaustion
- Per-account rows render BEFORE aggregate summary
- Aggregate cards labeled 'Combined' when multiple gateways exist
- 'Soonest reset' and 'Combined limit' labels replace misleading single-gateway labels
- Filter out gateways with no configured limit to reduce noise
- Add typed limit fields to RuntimeUsageCurrent: output_token_limit,
total_token_limit, message_limit with matching pct and source
- Add total_output_tokens and output_tokens_per_minute to burn rate
- _build_current() now computes each pct from matching units only
- Legacy token_limit backfilled from typed limits for backwards compat
- Frontend aggregateRuntimeUsage() tracks typed limits separately
- limit_kind field on predictions indicates which limit drove time-to-limit
- Add source and confidence fields to RuntimeUsageWindow, ModelUsageEntry,
TopSession, RuntimeUsageCurrent, and ProviderUsageScrapeResult schemas
- _build_window() assigns source based on data origin:
provider_native > provider_api_rate_limit > local_jsonl_estimate
- _build_current() tags token_limit_source and cost_limit_source
- Frontend relabels 'Current session'/'All models' to 'API rate limit'
- Shows source label and confidence in usage strip
- Changes 'did not return active usage windows' to 'did not return
API rate-limit windows for percent + reset diagnostics'