codex-usage-tracking 0.9.0__tar.gz → 0.10.1__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.9.0 → codex_usage_tracking-0.10.1}/.codex-plugin/plugin.json +1 -1
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/CHANGELOG.md +13 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/PKG-INFO +10 -2
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/README.md +9 -1
- codex_usage_tracking-0.10.1/docs/assets/dashboard-call-investigator-evidence.png +0 -0
- codex_usage_tracking-0.10.1/docs/assets/dashboard-call-investigator-preview.png +0 -0
- codex_usage_tracking-0.10.1/docs/assets/dashboard-call-investigator.png +0 -0
- codex_usage_tracking-0.10.1/docs/assets/dashboard-calls-preview.png +0 -0
- codex_usage_tracking-0.10.1/docs/assets/dashboard-calls.png +0 -0
- codex_usage_tracking-0.10.1/docs/assets/dashboard-details.png +0 -0
- codex_usage_tracking-0.10.1/docs/assets/dashboard-diagnostics-git-expanded.png +0 -0
- codex_usage_tracking-0.10.1/docs/assets/dashboard-diagnostics.png +0 -0
- codex_usage_tracking-0.10.1/docs/assets/dashboard-insights.png +0 -0
- codex_usage_tracking-0.10.1/docs/assets/dashboard-threads.png +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/docs/cli-json-schemas.md +98 -1
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/docs/cli-reference.md +5 -3
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/docs/dashboard-guide.md +9 -3
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/docs/development.md +8 -7
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/docs/one-dot-oh-readiness.md +8 -8
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/docs/privacy.md +2 -2
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/pyproject.toml +1 -1
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/scripts/check_release.py +6 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/scripts/smoke_installed_package.py +2 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/skills/codex-usage-tracker/scripts/run_mcp.py +2 -2
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/src/codex_usage_tracker/__init__.py +1 -1
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/src/codex_usage_tracker/cli.py +14 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/src/codex_usage_tracker/cli_parser.py +24 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/src/codex_usage_tracker/context.py +105 -4
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/src/codex_usage_tracker/diagnostic_snapshot_analysis.py +130 -1
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/src/codex_usage_tracker/diagnostic_snapshot_constants.py +4 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/src/codex_usage_tracker/diagnostic_snapshot_events.py +97 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/src/codex_usage_tracker/diagnostic_snapshot_report.py +37 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/src/codex_usage_tracker/diagnostic_snapshot_rows.py +73 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/src/codex_usage_tracker/diagnostic_snapshots.py +76 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/src/codex_usage_tracker/json_contracts.py +29 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/src/codex_usage_tracker/plugin_data/dashboard/dashboard.css +1 -1
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/src/codex_usage_tracker/plugin_data/dashboard/dashboard.js +7 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_actions.js +4 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_analysis.js +18 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_call_investigator.js +41 -7
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_detail.css +19 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_details.js +3 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_diagnostics_snapshots.js +60 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_format.js +21 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_i18n.js +4 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_tables.css +6 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_tables.js +18 -3
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_template.html +3 -1
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/src/codex_usage_tracker/plugin_data/dashboard/locales/ar.json +4 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/src/codex_usage_tracker/plugin_data/dashboard/locales/de.json +4 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/src/codex_usage_tracker/plugin_data/dashboard/locales/en.json +4 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/src/codex_usage_tracker/plugin_data/dashboard/locales/es.json +4 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/src/codex_usage_tracker/plugin_data/dashboard/locales/fr.json +4 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/src/codex_usage_tracker/plugin_data/dashboard/locales/it.json +4 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/src/codex_usage_tracker/plugin_data/dashboard/locales/ja.json +4 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/src/codex_usage_tracker/plugin_data/dashboard/locales/ko.json +4 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/src/codex_usage_tracker/plugin_data/dashboard/locales/pt.json +4 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/src/codex_usage_tracker/plugin_data/dashboard/locales/ru.json +4 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/src/codex_usage_tracker/plugin_data/dashboard/locales/vi.json +4 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/src/codex_usage_tracker/plugin_data/dashboard/locales/zh-Hans.json +4 -0
- codex_usage_tracking-0.10.1/src/codex_usage_tracker/plugin_data/docs/assets/dashboard-call-investigator-evidence.png +0 -0
- codex_usage_tracking-0.10.1/src/codex_usage_tracker/plugin_data/docs/assets/dashboard-call-investigator-preview.png +0 -0
- codex_usage_tracking-0.10.1/src/codex_usage_tracker/plugin_data/docs/assets/dashboard-call-investigator.png +0 -0
- codex_usage_tracking-0.10.1/src/codex_usage_tracker/plugin_data/docs/assets/dashboard-calls-preview.png +0 -0
- codex_usage_tracking-0.10.1/src/codex_usage_tracker/plugin_data/docs/assets/dashboard-calls.png +0 -0
- codex_usage_tracking-0.10.1/src/codex_usage_tracker/plugin_data/docs/assets/dashboard-details.png +0 -0
- codex_usage_tracking-0.10.1/src/codex_usage_tracker/plugin_data/docs/assets/dashboard-diagnostics-git-expanded.png +0 -0
- codex_usage_tracking-0.10.1/src/codex_usage_tracker/plugin_data/docs/assets/dashboard-diagnostics.png +0 -0
- codex_usage_tracking-0.10.1/src/codex_usage_tracker/plugin_data/docs/assets/dashboard-insights.png +0 -0
- codex_usage_tracking-0.10.1/src/codex_usage_tracker/plugin_data/docs/assets/dashboard-threads.png +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/src/codex_usage_tracker/plugin_data/docs/dashboard-guide.html +3 -2
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/src/codex_usage_tracker/server.py +46 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/src/codex_usage_tracker/store.py +100 -14
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/src/codex_usage_tracker/store_query_sql.py +25 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/src/codex_usage_tracking.egg-info/PKG-INFO +10 -2
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/src/codex_usage_tracking.egg-info/SOURCES.txt +4 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/tests/test_cli_lifecycle.py +38 -1
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/tests/test_context_evidence.py +100 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/tests/test_dashboard_diagnostics_snapshots.py +130 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/tests/test_dashboard_payload.py +13 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/tests/test_dashboard_server.py +28 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/tests/test_diagnostic_snapshots.py +179 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/tests/test_store_dashboard_mcp.py +92 -0
- codex_usage_tracking-0.9.0/docs/assets/dashboard-call-investigator-evidence.png +0 -0
- codex_usage_tracking-0.9.0/docs/assets/dashboard-call-investigator-preview.png +0 -0
- codex_usage_tracking-0.9.0/docs/assets/dashboard-call-investigator.png +0 -0
- codex_usage_tracking-0.9.0/docs/assets/dashboard-calls-preview.png +0 -0
- codex_usage_tracking-0.9.0/docs/assets/dashboard-calls.png +0 -0
- codex_usage_tracking-0.9.0/docs/assets/dashboard-details.png +0 -0
- codex_usage_tracking-0.9.0/docs/assets/dashboard-insights.png +0 -0
- codex_usage_tracking-0.9.0/docs/assets/dashboard-threads.png +0 -0
- codex_usage_tracking-0.9.0/src/codex_usage_tracker/plugin_data/docs/assets/dashboard-call-investigator-evidence.png +0 -0
- codex_usage_tracking-0.9.0/src/codex_usage_tracker/plugin_data/docs/assets/dashboard-call-investigator-preview.png +0 -0
- codex_usage_tracking-0.9.0/src/codex_usage_tracker/plugin_data/docs/assets/dashboard-call-investigator.png +0 -0
- codex_usage_tracking-0.9.0/src/codex_usage_tracker/plugin_data/docs/assets/dashboard-calls-preview.png +0 -0
- codex_usage_tracking-0.9.0/src/codex_usage_tracker/plugin_data/docs/assets/dashboard-calls.png +0 -0
- codex_usage_tracking-0.9.0/src/codex_usage_tracker/plugin_data/docs/assets/dashboard-details.png +0 -0
- codex_usage_tracking-0.9.0/src/codex_usage_tracker/plugin_data/docs/assets/dashboard-insights.png +0 -0
- codex_usage_tracking-0.9.0/src/codex_usage_tracker/plugin_data/docs/assets/dashboard-threads.png +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/.mcp.json +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/AGENTS.md +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/CONTRIBUTING.md +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/LICENSE +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/MANIFEST.in +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/SECURITY.md +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/assets/icon.svg +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/docs/architecture.md +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/docs/assets/plugin-prompts.png +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/docs/assets/plugin-thread-leaderboard.png +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/docs/assets/ux/call-detail-panel.png +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/docs/assets/ux/insight-overview.png +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/docs/assets/ux/thread-investigation.png +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/docs/call-drilldown-performance-checklist.md +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/docs/install.md +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/docs/mcp.md +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/docs/pricing-and-credits.md +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/docs/ui-ux-improvement-plan.md +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/scripts/benchmark_synthetic_history.py +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/scripts/install_local_plugin.py +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/setup.cfg +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/skills/codex-usage-api/SKILL.md +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/skills/codex-usage-tracker/SKILL.md +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/src/codex_usage_tracker/__main__.py +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/src/codex_usage_tracker/allowance.py +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/src/codex_usage_tracker/api_payloads.py +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/src/codex_usage_tracker/call_origin.py +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/src/codex_usage_tracker/costing.py +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/src/codex_usage_tracker/dashboard.py +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/src/codex_usage_tracker/diagnostic_facts.py +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/src/codex_usage_tracker/diagnostic_reports.py +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/src/codex_usage_tracker/diagnostic_snapshot_concentration.py +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/src/codex_usage_tracker/diagnostics.py +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/src/codex_usage_tracker/formatting.py +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/src/codex_usage_tracker/i18n.py +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/src/codex_usage_tracker/mcp_server.py +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/src/codex_usage_tracker/models.py +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/src/codex_usage_tracker/parser.py +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/src/codex_usage_tracker/paths.py +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/src/codex_usage_tracker/plugin_data/__init__.py +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/src/codex_usage_tracker/plugin_data/assets/icon.svg +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_call.css +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_call_diagnostics.js +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_cells.js +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_data.js +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_diagnostics.js +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_diagnostics_facts.js +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_events.js +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_filters.js +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_insights.css +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_insights.js +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_layout.css +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_live.js +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_payload_cache.js +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_responsive.css +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_state.js +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_status.js +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_tooltips.js +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/src/codex_usage_tracker/plugin_data/docs/assets/plugin-prompts.png +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/src/codex_usage_tracker/plugin_data/docs/assets/plugin-thread-leaderboard.png +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/src/codex_usage_tracker/plugin_data/rate_cards/codex-credit-rates.json +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/src/codex_usage_tracker/plugin_data/skills/codex-usage-api/SKILL.md +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/src/codex_usage_tracker/plugin_data/skills/codex-usage-tracker/SKILL.md +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/src/codex_usage_tracker/plugin_installer.py +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/src/codex_usage_tracker/pricing.py +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/src/codex_usage_tracker/pricing_config.py +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/src/codex_usage_tracker/pricing_estimates.py +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/src/codex_usage_tracker/pricing_openai.py +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/src/codex_usage_tracker/projects.py +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/src/codex_usage_tracker/recommendations.py +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/src/codex_usage_tracker/redaction.py +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/src/codex_usage_tracker/reports.py +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/src/codex_usage_tracker/schema.py +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/src/codex_usage_tracker/server_utils.py +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/src/codex_usage_tracker/store_schema.py +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/src/codex_usage_tracker/store_sources.py +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/src/codex_usage_tracker/store_thread_summaries.py +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/src/codex_usage_tracker/support.py +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/src/codex_usage_tracker/threads.py +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/src/codex_usage_tracking.egg-info/dependency_links.txt +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/src/codex_usage_tracking.egg-info/entry_points.txt +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/src/codex_usage_tracking.egg-info/requires.txt +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/src/codex_usage_tracking.egg-info/top_level.txt +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/tests/store_dashboard_helpers.py +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/tests/test_allowance.py +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/tests/test_call_origin.py +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/tests/test_cli_release.py +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/tests/test_dashboard_data.py +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/tests/test_dashboard_live.py +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/tests/test_dashboard_state.py +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/tests/test_i18n.py +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/tests/test_json_contracts.py +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/tests/test_mcp_integration.py +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/tests/test_mcp_launcher.py +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/tests/test_parser.py +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/tests/test_plugin_installer.py +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/tests/test_pricing.py +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/tests/test_privacy.py +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/tests/test_projects.py +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/tests/test_recommendations.py +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/tests/test_redaction.py +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/tests/test_schema.py +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/tests/test_store_migrations.py +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/tests/test_support.py +0 -0
- {codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/tests/test_threads.py +0 -0
|
@@ -2,6 +2,19 @@
|
|
|
2
2
|
|
|
3
3
|
## Unreleased
|
|
4
4
|
|
|
5
|
+
## 0.10.1 - 2026-06-21
|
|
6
|
+
|
|
7
|
+
- Add lightweight action timing metadata to context evidence so call investigations can show elapsed time for parsed tool and command actions without persisting raw command text or outputs.
|
|
8
|
+
- Add synthetic README diagnostics coverage for the Git Interactions panel and package the screenshot with installed plugin docs.
|
|
9
|
+
|
|
10
|
+
## 0.10.0 - 2026-06-21
|
|
11
|
+
|
|
12
|
+
- Add Git/GitHub CLI diagnostic snapshots with safe operation labels, coarse categories, mutability buckets, and terminal token-count coverage.
|
|
13
|
+
- Add file-modification diagnostic snapshots for structured patch events, modified-path aggregates, extension counts, and largest modification events without storing patch text or raw paths.
|
|
14
|
+
- Add derived call timing fields for call start, duration, previous-call timestamp, and previous-call gap across dashboard rows, details, CSV/export actions, live API sorting, and thread aggregates.
|
|
15
|
+
- Surface `Duration`, `Prev gap`, `Longest duration`, and `Longest gap` in the dashboard with localized labels and focused regression coverage.
|
|
16
|
+
- Reconcile all diagnostics panels into one release so `overview`, `tool-output`, `commands`, `git-interactions`, `file-reads`, `file-modifications`, `read-productivity`, and `concentration` can refresh together from the live dashboard.
|
|
17
|
+
|
|
5
18
|
## 0.9.0 - 2026-06-21
|
|
6
19
|
|
|
7
20
|
- Add persisted aggregate diagnostic snapshots with explicit on-demand refresh metadata and schema-versioned CLI/API contracts.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: codex-usage-tracking
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.10.1
|
|
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
|
|
@@ -103,11 +103,19 @@ Threads view groups related calls so long chats, subagents, and auto-review pass
|
|
|
103
103
|
|
|
104
104
|

|
|
105
105
|
|
|
106
|
+
Diagnostics surfaces on-demand snapshot reports for tool output, commands, Git interactions, file reads, file modifications, read productivity, and concentration without tying them to the normal live refresh loop.
|
|
107
|
+
|
|
108
|
+

|
|
109
|
+
|
|
110
|
+
The Git Interactions panel expands the safe Git and GitHub CLI operation families without storing command text, branch names, release notes, or patch content.
|
|
111
|
+
|
|
112
|
+

|
|
113
|
+
|
|
106
114
|
Insights still gives a fast triage layer for costly threads, low cache reuse, context bloat, and pricing gaps.
|
|
107
115
|
|
|
108
116
|

|
|
109
117
|
|
|
110
|
-
The dashboard screenshots use synthetic aggregate fixture data, and the companion prompt and chat previews are synthetic. They do not contain prompts from local logs, assistant responses, tool output, real thread names, real usage totals, or real Codex session content. See the [Dashboard Guide](docs/dashboard-guide.md) for the full walkthrough.
|
|
118
|
+
The dashboard screenshots use synthetic aggregate fixture data, and the companion prompt and chat previews are synthetic. They do not contain prompts from local logs, assistant responses, real tool output, real thread names, real usage totals, or real Codex session content. See the [Dashboard Guide](docs/dashboard-guide.md) for the full walkthrough.
|
|
111
119
|
|
|
112
120
|
If this helped you track Codex usage, starring the repo helps others find it. Issues and feature requests are welcome.
|
|
113
121
|
|
|
@@ -65,11 +65,19 @@ Threads view groups related calls so long chats, subagents, and auto-review pass
|
|
|
65
65
|
|
|
66
66
|

|
|
67
67
|
|
|
68
|
+
Diagnostics surfaces on-demand snapshot reports for tool output, commands, Git interactions, file reads, file modifications, read productivity, and concentration without tying them to the normal live refresh loop.
|
|
69
|
+
|
|
70
|
+

|
|
71
|
+
|
|
72
|
+
The Git Interactions panel expands the safe Git and GitHub CLI operation families without storing command text, branch names, release notes, or patch content.
|
|
73
|
+
|
|
74
|
+

|
|
75
|
+
|
|
68
76
|
Insights still gives a fast triage layer for costly threads, low cache reuse, context bloat, and pricing gaps.
|
|
69
77
|
|
|
70
78
|

|
|
71
79
|
|
|
72
|
-
The dashboard screenshots use synthetic aggregate fixture data, and the companion prompt and chat previews are synthetic. They do not contain prompts from local logs, assistant responses, tool output, real thread names, real usage totals, or real Codex session content. See the [Dashboard Guide](docs/dashboard-guide.md) for the full walkthrough.
|
|
80
|
+
The dashboard screenshots use synthetic aggregate fixture data, and the companion prompt and chat previews are synthetic. They do not contain prompts from local logs, assistant responses, real tool output, real thread names, real usage totals, or real Codex session content. See the [Dashboard Guide](docs/dashboard-guide.md) for the full walkthrough.
|
|
73
81
|
|
|
74
82
|
If this helped you track Codex usage, starring the repo helps others find it. Issues and feature requests are welcome.
|
|
75
83
|
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -50,7 +50,9 @@ Tracked schema ids:
|
|
|
50
50
|
| `codex-usage-tracker-diagnostic-overview-v1` | CLI `diagnostics overview --json`, dashboard server `/api/diagnostics/overview` |
|
|
51
51
|
| `codex-usage-tracker-diagnostic-tool-output-v1` | CLI `diagnostics tool-output --json`, dashboard server `/api/diagnostics/tool-output` |
|
|
52
52
|
| `codex-usage-tracker-diagnostic-commands-v1` | CLI `diagnostics commands --json`, dashboard server `/api/diagnostics/commands` |
|
|
53
|
+
| `codex-usage-tracker-diagnostic-git-interactions-v1` | CLI `diagnostics git-interactions --json`, dashboard server `/api/diagnostics/git-interactions` |
|
|
53
54
|
| `codex-usage-tracker-diagnostic-file-reads-v1` | CLI `diagnostics file-reads --json`, dashboard server `/api/diagnostics/file-reads` |
|
|
55
|
+
| `codex-usage-tracker-diagnostic-file-modifications-v1` | CLI `diagnostics file-modifications --json`, dashboard server `/api/diagnostics/file-modifications` |
|
|
54
56
|
| `codex-usage-tracker-diagnostic-read-productivity-v1` | CLI `diagnostics read-productivity --json`, dashboard server `/api/diagnostics/read-productivity` |
|
|
55
57
|
| `codex-usage-tracker-diagnostic-concentration-v1` | CLI `diagnostics concentration --json`, dashboard server `/api/diagnostics/concentration` |
|
|
56
58
|
| `codex-usage-tracker-session-v1` | CLI `session --json`, MCP `session_usage(response_format="json")` |
|
|
@@ -168,6 +170,8 @@ Supported filters:
|
|
|
168
170
|
|
|
169
171
|
Privacy mode affects returned metadata after matching rows. `redacted` hides raw cwd/source paths, hides Git remote labels, and hashes unnamed project names. `strict` also hides project-relative cwd, Git branch, and tags. Configured project aliases are treated as explicit display opt-ins.
|
|
170
172
|
|
|
173
|
+
Per-call rows include derived timing fields when returned through dashboard/live call APIs: `call_started_at`, `call_duration_seconds`, `previous_call_event_timestamp`, and `previous_call_delta_seconds`. These values are derived from aggregate timestamps and thread adjacency; they do not read or store transcript content.
|
|
174
|
+
|
|
171
175
|
## Recommendations
|
|
172
176
|
|
|
173
177
|
Command:
|
|
@@ -414,6 +418,59 @@ Schema: `codex-usage-tracker-diagnostic-commands-v1`
|
|
|
414
418
|
|
|
415
419
|
The commands snapshot keeps only command roots and a bounded list of safe one-level child labels such as `status`, `diff`, or `-m:pytest`.
|
|
416
420
|
|
|
421
|
+
## Diagnostic Git Interactions Snapshot
|
|
422
|
+
|
|
423
|
+
Commands:
|
|
424
|
+
|
|
425
|
+
```bash
|
|
426
|
+
codex-usage-tracker diagnostics git-interactions --json
|
|
427
|
+
codex-usage-tracker diagnostics git-interactions --refresh --json
|
|
428
|
+
```
|
|
429
|
+
|
|
430
|
+
Dashboard server API:
|
|
431
|
+
|
|
432
|
+
- `GET /api/diagnostics/git-interactions`
|
|
433
|
+
- `POST /api/diagnostics/git-interactions/refresh`
|
|
434
|
+
|
|
435
|
+
Schema: `codex-usage-tracker-diagnostic-git-interactions-v1`
|
|
436
|
+
|
|
437
|
+
```json
|
|
438
|
+
{
|
|
439
|
+
"schema": "codex-usage-tracker-diagnostic-git-interactions-v1",
|
|
440
|
+
"section": "git-interactions",
|
|
441
|
+
"status": "ready",
|
|
442
|
+
"refreshed": false,
|
|
443
|
+
"raw_context_included": false,
|
|
444
|
+
"snapshot": {},
|
|
445
|
+
"summary": {
|
|
446
|
+
"git_shell_calls": 2,
|
|
447
|
+
"git_command_calls": 1,
|
|
448
|
+
"github_cli_calls": 1,
|
|
449
|
+
"unique_interactions": 2,
|
|
450
|
+
"interactions_with_original_token_count": 2,
|
|
451
|
+
"interactions_missing_original_token_count": 0,
|
|
452
|
+
"original_token_sum": 55
|
|
453
|
+
},
|
|
454
|
+
"interactions": [
|
|
455
|
+
{
|
|
456
|
+
"root": "git",
|
|
457
|
+
"operation": "status",
|
|
458
|
+
"category": "read_only",
|
|
459
|
+
"mutability": "read_only",
|
|
460
|
+
"calls": 1,
|
|
461
|
+
"with_original_token_count": 1,
|
|
462
|
+
"missing_original_token_count": 0,
|
|
463
|
+
"original_token_sum": 42
|
|
464
|
+
}
|
|
465
|
+
],
|
|
466
|
+
"categories": [{"category": "read_only", "count": 1}],
|
|
467
|
+
"mutability": [{"mutability": "read_only", "count": 1}],
|
|
468
|
+
"notes": []
|
|
469
|
+
}
|
|
470
|
+
```
|
|
471
|
+
|
|
472
|
+
The Git interactions snapshot is a specialized view of shell commands. It persists only `git`/`gh` root labels, safe operation labels, coarse categories, counts, and token coverage. It does not persist raw command strings, branch names, remotes, file paths, tags, commit messages, PR titles, release notes, or raw command output.
|
|
473
|
+
|
|
417
474
|
## Diagnostic File Reads Snapshot
|
|
418
475
|
|
|
419
476
|
Commands:
|
|
@@ -456,6 +513,46 @@ Schema: `codex-usage-tracker-diagnostic-file-reads-v1`
|
|
|
456
513
|
|
|
457
514
|
The file-reads snapshot classifies common shell readers such as `cat`, `sed`, `nl`, `rg`, and `find`. Path labels are basename-only with a short irreversible hash; raw commands, command arguments, absolute paths, file contents, and tool output are not stored.
|
|
458
515
|
|
|
516
|
+
## Diagnostic File Modifications Snapshot
|
|
517
|
+
|
|
518
|
+
Commands:
|
|
519
|
+
|
|
520
|
+
```bash
|
|
521
|
+
codex-usage-tracker diagnostics file-modifications --json
|
|
522
|
+
codex-usage-tracker diagnostics file-modifications --refresh --json
|
|
523
|
+
```
|
|
524
|
+
|
|
525
|
+
Dashboard server API:
|
|
526
|
+
|
|
527
|
+
- `GET /api/diagnostics/file-modifications`
|
|
528
|
+
- `POST /api/diagnostics/file-modifications/refresh`
|
|
529
|
+
|
|
530
|
+
Schema: `codex-usage-tracker-diagnostic-file-modifications-v1`
|
|
531
|
+
|
|
532
|
+
```json
|
|
533
|
+
{
|
|
534
|
+
"schema": "codex-usage-tracker-diagnostic-file-modifications-v1",
|
|
535
|
+
"section": "file-modifications",
|
|
536
|
+
"status": "ready",
|
|
537
|
+
"refreshed": false,
|
|
538
|
+
"raw_context_included": false,
|
|
539
|
+
"snapshot": {},
|
|
540
|
+
"summary": {
|
|
541
|
+
"modification_events": 2,
|
|
542
|
+
"modified_path_events": 3,
|
|
543
|
+
"unique_paths_modified": 2,
|
|
544
|
+
"largest_event_path_count": 2
|
|
545
|
+
},
|
|
546
|
+
"top_paths": [],
|
|
547
|
+
"by_extension": [],
|
|
548
|
+
"largest_events": [],
|
|
549
|
+
"path_privacy": {},
|
|
550
|
+
"notes": []
|
|
551
|
+
}
|
|
552
|
+
```
|
|
553
|
+
|
|
554
|
+
The file-modifications snapshot counts structured patch events and modified paths. Path labels are basename-only with short irreversible hashes; patch text, raw absolute paths, file contents, raw commands, tool output, and JSONL fragments are not stored.
|
|
555
|
+
|
|
459
556
|
## Diagnostic Read Productivity Snapshot
|
|
460
557
|
|
|
461
558
|
Commands:
|
|
@@ -592,4 +689,4 @@ Most setup and file-writing commands accept `--json` and return a schema-specifi
|
|
|
592
689
|
- `init-thresholds --json`, `init-projects --json`
|
|
593
690
|
- `support-bundle --json`
|
|
594
691
|
|
|
595
|
-
`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. 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`.
|
|
692
|
+
`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`.
|
|
@@ -85,7 +85,7 @@ Dashboards default to active sessions only. Use `--include-archived` for an all-
|
|
|
85
85
|
|
|
86
86
|
Use global `--lang <code>` before the dashboard command, or set `CODEX_USAGE_TRACKER_LANG`, to choose the dashboard's initial UI language. The dashboard language selector can then override that default in the browser. Localization applies to dashboard UI text, not JSON fields, CSV columns, model names, thread names, paths, or full CLI output.
|
|
87
87
|
|
|
88
|
-
The localhost `/api/usage` endpoint accepts `limit` and `offset` query parameters, so automation can page aggregate rows without asking the server to load an entire large history at once.
|
|
88
|
+
The localhost `/api/usage` endpoint accepts `limit` and `offset` query parameters, so automation can page aggregate rows without asking the server to load an entire large history at once. Call rows include derived `call_duration_seconds` and `previous_call_delta_seconds`, and live API sorting accepts `duration` and `gap` sort keys.
|
|
89
89
|
|
|
90
90
|
## Summaries
|
|
91
91
|
|
|
@@ -123,7 +123,9 @@ codex-usage-tracker diagnostics tools
|
|
|
123
123
|
codex-usage-tracker diagnostics overview --refresh
|
|
124
124
|
codex-usage-tracker diagnostics tool-output --refresh
|
|
125
125
|
codex-usage-tracker diagnostics commands --refresh
|
|
126
|
+
codex-usage-tracker diagnostics git-interactions --refresh
|
|
126
127
|
codex-usage-tracker diagnostics file-reads --refresh
|
|
128
|
+
codex-usage-tracker diagnostics file-modifications --refresh
|
|
127
129
|
codex-usage-tracker diagnostics read-productivity --refresh
|
|
128
130
|
codex-usage-tracker diagnostics concentration --refresh
|
|
129
131
|
codex-usage-tracker diagnostics fact-calls --fact-type compaction --fact-name post_compaction
|
|
@@ -133,9 +135,9 @@ Diagnostics expose structured event patterns and their associated token totals.
|
|
|
133
135
|
|
|
134
136
|
Snapshot diagnostics are persisted aggregate reports. Without `--refresh`, snapshot commands return the latest stored payload or a `missing` status. With `--refresh`, they recompute from indexed source logs and replace the stored section snapshot. Ordinary `refresh`, `open-dashboard`, and dashboard `Refresh` update usage rows only; they do not recompute diagnostic snapshots.
|
|
135
137
|
|
|
136
|
-
The snapshot sections answer different questions: `overview` summarizes usage rows and aggregate token totals, `tool-output` counts functions and terminal `Original token count` coverage, `commands` keeps command roots plus bounded safe child labels, `file-reads` counts reader/path activity and allocated read-output tokens, `read-productivity` reports later-edit correlations for matching path keys, and `concentration` shows top-N token share by source/session, cwd/project, and day.
|
|
138
|
+
The snapshot sections answer different questions: `overview` summarizes usage rows and aggregate token totals, `tool-output` counts functions and terminal `Original token count` coverage, `commands` keeps command roots plus bounded safe child labels, `git-interactions` counts safe Git/GitHub CLI operations and token-count coverage, `file-reads` counts reader/path activity and allocated read-output tokens, `file-modifications` counts patch modification events and safe modified-path aggregates, `read-productivity` reports later-edit correlations for matching path keys, and `concentration` shows top-N token share by source/session, cwd/project, and day.
|
|
137
139
|
|
|
138
|
-
Diagnostic payloads are aggregate-only. They do not include prompts, assistant text, tool arguments, tool output, patch text, raw commands, command arguments, file contents, raw absolute paths, or JSONL fragments. File-read diagnostics use basename-only path labels plus short irreversible hashes, read-productivity percentages are temporal correlations rather than proof that a read caused a later edit, and concentration reports use safe source/session, cwd, and day labels only.
|
|
140
|
+
Diagnostic payloads are aggregate-only. They do not include prompts, assistant text, tool arguments, tool output, patch text, raw commands, command arguments, file contents, raw absolute paths, or JSONL fragments. Git interaction diagnostics persist only root and operation labels such as `git/status` or `gh/pr`, category counts, and token coverage; they do not persist branch names, remotes, file paths, tags, commit messages, PR titles, or release notes. File-read and file-modification diagnostics use basename-only path labels plus short irreversible hashes, read-productivity percentages are temporal correlations rather than proof that a read caused a later edit, and concentration reports use safe source/session, cwd, and day labels only.
|
|
139
141
|
|
|
140
142
|
## JSON Queries
|
|
141
143
|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
> **Unofficial project:** Codex Usage Tracker is independent and is not made by, affiliated with, endorsed by, sponsored by, or supported by OpenAI. OpenAI and Codex are trademarks of OpenAI.
|
|
4
4
|
|
|
5
|
-
This guide uses synthetic aggregate data. The screenshots do not contain prompts, assistant text, tool output, or real Codex session content.
|
|
5
|
+
This guide uses synthetic aggregate data. The screenshots do not contain real prompts, real assistant text, real tool output, or real Codex session content.
|
|
6
6
|
|
|
7
7
|
## Open The Dashboard
|
|
8
8
|
|
|
@@ -92,6 +92,7 @@ Use `Calls` view when you want to inspect individual model calls.
|
|
|
92
92
|
- In redacted or strict privacy mode, search only sees the redacted metadata fields included in the dashboard payload.
|
|
93
93
|
- The cards summarize only the currently visible filtered rows.
|
|
94
94
|
- Time values are shown in your browser's local date/time format while sorting and time filtering still use the logged timestamp.
|
|
95
|
+
- 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.
|
|
95
96
|
- Calls view token columns separate total tokens, cached input, uncached input, and output so the accounting can be scanned without expanding a row.
|
|
96
97
|
- 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.
|
|
97
98
|
- 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.
|
|
@@ -108,6 +109,7 @@ Useful interpretation notes:
|
|
|
108
109
|
|
|
109
110
|
- `Last call total` is the token usage for the selected model call.
|
|
110
111
|
- `Session cumulative` is the running total Codex logged for that session at the time of that call.
|
|
112
|
+
- `Duration` is a best-effort elapsed time for the selected call segment. `Prev gap` can include waiting time between separate user turns because it measures from the previous resolved-thread call.
|
|
111
113
|
- `Cached input` and `Uncached input` are split so cache behavior is visible without storing transcript text.
|
|
112
114
|
- A cost with `*` means the pricing row is marked as a best-guess estimate.
|
|
113
115
|
- 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.
|
|
@@ -128,12 +130,16 @@ Use `Threads` view when you want to understand a work session as a group instead
|
|
|
128
130
|
|
|
129
131
|
## Diagnostics View
|
|
130
132
|
|
|
133
|
+

|
|
134
|
+
|
|
131
135
|
Use `Diagnostics` view when you want to see what structured event patterns are happening and what token totals are associated with those patterns.
|
|
132
136
|
|
|
133
137
|
- The tab consumes the localhost `/api/diagnostics/*` endpoints; static file dashboards show a live-API unavailable state.
|
|
134
138
|
- The first table shows top diagnostic facts by associated uncached input tokens. Tool/function/MCP/command-family and compaction sections expose narrower slices of the same fact data.
|
|
135
139
|
- Command diagnostics store only a command family such as `pytest`, `git`, or `unknown_command`. Skill and MCP labels are detected only when they are present as structured event metadata.
|
|
136
|
-
- Newer on-demand diagnostic snapshot endpoints are section-specific (`overview`, `tool-output`, `commands`, `file-reads`, `read-productivity`, and `concentration`). Heavy recomputation happens only through explicit diagnostic refresh endpoints. The dashboard's `Refresh diagnostics` button uses one batched refresh so source-log sections share one scan.
|
|
140
|
+
- Newer on-demand diagnostic snapshot endpoints are section-specific (`overview`, `tool-output`, `commands`, `git-interactions`, `file-reads`, `file-modifications`, `read-productivity`, and `concentration`). Heavy recomputation happens only through explicit diagnostic refresh endpoints. The dashboard's `Refresh diagnostics` button uses one batched refresh so source-log sections share one scan.
|
|
141
|
+
- Git interaction panels persist only safe roots and operations such as `git/status` or `gh/pr`, plus coarse categories and counts. They do not expose branch names, remotes, file paths, tags, commit messages, PR titles, release notes, or raw command output.
|
|
142
|
+
- File-modification panels count structured patch events and modified paths using basename-only labels plus short irreversible path hashes. They do not expose patch text, raw paths, file contents, or JSONL fragments.
|
|
137
143
|
- Click `Refresh diagnostics` when you want to recompute stored diagnostic snapshots. The normal dashboard `Refresh` action updates usage rows only.
|
|
138
144
|
- Snapshot panels show their stored status, last computed time, history scope, and logs scanned count. Missing or stale panels still render without forcing a source-log scan.
|
|
139
145
|
- `Tool Output` totals come from terminal wrapper metadata such as `Original token count`; missing-count rows show coverage gaps where that header was absent.
|
|
@@ -165,7 +171,7 @@ Previous and next buttons move chronologically within the same resolved thread a
|
|
|
165
171
|
|
|
166
172
|
The details rail is collapsed by default to preserve table space. Open `Call Details` when you want a compact aggregate preview without leaving the table. When expanded on desktop, it sticks inside the viewport and scrolls internally when the selected call has more fields or loaded context than can fit on screen.
|
|
167
173
|
|
|
168
|
-
The call investigator loads a redacted turn-log evidence window by default when served from localhost with the context API enabled. The default request uses `mode=quick`: redacted tool output is included, no character cap is applied, and serialized local JSONL is reported as a fast character-based upper bound without bucket analysis. The default entry window is still bounded so very long sessions remain responsive. Older surrounding evidence is collapsed by default and can be expanded or loaded explicitly. Visible evidence token estimates are calculated from the full selected-turn evidence set before display limiting, using `tiktoken` when available and a conservative character fallback only when the tokenizer is unavailable.
|
|
174
|
+
The call investigator loads a redacted turn-log evidence window by default when served from localhost with the context API enabled. The default request uses `mode=quick`: redacted tool output is included, no character cap is applied, and serialized local JSONL is reported as a fast character-based upper bound without bucket analysis. The default entry window is still bounded so very long sessions remain responsive. Older surrounding evidence is collapsed by default and can be expanded or loaded explicitly. Evidence entries include lightweight action timing derived from the timestamps already read during that same source-log scan, shown as elapsed time from the selected turn start, gap since the previous evidence entry, and reported event duration when the log provides one. Visible evidence token estimates are calculated from the full selected-turn evidence set before display limiting, using `tiktoken` when available and a conservative character fallback only when the tokenizer is unavailable.
|
|
169
175
|
|
|
170
176
|
Use `Run full serialized analysis` when you specifically want tokenizer-counted serialized JSONL groups such as encrypted reasoning/state, local goal metadata, token callback metadata, and rate-limit metadata. This full mode can explain why visible text is much smaller than exact uncached input, but it can overcount because local JSONL includes client metadata that may not be prompt text. Raw grouped text is not returned. `encrypted_content` is an opaque encrypted field found on some reasoning response items. The tracker cannot decrypt it and treats it as serialized state, not readable prompt, assistant, or tool text. Token-count context entries are labeled as the selected call, previous token count in the same turn, or earlier token count in the same turn when possible, and show call/session cumulative totals for input, cached input, uncached input, output, reasoning output, and total tokens.
|
|
171
177
|
|
|
@@ -38,7 +38,7 @@ fix/<issue-number>-short-description
|
|
|
38
38
|
docs/<issue-number>-short-description
|
|
39
39
|
chore/<issue-number>-short-description
|
|
40
40
|
test/<issue-number>-short-description
|
|
41
|
-
release/0.
|
|
41
|
+
release/0.10.1
|
|
42
42
|
hotfix/0.3.3
|
|
43
43
|
```
|
|
44
44
|
|
|
@@ -91,7 +91,7 @@ blocked
|
|
|
91
91
|
Recommended milestones:
|
|
92
92
|
|
|
93
93
|
```text
|
|
94
|
-
0.
|
|
94
|
+
0.10.1
|
|
95
95
|
1.0-readiness
|
|
96
96
|
1.0.0
|
|
97
97
|
```
|
|
@@ -146,8 +146,8 @@ python scripts/smoke_installed_package.py --docker
|
|
|
146
146
|
To verify the public PyPI package instead of the local checkout:
|
|
147
147
|
|
|
148
148
|
```bash
|
|
149
|
-
python scripts/smoke_installed_package.py --from-pypi --version 0.
|
|
150
|
-
python scripts/smoke_installed_package.py --docker --from-pypi --version 0.
|
|
149
|
+
python scripts/smoke_installed_package.py --from-pypi --version 0.10.1
|
|
150
|
+
python scripts/smoke_installed_package.py --docker --from-pypi --version 0.10.1
|
|
151
151
|
```
|
|
152
152
|
|
|
153
153
|
`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.
|
|
@@ -199,6 +199,7 @@ The tracked dashboard screenshot set is:
|
|
|
199
199
|
- `dashboard-calls.png`
|
|
200
200
|
- `dashboard-calls-preview.png`
|
|
201
201
|
- `dashboard-threads.png`
|
|
202
|
+
- `dashboard-diagnostics.png`
|
|
202
203
|
- `dashboard-details.png`
|
|
203
204
|
- `dashboard-call-investigator.png`
|
|
204
205
|
- `dashboard-call-investigator-preview.png`
|
|
@@ -293,8 +294,8 @@ After the release branch merges, tag from updated `main`, not from an unreviewed
|
|
|
293
294
|
```bash
|
|
294
295
|
git switch main
|
|
295
296
|
git pull --ff-only
|
|
296
|
-
git tag -a v0.
|
|
297
|
-
git push origin v0.
|
|
297
|
+
git tag -a v0.10.1 -m "codex-usage-tracker 0.10.1"
|
|
298
|
+
git push origin v0.10.1
|
|
298
299
|
```
|
|
299
300
|
|
|
300
301
|
Do not create or push release tags without maintainer approval.
|
|
@@ -303,7 +304,7 @@ Do not create or push release tags without maintainer approval.
|
|
|
303
304
|
|
|
304
305
|
Publishing uses GitHub Actions Trusted Publishing through `.github/workflows/publish.yml`; do not upload from a local machine and do not add PyPI or TestPyPI API tokens.
|
|
305
306
|
|
|
306
|
-
The first public package release, `0.3.0`, was published on June 8, 2026. Patch release `0.3.1` followed the same day to ship the live-dashboard skill launch fix. Patch release `0.3.2` made dashboard launch refresh the default and added runtime enablement for context loading. Minor release `0.4.0` added Python 3.14 support, release recovery docs, stricter privacy/support-bundle regression coverage, and large-history benchmark thresholds. Patch release `0.4.1` was published by workflow dispatch from `main`; it hardened the PyPI publish workflow and checked off completed 1.0 readiness gates. Minor release `0.5.0` added dashboard localization support and initial language catalogs. Minor release `0.6.0` is the performance and call-drilldown release with SQL-backed live API slices, materialized thread summaries, faster evidence loading, and dashboard runtime module refactors. Patch release `0.6.1` aligns the final README/package screenshots and companion plugin assets. Minor release `0.7.0` adds observed usage snapshots and the latest-observed dashboard card while keeping raw evidence on demand only. Minor release `0.8.0` adds aggregate diagnostics, source-offset context seeking, and live dashboard loading hardening. Patch release `0.8.1` improves Diagnostics fact table readability with pinned fact names and sortable fact columns. Minor release `0.9.0` adds persisted diagnostic snapshots, on-demand diagnostic refresh, tool/command/file-read/concentration reports, and Diagnostics dashboard panels.
|
|
307
|
+
The first public package release, `0.3.0`, was published on June 8, 2026. Patch release `0.3.1` followed the same day to ship the live-dashboard skill launch fix. Patch release `0.3.2` made dashboard launch refresh the default and added runtime enablement for context loading. Minor release `0.4.0` added Python 3.14 support, release recovery docs, stricter privacy/support-bundle regression coverage, and large-history benchmark thresholds. Patch release `0.4.1` was published by workflow dispatch from `main`; it hardened the PyPI publish workflow and checked off completed 1.0 readiness gates. Minor release `0.5.0` added dashboard localization support and initial language catalogs. Minor release `0.6.0` is the performance and call-drilldown release with SQL-backed live API slices, materialized thread summaries, faster evidence loading, and dashboard runtime module refactors. Patch release `0.6.1` aligns the final README/package screenshots and companion plugin assets. Minor release `0.7.0` adds observed usage snapshots and the latest-observed dashboard card while keeping raw evidence on demand only. Minor release `0.8.0` adds aggregate diagnostics, source-offset context seeking, and live dashboard loading hardening. Patch release `0.8.1` improves Diagnostics fact table readability with pinned fact names and sortable fact columns. Minor release `0.9.0` adds persisted diagnostic snapshots, on-demand diagnostic refresh, tool/command/file-read/concentration reports, and Diagnostics dashboard panels. Minor release `0.10.0` adds Git/GitHub CLI diagnostics, file-modification diagnostics, and derived call timing fields across the dashboard and API. Patch release `0.10.1` adds lightweight action timing to context evidence and ships the synthetic Git Interactions README screenshot.
|
|
307
308
|
|
|
308
309
|
- GitHub Release: `https://github.com/douglasmonsky/codex-usage-tracker/releases/tag/v0.3.0`
|
|
309
310
|
- GitHub Release: `https://github.com/douglasmonsky/codex-usage-tracker/releases/tag/v0.3.1`
|
|
@@ -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.10.1`: `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.10.1`: `python -m venv /tmp/codex-usage-pypi-smoke && . /tmp/codex-usage-pypi-smoke/bin/activate && python -m pip install codex-usage-tracking==0.10.1 && codex-usage-tracker --version`.
|
|
29
|
+
- [x] Verify public pipx install path for `0.10.1`: `PIPX_HOME=/tmp/codex-usage-pipx-home PIPX_BIN_DIR=/tmp/codex-usage-pipx-bin pipx install codex-usage-tracking==0.10.1 && /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.10.1`.
|
|
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.10.1`; 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.10.1`.
|
|
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.10.1`.
|
|
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.10.1`.
|
|
224
224
|
- Release recovery documentation is proven by `scripts/check_release.py` required-file and docs checks.
|
|
225
225
|
|
|
226
226
|
### Known Limitations
|
|
@@ -35,13 +35,13 @@ Call-origin metadata is heuristic and confidence-labeled. It stores categories s
|
|
|
35
35
|
|
|
36
36
|
Diagnostic facts follow the same aggregate-only rule. They can store safe structured labels such as `patch_applied`, `function_call_output`, `post_compaction`, MCP tool/server labels, structured skill labels, and command families such as `pytest`, `git`, or `unknown_command`, along with event counts and source line ranges. Command text may be classified in memory during parsing, but it is not persisted. Diagnostic facts do not store tool arguments, command text, command output, patch text, prompt or assistant text, file contents, raw JSONL fragments, or raw context evidence.
|
|
37
37
|
|
|
38
|
-
On-demand diagnostic snapshots follow the same boundary. Tool-output snapshots use terminal wrapper metadata such as `Original token count` when present and persist only counts, coverage gaps, and safe function/command labels. Command snapshots keep command roots plus a bounded list of conservative one-level child labels. File-read snapshots classify common read commands and path scans,
|
|
38
|
+
On-demand diagnostic snapshots follow the same boundary. Tool-output snapshots use terminal wrapper metadata such as `Original token count` when present and persist only counts, coverage gaps, and safe function/command labels. Command snapshots keep command roots plus a bounded list of conservative one-level child labels. Git interaction snapshots keep only `git`/`gh` roots, safe operation labels, coarse categories, counts, and token coverage; they do not persist branch names, remotes, file paths, tags, commit messages, PR titles, release notes, raw command strings, command arguments, or raw command output. File-read snapshots classify common read commands and path scans, while file-modification snapshots classify structured patch events and modified paths. Both persist only counters, reader/event families, basename-only path labels, and short irreversible path hashes. They do not persist raw absolute paths, raw command strings, command arguments, file contents, tool output, or patch text. Read-productivity snapshots report only temporal read-to-modify correlations for matching path keys in the same source log; they do not claim causation. Concentration snapshots group by safe source/session, cwd, and day labels and do not expose raw source-log or cwd paths.
|
|
39
39
|
|
|
40
40
|
Diagnostic snapshots are not live recomputed during ordinary dashboard or usage refresh. Stored snapshots can be displayed without rescanning source logs, and recomputation requires an explicit diagnostics `--refresh` command, the batched localhost `/api/diagnostics/refresh` request, or a targeted `/api/diagnostics/<section>/refresh` request.
|
|
41
41
|
|
|
42
42
|
## On-Demand Context
|
|
43
43
|
|
|
44
|
-
`usage_call_context`, `codex-usage-tracker context`, and the `serve-dashboard` context endpoint read a single source JSONL file only when explicitly requested. Returned context is redacted for common secret patterns and capped in size by default for CLI/MCP requests. The call investigator uses the same endpoint at runtime and requests quick redacted evidence for the selected call when the local context API is enabled; that still does not persist raw context into SQLite, CSV, support bundles, or generated dashboard HTML.
|
|
44
|
+
`usage_call_context`, `codex-usage-tracker context`, and the `serve-dashboard` context endpoint read a single source JSONL file only when explicitly requested. Returned context is redacted for common secret patterns and capped in size by default for CLI/MCP requests. The call investigator uses the same endpoint at runtime and requests quick redacted evidence for the selected call when the local context API is enabled; that still does not persist raw context into SQLite, CSV, support bundles, or generated dashboard HTML. Per-entry action timing in this evidence response is derived from already-read entry timestamps and contains numeric durations only; it does not add a second scan or store raw transcript content.
|
|
45
45
|
|
|
46
46
|
Tool output is omitted by default for CLI/MCP and dashboard investigator context requests. The call investigator offers `Show tool output` when redacted, size-limited tool output is needed. Full serialized JSONL group analysis is also opt-in through `mode=full` / `Run full serialized analysis`; default quick mode returns only a fast serialized upper-bound estimate. Compacted replacement history remains omitted by default everywhere. Compaction metadata can show that replacement history exists, its entry count, and the source line, but the replacement text is returned only when explicitly requested for that selected call and is redacted before display.
|
|
47
47
|
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "codex-usage-tracking"
|
|
7
|
-
version = "0.
|
|
7
|
+
version = "0.10.1"
|
|
8
8
|
description = "Unofficial local Codex plugin and dashboard for investigating aggregate token usage, costs, caching, and thread patterns."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.10"
|
|
@@ -81,6 +81,8 @@ REQUIRED_FILES = [
|
|
|
81
81
|
"docs/assets/dashboard-calls.png",
|
|
82
82
|
"docs/assets/dashboard-calls-preview.png",
|
|
83
83
|
"docs/assets/dashboard-threads.png",
|
|
84
|
+
"docs/assets/dashboard-diagnostics.png",
|
|
85
|
+
"docs/assets/dashboard-diagnostics-git-expanded.png",
|
|
84
86
|
"docs/assets/dashboard-details.png",
|
|
85
87
|
"docs/assets/dashboard-call-investigator.png",
|
|
86
88
|
"docs/assets/dashboard-call-investigator-preview.png",
|
|
@@ -132,6 +134,8 @@ REQUIRED_FILES = [
|
|
|
132
134
|
"src/codex_usage_tracker/plugin_data/docs/assets/dashboard-calls.png",
|
|
133
135
|
"src/codex_usage_tracker/plugin_data/docs/assets/dashboard-calls-preview.png",
|
|
134
136
|
"src/codex_usage_tracker/plugin_data/docs/assets/dashboard-threads.png",
|
|
137
|
+
"src/codex_usage_tracker/plugin_data/docs/assets/dashboard-diagnostics.png",
|
|
138
|
+
"src/codex_usage_tracker/plugin_data/docs/assets/dashboard-diagnostics-git-expanded.png",
|
|
135
139
|
"src/codex_usage_tracker/plugin_data/docs/assets/dashboard-details.png",
|
|
136
140
|
"src/codex_usage_tracker/plugin_data/docs/assets/dashboard-call-investigator.png",
|
|
137
141
|
"src/codex_usage_tracker/plugin_data/docs/assets/dashboard-call-investigator-preview.png",
|
|
@@ -176,6 +180,8 @@ WHEEL_REQUIRED_MEMBERS = {
|
|
|
176
180
|
"codex_usage_tracker/plugin_data/docs/assets/dashboard-calls.png",
|
|
177
181
|
"codex_usage_tracker/plugin_data/docs/assets/dashboard-calls-preview.png",
|
|
178
182
|
"codex_usage_tracker/plugin_data/docs/assets/dashboard-threads.png",
|
|
183
|
+
"codex_usage_tracker/plugin_data/docs/assets/dashboard-diagnostics.png",
|
|
184
|
+
"codex_usage_tracker/plugin_data/docs/assets/dashboard-diagnostics-git-expanded.png",
|
|
179
185
|
"codex_usage_tracker/plugin_data/docs/assets/dashboard-details.png",
|
|
180
186
|
"codex_usage_tracker/plugin_data/docs/assets/dashboard-call-investigator.png",
|
|
181
187
|
"codex_usage_tracker/plugin_data/docs/assets/dashboard-call-investigator-preview.png",
|
{codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/scripts/smoke_installed_package.py
RENAMED
|
@@ -109,6 +109,8 @@ RESOURCE_PATHS = [
|
|
|
109
109
|
"docs/assets/dashboard-calls.png",
|
|
110
110
|
"docs/assets/dashboard-calls-preview.png",
|
|
111
111
|
"docs/assets/dashboard-threads.png",
|
|
112
|
+
"docs/assets/dashboard-diagnostics.png",
|
|
113
|
+
"docs/assets/dashboard-diagnostics-git-expanded.png",
|
|
112
114
|
"docs/assets/dashboard-details.png",
|
|
113
115
|
"docs/assets/dashboard-call-investigator.png",
|
|
114
116
|
"docs/assets/dashboard-call-investigator-preview.png",
|
|
@@ -15,9 +15,9 @@ from pathlib import Path
|
|
|
15
15
|
|
|
16
16
|
PACKAGE_SPEC = os.environ.get(
|
|
17
17
|
"CODEX_USAGE_TRACKER_PACKAGE_SPEC",
|
|
18
|
-
"codex-usage-tracking==0.
|
|
18
|
+
"codex-usage-tracking==0.10.1",
|
|
19
19
|
)
|
|
20
|
-
RUNTIME_VERSION = "0.
|
|
20
|
+
RUNTIME_VERSION = "0.10.1"
|
|
21
21
|
PACKAGE_SPEC_MARKER = ".codex-usage-tracker-package-spec"
|
|
22
22
|
MODULE_CHECK = (
|
|
23
23
|
"import importlib.metadata; "
|
|
@@ -32,7 +32,9 @@ from codex_usage_tracker.diagnostic_reports import (
|
|
|
32
32
|
from codex_usage_tracker.diagnostic_snapshots import (
|
|
33
33
|
build_diagnostic_commands_report,
|
|
34
34
|
build_diagnostic_concentration_report,
|
|
35
|
+
build_diagnostic_file_modifications_report,
|
|
35
36
|
build_diagnostic_file_reads_report,
|
|
37
|
+
build_diagnostic_git_interactions_report,
|
|
36
38
|
build_diagnostic_overview_report,
|
|
37
39
|
build_diagnostic_read_productivity_report,
|
|
38
40
|
build_diagnostic_tool_output_report,
|
|
@@ -475,12 +477,24 @@ def _run_diagnostics(args: argparse.Namespace) -> int:
|
|
|
475
477
|
include_archived=args.include_archived,
|
|
476
478
|
refresh=args.refresh,
|
|
477
479
|
)
|
|
480
|
+
elif command == "git-interactions":
|
|
481
|
+
report = build_diagnostic_git_interactions_report(
|
|
482
|
+
db_path=args.db,
|
|
483
|
+
include_archived=args.include_archived,
|
|
484
|
+
refresh=args.refresh,
|
|
485
|
+
)
|
|
478
486
|
elif command == "file-reads":
|
|
479
487
|
report = build_diagnostic_file_reads_report(
|
|
480
488
|
db_path=args.db,
|
|
481
489
|
include_archived=args.include_archived,
|
|
482
490
|
refresh=args.refresh,
|
|
483
491
|
)
|
|
492
|
+
elif command == "file-modifications":
|
|
493
|
+
report = build_diagnostic_file_modifications_report(
|
|
494
|
+
db_path=args.db,
|
|
495
|
+
include_archived=args.include_archived,
|
|
496
|
+
refresh=args.refresh,
|
|
497
|
+
)
|
|
484
498
|
elif command == "read-productivity":
|
|
485
499
|
report = build_diagnostic_read_productivity_report(
|
|
486
500
|
db_path=args.db,
|
{codex_usage_tracking-0.9.0 → codex_usage_tracking-0.10.1}/src/codex_usage_tracker/cli_parser.py
RENAMED
|
@@ -363,6 +363,18 @@ def _add_diagnostics_parser(
|
|
|
363
363
|
)
|
|
364
364
|
commands.add_argument("--json", action="store_true", dest="as_json")
|
|
365
365
|
|
|
366
|
+
git_interactions = diagnostic_subparsers.add_parser(
|
|
367
|
+
"git-interactions",
|
|
368
|
+
help="Show on-demand aggregate Git and GitHub CLI interactions",
|
|
369
|
+
)
|
|
370
|
+
git_interactions.add_argument("--include-archived", action="store_true")
|
|
371
|
+
git_interactions.add_argument(
|
|
372
|
+
"--refresh",
|
|
373
|
+
action="store_true",
|
|
374
|
+
help="Recompute and persist the Git interaction snapshot before reading it.",
|
|
375
|
+
)
|
|
376
|
+
git_interactions.add_argument("--json", action="store_true", dest="as_json")
|
|
377
|
+
|
|
366
378
|
file_reads = diagnostic_subparsers.add_parser(
|
|
367
379
|
"file-reads",
|
|
368
380
|
help="Show the on-demand aggregate file-read snapshot",
|
|
@@ -375,6 +387,18 @@ def _add_diagnostics_parser(
|
|
|
375
387
|
)
|
|
376
388
|
file_reads.add_argument("--json", action="store_true", dest="as_json")
|
|
377
389
|
|
|
390
|
+
file_modifications = diagnostic_subparsers.add_parser(
|
|
391
|
+
"file-modifications",
|
|
392
|
+
help="Show on-demand aggregate file-modification snapshots",
|
|
393
|
+
)
|
|
394
|
+
file_modifications.add_argument("--include-archived", action="store_true")
|
|
395
|
+
file_modifications.add_argument(
|
|
396
|
+
"--refresh",
|
|
397
|
+
action="store_true",
|
|
398
|
+
help="Recompute and persist the file-modification snapshot before reading it.",
|
|
399
|
+
)
|
|
400
|
+
file_modifications.add_argument("--json", action="store_true", dest="as_json")
|
|
401
|
+
|
|
378
402
|
read_productivity = diagnostic_subparsers.add_parser(
|
|
379
403
|
"read-productivity",
|
|
380
404
|
help="Show temporal read-to-modify diagnostic correlations",
|