v2.9.0
Changed
- Behavior-changing for every consumer: the token usage table is no longer posted in full inside the review comment by default (issue #758). The full
Token usage by agentbreakdown was reference material, not review content, and its in-comment copy had caused two shipped bugs: Bitbucket rendering<details>/<summary>as literal text (#703) and Bitbucket silently truncating comments near 32KB, dropping the trailing table (#728). The review comment now carries a single compact line by default (_Review cost: $0.1234 · 45,678 tokens · 8 agents · Sonnet 5 · [full breakdown](run-url)_), plus a separate high-usage warning line when a run’s estimated cost crosses a configurable threshold. The full table is always available in the CI job log (echoed to stderr on every provider, new) and, on GitHub,GITHUB_STEP_SUMMARY(unchanged). Newtoken-usage-displayinput (AI_TOKEN_USAGE_DISPLAY, defaultcompact): set tofullto restore the pre-#758 in-comment table, oroffto omit token-usage content from the comment entirely. Newtoken-usage-warn-usdinput (AI_TOKEN_USAGE_WARN_USD, default1.00): set to0to disable the high-usage warning. See Features → Token usage.
Fixed
GITHUB_ACTIONSis now passed through to the containerized engine (issue #759). The::warning::/::error::workflow annotations invcs/github.py,slash/dismiss.py,cli.py, andreview/reporting.pyall gate on this variable and previously saw it unset when running viacontainer-action/action.yml, even inside real GitHub Actions, so those annotations were silently suppressed.- 24 further env vars are now passed through to the containerized engine (issue #761, the same bug class as #759), most notably the
AI_CANONICAL_REUSEandAI_GITLAB_CROSS_RUN_DEDUPincident-response kill switches, which had zero effect on the container-action install path despite being documented as escape hatches for exactly that scenario. Also restores the #734 dual-token split (GITHUB_TOKEN/GH_TOKEN) on the container path. A new regression test parses thedocker runenv passthrough list and cross-checks it against the engine’s own registry of known variables, so this class of silent gap can’t recur unnoticed for a future variable.