codex-usage-tracking 0.3.0__tar.gz → 0.3.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/.codex-plugin/plugin.json +1 -1
- {codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/CHANGELOG.md +6 -0
- {codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/PKG-INFO +6 -5
- {codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/README.md +5 -4
- {codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/docs/development.md +12 -5
- {codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/docs/install.md +4 -4
- {codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/docs/mcp.md +3 -1
- {codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/pyproject.toml +1 -1
- {codex_usage_tracking-0.3.0/src/codex_usage_tracker/plugin_data → codex_usage_tracking-0.3.1}/skills/codex-usage-api/SKILL.md +1 -1
- {codex_usage_tracking-0.3.0/src/codex_usage_tracker/plugin_data → codex_usage_tracking-0.3.1}/skills/codex-usage-tracker/SKILL.md +3 -3
- {codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/skills/codex-usage-tracker/scripts/run_mcp.py +2 -2
- {codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/src/codex_usage_tracker/__init__.py +1 -1
- {codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1/src/codex_usage_tracker/plugin_data}/skills/codex-usage-api/SKILL.md +1 -1
- {codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1/src/codex_usage_tracker/plugin_data}/skills/codex-usage-tracker/SKILL.md +3 -3
- {codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/src/codex_usage_tracking.egg-info/PKG-INFO +6 -5
- {codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/tests/test_cli_release.py +33 -1
- {codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/tests/test_plugin_installer.py +1 -1
- {codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/.mcp.json +0 -0
- {codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/AGENTS.md +0 -0
- {codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/CONTRIBUTING.md +0 -0
- {codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/LICENSE +0 -0
- {codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/MANIFEST.in +0 -0
- {codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/SECURITY.md +0 -0
- {codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/assets/icon.svg +0 -0
- {codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/docs/architecture.md +0 -0
- {codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/docs/assets/dashboard-calls-preview.png +0 -0
- {codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/docs/assets/dashboard-calls.png +0 -0
- {codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/docs/assets/dashboard-details.png +0 -0
- {codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/docs/assets/dashboard-insights.png +0 -0
- {codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/docs/assets/dashboard-threads.png +0 -0
- {codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/docs/assets/plugin-prompts.png +0 -0
- {codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/docs/assets/plugin-thread-leaderboard.png +0 -0
- {codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/docs/assets/ux/call-detail-panel.png +0 -0
- {codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/docs/assets/ux/insight-overview.png +0 -0
- {codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/docs/assets/ux/thread-investigation.png +0 -0
- {codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/docs/cli-json-schemas.md +0 -0
- {codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/docs/cli-reference.md +0 -0
- {codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/docs/dashboard-guide.md +0 -0
- {codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/docs/pricing-and-credits.md +0 -0
- {codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/docs/privacy.md +0 -0
- {codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/docs/ui-ux-improvement-plan.md +0 -0
- {codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/scripts/benchmark_synthetic_history.py +0 -0
- {codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/scripts/check_release.py +0 -0
- {codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/scripts/install_local_plugin.py +0 -0
- {codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/setup.cfg +0 -0
- {codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/src/codex_usage_tracker/__main__.py +0 -0
- {codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/src/codex_usage_tracker/allowance.py +0 -0
- {codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/src/codex_usage_tracker/api_payloads.py +0 -0
- {codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/src/codex_usage_tracker/cli.py +0 -0
- {codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/src/codex_usage_tracker/context.py +0 -0
- {codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/src/codex_usage_tracker/costing.py +0 -0
- {codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/src/codex_usage_tracker/dashboard.py +0 -0
- {codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/src/codex_usage_tracker/diagnostics.py +0 -0
- {codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/src/codex_usage_tracker/formatting.py +0 -0
- {codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/src/codex_usage_tracker/json_contracts.py +0 -0
- {codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/src/codex_usage_tracker/mcp_server.py +0 -0
- {codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/src/codex_usage_tracker/models.py +0 -0
- {codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/src/codex_usage_tracker/parser.py +0 -0
- {codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/src/codex_usage_tracker/paths.py +0 -0
- {codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/src/codex_usage_tracker/plugin_data/__init__.py +0 -0
- {codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/src/codex_usage_tracker/plugin_data/assets/icon.svg +0 -0
- {codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/src/codex_usage_tracker/plugin_data/dashboard/dashboard.css +0 -0
- {codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/src/codex_usage_tracker/plugin_data/dashboard/dashboard.js +0 -0
- {codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_data.js +0 -0
- {codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_format.js +0 -0
- {codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_state.js +0 -0
- {codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/src/codex_usage_tracker/plugin_data/dashboard/dashboard_template.html +0 -0
- {codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/src/codex_usage_tracker/plugin_data/docs/assets/dashboard-calls.png +0 -0
- {codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/src/codex_usage_tracker/plugin_data/docs/assets/dashboard-details.png +0 -0
- {codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/src/codex_usage_tracker/plugin_data/docs/assets/dashboard-insights.png +0 -0
- {codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/src/codex_usage_tracker/plugin_data/docs/assets/dashboard-threads.png +0 -0
- {codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/src/codex_usage_tracker/plugin_data/docs/dashboard-guide.html +0 -0
- {codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/src/codex_usage_tracker/plugin_data/rate_cards/codex-credit-rates.json +0 -0
- {codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/src/codex_usage_tracker/plugin_installer.py +0 -0
- {codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/src/codex_usage_tracker/pricing.py +0 -0
- {codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/src/codex_usage_tracker/pricing_config.py +0 -0
- {codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/src/codex_usage_tracker/pricing_estimates.py +0 -0
- {codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/src/codex_usage_tracker/pricing_openai.py +0 -0
- {codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/src/codex_usage_tracker/projects.py +0 -0
- {codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/src/codex_usage_tracker/recommendations.py +0 -0
- {codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/src/codex_usage_tracker/reports.py +0 -0
- {codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/src/codex_usage_tracker/schema.py +0 -0
- {codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/src/codex_usage_tracker/server.py +0 -0
- {codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/src/codex_usage_tracker/store.py +0 -0
- {codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/src/codex_usage_tracker/support.py +0 -0
- {codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/src/codex_usage_tracker/threads.py +0 -0
- {codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/src/codex_usage_tracking.egg-info/SOURCES.txt +0 -0
- {codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/src/codex_usage_tracking.egg-info/dependency_links.txt +0 -0
- {codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/src/codex_usage_tracking.egg-info/entry_points.txt +0 -0
- {codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/src/codex_usage_tracking.egg-info/requires.txt +0 -0
- {codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/src/codex_usage_tracking.egg-info/top_level.txt +0 -0
- {codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/tests/test_allowance.py +0 -0
- {codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/tests/test_cli_lifecycle.py +0 -0
- {codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/tests/test_json_contracts.py +0 -0
- {codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/tests/test_mcp_launcher.py +0 -0
- {codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/tests/test_parser.py +0 -0
- {codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/tests/test_pricing.py +0 -0
- {codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/tests/test_projects.py +0 -0
- {codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/tests/test_recommendations.py +0 -0
- {codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/tests/test_schema.py +0 -0
- {codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/tests/test_store_dashboard_mcp.py +0 -0
- {codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/tests/test_threads.py +0 -0
|
@@ -2,6 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
## Unreleased
|
|
4
4
|
|
|
5
|
+
## 0.3.1 - 2026-06-08
|
|
6
|
+
|
|
7
|
+
- Fix packaged Codex Usage Tracker skills so dashboard-open requests start the live localhost dashboard instead of a static snapshot.
|
|
8
|
+
- Mirror live-dashboard skill guidance between source-tree skills and packaged plugin-data copies so release and wheel checks stay green.
|
|
9
|
+
- Use the valid explicit context API flag form, `serve-dashboard --refresh --context-api explicit --open`, for live dashboard launches.
|
|
10
|
+
|
|
5
11
|
## 0.3.0 - 2026-06-08
|
|
6
12
|
|
|
7
13
|
0.3.0 is a stabilization and public-preview release for the dashboard, CLI, MCP tools, local privacy model, packaged Codex plugin, and companion usage skills. The PyPI/TestPyPI distribution name is now `codex-usage-tracking`; the GitHub repository remains `douglasmonsky/codex-usage-tracker`, the Python import package remains `codex_usage_tracker`, and the installed CLI command remains `codex-usage-tracker`.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: codex-usage-tracking
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.1
|
|
4
4
|
Summary: Unofficial local Codex plugin and dashboard for investigating aggregate token usage, costs, caching, and thread patterns.
|
|
5
5
|
Author: Douglas Monsky
|
|
6
6
|
License-Expression: MIT
|
|
@@ -44,6 +44,7 @@ Dynamic: license-file
|
|
|
44
44
|
Local-first dashboard, Codex plugin, and companion skill for understanding where your Codex tokens and usage credits are going.
|
|
45
45
|
|
|
46
46
|
[](https://github.com/douglasmonsky/codex-usage-tracker/actions/workflows/ci.yml)
|
|
47
|
+
[](https://pypi.org/project/codex-usage-tracking/)
|
|
47
48
|

|
|
48
49
|
[](LICENSE)
|
|
49
50
|
|
|
@@ -51,7 +52,7 @@ Local-first dashboard, Codex plugin, and companion skill for understanding where
|
|
|
51
52
|
|
|
52
53
|
Codex Usage Tracker reads the JSONL logs already written by Codex, indexes aggregate usage counters into SQLite, and gives you a dashboard, CLI, and MCP tools for investigating real usage patterns. It keeps prompts, assistant messages, tool output, pasted secrets, and raw transcript content out of SQLite, CSV exports, and generated dashboard HTML.
|
|
53
54
|
|
|
54
|
-
Built for developers using Codex locally who want to know which threads, models, subagents, and long chats are driving usage without uploading logs anywhere.
|
|
55
|
+
Built for developers using Codex locally who want to know which threads, models, subagents, and long chats are driving usage without uploading logs anywhere. The public PyPI package is [`codex-usage-tracking`](https://pypi.org/project/codex-usage-tracking/), and it installs the `codex-usage-tracker` command.
|
|
55
56
|
|
|
56
57
|
After install, you get a localhost dashboard, a local SQLite aggregate index, CLI reports, MCP tools, and a companion Codex skill for asking questions like "what drove my usage this week?"
|
|
57
58
|
|
|
@@ -69,7 +70,7 @@ Use your normal Python launcher for your platform: `python3` is common on macOS/
|
|
|
69
70
|
|
|
70
71
|
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.
|
|
71
72
|
|
|
72
|
-
|
|
73
|
+
Source install for development or branch testing:
|
|
73
74
|
|
|
74
75
|
```bash
|
|
75
76
|
pipx install "git+https://github.com/douglasmonsky/codex-usage-tracker.git"
|
|
@@ -77,7 +78,7 @@ pipx install "git+https://github.com/douglasmonsky/codex-usage-tracker.git"
|
|
|
77
78
|
|
|
78
79
|
`setup` installs or refreshes the local Codex plugin wrapper, initializes local config templates when needed, refreshes the aggregate index, runs `codex-usage-tracker doctor`, and tells you whether Codex needs a restart for plugin discovery.
|
|
79
80
|
|
|
80
|
-
Want Codex to do it for you? Paste: `Install codex-usage-tracking with pipx, run codex-usage-tracker setup, and open the Codex Usage Tracker dashboard
|
|
81
|
+
Want Codex to do it for you? Paste: `Install codex-usage-tracking with pipx, run codex-usage-tracker setup, and open the Codex Usage Tracker dashboard.`
|
|
81
82
|
|
|
82
83
|
After plugin discovery, Codex can use the companion usage skill to refresh local aggregates, call the MCP tools, and explain usage patterns conversationally. Examples: [MCP And Codex Skills](docs/mcp.md).
|
|
83
84
|
|
|
@@ -237,7 +238,7 @@ Open a Codex session on your machine and paste this:
|
|
|
237
238
|
|
|
238
239
|
```text
|
|
239
240
|
Install and configure Codex Usage Tracker.
|
|
240
|
-
Install the PyPI distribution codex-usage-tracking with pipx. The installed command should be codex-usage-tracker.
|
|
241
|
+
Install the PyPI distribution codex-usage-tracking with pipx. The installed command should be codex-usage-tracker. Use pipx install "git+https://github.com/douglasmonsky/codex-usage-tracker.git" only for branch testing or if PyPI is temporarily unavailable.
|
|
241
242
|
If pipx is missing, install it with the platform's Python launcher or use a local virtual environment.
|
|
242
243
|
After installation, run codex-usage-tracker setup and serve-dashboard --open.
|
|
243
244
|
Verify the dashboard opens locally and tell me the dashboard URL plus whether I need to restart Codex for plugin discovery.
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
Local-first dashboard, Codex plugin, and companion skill for understanding where your Codex tokens and usage credits are going.
|
|
9
9
|
|
|
10
10
|
[](https://github.com/douglasmonsky/codex-usage-tracker/actions/workflows/ci.yml)
|
|
11
|
+
[](https://pypi.org/project/codex-usage-tracking/)
|
|
11
12
|

|
|
12
13
|
[](LICENSE)
|
|
13
14
|
|
|
@@ -15,7 +16,7 @@ Local-first dashboard, Codex plugin, and companion skill for understanding where
|
|
|
15
16
|
|
|
16
17
|
Codex Usage Tracker reads the JSONL logs already written by Codex, indexes aggregate usage counters into SQLite, and gives you a dashboard, CLI, and MCP tools for investigating real usage patterns. It keeps prompts, assistant messages, tool output, pasted secrets, and raw transcript content out of SQLite, CSV exports, and generated dashboard HTML.
|
|
17
18
|
|
|
18
|
-
Built for developers using Codex locally who want to know which threads, models, subagents, and long chats are driving usage without uploading logs anywhere.
|
|
19
|
+
Built for developers using Codex locally who want to know which threads, models, subagents, and long chats are driving usage without uploading logs anywhere. The public PyPI package is [`codex-usage-tracking`](https://pypi.org/project/codex-usage-tracking/), and it installs the `codex-usage-tracker` command.
|
|
19
20
|
|
|
20
21
|
After install, you get a localhost dashboard, a local SQLite aggregate index, CLI reports, MCP tools, and a companion Codex skill for asking questions like "what drove my usage this week?"
|
|
21
22
|
|
|
@@ -33,7 +34,7 @@ Use your normal Python launcher for your platform: `python3` is common on macOS/
|
|
|
33
34
|
|
|
34
35
|
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.
|
|
35
36
|
|
|
36
|
-
|
|
37
|
+
Source install for development or branch testing:
|
|
37
38
|
|
|
38
39
|
```bash
|
|
39
40
|
pipx install "git+https://github.com/douglasmonsky/codex-usage-tracker.git"
|
|
@@ -41,7 +42,7 @@ pipx install "git+https://github.com/douglasmonsky/codex-usage-tracker.git"
|
|
|
41
42
|
|
|
42
43
|
`setup` installs or refreshes the local Codex plugin wrapper, initializes local config templates when needed, refreshes the aggregate index, runs `codex-usage-tracker doctor`, and tells you whether Codex needs a restart for plugin discovery.
|
|
43
44
|
|
|
44
|
-
Want Codex to do it for you? Paste: `Install codex-usage-tracking with pipx, run codex-usage-tracker setup, and open the Codex Usage Tracker dashboard
|
|
45
|
+
Want Codex to do it for you? Paste: `Install codex-usage-tracking with pipx, run codex-usage-tracker setup, and open the Codex Usage Tracker dashboard.`
|
|
45
46
|
|
|
46
47
|
After plugin discovery, Codex can use the companion usage skill to refresh local aggregates, call the MCP tools, and explain usage patterns conversationally. Examples: [MCP And Codex Skills](docs/mcp.md).
|
|
47
48
|
|
|
@@ -201,7 +202,7 @@ Open a Codex session on your machine and paste this:
|
|
|
201
202
|
|
|
202
203
|
```text
|
|
203
204
|
Install and configure Codex Usage Tracker.
|
|
204
|
-
Install the PyPI distribution codex-usage-tracking with pipx. The installed command should be codex-usage-tracker.
|
|
205
|
+
Install the PyPI distribution codex-usage-tracking with pipx. The installed command should be codex-usage-tracker. Use pipx install "git+https://github.com/douglasmonsky/codex-usage-tracker.git" only for branch testing or if PyPI is temporarily unavailable.
|
|
205
206
|
If pipx is missing, install it with the platform's Python launcher or use a local virtual environment.
|
|
206
207
|
After installation, run codex-usage-tracker setup and serve-dashboard --open.
|
|
207
208
|
Verify the dashboard opens locally and tell me the dashboard URL plus whether I need to restart Codex for plugin discovery.
|
|
@@ -12,7 +12,7 @@ python -m pip install ".[dev]" twine
|
|
|
12
12
|
codex-usage-tracker install-plugin --python .venv/bin/python
|
|
13
13
|
```
|
|
14
14
|
|
|
15
|
-
The public PyPI distribution is `codex-usage-tracking
|
|
15
|
+
The public PyPI distribution is [`codex-usage-tracking`](https://pypi.org/project/codex-usage-tracking/); it installs the `codex-usage-tracker` command. The repository and import package remain `douglasmonsky/codex-usage-tracker` and `codex_usage_tracker`.
|
|
16
16
|
|
|
17
17
|
## Repo Layout
|
|
18
18
|
|
|
@@ -119,15 +119,22 @@ The release checker verifies version alignment, required public docs, packaged p
|
|
|
119
119
|
|
|
120
120
|
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.
|
|
121
121
|
|
|
122
|
-
|
|
122
|
+
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:
|
|
123
|
+
|
|
124
|
+
- GitHub Release: `https://github.com/douglasmonsky/codex-usage-tracker/releases/tag/v0.3.0`
|
|
125
|
+
- GitHub Release: `https://github.com/douglasmonsky/codex-usage-tracker/releases/tag/v0.3.1`
|
|
126
|
+
- PyPI: `https://pypi.org/project/codex-usage-tracking/`
|
|
127
|
+
- TestPyPI: `https://test.pypi.org/project/codex-usage-tracking/`
|
|
128
|
+
|
|
129
|
+
Before publishing a future release, confirm Trusted Publishers are still configured in both services with project name `codex-usage-tracking`, owner `douglasmonsky`, repository `codex-usage-tracker`, workflow filename `publish.yml`, and the matching environment name:
|
|
123
130
|
|
|
124
131
|
- TestPyPI environment: `testpypi`
|
|
125
132
|
- PyPI environment: `pypi`
|
|
126
133
|
|
|
127
|
-
TestPyPI and PyPI are separate services/accounts. Configure both before publishing to both.
|
|
134
|
+
TestPyPI and PyPI are separate services/accounts. Configure both before publishing to both, and keep the `pypi` GitHub environment behind manual approval.
|
|
128
135
|
|
|
129
136
|
To publish to TestPyPI, run the `Publish Python package` workflow manually with `target` set to `testpypi`. The job builds once, checks the artifacts with `twine`, uploads them as workflow artifacts, then publishes the same artifacts to `https://test.pypi.org/project/codex-usage-tracking/`.
|
|
130
137
|
|
|
131
|
-
To publish to PyPI, either publish a GitHub Release for the tag or manually run the workflow with `target` set to `pypi`.
|
|
138
|
+
To publish to PyPI, either publish a GitHub Release for the tag or manually run the workflow with `target` set to `pypi`. The final project URL is `https://pypi.org/project/codex-usage-tracking/`.
|
|
132
139
|
|
|
133
|
-
PyPI and TestPyPI filenames and versions cannot be reused after upload. If a bad
|
|
140
|
+
PyPI and TestPyPI filenames and versions cannot be reused after upload. If a bad artifact is uploaded, cut the next patch version instead of trying to replace it.
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
## Recommended Install
|
|
4
4
|
|
|
5
|
-
Use `pipx` so the tracker is installed as a command-line app without mixing dependencies into another project.
|
|
5
|
+
Use `pipx` so the tracker is installed from PyPI as a command-line app without mixing dependencies into another project.
|
|
6
6
|
|
|
7
7
|
```bash
|
|
8
8
|
python -m pip install --user pipx
|
|
@@ -20,7 +20,7 @@ Use the Python launcher that is normal for your platform:
|
|
|
20
20
|
|
|
21
21
|
If `codex-usage-tracker` is not found immediately after `ensurepath`, open a new terminal or add the printed pipx binary directory to `PATH`.
|
|
22
22
|
|
|
23
|
-
Package naming: the PyPI distribution is `codex-usage-tracking
|
|
23
|
+
Package naming: the public PyPI distribution is [`codex-usage-tracking`](https://pypi.org/project/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.
|
|
24
24
|
|
|
25
25
|
`setup` installs or refreshes the package-owned plugin wrapper, including MCP tools and companion Codex skills, initializes local config templates when needed, refreshes the aggregate index, runs `doctor`, prints a success/failure summary, and tells you whether Codex needs a restart for plugin discovery.
|
|
26
26
|
|
|
@@ -41,7 +41,7 @@ pipx upgrade codex-usage-tracking
|
|
|
41
41
|
codex-usage-tracker setup
|
|
42
42
|
```
|
|
43
43
|
|
|
44
|
-
For development or
|
|
44
|
+
For source installs used during development or branch testing, rerun the GitHub install with `--force`:
|
|
45
45
|
|
|
46
46
|
```bash
|
|
47
47
|
pipx install --force "git+https://github.com/douglasmonsky/codex-usage-tracker.git"
|
|
@@ -54,7 +54,7 @@ Open a Codex session on your machine and paste:
|
|
|
54
54
|
|
|
55
55
|
```text
|
|
56
56
|
Install and configure Codex Usage Tracker.
|
|
57
|
-
Install the PyPI distribution codex-usage-tracking with pipx. The installed command should be codex-usage-tracker.
|
|
57
|
+
Install the PyPI distribution codex-usage-tracking with pipx. The installed command should be codex-usage-tracker. Use pipx install "git+https://github.com/douglasmonsky/codex-usage-tracker.git" only for branch testing or if PyPI is temporarily unavailable.
|
|
58
58
|
If pipx is missing, install it with the platform's Python launcher or use a local virtual environment.
|
|
59
59
|
After installation, run codex-usage-tracker setup and serve-dashboard --open.
|
|
60
60
|
Verify the dashboard opens locally and tell me the dashboard URL plus whether I need to restart Codex for plugin discovery.
|
|
@@ -18,7 +18,9 @@ codex-usage-tracker install-plugin --python .venv/bin/python
|
|
|
18
18
|
|
|
19
19
|
Restart Codex after registration so it can discover the plugin.
|
|
20
20
|
|
|
21
|
-
Marketplace installs use the bundled MCP launcher at `skills/codex-usage-tracker/scripts/run_mcp.py`. On first MCP startup it creates a cached runtime under `~/.cache/codex-usage-tracker/mcp-runtime/` and installs the Python package from GitHub, so it does not require a `.venv` inside the plugin directory.
|
|
21
|
+
Marketplace installs use the bundled MCP launcher at `skills/codex-usage-tracker/scripts/run_mcp.py`. On first MCP startup it creates a cached runtime under `~/.cache/codex-usage-tracker/mcp-runtime/` and installs the Python package from a pinned GitHub source commit, so it does not require a `.venv` inside the plugin directory.
|
|
22
|
+
|
|
23
|
+
This is intentional: normal user installs come from the PyPI distribution `codex-usage-tracking`, while the plugin bootstrapper pins a reviewed repository commit so MCP startup does not accidentally track `main`.
|
|
22
24
|
|
|
23
25
|
The launcher stores the GitHub package spec used for that runtime and reinstalls when the bundled package pin changes. Set `CODEX_USAGE_TRACKER_PACKAGE_SPEC` to test a different Git ref or `CODEX_USAGE_TRACKER_RUNTIME_DIR` to use a separate cache while debugging plugin startup.
|
|
24
26
|
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "codex-usage-tracking"
|
|
7
|
-
version = "0.3.
|
|
7
|
+
version = "0.3.1"
|
|
8
8
|
description = "Unofficial local Codex plugin and dashboard for investigating aggregate token usage, costs, caching, and thread patterns."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.10"
|
|
@@ -17,7 +17,7 @@ The only exception is `usage_call_context`, which reads one selected record's lo
|
|
|
17
17
|
|
|
18
18
|
## First Steps
|
|
19
19
|
|
|
20
|
-
1. For "Open dashboard" or similar dashboard-open requests, do not inspect repository files, plugin manifests, tool registries, git status, or local logs first.
|
|
20
|
+
1. For "Open dashboard" or similar dashboard-open requests, do not inspect repository files, plugin manifests, tool registries, git status, or local logs first. Start the live localhost dashboard with `codex-usage-tracker serve-dashboard --refresh --context-api explicit --open` so Refresh and Live can use the local API, then report the localhost URL or a brief failure. Use `codex-usage-tracker open-dashboard --refresh` only for explicit static/offline snapshots or when the environment cannot keep a long-running server process alive; if you fall back, say the dashboard is static and Live requires `serve-dashboard`.
|
|
21
21
|
2. For "Heaviest thread?", "Thread leaderboard", or similar thread-ranking requests, do not inspect repository files, SQLite schemas, plugin manifests, process lists, dashboard servers, or local logs manually. Refresh the aggregate index, then call `usage_summary(group_by="thread", limit=10, response_format="json")`. If MCP tools are unavailable, run `codex-usage-tracker refresh --json` and `codex-usage-tracker summary --group-by thread --limit 10 --json`.
|
|
22
22
|
3. For normal usage questions, do not inspect repository files, plugin manifests, or local logs first. Start with the aggregate MCP tools. If MCP tools are unavailable, use the CLI JSON fallback below.
|
|
23
23
|
4. Refresh before analysis with `refresh_usage_index` unless the user asks for a static historical snapshot. Keep archived sessions excluded unless the user explicitly asks for all history.
|
|
@@ -17,14 +17,14 @@ The only exception is `usage_call_context`, which intentionally reads one select
|
|
|
17
17
|
|
|
18
18
|
## Fast Paths
|
|
19
19
|
|
|
20
|
-
- For "Open dashboard" or similar dashboard-open requests, do not inspect repository files, plugin manifests, tool registries, git status, or local logs first.
|
|
20
|
+
- For "Open dashboard" or similar dashboard-open requests, do not inspect repository files, plugin manifests, tool registries, git status, or local logs first. Start the live localhost dashboard with `codex-usage-tracker serve-dashboard --refresh --context-api explicit --open` so Refresh, Live, load-limit, and history-scope controls can call the local API. Keep the server running while the user is using the dashboard. Use `codex-usage-tracker open-dashboard --refresh` only when the user explicitly asks for a static/offline snapshot or when the current environment cannot keep a server process running, and say that the result is static and Live requires `serve-dashboard`.
|
|
21
21
|
- For "Heaviest thread?", "Thread leaderboard", or similar thread-ranking requests, do not inspect repository files, SQLite schemas, plugin manifests, process lists, dashboard servers, or local logs manually. Use the tracker API: refresh the aggregate index, then rank threads with `usage_summary(group_by="thread", limit=10, response_format="json")`.
|
|
22
22
|
- If MCP tools are unavailable for thread-ranking requests, run `codex-usage-tracker refresh --json` and `codex-usage-tracker summary --group-by thread --limit 10 --json`. The summary is already ordered by `total_tokens` descending.
|
|
23
23
|
- Answer thread-ranking requests directly from the summary rows. For the heaviest-thread question, lead with the first row's thread and total tokens; for leaderboard requests, show a compact ranked list.
|
|
24
|
-
- If the CLI command is missing for open
|
|
24
|
+
- If the CLI command is missing for dashboard-open requests and you are already inside the source checkout, use `PYTHONPATH=src .venv/bin/python -m codex_usage_tracker.cli serve-dashboard --refresh --context-api explicit --open`. Use the source-checkout `open-dashboard --refresh` fallback only for static/offline snapshots or when a long-running server cannot be kept alive.
|
|
25
25
|
- If the CLI command is missing for thread-ranking requests and you are already inside the source checkout, use `PYTHONPATH=src .venv/bin/python -m codex_usage_tracker.cli refresh --json` and `PYTHONPATH=src .venv/bin/python -m codex_usage_tracker.cli summary --group-by thread --limit 10 --json`.
|
|
26
26
|
- If neither command is available, say briefly that the tracker CLI is not on `PATH` and ask the user to run `codex-usage-tracker setup` or reinstall with `pipx`.
|
|
27
|
-
- Keep open
|
|
27
|
+
- Keep dashboard-open narration minimal: one short progress note if needed, then the localhost URL, or if falling back to a static file, the file path plus a note that Live requires `serve-dashboard`. Do not narrate plugin discovery.
|
|
28
28
|
|
|
29
29
|
## Common Workflows
|
|
30
30
|
|
|
@@ -15,9 +15,9 @@ from pathlib import Path
|
|
|
15
15
|
|
|
16
16
|
PACKAGE_SPEC = os.environ.get(
|
|
17
17
|
"CODEX_USAGE_TRACKER_PACKAGE_SPEC",
|
|
18
|
-
"git+https://github.com/douglasmonsky/codex-usage-tracker.git@
|
|
18
|
+
"git+https://github.com/douglasmonsky/codex-usage-tracker.git@97cd456bffaf41cbb14cd8afffcf6f37ad8a242d",
|
|
19
19
|
)
|
|
20
|
-
RUNTIME_VERSION = "0.3.
|
|
20
|
+
RUNTIME_VERSION = "0.3.1"
|
|
21
21
|
PACKAGE_SPEC_MARKER = ".codex-usage-tracker-package-spec"
|
|
22
22
|
MODULE_CHECK = (
|
|
23
23
|
"import importlib.metadata; "
|
|
@@ -17,7 +17,7 @@ The only exception is `usage_call_context`, which reads one selected record's lo
|
|
|
17
17
|
|
|
18
18
|
## First Steps
|
|
19
19
|
|
|
20
|
-
1. For "Open dashboard" or similar dashboard-open requests, do not inspect repository files, plugin manifests, tool registries, git status, or local logs first.
|
|
20
|
+
1. For "Open dashboard" or similar dashboard-open requests, do not inspect repository files, plugin manifests, tool registries, git status, or local logs first. Start the live localhost dashboard with `codex-usage-tracker serve-dashboard --refresh --context-api explicit --open` so Refresh and Live can use the local API, then report the localhost URL or a brief failure. Use `codex-usage-tracker open-dashboard --refresh` only for explicit static/offline snapshots or when the environment cannot keep a long-running server process alive; if you fall back, say the dashboard is static and Live requires `serve-dashboard`.
|
|
21
21
|
2. For "Heaviest thread?", "Thread leaderboard", or similar thread-ranking requests, do not inspect repository files, SQLite schemas, plugin manifests, process lists, dashboard servers, or local logs manually. Refresh the aggregate index, then call `usage_summary(group_by="thread", limit=10, response_format="json")`. If MCP tools are unavailable, run `codex-usage-tracker refresh --json` and `codex-usage-tracker summary --group-by thread --limit 10 --json`.
|
|
22
22
|
3. For normal usage questions, do not inspect repository files, plugin manifests, or local logs first. Start with the aggregate MCP tools. If MCP tools are unavailable, use the CLI JSON fallback below.
|
|
23
23
|
4. Refresh before analysis with `refresh_usage_index` unless the user asks for a static historical snapshot. Keep archived sessions excluded unless the user explicitly asks for all history.
|
|
@@ -17,14 +17,14 @@ The only exception is `usage_call_context`, which intentionally reads one select
|
|
|
17
17
|
|
|
18
18
|
## Fast Paths
|
|
19
19
|
|
|
20
|
-
- For "Open dashboard" or similar dashboard-open requests, do not inspect repository files, plugin manifests, tool registries, git status, or local logs first.
|
|
20
|
+
- For "Open dashboard" or similar dashboard-open requests, do not inspect repository files, plugin manifests, tool registries, git status, or local logs first. Start the live localhost dashboard with `codex-usage-tracker serve-dashboard --refresh --context-api explicit --open` so Refresh, Live, load-limit, and history-scope controls can call the local API. Keep the server running while the user is using the dashboard. Use `codex-usage-tracker open-dashboard --refresh` only when the user explicitly asks for a static/offline snapshot or when the current environment cannot keep a server process running, and say that the result is static and Live requires `serve-dashboard`.
|
|
21
21
|
- For "Heaviest thread?", "Thread leaderboard", or similar thread-ranking requests, do not inspect repository files, SQLite schemas, plugin manifests, process lists, dashboard servers, or local logs manually. Use the tracker API: refresh the aggregate index, then rank threads with `usage_summary(group_by="thread", limit=10, response_format="json")`.
|
|
22
22
|
- If MCP tools are unavailable for thread-ranking requests, run `codex-usage-tracker refresh --json` and `codex-usage-tracker summary --group-by thread --limit 10 --json`. The summary is already ordered by `total_tokens` descending.
|
|
23
23
|
- Answer thread-ranking requests directly from the summary rows. For the heaviest-thread question, lead with the first row's thread and total tokens; for leaderboard requests, show a compact ranked list.
|
|
24
|
-
- If the CLI command is missing for open
|
|
24
|
+
- If the CLI command is missing for dashboard-open requests and you are already inside the source checkout, use `PYTHONPATH=src .venv/bin/python -m codex_usage_tracker.cli serve-dashboard --refresh --context-api explicit --open`. Use the source-checkout `open-dashboard --refresh` fallback only for static/offline snapshots or when a long-running server cannot be kept alive.
|
|
25
25
|
- If the CLI command is missing for thread-ranking requests and you are already inside the source checkout, use `PYTHONPATH=src .venv/bin/python -m codex_usage_tracker.cli refresh --json` and `PYTHONPATH=src .venv/bin/python -m codex_usage_tracker.cli summary --group-by thread --limit 10 --json`.
|
|
26
26
|
- If neither command is available, say briefly that the tracker CLI is not on `PATH` and ask the user to run `codex-usage-tracker setup` or reinstall with `pipx`.
|
|
27
|
-
- Keep open
|
|
27
|
+
- Keep dashboard-open narration minimal: one short progress note if needed, then the localhost URL, or if falling back to a static file, the file path plus a note that Live requires `serve-dashboard`. Do not narrate plugin discovery.
|
|
28
28
|
|
|
29
29
|
## Common Workflows
|
|
30
30
|
|
{codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/src/codex_usage_tracking.egg-info/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: codex-usage-tracking
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.1
|
|
4
4
|
Summary: Unofficial local Codex plugin and dashboard for investigating aggregate token usage, costs, caching, and thread patterns.
|
|
5
5
|
Author: Douglas Monsky
|
|
6
6
|
License-Expression: MIT
|
|
@@ -44,6 +44,7 @@ Dynamic: license-file
|
|
|
44
44
|
Local-first dashboard, Codex plugin, and companion skill for understanding where your Codex tokens and usage credits are going.
|
|
45
45
|
|
|
46
46
|
[](https://github.com/douglasmonsky/codex-usage-tracker/actions/workflows/ci.yml)
|
|
47
|
+
[](https://pypi.org/project/codex-usage-tracking/)
|
|
47
48
|

|
|
48
49
|
[](LICENSE)
|
|
49
50
|
|
|
@@ -51,7 +52,7 @@ Local-first dashboard, Codex plugin, and companion skill for understanding where
|
|
|
51
52
|
|
|
52
53
|
Codex Usage Tracker reads the JSONL logs already written by Codex, indexes aggregate usage counters into SQLite, and gives you a dashboard, CLI, and MCP tools for investigating real usage patterns. It keeps prompts, assistant messages, tool output, pasted secrets, and raw transcript content out of SQLite, CSV exports, and generated dashboard HTML.
|
|
53
54
|
|
|
54
|
-
Built for developers using Codex locally who want to know which threads, models, subagents, and long chats are driving usage without uploading logs anywhere.
|
|
55
|
+
Built for developers using Codex locally who want to know which threads, models, subagents, and long chats are driving usage without uploading logs anywhere. The public PyPI package is [`codex-usage-tracking`](https://pypi.org/project/codex-usage-tracking/), and it installs the `codex-usage-tracker` command.
|
|
55
56
|
|
|
56
57
|
After install, you get a localhost dashboard, a local SQLite aggregate index, CLI reports, MCP tools, and a companion Codex skill for asking questions like "what drove my usage this week?"
|
|
57
58
|
|
|
@@ -69,7 +70,7 @@ Use your normal Python launcher for your platform: `python3` is common on macOS/
|
|
|
69
70
|
|
|
70
71
|
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.
|
|
71
72
|
|
|
72
|
-
|
|
73
|
+
Source install for development or branch testing:
|
|
73
74
|
|
|
74
75
|
```bash
|
|
75
76
|
pipx install "git+https://github.com/douglasmonsky/codex-usage-tracker.git"
|
|
@@ -77,7 +78,7 @@ pipx install "git+https://github.com/douglasmonsky/codex-usage-tracker.git"
|
|
|
77
78
|
|
|
78
79
|
`setup` installs or refreshes the local Codex plugin wrapper, initializes local config templates when needed, refreshes the aggregate index, runs `codex-usage-tracker doctor`, and tells you whether Codex needs a restart for plugin discovery.
|
|
79
80
|
|
|
80
|
-
Want Codex to do it for you? Paste: `Install codex-usage-tracking with pipx, run codex-usage-tracker setup, and open the Codex Usage Tracker dashboard
|
|
81
|
+
Want Codex to do it for you? Paste: `Install codex-usage-tracking with pipx, run codex-usage-tracker setup, and open the Codex Usage Tracker dashboard.`
|
|
81
82
|
|
|
82
83
|
After plugin discovery, Codex can use the companion usage skill to refresh local aggregates, call the MCP tools, and explain usage patterns conversationally. Examples: [MCP And Codex Skills](docs/mcp.md).
|
|
83
84
|
|
|
@@ -237,7 +238,7 @@ Open a Codex session on your machine and paste this:
|
|
|
237
238
|
|
|
238
239
|
```text
|
|
239
240
|
Install and configure Codex Usage Tracker.
|
|
240
|
-
Install the PyPI distribution codex-usage-tracking with pipx. The installed command should be codex-usage-tracker.
|
|
241
|
+
Install the PyPI distribution codex-usage-tracking with pipx. The installed command should be codex-usage-tracker. Use pipx install "git+https://github.com/douglasmonsky/codex-usage-tracker.git" only for branch testing or if PyPI is temporarily unavailable.
|
|
241
242
|
If pipx is missing, install it with the platform's Python launcher or use a local virtual environment.
|
|
242
243
|
After installation, run codex-usage-tracker setup and serve-dashboard --open.
|
|
243
244
|
Verify the dashboard opens locally and tell me the dashboard URL plus whether I need to restart Codex for plugin discovery.
|
|
@@ -20,7 +20,7 @@ def test_module_cli_version() -> None:
|
|
|
20
20
|
env=_subprocess_env(),
|
|
21
21
|
)
|
|
22
22
|
|
|
23
|
-
assert "codex-usage-tracker 0.3.
|
|
23
|
+
assert "codex-usage-tracker 0.3.1" in result.stdout
|
|
24
24
|
|
|
25
25
|
|
|
26
26
|
def test_release_check_script_passes() -> None:
|
|
@@ -68,6 +68,38 @@ def test_readme_codex_usage_tracker_commands_reference_known_subcommands() -> No
|
|
|
68
68
|
} <= documented
|
|
69
69
|
|
|
70
70
|
|
|
71
|
+
def test_usage_skills_prefer_live_dashboard_for_open_requests() -> None:
|
|
72
|
+
repo_root = Path(__file__).resolve().parents[1]
|
|
73
|
+
skill_paths = [
|
|
74
|
+
repo_root / "skills" / "codex-usage-api" / "SKILL.md",
|
|
75
|
+
repo_root / "skills" / "codex-usage-tracker" / "SKILL.md",
|
|
76
|
+
repo_root
|
|
77
|
+
/ "src"
|
|
78
|
+
/ "codex_usage_tracker"
|
|
79
|
+
/ "plugin_data"
|
|
80
|
+
/ "skills"
|
|
81
|
+
/ "codex-usage-api"
|
|
82
|
+
/ "SKILL.md",
|
|
83
|
+
repo_root
|
|
84
|
+
/ "src"
|
|
85
|
+
/ "codex_usage_tracker"
|
|
86
|
+
/ "plugin_data"
|
|
87
|
+
/ "skills"
|
|
88
|
+
/ "codex-usage-tracker"
|
|
89
|
+
/ "SKILL.md",
|
|
90
|
+
]
|
|
91
|
+
|
|
92
|
+
for skill_path in skill_paths:
|
|
93
|
+
skill_text = skill_path.read_text(encoding="utf-8")
|
|
94
|
+
live_command_index = skill_text.find("serve-dashboard --refresh --context-api explicit --open")
|
|
95
|
+
static_command_index = skill_text.find("open-dashboard --refresh")
|
|
96
|
+
|
|
97
|
+
assert live_command_index != -1, skill_path
|
|
98
|
+
assert static_command_index != -1, skill_path
|
|
99
|
+
assert live_command_index < static_command_index, skill_path
|
|
100
|
+
assert "Live requires `serve-dashboard`" in skill_text
|
|
101
|
+
|
|
102
|
+
|
|
71
103
|
def test_cli_json_schema_doc_lists_tracked_contracts() -> None:
|
|
72
104
|
repo_root = Path(__file__).resolve().parents[1]
|
|
73
105
|
docs = (repo_root / "docs" / "cli-json-schemas.md").read_text(encoding="utf-8")
|
|
@@ -34,7 +34,7 @@ def test_install_plugin_writes_generated_wrapper_and_marketplace(tmp_path: Path)
|
|
|
34
34
|
assert result.replaced_existing is False
|
|
35
35
|
assert second.replaced_existing is False
|
|
36
36
|
assert manifest["name"] == "codex-usage-tracker"
|
|
37
|
-
assert manifest["version"] == "0.3.
|
|
37
|
+
assert manifest["version"] == "0.3.1"
|
|
38
38
|
assert manifest["interface"]["defaultPrompt"][:3] == [
|
|
39
39
|
"Open dashboard",
|
|
40
40
|
"Heaviest thread?",
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/docs/assets/dashboard-calls-preview.png
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/docs/assets/dashboard-insights.png
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/docs/assets/plugin-thread-leaderboard.png
RENAMED
|
File without changes
|
{codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/docs/assets/ux/call-detail-panel.png
RENAMED
|
File without changes
|
{codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/docs/assets/ux/insight-overview.png
RENAMED
|
File without changes
|
{codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/docs/assets/ux/thread-investigation.png
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/scripts/benchmark_synthetic_history.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/src/codex_usage_tracker/__main__.py
RENAMED
|
File without changes
|
{codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/src/codex_usage_tracker/allowance.py
RENAMED
|
File without changes
|
{codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/src/codex_usage_tracker/api_payloads.py
RENAMED
|
File without changes
|
|
File without changes
|
{codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/src/codex_usage_tracker/context.py
RENAMED
|
File without changes
|
{codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/src/codex_usage_tracker/costing.py
RENAMED
|
File without changes
|
{codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/src/codex_usage_tracker/dashboard.py
RENAMED
|
File without changes
|
{codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/src/codex_usage_tracker/diagnostics.py
RENAMED
|
File without changes
|
{codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/src/codex_usage_tracker/formatting.py
RENAMED
|
File without changes
|
{codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/src/codex_usage_tracker/json_contracts.py
RENAMED
|
File without changes
|
{codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/src/codex_usage_tracker/mcp_server.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/src/codex_usage_tracker/pricing.py
RENAMED
|
File without changes
|
{codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/src/codex_usage_tracker/pricing_config.py
RENAMED
|
File without changes
|
|
File without changes
|
{codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/src/codex_usage_tracker/pricing_openai.py
RENAMED
|
File without changes
|
{codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/src/codex_usage_tracker/projects.py
RENAMED
|
File without changes
|
{codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/src/codex_usage_tracker/recommendations.py
RENAMED
|
File without changes
|
{codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/src/codex_usage_tracker/reports.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/src/codex_usage_tracker/support.py
RENAMED
|
File without changes
|
{codex_usage_tracking-0.3.0 → codex_usage_tracking-0.3.1}/src/codex_usage_tracker/threads.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|