cctally 1.30.0 → 1.31.1

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,19 @@ based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
5
5
 
6
6
  ## [Unreleased]
7
7
 
8
+ ## [1.31.1] - 2026-06-09
9
+
10
+ ### Added
11
+ - **Embedded pricing for `claude-fable-5`.** Anthropic's Fable 5 model ships in the API but was absent from the embedded `CLAUDE_MODEL_PRICING` table, so any session run on it logged a one-shot "unrecognized model" warning and contributed **zero cost** to every cost computation (`report`, `daily`, `weekly`, `session`, `blocks`, `forecast`, the dashboard, etc.), silently undercounting spend for Fable 5 users. The model is now priced at $10 / $50 per million input / output tokens (cache-write and cache-read derived at the standard 1.25× / 0.1× multipliers; 1M context at standard pricing with no long-context premium), verified against the Anthropic pricing page. `cctally pricing-check` no longer reports `claude-fable-5` as an unpriced vendor model and `doctor pricing.coverage` stays clean; the pricing snapshot date was bumped to 2026-06-10 (#172).
12
+
13
+ ## [1.31.0] - 2026-06-09
14
+
15
+ ### Added
16
+ - **Syntax-highlighted, line-numbered tool input/output in the dashboard conversation reader.** A tool call's REQUEST panel (its JSON arguments) and, for `Read` results, the RESULT panel (the file contents) are now syntax-highlighted — previously the dominant code surface in a tool-heavy transcript (a `Read` showing a Python file, a `Bash` invocation) rendered as flat uncolored text. `Read` results additionally get a dim line-number gutter in a separate column (so the numbers aren't mis-tokenized as code), with the language inferred in the browser from the file's extension; non-`Read` results (Bash stdout, Grep/Glob path lists, and the like) stay plain. Highlighting runs entirely client-side through the same refractor chokepoint as prose code fences and degrades to plain text on an unknown or unparseable language — no data-contract change and nothing to do on upgrade.
17
+
18
+ ### Fixed
19
+ - **The dashboard conversation reader now uses the full width of its pane.** A `68ch` typographic measure cap (introduced with the 1.30.0 reader redesign) limited rendered prose and fenced code blocks to a 68-character line length, leaving roughly half of a wide reader pane empty and wrapping text earlier than the available width — which read as artificial line breaks. The cap is removed so reader prose and code fences fill the pane; tool I/O code panels were never measure-capped and are unaffected.
20
+
8
21
  ## [1.30.0] - 2026-06-09
9
22
 
10
23
  ### Added
@@ -49,7 +49,7 @@ def _chip_for_model(name: str) -> str:
49
49
  # Date the embedded pricing snapshots below were last verified against
50
50
  # vendor sources. Bump whenever CLAUDE_MODEL_PRICING / CODEX_MODEL_PRICING
51
51
  # is synced. Read by `pricing-check` + the release pre-flight staleness nudge.
52
- PRICING_SNAPSHOT_DATE = "2026-05-30"
52
+ PRICING_SNAPSHOT_DATE = "2026-06-10"
53
53
  PRICING_STALENESS_DAYS = 60 # release pre-flight WARNs past this age
54
54
 
55
55
  # Canonical machine-readable pricing source (Claude values + Codex values).
@@ -67,9 +67,11 @@ PRICING_DRIFT_ALLOWLIST: list[dict] = []
67
67
 
68
68
  # Anthropic API pricing snapshot:
69
69
  # - Source: https://raw.githubusercontent.com/BerriAI/litellm/main/model_prices_and_context_window.json
70
- # - Captured: 2026-05-30 (see PRICING_SNAPSHOT_DATE)
70
+ # - Captured: 2026-06-10 (see PRICING_SNAPSHOT_DATE)
71
71
  # - Verified by maintainer against docs.claude.com/en/docs/about-claude/pricing;
72
72
  # update in PRs touching this table.
73
+ # 2026-06-10: added claude-fable-5 ($10/$50 per MTok; 1M context, no
74
+ # long-context premium) — issue #172.
73
75
  CLAUDE_MODEL_PRICING: dict[str, dict[str, Any]] = {
74
76
  "claude-3-5-haiku-20241022": {
75
77
  "input_cost_per_token": 8e-07,
@@ -147,6 +149,12 @@ CLAUDE_MODEL_PRICING: dict[str, dict[str, Any]] = {
147
149
  "cache_creation_input_token_cost_above_200k_tokens": 7.5e-06,
148
150
  "cache_read_input_token_cost_above_200k_tokens": 6e-07,
149
151
  },
152
+ "claude-fable-5": {
153
+ "input_cost_per_token": 1e-05,
154
+ "output_cost_per_token": 5e-05,
155
+ "cache_creation_input_token_cost": 1.25e-05,
156
+ "cache_read_input_token_cost": 1e-06,
157
+ },
150
158
  "claude-haiku-4-5": {
151
159
  "input_cost_per_token": 1e-06,
152
160
  "output_cost_per_token": 5e-06,