cli-consumption 0.4.3__tar.gz → 0.4.4__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.
- {cli_consumption-0.4.3 → cli_consumption-0.4.4}/CHANGELOG.md +9 -1
- {cli_consumption-0.4.3 → cli_consumption-0.4.4}/PKG-INFO +1 -1
- {cli_consumption-0.4.3 → cli_consumption-0.4.4}/pyproject.toml +1 -1
- {cli_consumption-0.4.3 → cli_consumption-0.4.4}/src/cli_consumption/adapters/mistral_vibe.py +18 -10
- {cli_consumption-0.4.3 → cli_consumption-0.4.4}/src/cli_consumption/adapters/registry.py +5 -3
- {cli_consumption-0.4.3 → cli_consumption-0.4.4}/.gitignore +0 -0
- {cli_consumption-0.4.3 → cli_consumption-0.4.4}/LICENSE +0 -0
- {cli_consumption-0.4.3 → cli_consumption-0.4.4}/NOTICE +0 -0
- {cli_consumption-0.4.3 → cli_consumption-0.4.4}/README.md +0 -0
- {cli_consumption-0.4.3 → cli_consumption-0.4.4}/src/cli_consumption/INTER_FONT_LICENSE.txt +0 -0
- {cli_consumption-0.4.3 → cli_consumption-0.4.4}/src/cli_consumption/__init__.py +0 -0
- {cli_consumption-0.4.3 → cli_consumption-0.4.4}/src/cli_consumption/__main__.py +0 -0
- {cli_consumption-0.4.3 → cli_consumption-0.4.4}/src/cli_consumption/adapters/__init__.py +0 -0
- {cli_consumption-0.4.3 → cli_consumption-0.4.4}/src/cli_consumption/adapters/_shared.py +0 -0
- {cli_consumption-0.4.3 → cli_consumption-0.4.4}/src/cli_consumption/adapters/aider.py +0 -0
- {cli_consumption-0.4.3 → cli_consumption-0.4.4}/src/cli_consumption/adapters/amazon_q.py +0 -0
- {cli_consumption-0.4.3 → cli_consumption-0.4.4}/src/cli_consumption/adapters/amp.py +0 -0
- {cli_consumption-0.4.3 → cli_consumption-0.4.4}/src/cli_consumption/adapters/base.py +0 -0
- {cli_consumption-0.4.3 → cli_consumption-0.4.4}/src/cli_consumption/adapters/claude.py +0 -0
- {cli_consumption-0.4.3 → cli_consumption-0.4.4}/src/cli_consumption/adapters/cline.py +0 -0
- {cli_consumption-0.4.3 → cli_consumption-0.4.4}/src/cli_consumption/adapters/codex.py +0 -0
- {cli_consumption-0.4.3 → cli_consumption-0.4.4}/src/cli_consumption/adapters/continue_cli.py +0 -0
- {cli_consumption-0.4.3 → cli_consumption-0.4.4}/src/cli_consumption/adapters/copilot.py +0 -0
- {cli_consumption-0.4.3 → cli_consumption-0.4.4}/src/cli_consumption/adapters/crush.py +0 -0
- {cli_consumption-0.4.3 → cli_consumption-0.4.4}/src/cli_consumption/adapters/cursor.py +0 -0
- {cli_consumption-0.4.3 → cli_consumption-0.4.4}/src/cli_consumption/adapters/gemini.py +0 -0
- {cli_consumption-0.4.3 → cli_consumption-0.4.4}/src/cli_consumption/adapters/goose.py +0 -0
- {cli_consumption-0.4.3 → cli_consumption-0.4.4}/src/cli_consumption/adapters/grok.py +0 -0
- {cli_consumption-0.4.3 → cli_consumption-0.4.4}/src/cli_consumption/adapters/kilo.py +0 -0
- {cli_consumption-0.4.3 → cli_consumption-0.4.4}/src/cli_consumption/adapters/kimi.py +0 -0
- {cli_consumption-0.4.3 → cli_consumption-0.4.4}/src/cli_consumption/adapters/opencode.py +0 -0
- {cli_consumption-0.4.3 → cli_consumption-0.4.4}/src/cli_consumption/adapters/openhands.py +0 -0
- {cli_consumption-0.4.3 → cli_consumption-0.4.4}/src/cli_consumption/adapters/pi.py +0 -0
- {cli_consumption-0.4.3 → cli_consumption-0.4.4}/src/cli_consumption/adapters/plandex.py +0 -0
- {cli_consumption-0.4.3 → cli_consumption-0.4.4}/src/cli_consumption/adapters/qwen.py +0 -0
- {cli_consumption-0.4.3 → cli_consumption-0.4.4}/src/cli_consumption/api.py +0 -0
- {cli_consumption-0.4.3 → cli_consumption-0.4.4}/src/cli_consumption/cli.py +0 -0
- {cli_consumption-0.4.3 → cli_consumption-0.4.4}/src/cli_consumption/dashboard.py +0 -0
- {cli_consumption-0.4.3 → cli_consumption-0.4.4}/src/cli_consumption/dashboard_layouts.py +0 -0
- {cli_consumption-0.4.3 → cli_consumption-0.4.4}/src/cli_consumption/dashboard_react.css +0 -0
- {cli_consumption-0.4.3 → cli_consumption-0.4.4}/src/cli_consumption/dashboard_react.js +0 -0
- {cli_consumption-0.4.3 → cli_consumption-0.4.4}/src/cli_consumption/exporting.py +0 -0
- {cli_consumption-0.4.3 → cli_consumption-0.4.4}/src/cli_consumption/migrations/__init__.py +0 -0
- {cli_consumption-0.4.3 → cli_consumption-0.4.4}/src/cli_consumption/migrations/env.py +0 -0
- {cli_consumption-0.4.3 → cli_consumption-0.4.4}/src/cli_consumption/migrations/versions/__init__.py +0 -0
- {cli_consumption-0.4.3 → cli_consumption-0.4.4}/src/cli_consumption/migrations/versions/v0001_baseline.py +0 -0
- {cli_consumption-0.4.3 → cli_consumption-0.4.4}/src/cli_consumption/migrations/versions/v0002_minimize_subagents.py +0 -0
- {cli_consumption-0.4.3 → cli_consumption-0.4.4}/src/cli_consumption/migrations/versions/v0003_canonical_timestamps.py +0 -0
- {cli_consumption-0.4.3 → cli_consumption-0.4.4}/src/cli_consumption/migrations/versions/v0004_subagent_scope_freshness.py +0 -0
- {cli_consumption-0.4.3 → cli_consumption-0.4.4}/src/cli_consumption/migrations/versions/v0005_sync_receipts.py +0 -0
- {cli_consumption-0.4.3 → cli_consumption-0.4.4}/src/cli_consumption/migrations/versions/v0006_dashboard_layouts.py +0 -0
- {cli_consumption-0.4.3 → cli_consumption-0.4.4}/src/cli_consumption/migrations/versions/v0007_dashboard_layout_revision.py +0 -0
- {cli_consumption-0.4.3 → cli_consumption-0.4.4}/src/cli_consumption/models.py +0 -0
- {cli_consumption-0.4.3 → cli_consumption-0.4.4}/src/cli_consumption/py.typed +0 -0
- {cli_consumption-0.4.3 → cli_consumption-0.4.4}/src/cli_consumption/qualifications.py +0 -0
- {cli_consumption-0.4.3 → cli_consumption-0.4.4}/src/cli_consumption/reporting.py +0 -0
- {cli_consumption-0.4.3 → cli_consumption-0.4.4}/src/cli_consumption/reporting_api.py +0 -0
- {cli_consumption-0.4.3 → cli_consumption-0.4.4}/src/cli_consumption/retention.py +0 -0
- {cli_consumption-0.4.3 → cli_consumption-0.4.4}/src/cli_consumption/schema.py +0 -0
- {cli_consumption-0.4.3 → cli_consumption-0.4.4}/src/cli_consumption/snapshot_extraction.py +0 -0
- {cli_consumption-0.4.3 → cli_consumption-0.4.4}/src/cli_consumption/snapshot_files.py +0 -0
- {cli_consumption-0.4.3 → cli_consumption-0.4.4}/src/cli_consumption/storage.py +0 -0
- {cli_consumption-0.4.3 → cli_consumption-0.4.4}/src/cli_consumption/sync.py +0 -0
- {cli_consumption-0.4.3 → cli_consumption-0.4.4}/src/cli_consumption/timestamps.py +0 -0
|
@@ -6,6 +6,13 @@ use [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
|
6
6
|
|
|
7
7
|
## [Unreleased]
|
|
8
8
|
|
|
9
|
+
## [0.4.4] - 2026-09-08
|
|
10
|
+
|
|
11
|
+
### Fixed
|
|
12
|
+
|
|
13
|
+
- Mistral Vibe now counts each persisted assistant message as a model call while
|
|
14
|
+
retaining cumulative session tokens as one unsplit aggregate.
|
|
15
|
+
|
|
9
16
|
## [0.4.3] - 2026-09-05
|
|
10
17
|
|
|
11
18
|
### Added
|
|
@@ -194,7 +201,8 @@ use [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
|
194
201
|
|
|
195
202
|
- Refreshed the provider guide for the first minor release ([#26]).
|
|
196
203
|
|
|
197
|
-
[Unreleased]: https://github.com/Guillaume-Lombardo/cli-consumption/compare/v0.4.
|
|
204
|
+
[Unreleased]: https://github.com/Guillaume-Lombardo/cli-consumption/compare/v0.4.4...HEAD
|
|
205
|
+
[0.4.4]: https://github.com/Guillaume-Lombardo/cli-consumption/compare/v0.4.3...v0.4.4
|
|
198
206
|
[0.4.3]: https://github.com/Guillaume-Lombardo/cli-consumption/compare/v0.4.2...v0.4.3
|
|
199
207
|
[0.4.2]: https://github.com/Guillaume-Lombardo/cli-consumption/compare/v0.4.1...v0.4.2
|
|
200
208
|
[0.4.1]: https://github.com/Guillaume-Lombardo/cli-consumption/compare/v0.4.0...v0.4.1
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: cli-consumption
|
|
3
|
-
Version: 0.4.
|
|
3
|
+
Version: 0.4.4
|
|
4
4
|
Summary: Analyze and consolidate AI coding CLI consumption across machines.
|
|
5
5
|
Project-URL: Homepage, https://github.com/Guillaume-Lombardo/cli-consumption
|
|
6
6
|
Project-URL: Documentation, https://github.com/Guillaume-Lombardo/cli-consumption#readme
|
{cli_consumption-0.4.3 → cli_consumption-0.4.4}/src/cli_consumption/adapters/mistral_vibe.py
RENAMED
|
@@ -84,6 +84,7 @@ class MistralVibeAdapter:
|
|
|
84
84
|
started_at = timestamp(source.metadata.get("start_time"))
|
|
85
85
|
ended_at = timestamp(source.metadata.get("end_time"))
|
|
86
86
|
active_turn: dict[str, Any] | None = None
|
|
87
|
+
assistant_turn_ids: list[str | None] = []
|
|
87
88
|
turn_number = 0
|
|
88
89
|
tool_number = 0
|
|
89
90
|
compaction_number = 0
|
|
@@ -125,6 +126,8 @@ class MistralVibeAdapter:
|
|
|
125
126
|
continue
|
|
126
127
|
if active_turn is not None:
|
|
127
128
|
active_turn["status"] = "completed"
|
|
129
|
+
active_turn["model_calls"] += 1
|
|
130
|
+
assistant_turn_ids.append(active_turn["id"] if active_turn else None)
|
|
128
131
|
raw_tool_calls = message.get("tool_calls")
|
|
129
132
|
if not isinstance(raw_tool_calls, list):
|
|
130
133
|
continue
|
|
@@ -160,20 +163,25 @@ class MistralVibeAdapter:
|
|
|
160
163
|
)
|
|
161
164
|
config = mapping(source.metadata.get("config"))
|
|
162
165
|
model = label(config.get("active_model"), 255) or "unknown"
|
|
163
|
-
model_calls = 0
|
|
164
166
|
totals = empty_tokens()
|
|
165
|
-
if usage["total_tokens"] > 0
|
|
166
|
-
model_calls = 1
|
|
167
|
+
if usage["total_tokens"] > 0:
|
|
167
168
|
add_tokens(totals, usage)
|
|
169
|
+
|
|
170
|
+
for sequence, turn_id in enumerate(assistant_turn_ids, 1):
|
|
171
|
+
call_usage = (
|
|
172
|
+
usage if sequence == len(assistant_turn_ids) else empty_tokens()
|
|
173
|
+
)
|
|
168
174
|
snapshot.model_calls.append(
|
|
169
175
|
{
|
|
170
|
-
"id": f"{conversation_id}:model:
|
|
176
|
+
"id": f"{conversation_id}:model:{sequence}",
|
|
171
177
|
"conversation_id": conversation_id,
|
|
172
|
-
"turn_id":
|
|
173
|
-
"sequence":
|
|
174
|
-
"timestamp": iso(ended_at)
|
|
178
|
+
"turn_id": turn_id,
|
|
179
|
+
"sequence": sequence,
|
|
180
|
+
"timestamp": iso(ended_at)
|
|
181
|
+
if sequence == len(assistant_turn_ids)
|
|
182
|
+
else None,
|
|
175
183
|
"model": model,
|
|
176
|
-
**
|
|
184
|
+
**call_usage,
|
|
177
185
|
}
|
|
178
186
|
)
|
|
179
187
|
|
|
@@ -193,9 +201,9 @@ class MistralVibeAdapter:
|
|
|
193
201
|
"ended_at": iso(ended_at),
|
|
194
202
|
"duration_seconds": _duration(started_at, ended_at),
|
|
195
203
|
"source": "local-session-json",
|
|
196
|
-
"models": [model] if
|
|
204
|
+
"models": [model] if assistant_turn_ids else [],
|
|
197
205
|
"iterations": turn_number,
|
|
198
|
-
"model_calls":
|
|
206
|
+
"model_calls": len(assistant_turn_ids),
|
|
199
207
|
"tool_calls": tool_number,
|
|
200
208
|
"compactions": compaction_number,
|
|
201
209
|
"event_count": source.event_count,
|
|
@@ -346,10 +346,12 @@ ADAPTER_SPECS = (
|
|
|
346
346
|
token_semantics="conversation-aggregate",
|
|
347
347
|
qualification=_qualification(
|
|
348
348
|
"mistral-vibe",
|
|
349
|
-
"CLI 2.
|
|
349
|
+
"CLI 2.25.0",
|
|
350
350
|
"session meta JSON and messages JSONL",
|
|
351
|
-
"https://github.com/mistralai/mistral-vibe/tree/v2.
|
|
352
|
-
"
|
|
351
|
+
"https://github.com/mistralai/mistral-vibe/tree/v2.25.0",
|
|
352
|
+
"Assistant-message call counts with session-aggregate tokens; no timing "
|
|
353
|
+
"or historical model attribution.",
|
|
354
|
+
qualified_on="2026-09-08",
|
|
353
355
|
),
|
|
354
356
|
),
|
|
355
357
|
AdapterSpec(
|
|
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
|
{cli_consumption-0.4.3 → cli_consumption-0.4.4}/src/cli_consumption/adapters/continue_cli.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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cli_consumption-0.4.3 → cli_consumption-0.4.4}/src/cli_consumption/migrations/versions/__init__.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
|
|
File without changes
|