codex-usage-tracking 0.12.0__tar.gz → 0.13.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.12.0 → codex_usage_tracking-0.13.0}/.codex-plugin/plugin.json +1 -1
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/CHANGELOG.md +15 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/PKG-INFO +7 -3
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/README.md +5 -1
- codex_usage_tracking-0.13.0/docs/adoption-hardening-roadmap.md +130 -0
- codex_usage_tracking-0.13.0/docs/architecture/decisions/0001-package-domain-boundaries.md +7 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/docs/cli-json-schemas.md +1 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/docs/cli-reference.md +2 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/docs/development.md +10 -7
- codex_usage_tracking-0.13.0/docs/first-five-minutes.md +93 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/docs/install.md +3 -1
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/docs/maintainability-roadmap.md +93 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/docs/one-dot-oh-readiness.md +8 -8
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/pyproject.toml +10 -10
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/scripts/benchmark_synthetic_history.py +5 -5
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/scripts/check_release.py +1 -1
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/scripts/install_local_plugin.py +5 -2
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/scripts/model_usage_drain.py +7 -4
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/scripts/smoke_installed_package.py +199 -3
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/skills/codex-usage-tracker/scripts/run_mcp.py +2 -2
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/src/codex_usage_tracker/__init__.py +2 -2
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/src/codex_usage_tracker/__main__.py +1 -1
- codex_usage_tracking-0.13.0/src/codex_usage_tracker/allowance.py +9 -0
- codex_usage_tracking-0.13.0/src/codex_usage_tracker/cli/__init__.py +19 -0
- codex_usage_tracking-0.13.0/src/codex_usage_tracker/cli/__main__.py +10 -0
- codex_usage_tracking-0.12.0/src/codex_usage_tracker/cli_config.py → codex_usage_tracking-0.13.0/src/codex_usage_tracker/cli/config.py +6 -6
- codex_usage_tracking-0.12.0/src/codex_usage_tracker/cli_dashboard.py → codex_usage_tracking-0.13.0/src/codex_usage_tracker/cli/dashboard.py +6 -6
- codex_usage_tracking-0.12.0/src/codex_usage_tracker/cli_diagnostics.py → codex_usage_tracking-0.13.0/src/codex_usage_tracker/cli/diagnostics.py +3 -3
- codex_usage_tracking-0.12.0/src/codex_usage_tracker/cli.py → codex_usage_tracking-0.13.0/src/codex_usage_tracker/cli/main.py +35 -23
- {codex_usage_tracking-0.12.0/src/codex_usage_tracker → codex_usage_tracking-0.13.0/src/codex_usage_tracker/cli}/mcp_server.py +13 -13
- codex_usage_tracking-0.12.0/src/codex_usage_tracker/cli_parser.py → codex_usage_tracking-0.13.0/src/codex_usage_tracker/cli/parser.py +6 -6
- codex_usage_tracking-0.12.0/src/codex_usage_tracker/cli_parser_diagnostics.py → codex_usage_tracking-0.13.0/src/codex_usage_tracker/cli/parser_diagnostics.py +1 -1
- {codex_usage_tracking-0.12.0/src/codex_usage_tracker → codex_usage_tracking-0.13.0/src/codex_usage_tracker/cli}/plugin_installer.py +1 -1
- codex_usage_tracking-0.13.0/src/codex_usage_tracker/context/__init__.py +15 -0
- codex_usage_tracking-0.13.0/src/codex_usage_tracker/context/api.py +99 -0
- codex_usage_tracking-0.13.0/src/codex_usage_tracker/context/constants.py +7 -0
- codex_usage_tracking-0.12.0/src/codex_usage_tracker/context_loader.py → codex_usage_tracking-0.13.0/src/codex_usage_tracker/context/loader.py +2 -2
- codex_usage_tracking-0.12.0/src/codex_usage_tracker/context.py → codex_usage_tracking-0.13.0/src/codex_usage_tracker/context/reader.py +11 -76
- codex_usage_tracking-0.12.0/src/codex_usage_tracker/context_serialized.py → codex_usage_tracking-0.13.0/src/codex_usage_tracker/context/serialized.py +2 -2
- codex_usage_tracking-0.12.0/src/codex_usage_tracker/context_summaries.py → codex_usage_tracking-0.13.0/src/codex_usage_tracker/context/summaries.py +1 -1
- codex_usage_tracking-0.12.0/src/codex_usage_tracker/context_values.py → codex_usage_tracking-0.13.0/src/codex_usage_tracker/context/values.py +1 -1
- codex_usage_tracking-0.13.0/src/codex_usage_tracker/core/__init__.py +1 -0
- {codex_usage_tracking-0.12.0/src/codex_usage_tracker → codex_usage_tracking-0.13.0/src/codex_usage_tracker/core}/formatting.py +41 -0
- codex_usage_tracking-0.13.0/src/codex_usage_tracker/core/json_contract_cli.py +244 -0
- codex_usage_tracking-0.13.0/src/codex_usage_tracker/core/json_contract_common.py +22 -0
- codex_usage_tracking-0.13.0/src/codex_usage_tracker/core/json_contract_diagnostics.py +168 -0
- codex_usage_tracking-0.13.0/src/codex_usage_tracker/core/json_contract_server.py +106 -0
- codex_usage_tracking-0.13.0/src/codex_usage_tracker/core/json_contracts.py +26 -0
- {codex_usage_tracking-0.12.0/src/codex_usage_tracker → codex_usage_tracking-0.13.0/src/codex_usage_tracker/core}/projects.py +1 -1
- codex_usage_tracking-0.13.0/src/codex_usage_tracker/dashboard/__init__.py +15 -0
- codex_usage_tracking-0.12.0/src/codex_usage_tracker/dashboard.py → codex_usage_tracking-0.13.0/src/codex_usage_tracker/dashboard/api.py +23 -23
- codex_usage_tracking-0.12.0/src/codex_usage_tracker/dashboard_assets.py → codex_usage_tracking-0.13.0/src/codex_usage_tracker/dashboard/assets.py +1 -1
- codex_usage_tracking-0.13.0/src/codex_usage_tracker/diagnostics/__init__.py +15 -0
- codex_usage_tracking-0.12.0/src/codex_usage_tracker/diagnostics.py → codex_usage_tracking-0.13.0/src/codex_usage_tracker/diagnostics/api.py +121 -11
- codex_usage_tracking-0.12.0/src/codex_usage_tracker/diagnostic_fact_classifiers.py → codex_usage_tracking-0.13.0/src/codex_usage_tracker/diagnostics/fact_classifiers.py +1 -1
- codex_usage_tracking-0.12.0/src/codex_usage_tracker/diagnostic_facts.py → codex_usage_tracking-0.13.0/src/codex_usage_tracker/diagnostics/facts.py +2 -2
- codex_usage_tracking-0.12.0/src/codex_usage_tracker/diagnostics_mcp.py → codex_usage_tracking-0.13.0/src/codex_usage_tracker/diagnostics/mcp.py +3 -3
- codex_usage_tracking-0.12.0/src/codex_usage_tracker/diagnostic_reports.py → codex_usage_tracking-0.13.0/src/codex_usage_tracker/diagnostics/reports.py +3 -3
- codex_usage_tracking-0.12.0/src/codex_usage_tracker/diagnostic_snapshot_analysis.py → codex_usage_tracking-0.13.0/src/codex_usage_tracker/diagnostics/snapshot_analysis.py +5 -5
- codex_usage_tracking-0.12.0/src/codex_usage_tracker/diagnostic_snapshot_concentration.py → codex_usage_tracking-0.13.0/src/codex_usage_tracker/diagnostics/snapshot_concentration.py +2 -2
- codex_usage_tracking-0.12.0/src/codex_usage_tracker/diagnostic_snapshot_payloads.py → codex_usage_tracking-0.13.0/src/codex_usage_tracker/diagnostics/snapshot_payloads.py +3 -3
- codex_usage_tracking-0.12.0/src/codex_usage_tracker/diagnostic_snapshot_report.py → codex_usage_tracking-0.13.0/src/codex_usage_tracker/diagnostics/snapshot_report.py +2 -2
- codex_usage_tracking-0.12.0/src/codex_usage_tracker/diagnostic_snapshot_rows.py → codex_usage_tracking-0.13.0/src/codex_usage_tracker/diagnostics/snapshot_rows.py +1 -1
- codex_usage_tracking-0.12.0/src/codex_usage_tracker/diagnostic_snapshot_source_logs.py → codex_usage_tracking-0.13.0/src/codex_usage_tracker/diagnostics/snapshot_source_logs.py +6 -6
- codex_usage_tracking-0.12.0/src/codex_usage_tracker/diagnostic_snapshot_source_scan.py → codex_usage_tracking-0.13.0/src/codex_usage_tracker/diagnostics/snapshot_source_scan.py +1 -1
- codex_usage_tracking-0.12.0/src/codex_usage_tracker/diagnostic_snapshots.py → codex_usage_tracking-0.13.0/src/codex_usage_tracker/diagnostics/snapshots.py +16 -16
- codex_usage_tracking-0.13.0/src/codex_usage_tracker/mcp_server.py +13 -0
- codex_usage_tracking-0.13.0/src/codex_usage_tracker/parser/__init__.py +15 -0
- codex_usage_tracking-0.12.0/src/codex_usage_tracker/parser.py → codex_usage_tracking-0.13.0/src/codex_usage_tracker/parser/api.py +6 -6
- codex_usage_tracking-0.12.0/src/codex_usage_tracker/parser_jsonl_v1.py → codex_usage_tracking-0.13.0/src/codex_usage_tracker/parser/jsonl_v1.py +5 -5
- codex_usage_tracking-0.12.0/src/codex_usage_tracker/parser_jsonl_values.py → codex_usage_tracking-0.13.0/src/codex_usage_tracker/parser/jsonl_values.py +2 -2
- codex_usage_tracking-0.12.0/src/codex_usage_tracker/parser_state.py → codex_usage_tracking-0.13.0/src/codex_usage_tracker/parser/state.py +3 -3
- codex_usage_tracking-0.13.0/src/codex_usage_tracker/plugin_installer.py +9 -0
- codex_usage_tracking-0.13.0/src/codex_usage_tracker/pricing/__init__.py +15 -0
- codex_usage_tracking-0.13.0/src/codex_usage_tracker/pricing/allowance.py +63 -0
- codex_usage_tracking-0.12.0/src/codex_usage_tracker/allowance.py → codex_usage_tracking-0.13.0/src/codex_usage_tracker/pricing/allowance_config.py +4 -207
- {codex_usage_tracking-0.12.0/src/codex_usage_tracker → codex_usage_tracking-0.13.0/src/codex_usage_tracker/pricing}/allowance_rate_card.py +1 -1
- codex_usage_tracking-0.13.0/src/codex_usage_tracker/pricing/allowance_usage.py +200 -0
- codex_usage_tracking-0.12.0/src/codex_usage_tracker/pricing.py → codex_usage_tracking-0.13.0/src/codex_usage_tracker/pricing/api.py +10 -10
- codex_usage_tracking-0.12.0/src/codex_usage_tracker/pricing_config.py → codex_usage_tracking-0.13.0/src/codex_usage_tracker/pricing/config.py +1 -1
- {codex_usage_tracking-0.12.0/src/codex_usage_tracker → codex_usage_tracking-0.13.0/src/codex_usage_tracker/pricing}/costing.py +2 -2
- codex_usage_tracking-0.12.0/src/codex_usage_tracker/pricing_openai.py → codex_usage_tracking-0.13.0/src/codex_usage_tracker/pricing/openai.py +3 -3
- codex_usage_tracking-0.13.0/src/codex_usage_tracker/reports/__init__.py +15 -0
- codex_usage_tracking-0.12.0/src/codex_usage_tracker/reports.py → codex_usage_tracking-0.13.0/src/codex_usage_tracker/reports/api.py +19 -19
- codex_usage_tracking-0.12.0/src/codex_usage_tracker/report_project_summary.py → codex_usage_tracking-0.13.0/src/codex_usage_tracker/reports/project_summary.py +3 -3
- {codex_usage_tracking-0.12.0/src/codex_usage_tracker → codex_usage_tracking-0.13.0/src/codex_usage_tracker/reports}/recommendations.py +1 -1
- {codex_usage_tracking-0.12.0/src/codex_usage_tracker → codex_usage_tracking-0.13.0/src/codex_usage_tracker/reports}/support.py +102 -12
- codex_usage_tracking-0.13.0/src/codex_usage_tracker/server/__init__.py +22 -0
- codex_usage_tracking-0.13.0/src/codex_usage_tracker/server/api.py +133 -0
- codex_usage_tracking-0.12.0/src/codex_usage_tracker/server_call_detail.py → codex_usage_tracking-0.13.0/src/codex_usage_tracker/server/call_detail.py +2 -2
- codex_usage_tracking-0.12.0/src/codex_usage_tracker/server_call_lists.py → codex_usage_tracking-0.13.0/src/codex_usage_tracker/server/call_lists.py +2 -2
- codex_usage_tracking-0.12.0/src/codex_usage_tracker/server_context.py → codex_usage_tracking-0.13.0/src/codex_usage_tracker/server/context.py +2 -2
- codex_usage_tracking-0.12.0/src/codex_usage_tracker/server_context_settings.py → codex_usage_tracking-0.13.0/src/codex_usage_tracker/server/context_settings.py +1 -1
- codex_usage_tracking-0.12.0/src/codex_usage_tracker/server_dashboard_shell.py → codex_usage_tracking-0.13.0/src/codex_usage_tracker/server/dashboard_shell.py +3 -3
- codex_usage_tracking-0.12.0/src/codex_usage_tracker/server_diagnostic_facts.py → codex_usage_tracking-0.13.0/src/codex_usage_tracker/server/diagnostic_facts.py +2 -2
- codex_usage_tracking-0.12.0/src/codex_usage_tracker/server_diagnostic_routes.py → codex_usage_tracking-0.13.0/src/codex_usage_tracker/server/diagnostic_routes.py +3 -3
- codex_usage_tracking-0.12.0/src/codex_usage_tracker/server_diagnostic_snapshots.py → codex_usage_tracking-0.13.0/src/codex_usage_tracker/server/diagnostic_snapshots.py +2 -2
- codex_usage_tracking-0.12.0/src/codex_usage_tracker/server.py → codex_usage_tracking-0.13.0/src/codex_usage_tracker/server/handler.py +25 -120
- codex_usage_tracking-0.12.0/src/codex_usage_tracker/server_live_queries.py → codex_usage_tracking-0.13.0/src/codex_usage_tracker/server/live_queries.py +1 -1
- codex_usage_tracking-0.12.0/src/codex_usage_tracker/server_live_rows.py → codex_usage_tracking-0.13.0/src/codex_usage_tracker/server/live_rows.py +11 -8
- codex_usage_tracking-0.12.0/src/codex_usage_tracker/server_open_investigator.py → codex_usage_tracking-0.13.0/src/codex_usage_tracker/server/open_investigator.py +1 -1
- codex_usage_tracking-0.12.0/src/codex_usage_tracker/server_recommendations.py → codex_usage_tracking-0.13.0/src/codex_usage_tracker/server/recommendations.py +2 -2
- codex_usage_tracking-0.12.0/src/codex_usage_tracker/server_request_guards.py → codex_usage_tracking-0.13.0/src/codex_usage_tracker/server/request_guards.py +1 -1
- codex_usage_tracking-0.12.0/src/codex_usage_tracker/server_responses.py → codex_usage_tracking-0.13.0/src/codex_usage_tracker/server/responses.py +1 -1
- codex_usage_tracking-0.12.0/src/codex_usage_tracker/server_status.py → codex_usage_tracking-0.13.0/src/codex_usage_tracker/server/status.py +2 -2
- codex_usage_tracking-0.12.0/src/codex_usage_tracker/server_summary.py → codex_usage_tracking-0.13.0/src/codex_usage_tracker/server/summary.py +2 -2
- codex_usage_tracking-0.12.0/src/codex_usage_tracker/server_threads.py → codex_usage_tracking-0.13.0/src/codex_usage_tracker/server/threads.py +2 -2
- codex_usage_tracking-0.12.0/src/codex_usage_tracker/server_usage_refresh.py → codex_usage_tracking-0.13.0/src/codex_usage_tracker/server/usage_refresh.py +4 -4
- codex_usage_tracking-0.13.0/src/codex_usage_tracker/store/__init__.py +15 -0
- codex_usage_tracking-0.12.0/src/codex_usage_tracker/store.py → codex_usage_tracking-0.13.0/src/codex_usage_tracker/store/api.py +31 -31
- codex_usage_tracking-0.12.0/src/codex_usage_tracker/store_connection.py → codex_usage_tracking-0.13.0/src/codex_usage_tracker/store/connection.py +1 -1
- codex_usage_tracking-0.12.0/src/codex_usage_tracker/store_dashboard_queries.py → codex_usage_tracking-0.13.0/src/codex_usage_tracker/store/dashboard_queries.py +6 -6
- codex_usage_tracking-0.12.0/src/codex_usage_tracker/store_diagnostic_call_queries.py → codex_usage_tracking-0.13.0/src/codex_usage_tracker/store/diagnostic_call_queries.py +6 -6
- codex_usage_tracking-0.12.0/src/codex_usage_tracker/store_diagnostic_queries.py → codex_usage_tracking-0.13.0/src/codex_usage_tracker/store/diagnostic_queries.py +5 -5
- codex_usage_tracking-0.12.0/src/codex_usage_tracker/store_exports.py → codex_usage_tracking-0.13.0/src/codex_usage_tracker/store/exports.py +7 -7
- codex_usage_tracking-0.12.0/src/codex_usage_tracker/store_refresh.py → codex_usage_tracking-0.13.0/src/codex_usage_tracker/store/refresh.py +8 -8
- codex_usage_tracking-0.12.0/src/codex_usage_tracker/store_schema.py → codex_usage_tracking-0.13.0/src/codex_usage_tracker/store/schema.py +1 -1
- codex_usage_tracking-0.12.0/src/codex_usage_tracker/store_sources.py → codex_usage_tracking-0.13.0/src/codex_usage_tracker/store/sources.py +2 -2
- codex_usage_tracking-0.12.0/src/codex_usage_tracker/store_summary_queries.py → codex_usage_tracking-0.13.0/src/codex_usage_tracker/store/summary_queries.py +5 -5
- codex_usage_tracking-0.12.0/src/codex_usage_tracker/store_thread_summaries.py → codex_usage_tracking-0.13.0/src/codex_usage_tracker/store/thread_summaries.py +5 -5
- codex_usage_tracking-0.12.0/src/codex_usage_tracker/store_usage_api_queries.py → codex_usage_tracking-0.13.0/src/codex_usage_tracker/store/usage_api_queries.py +6 -6
- codex_usage_tracking-0.12.0/src/codex_usage_tracker/store_usage_record_queries.py → codex_usage_tracking-0.13.0/src/codex_usage_tracker/store/usage_record_queries.py +6 -6
- codex_usage_tracking-0.13.0/src/codex_usage_tracker/support.py +9 -0
- codex_usage_tracking-0.13.0/src/codex_usage_tracker/usage_drain/__init__.py +1 -0
- codex_usage_tracking-0.12.0/src/codex_usage_tracker/usage_drain_allowance_breakpoints.py → codex_usage_tracking-0.13.0/src/codex_usage_tracker/usage_drain/allowance_breakpoints.py +7 -7
- codex_usage_tracking-0.12.0/src/codex_usage_tracker/usage_drain_allowance_fits.py → codex_usage_tracking-0.13.0/src/codex_usage_tracker/usage_drain/allowance_fits.py +7 -7
- codex_usage_tracking-0.12.0/src/codex_usage_tracker/usage_drain_allowance_online.py → codex_usage_tracking-0.13.0/src/codex_usage_tracker/usage_drain/allowance_online.py +4 -4
- codex_usage_tracking-0.12.0/src/codex_usage_tracker/usage_drain_boundary_delta.py → codex_usage_tracking-0.13.0/src/codex_usage_tracker/usage_drain/boundary_delta.py +2 -2
- codex_usage_tracking-0.12.0/src/codex_usage_tracker/usage_drain_boundary_delta_core.py → codex_usage_tracking-0.13.0/src/codex_usage_tracker/usage_drain/boundary_delta_core.py +5 -5
- codex_usage_tracking-0.12.0/src/codex_usage_tracker/usage_drain_boundary_delta_rows.py → codex_usage_tracking-0.13.0/src/codex_usage_tracker/usage_drain/boundary_delta_rows.py +5 -5
- codex_usage_tracking-0.12.0/src/codex_usage_tracker/usage_drain_boundary_delta_summary.py → codex_usage_tracking-0.13.0/src/codex_usage_tracker/usage_drain/boundary_delta_summary.py +7 -7
- codex_usage_tracking-0.12.0/src/codex_usage_tracker/usage_drain_boundary_summary.py → codex_usage_tracking-0.13.0/src/codex_usage_tracker/usage_drain/boundary_summary.py +12 -12
- codex_usage_tracking-0.12.0/src/codex_usage_tracker/usage_drain_capacity_specs.py → codex_usage_tracking-0.13.0/src/codex_usage_tracker/usage_drain/capacity_specs.py +2 -2
- codex_usage_tracking-0.12.0/src/codex_usage_tracker/usage_drain_error_diagnostics.py → codex_usage_tracking-0.13.0/src/codex_usage_tracker/usage_drain/error_diagnostics.py +2 -2
- codex_usage_tracking-0.12.0/src/codex_usage_tracker/usage_drain_feature_history.py → codex_usage_tracking-0.13.0/src/codex_usage_tracker/usage_drain/feature_history.py +1 -1
- codex_usage_tracking-0.12.0/src/codex_usage_tracker/usage_drain_features.py → codex_usage_tracking-0.13.0/src/codex_usage_tracker/usage_drain/features.py +2 -2
- codex_usage_tracking-0.12.0/src/codex_usage_tracker/usage_drain_grace.py → codex_usage_tracking-0.13.0/src/codex_usage_tracker/usage_drain/grace.py +4 -4
- codex_usage_tracking-0.12.0/src/codex_usage_tracker/usage_drain_history_state.py → codex_usage_tracking-0.13.0/src/codex_usage_tracker/usage_drain/history_state.py +3 -3
- codex_usage_tracking-0.12.0/src/codex_usage_tracker/usage_drain_model.py → codex_usage_tracking-0.13.0/src/codex_usage_tracker/usage_drain/model.py +31 -31
- codex_usage_tracking-0.12.0/src/codex_usage_tracker/usage_drain_predictive.py → codex_usage_tracking-0.13.0/src/codex_usage_tracker/usage_drain/predictive.py +6 -6
- codex_usage_tracking-0.12.0/src/codex_usage_tracker/usage_drain_predictive_specs.py → codex_usage_tracking-0.13.0/src/codex_usage_tracker/usage_drain/predictive_specs.py +1 -1
- codex_usage_tracking-0.12.0/src/codex_usage_tracker/usage_drain_proxy_fit.py → codex_usage_tracking-0.13.0/src/codex_usage_tracker/usage_drain/proxy_fit.py +9 -9
- codex_usage_tracking-0.12.0/src/codex_usage_tracker/usage_drain_regime_labels.py → codex_usage_tracking-0.13.0/src/codex_usage_tracker/usage_drain/regime_labels.py +1 -1
- codex_usage_tracking-0.12.0/src/codex_usage_tracker/usage_drain_regime_segments.py → codex_usage_tracking-0.13.0/src/codex_usage_tracker/usage_drain/regime_segments.py +11 -11
- codex_usage_tracking-0.12.0/src/codex_usage_tracker/usage_drain_regression.py → codex_usage_tracking-0.13.0/src/codex_usage_tracker/usage_drain/regression.py +2 -2
- codex_usage_tracking-0.12.0/src/codex_usage_tracker/usage_drain_reports.py → codex_usage_tracking-0.13.0/src/codex_usage_tracker/usage_drain/reports.py +12 -9
- codex_usage_tracking-0.12.0/src/codex_usage_tracker/usage_drain_spans.py → codex_usage_tracking-0.13.0/src/codex_usage_tracker/usage_drain/spans.py +1 -1
- codex_usage_tracking-0.12.0/src/codex_usage_tracker/usage_drain_state_buckets.py → codex_usage_tracking-0.13.0/src/codex_usage_tracker/usage_drain/state_buckets.py +3 -3
- codex_usage_tracking-0.12.0/src/codex_usage_tracker/usage_drain_state_diagnostics.py → codex_usage_tracking-0.13.0/src/codex_usage_tracker/usage_drain/state_diagnostics.py +2 -2
- codex_usage_tracking-0.12.0/src/codex_usage_tracker/usage_drain_summary_metrics.py → codex_usage_tracking-0.13.0/src/codex_usage_tracker/usage_drain/summary_metrics.py +3 -3
- codex_usage_tracking-0.12.0/src/codex_usage_tracker/usage_drain_time_series.py → codex_usage_tracking-0.13.0/src/codex_usage_tracker/usage_drain/time_series.py +1 -1
- codex_usage_tracking-0.12.0/src/codex_usage_tracker/usage_drain_token_components.py → codex_usage_tracking-0.13.0/src/codex_usage_tracker/usage_drain/token_components.py +5 -5
- codex_usage_tracking-0.12.0/src/codex_usage_tracker/usage_drain_transition_gates.py → codex_usage_tracking-0.13.0/src/codex_usage_tracker/usage_drain/transition_gates.py +2 -2
- codex_usage_tracking-0.12.0/src/codex_usage_tracker/usage_drain_transition_metrics.py → codex_usage_tracking-0.13.0/src/codex_usage_tracker/usage_drain/transition_metrics.py +4 -4
- codex_usage_tracking-0.12.0/src/codex_usage_tracker/usage_drain_utils.py → codex_usage_tracking-0.13.0/src/codex_usage_tracker/usage_drain/utils.py +1 -1
- codex_usage_tracking-0.12.0/src/codex_usage_tracker/usage_drain_walk_forward.py → codex_usage_tracking-0.13.0/src/codex_usage_tracker/usage_drain/walk_forward.py +12 -12
- codex_usage_tracking-0.12.0/src/codex_usage_tracker/usage_drain_walk_forward_rows.py → codex_usage_tracking-0.13.0/src/codex_usage_tracker/usage_drain/walk_forward_rows.py +22 -22
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/src/codex_usage_tracking.egg-info/PKG-INFO +7 -3
- codex_usage_tracking-0.13.0/src/codex_usage_tracking.egg-info/SOURCES.txt +379 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/src/codex_usage_tracking.egg-info/requires.txt +1 -1
- codex_usage_tracking-0.13.0/tests/__init__.py +1 -0
- {codex_usage_tracking-0.12.0/tests → codex_usage_tracking-0.13.0/tests/cli}/test_cli_lifecycle.py +6 -3
- codex_usage_tracking-0.13.0/tests/cli/test_cli_module_entrypoints.py +35 -0
- {codex_usage_tracking-0.12.0/tests → codex_usage_tracking-0.13.0/tests/cli}/test_cli_parser_diagnostics.py +1 -1
- {codex_usage_tracking-0.12.0/tests → codex_usage_tracking-0.13.0/tests/cli}/test_cli_release.py +19 -19
- {codex_usage_tracking-0.12.0/tests → codex_usage_tracking-0.13.0/tests/cli}/test_mcp_integration.py +12 -13
- {codex_usage_tracking-0.12.0/tests → codex_usage_tracking-0.13.0/tests/cli}/test_mcp_launcher.py +1 -1
- {codex_usage_tracking-0.12.0/tests → codex_usage_tracking-0.13.0/tests/cli}/test_plugin_installer.py +2 -2
- {codex_usage_tracking-0.12.0/tests → codex_usage_tracking-0.13.0/tests/context}/test_context_action_timing.py +1 -1
- {codex_usage_tracking-0.12.0/tests → codex_usage_tracking-0.13.0/tests/context}/test_context_evidence.py +8 -8
- {codex_usage_tracking-0.12.0/tests → codex_usage_tracking-0.13.0/tests/context}/test_context_scan.py +3 -4
- {codex_usage_tracking-0.12.0/tests → codex_usage_tracking-0.13.0/tests/context}/test_context_serialized.py +1 -1
- {codex_usage_tracking-0.12.0/tests → codex_usage_tracking-0.13.0/tests/context}/test_context_summaries.py +1 -1
- {codex_usage_tracking-0.12.0/tests → codex_usage_tracking-0.13.0/tests/context}/test_context_token_estimates.py +1 -1
- {codex_usage_tracking-0.12.0/tests → codex_usage_tracking-0.13.0/tests/context}/test_context_values.py +1 -1
- {codex_usage_tracking-0.12.0/tests → codex_usage_tracking-0.13.0/tests/core}/test_call_origin.py +1 -1
- {codex_usage_tracking-0.12.0/tests → codex_usage_tracking-0.13.0/tests/core}/test_formatting.py +1 -1
- {codex_usage_tracking-0.12.0/tests → codex_usage_tracking-0.13.0/tests/core}/test_i18n.py +11 -11
- {codex_usage_tracking-0.12.0/tests → codex_usage_tracking-0.13.0/tests/core}/test_json_contracts.py +11 -11
- {codex_usage_tracking-0.12.0/tests → codex_usage_tracking-0.13.0/tests/core}/test_privacy.py +7 -7
- {codex_usage_tracking-0.12.0/tests → codex_usage_tracking-0.13.0/tests/core}/test_projects.py +1 -1
- {codex_usage_tracking-0.12.0/tests → codex_usage_tracking-0.13.0/tests/core}/test_redaction.py +1 -1
- {codex_usage_tracking-0.12.0/tests → codex_usage_tracking-0.13.0/tests/core}/test_schema.py +3 -3
- {codex_usage_tracking-0.12.0/tests → codex_usage_tracking-0.13.0/tests/core}/test_threads.py +1 -1
- {codex_usage_tracking-0.12.0/tests → codex_usage_tracking-0.13.0/tests/dashboard}/test_dashboard_data.py +2 -2
- {codex_usage_tracking-0.12.0/tests → codex_usage_tracking-0.13.0/tests/dashboard}/test_dashboard_diagnostics_snapshots.py +1 -1
- {codex_usage_tracking-0.12.0/tests → codex_usage_tracking-0.13.0/tests/dashboard}/test_dashboard_live.py +2 -2
- {codex_usage_tracking-0.12.0/tests → codex_usage_tracking-0.13.0/tests/dashboard}/test_dashboard_payload.py +9 -9
- {codex_usage_tracking-0.12.0/tests → codex_usage_tracking-0.13.0/tests/dashboard}/test_dashboard_pricing_snapshot.py +1 -1
- {codex_usage_tracking-0.12.0/tests → codex_usage_tracking-0.13.0/tests/dashboard}/test_dashboard_server.py +19 -19
- {codex_usage_tracking-0.12.0/tests → codex_usage_tracking-0.13.0/tests/dashboard}/test_dashboard_state.py +1 -1
- {codex_usage_tracking-0.12.0/tests → codex_usage_tracking-0.13.0/tests/dashboard}/test_dashboard_status.py +1 -1
- {codex_usage_tracking-0.12.0/tests → codex_usage_tracking-0.13.0/tests/diagnostics}/test_diagnostic_fact_classifiers.py +2 -2
- {codex_usage_tracking-0.12.0/tests → codex_usage_tracking-0.13.0/tests/diagnostics}/test_diagnostic_reports.py +1 -1
- {codex_usage_tracking-0.12.0/tests → codex_usage_tracking-0.13.0/tests/diagnostics}/test_diagnostic_snapshot_events.py +1 -1
- {codex_usage_tracking-0.12.0/tests → codex_usage_tracking-0.13.0/tests/diagnostics}/test_diagnostic_snapshot_report.py +2 -2
- {codex_usage_tracking-0.12.0/tests → codex_usage_tracking-0.13.0/tests/diagnostics}/test_diagnostic_snapshot_source_scan.py +1 -1
- {codex_usage_tracking-0.12.0/tests → codex_usage_tracking-0.13.0/tests/diagnostics}/test_diagnostic_snapshots.py +12 -13
- codex_usage_tracking-0.13.0/tests/diagnostics/test_doctor_first_run.py +42 -0
- {codex_usage_tracking-0.12.0/tests → codex_usage_tracking-0.13.0/tests/parser}/test_parser.py +3 -3
- {codex_usage_tracking-0.12.0/tests → codex_usage_tracking-0.13.0/tests/parser}/test_parser_inspect_log.py +2 -3
- {codex_usage_tracking-0.12.0/tests → codex_usage_tracking-0.13.0/tests/parser}/test_parser_state.py +3 -3
- {codex_usage_tracking-0.12.0/tests → codex_usage_tracking-0.13.0/tests/pricing}/test_allowance.py +1 -1
- {codex_usage_tracking-0.12.0/tests → codex_usage_tracking-0.13.0/tests/pricing}/test_pricing.py +1 -1
- {codex_usage_tracking-0.12.0/tests → codex_usage_tracking-0.13.0/tests/reports}/test_recommendations.py +1 -1
- {codex_usage_tracking-0.12.0/tests → codex_usage_tracking-0.13.0/tests/reports}/test_support.py +13 -2
- {codex_usage_tracking-0.12.0/tests → codex_usage_tracking-0.13.0/tests/server}/test_server_call_detail.py +1 -1
- {codex_usage_tracking-0.12.0/tests → codex_usage_tracking-0.13.0/tests/server}/test_server_call_lists.py +1 -1
- {codex_usage_tracking-0.12.0/tests → codex_usage_tracking-0.13.0/tests/server}/test_server_context.py +1 -1
- {codex_usage_tracking-0.12.0/tests → codex_usage_tracking-0.13.0/tests/server}/test_server_context_settings.py +1 -1
- {codex_usage_tracking-0.12.0/tests → codex_usage_tracking-0.13.0/tests/server}/test_server_dashboard_shell.py +1 -1
- {codex_usage_tracking-0.12.0/tests → codex_usage_tracking-0.13.0/tests/server}/test_server_diagnostic_facts.py +1 -1
- {codex_usage_tracking-0.12.0/tests → codex_usage_tracking-0.13.0/tests/server}/test_server_diagnostic_refresh_auth.py +1 -1
- {codex_usage_tracking-0.12.0/tests → codex_usage_tracking-0.13.0/tests/server}/test_server_diagnostic_snapshots.py +1 -1
- {codex_usage_tracking-0.12.0/tests → codex_usage_tracking-0.13.0/tests/server}/test_server_live_queries.py +1 -1
- {codex_usage_tracking-0.12.0/tests → codex_usage_tracking-0.13.0/tests/server}/test_server_live_rows.py +1 -1
- {codex_usage_tracking-0.12.0/tests → codex_usage_tracking-0.13.0/tests/server}/test_server_open_investigator.py +1 -1
- {codex_usage_tracking-0.12.0/tests → codex_usage_tracking-0.13.0/tests/server}/test_server_recommendations.py +1 -1
- {codex_usage_tracking-0.12.0/tests → codex_usage_tracking-0.13.0/tests/server}/test_server_request_guards.py +1 -1
- {codex_usage_tracking-0.12.0/tests → codex_usage_tracking-0.13.0/tests/server}/test_server_responses.py +1 -1
- {codex_usage_tracking-0.12.0/tests → codex_usage_tracking-0.13.0/tests/server}/test_server_routes.py +1 -1
- {codex_usage_tracking-0.12.0/tests → codex_usage_tracking-0.13.0/tests/server}/test_server_status.py +1 -1
- {codex_usage_tracking-0.12.0/tests → codex_usage_tracking-0.13.0/tests/server}/test_server_summary.py +1 -1
- {codex_usage_tracking-0.12.0/tests → codex_usage_tracking-0.13.0/tests/server}/test_server_threads.py +1 -1
- {codex_usage_tracking-0.12.0/tests → codex_usage_tracking-0.13.0/tests/server}/test_server_usage_refresh.py +1 -1
- {codex_usage_tracking-0.12.0/tests → codex_usage_tracking-0.13.0/tests/store}/test_store_dashboard_mcp.py +13 -13
- {codex_usage_tracking-0.12.0/tests → codex_usage_tracking-0.13.0/tests/store}/test_store_dashboard_queries.py +2 -2
- {codex_usage_tracking-0.12.0/tests → codex_usage_tracking-0.13.0/tests/store}/test_store_large_batches.py +3 -3
- {codex_usage_tracking-0.12.0/tests → codex_usage_tracking-0.13.0/tests/store}/test_store_migrations.py +2 -2
- {codex_usage_tracking-0.12.0/tests → codex_usage_tracking-0.13.0/tests/store}/test_store_query_sql.py +1 -1
- {codex_usage_tracking-0.12.0/tests → codex_usage_tracking-0.13.0/tests/store}/test_store_sources.py +4 -5
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/tests/store_dashboard_helpers.py +3 -3
- {codex_usage_tracking-0.12.0/tests → codex_usage_tracking-0.13.0/tests/usage_drain}/test_usage_drain_allowance_fits.py +2 -2
- {codex_usage_tracking-0.12.0/tests → codex_usage_tracking-0.13.0/tests/usage_drain}/test_usage_drain_boundary_delta.py +1 -1
- {codex_usage_tracking-0.12.0/tests → codex_usage_tracking-0.13.0/tests/usage_drain}/test_usage_drain_boundary_delta_summary.py +1 -1
- {codex_usage_tracking-0.12.0/tests → codex_usage_tracking-0.13.0/tests/usage_drain}/test_usage_drain_boundary_summary.py +1 -1
- {codex_usage_tracking-0.12.0/tests → codex_usage_tracking-0.13.0/tests/usage_drain}/test_usage_drain_error_diagnostics.py +2 -2
- {codex_usage_tracking-0.12.0/tests → codex_usage_tracking-0.13.0/tests/usage_drain}/test_usage_drain_feature_history.py +1 -1
- {codex_usage_tracking-0.12.0/tests → codex_usage_tracking-0.13.0/tests/usage_drain}/test_usage_drain_model.py +1 -1
- {codex_usage_tracking-0.12.0/tests → codex_usage_tracking-0.13.0/tests/usage_drain}/test_usage_drain_one_percent_capacity.py +1 -1
- {codex_usage_tracking-0.12.0/tests → codex_usage_tracking-0.13.0/tests/usage_drain}/test_usage_drain_predictive.py +1 -1
- {codex_usage_tracking-0.12.0/tests → codex_usage_tracking-0.13.0/tests/usage_drain}/test_usage_drain_regime_segments.py +2 -2
- {codex_usage_tracking-0.12.0/tests → codex_usage_tracking-0.13.0/tests/usage_drain}/test_usage_drain_regression.py +2 -2
- {codex_usage_tracking-0.12.0/tests → codex_usage_tracking-0.13.0/tests/usage_drain}/test_usage_drain_report_records.py +2 -2
- {codex_usage_tracking-0.12.0/tests → codex_usage_tracking-0.13.0/tests/usage_drain}/test_usage_drain_reports.py +9 -7
- {codex_usage_tracking-0.12.0/tests → codex_usage_tracking-0.13.0/tests/usage_drain}/test_usage_drain_state_buckets.py +1 -1
- {codex_usage_tracking-0.12.0/tests → codex_usage_tracking-0.13.0/tests/usage_drain}/test_usage_drain_state_diagnostics.py +1 -1
- {codex_usage_tracking-0.12.0/tests → codex_usage_tracking-0.13.0/tests/usage_drain}/test_usage_drain_summary_metrics.py +1 -1
- {codex_usage_tracking-0.12.0/tests → codex_usage_tracking-0.13.0/tests/usage_drain}/test_usage_drain_thread_curves.py +1 -1
- {codex_usage_tracking-0.12.0/tests → codex_usage_tracking-0.13.0/tests/usage_drain}/test_usage_drain_token_components.py +2 -2
- {codex_usage_tracking-0.12.0/tests → codex_usage_tracking-0.13.0/tests/usage_drain}/test_usage_drain_transition_gates.py +1 -1
- {codex_usage_tracking-0.12.0/tests → codex_usage_tracking-0.13.0/tests/usage_drain}/test_usage_drain_transition_metrics.py +1 -1
- {codex_usage_tracking-0.12.0/tests → codex_usage_tracking-0.13.0/tests/usage_drain}/test_usage_drain_walk_forward.py +2 -2
- codex_usage_tracking-0.12.0/src/codex_usage_tracker/json_contracts.py +0 -515
- codex_usage_tracking-0.12.0/src/codex_usage_tracking.egg-info/SOURCES.txt +0 -348
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/.mcp.json +0 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/AGENTS.md +0 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/CONTRIBUTING.md +0 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/LICENSE +0 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/MANIFEST.in +0 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/SECURITY.md +0 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/assets/icon.svg +0 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/docs/architecture-boundary-map.md +0 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/docs/architecture.md +0 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/docs/assets/dashboard-call-investigator-evidence.png +0 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/docs/assets/dashboard-call-investigator-preview.png +0 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/docs/assets/dashboard-call-investigator.png +0 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/docs/assets/dashboard-calls-preview.png +0 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/docs/assets/dashboard-calls.png +0 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/docs/assets/dashboard-details.png +0 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/docs/assets/dashboard-diagnostics-git-expanded.png +0 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/docs/assets/dashboard-diagnostics.png +0 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/docs/assets/dashboard-insights.png +0 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/docs/assets/dashboard-threads.png +0 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/docs/assets/plugin-prompts.png +0 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/docs/assets/plugin-thread-leaderboard.png +0 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/docs/assets/ux/call-detail-panel.png +0 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/docs/assets/ux/insight-overview.png +0 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/docs/assets/ux/thread-investigation.png +0 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/docs/call-drilldown-performance-checklist.md +0 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/docs/dashboard-guide.md +0 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/docs/maintainability-scorecard.md +0 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/docs/mcp.md +0 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/docs/pricing-and-credits.md +0 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/docs/privacy.md +0 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/docs/ui-ux-improvement-plan.md +0 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/docs/usage-drain-modeling.md +0 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/scripts/check_wemake_baseline.py +0 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/setup.cfg +0 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/skills/codex-usage-api/SKILL.md +0 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/skills/codex-usage-tracker/SKILL.md +0 -0
- /codex_usage_tracking-0.12.0/src/codex_usage_tracker/cli_output.py → /codex_usage_tracking-0.13.0/src/codex_usage_tracker/cli/output.py +0 -0
- /codex_usage_tracking-0.12.0/src/codex_usage_tracker/context_action_timing.py → /codex_usage_tracking-0.13.0/src/codex_usage_tracker/context/action_timing.py +0 -0
- /codex_usage_tracking-0.12.0/src/codex_usage_tracker/context_token_estimates.py → /codex_usage_tracking-0.13.0/src/codex_usage_tracker/context/token_estimates.py +0 -0
- {codex_usage_tracking-0.12.0/src/codex_usage_tracker → codex_usage_tracking-0.13.0/src/codex_usage_tracker/core}/api_payloads.py +0 -0
- {codex_usage_tracking-0.12.0/src/codex_usage_tracker → codex_usage_tracking-0.13.0/src/codex_usage_tracker/core}/call_origin.py +0 -0
- {codex_usage_tracking-0.12.0/src/codex_usage_tracker → codex_usage_tracking-0.13.0/src/codex_usage_tracker/core}/i18n.py +0 -0
- {codex_usage_tracking-0.12.0/src/codex_usage_tracker → codex_usage_tracking-0.13.0/src/codex_usage_tracker/core}/json_contract_validation.py +0 -0
- {codex_usage_tracking-0.12.0/src/codex_usage_tracker → codex_usage_tracking-0.13.0/src/codex_usage_tracker/core}/models.py +0 -0
- {codex_usage_tracking-0.12.0/src/codex_usage_tracker → codex_usage_tracking-0.13.0/src/codex_usage_tracker/core}/paths.py +0 -0
- {codex_usage_tracking-0.12.0/src/codex_usage_tracker → codex_usage_tracking-0.13.0/src/codex_usage_tracker/core}/redaction.py +0 -0
- {codex_usage_tracking-0.12.0/src/codex_usage_tracker → codex_usage_tracking-0.13.0/src/codex_usage_tracker/core}/schema.py +0 -0
- {codex_usage_tracking-0.12.0/src/codex_usage_tracker → codex_usage_tracking-0.13.0/src/codex_usage_tracker/core}/threads.py +0 -0
- /codex_usage_tracking-0.12.0/src/codex_usage_tracker/dashboard_pricing_snapshot.py → /codex_usage_tracking-0.13.0/src/codex_usage_tracker/dashboard/pricing_snapshot.py +0 -0
- /codex_usage_tracking-0.12.0/src/codex_usage_tracker/diagnostic_action_hints.py → /codex_usage_tracking-0.13.0/src/codex_usage_tracker/diagnostics/action_hints.py +0 -0
- /codex_usage_tracking-0.12.0/src/codex_usage_tracker/diagnostic_snapshot_constants.py → /codex_usage_tracking-0.13.0/src/codex_usage_tracker/diagnostics/snapshot_constants.py +0 -0
- /codex_usage_tracking-0.12.0/src/codex_usage_tracker/diagnostic_snapshot_events.py → /codex_usage_tracking-0.13.0/src/codex_usage_tracker/diagnostics/snapshot_events.py +0 -0
- /codex_usage_tracking-0.12.0/src/codex_usage_tracker/diagnostics_types.py → /codex_usage_tracking-0.13.0/src/codex_usage_tracker/diagnostics/types.py +0 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/src/codex_usage_tracker/plugin_data/__init__.py +0 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/src/codex_usage_tracker/plugin_data/assets/icon.svg +0 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/src/codex_usage_tracker/plugin_data/dashboard/dashboard.css +0 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/src/codex_usage_tracker/plugin_data/dashboard/dashboard.js +0 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_actions.js +0 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_analysis.js +0 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_call.css +0 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_call_diagnostics.js +0 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_call_investigator.js +0 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_cells.js +0 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_data.js +0 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_detail.css +0 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_details.js +0 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_diagnostics.js +0 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_diagnostics_facts.js +0 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_diagnostics_snapshots.js +0 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_events.js +0 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_filters.js +0 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_format.js +0 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_i18n.js +0 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_insights.css +0 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_insights.js +0 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_layout.css +0 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_live.js +0 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_payload_cache.js +0 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_responsive.css +0 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_state.js +0 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_status.js +0 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_tables.css +0 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_tables.js +0 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_template.html +0 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_tooltips.js +0 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/src/codex_usage_tracker/plugin_data/dashboard/locales/ar.json +0 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/src/codex_usage_tracker/plugin_data/dashboard/locales/de.json +0 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/src/codex_usage_tracker/plugin_data/dashboard/locales/en.json +0 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/src/codex_usage_tracker/plugin_data/dashboard/locales/es.json +0 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/src/codex_usage_tracker/plugin_data/dashboard/locales/fr.json +0 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/src/codex_usage_tracker/plugin_data/dashboard/locales/it.json +0 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/src/codex_usage_tracker/plugin_data/dashboard/locales/ja.json +0 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/src/codex_usage_tracker/plugin_data/dashboard/locales/ko.json +0 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/src/codex_usage_tracker/plugin_data/dashboard/locales/pt.json +0 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/src/codex_usage_tracker/plugin_data/dashboard/locales/ru.json +0 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/src/codex_usage_tracker/plugin_data/dashboard/locales/vi.json +0 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/src/codex_usage_tracker/plugin_data/dashboard/locales/zh-Hans.json +0 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/src/codex_usage_tracker/plugin_data/docs/assets/dashboard-call-investigator-evidence.png +0 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/src/codex_usage_tracker/plugin_data/docs/assets/dashboard-call-investigator-preview.png +0 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/src/codex_usage_tracker/plugin_data/docs/assets/dashboard-call-investigator.png +0 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/src/codex_usage_tracker/plugin_data/docs/assets/dashboard-calls-preview.png +0 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/src/codex_usage_tracker/plugin_data/docs/assets/dashboard-calls.png +0 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/src/codex_usage_tracker/plugin_data/docs/assets/dashboard-details.png +0 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/src/codex_usage_tracker/plugin_data/docs/assets/dashboard-diagnostics-git-expanded.png +0 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/src/codex_usage_tracker/plugin_data/docs/assets/dashboard-diagnostics.png +0 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/src/codex_usage_tracker/plugin_data/docs/assets/dashboard-insights.png +0 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/src/codex_usage_tracker/plugin_data/docs/assets/dashboard-threads.png +0 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/src/codex_usage_tracker/plugin_data/docs/assets/plugin-prompts.png +0 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/src/codex_usage_tracker/plugin_data/docs/assets/plugin-thread-leaderboard.png +0 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/src/codex_usage_tracker/plugin_data/docs/dashboard-guide.html +0 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/src/codex_usage_tracker/plugin_data/rate_cards/codex-credit-rates.json +0 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/src/codex_usage_tracker/plugin_data/skills/codex-usage-api/SKILL.md +0 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/src/codex_usage_tracker/plugin_data/skills/codex-usage-tracker/SKILL.md +0 -0
- {codex_usage_tracking-0.12.0/src/codex_usage_tracker → codex_usage_tracking-0.13.0/src/codex_usage_tracker/pricing}/allowance_text.py +0 -0
- /codex_usage_tracking-0.12.0/src/codex_usage_tracker/pricing_estimates.py → /codex_usage_tracking-0.13.0/src/codex_usage_tracker/pricing/estimates.py +0 -0
- /codex_usage_tracking-0.12.0/src/codex_usage_tracker/report_filters.py → /codex_usage_tracking-0.13.0/src/codex_usage_tracker/reports/filters.py +0 -0
- /codex_usage_tracking-0.12.0/src/codex_usage_tracker/report_recommendations.py → /codex_usage_tracking-0.13.0/src/codex_usage_tracker/reports/recommendation_builder.py +0 -0
- /codex_usage_tracking-0.12.0/src/codex_usage_tracker/server_routes.py → /codex_usage_tracking-0.13.0/src/codex_usage_tracker/server/routes.py +0 -0
- /codex_usage_tracking-0.12.0/src/codex_usage_tracker/server_utils.py → /codex_usage_tracking-0.13.0/src/codex_usage_tracker/server/utils.py +0 -0
- /codex_usage_tracking-0.12.0/src/codex_usage_tracker/store_query_sql.py → /codex_usage_tracking-0.13.0/src/codex_usage_tracker/store/query_sql.py +0 -0
- /codex_usage_tracking-0.12.0/src/codex_usage_tracker/store_rows.py → /codex_usage_tracking-0.13.0/src/codex_usage_tracker/store/rows.py +0 -0
- /codex_usage_tracking-0.12.0/src/codex_usage_tracker/store_usage_timing.py → /codex_usage_tracking-0.13.0/src/codex_usage_tracker/store/usage_timing.py +0 -0
- /codex_usage_tracking-0.12.0/src/codex_usage_tracker/usage_drain_boundary_scopes.py → /codex_usage_tracking-0.13.0/src/codex_usage_tracker/usage_drain/boundary_scopes.py +0 -0
- /codex_usage_tracking-0.12.0/src/codex_usage_tracker/usage_drain_thread_curves.py → /codex_usage_tracking-0.13.0/src/codex_usage_tracker/usage_drain/thread_curves.py +0 -0
- /codex_usage_tracking-0.12.0/src/codex_usage_tracker/usage_drain_types.py → /codex_usage_tracking-0.13.0/src/codex_usage_tracker/usage_drain/types.py +0 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/src/codex_usage_tracking.egg-info/dependency_links.txt +0 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/src/codex_usage_tracking.egg-info/entry_points.txt +0 -0
- {codex_usage_tracking-0.12.0 → codex_usage_tracking-0.13.0}/src/codex_usage_tracking.egg-info/top_level.txt +0 -0
|
@@ -2,6 +2,21 @@
|
|
|
2
2
|
|
|
3
3
|
## Unreleased
|
|
4
4
|
|
|
5
|
+
## 0.13.0 - 2026-06-30
|
|
6
|
+
|
|
7
|
+
- Add first-run onboarding docs covering install, setup, live-dashboard launch, empty-dashboard troubleshooting, plugin discovery, and safe issue diagnostics.
|
|
8
|
+
- Improve `doctor --json` first-run environment reporting so support requests can distinguish missing logs, empty history, and plugin/runtime path issues faster.
|
|
9
|
+
- Add safe support-bundle issue-report fields and issue-template guidance so users can attach diagnostics without leaking prompts, tool outputs, commands, patches, or raw paths in strict mode.
|
|
10
|
+
- Strengthen installed-wheel lifecycle smoke coverage across setup, doctor, dashboard generation, strict support bundles, and plugin resources.
|
|
11
|
+
- Harden strict support-bundle redaction for nested diagnostic paths, Python executable paths, and resolved `/private/var`-style platform path aliases.
|
|
12
|
+
|
|
13
|
+
## 0.12.1 - 2026-06-29
|
|
14
|
+
|
|
15
|
+
- Ship the package-domain boundary refactor behind compatibility facades so existing CLI, imports, dashboard routes, JSON payloads, and MCP entrypoints keep working while the source tree is organized by responsibility.
|
|
16
|
+
- Add Tach domain configuration files, refreshed Agent Maintainer baselines, and package-boundary documentation for the new module layout.
|
|
17
|
+
- Restore `python -m codex_usage_tracker.cli` after the CLI package split and add regression coverage for both module entrypoints.
|
|
18
|
+
- Split allowance pricing helpers into smaller modules while preserving the public allowance facade.
|
|
19
|
+
|
|
5
20
|
## 0.12.0 - 2026-06-29
|
|
6
21
|
|
|
7
22
|
- Refactor CLI, dashboard server routing, SQLite store/query boundaries, context parsing, diagnostics, and usage-drain modeling into smaller modules with compatibility facades.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: codex-usage-tracking
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.13.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
|
|
@@ -28,7 +28,7 @@ License-File: LICENSE
|
|
|
28
28
|
Requires-Dist: mcp>=1.2.0
|
|
29
29
|
Requires-Dist: tiktoken>=0.13.0
|
|
30
30
|
Provides-Extra: dev
|
|
31
|
-
Requires-Dist: agent-maintainer[core]
|
|
31
|
+
Requires-Dist: agent-maintainer[core]>=0.1.0b1; python_version >= "3.11" and extra == "dev"
|
|
32
32
|
Requires-Dist: actionlint-py>=1.7.12.24; python_version >= "3.11" and extra == "dev"
|
|
33
33
|
Requires-Dist: build>=1.2; extra == "dev"
|
|
34
34
|
Requires-Dist: git-agent-ratchet>=1.3.0; python_version >= "3.11" and extra == "dev"
|
|
@@ -53,7 +53,7 @@ Local-first dashboard, Codex plugin, and companion skill for understanding where
|
|
|
53
53
|
|
|
54
54
|
[](https://github.com/douglasmonsky/codex-usage-tracker/actions/workflows/ci.yml)
|
|
55
55
|
[](https://pypi.org/project/codex-usage-tracking/)
|
|
56
|
-
[](https://pepy.tech/projects/codex-usage-tracking)
|
|
57
57
|

|
|
58
58
|
[](LICENSE)
|
|
59
59
|
|
|
@@ -78,6 +78,8 @@ codex-usage-tracker serve-dashboard --open
|
|
|
78
78
|
Use your normal Python launcher for your platform: `python3` is common on macOS/Linux, and `py` may be preferable on Windows. On macOS with Homebrew, `brew install pipx` is also fine.
|
|
79
79
|
If `codex-usage-tracker` is not found after installing with pipx, open a new terminal or add the binary directory printed by `pipx ensurepath` to your `PATH`.
|
|
80
80
|
|
|
81
|
+
First install? Start with the [First Five Minutes guide](docs/first-five-minutes.md) for setup, verification, empty-dashboard checks, and safe issue diagnostics.
|
|
82
|
+
|
|
81
83
|
`serve-dashboard` refreshes active-session usage before opening by default. Use `--no-refresh` only when you intentionally want to inspect the cached local index.
|
|
82
84
|
|
|
83
85
|
Package naming: the PyPI distribution is `codex-usage-tracking`; the installed command is `codex-usage-tracker`; the GitHub repository remains `douglasmonsky/codex-usage-tracker`. The `codex-usage-tracker` PyPI name is not this project, so avoid similarly named packages when following these docs.
|
|
@@ -319,6 +321,8 @@ This is optional. The normal shell install above is the fastest trusted path for
|
|
|
319
321
|
|
|
320
322
|
## Roadmap
|
|
321
323
|
|
|
324
|
+
The next phase is adoption hardening: better first-run setup, safer support bundles, clearer guided diagnostics, and scale/reliability checks now that more people are trying the project. See [Adoption Hardening Roadmap](docs/adoption-hardening-roadmap.md) for the branch-by-branch plan.
|
|
325
|
+
|
|
322
326
|
- Keep Python runtime support validated with CI matrix coverage, package classifiers, release docs, and installed-package smoke tests.
|
|
323
327
|
- Improve the `Set limits` flow with a paste/import experience for 5-hour and weekly allowance snapshots.
|
|
324
328
|
- Track allowance snapshot history so local Codex credits can be compared against visible remaining-usage changes over time.
|
|
@@ -9,7 +9,7 @@ Local-first dashboard, Codex plugin, and companion skill for understanding where
|
|
|
9
9
|
|
|
10
10
|
[](https://github.com/douglasmonsky/codex-usage-tracker/actions/workflows/ci.yml)
|
|
11
11
|
[](https://pypi.org/project/codex-usage-tracking/)
|
|
12
|
-
[](https://pepy.tech/projects/codex-usage-tracking)
|
|
13
13
|

|
|
14
14
|
[](LICENSE)
|
|
15
15
|
|
|
@@ -34,6 +34,8 @@ codex-usage-tracker serve-dashboard --open
|
|
|
34
34
|
Use your normal Python launcher for your platform: `python3` is common on macOS/Linux, and `py` may be preferable on Windows. On macOS with Homebrew, `brew install pipx` is also fine.
|
|
35
35
|
If `codex-usage-tracker` is not found after installing with pipx, open a new terminal or add the binary directory printed by `pipx ensurepath` to your `PATH`.
|
|
36
36
|
|
|
37
|
+
First install? Start with the [First Five Minutes guide](docs/first-five-minutes.md) for setup, verification, empty-dashboard checks, and safe issue diagnostics.
|
|
38
|
+
|
|
37
39
|
`serve-dashboard` refreshes active-session usage before opening by default. Use `--no-refresh` only when you intentionally want to inspect the cached local index.
|
|
38
40
|
|
|
39
41
|
Package naming: the PyPI distribution is `codex-usage-tracking`; the installed command is `codex-usage-tracker`; the GitHub repository remains `douglasmonsky/codex-usage-tracker`. The `codex-usage-tracker` PyPI name is not this project, so avoid similarly named packages when following these docs.
|
|
@@ -275,6 +277,8 @@ This is optional. The normal shell install above is the fastest trusted path for
|
|
|
275
277
|
|
|
276
278
|
## Roadmap
|
|
277
279
|
|
|
280
|
+
The next phase is adoption hardening: better first-run setup, safer support bundles, clearer guided diagnostics, and scale/reliability checks now that more people are trying the project. See [Adoption Hardening Roadmap](docs/adoption-hardening-roadmap.md) for the branch-by-branch plan.
|
|
281
|
+
|
|
278
282
|
- Keep Python runtime support validated with CI matrix coverage, package classifiers, release docs, and installed-package smoke tests.
|
|
279
283
|
- Improve the `Set limits` flow with a paste/import experience for 5-hour and weekly allowance snapshots.
|
|
280
284
|
- Track allowance snapshot history so local Codex credits can be compared against visible remaining-usage changes over time.
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
# Adoption Hardening Roadmap
|
|
2
|
+
|
|
3
|
+
This roadmap covers the next phase after the `0.12.x` architecture repair. The project is now getting enough outside attention that the priority shifts from fast feature expansion to making first-run setup, support, diagnostics, and large-history behavior boring for new users.
|
|
4
|
+
|
|
5
|
+
## Current Signals
|
|
6
|
+
|
|
7
|
+
- GitHub interest has moved beyond personal-use scale: stars, forks, clones, and traffic are all growing.
|
|
8
|
+
- The project has already handled outside bug reports around Windows dashboard serving and large-history SQLite limits.
|
|
9
|
+
- The release cadence has been fast, so the next minor releases should tighten trust and support surfaces before adding more complex diagnostics.
|
|
10
|
+
- Current local gates are healthy: Ruff, MyPy, Tach, release checks, Agent Maintainer fast profile, and pytest pass.
|
|
11
|
+
- Main technical debt is no longer giant files, but there are still dense domains: `usage_drain`, `server`, dashboard APIs, and large integration tests.
|
|
12
|
+
|
|
13
|
+
## Operating Rules
|
|
14
|
+
|
|
15
|
+
- Keep `main` always releasable.
|
|
16
|
+
- Use one short-lived branch per reviewable capability.
|
|
17
|
+
- Prefer PRs even for solo-maintainer work so each change has a review artifact.
|
|
18
|
+
- Avoid stacking branches unless a later branch truly depends on an earlier one.
|
|
19
|
+
- Do not release every small branch. Release after a coherent group of user-facing improvements lands.
|
|
20
|
+
- Preserve privacy guarantees: no raw prompts, assistant messages, tool outputs, patch text, secrets, or private config values in stored snapshots, support bundles, screenshots, generated dashboards, or test fixtures.
|
|
21
|
+
|
|
22
|
+
## 0.13: Adoption Hardening
|
|
23
|
+
|
|
24
|
+
Goal: make first-time installs and bug reports easier for users who did not build the tool.
|
|
25
|
+
|
|
26
|
+
Branches:
|
|
27
|
+
|
|
28
|
+
- `feature/doctor-first-run-report`
|
|
29
|
+
- Make `doctor` clearly report Python version, package version, Codex log discovery, tracker DB path, dashboard asset health, plugin registration state, and common Windows/browser pitfalls.
|
|
30
|
+
- Add `--json` parity for any new fields shown in text output.
|
|
31
|
+
- Acceptance: focused doctor tests plus installed-package smoke coverage.
|
|
32
|
+
|
|
33
|
+
- `feature/support-bundle-issue-flow`
|
|
34
|
+
- Improve strict support bundle output for issue reports.
|
|
35
|
+
- Add a short CLI hint showing which safe fields users can paste into GitHub issues.
|
|
36
|
+
- Acceptance: privacy tests prove strict bundles do not leak raw prompts, outputs, full paths, tokens, or private config values.
|
|
37
|
+
|
|
38
|
+
- `test/installed-wheel-platform-smokes`
|
|
39
|
+
- Strengthen wheel-level smoke tests for setup, dashboard generation, `serve-dashboard --help`, `doctor`, support bundle, and bundled dashboard assets.
|
|
40
|
+
- Keep CI runtime reasonable by using synthetic logs and selected commands.
|
|
41
|
+
- Acceptance: wheel smoke catches entrypoint and package-data regressions before release.
|
|
42
|
+
|
|
43
|
+
- `docs/first-five-minutes-onboarding`
|
|
44
|
+
- Add a concise first-run walkthrough: install, setup, launch, verify, troubleshoot.
|
|
45
|
+
- Include "what to do if the dashboard is empty" and "what to attach to an issue" sections.
|
|
46
|
+
- Acceptance: README stays scannable; deeper details live in docs.
|
|
47
|
+
|
|
48
|
+
Release target:
|
|
49
|
+
|
|
50
|
+
- Ship `0.13.0` once the user-facing flow feels reliable.
|
|
51
|
+
|
|
52
|
+
## 0.14: Guided Diagnostics
|
|
53
|
+
|
|
54
|
+
Goal: turn powerful diagnostics into plain answers before exposing more raw charts.
|
|
55
|
+
|
|
56
|
+
Branches:
|
|
57
|
+
|
|
58
|
+
- `feature/guided-usage-summary`
|
|
59
|
+
- Add a "What is driving my usage?" report across dashboard and CLI.
|
|
60
|
+
- Prioritize threads, models, effort, cache misses, subagents, command/tool activity, and usage-drain signals.
|
|
61
|
+
|
|
62
|
+
- `feature/weekly-allowance-change-report`
|
|
63
|
+
- Add a guided report explaining projected weekly credits, confidence bands, observed usage coverage, and caveats.
|
|
64
|
+
- Avoid overclaiming; frame changes as local evidence, not universal allowance proof.
|
|
65
|
+
|
|
66
|
+
- `feature/thread-efficiency-report`
|
|
67
|
+
- Add thread-level efficiency indicators: cost per visible call, cache behavior, cold resume signs, context pressure, and long-thread tradeoffs.
|
|
68
|
+
|
|
69
|
+
- `feature/diagnostics-refresh-diff`
|
|
70
|
+
- Show what changed since the previous diagnostics refresh.
|
|
71
|
+
- Keep this snapshot-based and on demand.
|
|
72
|
+
|
|
73
|
+
Release target:
|
|
74
|
+
|
|
75
|
+
- Ship `0.14.0` when at least two guided reports are useful end to end.
|
|
76
|
+
|
|
77
|
+
## 0.15: Reliability And Scale
|
|
78
|
+
|
|
79
|
+
Goal: make large histories and long diagnostics predictable.
|
|
80
|
+
|
|
81
|
+
Branches:
|
|
82
|
+
|
|
83
|
+
- `perf/large-history-refresh-benchmarks`
|
|
84
|
+
- Add synthetic benchmark thresholds for setup, refresh, diagnostics refresh, and dashboard API payloads.
|
|
85
|
+
|
|
86
|
+
- `feature/diagnostics-refresh-progress`
|
|
87
|
+
- Add progress/status for expensive diagnostics refreshes so users know whether work is running, stale, failed, or complete.
|
|
88
|
+
|
|
89
|
+
- `fix/resumable-diagnostic-snapshots`
|
|
90
|
+
- Make failed diagnostic snapshot refreshes isolated and resumable by section.
|
|
91
|
+
|
|
92
|
+
- `test/parser-compat-fixtures`
|
|
93
|
+
- Add focused parser fixtures for new Codex log shapes as users report them.
|
|
94
|
+
|
|
95
|
+
Release target:
|
|
96
|
+
|
|
97
|
+
- Ship `0.15.0` when refresh behavior is explainable for both normal and large histories.
|
|
98
|
+
|
|
99
|
+
## 0.16: Maintainability Ratchet
|
|
100
|
+
|
|
101
|
+
Goal: keep the project easy to change while adoption grows.
|
|
102
|
+
|
|
103
|
+
Branches:
|
|
104
|
+
|
|
105
|
+
- `refactor/usage-drain-subpackages`
|
|
106
|
+
- Split usage-drain internals by spans, features, models, reports, charts, and allowance helpers.
|
|
107
|
+
|
|
108
|
+
- `refactor/server-api-boundaries`
|
|
109
|
+
- Split server routing, static assets, diagnostics APIs, usage APIs, and response helpers.
|
|
110
|
+
|
|
111
|
+
- `refactor/xenon-b-ranked-modules`
|
|
112
|
+
- Reduce the current B-ranked Xenon modules until `xenon --max-absolute B --max-modules A --max-average A src` can pass.
|
|
113
|
+
|
|
114
|
+
- `chore/expand-mypy-coverage`
|
|
115
|
+
- Expand MyPy coverage in small safe slices.
|
|
116
|
+
|
|
117
|
+
Release target:
|
|
118
|
+
|
|
119
|
+
- These can land behind compatibility facades and may ship as `0.16.0` or be spread across smaller minors if that materially reduces release risk.
|
|
120
|
+
|
|
121
|
+
## 1.0 Readiness Bar
|
|
122
|
+
|
|
123
|
+
Do not call the project `1.0` until:
|
|
124
|
+
|
|
125
|
+
- First-run setup is boring on macOS, Windows, and Linux.
|
|
126
|
+
- The support-bundle issue flow is privacy-safe and easy to use.
|
|
127
|
+
- Dashboard and CLI JSON contracts are documented and stable.
|
|
128
|
+
- Diagnostics are useful but clearly caveated where inference is uncertain.
|
|
129
|
+
- Large-history refresh behavior is predictable.
|
|
130
|
+
- Several outside issue reports have been handled without emergency patch churn.
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# Package Domain Boundaries
|
|
2
|
+
|
|
3
|
+
The package-domain refactor moves the previously flat `codex_usage_tracker` source tree into responsibility folders and switches Tach from one large root module list to per-domain `tach.domain.toml` files.
|
|
4
|
+
|
|
5
|
+
The initial domain policy declares dependencies that match the current implementation after the move. Circular dependency blocking remains disabled because the existing parser, diagnostics, and store flow still has a real cycle: parser state feeds diagnostic facts, diagnostics snapshots read persisted state, and store helpers import parser state metadata. That cycle is preserved for behavior compatibility and should be reduced in a later, focused branch.
|
|
6
|
+
|
|
7
|
+
This is an architecture policy change, not an attempt to bypass drift: the old Tach module paths no longer exist after the file move, and per-domain files give each responsibility folder local ownership of its boundary declaration.
|
|
@@ -37,6 +37,7 @@ Tracked schema ids:
|
|
|
37
37
|
| --- | --- |
|
|
38
38
|
| `codex-usage-tracker-setup-v1` | CLI `setup --json` |
|
|
39
39
|
| `codex-usage-tracker-doctor-v1` | CLI `doctor --json`, MCP `usage_doctor(response_format="json")` |
|
|
40
|
+
| | Includes an `environment` object with package and Python versions, important local paths, lightweight Codex log discovery counts, and packaged dashboard asset health. Support bundles sanitize this payload according to the selected privacy mode. |
|
|
40
41
|
| `codex-usage-tracker-plugin-install-v1` | CLI `install-plugin --json`, setup plugin payload |
|
|
41
42
|
| `codex-usage-tracker-plugin-upgrade-v1` | CLI `upgrade-plugin --json` |
|
|
42
43
|
| `codex-usage-tracker-plugin-uninstall-v1` | CLI `uninstall-plugin --json` |
|
|
@@ -187,6 +187,8 @@ codex-usage-tracker --privacy-mode strict support-bundle --output ~/.codex-usage
|
|
|
187
187
|
|
|
188
188
|
Support bundles are diagnostic summaries for issues. They include package, platform, doctor, schema, parser, pricing, allowance, threshold, project-config, and privacy metadata. They exclude raw logs, aggregate rows, prompts, assistant messages, tool output, and context text.
|
|
189
189
|
|
|
190
|
+
Strict support bundles include an `issue_report` section that lists the paste-safe sections and fields for GitHub issues. Review the JSON before posting, and do not add raw JSONL logs, prompts, assistant messages, tool output, command text, patch text, full local paths, secrets, credentials, or private config values.
|
|
191
|
+
|
|
190
192
|
## Local Config
|
|
191
193
|
|
|
192
194
|
```bash
|
|
@@ -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.13.0
|
|
42
42
|
hotfix/0.3.3
|
|
43
43
|
```
|
|
44
44
|
|
|
@@ -91,7 +91,10 @@ blocked
|
|
|
91
91
|
Recommended milestones:
|
|
92
92
|
|
|
93
93
|
```text
|
|
94
|
-
0.
|
|
94
|
+
0.13-adoption-hardening
|
|
95
|
+
0.14-guided-diagnostics
|
|
96
|
+
0.15-reliability-scale
|
|
97
|
+
0.16-maintainability-ratchet
|
|
95
98
|
1.0-readiness
|
|
96
99
|
1.0.0
|
|
97
100
|
```
|
|
@@ -146,8 +149,8 @@ python scripts/smoke_installed_package.py --docker
|
|
|
146
149
|
To verify the public PyPI package instead of the local checkout:
|
|
147
150
|
|
|
148
151
|
```bash
|
|
149
|
-
python scripts/smoke_installed_package.py --from-pypi --version 0.
|
|
150
|
-
python scripts/smoke_installed_package.py --docker --from-pypi --version 0.
|
|
152
|
+
python scripts/smoke_installed_package.py --from-pypi --version 0.13.0
|
|
153
|
+
python scripts/smoke_installed_package.py --docker --from-pypi --version 0.13.0
|
|
151
154
|
```
|
|
152
155
|
|
|
153
156
|
`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.
|
|
@@ -294,8 +297,8 @@ After the release branch merges, tag from updated `main`, not from an unreviewed
|
|
|
294
297
|
```bash
|
|
295
298
|
git switch main
|
|
296
299
|
git pull --ff-only
|
|
297
|
-
git tag -a v0.
|
|
298
|
-
git push origin v0.
|
|
300
|
+
git tag -a v0.13.0 -m "codex-usage-tracker 0.13.0"
|
|
301
|
+
git push origin v0.13.0
|
|
299
302
|
```
|
|
300
303
|
|
|
301
304
|
Do not create or push release tags without maintainer approval.
|
|
@@ -304,7 +307,7 @@ Do not create or push release tags without maintainer approval.
|
|
|
304
307
|
|
|
305
308
|
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.
|
|
306
309
|
|
|
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. Minor release `0.11.0` adds usage-drain diagnostic reports, projected weekly credit charts, and cumulative thread cost curves. Patch release `0.11.1` improves the Diagnostics weekly projection table and stale snapshot reload controls. Patch release `0.11.2` fixes served dashboard shell hydration and hardens the synthetic source-log benchmark smoke test. Patch release `0.11.3` fixes Windows live dashboard asset MIME handling. Patch release `0.11.4` fixes large-history setup refresh failures from SQLite variable limits. Minor release `0.12.0` ships the maintainability architecture repair, dashboard diagnostics hardening, Agent Maintainer ratchets, and warning-clean test suite.
|
|
310
|
+
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. Minor release `0.11.0` adds usage-drain diagnostic reports, projected weekly credit charts, and cumulative thread cost curves. Patch release `0.11.1` improves the Diagnostics weekly projection table and stale snapshot reload controls. Patch release `0.11.2` fixes served dashboard shell hydration and hardens the synthetic source-log benchmark smoke test. Patch release `0.11.3` fixes Windows live dashboard asset MIME handling. Patch release `0.11.4` fixes large-history setup refresh failures from SQLite variable limits. Minor release `0.12.0` ships the maintainability architecture repair, dashboard diagnostics hardening, Agent Maintainer ratchets, and warning-clean test suite. Patch release `0.12.1` ships the package-domain boundary split, allowance helper split, refreshed maintainability baselines, and CLI module entrypoint fix. Minor release `0.13.0` ships adoption-hardening onboarding, first-run diagnostics, support-bundle issue guidance, and installed-wheel lifecycle smoke hardening.
|
|
308
311
|
|
|
309
312
|
- GitHub Release: `https://github.com/douglasmonsky/codex-usage-tracker/releases/tag/v0.3.0`
|
|
310
313
|
- GitHub Release: `https://github.com/douglasmonsky/codex-usage-tracker/releases/tag/v0.3.1`
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
# First Five Minutes
|
|
2
|
+
|
|
3
|
+
This is the shortest path from a fresh machine to a working local dashboard.
|
|
4
|
+
|
|
5
|
+
## 1. Install
|
|
6
|
+
|
|
7
|
+
Use `pipx` so the tracker runs as its own command-line app:
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
python -m pip install --user pipx
|
|
11
|
+
python -m pipx ensurepath
|
|
12
|
+
pipx install codex-usage-tracking
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Use `python3` on macOS/Linux if that is your normal launcher. On Windows, `py -m pip install --user pipx` and `py -m pipx ensurepath` may be the right form. If `codex-usage-tracker` is not found after install, open a new terminal or add the path printed by `pipx ensurepath`.
|
|
16
|
+
|
|
17
|
+
## 2. Set Up
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
codex-usage-tracker setup
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
`setup` installs the local Codex plugin wrapper, initializes local config templates, refreshes the aggregate SQLite index from local Codex logs, and runs `doctor`. Restart Codex after setup if you want the companion MCP tools and skills to appear in new Codex sessions.
|
|
24
|
+
|
|
25
|
+
## 3. Launch
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
codex-usage-tracker serve-dashboard --open
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
This starts a localhost dashboard and refreshes active-session usage first. Keep the terminal running while using the live dashboard.
|
|
32
|
+
|
|
33
|
+
## 4. Verify
|
|
34
|
+
|
|
35
|
+
The first healthy state usually looks like this:
|
|
36
|
+
|
|
37
|
+
- Browser opens a `127.0.0.1` dashboard URL.
|
|
38
|
+
- The top badge says `Live`, not only `Static`.
|
|
39
|
+
- `Visible Calls` is greater than zero if local Codex logs exist.
|
|
40
|
+
- `doctor` does not report a `fail` status:
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
codex-usage-tracker doctor --suggest-repair
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## If The Dashboard Is Empty
|
|
47
|
+
|
|
48
|
+
Run these checks in order:
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
codex-usage-tracker doctor --suggest-repair
|
|
52
|
+
codex-usage-tracker refresh
|
|
53
|
+
codex-usage-tracker serve-dashboard --open --refresh
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
Common causes:
|
|
57
|
+
|
|
58
|
+
- No local Codex logs exist yet on that machine.
|
|
59
|
+
- Codex logs are somewhere other than `~/.codex`; use `--codex-home <path>` with `setup`, `refresh`, or `serve-dashboard`.
|
|
60
|
+
- You are looking only at active sessions while the data is archived; use the dashboard `History` selector or run with `--include-archived`.
|
|
61
|
+
- Browser cached an old static file; reload the `serve-dashboard` URL.
|
|
62
|
+
- On Windows, use a recent version if JavaScript files fail to load. Older releases could inherit a `.js` MIME type from the Windows registry.
|
|
63
|
+
|
|
64
|
+
## If The Plugin Does Not Show In Codex
|
|
65
|
+
|
|
66
|
+
The dashboard can work even when plugin discovery is not active. For plugin discovery:
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
codex-usage-tracker doctor --suggest-repair
|
|
70
|
+
codex-usage-tracker install-plugin
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
Then restart Codex and start a fresh Codex session.
|
|
74
|
+
|
|
75
|
+
## What To Attach To Issues
|
|
76
|
+
|
|
77
|
+
For public GitHub issues, prefer a strict support bundle:
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
codex-usage-tracker --privacy-mode strict support-bundle --output ~/.codex-usage-tracker/support-bundle.json
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
Review the JSON before posting it. The bundle's `issue_report.safe_fields` lists the safest fields to paste. Do not add raw Codex JSONL logs, prompts, assistant messages, tool output, command text, patch text, full local paths, secrets, credentials, or private config values.
|
|
84
|
+
|
|
85
|
+
## Next Useful Commands
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
codex-usage-tracker summary --preset last-7-days
|
|
89
|
+
codex-usage-tracker query --min-tokens 100000
|
|
90
|
+
codex-usage-tracker diagnostics overview --refresh
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
For deeper details, see the [Install Guide](install.md), [Dashboard Guide](dashboard-guide.md), and [CLI Reference](cli-reference.md).
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# Install Guide
|
|
2
2
|
|
|
3
|
+
New user? Start with the [First Five Minutes](first-five-minutes.md) guide, then return here for deeper install details.
|
|
4
|
+
|
|
3
5
|
## Recommended Install
|
|
4
6
|
|
|
5
7
|
Use `pipx` so the tracker is installed from PyPI as a command-line app without mixing dependencies into another project.
|
|
@@ -150,6 +152,6 @@ codex-usage-tracker reset-db --yes
|
|
|
150
152
|
codex-usage-tracker --privacy-mode strict support-bundle --output ~/.codex-usage-tracker/support-bundle.json
|
|
151
153
|
```
|
|
152
154
|
|
|
153
|
-
`support-bundle` writes package, Python, OS/platform, doctor status, database schema, parser diagnostics, pricing status, allowance status, threshold status, project config status, and
|
|
155
|
+
`support-bundle` writes package, Python, OS/platform, doctor status, database schema, parser diagnostics, pricing status, allowance status, threshold status, project config status, privacy metadata, and an `issue_report` list of paste-safe issue fields. It does not include raw logs, prompts, assistant messages, tool output, context text, or aggregate rows.
|
|
154
156
|
|
|
155
157
|
Default `support-bundle` mode keeps local diagnostic paths because they can help troubleshoot setup on your machine. Use `--privacy-mode strict` before sharing: strict mode redacts local diagnostic path strings in the bundle and doctor details while preserving existence flags, counts, parser diagnostics, and status fields.
|
|
@@ -67,6 +67,99 @@ xenon --max-absolute B --max-modules A --max-average A src
|
|
|
67
67
|
|
|
68
68
|
## Branch Ledger
|
|
69
69
|
|
|
70
|
+
### `chore/reset-maintainability-baseline`
|
|
71
|
+
|
|
72
|
+
Goal:
|
|
73
|
+
|
|
74
|
+
- Reset the Agent Maintainer file-length baseline after the package-domain
|
|
75
|
+
boundary migration so future branches fail only when they worsen current
|
|
76
|
+
oversized-file debt.
|
|
77
|
+
- Keep file-length thresholds unchanged.
|
|
78
|
+
|
|
79
|
+
Completed:
|
|
80
|
+
|
|
81
|
+
- Regenerated `.agent-maintainer/file-length-baseline.json` against the current
|
|
82
|
+
domain-package layout.
|
|
83
|
+
- Removed stale pre-refactor flat-module entries from the baseline and recorded
|
|
84
|
+
current oversized source/test files by their new package paths.
|
|
85
|
+
- Confirmed no threshold loosening was required: `file_length_max_physical`
|
|
86
|
+
remains `600`, and `file_length_max_source` remains `450`.
|
|
87
|
+
|
|
88
|
+
Checks:
|
|
89
|
+
|
|
90
|
+
- `.venv/bin/python -m agent_maintainer verify --profile fast`: passed with
|
|
91
|
+
non-blocking structure-cohesion warnings for `server` and `usage_drain`.
|
|
92
|
+
|
|
93
|
+
Remaining risks / next handoff:
|
|
94
|
+
|
|
95
|
+
- The baseline intentionally accepts existing oversized files as current debt.
|
|
96
|
+
- Continue cleanly from this baseline with small branches that reduce
|
|
97
|
+
`dashboard/api.py`, `store/api.py`, `usage_drain/reports.py`,
|
|
98
|
+
`diagnostics/snapshots.py`, CLI parser/main, and the largest tests.
|
|
99
|
+
|
|
100
|
+
### `refactor/split-oversized-modules`
|
|
101
|
+
|
|
102
|
+
Goal:
|
|
103
|
+
|
|
104
|
+
- Continue the post-domain-move handoff by clearing one moved source module from
|
|
105
|
+
the Agent Maintainer file-length ratchet.
|
|
106
|
+
- Keep the slice small enough to review independently after the broad package
|
|
107
|
+
boundary merge.
|
|
108
|
+
|
|
109
|
+
Completed:
|
|
110
|
+
|
|
111
|
+
- Split `src/codex_usage_tracker/pricing/allowance.py` into a compatibility
|
|
112
|
+
facade plus `pricing/allowance_config.py` and `pricing/allowance_usage.py`.
|
|
113
|
+
- Kept the public `codex_usage_tracker.pricing.allowance` import surface stable.
|
|
114
|
+
- Verified the pricing-scoped Agent Maintainer fast profile passes.
|
|
115
|
+
|
|
116
|
+
Checks:
|
|
117
|
+
|
|
118
|
+
- `.venv/bin/python -m ruff check src/codex_usage_tracker/pricing/allowance.py src/codex_usage_tracker/pricing/allowance_config.py src/codex_usage_tracker/pricing/allowance_usage.py tests/pricing/test_allowance.py`: passed.
|
|
119
|
+
- `.venv/bin/python -m pytest tests/pricing/test_allowance.py -q`: passed, 8 tests.
|
|
120
|
+
- `.venv/bin/python -m agent_maintainer verify --profile fast --file-length-path src/codex_usage_tracker/pricing/allowance.py --file-length-path src/codex_usage_tracker/pricing/allowance_config.py --file-length-path src/codex_usage_tracker/pricing/allowance_usage.py`: passed with non-blocking structure/change-budget warnings.
|
|
121
|
+
|
|
122
|
+
Remaining risks / next handoff:
|
|
123
|
+
|
|
124
|
+
- Full `agent_maintainer verify --profile fast` still fails on the remaining
|
|
125
|
+
oversized moved modules/tests: CLI parser/main, usage-drain model/reports,
|
|
126
|
+
dashboard API, diagnostics snapshots, store API, and several large tests.
|
|
127
|
+
- Next source candidates: `dashboard/api.py` or `store/api.py` if prioritizing
|
|
128
|
+
runtime blast radius; `tests/dashboard/test_dashboard_server.py` if
|
|
129
|
+
prioritizing the largest test file.
|
|
130
|
+
|
|
131
|
+
### `refactor/package-domain-boundaries`
|
|
132
|
+
|
|
133
|
+
Goal:
|
|
134
|
+
- Move the flat `codex_usage_tracker` package into responsibility folders.
|
|
135
|
+
- Move tests into matching responsibility folders.
|
|
136
|
+
- Preserve stable CLI, MCP launcher, and compatibility import behavior.
|
|
137
|
+
- Adopt Tach domain configs now that the installed Agent Maintainer/Tach stack supports them.
|
|
138
|
+
|
|
139
|
+
Completed:
|
|
140
|
+
- Installed Agent Maintainer from `douglasmonsky/agent-maintainer@main`, resolving locally to `0.1.0b4`.
|
|
141
|
+
- Relaxed the PyPI dev extra pin so the GitHub-installed tool is not downgraded by normal editable dev installs.
|
|
142
|
+
- Added `requirements/agent-maintainer-github.txt` for the local repo-source maintainer install path.
|
|
143
|
+
- Added per-domain packages and `tach.domain.toml` files for `core`, `pricing`, `parser`, `context`, `store`, `diagnostics`, `usage_drain`, `server`, `cli`, `dashboard`, and `reports`.
|
|
144
|
+
- Kept compatibility wrappers/facades for stable imports including `codex_usage_tracker.cli`, `codex_usage_tracker.store`, `codex_usage_tracker.server`, `codex_usage_tracker.mcp_server`, `codex_usage_tracker.plugin_installer`, `codex_usage_tracker.allowance`, and `codex_usage_tracker.support`.
|
|
145
|
+
- Split the moved context reader, server handler, and JSON contract modules enough to avoid new oversized-file failures for those specific moved files.
|
|
146
|
+
- Moved tests under matching domain folders and updated repo-root/helper imports.
|
|
147
|
+
|
|
148
|
+
Checks:
|
|
149
|
+
- `.venv/bin/python -m ruff check .`: passed.
|
|
150
|
+
- `.venv/bin/python -m mypy`: passed.
|
|
151
|
+
- `.venv/bin/python -m pytest -q`: passed, 534 tests.
|
|
152
|
+
- `.venv/bin/python -m pytest --cov=codex_usage_tracker --cov-report=term-missing -q`: passed, 534 tests, 86% total coverage.
|
|
153
|
+
- `.venv/bin/python -m compileall -q src tests`: passed.
|
|
154
|
+
- `.venv/bin/tach check`: passed.
|
|
155
|
+
- `.venv/bin/python scripts/check_release.py`: passed.
|
|
156
|
+
- `git diff --check`: passed.
|
|
157
|
+
|
|
158
|
+
Remaining risks / next handoff:
|
|
159
|
+
- Agent Maintainer `verify --profile fast` still flags several moved legacy modules and moved tests as new oversized files because their paths changed. This branch reduced three immediate moved-file violations but did not try to split every existing large module/test in the same commit.
|
|
160
|
+
- The next branch should continue splitting remaining large files, with highest-value candidates: `dashboard/api.py`, `store/api.py`, `usage_drain/reports.py`, `diagnostics/snapshots.py`, `cli/parser.py`, `cli/main.py`, and the largest dashboard/store tests.
|
|
161
|
+
- The parser/diagnostics/store Tach cycle is documented in `docs/architecture/decisions/0001-package-domain-boundaries.md` and should be reduced in a focused later branch.
|
|
162
|
+
|
|
70
163
|
### `chore/maintainability-agent-maintainer-baseline`
|
|
71
164
|
|
|
72
165
|
Goal:
|
|
@@ -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.13.0`: `python -c "import json, urllib.request; print(json.load(urllib.request.urlopen('https://pypi.org/pypi/codex-usage-tracking/json'))['info']['version'])"`.
|
|
28
|
+
- [x] Verify public venv install for `0.13.0`: `python -m venv /tmp/codex-usage-pypi-smoke && . /tmp/codex-usage-pypi-smoke/bin/activate && python -m pip install codex-usage-tracking==0.13.0 && codex-usage-tracker --version`.
|
|
29
|
+
- [x] Verify public pipx install path for `0.13.0`: `PIPX_HOME=/tmp/codex-usage-pipx-home PIPX_BIN_DIR=/tmp/codex-usage-pipx-bin pipx install codex-usage-tracking==0.13.0 && /tmp/codex-usage-pipx-bin/codex-usage-tracker --version`.
|
|
30
30
|
- [x] Verify installed package resources from a built wheel: `python scripts/smoke_installed_package.py`.
|
|
31
31
|
- [x] Verify installed package resources in Linux Docker: `python scripts/smoke_installed_package.py --docker`.
|
|
32
|
-
- [x] Verify public PyPI package in Docker: `python scripts/smoke_installed_package.py --docker --from-pypi --version 0.
|
|
32
|
+
- [x] Verify public PyPI package in Docker: `python scripts/smoke_installed_package.py --docker --from-pypi --version 0.13.0`.
|
|
33
33
|
- [x] Verify PyPI metadata names remain unchanged: `python scripts/check_release.py`.
|
|
34
34
|
- [x] Add Python 3.14 as an official support target after CI, package classifiers, docs, and installed-package smoke coverage were added. Docker smoke coverage uses `python:3.14-slim` by default. Track this in issue #12.
|
|
35
35
|
|
|
@@ -134,14 +134,14 @@ Not guaranteed:
|
|
|
134
134
|
|
|
135
135
|
## Evidence References
|
|
136
136
|
|
|
137
|
-
These references are the concrete proof behind completed checklist items. Public package smoke commands are version-specific to `0.
|
|
137
|
+
These references are the concrete proof behind completed checklist items. Public package smoke commands are version-specific to `0.13.0`; all repo tests use synthetic or aggregate-only data.
|
|
138
138
|
|
|
139
139
|
### Public Install And Package Metadata
|
|
140
140
|
|
|
141
141
|
- Public PyPI version, public venv install, and public pipx install are proven by the exact public-install commands in section 1.
|
|
142
142
|
- Built-wheel and installed-resource coverage is proven by `scripts/smoke_installed_package.py` and `tests/test_cli_release.py::test_installed_package_smoke_checks_help_for_stable_commands`.
|
|
143
143
|
- Linux package-resource coverage is proven by `scripts/smoke_installed_package.py --docker`.
|
|
144
|
-
- Public PyPI Docker coverage is proven by `scripts/smoke_installed_package.py --docker --from-pypi --version 0.
|
|
144
|
+
- Public PyPI Docker coverage is proven by `scripts/smoke_installed_package.py --docker --from-pypi --version 0.13.0`.
|
|
145
145
|
- PyPI metadata, package/distribution names, package resources, source/wheel member names, Python 3.10-3.14 support metadata, CI workflow requirements, publish workflow safety text, and tracked secret patterns are proven by `scripts/check_release.py`, `scripts/check_release.py --dist`, and `tests/test_cli_release.py::test_release_check_script_passes`.
|
|
146
146
|
|
|
147
147
|
### Upgrade And Migration
|
|
@@ -219,8 +219,8 @@ These references are the concrete proof behind completed checklist items. Public
|
|
|
219
219
|
- Publish workflow package name, Trusted Publishing, TestPyPI/PyPI job presence, event guards, no push/PR publishing, no token/password publishing, and manual PyPI main/tag preflight are proven by `scripts/check_release.py::_check_publish_workflow`.
|
|
220
220
|
- The GitHub `pypi` environment gate is proven by `gh api repos/douglasmonsky/codex-usage-tracker/environments/pypi`, which reports a `required_reviewers` protection rule and `can_admins_bypass=false`.
|
|
221
221
|
- Dist filename and wheel/sdist member checks are proven by `python -m build`, `python -m twine check dist/*`, and `python scripts/check_release.py --dist`.
|
|
222
|
-
- TestPyPI publish process is proven by a workflow-dispatch run on `main`, followed by TestPyPI metadata and clean virtualenv install checks for `codex-usage-tracking==0.
|
|
223
|
-
- PyPI publish process is proven by a workflow-dispatch run on `main`, protected `pypi` environment approval, PyPI metadata visibility, clean virtualenv install, temporary pipx install, and Docker public-package smoke for `codex-usage-tracking==0.
|
|
222
|
+
- TestPyPI publish process is proven by a workflow-dispatch run on `main`, followed by TestPyPI metadata and clean virtualenv install checks for `codex-usage-tracking==0.13.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.13.0`.
|
|
224
224
|
- Release recovery documentation is proven by `scripts/check_release.py` required-file and docs checks.
|
|
225
225
|
|
|
226
226
|
### Known Limitations
|
|
@@ -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.13.0"
|
|
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"
|
|
@@ -42,7 +42,7 @@ Changelog = "https://github.com/douglasmonsky/codex-usage-tracker/blob/main/CHAN
|
|
|
42
42
|
|
|
43
43
|
[project.optional-dependencies]
|
|
44
44
|
dev = [
|
|
45
|
-
"agent-maintainer[core]
|
|
45
|
+
"agent-maintainer[core]>=0.1.0b1; python_version >= '3.11'",
|
|
46
46
|
"actionlint-py>=1.7.12.24; python_version >= '3.11'",
|
|
47
47
|
"build>=1.2",
|
|
48
48
|
"git-agent-ratchet>=1.3.0; python_version >= '3.11'",
|
|
@@ -148,12 +148,12 @@ log_dir = ".verify-logs"
|
|
|
148
148
|
python_version = "3.10"
|
|
149
149
|
warn_unused_configs = true
|
|
150
150
|
files = [
|
|
151
|
-
"src/codex_usage_tracker/json_contracts.py",
|
|
152
|
-
"src/codex_usage_tracker/models.py",
|
|
153
|
-
"src/codex_usage_tracker/recommendations.py",
|
|
154
|
-
"src/codex_usage_tracker/reports.py",
|
|
155
|
-
"src/codex_usage_tracker/schema.py",
|
|
156
|
-
"src/codex_usage_tracker/store.py",
|
|
157
|
-
"src/codex_usage_tracker/
|
|
158
|
-
"src/codex_usage_tracker/
|
|
151
|
+
"src/codex_usage_tracker/core/json_contracts.py",
|
|
152
|
+
"src/codex_usage_tracker/core/models.py",
|
|
153
|
+
"src/codex_usage_tracker/reports/recommendations.py",
|
|
154
|
+
"src/codex_usage_tracker/reports/api.py",
|
|
155
|
+
"src/codex_usage_tracker/core/schema.py",
|
|
156
|
+
"src/codex_usage_tracker/store/api.py",
|
|
157
|
+
"src/codex_usage_tracker/usage_drain/reports.py",
|
|
158
|
+
"src/codex_usage_tracker/usage_drain/time_series.py",
|
|
159
159
|
]
|