Highlights
- Web Shell is now a release-ready desktop app with native lifecycle management, single-instance behavior, and automatic updates. (#8132)
- Web Shell history pagination now handles oversized turns gracefully and includes a retry button to reload failed pages without restarting sessions. (#8335)
- Forked subagents are now isolated from sibling forks, ensuring each agent accesses only its own assigned instructions and directives. (#8344)
- Chat compression now reuses the main conversation prompt cache on supported providers, reducing latency without executing tools. (#8339)
- Fixed a Windows issue where pasting sensitive extension settings like API keys was ignored by enabling multi-character paste events. (#8342)
- The /review skill now correctly follows the user's configured output language for Tip lines, saved reports, and review labels. (#8370)
Breaking Changes
No known breaking changes.
Complete Change List
Features
- The /summary command now accepts an optional path argument to save project summaries to custom locations, automatically creating parent directories if needed. (#8116) by @qwen-code-dev-bot
- Updated the review verifier to treat unverified findings as low-confidence confirmations rather than rejections, instructing it to check cited sources first. (#8346) by @wenshao
- Added the qwen review drive command to poll for service readiness and verify completion facts instead of relying on fixed sleep delays. (#8349) by @wenshao
- The daemon now resolves and reports its memory budget in /daemon/status to indicate proximity to exhaustion. (#8245) by @doudouOUC
- Added the qwen review mock-provider command to record OpenAI-compatible requests as JSONL for testing against a faithful outside world simulation. (#8355) by @wenshao
- The Web Shell is now packaged as a release-ready desktop app with native lifecycle management, single-instance behavior, and automatic updates. (#8132) by @yiliang114
- feat(serve): make sub-session concurrency caps configurable (#8341) by @wenshao
- Add a repo-hygiene skill and weekly workflow to automatically scan for and propose fixes for documentation and code quality issues. (#7908) by @ZijianZhang989
- Adjust the automated PR review timeout based on change size, allowing up to 240 minutes for large pull requests exceeding 300 lines. (#8377) by @wenshao
- Enable full Web Shell management for GitHub and GitLab channels, allowing users to configure tokens and policies without editing settings files. (#8310) by @OrbitZore
- Adds the qwen review publish-assets command to host evidence images in a user-designated repository for embedding in PR review comments. (#8351) by @wenshao
- Adds a built-in Java/JVM performance checklist to the review tool that flags correctness traps and JVM-cost defects in Java files. (#8379) by @wenshao
- feat(ci): expand code owner pool for packages/core (#8347) by @wenshao
- Introduced the experimental.sessionWorkflow setting to optionally enable Session Workflow features like Plan & Review mode and the Workflow DAG. (#8391) by @yiliang114
- Updated non-interactive CLI /goal commands to use the Goal v3 runtime, ensuring consistent state persistence and improved streaming behavior. (#8324) by @qqqys
- Added the memory.agentMaxTurns setting to configure turn limits for all managed memory agents, with 0 disabling the limit entirely. (#8171) by @tomatotomata
Bug Fixes
- Web Shell history pagination now proceeds even when a single turn exceeds the page budget, and a retry button allows reloading failed history pages without restarting the session. (#8335) by @wenshao
- The CI triage job now ensures the qwen CLI is installed before running actions to prevent redundant installations and fix fleet-wide failures on self-hosted runners. (#8337) by @yiliang114
- Mutation testing now correctly marks mutants as inconclusive instead of survived when their collocated tests failed in the unmutated baseline, preventing false positive findings. (#8345) by @wenshao
- Forked subagents can no longer see the directives of sibling forks launched in the same turn, ensuring each subagent only accesses its own assigned instructions. (#8344) by @harjothkhara
- Todo behavior outside Session Workflow views is restored to ensure agent association is opt-in and historical dependency references do not incorrectly mark plans as blocked. (#8334) by @yiliang114
- Fixed a flaky Java daemon test by accepting ERROR terminal states during session teardown races in addition to COMPLETE cancelled states. (#8354) by @wenshao
- Enabled chat compression to reuse the main conversation prompt cache when using supported providers, reducing latency without executing tools. (#8339) by @DragonnZhang
- Fixed an issue on Windows where pasting sensitive extension settings like API keys was ignored by allowing multi-character paste events. (#8342) by @DragonnZhang
- GitHub channel inbound tasks are now restart-safe, ensuring interrupted work is recovered and pending comments are retried without rerunning agents. (#8306) by @yiliang114
- Prevented malformed JSON tool responses with leaked protocol tags from reaching the UI by routing them through the existing retry path. (#8301) by @yiliang114
- Fix CI failures on older branches by correctly calculating PR file changes instead of comparing against the base branch history. (#8372) by @wenshao
- Ensure ECS runner fleets update automatically by triggering the reconciliation workflow whenever the updater logic changes on main. (#8373) by @yiliang114
- Ensure Tip lines, saved reports, and review labels in the /review skill correctly follow the user's configured output language. (#8370) by @wenshao
- Fixes qwen review run to correctly handle the QWEN_CODE_CLI environment variable when spawning child processes to ensure proper build stamping. (#8378) by @wenshao
- Enables recovery of long response streams interrupted by socket closures by distinguishing delivered output from internal reasoning steps. (#7896) by @LHMQ878
- Ensures Auto Recall hooks properly dispose of proxy dispatchers after retrieval completes to prevent resource leaks. (#8352) by @doudouOUC
- Updates review reports to clearly distinguish between tests that failed and tests that produced no results when excluding mutants due to pre-existing issues. (#8374) by @wenshao
- Downgrades findings to Suggestion severity when tests blamed on a pull request are confirmed to already fail on the merge base. (#8380) by @wenshao
- Fixed /review to deprioritize Maven generated test sources, preventing them from crowding out production Java paths in rule headings. (#8405) by @wenshao
Documentation
- docs: complete TUI keyboard shortcut reference (#8327) by @DragonnZhang
- Updated the architecture overview to reflect Qwen Code as a multi-surface monorepo, detailing CLI, ACP, and daemon execution models. (#8325) by @DragonnZhang
- Documentation now explains how to select models for chat compression and image generation, including defaults and provider requirements. (#8348) by @DragonnZhang
- Update agent documentation to include the drive and mock-provider commands and clarify how verification tests should be structured. (#8369) by @wenshao
Internal Changes
- ci: gate merges on deterministic no-AK E2E (#8313) by @yiliang114
- Made the SDK permission control end-to-end tests deterministic by scripting model responses while retaining real tool and CLI interactions. (#8302) by @yiliang114
- Automated ECS runner updates to the latest stable Qwen CLI version immediately after publish and prevented accidental downgrades to prerelease builds. (#8343) by @wenshao
- Fixed a flaky test in the extension manager that previously caused intermittent CI failures due to clock racing. (#8362) by @wenshao
- Fixed a drive test case on macOS by asserting a shell-invariant behavior instead of relying on specific bash version exit codes. (#8366) by @wenshao
- Improves the stability of acp-cron integration tests by selecting notifications based on source metadata instead of wall-clock timestamps. (#8336) by @qwen-code-dev-bot
New Contributors
- @LHMQ878 made their first contribution in #7896
- @tomatotomata made their first contribution in #8171
Full Changelog: v0.21.3...v0.21.4