chore(release): v0.21.7 (#8655)

* chore(release): v0.21.7

* docs(changelog): sync for v0.21.7

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
This commit is contained in:
qwen-code-ci-botandgithub-actions[bot] authored and GitHub committed 2026-08-07 00:19:20 +00:00
1 parent d5e47709a3
commit fca8f3c1f1
22 files changed
+118 -60

No files matched your search

+58
View File
@@ -12,6 +12,64 @@ are listed; nightly and preview pre-releases are intentionally omitted.
> [GitHub Releases](https://github.com/QwenLM/qwen-code/releases). Do not edit it
> by hand — run `npm run changelog` to regenerate.
## [0.21.7](https://github.com/QwenLM/qwen-code/releases/tag/v0.21.7) - 2026-08-06
### Highlights
- Removed the 50-turn limit for Goals, allowing tasks to resume and continue beyond previous boundaries. ([#8421](https://github.com/QwenLM/qwen-code/pull/8421))
- Enabled rendering inline terminal images from model outputs in the interactive CLI for Kitty, Ghostty, and chafa. ([#8305](https://github.com/QwenLM/qwen-code/pull/8305))
- Introduced a declarative manifest and command to customize review plans with repository-specific context. ([#8401](https://github.com/QwenLM/qwen-code/pull/8401))
- Fixed Live Host release signing by normalizing certificate names to match Electron Builder expectations. ([#8579](https://github.com/QwenLM/qwen-code/pull/8579))
- Prevents silent hangs in GitHub-triggered review runs by capping the total lifetime of streaming responses. ([#8602](https://github.com/QwenLM/qwen-code/pull/8602))
- Allows managed deployments to route voice transcription through specific HTTP or private-network ASR gateways. ([#8350](https://github.com/QwenLM/qwen-code/pull/8350))
### Breaking Changes
No known breaking changes.
### Complete Change List
#### Features
- Adds the security.allowedInsecureVoiceBaseUrls setting to allow managed deployments to route voice transcription through specific HTTP or private-network ASR gateways. ([#8350](https://github.com/QwenLM/qwen-code/pull/8350)) by @rockybot2026
- Enables rendering inline terminal images from model and tool outputs in the interactive CLI with support for Kitty, Ghostty, and chafa. ([#8305](https://github.com/QwenLM/qwen-code/pull/8305)) by @tlysanhuo
- Introduces a declarative .qwen/review-context.json manifest and the review repo-context command to customize review plans with repository-specific context. ([#8401](https://github.com/QwenLM/qwen-code/pull/8401)) by @wenshao
- Added observability for REST SSE connections with stable UUIDs and telemetry for stream lifecycle events including slow-client warnings and evictions. ([#8572](https://github.com/QwenLM/qwen-code/pull/8572)) by @doudouOUC
#### Bug Fixes
- Fixed the review CLI bundle to include the core package build output, ensuring verification checks run correctly in review phases. ([#8612](https://github.com/QwenLM/qwen-code/pull/8612)) by @wenshao
- Fixed Live Host release signing by normalizing the Developer ID certificate name to match Electron Builder expectations. ([#8579](https://github.com/QwenLM/qwen-code/pull/8579)) by @LaZzyMan
- Enhanced sandbox runtime selection to probe availability before use, providing clearer errors when no working runtime is found. ([#7734](https://github.com/QwenLM/qwen-code/pull/7734)) by @harjothkhara
- Fixed a race condition in autofix workflows by ensuring scan-and-pick runs execute within a single concurrency group. ([#8435](https://github.com/QwenLM/qwen-code/pull/8435)) by @wenshao
- Fixed file read permissions to resolve symbolic links before checking workspace boundaries, ensuring accurate access decisions. ([#8636](https://github.com/QwenLM/qwen-code/pull/8636)) by @doudouOUC
- Removed the fixed 50-continuation limit for Goals, allowing them to resume and continue beyond previous turn count boundaries. ([#8421](https://github.com/QwenLM/qwen-code/pull/8421)) by @qqqys
- Prevents silent hangs in GitHub-triggered /review runs by capping the total lifetime of streaming responses with the new QWEN_STREAM_MAX_LIFETIME_MS setting. ([#8602](https://github.com/QwenLM/qwen-code/pull/8602)) by @wenshao
- Updates the Web Shell sidebar branch chip immediately after a checkout to reflect the new branch name without waiting for the next poll. ([#8600](https://github.com/QwenLM/qwen-code/pull/8600)) by @wenshao
- Allows refreshing Web Shell session pages in the browser address bar without authentication errors while keeping API subpaths secured. ([#8445](https://github.com/QwenLM/qwen-code/pull/8445)) by @BZ-D
- Scopes artifact previews, downloads, and review reports to their owning workspace to prevent access issues after workspace changes. ([#8510](https://github.com/QwenLM/qwen-code/pull/8510)) by @zjunothing
- fix(cli): accept scope flags in /language ui <language> subcommands ([#8633](https://github.com/QwenLM/qwen-code/pull/8633)) by @yiliang114
- DingTalk tasks now use a single continuous status card for updates and final answers, preventing clutter and ensuring correct user mentions. ([#8565](https://github.com/QwenLM/qwen-code/pull/8565)) by @qqqys
#### Performance
- Reduces /review pipeline latency by removing unnecessary serial delays in the audit loop and verification steps. ([#8642](https://github.com/QwenLM/qwen-code/pull/8642)) by @wenshao
#### Documentation
- Added a design document for the legacy code audit skill which applies review machinery to existing merged code. ([#8397](https://github.com/QwenLM/qwen-code/pull/8397)) by @wenshao
#### Internal Changes
- Improved test reliability by using a dedicated empty directory for external-path glob tests to prevent timeouts on busy systems. ([#8604](https://github.com/QwenLM/qwen-code/pull/8604)) by @wenshao
### New Contributors
- @rockybot2026 made their first contribution in [#8350](https://github.com/QwenLM/qwen-code/pull/8350)
- @tlysanhuo made their first contribution in [#8305](https://github.com/QwenLM/qwen-code/pull/8305)
**Full Changelog**: https://github.com/QwenLM/qwen-code/compare/v0.21.6...v0.21.7
## [0.21.6](https://github.com/QwenLM/qwen-code/releases/tag/v0.21.6) - 2026-08-05
### Highlights
+30 -30
View File
@@ -1,12 +1,12 @@
{
"name": "@qwen-code/qwen-code",
"version": "0.21.6",
"version": "0.21.7",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@qwen-code/qwen-code",
"version": "0.21.6",
"version": "0.21.7",
"hasInstallScript": true,
"workspaces": [
"packages/*",
@@ -91,7 +91,7 @@
},
"integrations/external-context": {
"name": "@qwen-code/external-context",
"version": "0.21.6",
"version": "0.21.7",
"dependencies": {
"@modelcontextprotocol/sdk": "^1.30.0",
"undici": "^7.28.0",
@@ -27640,7 +27640,7 @@
},
"packages/acp-bridge": {
"name": "@qwen-code/acp-bridge",
"version": "0.21.6",
"version": "0.21.7",
"dependencies": {
"@agentclientprotocol/sdk": "^0.14.1",
"@qwen-code/qwen-code-core": "file:../core"
@@ -27655,7 +27655,7 @@
},
"packages/audio-capture": {
"name": "@qwen-code/audio-capture",
"version": "0.21.6",
"version": "0.21.7",
"hasInstallScript": true,
"dependencies": {
"node-gyp-build": "^4.8.4"
@@ -27672,7 +27672,7 @@
},
"packages/channels/base": {
"name": "@qwen-code/channel-base",
"version": "0.21.6",
"version": "0.21.7",
"dependencies": {
"@agentclientprotocol/sdk": "^0.14.1"
},
@@ -27682,9 +27682,9 @@
},
"packages/channels/dingtalk": {
"name": "@qwen-code/channel-dingtalk",
"version": "0.21.6",
"version": "0.21.7",
"dependencies": {
"@qwen-code/channel-base": "0.21.6",
"@qwen-code/channel-base": "0.21.7",
"dingtalk-stream-sdk-nodejs": "^2.0.4"
},
"devDependencies": {
@@ -27693,10 +27693,10 @@
},
"packages/channels/feishu": {
"name": "@qwen-code/channel-feishu",
"version": "0.21.6",
"version": "0.21.7",
"dependencies": {
"@larksuiteoapi/node-sdk": "^1.45.0",
"@qwen-code/channel-base": "0.21.6"
"@qwen-code/channel-base": "0.21.7"
},
"devDependencies": {
"typescript": "^5.0.0"
@@ -27704,10 +27704,10 @@
},
"packages/channels/github": {
"name": "@qwen-code/channel-github",
"version": "0.21.6",
"version": "0.21.7",
"dependencies": {
"@octokit/rest": "^21.1.1",
"@qwen-code/channel-base": "0.21.6",
"@qwen-code/channel-base": "0.21.7",
"https-proxy-agent": "^7.0.6"
},
"devDependencies": {
@@ -27716,10 +27716,10 @@
},
"packages/channels/gitlab": {
"name": "@qwen-code/channel-gitlab",
"version": "0.21.6",
"version": "0.21.7",
"dependencies": {
"@gitbeaker/rest": "^42.5.0",
"@qwen-code/channel-base": "0.21.6",
"@qwen-code/channel-base": "0.21.7",
"zod": "^3.25.0"
},
"devDependencies": {
@@ -27728,7 +27728,7 @@
},
"packages/channels/plugin-example": {
"name": "@qwen-code/channel-plugin-example",
"version": "0.21.6",
"version": "0.21.7",
"dependencies": {
"@qwen-code/channel-base": "file:../base",
"ws": "^8.18.0"
@@ -27742,9 +27742,9 @@
},
"packages/channels/qqbot": {
"name": "@qwen-code/channel-qqbot",
"version": "0.21.6",
"version": "0.21.7",
"dependencies": {
"@qwen-code/channel-base": "0.21.6",
"@qwen-code/channel-base": "0.21.7",
"@tencent-connect/qqbot-connector": "^1.1.0",
"ws": "^8.18.0"
},
@@ -27754,9 +27754,9 @@
},
"packages/channels/telegram": {
"name": "@qwen-code/channel-telegram",
"version": "0.21.6",
"version": "0.21.7",
"dependencies": {
"@qwen-code/channel-base": "0.21.6",
"@qwen-code/channel-base": "0.21.7",
"grammy": "^1.41.1",
"https-proxy-agent": "^7.0.6",
"telegram-markdown-formatter": "^0.1.2"
@@ -27767,9 +27767,9 @@
},
"packages/channels/wecom": {
"name": "@qwen-code/channel-wecom",
"version": "0.21.6",
"version": "0.21.7",
"dependencies": {
"@qwen-code/channel-base": "0.21.6",
"@qwen-code/channel-base": "0.21.7",
"@wecom/aibot-node-sdk": "^1.0.7"
},
"devDependencies": {
@@ -27778,9 +27778,9 @@
},
"packages/channels/weixin": {
"name": "@qwen-code/channel-weixin",
"version": "0.21.6",
"version": "0.21.7",
"dependencies": {
"@qwen-code/channel-base": "0.21.6"
"@qwen-code/channel-base": "0.21.7"
},
"devDependencies": {
"typescript": "^5.0.0"
@@ -27788,7 +27788,7 @@
},
"packages/chrome-extension": {
"name": "@qwen-code/chrome-bridge",
"version": "0.21.6",
"version": "0.21.7",
"license": "Apache-2.0",
"devDependencies": {
"@types/chrome": "^0.1.32",
@@ -27816,7 +27816,7 @@
},
"packages/cli": {
"name": "@qwen-code/qwen-code",
"version": "0.21.6",
"version": "0.21.7",
"dependencies": {
"@agentclientprotocol/sdk": "^0.14.1",
"@google/genai": "2.6.0",
@@ -28067,7 +28067,7 @@
},
"packages/core": {
"name": "@qwen-code/qwen-code-core",
"version": "0.21.6",
"version": "0.21.7",
"hasInstallScript": true,
"dependencies": {
"@anthropic-ai/sdk": "^0.36.1",
@@ -30946,7 +30946,7 @@
},
"packages/vscode-ide-companion": {
"name": "qwen-code-vscode-ide-companion",
"version": "0.21.6",
"version": "0.21.7",
"license": "LICENSE",
"dependencies": {
"@agentclientprotocol/sdk": "^0.14.1",
@@ -31015,7 +31015,7 @@
},
"packages/web-shell": {
"name": "@qwen-code/web-shell",
"version": "0.21.6",
"version": "0.21.7",
"dependencies": {
"@codemirror/autocomplete": "^6.18.0",
"@codemirror/commands": "^6.7.0",
@@ -31812,7 +31812,7 @@
},
"packages/web-templates": {
"name": "@qwen-code/web-templates",
"version": "0.21.6",
"version": "0.21.7",
"devDependencies": {
"@types/react": "^19.0.0",
"@types/react-dom": "^19.0.0",
@@ -32319,7 +32319,7 @@
},
"packages/webui": {
"name": "@qwen-code/webui",
"version": "0.21.6",
"version": "0.21.7",
"license": "MIT",
"dependencies": {
"@qwen-code/sdk": "file:../sdk-typescript",
+2 -2
View File
@@ -1,6 +1,6 @@
{
"name": "@qwen-code/qwen-code",
"version": "0.21.6",
"version": "0.21.7",
"engines": {
"node": ">=22.0.0"
},
@@ -26,7 +26,7 @@
"url": "git+https://github.com/QwenLM/qwen-code.git"
},
"config": {
"sandboxImageUri": "ghcr.io/qwenlm/qwen-code:0.21.6"
"sandboxImageUri": "ghcr.io/qwenlm/qwen-code:0.21.7"
},
"scripts": {
"start": "node scripts/start.js",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@qwen-code/acp-bridge",
"version": "0.21.6",
"version": "0.21.7",
"description": "Shared ACP bridge core (createHttpAcpBridge factory, BridgeClient, defaultSpawnChannelFactory, BridgeFileSystem injection seam) + primitives (EventBus, AcpChannel, in-memory channel, PermissionMediator interface) used by qwen serve, channels, IDE, TUI, and remote-control adapters.",
"repository": {
"type": "git",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@qwen-code/audio-capture",
"version": "0.21.6",
"version": "0.21.7",
"description": "Native microphone capture backend for Qwen Code voice input",
"type": "module",
"main": "dist/index.js",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@qwen-code/channel-base",
"version": "0.21.6",
"version": "0.21.7",
"description": "Base channel infrastructure for Qwen Code",
"type": "module",
"main": "dist/index.js",
+2 -2
View File
@@ -1,6 +1,6 @@
{
"name": "@qwen-code/channel-dingtalk",
"version": "0.21.6",
"version": "0.21.7",
"description": "DingTalk channel adapter for Qwen Code",
"type": "module",
"main": "dist/index.js",
@@ -20,7 +20,7 @@
"test:ci": "vitest run"
},
"dependencies": {
"@qwen-code/channel-base": "0.21.6",
"@qwen-code/channel-base": "0.21.7",
"dingtalk-stream-sdk-nodejs": "^2.0.4"
},
"devDependencies": {
+2 -2
View File
@@ -1,6 +1,6 @@
{
"name": "@qwen-code/channel-feishu",
"version": "0.21.6",
"version": "0.21.7",
"description": "Feishu (Lark) channel adapter for Qwen Code",
"type": "module",
"main": "dist/index.js",
@@ -20,7 +20,7 @@
"test:ci": "vitest run"
},
"dependencies": {
"@qwen-code/channel-base": "0.21.6",
"@qwen-code/channel-base": "0.21.7",
"@larksuiteoapi/node-sdk": "^1.45.0"
},
"devDependencies": {
+2 -2
View File
@@ -1,6 +1,6 @@
{
"name": "@qwen-code/channel-github",
"version": "0.21.6",
"version": "0.21.7",
"description": "GitHub polling channel adapter for Qwen Code",
"type": "module",
"main": "dist/index.js",
@@ -20,7 +20,7 @@
"test:ci": "vitest run"
},
"dependencies": {
"@qwen-code/channel-base": "0.21.6",
"@qwen-code/channel-base": "0.21.7",
"@octokit/rest": "^21.1.1",
"https-proxy-agent": "^7.0.6"
},
+2 -2
View File
@@ -1,6 +1,6 @@
{
"name": "@qwen-code/channel-gitlab",
"version": "0.21.6",
"version": "0.21.7",
"description": "GitLab polling channel adapter for Qwen Code",
"type": "module",
"main": "dist/index.js",
@@ -21,7 +21,7 @@
},
"dependencies": {
"@gitbeaker/rest": "^42.5.0",
"@qwen-code/channel-base": "0.21.6",
"@qwen-code/channel-base": "0.21.7",
"zod": "^3.25.0"
},
"devDependencies": {
@@ -1,6 +1,6 @@
{
"name": "@qwen-code/channel-plugin-example",
"version": "0.21.6",
"version": "0.21.7",
"private": true,
"type": "module",
"main": "dist/index.js",
+2 -2
View File
@@ -1,6 +1,6 @@
{
"name": "@qwen-code/channel-qqbot",
"version": "0.21.6",
"version": "0.21.7",
"description": "QQ Bot (QQ机器人) channel adapter for Qwen Code",
"type": "module",
"main": "dist/index.js",
@@ -20,7 +20,7 @@
"test:ci": "vitest run"
},
"dependencies": {
"@qwen-code/channel-base": "0.21.6",
"@qwen-code/channel-base": "0.21.7",
"@tencent-connect/qqbot-connector": "^1.1.0",
"ws": "^8.18.0"
},
+2 -2
View File
@@ -1,6 +1,6 @@
{
"name": "@qwen-code/channel-telegram",
"version": "0.21.6",
"version": "0.21.7",
"description": "Telegram channel adapter for Qwen Code",
"type": "module",
"main": "dist/index.js",
@@ -20,7 +20,7 @@
"test:ci": "vitest run"
},
"dependencies": {
"@qwen-code/channel-base": "0.21.6",
"@qwen-code/channel-base": "0.21.7",
"grammy": "^1.41.1",
"https-proxy-agent": "^7.0.6",
"telegram-markdown-formatter": "^0.1.2"
+2 -2
View File
@@ -1,6 +1,6 @@
{
"name": "@qwen-code/channel-wecom",
"version": "0.21.6",
"version": "0.21.7",
"description": "WeCom channel adapter for Qwen Code",
"type": "module",
"main": "dist/index.js",
@@ -20,7 +20,7 @@
"test:ci": "vitest run"
},
"dependencies": {
"@qwen-code/channel-base": "0.21.6",
"@qwen-code/channel-base": "0.21.7",
"@wecom/aibot-node-sdk": "^1.0.7"
},
"devDependencies": {
+2 -2
View File
@@ -1,6 +1,6 @@
{
"name": "@qwen-code/channel-weixin",
"version": "0.21.6",
"version": "0.21.7",
"description": "WeChat (Weixin) channel adapter for Qwen Code",
"type": "module",
"main": "dist/index.js",
@@ -28,7 +28,7 @@
"test:ci": "vitest run"
},
"dependencies": {
"@qwen-code/channel-base": "0.21.6"
"@qwen-code/channel-base": "0.21.7"
},
"devDependencies": {
"typescript": "^5.0.0"
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@qwen-code/chrome-bridge",
"version": "0.21.6",
"version": "0.21.7",
"description": "Chrome extension bridge for Qwen CLI - enables AI-powered browser interactions",
"private": true,
"repository": {
+2 -2
View File
@@ -1,6 +1,6 @@
{
"name": "@qwen-code/qwen-code",
"version": "0.21.6",
"version": "0.21.7",
"description": "Qwen Code",
"repository": {
"type": "git",
@@ -37,7 +37,7 @@
"dist"
],
"config": {
"sandboxImageUri": "ghcr.io/qwenlm/qwen-code:0.21.6"
"sandboxImageUri": "ghcr.io/qwenlm/qwen-code:0.21.7"
},
"dependencies": {
"@agentclientprotocol/sdk": "^0.14.1",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@qwen-code/qwen-code-core",
"version": "0.21.6",
"version": "0.21.7",
"description": "Qwen Code Core",
"repository": {
"type": "git",
+1 -1
View File
@@ -2,7 +2,7 @@
"name": "qwen-code-vscode-ide-companion",
"displayName": "Qwen Code Companion",
"description": "Enable Qwen Code with direct access to your VS Code workspace.",
"version": "0.21.6",
"version": "0.21.7",
"publisher": "qwenlm",
"icon": "assets/icon.png",
"repository": {
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@qwen-code/web-shell",
"version": "0.21.6",
"version": "0.21.7",
"type": "module",
"main": "./dist/index.js",
"module": "./dist/index.js",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@qwen-code/web-templates",
"version": "0.21.6",
"version": "0.21.7",
"description": "Web templates bundled as embeddable JS/CSS strings",
"repository": {
"type": "git",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@qwen-code/webui",
"version": "0.21.6",
"version": "0.21.7",
"description": "Shared UI components for Qwen Code packages",
"type": "module",
"main": "./dist/index.cjs",