codex-usage-tracking 0.19.0__tar.gz → 0.21.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/.codex-plugin/plugin.json +1 -1
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/CHANGELOG.md +34 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/PKG-INFO +4 -4
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/README.md +3 -3
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/docs/architecture.md +13 -0
- codex_usage_tracking-0.21.0/docs/assets/dashboard-call-investigator-evidence.png +0 -0
- codex_usage_tracking-0.21.0/docs/assets/dashboard-call-investigator-preview.png +0 -0
- codex_usage_tracking-0.21.0/docs/assets/dashboard-call-investigator.png +0 -0
- codex_usage_tracking-0.21.0/docs/assets/dashboard-calls-preview.png +0 -0
- codex_usage_tracking-0.21.0/docs/assets/dashboard-calls.png +0 -0
- codex_usage_tracking-0.21.0/docs/assets/dashboard-details.png +0 -0
- codex_usage_tracking-0.21.0/docs/assets/dashboard-diagnostics.png +0 -0
- codex_usage_tracking-0.21.0/docs/assets/dashboard-insights.png +0 -0
- codex_usage_tracking-0.21.0/docs/assets/dashboard-threads.png +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/docs/cli-json-schemas.md +34 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/docs/cli-reference.md +20 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/docs/dashboard-guide.md +49 -8
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/docs/database-schema.md +34 -1
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/docs/development.md +2 -2
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/docs/install.md +29 -1
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/docs/one-dot-oh-readiness.md +8 -8
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/docs/pricing-and-credits.md +50 -1
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/docs/privacy.md +25 -2
- codex_usage_tracking-0.21.0/docs/superpowers/plans/2026-07-15-threads-inline-expansion.md +947 -0
- codex_usage_tracking-0.21.0/docs/superpowers/plans/2026-07-16-otel-fast-usage-ingestion.md +1685 -0
- codex_usage_tracking-0.21.0/docs/superpowers/plans/2026-07-16-service-tier-billing-readiness.md +577 -0
- codex_usage_tracking-0.21.0/docs/superpowers/plans/2026-07-16-windows-filesystem-id-overflow.md +441 -0
- codex_usage_tracking-0.21.0/docs/superpowers/plans/2026-07-17-persistent-dashboard-service.md +620 -0
- codex_usage_tracking-0.21.0/docs/superpowers/plans/2026-07-17-threads-table-compact-redesign.md +112 -0
- codex_usage_tracking-0.21.0/docs/superpowers/specs/2026-07-15-threads-inline-expansion-design.md +153 -0
- codex_usage_tracking-0.21.0/docs/superpowers/specs/2026-07-16-otel-fast-usage-ingestion-design.md +310 -0
- codex_usage_tracking-0.21.0/docs/superpowers/specs/2026-07-16-windows-filesystem-id-overflow-design.md +92 -0
- codex_usage_tracking-0.21.0/docs/superpowers/specs/2026-07-17-persistent-dashboard-service-design.md +186 -0
- codex_usage_tracking-0.21.0/docs/superpowers/specs/2026-07-17-threads-table-compact-redesign-design.md +32 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/pyproject.toml +1 -1
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/scripts/smoke_installed_package.py +1 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/skills/codex-usage-tracker/SKILL.md +1 -1
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/skills/codex-usage-tracker/scripts/run_mcp.py +2 -2
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/__init__.py +1 -1
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/cli/commands_lifecycle.py +43 -18
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/cli/dashboard.py +10 -2
- codex_usage_tracking-0.21.0/src/codex_usage_tracker/cli/dashboard_service.py +39 -0
- codex_usage_tracking-0.21.0/src/codex_usage_tracker/cli/help_i18n.py +182 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/cli/main.py +8 -3
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/cli/parser.py +7 -2
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/cli/parser_data.py +26 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/core/models.py +4 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/core/paths.py +1 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/core/schema.py +4 -0
- codex_usage_tracking-0.21.0/src/codex_usage_tracker/dashboard_service.py +360 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/parser/__init__.py +14 -0
- codex_usage_tracking-0.21.0/src/codex_usage_tracker/parser/otel.py +342 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/dashboard/locales/zh-Hans.json +153 -153
- codex_usage_tracking-0.21.0/src/codex_usage_tracker/plugin_data/dashboard/react/assets/App.js +128 -0
- codex_usage_tracking-0.21.0/src/codex_usage_tracker/plugin_data/dashboard/react/assets/CacheContextPage.js +1 -0
- codex_usage_tracking-0.21.0/src/codex_usage_tracker/plugin_data/dashboard/react/assets/CallInvestigatorPage.js +6 -0
- codex_usage_tracking-0.21.0/src/codex_usage_tracker/plugin_data/dashboard/react/assets/CallsPage.js +16 -0
- codex_usage_tracking-0.21.0/src/codex_usage_tracker/plugin_data/dashboard/react/assets/CompressionLabPage.js +1 -0
- codex_usage_tracking-0.21.0/src/codex_usage_tracker/plugin_data/dashboard/react/assets/DataTable.js +11 -0
- codex_usage_tracking-0.21.0/src/codex_usage_tracker/plugin_data/dashboard/react/assets/DiagnosticsPage.js +1 -0
- codex_usage_tracking-0.21.0/src/codex_usage_tracker/plugin_data/dashboard/react/assets/EvidenceGrid.js +6 -0
- codex_usage_tracking-0.21.0/src/codex_usage_tracker/plugin_data/dashboard/react/assets/EvidenceGridControls.css +1 -0
- codex_usage_tracking-0.21.0/src/codex_usage_tracker/plugin_data/dashboard/react/assets/EvidenceGridControls.js +1 -0
- codex_usage_tracking-0.21.0/src/codex_usage_tracker/plugin_data/dashboard/react/assets/ExploreRoutePage.js +1 -0
- codex_usage_tracking-0.21.0/src/codex_usage_tracker/plugin_data/dashboard/react/assets/InvestigatorPage.js +11 -0
- codex_usage_tracking-0.21.0/src/codex_usage_tracker/plugin_data/dashboard/react/assets/LineChart.js +1 -0
- codex_usage_tracking-0.21.0/src/codex_usage_tracker/plugin_data/dashboard/react/assets/OverviewPage.css +1 -0
- codex_usage_tracking-0.21.0/src/codex_usage_tracker/plugin_data/dashboard/react/assets/OverviewPage.js +1 -0
- codex_usage_tracking-0.21.0/src/codex_usage_tracker/plugin_data/dashboard/react/assets/Panel.js +1 -0
- codex_usage_tracking-0.21.0/src/codex_usage_tracker/plugin_data/dashboard/react/assets/ReportsPage.js +1 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/dashboard/react/assets/SettingsPage.js +2 -2
- codex_usage_tracking-0.21.0/src/codex_usage_tracker/plugin_data/dashboard/react/assets/StatusBadge.js +1 -0
- codex_usage_tracking-0.21.0/src/codex_usage_tracker/plugin_data/dashboard/react/assets/ThreadsPage.css +1 -0
- codex_usage_tracking-0.21.0/src/codex_usage_tracker/plugin_data/dashboard/react/assets/ThreadsPage.js +6 -0
- codex_usage_tracking-0.21.0/src/codex_usage_tracker/plugin_data/dashboard/react/assets/UsageConstellation.js +12 -0
- codex_usage_tracking-0.21.0/src/codex_usage_tracker/plugin_data/dashboard/react/assets/UsageDrainPage.js +6 -0
- codex_usage_tracking-0.21.0/src/codex_usage_tracker/plugin_data/dashboard/react/assets/cartesianRenderer.js +1 -0
- codex_usage_tracking-0.21.0/src/codex_usage_tracker/plugin_data/dashboard/react/assets/contextEvidenceState.js +1 -0
- codex_usage_tracking-0.21.0/src/codex_usage_tracker/plugin_data/dashboard/react/assets/dashboardRouter.js +2 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/dashboard/react/assets/diagnosticsQueries.js +1 -1
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/dashboard/react/assets/echartsRenderer.js +2 -2
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/dashboard/react/assets/exploreQueries.js +1 -1
- codex_usage_tracking-0.21.0/src/codex_usage_tracker/plugin_data/dashboard/react/assets/flowRenderer.js +1 -0
- codex_usage_tracking-0.21.0/src/codex_usage_tracker/plugin_data/dashboard/react/assets/heatmapRenderer.js +1 -0
- codex_usage_tracking-0.21.0/src/codex_usage_tracker/plugin_data/dashboard/react/assets/locale-zh-Hans.js +1 -0
- codex_usage_tracking-0.21.0/src/codex_usage_tracker/plugin_data/dashboard/react/assets/overviewQueries.js +11 -0
- codex_usage_tracking-0.21.0/src/codex_usage_tracker/plugin_data/dashboard/react/assets/rowActionEvents.js +1 -0
- codex_usage_tracking-0.21.0/src/codex_usage_tracker/plugin_data/dashboard/react/assets/runtime.js +3 -0
- codex_usage_tracking-0.21.0/src/codex_usage_tracker/plugin_data/dashboard/react/assets/search.js +6 -0
- codex_usage_tracking-0.21.0/src/codex_usage_tracker/plugin_data/dashboard/react/assets/tableActions.js +1 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/dashboard/react/assets/useBaseQuery.js +1 -1
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/dashboard/react/assets/useInfiniteQuery.js +1 -1
- codex_usage_tracking-0.21.0/src/codex_usage_tracker/plugin_data/docs/assets/dashboard-call-investigator-evidence.png +0 -0
- codex_usage_tracking-0.21.0/src/codex_usage_tracker/plugin_data/docs/assets/dashboard-call-investigator-preview.png +0 -0
- codex_usage_tracking-0.21.0/src/codex_usage_tracker/plugin_data/docs/assets/dashboard-call-investigator.png +0 -0
- codex_usage_tracking-0.21.0/src/codex_usage_tracker/plugin_data/docs/assets/dashboard-calls-preview.png +0 -0
- codex_usage_tracking-0.21.0/src/codex_usage_tracker/plugin_data/docs/assets/dashboard-calls.png +0 -0
- codex_usage_tracking-0.21.0/src/codex_usage_tracker/plugin_data/docs/assets/dashboard-details.png +0 -0
- codex_usage_tracking-0.21.0/src/codex_usage_tracker/plugin_data/docs/assets/dashboard-diagnostics.png +0 -0
- codex_usage_tracking-0.21.0/src/codex_usage_tracker/plugin_data/docs/assets/dashboard-insights.png +0 -0
- codex_usage_tracking-0.21.0/src/codex_usage_tracker/plugin_data/docs/assets/dashboard-threads.png +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/docs/dashboard-guide.html +1 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/rate_cards/codex-credit-rates.json +23 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/skills/codex-usage-tracker/SKILL.md +1 -1
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/pricing/allowance.py +6 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/pricing/allowance_config.py +28 -2
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/pricing/allowance_rate_card.py +69 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/pricing/allowance_usage.py +50 -3
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/pricing/api.py +2 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/pricing/config.py +120 -13
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/pricing/costing.py +60 -2
- codex_usage_tracking-0.21.0/src/codex_usage_tracker/pricing/fast_tier.py +88 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/pricing/openai.py +51 -4
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/reports/support.py +14 -1
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/server/api.py +17 -10
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/server/handler.py +7 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/server/route_inventory.py +10 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/server/routes.py +1 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/store/api.py +43 -2
- codex_usage_tracking-0.21.0/src/codex_usage_tracker/store/otel_ingest.py +291 -0
- codex_usage_tracking-0.21.0/src/codex_usage_tracker/store/otel_reconciliation.py +182 -0
- codex_usage_tracking-0.21.0/src/codex_usage_tracker/store/otel_schema.py +89 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/store/refresh.py +64 -2
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/store/schema.py +5 -1
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/store/source_replacement.py +78 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/store/sources.py +55 -24
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/usage_drain/spans.py +6 -1
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/usage_drain/types.py +6 -11
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracking.egg-info/PKG-INFO +4 -4
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracking.egg-info/SOURCES.txt +36 -1
- codex_usage_tracking-0.21.0/tests/cli/test_cli_help_i18n.py +58 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/cli/test_cli_release.py +1 -0
- codex_usage_tracking-0.21.0/tests/cli/test_dashboard_service.py +466 -0
- codex_usage_tracking-0.21.0/tests/core/test_api_payloads.py +18 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/core/test_schema.py +4 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/dashboard/test_dashboard_payload.py +33 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/dashboard/test_dashboard_server_live_slices.py +6 -0
- codex_usage_tracking-0.21.0/tests/otel_helpers.py +245 -0
- codex_usage_tracking-0.21.0/tests/parser/test_otel_parser.py +163 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/pricing/test_allowance.py +164 -0
- codex_usage_tracking-0.21.0/tests/pricing/test_pricing.py +547 -0
- codex_usage_tracking-0.21.0/tests/pricing/test_rate_card.py +101 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/reports/test_support.py +16 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/server/test_server_api.py +23 -5
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/server/test_server_call_detail.py +23 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/store/test_compression_runs.py +2 -2
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/store/test_content_query_exports.py +32 -0
- codex_usage_tracking-0.21.0/tests/store/test_otel_ingest.py +240 -0
- codex_usage_tracking-0.21.0/tests/store/test_otel_reconciliation.py +269 -0
- codex_usage_tracking-0.21.0/tests/store/test_otel_refresh.py +199 -0
- codex_usage_tracking-0.21.0/tests/store/test_otel_schema.py +79 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/store/test_source_records.py +29 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/store/test_store_dashboard_mcp.py +6 -6
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/store/test_store_migrations.py +17 -13
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/store/test_store_sources.py +108 -2
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/usage_drain/test_usage_drain_model.py +12 -0
- codex_usage_tracking-0.19.0/docs/assets/dashboard-call-investigator-evidence.png +0 -0
- codex_usage_tracking-0.19.0/docs/assets/dashboard-call-investigator-preview.png +0 -0
- codex_usage_tracking-0.19.0/docs/assets/dashboard-call-investigator.png +0 -0
- codex_usage_tracking-0.19.0/docs/assets/dashboard-calls-preview.png +0 -0
- codex_usage_tracking-0.19.0/docs/assets/dashboard-calls.png +0 -0
- codex_usage_tracking-0.19.0/docs/assets/dashboard-details.png +0 -0
- codex_usage_tracking-0.19.0/docs/assets/dashboard-diagnostics.png +0 -0
- codex_usage_tracking-0.19.0/docs/assets/dashboard-insights.png +0 -0
- codex_usage_tracking-0.19.0/docs/assets/dashboard-threads.png +0 -0
- codex_usage_tracking-0.19.0/src/codex_usage_tracker/plugin_data/dashboard/react/assets/App.js +0 -133
- codex_usage_tracking-0.19.0/src/codex_usage_tracker/plugin_data/dashboard/react/assets/CacheContextPage.js +0 -1
- codex_usage_tracking-0.19.0/src/codex_usage_tracker/plugin_data/dashboard/react/assets/CallInvestigatorPage.js +0 -6
- codex_usage_tracking-0.19.0/src/codex_usage_tracker/plugin_data/dashboard/react/assets/CallsPage.js +0 -16
- codex_usage_tracking-0.19.0/src/codex_usage_tracker/plugin_data/dashboard/react/assets/CompressionLabPage.js +0 -1
- codex_usage_tracking-0.19.0/src/codex_usage_tracker/plugin_data/dashboard/react/assets/DataTable.js +0 -11
- codex_usage_tracking-0.19.0/src/codex_usage_tracker/plugin_data/dashboard/react/assets/DiagnosticsPage.js +0 -1
- codex_usage_tracking-0.19.0/src/codex_usage_tracker/plugin_data/dashboard/react/assets/EvidenceGrid.css +0 -1
- codex_usage_tracking-0.19.0/src/codex_usage_tracker/plugin_data/dashboard/react/assets/EvidenceGrid.js +0 -6
- codex_usage_tracking-0.19.0/src/codex_usage_tracker/plugin_data/dashboard/react/assets/ExploreRoutePage.js +0 -1
- codex_usage_tracking-0.19.0/src/codex_usage_tracker/plugin_data/dashboard/react/assets/InvestigatorPage.js +0 -11
- codex_usage_tracking-0.19.0/src/codex_usage_tracker/plugin_data/dashboard/react/assets/LineChart.js +0 -1
- codex_usage_tracking-0.19.0/src/codex_usage_tracker/plugin_data/dashboard/react/assets/OverviewPage.css +0 -1
- codex_usage_tracking-0.19.0/src/codex_usage_tracker/plugin_data/dashboard/react/assets/OverviewPage.js +0 -1
- codex_usage_tracking-0.19.0/src/codex_usage_tracker/plugin_data/dashboard/react/assets/Panel.js +0 -1
- codex_usage_tracking-0.19.0/src/codex_usage_tracker/plugin_data/dashboard/react/assets/ReportsPage.js +0 -1
- codex_usage_tracking-0.19.0/src/codex_usage_tracker/plugin_data/dashboard/react/assets/ThreadsPage.css +0 -1
- codex_usage_tracking-0.19.0/src/codex_usage_tracker/plugin_data/dashboard/react/assets/ThreadsPage.js +0 -6
- codex_usage_tracking-0.19.0/src/codex_usage_tracker/plugin_data/dashboard/react/assets/UsageConstellation.js +0 -12
- codex_usage_tracking-0.19.0/src/codex_usage_tracker/plugin_data/dashboard/react/assets/UsageDrainPage.js +0 -6
- codex_usage_tracking-0.19.0/src/codex_usage_tracker/plugin_data/dashboard/react/assets/cartesianRenderer.js +0 -1
- codex_usage_tracking-0.19.0/src/codex_usage_tracker/plugin_data/dashboard/react/assets/contextEvidenceState.js +0 -1
- codex_usage_tracking-0.19.0/src/codex_usage_tracker/plugin_data/dashboard/react/assets/dashboardRouter.js +0 -2
- codex_usage_tracking-0.19.0/src/codex_usage_tracker/plugin_data/dashboard/react/assets/flowRenderer.js +0 -1
- codex_usage_tracking-0.19.0/src/codex_usage_tracker/plugin_data/dashboard/react/assets/heatmapRenderer.js +0 -1
- codex_usage_tracking-0.19.0/src/codex_usage_tracker/plugin_data/dashboard/react/assets/overviewQueries.js +0 -11
- codex_usage_tracking-0.19.0/src/codex_usage_tracker/plugin_data/dashboard/react/assets/runtime.js +0 -3
- codex_usage_tracking-0.19.0/src/codex_usage_tracker/plugin_data/docs/assets/dashboard-call-investigator-evidence.png +0 -0
- codex_usage_tracking-0.19.0/src/codex_usage_tracker/plugin_data/docs/assets/dashboard-call-investigator-preview.png +0 -0
- codex_usage_tracking-0.19.0/src/codex_usage_tracker/plugin_data/docs/assets/dashboard-call-investigator.png +0 -0
- codex_usage_tracking-0.19.0/src/codex_usage_tracker/plugin_data/docs/assets/dashboard-calls-preview.png +0 -0
- codex_usage_tracking-0.19.0/src/codex_usage_tracker/plugin_data/docs/assets/dashboard-calls.png +0 -0
- codex_usage_tracking-0.19.0/src/codex_usage_tracker/plugin_data/docs/assets/dashboard-details.png +0 -0
- codex_usage_tracking-0.19.0/src/codex_usage_tracker/plugin_data/docs/assets/dashboard-diagnostics.png +0 -0
- codex_usage_tracking-0.19.0/src/codex_usage_tracker/plugin_data/docs/assets/dashboard-insights.png +0 -0
- codex_usage_tracking-0.19.0/src/codex_usage_tracker/plugin_data/docs/assets/dashboard-threads.png +0 -0
- codex_usage_tracking-0.19.0/tests/pricing/test_pricing.py +0 -268
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/.mcp.json +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/AGENTS.md +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/CONTRIBUTING.md +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/LICENSE +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/MANIFEST.in +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/SECURITY.md +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/assets/icon.svg +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/docs/adoption-hardening-roadmap.md +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/docs/agent-maintainer-guidance.md +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/docs/agent-maintainer-hardening-branch-roadmap.md +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/docs/agentic-briefing-and-dogfood-roadmap.md +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/docs/agentic-investigation-hardening-roadmap.md +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/docs/agentic-mcp-skill-roadmap.md +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/docs/allowance-intelligence.md +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/docs/architecture/decisions/0001-package-domain-boundaries.md +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/docs/architecture/decisions/0002-explicit-tach-module-inventory.md +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/docs/architecture/decisions/0003-domain-level-tach-boundaries.md +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/docs/architecture/decisions/0004-dashboard-typescript-boundaries.md +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/docs/architecture/decisions/0005-dashboard-router-and-query-runtime.md +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/docs/architecture/decisions/0006-dashboard-visualization-contract.md +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/docs/architecture/decisions/0007-dashboard-css-ownership.md +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/docs/architecture/decisions/0008-dashboard-usage-constellation.md +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/docs/architecture/decisions/0009-compression-mcp-adapter.md +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/docs/architecture/decisions/0010-recommendation-engine-boundary.md +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/docs/architecture/decisions/0011-compression-dashboard-adapter.md +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/docs/architecture-boundary-map.md +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/docs/assets/dashboard-diagnostics-git-expanded.png +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/docs/assets/frontend-rewrite-references/cache-context-lab-reference.png +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/docs/assets/frontend-rewrite-references/call-drilldown-menu-concept-reference.png +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/docs/assets/frontend-rewrite-references/calls-analyst-view-reference.png +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/docs/assets/frontend-rewrite-references/calls-high-density-reference.png +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/docs/assets/frontend-rewrite-references/command-palette-dashboard-reference.png +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/docs/assets/frontend-rewrite-references/diagnostics-notebook-reference.png +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/docs/assets/frontend-rewrite-references/generated-dashboard-concept-reference.png +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/docs/assets/frontend-rewrite-references/generated-maintainer-banner-reference.png +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/docs/assets/frontend-rewrite-references/investigator-workbench-reference.png +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/docs/assets/frontend-rewrite-references/overview-dashboard-reference.png +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/docs/assets/frontend-rewrite-references/projected-weekly-credits-overlap-reference.png +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/docs/assets/frontend-rewrite-references/thread-efficiency-reference.png +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/docs/assets/frontend-rewrite-references/usage-drain-lab-reference.png +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/docs/assets/plugin-prompts.png +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/docs/assets/plugin-thread-leaderboard.png +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/docs/assets/readme-hero-2.png +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/docs/assets/readme-hero.png +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/docs/assets/social-preview.png +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/docs/assets/ux/call-detail-panel.png +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/docs/assets/ux/insight-overview.png +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/docs/assets/ux/thread-investigation.png +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/docs/call-drilldown-performance-checklist.md +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/docs/complexity-hardening-roadmap.md +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/docs/compression-lab-roadmap.md +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/docs/dashboard-final-redesign-audit.md +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/docs/dashboard-final-redesign-parity.md +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/docs/dashboard-final-redesign-release-candidate.md +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/docs/dashboard-final-redesign-roadmap.md +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/docs/dashboard-final-redesign-spec.md +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/docs/dashboard-overview-parity.md +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/docs/dashboard-query-pipeline-refactor-roadmap.md +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/docs/dashboard-route-inventory.md +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/docs/examples/remediation-conversation.md +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/docs/examples/token-waste-conversation.md +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/docs/first-five-minutes.md +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/docs/frontend-rewrite-roadmap.md +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/docs/local-content-index-roadmap.md +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/docs/maintainability-roadmap.md +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/docs/maintainability-scorecard.md +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/docs/mcp.md +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/docs/react-dashboard-0.14-release-roadmap.md +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/docs/superpowers/plans/2026-07-11-compression-lab-implementation.md +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/docs/superpowers/plans/2026-07-11-page-query-progress.md +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/docs/superpowers/plans/2026-07-14-clone-copy-deduplication.md +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/docs/superpowers/plans/2026-07-14-limits-intelligence-redesign.md +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/docs/superpowers/plans/2026-07-15-capacity-chart-series-encoding.md +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/docs/superpowers/plans/2026-07-15-capacity-first-limits.md +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/docs/superpowers/plans/2026-07-15-parallel-hardening-ci.md +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/docs/superpowers/specs/2026-07-11-compression-lab-design.md +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/docs/superpowers/specs/2026-07-11-page-query-progress-design.md +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/docs/superpowers/specs/2026-07-14-clone-copy-deduplication-design.md +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/docs/superpowers/specs/2026-07-14-limits-intelligence-redesign-design.md +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/docs/superpowers/specs/2026-07-15-capacity-chart-series-encoding-design.md +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/docs/superpowers/specs/2026-07-15-capacity-first-limits-design.md +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/docs/superpowers/specs/2026-07-15-parallel-hardening-ci-design.md +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/docs/ui-ux-improvement-plan.md +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/docs/usage-drain-modeling.md +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/scripts/benchmark_compression_lab.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/scripts/benchmark_dashboard_routes.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/scripts/benchmark_refresh_ingestion.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/scripts/benchmark_synthetic_history.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/scripts/calibrate_allowance_change_detector.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/scripts/check_dashboard_source_budgets.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/scripts/check_release.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/scripts/check_wemake_baseline.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/scripts/compression_persistence_benchmark.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/scripts/compression_revision_benchmark.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/scripts/dashboard_route_benchmark_support.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/scripts/generate_social_preview.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/scripts/install_local_plugin.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/scripts/model_usage_drain.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/scripts/smoke_dashboard_server.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/setup.cfg +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/skills/codex-usage-api/SKILL.md +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/__main__.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/allowance.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/allowance_intelligence/__init__.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/allowance_intelligence/analysis.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/allowance_intelligence/capacity_history.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/allowance_intelligence/change_detection.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/allowance_intelligence/contracts.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/allowance_intelligence/cycles.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/allowance_intelligence/estimation.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/allowance_intelligence/model.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/allowance_intelligence/reports.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/allowance_intelligence/service.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/allowance_intelligence/statistics.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/cli/__init__.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/cli/__main__.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/cli/commands_data.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/cli/commands_reports.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/cli/config.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/cli/diagnostics.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/cli/inspect_log_output.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/cli/mcp_allowance.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/cli/mcp_compression.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/cli/mcp_compression_router.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/cli/mcp_compression_router_payloads.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/cli/mcp_dashboard.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/cli/mcp_discovery.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/cli/mcp_dogfood.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/cli/mcp_investigations.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/cli/mcp_runtime.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/cli/mcp_server.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/cli/mcp_visualization.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/cli/output.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/cli/parser_diagnostics.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/cli/parser_lifecycle.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/cli/parser_reports.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/cli/plugin_installer.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/compression/__init__.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/compression/api.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/compression/attribution.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/compression/context_detectors.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/compression/detector_protocol.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/compression/detector_registry.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/compression/estimators.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/compression/evidence.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/compression/identifiers.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/compression/jobs.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/compression/models.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/compression/output_detectors.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/compression/payloads.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/compression/profile.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/compression/repetition_detectors.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/compression/request.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/compression/run_builder.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/compression/run_cache.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/compression/simulation_api.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/compression/simulation_payloads.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/compression/simulator.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/compression/streaming_evidence.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/context/__init__.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/context/action_timing.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/context/api.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/context/constants.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/context/loader.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/context/reader.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/context/serialized.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/context/summaries.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/context/token_estimates.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/context/values.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/core/__init__.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/core/api_payloads.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/core/call_origin.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/core/command_parsing.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/core/formatting.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/core/i18n.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/core/json_contract_cli.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/core/json_contract_common.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/core/json_contract_diagnostics.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/core/json_contract_server.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/core/json_contract_summary.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/core/json_contract_validation.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/core/json_contract_visualization.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/core/json_contracts.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/core/projects.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/core/redaction.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/core/threads.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/core/usage_identity.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/dashboard/__init__.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/dashboard/api.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/dashboard/assets.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/dashboard/cache_identity.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/dashboard/load_window.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/dashboard/pricing_snapshot.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/diagnostics/__init__.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/diagnostics/action_hints.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/diagnostics/api.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/diagnostics/dedupe.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/diagnostics/doctor_checks.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/diagnostics/fact_classifiers.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/diagnostics/facts.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/diagnostics/guided_signals.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/diagnostics/guided_summary.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/diagnostics/mcp.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/diagnostics/reports.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/diagnostics/snapshot_analysis.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/diagnostics/snapshot_analysis_payloads.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/diagnostics/snapshot_concentration.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/diagnostics/snapshot_constants.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/diagnostics/snapshot_events.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/diagnostics/snapshot_overview.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/diagnostics/snapshot_payloads.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/diagnostics/snapshot_progress.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/diagnostics/snapshot_report.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/diagnostics/snapshot_rows.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/diagnostics/snapshot_source_logs.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/diagnostics/snapshot_source_scan.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/diagnostics/snapshots.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/diagnostics/types.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/mcp_server.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/parser/api.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/parser/jsonl_v1.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/parser/jsonl_values.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/parser/state.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/__init__.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/assets/icon.svg +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/dashboard/dashboard.css +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/dashboard/dashboard.js +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_actions.js +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_analysis.js +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_call.css +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_call_diagnostics.js +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_call_investigator.js +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_cells.js +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_data.js +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_detail.css +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_details.js +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_diagnostics.js +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_diagnostics_facts.js +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_diagnostics_snapshots.js +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_events.js +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_filters.js +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_format.js +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_i18n.js +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_insights.css +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_insights.js +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_layout.css +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_live.js +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_payload_cache.js +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_responsive.css +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_state.js +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_status.js +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_tables.css +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_tables.js +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_template.html +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_tooltips.js +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/dashboard/locales/ar.json +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/dashboard/locales/de.json +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/dashboard/locales/en.json +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/dashboard/locales/es.json +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/dashboard/locales/fr.json +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/dashboard/locales/it.json +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/dashboard/locales/ja.json +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/dashboard/locales/ko.json +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/dashboard/locales/pt.json +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/dashboard/locales/ru.json +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/dashboard/locales/vi.json +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/dashboard/react/assets/CallsPage.css +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/dashboard/react/assets/CompressionLabPage.css +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/dashboard/react/assets/CoordinateSystem.js +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/dashboard/react/assets/DataDiffer.js +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/dashboard/react/assets/ExploreRoutePage.css +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/dashboard/react/assets/ExploreWorkspaceSwitcher.js +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/dashboard/react/assets/InvestigatorPage.css +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/dashboard/react/assets/PageLoadProgress.css +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/dashboard/react/assets/PageLoadProgress.js +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/dashboard/react/assets/Primitives.css +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/dashboard/react/assets/Primitives.js +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/dashboard/react/assets/ReportsPage.css +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/dashboard/react/assets/RoamController.js +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/dashboard/react/assets/SeriesData.js +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/dashboard/react/assets/SettingsPage.css +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/dashboard/react/assets/SymbolDraw.js +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/dashboard/react/assets/UsageConstellation.css +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/dashboard/react/assets/UsageConstellationCanvas.css +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/dashboard/react/assets/UsageConstellationCanvas.js +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/dashboard/react/assets/UsageDrainPage.css +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/dashboard/react/assets/VisualMapping.js +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/dashboard/react/assets/accessibilityFeature.js +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/dashboard/react/assets/annotationFeature.js +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/dashboard/react/assets/cartesianAxisHelper.js +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/dashboard/react/assets/chevron-right.js +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/dashboard/react/assets/dashboard-react.js +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/dashboard/react/assets/dataStackHelper.js +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/dashboard/react/assets/extension.js +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/dashboard/react/assets/filtering.js +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/dashboard/react/assets/gauge.js +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/dashboard/react/assets/grid.js +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/dashboard/react/assets/index.css +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/dashboard/react/assets/index.js +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/dashboard/react/assets/index2.js +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/dashboard/react/assets/infiniteQueryOptions.js +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/dashboard/react/assets/install.js +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/dashboard/react/assets/interactionFeature.js +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/dashboard/react/assets/legendFeature.js +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/dashboard/react/assets/listComponent.js +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/dashboard/react/assets/lock-keyhole.js +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/dashboard/react/assets/queryOptions.js +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/dashboard/react/assets/router.js +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/dashboard/react/assets/scaleRawExtentInfo.js +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/dashboard/react/assets/shield-check.js +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/dashboard/react/assets/sliderMove.js +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/dashboard/react/assets/threadSummaryAdapter.js +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/dashboard/react/assets/tooltipFeature.js +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/dashboard/react/assets/triangle-alert.js +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/dashboard/react/assets/useQuery.js +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/dashboard/react/assets/visualMapFeature.js +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/dashboard/react/index.html +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/docs/assets/dashboard-diagnostics-git-expanded.png +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/docs/assets/plugin-prompts.png +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/docs/assets/plugin-thread-leaderboard.png +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/docs/examples/remediation-conversation.md +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/docs/examples/token-waste-conversation.md +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_data/skills/codex-usage-api/SKILL.md +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/plugin_installer.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/pricing/__init__.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/pricing/allowance_text.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/pricing/estimates.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/recommendation_engine/__init__.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/recommendation_engine/api.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/recommendation_engine/fact_config.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/recommendation_engine/materialization.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/recommendation_engine/query.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/recommendation_engine/summary_materialization.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/reports/__init__.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/reports/action_brief.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/reports/agentic.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/reports/agentic_dogfood.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/reports/agentic_dogfood_markdown.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/reports/agentic_evidence.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/reports/agentic_strategy.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/reports/api.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/reports/discovery.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/reports/filters.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/reports/hypothesis_classification.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/reports/hypothesis_evaluators.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/reports/hypothesis_limit_evaluators.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/reports/hypothesis_results.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/reports/investigation_walk.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/reports/project_summary.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/reports/query.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/reports/recommendation_builder.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/reports/recommendations.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/reports/visualization.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/reports/visualization_support.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/server/__init__.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/server/allowance.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/server/allowance_v2.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/server/analysis_jobs.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/server/call_detail.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/server/call_lists.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/server/compression_routes.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/server/context.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/server/context_settings.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/server/dashboard_pages.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/server/dashboard_shell.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/server/dedupe.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/server/diagnostic_facts.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/server/diagnostic_jobs.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/server/diagnostic_routes.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/server/diagnostic_snapshots.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/server/investigations.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/server/live_queries.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/server/live_rows.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/server/open_investigator.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/server/query_cache.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/server/recommendations.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/server/reports.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/server/request_guards.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/server/request_timing.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/server/responses.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/server/route_profile.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/server/status.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/server/summary.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/server/threads.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/server/usage_refresh.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/server/utils.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/store/__init__.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/store/allowance_intelligence.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/store/allowance_materialization.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/store/allowance_observations.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/store/allowance_schema.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/store/compression_candidate_metadata.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/store/compression_candidates.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/store/compression_capacities.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/store/compression_evidence.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/store/compression_fact_contract.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/store/compression_fact_ingest.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/store/compression_fact_manifest.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/store/compression_fact_queries.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/store/compression_fact_rows.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/store/compression_fact_sync.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/store/compression_facts.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/store/compression_publication.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/store/compression_revisions.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/store/compression_runs.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/store/compression_schema.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/store/connection.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/store/content_excerpts.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/store/content_extract.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/store/content_index.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/store/content_index_bulk.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/store/content_index_event_store.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/store/content_index_events.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/store/content_index_models.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/store/content_index_parallel.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/store/content_index_source.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/store/content_index_stream.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/store/content_patterns.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/store/content_persistence.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/store/content_provenance.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/store/content_query.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/store/content_rows.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/store/content_search.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/store/content_trace.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/store/dashboard_queries.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/store/dedupe_queries.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/store/deduplication.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/store/deduplication_schema.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/store/diagnostic_api.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/store/diagnostic_call_queries.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/store/diagnostic_queries.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/store/exports.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/store/investigation_runs.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/store/large_low_output.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/store/query_sql.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/store/query_values.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/store/recommendation_queries.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/store/recommendation_schema.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/store/refresh_callbacks.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/store/refresh_parse.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/store/refresh_stream.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/store/repeated_files.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/store/rows.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/store/schema_query_indexes.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/store/shell_churn.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/store/source_records.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/store/summary_queries.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/store/thread_summaries.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/store/usage_api_queries.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/store/usage_record_queries.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/store/usage_timing.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/support.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/usage_drain/__init__.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/usage_drain/allowance_breakpoints.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/usage_drain/allowance_fits.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/usage_drain/allowance_online.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/usage_drain/boundary_delta.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/usage_drain/boundary_delta_core.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/usage_drain/boundary_delta_rows.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/usage_drain/boundary_delta_summary.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/usage_drain/boundary_scopes.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/usage_drain/boundary_summary.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/usage_drain/capacity_specs.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/usage_drain/error_diagnostics.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/usage_drain/feature_history.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/usage_drain/features.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/usage_drain/grace.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/usage_drain/history_state.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/usage_drain/model.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/usage_drain/predictive.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/usage_drain/predictive_specs.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/usage_drain/proxy_fit.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/usage_drain/regime_labels.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/usage_drain/regime_segments.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/usage_drain/regression.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/usage_drain/reports.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/usage_drain/state_buckets.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/usage_drain/state_diagnostics.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/usage_drain/summary_metrics.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/usage_drain/thread_curves.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/usage_drain/time_series.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/usage_drain/token_components.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/usage_drain/transition_gates.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/usage_drain/transition_metrics.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/usage_drain/utils.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/usage_drain/walk_forward.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracker/usage_drain/walk_forward_rows.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracking.egg-info/dependency_links.txt +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracking.egg-info/entry_points.txt +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracking.egg-info/requires.txt +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/src/codex_usage_tracking.egg-info/top_level.txt +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/__init__.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/allowance_intelligence/test_allowance_intelligence.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/allowance_intelligence/test_analysis.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/allowance_intelligence/test_capacity_history.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/allowance_intelligence/test_change_calibration.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/allowance_intelligence/test_change_detection.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/allowance_intelligence/test_cycles.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/allowance_intelligence/test_estimation.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/allowance_intelligence/test_service.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/allowance_intelligence/test_statistics.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/cli/test_allowance_intelligence_cli_mcp.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/cli/test_cli_benchmarks.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/cli/test_cli_dashboard.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/cli/test_cli_inspect_log_output.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/cli/test_cli_lifecycle.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/cli/test_cli_module_entrypoints.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/cli/test_cli_parser_diagnostics.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/cli/test_commands_reports.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/cli/test_dashboard_route_benchmark.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/cli/test_mcp_compression.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/cli/test_mcp_compression_router.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/cli/test_mcp_dedupe.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/cli/test_mcp_integration.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/cli/test_mcp_launcher.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/cli/test_mcp_runtime_compatibility.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/cli/test_mcp_simulation.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/cli/test_mcp_visualization.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/cli/test_plugin_installer.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/compression/compression_helpers.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/compression/test_attribution.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/compression/test_context_detectors.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/compression/test_estimators.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/compression/test_jobs.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/compression/test_models.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/compression/test_output_detectors.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/compression/test_repetition_detectors.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/compression/test_run_builder.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/compression/test_simulator.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/compression/test_streaming_evidence.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/context/test_context_action_timing.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/context/test_context_evidence.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/context/test_context_scan.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/context/test_context_serialized.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/context/test_context_source_scan.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/context/test_context_summaries.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/context/test_context_token_estimates.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/context/test_context_values.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/core/test_call_origin.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/core/test_command_parsing.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/core/test_formatting.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/core/test_i18n.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/core/test_json_contracts.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/core/test_privacy.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/core/test_projects.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/core/test_redaction.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/core/test_threads.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/core/test_usage_identity.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/dashboard/dashboard_node_test_helpers.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/dashboard/test_dashboard_compression_server.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/dashboard/test_dashboard_data.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/dashboard/test_dashboard_diagnostics_snapshots.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/dashboard/test_dashboard_live.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/dashboard/test_dashboard_payload_privacy.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/dashboard/test_dashboard_pricing_snapshot.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/dashboard/test_dashboard_server.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/dashboard/test_dashboard_state.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/dashboard/test_dashboard_status.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/diagnostics/test_diagnostic_fact_classifiers.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/diagnostics/test_diagnostic_reports.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/diagnostics/test_diagnostic_snapshot_events.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/diagnostics/test_diagnostic_snapshot_progress.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/diagnostics/test_diagnostic_snapshot_report.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/diagnostics/test_diagnostic_snapshot_source_scan.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/diagnostics/test_diagnostic_snapshots.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/diagnostics/test_doctor_first_run.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/diagnostics/test_module_exports.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/parser/test_parser.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/parser/test_parser_deduplication.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/parser/test_parser_inspect_log.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/parser/test_parser_observer.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/parser/test_parser_state.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/quality/test_static_analysis_policy.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/reports/test_action_brief.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/reports/test_action_brief_exports.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/reports/test_agentic_dogfood.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/reports/test_agentic_evidence.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/reports/test_agentic_exports.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/reports/test_discovery_exports.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/reports/test_hypothesis_classification.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/reports/test_hypothesis_evaluator_exports.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/reports/test_hypothesis_routing.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/reports/test_indexed_recommendations.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/reports/test_investigation_walk_exports.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/reports/test_query_exports.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/reports/test_recommendations.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/reports/test_visualization.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/server/test_analysis_jobs.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/server/test_compression_routes.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/server/test_diagnostic_jobs.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/server/test_query_cache.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/server/test_refresh_jobs.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/server/test_refresh_routes.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/server/test_request_timing.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/server/test_route_inventory.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/server/test_server_allowance.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/server/test_server_allowance_v2.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/server/test_server_call_lists.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/server/test_server_context.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/server/test_server_context_settings.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/server/test_server_dashboard_shell.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/server/test_server_dedupe.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/server/test_server_diagnostic_facts.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/server/test_server_diagnostic_refresh_auth.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/server/test_server_diagnostic_snapshots.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/server/test_server_investigations.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/server/test_server_live_queries.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/server/test_server_live_rows.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/server/test_server_open_investigator.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/server/test_server_recommendations.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/server/test_server_request_guards.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/server/test_server_responses.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/server/test_server_routes.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/server/test_server_status.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/server/test_server_summary.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/server/test_server_threads.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/server/test_server_usage_refresh.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/store/test_allowance_intelligence_queries.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/store/test_allowance_materialization.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/store/test_allowance_observations.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/store/test_compression_evidence.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/store/test_compression_facts.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/store/test_compression_publication.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/store/test_compression_revisions.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/store/test_content_index.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/store/test_content_index_refresh.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/store/test_recommendation_facts.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/store/test_recommendation_queries.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/store/test_refresh_callbacks.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/store/test_refresh_parallel.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/store/test_store_dashboard_queries.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/store/test_store_large_batches.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/store/test_store_query_sql.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/store/test_usage_deduplication.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/store/test_usage_deduplication_migration.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/store_dashboard_helpers.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/test_check_dashboard_source_budgets.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/usage_drain/model_test_helpers.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/usage_drain/test_usage_drain_allowance_fits.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/usage_drain/test_usage_drain_boundary_delta.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/usage_drain/test_usage_drain_boundary_delta_summary.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/usage_drain/test_usage_drain_boundary_summary.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/usage_drain/test_usage_drain_error_diagnostics.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/usage_drain/test_usage_drain_feature_history.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/usage_drain/test_usage_drain_one_percent_capacity.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/usage_drain/test_usage_drain_predictive.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/usage_drain/test_usage_drain_regime_segments.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/usage_drain/test_usage_drain_regression.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/usage_drain/test_usage_drain_report_helpers.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/usage_drain/test_usage_drain_report_records.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/usage_drain/test_usage_drain_reports.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/usage_drain/test_usage_drain_state_buckets.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/usage_drain/test_usage_drain_state_diagnostics.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/usage_drain/test_usage_drain_summary_metrics.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/usage_drain/test_usage_drain_thread_curves.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/usage_drain/test_usage_drain_token_components.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/usage_drain/test_usage_drain_transition_gates.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/usage_drain/test_usage_drain_transition_metrics.py +0 -0
- {codex_usage_tracking-0.19.0 → codex_usage_tracking-0.21.0}/tests/usage_drain/test_usage_drain_walk_forward.py +0 -0
|
@@ -2,6 +2,40 @@
|
|
|
2
2
|
|
|
3
3
|
## Unreleased
|
|
4
4
|
|
|
5
|
+
## 0.21.0 - 2026-07-17
|
|
6
|
+
|
|
7
|
+
- Keep the macOS dashboard available at a stable, localhost-only URL with a
|
|
8
|
+
login LaunchAgent, explicit port-collision handling, health checks, and
|
|
9
|
+
install, status, and uninstall commands.
|
|
10
|
+
- Preserve responsive inline thread expansion while bounding initial work and
|
|
11
|
+
polishing progressive call loading, retry behavior, and row presentation.
|
|
12
|
+
- Preserve full-width Windows filesystem identifiers so distinct sources do
|
|
13
|
+
not collapse during aggregate usage ingestion.
|
|
14
|
+
- Ingest aggregate `response.completed` telemetry from local
|
|
15
|
+
`codex-completions*.jsonl` exporter files and conservatively reconcile exact
|
|
16
|
+
Fast/Standard service-tier evidence to canonical calls without retaining raw
|
|
17
|
+
response bodies or arbitrary OTLP attributes.
|
|
18
|
+
- Show exact service tier separately from the existing Fast proxy in Calls,
|
|
19
|
+
details, and CSV exports; older or unmatched history remains Unknown.
|
|
20
|
+
- Apply documented model-family Fast multipliers to confirmed Codex credit
|
|
21
|
+
estimates with source URL/date/confidence and local overrides while leaving
|
|
22
|
+
standard-credit allowance calibration unchanged.
|
|
23
|
+
- Cache Standard, Batch, Flex, and Priority API pricing together, select the
|
|
24
|
+
observed tier per call, and expose Standard/Priority cost scenarios plus an
|
|
25
|
+
explicit local billing basis without applying ChatGPT Fast multipliers to API
|
|
26
|
+
USD estimates.
|
|
27
|
+
- Preserve exact response tiers in dashboard labels and CSV contracts, clear
|
|
28
|
+
OTel staging on confirmed database reset, and make incremental source cursors
|
|
29
|
+
descriptor-safe across concurrent file rotation. Verify a bounded content
|
|
30
|
+
anchor before resuming so same-inode rewrites cannot silently skip telemetry.
|
|
31
|
+
|
|
32
|
+
## 0.20.0 - 2026-07-16
|
|
33
|
+
|
|
34
|
+
- Reinvent the Threads tab around inline row expansion, progressively loading and virtualizing every call in the selected thread while preserving explicit investigator actions, deep links, responsive layouts, retry recovery, and aggregate-first privacy boundaries.
|
|
35
|
+
- Complete the Simplified Chinese dashboard experience across React views, visualization metadata, tables, accessibility text, CLI help, and dashboard lifecycle messages while preserving user-provided data verbatim.
|
|
36
|
+
- Improve the Overview token-flow chart at constrained desktop widths with a taller single-column layout, larger Sankey node gaps, and label-safe padding; keep virtualized evidence-table actions on one row.
|
|
37
|
+
- Apply official long-context input, cached-input, and output price multipliers to concrete calls above 272K input tokens when the selected OpenAI service tier publishes long-context rates, while keeping aggregate summaries from being incorrectly thresholded.
|
|
38
|
+
|
|
5
39
|
## 0.19.0 - 2026-07-15
|
|
6
40
|
|
|
7
41
|
- Redesign Limits Intelligence around weekly credits-per-percentage capacity
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: codex-usage-tracking
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.21.0
|
|
4
4
|
Summary: Unofficial local Codex plugin and dashboard for investigating aggregate token usage, costs, caching, and thread patterns.
|
|
5
5
|
Author: Douglas Monsky
|
|
6
6
|
License-Expression: MIT
|
|
@@ -237,12 +237,12 @@ The tracker cannot read your logged-in ChatGPT plan or live remaining usage auto
|
|
|
237
237
|
|
|
238
238
|
- Local SQLite index at `~/.codex-usage-tracker/usage.sqlite3`.
|
|
239
239
|
- Static dashboard generation plus localhost live refresh.
|
|
240
|
-
- `Overview`, `Investigate`, `Calls`, `Threads`, `Limits`, and `Diagnostics` dashboard views, including evidence-graded weekly allowance analysis and on-demand usage-drain report runs.
|
|
240
|
+
- `Overview`, `Investigate`, `Calls`, `Threads`, `Limits`, and `Diagnostics` dashboard views, including responsive token-flow visualization, evidence-graded weekly allowance analysis, and on-demand usage-drain report runs.
|
|
241
241
|
- Active-only dashboards by default, with an explicit `All history` toggle for archived sessions.
|
|
242
242
|
- CLI summaries, queries, CSV export, dashboard generation, doctor checks, and support bundles.
|
|
243
243
|
- MCP tools for Codex sessions that want to query local usage data.
|
|
244
244
|
- Companion Codex skills for operational setup and conversational usage analysis.
|
|
245
|
-
- Optional local pricing, Codex credit, allowance, threshold, project alias, and privacy-mode configuration.
|
|
245
|
+
- Optional local pricing, Codex credit, allowance, threshold, project alias, and privacy-mode configuration, including per-call long-context pricing above 272K input tokens for OpenAI service tiers that publish long-context rates.
|
|
246
246
|
|
|
247
247
|
## Dashboard Language
|
|
248
248
|
|
|
@@ -262,7 +262,7 @@ CODEX_USAGE_TRACKER_LANG=vi codex-usage-tracker serve-dashboard --open
|
|
|
262
262
|
|
|
263
263
|
The dashboard also includes a language selector. Browser selections are stored locally and can override the generated default for that browser.
|
|
264
264
|
|
|
265
|
-
Supported dashboard locales include English, Vietnamese, Spanish, French, German, Portuguese, Japanese, Simplified Chinese, Korean, Russian, Italian, and Arabic.
|
|
265
|
+
Supported dashboard locales include English, Vietnamese, Spanish, French, German, Portuguese, Japanese, Simplified Chinese, Korean, Russian, Italian, and Arabic. Simplified Chinese also localizes CLI help and dashboard lifecycle messages. Localization never rewrites raw Codex log content, thread names, project names, paths, or data exports.
|
|
266
266
|
|
|
267
267
|
### Adding A Dashboard Language
|
|
268
268
|
|
|
@@ -189,12 +189,12 @@ The tracker cannot read your logged-in ChatGPT plan or live remaining usage auto
|
|
|
189
189
|
|
|
190
190
|
- Local SQLite index at `~/.codex-usage-tracker/usage.sqlite3`.
|
|
191
191
|
- Static dashboard generation plus localhost live refresh.
|
|
192
|
-
- `Overview`, `Investigate`, `Calls`, `Threads`, `Limits`, and `Diagnostics` dashboard views, including evidence-graded weekly allowance analysis and on-demand usage-drain report runs.
|
|
192
|
+
- `Overview`, `Investigate`, `Calls`, `Threads`, `Limits`, and `Diagnostics` dashboard views, including responsive token-flow visualization, evidence-graded weekly allowance analysis, and on-demand usage-drain report runs.
|
|
193
193
|
- Active-only dashboards by default, with an explicit `All history` toggle for archived sessions.
|
|
194
194
|
- CLI summaries, queries, CSV export, dashboard generation, doctor checks, and support bundles.
|
|
195
195
|
- MCP tools for Codex sessions that want to query local usage data.
|
|
196
196
|
- Companion Codex skills for operational setup and conversational usage analysis.
|
|
197
|
-
- Optional local pricing, Codex credit, allowance, threshold, project alias, and privacy-mode configuration.
|
|
197
|
+
- Optional local pricing, Codex credit, allowance, threshold, project alias, and privacy-mode configuration, including per-call long-context pricing above 272K input tokens for OpenAI service tiers that publish long-context rates.
|
|
198
198
|
|
|
199
199
|
## Dashboard Language
|
|
200
200
|
|
|
@@ -214,7 +214,7 @@ CODEX_USAGE_TRACKER_LANG=vi codex-usage-tracker serve-dashboard --open
|
|
|
214
214
|
|
|
215
215
|
The dashboard also includes a language selector. Browser selections are stored locally and can override the generated default for that browser.
|
|
216
216
|
|
|
217
|
-
Supported dashboard locales include English, Vietnamese, Spanish, French, German, Portuguese, Japanese, Simplified Chinese, Korean, Russian, Italian, and Arabic.
|
|
217
|
+
Supported dashboard locales include English, Vietnamese, Spanish, French, German, Portuguese, Japanese, Simplified Chinese, Korean, Russian, Italian, and Arabic. Simplified Chinese also localizes CLI help and dashboard lifecycle messages. Localization never rewrites raw Codex log content, thread names, project names, paths, or data exports.
|
|
218
218
|
|
|
219
219
|
### Adding A Dashboard Language
|
|
220
220
|
|
|
@@ -17,6 +17,15 @@ Shareable outputs remain aggregate-first and must omit indexed/raw content unles
|
|
|
17
17
|
## Boundaries
|
|
18
18
|
|
|
19
19
|
- `parser.py` converts local JSONL events into aggregate `UsageEvent` records. It also attaches metadata-only call-origin categories, diagnostic facts from `diagnostic_facts.py`, archived-session flags, conservative thread keys, source cursors, and parser diagnostics.
|
|
20
|
+
- `parser/otel.py`, `store/otel_ingest.py`, and `store/otel_reconciliation.py`
|
|
21
|
+
provide aggregate-only completion enrichment from local
|
|
22
|
+
`~/.codex-usage-tracker/otel/codex-completions*.jsonl` files. The importer
|
|
23
|
+
retains only approved completion identifiers, token counters, model/effort,
|
|
24
|
+
application version, and service-tier metadata; response bodies and arbitrary
|
|
25
|
+
OTLP attributes are never persisted. Reconciliation requires one canonical
|
|
26
|
+
call group with the same conversation id and all four token counters. Model
|
|
27
|
+
and effort narrow a match when both sides provide them, but timestamps are not
|
|
28
|
+
identity evidence.
|
|
20
29
|
- `store/content_index.py` owns normalized local content-index population and cleanup. It may persist bounded local snippets, tool-call metadata, command roots/labels, file path hashes/basenames, parser adapter metadata, source provenance, parse warnings, and FTS5 search rows. Investigation/report builders may persist bounded run summaries in `investigation_runs`. These surfaces must not feed raw/indexed content into default CSV, dashboard HTML, support bundle, or aggregate report payloads.
|
|
21
30
|
- `call_origin.py` owns the pure call-origin classifier and migrated-row fallback. It must not open source JSONL files; source-log reads belong in refresh/indexing or explicit context loading.
|
|
22
31
|
- `schema.py` owns persisted SQLite columns and migrations. Add columns or tables there before changing refresh, export, or MCP behavior.
|
|
@@ -62,6 +71,10 @@ Shareable outputs remain aggregate-first and must omit indexed/raw content unles
|
|
|
62
71
|
totals through `canonical_usage_events`. New physical-row investigation
|
|
63
72
|
surfaces must be bounded, explicitly labeled, and tested against an
|
|
64
73
|
original/copy/new-call fixture.
|
|
74
|
+
15. Treat service tier as exact only when a completion explicitly reports it, or
|
|
75
|
+
when Codex `0.143.0` or newer omits it under the documented Standard
|
|
76
|
+
protocol. Older or unmatched calls remain Unknown. Latency and reasoning
|
|
77
|
+
effort are useful throughput signals, not proof of Fast usage.
|
|
65
78
|
|
|
66
79
|
Normal aggregate responses use a 64-entry, 256-KiB-per-entry process cache.
|
|
67
80
|
Allowance history and diagnostics use a separate four-entry, 8-MiB-per-entry
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1466,4 +1466,38 @@ Most setup and file-writing commands accept `--json` and return a schema-specifi
|
|
|
1466
1466
|
- `init-thresholds --json`, `init-projects --json`
|
|
1467
1467
|
- `support-bundle --json`
|
|
1468
1468
|
|
|
1469
|
+
Refresh and rebuild payloads add bounded OTel counters under
|
|
1470
|
+
`parser_diagnostics`: `otel_files_scanned`, `otel_imported`,
|
|
1471
|
+
`otel_duplicates`, `otel_matched`, `otel_pending`, `otel_ambiguous`, and
|
|
1472
|
+
`otel_conflicts` (zero-valued counters may be omitted from the immediate JSON
|
|
1473
|
+
payload). Stored refresh metadata keeps the same keys with zero defaults so
|
|
1474
|
+
localhost status is stable. These surfaces never expose OTel source paths,
|
|
1475
|
+
semantic fingerprints, response bodies, arbitrary attributes, or staging ids.
|
|
1476
|
+
|
|
1477
|
+
Aggregate call rows may add nullable `service_tier`, `fast`,
|
|
1478
|
+
`service_tier_source`, and `service_tier_confidence` fields. `service_tier`
|
|
1479
|
+
preserves the exact normalized response value such as `priority`, `default`,
|
|
1480
|
+
`standard`, `flex`, or `batch`; `fast` is the derived speed classification.
|
|
1481
|
+
|
|
1482
|
+
Cost-annotated rows may add `standard_cost_usd`, `priority_cost_usd`,
|
|
1483
|
+
`pricing_service_tier`, `billing_basis`, and
|
|
1484
|
+
`cost_semantics="api_token_estimate"`. `estimated_cost_usd` remains the
|
|
1485
|
+
API-token-equivalent estimate selected from the observed tier when pricing-v2
|
|
1486
|
+
contains that table. `billing_basis` is `unknown`, `chatgpt_credits`, or
|
|
1487
|
+
`api_tokens` and describes applicability rather than changing the observed tier.
|
|
1488
|
+
|
|
1489
|
+
Credit-annotated rows may also add `standard_usage_credits`,
|
|
1490
|
+
`fast_usage_credits`, `usage_credit_multiplier`,
|
|
1491
|
+
`usage_credit_multiplier_source`, `usage_credit_multiplier_source_url`,
|
|
1492
|
+
`usage_credit_multiplier_fetched_at`, and
|
|
1493
|
+
`usage_credit_multiplier_confidence`. These are ChatGPT-equivalent credit
|
|
1494
|
+
scenarios and are never used as generic multipliers for API USD. `fast: null`
|
|
1495
|
+
means Unknown; clients must not replace it with the separate throughput proxy.
|
|
1496
|
+
CSV export includes the exact tier, both scenario families, multiplier
|
|
1497
|
+
provenance, and the separately named proxy candidate.
|
|
1498
|
+
|
|
1499
|
+
`rebuild-index` retains aggregate OTel staging for reconciliation. Confirmed
|
|
1500
|
+
`reset-db --yes` clears both `otel_completion_events` and
|
|
1501
|
+
`otel_completion_sources` along with the other tracker-owned rows.
|
|
1502
|
+
|
|
1469
1503
|
`context` already returns JSON because it is an explicit on-demand context request. Treat `codex-usage-tracker-context-v1` output as sensitive local context even though it is redacted and size-limited by default. `max_entries=0` requests all matching entries and `max_chars=0` removes the character cap for that explicit request. Tool output and compacted replacement history are omitted unless explicitly requested. Compaction entries may include metadata such as `replacement_history_available`, `replacement_entry_count`, and `replacement_history_included`; replacement text appears only when `include_compaction_history` is true for that local request. Evidence responses include `action_timing`, derived from timestamps in the same selected-turn source scan, plus per-entry `action_timing` fields such as `since_turn_start_ms`, `since_previous_entry_ms`, and `reported_duration_ms` when available. MCP returns `codex-usage-tracker-context-disabled-v1` when raw context loading has not been explicitly enabled with `CODEX_USAGE_TRACKER_ALLOW_RAW_CONTEXT=1`.
|
|
@@ -81,6 +81,26 @@ codex-usage-tracker serve-dashboard --no-refresh --open
|
|
|
81
81
|
codex-usage-tracker serve-dashboard --no-context-api --open
|
|
82
82
|
```
|
|
83
83
|
|
|
84
|
+
Keep the live dashboard available across terminal and Codex task lifetimes on
|
|
85
|
+
macOS with the user LaunchAgent commands:
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
codex-usage-tracker dashboard-service install
|
|
89
|
+
codex-usage-tracker dashboard-service status
|
|
90
|
+
codex-usage-tracker dashboard-service uninstall
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
The persistent service defaults to `http://127.0.0.1:47821`, starts at login,
|
|
94
|
+
restarts after failure, and never opens a browser automatically. Installation
|
|
95
|
+
refuses an occupied port rather than silently changing the URL; use
|
|
96
|
+
`dashboard-service install --port PORT` for an explicit alternative. These
|
|
97
|
+
management actions are macOS-only. The foreground `serve-dashboard` command is
|
|
98
|
+
cross-platform and keeps its existing default port `8765`.
|
|
99
|
+
|
|
100
|
+
The persistent process starts with the cached aggregate index so the fixed URL
|
|
101
|
+
binds promptly. Its Refresh and Live controls remain the explicit way to rescan
|
|
102
|
+
Codex logs.
|
|
103
|
+
|
|
84
104
|
`serve-dashboard --context-api explicit` is the default and keeps context loading as an explicit per-row action. `serve-dashboard --no-context-api` or `--context-api disabled` starts with context loading off; a token-protected button in the local details panel can enable it without restarting the server.
|
|
85
105
|
|
|
86
106
|
`open-dashboard` and `serve-dashboard` refresh active-session logs before opening by default. `serve-dashboard --open` opens the React dashboard; the legacy dashboard remains available at `/dashboard.html` on the same localhost server. Use `--no-refresh` only for an intentionally cached snapshot. The lower-level `dashboard` command writes from the current SQLite index and does not rescan logs.
|
|
@@ -6,15 +6,37 @@ This guide uses synthetic aggregate data. The screenshots do not contain real pr
|
|
|
6
6
|
|
|
7
7
|
## Open The Dashboard
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
On macOS, install the persistent localhost dashboard once:
|
|
10
10
|
|
|
11
11
|
```bash
|
|
12
12
|
codex-usage-tracker setup
|
|
13
13
|
codex-usage-tracker update-pricing
|
|
14
14
|
codex-usage-tracker update-rate-card
|
|
15
|
+
codex-usage-tracker dashboard-service install
|
|
16
|
+
codex-usage-tracker dashboard-service status
|
|
17
|
+
open http://127.0.0.1:47821
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
The LaunchAgent starts at login, restarts after a failure, stays bound to
|
|
21
|
+
`127.0.0.1`, and does not open browser tabs automatically. If port `47821` is
|
|
22
|
+
already owned by another process, installation refuses the collision; use
|
|
23
|
+
`dashboard-service install --port PORT` to choose and persist a different
|
|
24
|
+
address. Remove the managed service with
|
|
25
|
+
`codex-usage-tracker dashboard-service uninstall`.
|
|
26
|
+
|
|
27
|
+
Persistent startup serves the cached aggregate index immediately. Use Refresh
|
|
28
|
+
or Live in the dashboard to rescan Codex logs after the page is reachable.
|
|
29
|
+
|
|
30
|
+
For Linux, Windows, or an on-demand macOS session, run the foreground server:
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
codex-usage-tracker setup
|
|
15
34
|
codex-usage-tracker serve-dashboard --open
|
|
16
35
|
```
|
|
17
36
|
|
|
37
|
+
The foreground command retains its existing default port `8765` and stops when
|
|
38
|
+
its process exits.
|
|
39
|
+
|
|
18
40
|
For optional allowance context, initialize a local template and copy values from Codex Usage or `/status`:
|
|
19
41
|
|
|
20
42
|
```bash
|
|
@@ -83,6 +105,7 @@ Open `Overview` when you want a quick read on current aggregate usage before sor
|
|
|
83
105
|
- Metric cards summarize loaded aggregate rows without exposing prompts, assistant text, or raw tool output.
|
|
84
106
|
- Default totals exclude only strict clone/copy fingerprint matches while preserving every physical source row in the local index. The environment status strip shows how many copied rows were excluded; hover it to compare canonical and physical row counts.
|
|
85
107
|
- Time-series charts open on the most recent dates first and can scroll left for earlier history while keeping the value axis visible.
|
|
108
|
+
- At constrained desktop widths, the analysis charts stack so the token-flow diagram keeps readable label spacing; fixed-height evidence rows keep their action buttons on one line.
|
|
86
109
|
- `Usage constellation` maps chronology, token volume, cache reuse, model family, waste pressure, and thread continuity in a lazy 3D view. Select a point to open Call Investigator, or switch to the synchronized evidence table for keyboard review and non-WebGL environments.
|
|
87
110
|
- `Recent Calls` keeps the homepage modular: it shows the latest matching calls and lets any row open Call Investigator directly.
|
|
88
111
|
- Use `Investigate` or `Calls` when you need deeper ranking, filtering, or evidence review.
|
|
@@ -116,6 +139,11 @@ Use `Calls` view when you want to inspect individual model calls.
|
|
|
116
139
|
- Time values are shown in your browser's local date/time format while sorting and time filtering still use the logged timestamp.
|
|
117
140
|
- Calls include `Duration`, derived from turn start for a new turn or the previous same-turn call end for continuations, and `Prev gap`, the elapsed time since the previous call in the resolved thread.
|
|
118
141
|
- Calls view token columns separate total tokens, cached input, uncached input, and output so the accounting can be scanned without expanding a row.
|
|
142
|
+
- The `Service Tier` column preserves the exact response value with distinct
|
|
143
|
+
labels for Priority/Fast, Fast, Default/Standard, Standard, Flex, Batch, and
|
|
144
|
+
other bounded explicit tiers. It shows `Unknown` when completion telemetry is
|
|
145
|
+
absent. The detail view keeps the older throughput heuristic labeled as a
|
|
146
|
+
separate Fast proxy candidate rather than historical proof.
|
|
119
147
|
- Source pucks are call-level estimates derived from local event metadata. `User` means the token-count segment included a user message, `Codex` means it followed tool output, compaction, or agent-continuation metadata, and `Unknown` means the source event metadata was unavailable or ambiguous.
|
|
120
148
|
- Click a column header like `Time`, `Thread`, `Tokens`, `Cost`, or `Cache` to sort. Use the sort menu for `Highest Codex credits`. Click the same header again to reverse the direction.
|
|
121
149
|
- Hover a row to scan a compact aggregate preview in `Call Details`; click a Calls row to open the dedicated call investigator.
|
|
@@ -135,6 +163,16 @@ Useful interpretation notes:
|
|
|
135
163
|
- `Cached input` and `Uncached input` are split so cache behavior is visible without storing transcript text.
|
|
136
164
|
- A cost with `*` means the pricing row is marked as a best-guess estimate.
|
|
137
165
|
- Codex credits are estimated from aggregate input, cached-input, and output token counters. Direct model matches use the bundled OpenAI Codex rate-card snapshot; inferred labels are marked estimated, and local credit-rate overrides are marked user-provided.
|
|
166
|
+
- Confirmed Fast rows apply the source-stamped model-family multiplier to
|
|
167
|
+
ChatGPT-equivalent Codex credits. API-equivalent USD estimates instead select
|
|
168
|
+
the exact API tier table; the cost detail identifies whether the configured
|
|
169
|
+
billing basis is API tokens, ChatGPT credits, or Unknown without claiming
|
|
170
|
+
actual spend when the basis is unknown.
|
|
171
|
+
- CSV exports include exact tier/provenance, the separate Fast proxy,
|
|
172
|
+
Standard/Priority API cost scenarios, Standard/Fast credit scenarios,
|
|
173
|
+
`billing_basis`, and credit multiplier source URL/date/confidence. Missing
|
|
174
|
+
exact tier evidence remains blank/Unknown instead of being reconstructed from
|
|
175
|
+
duration or reasoning effort.
|
|
138
176
|
- `Usage observed` is not a live account query. It uses the latest local Codex `token_count.rate_limits` snapshot when present; otherwise configure `~/.codex-usage-tracker/allowance.json` with values copied from Codex Settings > Usage, the Codex Usage dashboard, or `/status` when you want current remaining allowance context.
|
|
139
177
|
|
|
140
178
|
## Threads View
|
|
@@ -146,16 +184,19 @@ Use `Threads` view when you want to understand a work session as a group instead
|
|
|
146
184
|
- Threads pages through `/api/threads` on localhost and hydrates the selected
|
|
147
185
|
thread's supporting calls through `/api/thread-calls`; loaded snapshot rows
|
|
148
186
|
remain the fallback.
|
|
149
|
-
-
|
|
150
|
-
|
|
151
|
-
|
|
187
|
+
- Click a thread row to load the first 100 aggregate calls directly beneath it.
|
|
188
|
+
- Only one thread stays expanded at a time.
|
|
189
|
+
- The compact default keeps the most useful comparison columns visible; use
|
|
190
|
+
`Columns` to reveal duration, model/effort mix, token breakdowns, and other
|
|
191
|
+
advanced fields without making the default leaderboard excessively wide.
|
|
192
|
+
- Use `Load 100 more` to request each additional page; visible progress and retry
|
|
193
|
+
keep large threads bounded and recoverable.
|
|
194
|
+
- Parent rows never open a representative call.
|
|
195
|
+
- Explicit child `Open` and `Copy` actions reach Call Investigator.
|
|
196
|
+
- Cache Frontier and Lifecycle remain secondary analysis modes.
|
|
152
197
|
- Each thread row groups the filtered model calls by thread name, falling back to session id when no name is available.
|
|
153
198
|
- Thread rows show latest activity, call count, model mix, effort mix, total tokens, estimated cost, Codex credits, cache ratio, and signal count.
|
|
154
199
|
- Mixed model summaries prefer the primary non-review model; `codex-auto-review` appears as the thread model only for review-only threads.
|
|
155
|
-
- Hover or keyboard-select a thread to scan its aggregate inspector. Activating
|
|
156
|
-
a row opens the latest supporting call in Call Investigator.
|
|
157
|
-
- The inspector's call timeline supports independent sorting, incremental
|
|
158
|
-
disclosure, copy-link actions, and direct Call Investigator navigation.
|
|
159
200
|
- Subagents with logged parent session ids are shown under the parent thread. Auto-review sessions without explicit parent ids may be attached by cwd and nearby activity and are marked as attached or inferred in the details.
|
|
160
201
|
|
|
161
202
|
### Tools And Files Explorers
|
|
@@ -32,6 +32,39 @@ identity, parser coverage, replacement, and refresh revision. Changing or removi
|
|
|
32
32
|
a source causes its owned physical rows/materializations to be replaced in a
|
|
33
33
|
transaction rather than accumulated blindly.
|
|
34
34
|
|
|
35
|
+
## OTel Service-Tier Enrichment (Schemas 30–31)
|
|
36
|
+
|
|
37
|
+
Schema 30 adds nullable `service_tier`, `fast`, `service_tier_source`, and
|
|
38
|
+
`service_tier_confidence` columns to `usage_events`. Null means the tracker does
|
|
39
|
+
not have exact tier evidence; it is not interpreted as Standard.
|
|
40
|
+
|
|
41
|
+
`otel_completion_sources` records device/inode identity, size, the last complete
|
|
42
|
+
byte and line cursor, a bounded SHA-256 resume anchor, and an update timestamp
|
|
43
|
+
for each local `codex-completions*.jsonl` file. The default directory is the
|
|
44
|
+
`otel` sibling of the selected database (`~/.codex-usage-tracker/otel` for the
|
|
45
|
+
default database), so alternate databases do not ingest another tracker
|
|
46
|
+
instance's telemetry.
|
|
47
|
+
`otel_completion_events` stores one semantic
|
|
48
|
+
fingerprint plus aggregate matching fields, the exact normalized response tier,
|
|
49
|
+
derived Fast classification, tier provenance, a
|
|
50
|
+
bounded match status (`pending`, `matched`, `ambiguous`, `conflict`, or
|
|
51
|
+
`invalid`), and the matched aggregate record id when available.
|
|
52
|
+
|
|
53
|
+
Append refresh resumes after the last complete JSONL line, retries a partial
|
|
54
|
+
trailing line, and restarts a cursor after rotation, truncation, or a mismatched
|
|
55
|
+
resume anchor. Schema 31 adds the anchor; a legacy cursor without one is safely
|
|
56
|
+
reread once and then anchored. Cursor identity, size, offsets, and anchor bytes
|
|
57
|
+
come from the open descriptor so a path rotation or same-inode replacement
|
|
58
|
+
cannot persist an offset against different content. Rebuild keeps
|
|
59
|
+
the aggregate OTel staging rows, resets their match pointers, and reconciles
|
|
60
|
+
them against the rebuilt canonical calls. A match requires conversation id plus
|
|
61
|
+
input, cached-input, output, and reasoning-output counters to resolve to exactly
|
|
62
|
+
one canonical group. Existing contradictory tier values are preserved and the
|
|
63
|
+
completion is marked as a conflict.
|
|
64
|
+
|
|
65
|
+
`reset-db --yes` is intentionally different from rebuild: it deletes both OTel
|
|
66
|
+
staging tables and their source cursors along with the other tracker-owned rows.
|
|
67
|
+
|
|
35
68
|
## Allowance Intelligence Materializations
|
|
36
69
|
|
|
37
70
|
`allowance_observations` stores normalized structured weekly and 5-hour snapshots,
|
|
@@ -68,7 +101,7 @@ Identical keys reuse a completed snapshot or the same in-flight job.
|
|
|
68
101
|
|
|
69
102
|
## Privacy And Rebuilds
|
|
70
103
|
|
|
71
|
-
Allowance materializations and logical identity contain aggregate metadata only.
|
|
104
|
+
Allowance materializations, OTel completion staging, and logical identity contain aggregate metadata only.
|
|
72
105
|
They do not contain prompts, assistant text, tool output, or raw JSONL content.
|
|
73
106
|
Rebuilds can recreate them from physical aggregate rows and source provenance.
|
|
74
107
|
The local content index is a separate opt-in investigation layer and is not used
|
|
@@ -174,8 +174,8 @@ python scripts/smoke_installed_package.py --docker
|
|
|
174
174
|
To verify the public PyPI package instead of the local checkout:
|
|
175
175
|
|
|
176
176
|
```bash
|
|
177
|
-
python scripts/smoke_installed_package.py --from-pypi --version 0.
|
|
178
|
-
python scripts/smoke_installed_package.py --docker --from-pypi --version 0.
|
|
177
|
+
python scripts/smoke_installed_package.py --from-pypi --version 0.21.0
|
|
178
|
+
python scripts/smoke_installed_package.py --docker --from-pypi --version 0.21.0
|
|
179
179
|
```
|
|
180
180
|
|
|
181
181
|
`scripts/check_release.py` treats these public-package smoke commands as release-state claims. Keep their `--version` and `codex-usage-tracking==...` values aligned with `pyproject.toml`; the release gate fails when the docs claim a different public version. It also checks that install docs point at the real PyPI distribution, `codex-usage-tracking`, and keep the warning that `codex-usage-tracker` is a different PyPI package.
|
|
@@ -11,9 +11,15 @@ python -m pip install --user pipx
|
|
|
11
11
|
python -m pipx ensurepath
|
|
12
12
|
pipx install codex-usage-tracking
|
|
13
13
|
codex-usage-tracker setup
|
|
14
|
-
codex-usage-tracker
|
|
14
|
+
codex-usage-tracker dashboard-service install # macOS
|
|
15
15
|
```
|
|
16
16
|
|
|
17
|
+
On macOS, the persistent service starts at login, restarts after a failure, and
|
|
18
|
+
keeps the live dashboard available at `http://127.0.0.1:47821` without opening
|
|
19
|
+
browser tabs automatically. Check it with
|
|
20
|
+
`codex-usage-tracker dashboard-service status`. On Linux and Windows, or for a
|
|
21
|
+
one-time macOS session, use `codex-usage-tracker serve-dashboard --open`.
|
|
22
|
+
|
|
17
23
|
Use the Python launcher that is normal for your platform:
|
|
18
24
|
|
|
19
25
|
- macOS/Linux: `python3` may be the right command instead of `python`.
|
|
@@ -112,6 +118,25 @@ codex-usage-tracker install-plugin --python .venv/bin/python --force
|
|
|
112
118
|
|
|
113
119
|
## Local Dashboard
|
|
114
120
|
|
|
121
|
+
On macOS, install the localhost-only login service once:
|
|
122
|
+
|
|
123
|
+
```bash
|
|
124
|
+
codex-usage-tracker dashboard-service install
|
|
125
|
+
codex-usage-tracker dashboard-service status
|
|
126
|
+
open http://127.0.0.1:47821
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
The service uses fixed port `47821` by default and never exposes a non-loopback
|
|
130
|
+
host. If another local process owns that port, installation stops with a clear
|
|
131
|
+
error instead of changing the URL; choose an explicit alternative with
|
|
132
|
+
`codex-usage-tracker dashboard-service install --port PORT`. To remove only the
|
|
133
|
+
tracker-managed LaunchAgent, run
|
|
134
|
+
`codex-usage-tracker dashboard-service uninstall`.
|
|
135
|
+
|
|
136
|
+
The login service binds promptly from the cached aggregate index. Use the
|
|
137
|
+
dashboard's Refresh or Live controls when you want to rescan Codex logs; the
|
|
138
|
+
initial background process does not hold the port closed during a full rescan.
|
|
139
|
+
|
|
115
140
|
Generate a static dashboard:
|
|
116
141
|
|
|
117
142
|
```bash
|
|
@@ -126,6 +151,9 @@ codex-usage-tracker serve-dashboard --open
|
|
|
126
151
|
codex-usage-tracker serve-dashboard --no-context-api --open
|
|
127
152
|
```
|
|
128
153
|
|
|
154
|
+
Foreground `serve-dashboard` remains the cross-platform, on-demand option and
|
|
155
|
+
retains its existing default port `8765`.
|
|
156
|
+
|
|
129
157
|
The server binds to localhost, requires a per-server token for refresh/context endpoints, and rejects non-loopback `Host` or cross-origin `Origin` headers.
|
|
130
158
|
`--no-context-api` starts context loading off; the details panel can enable it later without restarting the server.
|
|
131
159
|
|
|
@@ -24,12 +24,12 @@ Not guaranteed:
|
|
|
24
24
|
|
|
25
25
|
## 1. Public Install And Package Metadata
|
|
26
26
|
|
|
27
|
-
- [x] Verify the current public PyPI version is visible as `0.
|
|
28
|
-
- [x] Verify public venv install for `0.
|
|
29
|
-
- [x] Verify public pipx install path for `0.
|
|
27
|
+
- [x] Verify the current public PyPI version is visible as `0.21.0`: `python -c "import json, urllib.request; print(json.load(urllib.request.urlopen('https://pypi.org/pypi/codex-usage-tracking/json'))['info']['version'])"`.
|
|
28
|
+
- [x] Verify public venv install for `0.21.0`: `python -m venv /tmp/codex-usage-pypi-smoke && . /tmp/codex-usage-pypi-smoke/bin/activate && python -m pip install codex-usage-tracking==0.21.0 && codex-usage-tracker --version`.
|
|
29
|
+
- [x] Verify public pipx install path for `0.21.0`: `PIPX_HOME=/tmp/codex-usage-pipx-home PIPX_BIN_DIR=/tmp/codex-usage-pipx-bin pipx install codex-usage-tracking==0.21.0 && /tmp/codex-usage-pipx-bin/codex-usage-tracker --version`.
|
|
30
30
|
- [x] Verify installed package resources from a built wheel: `python scripts/smoke_installed_package.py`.
|
|
31
31
|
- [x] Verify installed package resources in Linux Docker: `python scripts/smoke_installed_package.py --docker`.
|
|
32
|
-
- [x] Verify public PyPI package in Docker: `python scripts/smoke_installed_package.py --docker --from-pypi --version 0.
|
|
32
|
+
- [x] Verify public PyPI package in Docker: `python scripts/smoke_installed_package.py --docker --from-pypi --version 0.21.0`.
|
|
33
33
|
- [x] Verify PyPI metadata names remain unchanged: `python scripts/check_release.py`.
|
|
34
34
|
- [x] Add Python 3.14 as an official support target after CI, package classifiers, docs, and installed-package smoke coverage were added. Docker smoke coverage uses `python:3.14-slim` by default. Track this in issue #12.
|
|
35
35
|
|
|
@@ -134,14 +134,14 @@ Not guaranteed:
|
|
|
134
134
|
|
|
135
135
|
## Evidence References
|
|
136
136
|
|
|
137
|
-
These references are the concrete proof behind completed checklist items. Public package smoke commands are version-specific to `0.
|
|
137
|
+
These references are the concrete proof behind completed checklist items. Public package smoke commands are version-specific to `0.21.0`; all repo tests use synthetic or aggregate-only data.
|
|
138
138
|
|
|
139
139
|
### Public Install And Package Metadata
|
|
140
140
|
|
|
141
141
|
- Public PyPI version, public venv install, and public pipx install are proven by the exact public-install commands in section 1.
|
|
142
142
|
- Built-wheel and installed-resource coverage is proven by `scripts/smoke_installed_package.py` and `tests/test_cli_release.py::test_installed_package_smoke_checks_help_for_stable_commands`.
|
|
143
143
|
- Linux package-resource coverage is proven by `scripts/smoke_installed_package.py --docker`.
|
|
144
|
-
- Public PyPI Docker coverage is proven by `scripts/smoke_installed_package.py --docker --from-pypi --version 0.
|
|
144
|
+
- Public PyPI Docker coverage is proven by `scripts/smoke_installed_package.py --docker --from-pypi --version 0.21.0`.
|
|
145
145
|
- PyPI metadata, package/distribution names, package resources, source/wheel member names, Python 3.10-3.14 support metadata, CI workflow requirements, publish workflow safety text, and tracked secret patterns are proven by `scripts/check_release.py`, `scripts/check_release.py --dist`, and `tests/test_cli_release.py::test_release_check_script_passes`.
|
|
146
146
|
|
|
147
147
|
### Upgrade And Migration
|
|
@@ -219,8 +219,8 @@ These references are the concrete proof behind completed checklist items. Public
|
|
|
219
219
|
- Publish workflow package name, Trusted Publishing, TestPyPI/PyPI job presence, event guards, no push/PR publishing, no token/password publishing, and manual PyPI main/tag preflight are proven by `scripts/check_release.py::_check_publish_workflow`.
|
|
220
220
|
- The GitHub `pypi` environment gate is proven by `gh api repos/douglasmonsky/codex-usage-tracker/environments/pypi`, which reports a `required_reviewers` protection rule and `can_admins_bypass=false`.
|
|
221
221
|
- Dist filename and wheel/sdist member checks are proven by `python -m build`, `python -m twine check dist/*`, and `python scripts/check_release.py --dist`.
|
|
222
|
-
- TestPyPI publish process is proven by a workflow-dispatch run on `main`, followed by TestPyPI metadata and clean virtualenv install checks for `codex-usage-tracking==0.
|
|
223
|
-
- PyPI publish process is proven by a workflow-dispatch run on `main`, protected `pypi` environment approval, PyPI metadata visibility, clean virtualenv install, temporary pipx install, and Docker public-package smoke for `codex-usage-tracking==0.
|
|
222
|
+
- TestPyPI publish process is proven by a workflow-dispatch run on `main`, followed by TestPyPI metadata and clean virtualenv install checks for `codex-usage-tracking==0.21.0`.
|
|
223
|
+
- PyPI publish process is proven by a workflow-dispatch run on `main`, protected `pypi` environment approval, PyPI metadata visibility, clean virtualenv install, temporary pipx install, and Docker public-package smoke for `codex-usage-tracking==0.21.0`.
|
|
224
224
|
- Release recovery documentation is proven by `scripts/check_release.py` required-file and docs checks.
|
|
225
225
|
|
|
226
226
|
### Known Limitations
|
|
@@ -14,7 +14,7 @@ Enable optional cost estimates:
|
|
|
14
14
|
codex-usage-tracker update-pricing
|
|
15
15
|
```
|
|
16
16
|
|
|
17
|
-
This fetches OpenAI text-token pricing from `https://developers.openai.com/api/docs/pricing.md
|
|
17
|
+
This fetches OpenAI text-token pricing from `https://developers.openai.com/api/docs/pricing.md` once, parses the `standard`, `batch`, `flex`, and `priority` tables, and writes a source-stamped pricing-v2 cache to `~/.codex-usage-tracker/pricing.json`. The top-level `models` object remains the selected-tier compatibility projection, while `api_service_tiers` retains every published table so mixed historical calls can be priced by their observed response tier.
|
|
18
18
|
|
|
19
19
|
The updater supports both the older four-value pricing rows and the newer five-value rows used by GPT-5.6 for input, cached input, cache writes, and output. GPT-5.6 Sol, Terra, and Luna are loaded from the published table, and the documented `gpt-5.6` alias resolves to `gpt-5.6-sol`. Current Codex logs do not expose a separate cache-write token counter, so cost estimates use the logged uncached input, cached input, and output counters without adding an explicit cache-write charge.
|
|
20
20
|
|
|
@@ -39,6 +39,20 @@ codex-usage-tracker init-pricing
|
|
|
39
39
|
|
|
40
40
|
Edit `~/.codex-usage-tracker/pricing.json` with USD-per-million-token rates for local overrides or models that are not present in the OpenAI pricing table. Normal reports never contact the network; only `update-pricing` refreshes the local pricing cache.
|
|
41
41
|
|
|
42
|
+
### Billing Basis And Tier Scenarios
|
|
43
|
+
|
|
44
|
+
OTel `service_tier=priority` proves the response tier, but it does not prove whether the call used ChatGPT/Codex credits or an API key. Set the top-level local `billing_basis` only when you know the billing path:
|
|
45
|
+
|
|
46
|
+
```json
|
|
47
|
+
{
|
|
48
|
+
"billing_basis": "unknown"
|
|
49
|
+
}
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
Supported values are `unknown`, `chatgpt_credits`, and `api_tokens`. `update-pricing` preserves this local value. Invalid values make the pricing config invalid instead of silently guessing.
|
|
53
|
+
|
|
54
|
+
`estimated_cost_usd` is always an API-token-equivalent estimate. With pricing-v2, it selects the exact observed API table for `priority`, `default`/`standard`, `flex`, or `batch`; it never applies a generic ChatGPT Fast multiplier. Each annotated row also exposes `standard_cost_usd`, `priority_cost_usd`, `pricing_service_tier`, `billing_basis`, and `cost_semantics` so an unknown billing path can be reported as bounded scenarios rather than false actual spend. Pricing-v1 files remain readable and keep their existing single-table behavior.
|
|
55
|
+
|
|
42
56
|
## Codex Credits
|
|
43
57
|
|
|
44
58
|
`Codex Credits` is a calculated usage number, not a dashboard-only unit. The tracker uses Codex's logged aggregate token counters and the bundled OpenAI Codex rate-card snapshot to estimate credits consumed by local Codex calls.
|
|
@@ -62,6 +76,34 @@ codex-usage-tracker update-rate-card
|
|
|
62
76
|
|
|
63
77
|
The local snapshot is written to `~/.codex-usage-tracker/rate-card.json`. Each bundled rate and alias includes source URL, fetched date, tier, confidence, and alias rationale where applicable. Use `--source-file` only when you have a reviewed replacement JSON snapshot you want the tracker to validate and use.
|
|
64
78
|
|
|
79
|
+
### Confirmed Fast Usage
|
|
80
|
+
|
|
81
|
+
When a call has exact OTel evidence that `fast=1`, the tracker first computes
|
|
82
|
+
`standard_usage_credits`, then applies the documented model-family Fast
|
|
83
|
+
multiplier to produce `usage_credits`:
|
|
84
|
+
|
|
85
|
+
- GPT-5.6 family: `2.5x`
|
|
86
|
+
- GPT-5.5 family: `2.5x`
|
|
87
|
+
- GPT-5.4 family: `2.0x`
|
|
88
|
+
|
|
89
|
+
The row also exposes `fast_usage_credits`, `usage_credit_multiplier`, and
|
|
90
|
+
source URL/date/confidence fields so the adjustment is auditable independently
|
|
91
|
+
from OTel tier evidence. A confirmed
|
|
92
|
+
Fast call whose model has no documented multiplier stays at `1.0x` and is
|
|
93
|
+
marked `no_documented_fast_multiplier`; the tracker does not guess. Standard
|
|
94
|
+
and Unknown-tier calls also stay at `1.0x`.
|
|
95
|
+
|
|
96
|
+
The bundled `fast_multipliers` rate-card entries are source-stamped. A local
|
|
97
|
+
`allowance.json` may override a model-family entry with `multiplier`,
|
|
98
|
+
`source_name`, `source_url`, and `fetched_at`; valid local entries are marked
|
|
99
|
+
`user_override`, while malformed entries do not replace the bundled value.
|
|
100
|
+
|
|
101
|
+
This adjustment applies only to Codex/ChatGPT usage-credit estimates. It never
|
|
102
|
+
changes API USD estimates, which use the observed API service-tier table and
|
|
103
|
+
aggregate token counters. Allowance-drain calibration uses the
|
|
104
|
+
standard-credit baseline so a newly observed Fast label does not redefine the
|
|
105
|
+
historical credit-to-percentage relationship.
|
|
106
|
+
|
|
65
107
|
## Usage Observed
|
|
66
108
|
|
|
67
109
|
`Usage observed` is different from `Codex Credits`. The tracker cannot currently read your logged-in ChatGPT plan, live remaining credits, reset windows, or usage from other agentic surfaces automatically.
|
|
@@ -90,6 +132,13 @@ Configure the usage component:
|
|
|
90
132
|
- Codex upstream log formats can change, and parser compatibility may require tracker updates before new event shapes are fully understood.
|
|
91
133
|
- Pricing and rate-card sources can change outside this project. Refresh or pin local files when reports need a known source snapshot.
|
|
92
134
|
- Local Codex logs may not include usage from other ChatGPT agentic surfaces that share the same allowance.
|
|
135
|
+
- Service tier is exact only when a local completion explicitly reports it or
|
|
136
|
+
Codex `0.143.0` or newer establishes Standard through omission. Older or
|
|
137
|
+
unmatched history remains Unknown; latency and reasoning effort cannot prove
|
|
138
|
+
Fast usage.
|
|
139
|
+
- `priority` can describe ChatGPT Fast mode or API Priority processing. The
|
|
140
|
+
retained telemetry does not identify authentication or billing, so leave
|
|
141
|
+
`billing_basis` as `unknown` unless you have independent evidence.
|
|
93
142
|
- Live account allowance cannot be read automatically by this local tracker, and the dashboard does not infer live remaining allowance from the logged-in account plan.
|
|
94
143
|
- Observed local-log snapshots may be stale until Codex records another model call, and may omit other agentic surfaces that share the same allowance.
|
|
95
144
|
- Pricing can change after a report is generated. Use `pin-pricing` when you need reproducible historical cost estimates.
|