agl 41.1.0 → 41.2.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
@@ -1,5 +1,18 @@
1
1
  # Changelog
2
2
 
3
+ ## 2026-10-27 - 41.2.0
4
+
5
+ ### Features
6
+
7
+ - The Metrics view no longer shows cache reads or writes an answer did not state as none (AGL-1012). The proxy read a missing cache count as 0, so a ChatGPT answer, which states the tokens it read from the cache but not the ones it wrote (OpenAI's `input_tokens_details.cache_write_tokens`), counted as an answer that wrote nothing. An answer's cache reads and writes are now each unknown (`null`) when it does not state them: a Responses answer without `cached_tokens` or `cache_write_tokens`, or a Claude answer whose `cache_read_input_tokens`, or `cache_creation_input_tokens` with no `cache_creation` split, is missing or null (Anthropic documents both as `number or null`); a stated 0 stays 0. Each usage bucket keeps the reads and writes its answers stated and, beside them, `cacheReadUnknownCalls` and `cacheWriteUnknownCalls`, the answers that did not state theirs, so known counts still add up exactly. The Metrics view shows the cache reads or writes of a window, model or session as **Unknown** when no call stated any, as **≥** the stated count when some calls did not, and the tile then says for how many calls they are unknown. A Responses answer's unknown cache counts stay inside its input count, as OpenAI's `input_tokens` counts every input token, so an OpenAI account's total stays exact; a Claude account's answers leave the cache out of their input, so a model's or session's **Total** reads **≥** when one of its Claude answers did not state a cache count (`controllerUsageTotalIsLowerBound`). Controller protocol 47: a usage bucket carries `cacheReadUnknownCalls` and `cacheWriteUnknownCalls` (`IControllerUsageBucket`, counts in `IControllerUsageCounts`), and a browser of an earlier AGL reloads.
8
+ - Buckets stored before this release did not record whether their answers stated their cache reads and writes; each of their answers reads as unknown for both until they expire (minutes after a day, hours after eight days), and an answer added to such a bucket keeps that. Nothing is migrated.
9
+ - Downgrade: an earlier proxy refuses a stored bucket that carries the new count, so its Metrics view fails to load and its writes into such a bucket fail (reported on its standard error) until those buckets expire.
10
+ - A Messages request a ChatGPT account answers through the proxy's translation counts the cache writes ChatGPT did not state as unknown as well: the translation (`@modelprofile.com/flexharness-providers` 17.0.0) now reports a cache count the model did not state as `null` where it reported 0, and Claude Code on the ChatGPT pool gets that `null` in the answer's usage. Its unknown writes stay inside its input count, so the account's total stays exact. The account service's Claude usage estimate counts unknown writes as none, as before.
11
+
12
+ ### Maintenance
13
+
14
+ - FlexHarness 17.0.0 (`@modelprofile.com/flexharness`, `-agent`, `-models`, `-providers`), pinned at 17.0.0. Its one breaking change is the Messages translation's usage (`IAnthropicMessagesUsage.cache_creation_input_tokens` and `cache_read_input_tokens` are `number | null`, `null` for a count the model did not state), which AGL reads as unknown (above).
15
+
3
16
  ## 2026-10-27 - 41.1.0
4
17
 
5
18
  ### Features