What's Changed
- fix(cli): measure insight days and hours in local time everywhere by @ComplexSimply in #7670
- refactor(autofix): extract review verification runner by @qqqys in #7644
- fix(ci): don't fail triage cleanup when there is nothing to clean by @wenshao in #7688
- feat(core): Align GenAI content telemetry fields by @doudouOUC in #7667
- fix(ci): update qwen in the runner's active npm prefix by @yiliang114 in #7689
- feat(core): add Goal v3 runtime orchestration by @qqqys in #7664
- test(web-shell): capture the git-mode new-branch sub-state in the visuals suite by @wenshao in #7672
- feat(triage): stop in-agent CI polling, finalize evidence and approval after CI completes by @wenshao in #7693
- fix(acp): sweep review worktree leases at the end of each prompt turn by @wenshao in #7694
- feat(serve): expose workspace Channel management API by @qqqys in #7637
- fix(core): write a status sidecar so models stop misreading quiet background shells by @ComplexSimply in #7669
- fix(core): exit_plan_mode returns guidance error from execute() instead of permission deny by @qwen-code-dev-bot in #7673
- fix(core): tell the model when the user manually exits plan mode by @zjunothing in #7682
- fix(core): give plugins from the same repository distinct extension ids by @zjunothing in #7676
- fix(core): allow reading saved plan files without a confirmation prompt by @zjunothing in #7678
- feat(web-shell): add read-only GitHub pull requests panel by @wenshao in #7683
- fix(cli): clear stale retry error when agent auto-recovers mid-turn by @qwen-code-dev-bot in #7681
- fix(mcp): harden OAuth callback handling by @gauravyad86 in #7510
- fix(web-shell): add :focus-visible outline to GitHub PR list rows by @wenshao in #7704
- perf(cli): cache GitHub PR list in the daemon route with a 60s TTL by @wenshao in #7705
- perf(core): keep the volatile auto-memory section last in the system prompt by @DragonnZhang in #7651
- perf(web-shell): paint the composer git chip before git status completes by @wenshao in #7680
- fix(triage): resolve stage comment ids by marker at patch time, harden model injection by @wenshao in #7703
- fix(triage): resolve finalize PRs from the open-PR list, not the commit association by @wenshao in #7706
- feat(integrations): add retrieval-only external context search by @doudouOUC in #7586
- feat(review): add comment-status helper for existing-thread triage by @wenshao in #7690
- feat(review): enforce the submit-only write contract with a cleanup tripwire by @wenshao in #7691
- fix(cli): align inline math recognition by @CubeLander in #7701
- feat(serve): Hot-reload workspace trust changes by @doudouOUC in #7268
- feat(core): configure stream rate-limit retry delays by @jay666mnj in #7674
- refactor(core): assemble the system prompt through one layered builder by @DragonnZhang in #7707
- feat(stats): show generation timing metrics by @destire-mio in #7677
- fix(desktop): scale formatBytes past GB so terabyte sizes don't render as "undefined" by @chinesepowered in #7623
- fix(core): stringify const-derived enums in toOpenAPI30 by @chinesepowered in #7547
- fix(core): convert subschemas of properties named after schema keywords by @chinesepowered in #7546
- feat(channels): GitHub polling adapter with notification-as-wakeup architecture by @OrbitZore in #7632
- feat(core): configure stream rate-limit retry delays by @hogeheer499-commits in #7666
- fix: silence xterm.js parser diagnostics leaking from headless shell terminals by @mvanhorn in #7663
- fix(review): address post-merge P2 review feedback on the review skill by @wenshao in #7708
- fix(core): fire StopFailure hook on loop detection early returns by @qwen-code-dev-bot in #7592
- test(web-shell): cover restored-history pagination retries by @jay666mnj in #7657
- fix(web-shell): enable Changes and History dialogs for worktree sessions by @wenshao in #7695
- fix(cli): parse heatmapDays strictly by @VectorPeak in #7218
- fix(acp-bridge): raise live journal caps and expose as daemon config by @wenshao in #7715
- fix(web-shell): allow pin and group for secondary workspace sessions by @wenshao in #7716
- fix(review): don't overclaim a submit-gate bypass on a same-account write by @wenshao in #7718
- fix(qqbot): restore AcpBridge session loading — return input sessionId, patch catch path by @Eric-GoodBoy-Tech in #7722
- feat(skills): add overridable default-disabled state by @samuelhsin in #7357
- fix(core): prevent updates to extension-provided agents by @destire-mio in #7245
- fix(core): fall back to system rg when bundled ripgrep cannot run by @harjothkhara in #7203
- fix(core): avoid required tools in DashScope thinking by @hogeheer499-commits in #7661
- fix(channels): use username as senderId in GitHub adapter to fix allowlist gate by @OrbitZore in #7727
- feat(webui): add workspace Channel management hook by @qqqys in #7728
- fix(web-shell): parse 256-color and truecolor SGR sequences in parseAnsi by @chinesepowered in #7620
- test(cli): cover bottom-stuck virtualized list behavior by @jay666mnj in #7652
- perf(core): Lazy-load first-use dependencies by @doudouOUC in #7686
- fix(triage): only the bot's own approval counts as already approved by @wenshao in #7737
- fix(core): stop humanReadableCron naming intervals that never happen by @chinesepowered in #7529
- ci: keep the critical-audit gate honest when npm cannot answer by @wenshao in #7743
- docs(channels): Document loops and proactive delivery by @wenshao in #7628
- feat(review): redefine medium effort as a balanced verified pass by @wenshao in #7733
- feat(review): mutation-test the tests in the test-coverage pass (Agent 5) by @wenshao in #7735
- feat(review): borrow maintainer review lenses into the agent briefs by @wenshao in #7736
- feat(web-shell): persist terminal history pagination errors by @PratikWayase in #7709
- fix(cli): keep IME cursor aligned after footer updates by @water-in-stone in #7711
- fix(core): redact the plan argument from history after an approved exit_plan_mode by @zjunothing in #7197
- fix(review): correct the borrowed lenses and vacuous-test severity (follow-up to #7735/#7736) by @wenshao in #7746
- fix(core): reliably deliver manual plan-exit notices by @doudouOUC in #7744
- feat(triage): add sandboxed /verify deep-verification lane by @wenshao in #7710
- fix(review): recover bilingual register from the live PR when the plan omits the Han flag by @wenshao in #7739
- fix(cli): complete repeated skill slash commands by @Sparkle6979 in #7720
- fix(cli): handle escaped dollars around inline math by @CubeLander in #7741
- test(integration): deflake tool-control permission cases by @yiliang114 in #7725
- revert: drop the stale-base un-park recovery (#7602) by @wenshao in #7640
- perf(cli): replace comment-json settings parser by @doudouOUC in #7747
- fix(cli): show tool descriptions in multi-tool compact summaries by @ovochouovo in #7589
- fix(ci): rename triage status marker to avoid duplicate-guard collision by @yiliang114 in #7723
- fix(core): route id-less continuation chunks to a colliding tool-call opener's slot by @he-yufeng in #6981
- feat(review): give the verifier a probe capability — run a runnable claim, don't just read it by @wenshao in #7756
- feat(core): add model grade selection for subagent spawn (#7685) by @yiliang114 in #7702
- fix(autofix): answer every review thread, resolve the ones actually fixed by @wenshao in #7758
New Contributors
- @jay666mnj made their first contribution in #7674
- @harjothkhara made their first contribution in #7203
- @PratikWayase made their first contribution in #7709
- @Sparkle6979 made their first contribution in #7720
Full Changelog: v0.21.0...v0.21.0-nightly.20260727.c003e1718