cctally 1.2.0 → 1.4.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.
package/CHANGELOG.md CHANGED
@@ -5,6 +5,47 @@ based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
5
5
 
6
6
  ## [Unreleased]
7
7
 
8
+ ## [1.4.0] - 2026-05-09
9
+
10
+ ### Added
11
+ - Shareable reports — all 8 reporting subcommands (`report`, `daily`,
12
+ `monthly`, `weekly`, `forecast`, `project`, `five-hour-blocks`, `session`)
13
+ now accept `--format md|html|svg` to emit shareable artifacts to a
14
+ filename like `cctally-<cmd>-<utcdate>.<ext>`. Flags: `--theme light|dark`,
15
+ `--no-branding`, `--reveal-projects` (project labels are anonymized to
16
+ `project-N` by default), `--output <path>` / `--output -` for stdout,
17
+ `--copy` (markdown only), `--open` (html/svg only). `session --format`
18
+ also accepts `--top-n N` to cap the chart's project breakdown.
19
+ See `docs/commands/share.md` and the per-command "Shareable output"
20
+ sections.
21
+
22
+ ### Fixed
23
+ - Dashboard 5-hour row now shows the post-reset delta (`⚡ Δ +Xpp this
24
+ block`) when a 5h block spans a weekly reset, instead of suppressing
25
+ the number behind a `⚡ reset` line. The cross-reset flag now detects
26
+ natural weekly boundaries from `weekly_usage_snapshots.week_start_at`
27
+ in addition to Anthropic-shifted mid-week resets, and all interval
28
+ comparisons normalize through `unixepoch()` so the flag flips
29
+ correctly on non-UTC hosts (the prior lex-compare silently failed
30
+ for `+03:00` and other non-zero offsets, leaving the panel showing
31
+ a misleading `Δ −94pp this block`).
32
+ - `record-usage`: self-heal `percent_milestones` and `five_hour_blocks` rows
33
+ that were silently dropped when an earlier invocation was killed between
34
+ snapshot insert and milestone insert (e.g. Claude Code self-update kill
35
+ window). On a dedup'd tick, re-runs the idempotent milestone helpers
36
+ against the latest snapshot — recovering missed rows at the next
37
+ status-line tick instead of waiting for the percent to advance.
38
+ - Root `.gitignore` now anchors `/node_modules` and `/package-lock.json`,
39
+ preventing `npm install` next to the repo-root `package.json` (the
40
+ npm-publish sentinel) from leaving the working tree dirty and blocking
41
+ `cctally release`. `dashboard/web/node_modules` and the tracked
42
+ `dashboard/web/package-lock.json` are unaffected by the anchored entries.
43
+
44
+ ## [1.3.0] - 2026-05-08
45
+
46
+ ### Changed
47
+ - `release` Phase 5 now publishes to npm via a GitHub Actions OIDC trusted-publisher workflow in the public repo, with `npm publish --provenance` for supply-chain attestation. The release script no longer invokes `npm publish` locally — it polls `npm view` until the workflow lands the version. Eliminates the prior failure mode where passkey-based npm 2FA would block `npm publish` from a non-interactive subprocess.
48
+
8
49
  ## [1.2.0] - 2026-05-08
9
50
 
10
51
  ### Added
package/README.md CHANGED
@@ -9,6 +9,13 @@
9
9
  <strong>Track Claude Code subscription usage as a weekly $-per-1% trend. Local web dashboard, terminal UI, forecasts, and threshold alerts.</strong>
10
10
  </p>
11
11
 
12
+ <p align="center">
13
+ <a href="https://www.npmjs.com/package/cctally"><img src="https://img.shields.io/npm/v/cctally.svg" alt="npm version"></a>
14
+ <a href="https://www.npmjs.com/package/cctally"><img src="https://img.shields.io/npm/dm/cctally.svg" alt="npm downloads"></a>
15
+ <a href="https://github.com/omrikais/cctally/blob/main/LICENSE"><img src="https://img.shields.io/github/license/omrikais/cctally.svg" alt="Apache-2.0 license"></a>
16
+ <a href="https://github.com/omrikais/cctally/stargazers"><img src="https://img.shields.io/github/stars/omrikais/cctally.svg" alt="GitHub stars"></a>
17
+ </p>
18
+
12
19
  If you're using `ccusage` to watch Claude Code spend, `cctally` covers the same ground and adds the parts you reach for next: a live web dashboard, a forecast that tells you whether you're going to cap this week, threshold alerts when you cross a percent, and a persistent week-over-week trend of cost per percent of quota. All local, no account, no telemetry.
13
20
 
14
21
  <p align="center">
@@ -33,7 +40,7 @@ npm install -g cctally
33
40
  cctally setup
34
41
  ```
35
42
 
36
- The npm package is a thin Node shim around the bundled Python script — no postinstall, no native build. Set `CCTALLY_PYTHON=/path/to/python3` if `python3` isn't on your PATH.
43
+ Needs Python 3. If `cctally setup` fails with "python3 not found", install it with `brew install python` (macOS) and try again.
37
44
 
38
45
  ### From source
39
46