Repository navigation
v4.100.100
Five reporting fixes, all from one session on the test host.
The context meter counted a request that could not exist. observeRequestTokens judged a provider's count and its chars-per-token ratio together, then kept the count whichever way the judgement went. One usage event reported 138,549 input tokens for 138,262 characters — a token per character, which no tokenizer produces. The ratio was refused; the count was kept, beat the estimate of 48,258, and forced a compaction of a transcript holding 45,783 real tokens against a 64,000-token window. The chat then announced that as "138.5k → 104.7k tokens". The two bounds now reject different things: above the ceiling only the pairing is odd and the count still stands, below the floor the count is the impossible term and goes with it.
The condensed-reasoning row reported characters under a token budget. "43k → 620 chars" beside a 16,000-token allowance reads as an overrun of nearly three times the budget when it was under it. Converted in core, where the reasoning rate is calibrated, and carried as its own fields — a task saved before this still shows characters, labelled as characters.
The plan row rendered an empty body. The tool names no file and runs no command, so the generic lookup found nothing and produced a bare header. It now shows the plan. Any tool that names no file falls back to its arguments.
A settled transaction never said how long it took, so an hour of looping read like a first-try landing. Timed from open().
The completion box's duration never appeared on the first run of a task — the long one. runStartedAt is stamped on the idle→running edge, and a new session is constructed already running, so the edge never happened. Only follow-up turns were ever timed.