codex-usage-tracking 0.15.0__tar.gz → 0.16.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.15.0 → codex_usage_tracking-0.16.0}/.codex-plugin/plugin.json +1 -1
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/AGENTS.md +8 -8
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/CHANGELOG.md +11 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/PKG-INFO +7 -6
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/README.md +6 -5
- codex_usage_tracking-0.16.0/docs/allowance-intelligence.md +64 -0
- codex_usage_tracking-0.16.0/docs/architecture.md +62 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/docs/cli-json-schemas.md +243 -1
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/docs/cli-reference.md +18 -7
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/docs/development.md +2 -2
- codex_usage_tracking-0.16.0/docs/local-content-index-roadmap.md +375 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/docs/mcp.md +36 -4
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/docs/one-dot-oh-readiness.md +8 -8
- codex_usage_tracking-0.16.0/docs/privacy.md +128 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/pyproject.toml +1 -1
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/scripts/smoke_installed_package.py +4 -0
- {codex_usage_tracking-0.15.0/src/codex_usage_tracker/plugin_data → codex_usage_tracking-0.16.0}/skills/codex-usage-api/SKILL.md +25 -7
- {codex_usage_tracking-0.15.0/src/codex_usage_tracker/plugin_data → codex_usage_tracking-0.16.0}/skills/codex-usage-tracker/SKILL.md +8 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/skills/codex-usage-tracker/scripts/run_mcp.py +2 -2
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/__init__.py +1 -1
- codex_usage_tracking-0.16.0/src/codex_usage_tracker/allowance_intelligence/__init__.py +23 -0
- codex_usage_tracking-0.16.0/src/codex_usage_tracker/allowance_intelligence/model.py +588 -0
- codex_usage_tracking-0.16.0/src/codex_usage_tracker/allowance_intelligence/reports.py +331 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/cli/main.py +89 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/cli/mcp_server.py +333 -3
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/cli/parser.py +77 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/core/formatting.py +26 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/core/json_contract_cli.py +189 -11
- codex_usage_tracking-0.16.0/src/codex_usage_tracker/plugin_data/dashboard/react/index.html +14 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0/src/codex_usage_tracker/plugin_data}/skills/codex-usage-api/SKILL.md +25 -7
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0/src/codex_usage_tracker/plugin_data}/skills/codex-usage-tracker/SKILL.md +8 -0
- codex_usage_tracking-0.16.0/src/codex_usage_tracker/reports/api.py +1050 -0
- codex_usage_tracking-0.16.0/src/codex_usage_tracker/server/allowance.py +197 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/server/handler.py +43 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/server/routes.py +3 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/server/utils.py +8 -5
- codex_usage_tracking-0.16.0/src/codex_usage_tracker/store/allowance_observations.py +139 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/store/api.py +161 -0
- codex_usage_tracking-0.16.0/src/codex_usage_tracker/store/content_index.py +1209 -0
- codex_usage_tracking-0.16.0/src/codex_usage_tracker/store/content_index_event_store.py +305 -0
- codex_usage_tracking-0.16.0/src/codex_usage_tracker/store/content_index_events.py +556 -0
- codex_usage_tracking-0.16.0/src/codex_usage_tracker/store/content_patterns.py +412 -0
- codex_usage_tracking-0.16.0/src/codex_usage_tracker/store/investigation_runs.py +94 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/store/refresh.py +14 -0
- codex_usage_tracking-0.16.0/src/codex_usage_tracker/store/schema.py +766 -0
- codex_usage_tracking-0.16.0/src/codex_usage_tracker/store/source_records.py +275 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracking.egg-info/PKG-INFO +7 -6
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracking.egg-info/SOURCES.txt +19 -0
- codex_usage_tracking-0.16.0/tests/allowance_intelligence/test_allowance_intelligence.py +194 -0
- codex_usage_tracking-0.16.0/tests/cli/test_allowance_intelligence_cli_mcp.py +74 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/tests/cli/test_cli_release.py +16 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/tests/cli/test_mcp_integration.py +68 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/tests/core/test_json_contracts.py +1 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/tests/core/test_privacy.py +2 -3
- codex_usage_tracking-0.16.0/tests/server/test_server_allowance.py +122 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/tests/server/test_server_routes.py +5 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/tests/server/test_server_threads.py +25 -1
- codex_usage_tracking-0.16.0/tests/store/test_content_index.py +309 -0
- codex_usage_tracking-0.16.0/tests/store/test_source_records.py +184 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/tests/store/test_store_dashboard_mcp.py +51 -6
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/tests/store/test_store_migrations.py +67 -5
- codex_usage_tracking-0.15.0/docs/architecture.md +0 -55
- codex_usage_tracking-0.15.0/docs/privacy.md +0 -126
- codex_usage_tracking-0.15.0/src/codex_usage_tracker/reports/api.py +0 -490
- codex_usage_tracking-0.15.0/src/codex_usage_tracker/store/schema.py +0 -349
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/.mcp.json +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/CONTRIBUTING.md +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/LICENSE +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/MANIFEST.in +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/SECURITY.md +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/assets/icon.svg +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/docs/adoption-hardening-roadmap.md +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/docs/architecture/decisions/0001-package-domain-boundaries.md +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/docs/architecture-boundary-map.md +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/docs/assets/dashboard-call-investigator-evidence.png +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/docs/assets/dashboard-call-investigator-preview.png +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/docs/assets/dashboard-call-investigator.png +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/docs/assets/dashboard-calls-preview.png +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/docs/assets/dashboard-calls.png +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/docs/assets/dashboard-details.png +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/docs/assets/dashboard-diagnostics-git-expanded.png +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/docs/assets/dashboard-diagnostics.png +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/docs/assets/dashboard-insights.png +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/docs/assets/dashboard-threads.png +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/docs/assets/frontend-rewrite-references/cache-context-lab-reference.png +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/docs/assets/frontend-rewrite-references/call-drilldown-menu-concept-reference.png +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/docs/assets/frontend-rewrite-references/calls-analyst-view-reference.png +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/docs/assets/frontend-rewrite-references/calls-high-density-reference.png +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/docs/assets/frontend-rewrite-references/command-palette-dashboard-reference.png +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/docs/assets/frontend-rewrite-references/diagnostics-notebook-reference.png +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/docs/assets/frontend-rewrite-references/generated-dashboard-concept-reference.png +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/docs/assets/frontend-rewrite-references/generated-maintainer-banner-reference.png +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/docs/assets/frontend-rewrite-references/investigator-workbench-reference.png +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/docs/assets/frontend-rewrite-references/overview-dashboard-reference.png +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/docs/assets/frontend-rewrite-references/projected-weekly-credits-overlap-reference.png +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/docs/assets/frontend-rewrite-references/thread-efficiency-reference.png +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/docs/assets/frontend-rewrite-references/usage-drain-lab-reference.png +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/docs/assets/plugin-prompts.png +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/docs/assets/plugin-thread-leaderboard.png +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/docs/assets/readme-hero.png +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/docs/assets/social-preview.png +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/docs/assets/ux/call-detail-panel.png +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/docs/assets/ux/insight-overview.png +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/docs/assets/ux/thread-investigation.png +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/docs/call-drilldown-performance-checklist.md +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/docs/dashboard-guide.md +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/docs/examples/remediation-conversation.md +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/docs/examples/token-waste-conversation.md +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/docs/first-five-minutes.md +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/docs/frontend-rewrite-roadmap.md +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/docs/install.md +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/docs/maintainability-roadmap.md +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/docs/maintainability-scorecard.md +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/docs/pricing-and-credits.md +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/docs/react-dashboard-0.14-release-roadmap.md +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/docs/ui-ux-improvement-plan.md +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/docs/usage-drain-modeling.md +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/scripts/benchmark_synthetic_history.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/scripts/check_release.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/scripts/check_wemake_baseline.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/scripts/generate_social_preview.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/scripts/install_local_plugin.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/scripts/model_usage_drain.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/setup.cfg +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/__main__.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/allowance.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/cli/__init__.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/cli/__main__.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/cli/config.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/cli/dashboard.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/cli/diagnostics.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/cli/output.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/cli/parser_diagnostics.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/cli/plugin_installer.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/context/__init__.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/context/action_timing.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/context/api.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/context/constants.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/context/loader.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/context/reader.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/context/serialized.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/context/summaries.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/context/token_estimates.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/context/values.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/core/__init__.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/core/api_payloads.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/core/call_origin.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/core/i18n.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/core/json_contract_common.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/core/json_contract_diagnostics.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/core/json_contract_server.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/core/json_contract_validation.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/core/json_contracts.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/core/models.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/core/paths.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/core/projects.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/core/redaction.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/core/schema.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/core/threads.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/dashboard/__init__.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/dashboard/api.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/dashboard/assets.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/dashboard/pricing_snapshot.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/diagnostics/__init__.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/diagnostics/action_hints.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/diagnostics/api.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/diagnostics/fact_classifiers.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/diagnostics/facts.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/diagnostics/guided_summary.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/diagnostics/mcp.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/diagnostics/reports.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/diagnostics/snapshot_analysis.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/diagnostics/snapshot_concentration.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/diagnostics/snapshot_constants.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/diagnostics/snapshot_events.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/diagnostics/snapshot_payloads.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/diagnostics/snapshot_report.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/diagnostics/snapshot_rows.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/diagnostics/snapshot_source_logs.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/diagnostics/snapshot_source_scan.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/diagnostics/snapshots.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/diagnostics/types.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/mcp_server.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/parser/__init__.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/parser/api.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/parser/jsonl_v1.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/parser/jsonl_values.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/parser/state.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/plugin_data/__init__.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/plugin_data/assets/icon.svg +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/plugin_data/dashboard/dashboard.css +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/plugin_data/dashboard/dashboard.js +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_actions.js +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_analysis.js +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_call.css +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_call_diagnostics.js +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_call_investigator.js +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_cells.js +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_data.js +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_detail.css +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_details.js +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_diagnostics.js +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_diagnostics_facts.js +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_diagnostics_snapshots.js +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_events.js +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_filters.js +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_format.js +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_i18n.js +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_insights.css +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_insights.js +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_layout.css +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_live.js +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_payload_cache.js +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_responsive.css +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_state.js +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_status.js +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_tables.css +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_tables.js +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_template.html +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_tooltips.js +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/plugin_data/dashboard/locales/ar.json +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/plugin_data/dashboard/locales/de.json +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/plugin_data/dashboard/locales/en.json +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/plugin_data/dashboard/locales/es.json +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/plugin_data/dashboard/locales/fr.json +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/plugin_data/dashboard/locales/it.json +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/plugin_data/dashboard/locales/ja.json +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/plugin_data/dashboard/locales/ko.json +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/plugin_data/dashboard/locales/pt.json +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/plugin_data/dashboard/locales/ru.json +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/plugin_data/dashboard/locales/vi.json +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/plugin_data/dashboard/locales/zh-Hans.json +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/plugin_data/dashboard/react/assets/dashboard-react.js +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/plugin_data/dashboard/react/assets/index.css +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/plugin_data/docs/assets/dashboard-call-investigator-evidence.png +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/plugin_data/docs/assets/dashboard-call-investigator-preview.png +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/plugin_data/docs/assets/dashboard-call-investigator.png +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/plugin_data/docs/assets/dashboard-calls-preview.png +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/plugin_data/docs/assets/dashboard-calls.png +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/plugin_data/docs/assets/dashboard-details.png +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/plugin_data/docs/assets/dashboard-diagnostics-git-expanded.png +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/plugin_data/docs/assets/dashboard-diagnostics.png +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/plugin_data/docs/assets/dashboard-insights.png +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/plugin_data/docs/assets/dashboard-threads.png +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/plugin_data/docs/assets/plugin-prompts.png +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/plugin_data/docs/assets/plugin-thread-leaderboard.png +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/plugin_data/docs/dashboard-guide.html +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/plugin_data/docs/examples/remediation-conversation.md +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/plugin_data/docs/examples/token-waste-conversation.md +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/plugin_data/rate_cards/codex-credit-rates.json +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/plugin_installer.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/pricing/__init__.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/pricing/allowance.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/pricing/allowance_config.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/pricing/allowance_rate_card.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/pricing/allowance_text.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/pricing/allowance_usage.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/pricing/api.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/pricing/config.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/pricing/costing.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/pricing/estimates.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/pricing/openai.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/reports/__init__.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/reports/filters.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/reports/project_summary.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/reports/recommendation_builder.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/reports/recommendations.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/reports/support.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/server/__init__.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/server/api.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/server/call_detail.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/server/call_lists.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/server/context.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/server/context_settings.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/server/dashboard_shell.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/server/diagnostic_facts.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/server/diagnostic_routes.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/server/diagnostic_snapshots.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/server/live_queries.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/server/live_rows.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/server/open_investigator.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/server/recommendations.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/server/reports.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/server/request_guards.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/server/responses.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/server/status.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/server/summary.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/server/threads.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/server/usage_refresh.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/store/__init__.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/store/connection.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/store/dashboard_queries.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/store/diagnostic_call_queries.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/store/diagnostic_queries.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/store/exports.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/store/query_sql.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/store/rows.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/store/sources.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/store/summary_queries.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/store/thread_summaries.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/store/usage_api_queries.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/store/usage_record_queries.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/store/usage_timing.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/support.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/usage_drain/__init__.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/usage_drain/allowance_breakpoints.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/usage_drain/allowance_fits.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/usage_drain/allowance_online.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/usage_drain/boundary_delta.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/usage_drain/boundary_delta_core.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/usage_drain/boundary_delta_rows.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/usage_drain/boundary_delta_summary.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/usage_drain/boundary_scopes.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/usage_drain/boundary_summary.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/usage_drain/capacity_specs.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/usage_drain/error_diagnostics.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/usage_drain/feature_history.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/usage_drain/features.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/usage_drain/grace.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/usage_drain/history_state.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/usage_drain/model.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/usage_drain/predictive.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/usage_drain/predictive_specs.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/usage_drain/proxy_fit.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/usage_drain/regime_labels.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/usage_drain/regime_segments.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/usage_drain/regression.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/usage_drain/reports.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/usage_drain/spans.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/usage_drain/state_buckets.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/usage_drain/state_diagnostics.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/usage_drain/summary_metrics.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/usage_drain/thread_curves.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/usage_drain/time_series.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/usage_drain/token_components.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/usage_drain/transition_gates.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/usage_drain/transition_metrics.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/usage_drain/types.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/usage_drain/utils.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/usage_drain/walk_forward.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracker/usage_drain/walk_forward_rows.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracking.egg-info/dependency_links.txt +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracking.egg-info/entry_points.txt +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracking.egg-info/requires.txt +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/src/codex_usage_tracking.egg-info/top_level.txt +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/tests/__init__.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/tests/cli/test_cli_dashboard.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/tests/cli/test_cli_lifecycle.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/tests/cli/test_cli_module_entrypoints.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/tests/cli/test_cli_parser_diagnostics.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/tests/cli/test_mcp_launcher.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/tests/cli/test_plugin_installer.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/tests/context/test_context_action_timing.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/tests/context/test_context_evidence.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/tests/context/test_context_scan.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/tests/context/test_context_serialized.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/tests/context/test_context_summaries.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/tests/context/test_context_token_estimates.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/tests/context/test_context_values.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/tests/core/test_call_origin.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/tests/core/test_formatting.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/tests/core/test_i18n.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/tests/core/test_projects.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/tests/core/test_redaction.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/tests/core/test_schema.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/tests/core/test_threads.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/tests/dashboard/test_dashboard_data.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/tests/dashboard/test_dashboard_diagnostics_snapshots.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/tests/dashboard/test_dashboard_live.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/tests/dashboard/test_dashboard_payload.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/tests/dashboard/test_dashboard_pricing_snapshot.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/tests/dashboard/test_dashboard_server.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/tests/dashboard/test_dashboard_state.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/tests/dashboard/test_dashboard_status.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/tests/diagnostics/test_diagnostic_fact_classifiers.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/tests/diagnostics/test_diagnostic_reports.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/tests/diagnostics/test_diagnostic_snapshot_events.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/tests/diagnostics/test_diagnostic_snapshot_report.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/tests/diagnostics/test_diagnostic_snapshot_source_scan.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/tests/diagnostics/test_diagnostic_snapshots.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/tests/diagnostics/test_doctor_first_run.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/tests/parser/test_parser.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/tests/parser/test_parser_inspect_log.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/tests/parser/test_parser_state.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/tests/pricing/test_allowance.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/tests/pricing/test_pricing.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/tests/reports/test_recommendations.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/tests/reports/test_support.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/tests/server/test_server_api.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/tests/server/test_server_call_detail.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/tests/server/test_server_call_lists.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/tests/server/test_server_context.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/tests/server/test_server_context_settings.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/tests/server/test_server_dashboard_shell.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/tests/server/test_server_diagnostic_facts.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/tests/server/test_server_diagnostic_refresh_auth.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/tests/server/test_server_diagnostic_snapshots.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/tests/server/test_server_live_queries.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/tests/server/test_server_live_rows.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/tests/server/test_server_open_investigator.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/tests/server/test_server_recommendations.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/tests/server/test_server_request_guards.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/tests/server/test_server_responses.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/tests/server/test_server_status.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/tests/server/test_server_summary.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/tests/server/test_server_usage_refresh.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/tests/store/test_store_dashboard_queries.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/tests/store/test_store_large_batches.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/tests/store/test_store_query_sql.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/tests/store/test_store_sources.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/tests/store_dashboard_helpers.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/tests/usage_drain/test_usage_drain_allowance_fits.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/tests/usage_drain/test_usage_drain_boundary_delta.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/tests/usage_drain/test_usage_drain_boundary_delta_summary.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/tests/usage_drain/test_usage_drain_boundary_summary.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/tests/usage_drain/test_usage_drain_error_diagnostics.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/tests/usage_drain/test_usage_drain_feature_history.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/tests/usage_drain/test_usage_drain_model.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/tests/usage_drain/test_usage_drain_one_percent_capacity.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/tests/usage_drain/test_usage_drain_predictive.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/tests/usage_drain/test_usage_drain_regime_segments.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/tests/usage_drain/test_usage_drain_regression.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/tests/usage_drain/test_usage_drain_report_records.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/tests/usage_drain/test_usage_drain_reports.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/tests/usage_drain/test_usage_drain_state_buckets.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/tests/usage_drain/test_usage_drain_state_diagnostics.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/tests/usage_drain/test_usage_drain_summary_metrics.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/tests/usage_drain/test_usage_drain_thread_curves.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/tests/usage_drain/test_usage_drain_token_components.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/tests/usage_drain/test_usage_drain_transition_gates.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/tests/usage_drain/test_usage_drain_transition_metrics.py +0 -0
- {codex_usage_tracking-0.15.0 → codex_usage_tracking-0.16.0}/tests/usage_drain/test_usage_drain_walk_forward.py +0 -0
|
@@ -242,9 +242,9 @@ git push origin v0.4.0
|
|
|
242
242
|
## Privacy Rules
|
|
243
243
|
|
|
244
244
|
- Never commit real Codex session logs.
|
|
245
|
-
- Never
|
|
246
|
-
-
|
|
247
|
-
-
|
|
245
|
+
- Never commit real prompts, assistant text, tool outputs, pasted secrets, message snippets, or raw Codex logs.
|
|
246
|
+
- The local content index may store bounded snippets in the user-owned SQLite database by approved design. Do not expose indexed/raw content through default CSV, generated HTML, support bundles, screenshots, aggregate JSON, fixtures based on real logs, or commits.
|
|
247
|
+
- Raw context may be read during refresh/content indexing or explicit selected-call context loading. Keep shareable outputs aggregate-first unless a command is explicitly documented as a local raw/content export.
|
|
248
248
|
- Keep fixture data synthetic.
|
|
249
249
|
- Keep local SQLite databases, CSV exports, HTML dashboards, caches, and virtualenvs out of git.
|
|
250
250
|
- Do not hard-code real current USD model pricing in source; refresh the local config from OpenAI's published pricing docs or use manual local overrides. Internal Codex model estimates must be explicitly marked as estimates with source and rationale metadata.
|
|
@@ -252,10 +252,10 @@ git push origin v0.4.0
|
|
|
252
252
|
|
|
253
253
|
## Definition Of Done
|
|
254
254
|
|
|
255
|
-
- Parser
|
|
255
|
+
- Parser and content-index handling are covered by synthetic session logs.
|
|
256
256
|
- SQLite refresh is idempotent.
|
|
257
|
-
- MCP tool functions return concise aggregate data.
|
|
258
|
-
- Dashboard
|
|
257
|
+
- MCP tool functions return concise aggregate data by default; content-aware tools must be explicit local investigation surfaces.
|
|
258
|
+
- Dashboard generated HTML is aggregate-first and does not embed indexed/raw content.
|
|
259
259
|
- Doctor, summary presets, dashboard, and expensive-call views work from CLI and MCP wrappers.
|
|
260
260
|
- `codex-usage-tracker install-plugin` can register the installed package without relying on a source-checkout symlink.
|
|
261
261
|
- `python -m codex_usage_tracker` and `codex-usage-tracker --version` both work.
|
|
@@ -263,8 +263,8 @@ git push origin v0.4.0
|
|
|
263
263
|
- `scripts/check_release.py --dist` passes before any public release.
|
|
264
264
|
- Pricing coverage clearly separates configured, estimated, and unpriced model usage.
|
|
265
265
|
- Codex credit coverage clearly separates exact rate-card matches, inferred aliases, and missing credit rates.
|
|
266
|
-
- Dashboard Calls and Threads views share filters, totals, and aggregate-
|
|
266
|
+
- Dashboard Calls and Threads views share filters, totals, and aggregate-first hover details.
|
|
267
267
|
- Dashboard usage docs are updated when the visible dashboard workflow changes, and screenshots must be generated from synthetic data only.
|
|
268
|
-
- Dashboard
|
|
268
|
+
- Dashboard refresh is localhost-only, generated HTML stays aggregate-first, and context loading is lazy, localhost-only, explicit, redacted, and not embedded in the static HTML payload.
|
|
269
269
|
- Subagent calls preserve logged parent-session metadata, latch to parent thread labels when available, and auto-review attachment is clearly marked when inferred.
|
|
270
270
|
- Tests and compile checks pass.
|
|
@@ -2,6 +2,17 @@
|
|
|
2
2
|
|
|
3
3
|
## Unreleased
|
|
4
4
|
|
|
5
|
+
## 0.16.0 - 2026-07-07
|
|
6
|
+
|
|
7
|
+
- Add allowance intelligence foundation with normalized allowance history, evidence-graded change diagnostics, local evidence exports, and API/MCP report surfaces for weekly-vs-5-hour usage analysis.
|
|
8
|
+
- Add local content-indexed MCP/API exploration surfaces, including content search, thread trace, pattern scans, investigation walks, and strict local evidence exports.
|
|
9
|
+
- Add roadmap for default local content indexing, SQLite FTS5 search, parser drift handling, and future diagnostics for repeated file rediscovery, shell churn, and large low-output calls.
|
|
10
|
+
- Fix schema initialization so already-applied migrations are not rerun during read/report calls on migrated local databases.
|
|
11
|
+
|
|
12
|
+
## 0.15.1 - 2026-07-05
|
|
13
|
+
|
|
14
|
+
- Fix the PyPI wheel package resources by tracking the React dashboard `index.html` entrypoint used by `serve-dashboard` and installed-package smoke tests.
|
|
15
|
+
|
|
5
16
|
## 0.15.0 - 2026-07-05
|
|
6
17
|
|
|
7
18
|
- Make the companion plugin/skills remediation-aware for token-waste investigations, including Headroom suggestions when available, dashboard verification paths, and custom local automation ideas.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: codex-usage-tracking
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.16.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
|
|
@@ -59,11 +59,11 @@ Local-first dashboard, Codex plugin, and companion skill for understanding where
|
|
|
59
59
|
|
|
60
60
|
> **Unofficial project:** Codex Usage Tracker is an independent open-source project. It is not made by, affiliated with, endorsed by, sponsored by, or supported by OpenAI. OpenAI and Codex are trademarks of OpenAI; this project only reads local log files from your machine.
|
|
61
61
|
|
|
62
|
-
Codex Usage Tracker reads the JSONL logs already written by Codex, indexes aggregate usage counters into SQLite, and gives you a dashboard, CLI, and MCP tools for investigating real usage patterns.
|
|
62
|
+
Codex Usage Tracker reads the JSONL logs already written by Codex, indexes aggregate usage counters plus local content/tool/command/file-event evidence into SQLite, and gives you a dashboard, CLI, and MCP tools for investigating real usage patterns. The content index stays on your machine; CSV exports, generated dashboard HTML, support bundles, and shareable reports omit indexed content by default. Use `refresh --aggregate-only` or `rebuild-index --aggregate-only` when you want the older aggregate-only SQLite posture.
|
|
63
63
|
|
|
64
64
|
Built for developers using Codex locally who want to know which threads, models, subagents, and long chats are driving usage without uploading logs anywhere. The public PyPI package is [`codex-usage-tracking`](https://pypi.org/project/codex-usage-tracking/), and it installs the `codex-usage-tracker` command.
|
|
65
65
|
|
|
66
|
-
After install, you get a localhost dashboard, a local SQLite
|
|
66
|
+
After install, you get a localhost dashboard, a local SQLite usage index, CLI reports, MCP tools, and a companion Codex skill for asking questions like "what drove my usage this week?"
|
|
67
67
|
|
|
68
68
|
## Quick Install
|
|
69
69
|
|
|
@@ -90,13 +90,13 @@ Source install for development or branch testing:
|
|
|
90
90
|
pipx install "git+https://github.com/douglasmonsky/codex-usage-tracker.git"
|
|
91
91
|
```
|
|
92
92
|
|
|
93
|
-
`setup` installs or refreshes the local Codex plugin wrapper, initializes local config templates when needed, refreshes the
|
|
93
|
+
`setup` installs or refreshes the local Codex plugin wrapper, initializes local config templates when needed, refreshes the local usage index, runs `codex-usage-tracker doctor`, and tells you whether Codex needs a restart for plugin discovery.
|
|
94
94
|
|
|
95
95
|
Want Codex to do it for you? Paste: `Install codex-usage-tracking with pipx, run codex-usage-tracker setup, and open the Codex Usage Tracker dashboard.`
|
|
96
96
|
|
|
97
97
|
## Talk To Your Usage Data
|
|
98
98
|
|
|
99
|
-
The dashboard shows the evidence; the companion plugin and skills make it conversational. After `setup` and a Codex restart, ask Codex to refresh the local
|
|
99
|
+
The dashboard shows the evidence; the companion plugin and skills make it conversational. After `setup` and a Codex restart, ask Codex to refresh the local usage index, call MCP tools, and explain what is driving usage. Shareable reports stay aggregate-first and omit indexed content unless an explicit local content tool/export is added for that purpose.
|
|
100
100
|
|
|
101
101
|
Good starter prompts:
|
|
102
102
|
|
|
@@ -108,7 +108,7 @@ Compare model and effort usage, then suggest safer defaults.
|
|
|
108
108
|
Open the dashboard and filter Calls to the rows behind your recommendation.
|
|
109
109
|
```
|
|
110
110
|
|
|
111
|
-
The companion skill treats waste discovery as diagnosis plus remediation: it can point to Calls, Threads, Call Investigator, Diagnostics Notebook, Headroom when available, or a custom local command/skill/report preset Codex can build to stop repeating the same waste pattern.
|
|
111
|
+
The companion skill treats waste discovery as diagnosis plus remediation: it can point to Calls, Threads, Call Investigator, Diagnostics Notebook, Allowance Intelligence, Headroom when available, or a custom local command/skill/report preset Codex can build to stop repeating the same waste pattern.
|
|
112
112
|
|
|
113
113
|
Example conversation docs:
|
|
114
114
|
|
|
@@ -307,6 +307,7 @@ Full model: [Privacy Guide](docs/privacy.md).
|
|
|
307
307
|
- [Dashboard Guide](docs/dashboard-guide.md)
|
|
308
308
|
- [CLI Reference](docs/cli-reference.md)
|
|
309
309
|
- [Pricing, Credits, And Allowance](docs/pricing-and-credits.md)
|
|
310
|
+
- [Allowance Intelligence](docs/allowance-intelligence.md)
|
|
310
311
|
- [MCP And Codex Skills](docs/mcp.md)
|
|
311
312
|
- [Privacy Guide](docs/privacy.md)
|
|
312
313
|
- [Architecture](docs/architecture.md)
|
|
@@ -14,11 +14,11 @@ Local-first dashboard, Codex plugin, and companion skill for understanding where
|
|
|
14
14
|
|
|
15
15
|
> **Unofficial project:** Codex Usage Tracker is an independent open-source project. It is not made by, affiliated with, endorsed by, sponsored by, or supported by OpenAI. OpenAI and Codex are trademarks of OpenAI; this project only reads local log files from your machine.
|
|
16
16
|
|
|
17
|
-
Codex Usage Tracker reads the JSONL logs already written by Codex, indexes aggregate usage counters into SQLite, and gives you a dashboard, CLI, and MCP tools for investigating real usage patterns.
|
|
17
|
+
Codex Usage Tracker reads the JSONL logs already written by Codex, indexes aggregate usage counters plus local content/tool/command/file-event evidence into SQLite, and gives you a dashboard, CLI, and MCP tools for investigating real usage patterns. The content index stays on your machine; CSV exports, generated dashboard HTML, support bundles, and shareable reports omit indexed content by default. Use `refresh --aggregate-only` or `rebuild-index --aggregate-only` when you want the older aggregate-only SQLite posture.
|
|
18
18
|
|
|
19
19
|
Built for developers using Codex locally who want to know which threads, models, subagents, and long chats are driving usage without uploading logs anywhere. The public PyPI package is [`codex-usage-tracking`](https://pypi.org/project/codex-usage-tracking/), and it installs the `codex-usage-tracker` command.
|
|
20
20
|
|
|
21
|
-
After install, you get a localhost dashboard, a local SQLite
|
|
21
|
+
After install, you get a localhost dashboard, a local SQLite usage index, CLI reports, MCP tools, and a companion Codex skill for asking questions like "what drove my usage this week?"
|
|
22
22
|
|
|
23
23
|
## Quick Install
|
|
24
24
|
|
|
@@ -45,13 +45,13 @@ Source install for development or branch testing:
|
|
|
45
45
|
pipx install "git+https://github.com/douglasmonsky/codex-usage-tracker.git"
|
|
46
46
|
```
|
|
47
47
|
|
|
48
|
-
`setup` installs or refreshes the local Codex plugin wrapper, initializes local config templates when needed, refreshes the
|
|
48
|
+
`setup` installs or refreshes the local Codex plugin wrapper, initializes local config templates when needed, refreshes the local usage index, runs `codex-usage-tracker doctor`, and tells you whether Codex needs a restart for plugin discovery.
|
|
49
49
|
|
|
50
50
|
Want Codex to do it for you? Paste: `Install codex-usage-tracking with pipx, run codex-usage-tracker setup, and open the Codex Usage Tracker dashboard.`
|
|
51
51
|
|
|
52
52
|
## Talk To Your Usage Data
|
|
53
53
|
|
|
54
|
-
The dashboard shows the evidence; the companion plugin and skills make it conversational. After `setup` and a Codex restart, ask Codex to refresh the local
|
|
54
|
+
The dashboard shows the evidence; the companion plugin and skills make it conversational. After `setup` and a Codex restart, ask Codex to refresh the local usage index, call MCP tools, and explain what is driving usage. Shareable reports stay aggregate-first and omit indexed content unless an explicit local content tool/export is added for that purpose.
|
|
55
55
|
|
|
56
56
|
Good starter prompts:
|
|
57
57
|
|
|
@@ -63,7 +63,7 @@ Compare model and effort usage, then suggest safer defaults.
|
|
|
63
63
|
Open the dashboard and filter Calls to the rows behind your recommendation.
|
|
64
64
|
```
|
|
65
65
|
|
|
66
|
-
The companion skill treats waste discovery as diagnosis plus remediation: it can point to Calls, Threads, Call Investigator, Diagnostics Notebook, Headroom when available, or a custom local command/skill/report preset Codex can build to stop repeating the same waste pattern.
|
|
66
|
+
The companion skill treats waste discovery as diagnosis plus remediation: it can point to Calls, Threads, Call Investigator, Diagnostics Notebook, Allowance Intelligence, Headroom when available, or a custom local command/skill/report preset Codex can build to stop repeating the same waste pattern.
|
|
67
67
|
|
|
68
68
|
Example conversation docs:
|
|
69
69
|
|
|
@@ -262,6 +262,7 @@ Full model: [Privacy Guide](docs/privacy.md).
|
|
|
262
262
|
- [Dashboard Guide](docs/dashboard-guide.md)
|
|
263
263
|
- [CLI Reference](docs/cli-reference.md)
|
|
264
264
|
- [Pricing, Credits, And Allowance](docs/pricing-and-credits.md)
|
|
265
|
+
- [Allowance Intelligence](docs/allowance-intelligence.md)
|
|
265
266
|
- [MCP And Codex Skills](docs/mcp.md)
|
|
266
267
|
- [Privacy Guide](docs/privacy.md)
|
|
267
268
|
- [Architecture](docs/architecture.md)
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# Allowance Intelligence
|
|
2
|
+
|
|
3
|
+
Allowance intelligence is an aggregate-only workflow for asking: did visible Codex allowance behavior change, or is the counter just noisy?
|
|
4
|
+
|
|
5
|
+
It uses observed `token_count.rate_limits` snapshots already present in local Codex logs. It does not read prompts, assistant text, tool output, raw command output, or OpenAI account internals.
|
|
6
|
+
|
|
7
|
+
## What It Can Say
|
|
8
|
+
|
|
9
|
+
- Normalize observed 5-hour and weekly usage snapshots into `allowance_observations`.
|
|
10
|
+
- Compare visible usage-percent movement with locally estimated Codex credits.
|
|
11
|
+
- Separate weekly evidence from 5-hour rolling-window behavior.
|
|
12
|
+
- Flag candidate allowance regime shifts when recent weekly credits-per-visible-percent drops sharply.
|
|
13
|
+
- Preserve the possibility that other Codex or ChatGPT usage outside local logs explains movement.
|
|
14
|
+
|
|
15
|
+
## Evidence Grades
|
|
16
|
+
|
|
17
|
+
- `insufficient_data`: not enough observations or positive usage spans.
|
|
18
|
+
- `counter_noise_likely`: usually used for 5-hour windows because rolling-window behavior is noisy.
|
|
19
|
+
- `no_change_detected`: enough weekly evidence exists, but no candidate shift was found.
|
|
20
|
+
- `possible_regime_change`: weekly evidence suggests a visible capacity change, but evidence is limited.
|
|
21
|
+
- `strong_local_evidence`: multiple weekly spans show a consistent drop in credits-per-visible-percent.
|
|
22
|
+
- `inconclusive_other_usage_possible`: observed movement could plausibly be explained by usage outside these local logs.
|
|
23
|
+
|
|
24
|
+
## Statistical Detector Direction
|
|
25
|
+
|
|
26
|
+
The detector now includes a `nonparametric-v1` evidence block for weekly candidate shifts. It adds:
|
|
27
|
+
|
|
28
|
+
- exact permutation p-values for mean credits-per-percent shifts when the split is small enough to enumerate locally;
|
|
29
|
+
- Cliff's delta effect size, where negative values mean recent spans bought less visible allowance movement per estimated credit;
|
|
30
|
+
- a stricter `research_readiness.ready_for_public_claim` flag that requires repeated weekly spans on both sides of the split, strong effect size, and p-value support.
|
|
31
|
+
|
|
32
|
+
This intentionally separates local diagnostics from public claims. Candidate shifts require at least six positive weekly spans before the split, which keeps a tiny early baseline from becoming the headline result when later data is much denser. Public-claim readiness stays stricter still: it requires repeated weekly spans on both sides, strong effect size, and p-value support.
|
|
33
|
+
|
|
34
|
+
## Commands
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
codex-usage-tracker allowance-history --window-kind weekly --json
|
|
38
|
+
codex-usage-tracker allowance-diagnostics --window-kind weekly --json
|
|
39
|
+
codex-usage-tracker allowance-export --output /tmp/codex-allowance-evidence.json
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
Use `--limit 0` to inspect all normalized observations. The export command always produces strict-privacy payloads.
|
|
43
|
+
|
|
44
|
+
## MCP Tools
|
|
45
|
+
|
|
46
|
+
- `usage_allowance_history(...)`
|
|
47
|
+
- `usage_allowance_diagnostics(...)`
|
|
48
|
+
- `usage_allowance_export(...)`
|
|
49
|
+
|
|
50
|
+
The MCP tools default to strict privacy for allowance work because these reports are likely to be copied into issues or community discussions.
|
|
51
|
+
|
|
52
|
+
## Local API
|
|
53
|
+
|
|
54
|
+
- `/api/allowance/history`
|
|
55
|
+
- `/api/allowance/diagnostics`
|
|
56
|
+
- `/api/allowance/export`
|
|
57
|
+
|
|
58
|
+
The dashboard can build an Allowance / Limit Intelligence surface from these payloads later without inventing a separate data contract.
|
|
59
|
+
|
|
60
|
+
## Privacy
|
|
61
|
+
|
|
62
|
+
Strict export omits prompts, assistant messages, tool output, file paths, thread names, session IDs, and record IDs. It includes anonymized observation dates, window kinds, visible usage movement, estimated credits, confidence labels, evidence grades, and caveats.
|
|
63
|
+
|
|
64
|
+
This project remains unofficial and local-first. The diagnostics are evidence for local investigation, not an official OpenAI usage ledger.
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# Architecture
|
|
2
|
+
|
|
3
|
+
Codex Usage Tracker is a local sidecar app. It reads Codex session JSONL logs, stores tracker-owned indexes in SQLite, and exposes usage data through CLI commands, MCP tools, CSV export, generated dashboards, and the localhost React dashboard.
|
|
4
|
+
|
|
5
|
+
The current storage model has two layers:
|
|
6
|
+
|
|
7
|
+
- Aggregate usage index: token counters, model/effort metadata, call origins, diagnostic labels, thread summaries, pricing/credit estimates, allowance snapshots, and safe report payloads.
|
|
8
|
+
- Local content index: normalized conversation turns, bounded content fragments, tool calls, command runs, file events, persisted investigation run summaries, and source provenance for explicit local MCP/API investigation.
|
|
9
|
+
|
|
10
|
+
Shareable outputs remain aggregate-first and must omit indexed/raw content unless an export is explicitly documented as a local raw/content export.
|
|
11
|
+
|
|
12
|
+
## Boundaries
|
|
13
|
+
|
|
14
|
+
- `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.
|
|
15
|
+
- `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.
|
|
16
|
+
- `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.
|
|
17
|
+
- `schema.py` owns persisted SQLite columns and migrations. Add columns or tables there before changing refresh, export, or MCP behavior.
|
|
18
|
+
- `store.py` and `store/api.py` own SQLite setup, refresh, rebuild, query access, previous/next call links, materialized thread summaries, source-file refresh cursors, SQL-backed live dashboard API slices, and cleanup ordering.
|
|
19
|
+
- `source_records.py` owns source-file provenance, parser coverage, incremental cursors, and replacement on source-file changes.
|
|
20
|
+
- `reports.py` is the application-service layer for summaries, expensive-call reports, recommendations, pricing coverage, source coverage, allowance reports, and filtered query payloads. CLI and MCP wrappers should call this layer instead of duplicating report assembly.
|
|
21
|
+
- `api_payloads.py` owns stable JSON payload helpers shared by CLI and MCP. `json_contracts.py` owns lightweight contract checks for schema-versioned CLI/MCP payloads and localhost live API payloads.
|
|
22
|
+
- `costing.py`, `pricing_config.py`, `pricing_openai.py`, `pricing_estimates.py`, and `allowance.py` own cost, credit, rate-card, and allowance annotation. Keep estimate confidence and source metadata attached to rows.
|
|
23
|
+
- `projects.py`, `threads.py`, and `recommendations.py` annotate aggregate rows with project identity, thread relationships, and actionable signals. Project privacy redaction belongs in `projects.py` so CLI, MCP, dashboard, CSV, and support-bundle surfaces share behavior.
|
|
24
|
+
- `context.py` is the normal path for explicit selected-call raw context. It reads one selected source file on demand, applies redaction and size limits, omits tool output by default, and keeps full serialized group analysis explicit.
|
|
25
|
+
- `diagnostic_snapshots.py` owns persisted diagnostic snapshot refresh/load orchestration. Snapshot modules should stay synthetic-testable and avoid raw transcript persistence in aggregate diagnostic facts.
|
|
26
|
+
- `dashboard.py` builds aggregate-first static dashboard payloads and writes HTML/assets. `server.py` adds localhost refresh, compatibility `/api/usage`, SQL-backed live API slices, and explicit lazy context loading.
|
|
27
|
+
- `frontend/dashboard/` owns the React dashboard. It should render server/API payloads rather than becoming an independent source of usage calculations.
|
|
28
|
+
- `plugin_installer.py`, `.mcp.json`, `skills/`, `src/codex_usage_tracker/plugin_data/skills/`, and `scripts/check_release.py` own install and packaging behavior.
|
|
29
|
+
- `scripts/benchmark_synthetic_history.py` owns generated large-history query timing checks. It must stay synthetic-only and must not read real Codex logs.
|
|
30
|
+
|
|
31
|
+
## Extension Rules
|
|
32
|
+
|
|
33
|
+
1. Add new aggregate usage-event metrics through `UsageEvent`, `schema.py`, migrations, store writers, privacy behavior, export behavior, and focused migration/privacy tests.
|
|
34
|
+
2. Add new content-index records through `schema.py`, `store/content_index.py`, source provenance tests, cleanup tests, and shareable-output tests proving indexed content does not leak through default exports.
|
|
35
|
+
3. Add new report views through `reports.py` first, then wire CLI and MCP wrappers to the shared service.
|
|
36
|
+
4. Add new machine-readable outputs through `api_payloads.py`, a `schema` value, `json_contracts.py`, and focused contract tests when the output is stable.
|
|
37
|
+
5. Add dashboard-only interactions in the narrowest dashboard module and keep URL state in dashboard state helpers.
|
|
38
|
+
6. Keep examples, screenshots, mocks, and fixtures synthetic. Never derive committed fixtures from real logs.
|
|
39
|
+
7. When editing skill instructions, update both the source `skills/...` file and the bundled `src/codex_usage_tracker/plugin_data/skills/...` copy. `scripts/check_release.py` verifies installable plugin assets stay complete and synced.
|
|
40
|
+
8. When adding fields derived from `cwd`, Git metadata, source paths, log-event metadata, or indexed content, decide how they behave in `normal`, `redacted`, and `strict` privacy modes before exposing them in dashboard, JSON, CSV, MCP, support-bundle, or shareable export output.
|
|
41
|
+
9. Diagnostic snapshot refresh must remain explicit on demand. Normal usage refresh paths may load stored snapshots, but must not rescan source logs for diagnostic sections unless the user calls diagnostics `--refresh` or a `/api/diagnostics/<section>/refresh` endpoint.
|
|
42
|
+
|
|
43
|
+
## Validation
|
|
44
|
+
|
|
45
|
+
Use the narrowest useful check first, then the release suite before committing shared parser, schema, MCP, dashboard, packaging, or privacy changes:
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
python -m pytest
|
|
49
|
+
python -m compileall src
|
|
50
|
+
python -m mypy
|
|
51
|
+
for file in src/codex_usage_tracker/plugin_data/dashboard/dashboard*.js; do
|
|
52
|
+
node --check "$file"
|
|
53
|
+
done
|
|
54
|
+
python scripts/check_release.py
|
|
55
|
+
python -m build
|
|
56
|
+
python scripts/check_release.py --dist
|
|
57
|
+
git diff --check
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
Dashboard UI changes should also be opened in a browser and checked at desktop and mobile widths for overflow, overlap, stale state, and shareable-output behavior.
|
|
61
|
+
|
|
62
|
+
Run `python scripts/benchmark_synthetic_history.py --rows 10000 100000 --json --enforce-thresholds` after changing SQLite filters, dashboard payload loading, or indexes. Run `python scripts/benchmark_synthetic_history.py --rows 1000 --with-source-logs --json --enforce-thresholds` after changing source-log refresh, content indexing, explicit context loading, or source-log diagnostics. Run the 500k benchmark before release work when practical.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# CLI, MCP, and Dashboard JSON Schemas
|
|
2
2
|
|
|
3
|
-
Codex Usage Tracker exposes
|
|
3
|
+
Codex Usage Tracker exposes JSON for automation through CLI `--json` flags, MCP tools, and the local dashboard server API. Default shareable payloads are aggregate-first and do not include prompts, assistant messages, tool output, or raw transcript snippets. `usage_content_search` is the explicit local content-index exception and marks that it can include indexed snippets.
|
|
4
4
|
|
|
5
5
|
## Companion Skill Usage
|
|
6
6
|
|
|
@@ -47,6 +47,9 @@ Tracked schema ids:
|
|
|
47
47
|
| `codex-usage-tracker-summary-v1` | CLI `summary --json`, CLI `expensive --json`, MCP summary/expensive JSON |
|
|
48
48
|
| `codex-usage-tracker-query-v1` | CLI `query`, MCP `usage_query(...)` |
|
|
49
49
|
| `codex-usage-tracker-recommendations-v1` | CLI `recommendations --json`, MCP `usage_recommendations(response_format="json")`, MCP `usage_dashboard_recommendations(...)` |
|
|
50
|
+
| `codex-usage-tracker-allowance-history-v1` | CLI `allowance-history --json`, MCP `usage_allowance_history(...)`, dashboard server `/api/allowance/history` |
|
|
51
|
+
| `codex-usage-tracker-allowance-diagnostics-v1` | CLI `allowance-diagnostics --json`, MCP `usage_allowance_diagnostics(...)`, dashboard server `/api/allowance/diagnostics` |
|
|
52
|
+
| `codex-usage-tracker-allowance-evidence-export-v1` | CLI `allowance-export --json`, MCP `usage_allowance_export(...)`, dashboard server `/api/allowance/export` |
|
|
50
53
|
| `codex-usage-tracker-reports-pack-v1` | Dashboard server `/api/reports/pack` response, MCP `usage_report_pack(...)` |
|
|
51
54
|
| `codex-usage-tracker-diagnostics-v1` | CLI `diagnostics ... --json`, dashboard server `/api/diagnostics/*` |
|
|
52
55
|
| `codex-usage-tracker-diagnostic-overview-v1` | CLI `diagnostics overview --json`, dashboard server `/api/diagnostics/overview` |
|
|
@@ -74,6 +77,12 @@ Tracked schema ids:
|
|
|
74
77
|
| `codex-usage-tracker-open-dashboard-v1` | CLI `open-dashboard --json` |
|
|
75
78
|
| `codex-usage-tracker-serve-dashboard-v1` | CLI `serve-dashboard --json` startup payload, including preferred React `dashboard_url` and legacy `legacy_dashboard_url` fallback |
|
|
76
79
|
| `codex-usage-tracker-pricing-coverage-v1` | CLI `pricing-coverage --json`, MCP `usage_pricing_coverage(response_format="json")` |
|
|
80
|
+
| `codex-usage-tracker-source-coverage-v1` | CLI `source-coverage --json`, MCP `usage_source_coverage(response_format="json")` |
|
|
81
|
+
| `codex-usage-tracker-content-search-v1` | MCP `usage_content_search(...)`; explicit local content-index search, may include indexed snippets |
|
|
82
|
+
| `codex-usage-tracker-thread-trace-v1` | MCP `usage_thread_trace(...)`; explicit local content-index thread/session timeline |
|
|
83
|
+
| `codex-usage-tracker-pattern-scan-v1` | MCP `usage_repetition_scan(...)`, `usage_command_loop_scan(...)`, `usage_file_churn_scan(...)`, `usage_context_bloat_scan(...)`; explicit local content/event-index pattern diagnostics |
|
|
84
|
+
| `codex-usage-tracker-investigation-walk-v1` | MCP `usage_investigation_walk(question=...)`; bounded local hypothesis walk over normalized pattern evidence |
|
|
85
|
+
| `codex-usage-tracker-local-evidence-export-v1` | MCP `usage_local_evidence_export(question=...)`; strict shareable local evidence summary without raw/indexed content |
|
|
77
86
|
| `codex-usage-tracker-export-v1` | CLI `export --json`, MCP `export_usage_csv(...)` |
|
|
78
87
|
| `codex-usage-tracker-init-pricing-v1` | CLI `init-pricing --json`, MCP `init_usage_pricing_config()` |
|
|
79
88
|
| `codex-usage-tracker-update-pricing-v1` | CLI `update-pricing --json`, MCP `update_usage_pricing_config()` |
|
|
@@ -214,6 +223,76 @@ Schema: `codex-usage-tracker-recommendations-v1`
|
|
|
214
223
|
|
|
215
224
|
Rows include `recommendation_score`, `primary_recommendation`, `secondary_recommendations`, `primary_signal`, `secondary_signals`, `recommended_action`, and `flag_explanations`. Thread rollups summarize the highest-priority threads using the same aggregate-only signals.
|
|
216
225
|
|
|
226
|
+
## Allowance Intelligence
|
|
227
|
+
|
|
228
|
+
Commands:
|
|
229
|
+
|
|
230
|
+
```bash
|
|
231
|
+
codex-usage-tracker allowance-history --window-kind weekly --json
|
|
232
|
+
codex-usage-tracker allowance-diagnostics --window-kind weekly --json
|
|
233
|
+
codex-usage-tracker allowance-export --output /tmp/codex-allowance-evidence.json
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
MCP:
|
|
237
|
+
|
|
238
|
+
- `usage_allowance_history(...)`
|
|
239
|
+
- `usage_allowance_diagnostics(...)`
|
|
240
|
+
- `usage_allowance_export(...)`
|
|
241
|
+
|
|
242
|
+
Server API:
|
|
243
|
+
|
|
244
|
+
- `/api/allowance/history`
|
|
245
|
+
- `/api/allowance/diagnostics`
|
|
246
|
+
- `/api/allowance/export`
|
|
247
|
+
|
|
248
|
+
Schemas:
|
|
249
|
+
|
|
250
|
+
- `codex-usage-tracker-allowance-history-v1`
|
|
251
|
+
- `codex-usage-tracker-allowance-diagnostics-v1`
|
|
252
|
+
- `codex-usage-tracker-allowance-evidence-export-v1`
|
|
253
|
+
|
|
254
|
+
Allowance intelligence normalizes observed 5-hour and weekly usage snapshots from aggregate token-count rows. Diagnostics compare visible usage movement with locally estimated Codex credits and grade the evidence. Weekly windows are the primary signal; 5-hour windows are treated as noisy rolling counters. Weekly change candidates include `nonparametric-v1` statistical evidence and a stricter `summary.research_readiness.ready_for_public_claim` flag. Strict export omits prompts, assistant text, tool output, file paths, thread names, session IDs, and record IDs.
|
|
255
|
+
|
|
256
|
+
HTTP report endpoints accept `limit=all`, `limit=0`, `limit=none`, and `limit=null` as all rows up to the endpoint safety cap.
|
|
257
|
+
|
|
258
|
+
```json
|
|
259
|
+
{
|
|
260
|
+
"schema": "codex-usage-tracker-allowance-diagnostics-v1",
|
|
261
|
+
"generated_at": "2026-06-01T00:00:00+00:00",
|
|
262
|
+
"privacy_mode": "strict",
|
|
263
|
+
"include_archived": false,
|
|
264
|
+
"window_kind": "weekly",
|
|
265
|
+
"summary": {
|
|
266
|
+
"observation_count": 4,
|
|
267
|
+
"primary_evidence_grade": "possible_regime_change",
|
|
268
|
+
"research_readiness": {
|
|
269
|
+
"detector_version": "nonparametric-v1",
|
|
270
|
+
"ready_for_public_claim": false,
|
|
271
|
+
"weekly_positive_span_count": 3,
|
|
272
|
+
"minimum_split_spans_for_public_claim": 6
|
|
273
|
+
}
|
|
274
|
+
},
|
|
275
|
+
"windows": [],
|
|
276
|
+
"spans": [],
|
|
277
|
+
"change_candidates": [
|
|
278
|
+
{
|
|
279
|
+
"evidence_grade": "possible_regime_change",
|
|
280
|
+
"capacity_ratio": 0.72,
|
|
281
|
+
"outside_usage_possible": true,
|
|
282
|
+
"statistical_evidence": {
|
|
283
|
+
"detector_version": "nonparametric-v1",
|
|
284
|
+
"method": "exact_permutation_mean_shift",
|
|
285
|
+
"effect_size_cliffs_delta": -0.67,
|
|
286
|
+
"p_value_one_sided": 0.18,
|
|
287
|
+
"signal": "directional_effect_limited",
|
|
288
|
+
"public_claim_ready": false
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
],
|
|
292
|
+
"notes": []
|
|
293
|
+
}
|
|
294
|
+
```
|
|
295
|
+
|
|
217
296
|
## Session
|
|
218
297
|
|
|
219
298
|
Command:
|
|
@@ -763,6 +842,168 @@ Schema: `codex-usage-tracker-pricing-coverage-v1`
|
|
|
763
842
|
}
|
|
764
843
|
```
|
|
765
844
|
|
|
845
|
+
## Source Coverage
|
|
846
|
+
|
|
847
|
+
Command:
|
|
848
|
+
|
|
849
|
+
```bash
|
|
850
|
+
codex-usage-tracker source-coverage --json
|
|
851
|
+
```
|
|
852
|
+
|
|
853
|
+
MCP:
|
|
854
|
+
|
|
855
|
+
- `usage_source_coverage(response_format="json")`
|
|
856
|
+
|
|
857
|
+
Schema: `codex-usage-tracker-source-coverage-v1`
|
|
858
|
+
|
|
859
|
+
```json
|
|
860
|
+
{
|
|
861
|
+
"schema": "codex-usage-tracker-source-coverage-v1",
|
|
862
|
+
"content_mode": "aggregate_only",
|
|
863
|
+
"includes_indexed_content": false,
|
|
864
|
+
"includes_raw_fragments": false,
|
|
865
|
+
"include_archived": false,
|
|
866
|
+
"source_record_count": 2,
|
|
867
|
+
"source_file_count": 2,
|
|
868
|
+
"parser_version_count": 1,
|
|
869
|
+
"warning_record_count": 0,
|
|
870
|
+
"rows": [
|
|
871
|
+
{
|
|
872
|
+
"raw_shape_label": "token_count",
|
|
873
|
+
"parser_adapter": "codex-jsonl",
|
|
874
|
+
"parser_version": "codex-jsonl-v2",
|
|
875
|
+
"record_count": 2,
|
|
876
|
+
"source_file_count": 2,
|
|
877
|
+
"warning_record_count": 0
|
|
878
|
+
}
|
|
879
|
+
]
|
|
880
|
+
}
|
|
881
|
+
```
|
|
882
|
+
|
|
883
|
+
## Content Search
|
|
884
|
+
|
|
885
|
+
MCP:
|
|
886
|
+
|
|
887
|
+
- `usage_content_search(query="token waste")`
|
|
888
|
+
|
|
889
|
+
Schema: `codex-usage-tracker-content-search-v1`
|
|
890
|
+
|
|
891
|
+
This is an explicit local content-index investigation surface. It can include indexed snippets from local Codex logs, so do not treat it as a default shareable aggregate report.
|
|
892
|
+
|
|
893
|
+
```json
|
|
894
|
+
{
|
|
895
|
+
"schema": "codex-usage-tracker-content-search-v1",
|
|
896
|
+
"content_mode": "local_content_index",
|
|
897
|
+
"includes_indexed_content": true,
|
|
898
|
+
"includes_raw_fragments": true,
|
|
899
|
+
"privacy_mode": "normal",
|
|
900
|
+
"query": "token waste",
|
|
901
|
+
"filters": {
|
|
902
|
+
"since": null,
|
|
903
|
+
"until": null,
|
|
904
|
+
"model": null,
|
|
905
|
+
"effort": null,
|
|
906
|
+
"thread": null,
|
|
907
|
+
"include_archived": false,
|
|
908
|
+
"limit": 20,
|
|
909
|
+
"offset": 0,
|
|
910
|
+
"max_snippet_chars": 800
|
|
911
|
+
},
|
|
912
|
+
"search_mode": "fts5",
|
|
913
|
+
"row_count": 0,
|
|
914
|
+
"total_matched_rows": 0,
|
|
915
|
+
"truncated": false,
|
|
916
|
+
"has_more": false,
|
|
917
|
+
"next_offset": null,
|
|
918
|
+
"rows": []
|
|
919
|
+
}
|
|
920
|
+
```
|
|
921
|
+
|
|
922
|
+
## Thread Trace
|
|
923
|
+
|
|
924
|
+
MCP:
|
|
925
|
+
|
|
926
|
+
- `usage_thread_trace(thread="Add Codex token tracking")`
|
|
927
|
+
- `usage_thread_trace(session_id="...")`
|
|
928
|
+
- `usage_thread_trace(record_id="...")`
|
|
929
|
+
|
|
930
|
+
Schema: `codex-usage-tracker-thread-trace-v1`
|
|
931
|
+
|
|
932
|
+
This is an explicit local content-index investigation surface. It returns aggregate call metadata plus indexed fragments for a selected thread/session scope.
|
|
933
|
+
|
|
934
|
+
```json
|
|
935
|
+
{
|
|
936
|
+
"schema": "codex-usage-tracker-thread-trace-v1",
|
|
937
|
+
"content_mode": "local_content_index",
|
|
938
|
+
"includes_indexed_content": true,
|
|
939
|
+
"includes_raw_fragments": true,
|
|
940
|
+
"privacy_mode": "normal",
|
|
941
|
+
"filters": {
|
|
942
|
+
"thread": "Add Codex token tracking",
|
|
943
|
+
"thread_key": null,
|
|
944
|
+
"session_id": null,
|
|
945
|
+
"record_id": null,
|
|
946
|
+
"since": null,
|
|
947
|
+
"until": null,
|
|
948
|
+
"include_archived": false,
|
|
949
|
+
"limit": 100,
|
|
950
|
+
"offset": 0,
|
|
951
|
+
"max_snippet_chars": 800
|
|
952
|
+
},
|
|
953
|
+
"call_count": 0,
|
|
954
|
+
"total_matched_calls": 0,
|
|
955
|
+
"truncated": false,
|
|
956
|
+
"has_more": false,
|
|
957
|
+
"next_offset": null,
|
|
958
|
+
"calls": []
|
|
959
|
+
}
|
|
960
|
+
```
|
|
961
|
+
|
|
962
|
+
## Pattern Scan
|
|
963
|
+
|
|
964
|
+
MCP:
|
|
965
|
+
|
|
966
|
+
- `usage_repetition_scan(min_occurrences=2)`
|
|
967
|
+
- `usage_command_loop_scan(min_occurrences=2)`
|
|
968
|
+
- `usage_file_churn_scan(min_occurrences=2)`
|
|
969
|
+
- `usage_context_bloat_scan(min_occurrences=2)`
|
|
970
|
+
|
|
971
|
+
Schema: `codex-usage-tracker-pattern-scan-v1`
|
|
972
|
+
|
|
973
|
+
This explicit local content/event-index diagnostic surface scans normalized fragment hashes, command roots, file hashes/basenames, and aggregate token rows. It does not include raw fragments.
|
|
974
|
+
|
|
975
|
+
```json
|
|
976
|
+
{"schema":"codex-usage-tracker-pattern-scan-v1","content_mode":"local_content_index","includes_indexed_content":true,"includes_raw_fragments":false,"privacy_mode":"normal","scan_type":"command_loop","scan_types":["command_loop"],"filters":{"since":null,"until":null,"thread":null,"include_archived":false,"min_occurrences":2,"limit":20},"pattern_count":0,"total_patterns":0,"patterns":[]}
|
|
977
|
+
```
|
|
978
|
+
|
|
979
|
+
## Investigation Walk
|
|
980
|
+
|
|
981
|
+
MCP:
|
|
982
|
+
|
|
983
|
+
- `usage_investigation_walk(question="look for token waste")`
|
|
984
|
+
|
|
985
|
+
Schema: `codex-usage-tracker-investigation-walk-v1`
|
|
986
|
+
|
|
987
|
+
Runs a bounded local hypothesis walk over normalized pattern scans, ranks candidate branches, prunes branches without evidence, and returns recommended next MCP tools. Does not include raw fragments.
|
|
988
|
+
|
|
989
|
+
```json
|
|
990
|
+
{"schema":"codex-usage-tracker-investigation-walk-v1","content_mode":"local_content_index","includes_indexed_content":true,"includes_raw_fragments":false,"privacy_mode":"normal","question":"look for token waste","filters":{"since":null,"until":null,"thread":null,"include_archived":false,"min_occurrences":2,"evidence_limit":5},"summary":{"branch_count":4,"supported_branch_count":0,"top_hypothesis":null,"confidence":"insufficient_local_evidence"},"branches":[],"recommended_next_tools":[]}
|
|
991
|
+
```
|
|
992
|
+
|
|
993
|
+
## Local Evidence Export
|
|
994
|
+
|
|
995
|
+
MCP:
|
|
996
|
+
|
|
997
|
+
- `usage_local_evidence_export(question="share token waste evidence")`
|
|
998
|
+
|
|
999
|
+
Schema: `codex-usage-tracker-local-evidence-export-v1`
|
|
1000
|
+
|
|
1001
|
+
Strict shareable summary derived from local investigation evidence. It omits raw fragments, snippets, record ids, thread names, command labels, file basenames, full paths, raw commands, and raw tool output.
|
|
1002
|
+
|
|
1003
|
+
```json
|
|
1004
|
+
{"schema":"codex-usage-tracker-local-evidence-export-v1","content_mode":"shareable_local_evidence","includes_indexed_content":false,"includes_raw_fragments":false,"privacy_mode":"strict","question":"share token waste evidence","filters":{"since":null,"until":null,"thread":null,"include_archived":false,"min_occurrences":2,"evidence_limit":5},"summary":{"branch_count":4,"supported_branch_count":0,"top_hypothesis":null,"confidence":"insufficient_local_evidence","export_branch_count":0},"branches":[],"omitted_fields":["record_id","session_id","thread_name","raw_fragment","snippet","raw_command","raw_tool_output","full_path","path_basename","command_label"],"caveats":["Local evidence only; not an official OpenAI ledger."]}
|
|
1005
|
+
```
|
|
1006
|
+
|
|
766
1007
|
## Lifecycle Commands
|
|
767
1008
|
|
|
768
1009
|
Most setup and file-writing commands accept `--json` and return a schema-specific payload with written paths and counts:
|
|
@@ -776,6 +1017,7 @@ Most setup and file-writing commands accept `--json` and return a schema-specifi
|
|
|
776
1017
|
- `dashboard --json`: `codex-usage-tracker-dashboard-v1`
|
|
777
1018
|
- `export --json`: `codex-usage-tracker-export-v1`
|
|
778
1019
|
- `pricing-coverage --json`
|
|
1020
|
+
- `source-coverage --json`
|
|
779
1021
|
- `recommendations --json`
|
|
780
1022
|
- `init-pricing --json`, `update-pricing --json`, `pin-pricing --json`
|
|
781
1023
|
- `init-allowance --json`, `parse-allowance --json`
|