cctally 1.117.2 → 1.118.0

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.
Files changed (58) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/README.md +7 -3
  3. package/bin/_cctally_cache.py +2783 -175
  4. package/bin/_cctally_completion.py +106 -33
  5. package/bin/_cctally_core.py +69 -4
  6. package/bin/_cctally_dashboard.py +188 -13
  7. package/bin/_cctally_dashboard_conversation.py +5 -1
  8. package/bin/_cctally_dashboard_envelope.py +50 -19
  9. package/bin/_cctally_dashboard_sources.py +23 -1
  10. package/bin/_cctally_db.py +193 -153
  11. package/bin/_cctally_diagnosis_sources.py +63 -7
  12. package/bin/_cctally_doctor.py +865 -93
  13. package/bin/_cctally_five_hour.py +67 -50
  14. package/bin/_cctally_forecast.py +35 -13
  15. package/bin/_cctally_journal.py +186 -18
  16. package/bin/_cctally_milestone_history.py +859 -62
  17. package/bin/_cctally_oauth_samples.py +286 -15
  18. package/bin/_cctally_parser.py +2 -2
  19. package/bin/_cctally_quota.py +104 -12
  20. package/bin/_cctally_record.py +153 -29
  21. package/bin/_cctally_rederive.py +608 -68
  22. package/bin/_cctally_statusline.py +108 -81
  23. package/bin/_cctally_store.py +179 -38
  24. package/bin/_cctally_tui.py +892 -181
  25. package/bin/_cctally_update.py +32 -13
  26. package/bin/_lib_codex_conversation_query.py +52 -14
  27. package/bin/_lib_codex_drain_admission.py +224 -6
  28. package/bin/_lib_codex_metadata.py +39 -0
  29. package/bin/_lib_conversation_anon.py +15 -8
  30. package/bin/_lib_conversation_dispatch.py +7 -0
  31. package/bin/_lib_conversation_query.py +289 -70
  32. package/bin/_lib_dashboard_sources.py +37 -1
  33. package/bin/_lib_detector_access_registry.py +497 -26
  34. package/bin/_lib_doctor.py +85 -20
  35. package/bin/_lib_doctor_scan_index.py +321 -0
  36. package/bin/_lib_ingest_frontier.py +20 -1
  37. package/bin/_lib_oauth_samples.py +23 -7
  38. package/bin/_lib_pricing.py +146 -16
  39. package/bin/_lib_quota.py +19 -0
  40. package/bin/_lib_rederive.py +11 -6
  41. package/bin/_lib_retained_records.py +516 -0
  42. package/bin/_lib_snapshot_cache.py +10 -0
  43. package/bin/_lib_stale_proof.py +272 -43
  44. package/bin/_lib_stats_content_revision.py +831 -0
  45. package/bin/_lib_write_io.py +11 -4
  46. package/bin/cctally +4 -1
  47. package/dashboard/static/assets/ConversationsView-D4Iv4ku0.js +72 -0
  48. package/dashboard/static/assets/{DoctorModal-B0DnU9d9.js → DoctorModal-D4QSq6uz.js} +1 -1
  49. package/dashboard/static/assets/ModalRoot-C9F5dhZi.js +1 -0
  50. package/dashboard/static/assets/{ProjectsDrillPanel-DSxXQSa-.js → ProjectsDrillPanel-WxAdRDMt.js} +1 -1
  51. package/dashboard/static/assets/{SourceDetailModal-BleDpQqG.js → SourceDetailModal-NyyEfXmc.js} +1 -1
  52. package/dashboard/static/assets/{UpdateModal-CMqaAkSK.js → UpdateModal-CFLq9pT1.js} +1 -1
  53. package/dashboard/static/assets/{index-BjQV-0-D.js → index-BKTWH9JE.js} +2 -2
  54. package/dashboard/static/assets/{outlineNavigation-CO-VWBm7.js → outlineNavigation-BnGUwCS3.js} +3 -3
  55. package/dashboard/static/dashboard.html +1 -1
  56. package/package.json +4 -1
  57. package/dashboard/static/assets/ConversationsView-oqNsWzWV.js +0 -72
  58. package/dashboard/static/assets/ModalRoot-CYua2wP_.js +0 -1
package/CHANGELOG.md CHANGED
@@ -5,6 +5,36 @@ based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
5
5
 
6
6
  ## [Unreleased]
7
7
 
8
+ ## [1.118.0] - 2026-11-06
9
+
10
+ ### Added
11
+ - Codex cost reports price `gpt-6.1-terra`, `gpt-6-rosalind` and `gpt-6-astra-law` from their published rate cards, and `gpt-5.5-cyber-preview` as `gpt-5.5-cyber`, instead of falling back to `gpt-5` rates.
12
+
13
+ ### Changed
14
+ - `cctally doctor` checks an unchanged journal about three times faster. It keeps a small cache of its journal scan in the journal folder and verifies the journal against it by hash, so every check still sees every byte.
15
+ - Repairing or fully re-reading Codex history (`cctally cache-sync --source codex` or the background worker) no longer locks the cache for the whole run, so Codex hooks keep recording usage during a history repair, and repairs re-read less.
16
+ - While a Codex history repair runs (`cctally cache-sync --source codex` or the background worker), a Claude Code hook that arrives mid-step now waits briefly for its turn, so your Claude usage is recorded right away, not minutes later.
17
+ - Upgrade rebuilds of `stats.db` and `cctally db rederive` finish much faster on large journals, and `cctally db rederive` uses less memory. Upgrade rebuilds, `db rebuild --db stats` and `db rederive --yes` write far less to disk.
18
+
19
+ ### Fixed
20
+ - Sessions from a removed git worktree now show and group under their repository in `project`, the `dashboard` and the Conversation Viewer instead of `.worktrees`; a `.git` folder counts only when it holds a repository.
21
+ - Codex conversation project labels in the `dashboard` Conversation Viewer now stay current: a label left on an earlier folder or `(unassigned)` is corrected on the next full refresh.
22
+ - Anonymized Codex `transcript export` output now scrubs both the repository name and the session folder's own name, as Claude exports already do.
23
+ - The `dashboard` no longer rescans every Claude transcript on every refresh when its cache still tracks transcripts that were deleted from disk.
24
+ - Compressed Codex history that fails conversation verification no longer keeps the `dashboard` rescanning every Claude and Codex transcript on each refresh; that history keeps its last verified view until it changes.
25
+ - Upgrading from a cctally older than 1.74.0 on a Python without a zstd decoder keeps cached Codex history in `codex-*` reports; it is fully refreshed once Python 3.14+ or `backports.zstd` is available.
26
+ - The dashboard's Doctor modal and `cctally doctor` now wait at most half a second in total for stats.db maintenance, instead of about 5 seconds per database read (40 to 60 seconds per report), and report the maintenance.
27
+ - `cctally doctor`'s Latest snapshot check no longer fails with "Hooks may be broken" when usage stays flat for over an hour; it now counts every accepted reading, and says when stats.db cannot be read.
28
+ - The Current Week freshness chip in `cctally dashboard` and `cctally tui` no longer turns stale while usage stays flat; it now ages from the newest reading that confirms the shown percentage.
29
+ - An interrupted `cctally cache-sync --source codex --rebuild` no longer gives Codex usage from before account tracking to the account logged in at the retry; it stays unattributed. A rebuild with an unreadable rollout now stays pending.
30
+ - A running `dashboard` now shows corrected usage, milestone and block figures after a stored correction (`db rederive`, a rebuild or an in-place fix) without a new sample, and a reopened Claude or Codex cycle detail shows current figures.
31
+ - `explain`'s short-conversations-with-large-context class no longer measures prior-generation Claude requests above 200K tokens against a 200K window, and reports a request it cannot place as undecided instead of guessing.
32
+ - `cctally dashboard --no-sync` started while stats.db is being rebuilt after an upgrade or repaired after corruption now shows your data once that finishes, instead of staying empty until a restart.
33
+ - Conversation Viewer search results in the `dashboard` now keep a transcript's own square brackets, such as `[WARN]`, as text and highlight only the words your search matched.
34
+ - The `dashboard` Conversation Viewer header now shows a Codex conversation's project and git branch, or `no branch recorded` when Codex saved none, instead of `—`, as it does for a Claude conversation opened from All.
35
+ - The `statusline` no longer runs at full CPU for minutes after recording a reading on macOS, and Claude Code hooks no longer pile up behind it: a `hook-tick` that finds another usage refresh already in progress skips its own.
36
+ - Removing cached Codex history for deleted rollout files (`cctally cache-sync` and the background cleanup) and recording Codex conversation updates no longer slow down as history grows; a 20-minute cleanup now takes a few minutes.
37
+
8
38
  ## [1.117.2] - 2026-11-03
9
39
 
10
40
  ### Fixed
package/README.md CHANGED
@@ -30,11 +30,15 @@ Your Claude Code plan meters you with a percentage that creeps up all week. ccta
30
30
  </p>
31
31
 
32
32
  <!-- cctally:latest-stable:begin -->
33
- **Latest stable: v1.116.1** (2026-10-28)
33
+ **Latest stable: v1.117.2** (2026-11-03)
34
34
 
35
- Highlights from the `v1.113.0` to `v1.116.1` stable upgrade:
35
+ Highlights from the `v1.116.1` to `v1.117.2` stable upgrade:
36
36
 
37
- [See every change in this stable upgrade](https://github.com/omrikais/cctally/releases/tag/v1.116.1)
37
+ - With more than one Claude account, the `cctally dashboard` Current Week card and modal show one account's cycle, milestones, spend and `$/1%` beside that account's label, and the older/newer cycle buttons stay on that account.
38
+ - `cctally five-hour-breakdown` and the dashboard's five-hour milestones show `, ` (`null` in `--json`) instead of a weekly percentage that a weekly credit later retired.
39
+ - With more than one Claude account, the `cctally dashboard` All view shows its combined spend headline, summing each account's current cycle, instead of usually leaving it out.
40
+
41
+ [See every change in this stable upgrade](https://github.com/omrikais/cctally/releases/tag/v1.117.2)
38
42
  <!-- cctally:latest-stable:end -->
39
43
 
40
44
  ## Quick start