Skip to content

Release v0.21.1

Latest

Choose a tag to compare

@qwen-code-ci-bot qwen-code-ci-bot released this 28 Jul 17:52

Highlights

See the complete change list below.

Breaking Changes

No known breaking changes.

Complete Change List

Features

  • feat(core): Align GenAI content telemetry fields (#7667) by @doudouOUC
  • feat(core): add Goal v3 runtime orchestration (#7664) by @qqqys
  • feat(triage): stop in-agent CI polling, finalize evidence and approval after CI completes (#7693) by @wenshao
  • feat(serve): expose workspace Channel management API (#7637) by @qqqys
  • feat(web-shell): add read-only GitHub pull requests panel (#7683) by @wenshao
  • Adds a retrieval-only context_search tool for external corpora, configured by administrators without automatic recall or write capabilities. (#7586) by @doudouOUC
  • Introduces the qwen review comment-status subcommand to quickly triage existing inline comments and reduce API calls during review runs. (#7690) by @wenshao
  • Enforces a strict write contract for review submissions and adds a tripwire to detect and flag any bypass attempts via terminal commands. (#7691) by @wenshao
  • Enables hot-reloading of workspace trust changes in the running daemon, applying new policies immediately without requiring a process restart. (#7268) by @doudouOUC
  • Adds retryInitialDelayMs and retryMaxDelayMs settings to configure stream-side rate-limit retry delays for better provider compatibility. (#7674) by @jay666mnj
  • Updates the /stats command and Session tab to display generation timing metrics including TTFT, duration, output tokens, and TPS. (#7677) by @destire-mio
  • Adds a GitHub channel adapter that polls notifications and responds to mentions by posting comments using a signal-based wakeup architecture. (#7632) by @OrbitZore
  • Adds optional retryInitialDelayMs and retryMaxDelayMs settings to configure SSE stream rate-limit retry delays for specific provider quota windows. (#7666) by @hogeheer499-commits
  • Introduces an overridable default-disabled state for skills, allowing soft defaults that yield to explicit enablement while hard disables remain absolute. (#7357) by @samuelhsin
  • feat(webui): add workspace Channel management hook (#7728) by @qqqys
  • feat(review): redefine medium effort as a balanced verified pass (#7733) by @wenshao
  • feat(review): mutation-test the tests in the test-coverage pass (Agent 5) (#7735) by @wenshao
  • feat(review): borrow maintainer review lenses into the agent briefs (#7736) by @wenshao
  • feat(web-shell): persist terminal history pagination errors (#7709) by @PratikWayase
  • feat(triage): add sandboxed /verify deep-verification lane (#7710) by @wenshao
  • feat(review): give the verifier a probe capability — run a runnable claim, don't just read it (#7756) by @wenshao
  • feat(core): add model grade selection for subagent spawn (#7685) (#7702) by @yiliang114
  • feat(dingtalk): support outbound image delivery (#7698) by @qqqys
  • feat(web-shell): allow widening sidebar up to half the window width (#7778) by @wenshao
  • feat(core): add Goal v3 worker tools (#7729) by @qqqys
  • feat(review): script-lint as a deterministic gate — compose-review reads the report, no agent (#7751) by @wenshao
  • feat(web-shell): add monitor task details (#7817) by @ytahdn
  • feat(web-shell): Scope voice to composer workspace (#7754) by @doudouOUC
  • feat(hooks): Add submitted prompt provenance (#7762) by @doudouOUC
  • feat(autofix): retry deterministic rejection once (#7796) by @qqqys
  • feat(web-shell): add Channel management page (#7793) by @qqqys
  • feat(acp): add session-scoped runtime MCP (#7847) by @qqqys
  • feat(core): persist and replay Goal v3 state (#7815) by @qqqys
  • feat(core): add full-resolution image zoom tool (#7809) by @qqqys
  • feat(web-shell): add composer footer renderer (#7856) by @dreamWB
  • feat: Gate session writer lease behind opt-in (#7894) by @doudouOUC
  • feat(ci): Deduplicate E2E failure issues by commenting on existing issue (#7792) by @yiliang114
  • feat(triage): add revert-pattern high-risk path detection (#7414) by @yiliang114
  • feat(web-shell): add native workspace folder picker (#7849) by @qqqys
  • feat(web-shell): add Channel configuration flows (#7893) by @qqqys
  • feat(core): Add ARMS session user ID (#7921) by @doudouOUC
  • feat(channels): expose loop tools in daemon sessions (#7891) by @qqqys
  • feat(web-shell): honor voice hold mode (#7839) by @callmeYe
  • feat(web-shell): manage Channel pairing requests (#7909) by @qqqys
  • feat(channels): dispatch GitHub notifications by reason (#7826) by @yiliang114
  • feat(web-shell): add git branch picker, commit dialog, and create PR flow (#7731) by @wenshao
  • feat(triage): surface the sandboxed lanes on the CI path (#7917) by @wenshao
  • feat(web-shell): suggest BTW for side questions (#7935) by @carffuca
  • feat(triage): make the verify report readable in Chinese (#7918) by @wenshao

Bug Fixes

  • fix(cli): measure insight days and hours in local time everywhere (#7670) by @ComplexSimply
  • fix(ci): don't fail triage cleanup when there is nothing to clean (#7688) by @wenshao
  • fix(ci): update qwen in the runner's active npm prefix (#7689) by @yiliang114
  • fix(acp): sweep review worktree leases at the end of each prompt turn (#7694) by @wenshao
  • fix(core): write a status sidecar so models stop misreading quiet background shells (#7669) by @ComplexSimply
  • fix(core): exit_plan_mode returns guidance error from execute() instead of permission deny (#7673) by @qwen-code-dev-bot
  • fix(core): tell the model when the user manually exits plan mode (#7682) by @zjunothing
  • fix(core): give plugins from the same repository distinct extension ids (#7676) by @zjunothing
  • fix(core): allow reading saved plan files without a confirmation prompt (#7678) by @zjunothing
  • fix(cli): clear stale retry error when agent auto-recovers mid-turn (#7681) by @qwen-code-dev-bot
  • fix(mcp): harden OAuth callback handling (#7510) by @gauravyad86
  • fix(web-shell): add :focus-visible outline to GitHub PR list rows (#7704) by @wenshao
  • fix(triage): resolve stage comment ids by marker at patch time, harden model injection (#7703) by @wenshao
  • fix(triage): resolve finalize PRs from the open-PR list, not the commit association (#7706) by @wenshao
  • Fixes inline math recognition to correctly handle single-character expressions, escaped dollars, and code spans across prose and tables. (#7701) by @CubeLander
  • Fixes desktop file size display to correctly render terabyte and larger values instead of showing undefined for huge files. (#7623) by @chinesepowered
  • Ensures const-derived enums are correctly stringified during OpenAPI 3.0 conversion to meet strict schema requirements. (#7547) by @chinesepowered
  • Fixes schema conversion to properly handle nested objects even when property names match JSON Schema constraint keywords like maximum. (#7546) by @chinesepowered
  • Silences xterm.js parser diagnostic logs in headless shell terminals to prevent error messages from leaking when commands emit invalid ANSI escape sequences. (#7663) by @mvanhorn
  • Hardens the review skill by declaring the optional host argument in CommentStatusArgs and improving error handling for authentication or network failures. (#7708) by @wenshao
  • Ensures StopFailure hooks fire correctly when loop detection triggers an early return during the streaming loop instead of only on API errors. (#7592) by @qwen-code-dev-bot
  • Enables the Changes and History dialogs for worktree sessions in the Web Shell by threading the correct git working directory through the entire stack. (#7695) by @wenshao
  • Strictly parses the heatmapDays query parameter to reject malformed values like negative numbers or decimals, falling back to the default instead of clamping invalid input. (#7218) by @VectorPeak
  • Raises default live journal caps to 10,000 events and 8 MiB while exposing --max-journal-events and --max-journal-bytes flags for configuration. (#7715) by @wenshao
  • Allows pinning and grouping secondary workspace sessions in the Web Shell sidebar without requiring the workspace to be locked first. (#7716) by @wenshao
  • Corrects the review submit-gate audit to avoid falsely claiming a bypass when detecting valid same-account writes from other sources like triage bots. (#7718) by @wenshao
  • Fixes QQ Bot session restoration by returning the input session ID from AcpBridge and ensuring session patching runs even when validation fails. (#7722) by @Eric-GoodBoy-Tech
  • fix(core): prevent updates to extension-provided agents (#7245) by @destire-mio
  • fix(core): fall back to system rg when bundled ripgrep cannot run (#7203) by @harjothkhara
  • fix(core): avoid required tools in DashScope thinking (#7661) by @hogeheer499-commits
  • fix(channels): use username as senderId in GitHub adapter to fix allowlist gate (#7727) by @OrbitZore
  • fix(web-shell): parse 256-color and truecolor SGR sequences in parseAnsi (#7620) by @chinesepowered
  • fix(triage): only the bot's own approval counts as already approved (#7737) by @wenshao
  • fix(core): stop humanReadableCron naming intervals that never happen (#7529) by @chinesepowered
  • fix(cli): keep IME cursor aligned after footer updates (#7711) by @water-in-stone
  • fix(core): redact the plan argument from history after an approved exit_plan_mode (#7197) by @zjunothing
  • fix(review): correct the borrowed lenses and vacuous-test severity (follow-up to #7735/#7736) (#7746) by @wenshao
  • fix(core): reliably deliver manual plan-exit notices (#7744) by @doudouOUC
  • fix(review): recover bilingual register from the live PR when the plan omits the Han flag (#7739) by @wenshao
  • fix(cli): complete repeated skill slash commands (#7720) by @Sparkle6979
  • fix(cli): handle escaped dollars around inline math (#7741) by @CubeLander
  • fix(cli): show tool descriptions in multi-tool compact summaries (#7589) by @ovochouovo
  • fix(ci): rename triage status marker to avoid duplicate-guard collision (#7723) by @yiliang114
  • fix(core): route id-less continuation chunks to a colliding tool-call opener's slot (#6981) by @he-yufeng
  • fix(autofix): answer every review thread, resolve the ones actually fixed (#7758) by @wenshao
  • fix(core): treat properties as a name map in toOpenAPI30 (#7760) by @chinesepowered
  • fix(core): keep leading whitespace in gitignore patterns (#7763) by @chinesepowered
  • fix(core): stop trailing slash from anchoring nested gitignore patterns (#7764) by @chinesepowered
  • fix(core): keep the model name when a model id carries a variant tag (#7766) by @chinesepowered
  • fix(weixin): create the account credential file already private (#7726) by @chinesepowered
  • fix(core): stop rewriting backslash escapes in gitignore patterns (#7765) by @chinesepowered
  • fix(core): scope the timeout veto to the fragment it appears in (#7776) by @chinesepowered
  • fix(core): decline sed patterns whose bracket expression starts with ] (#7775) by @chinesepowered
  • fix(web-shell): stabilize mobile voice input (#7806) by @ytahdn
  • fix(test): give every E2E case a clean directory again (#7811) by @wenshao
  • fix(web-shell): allow shell commands in new tasks without a session (#7724) by @wenshao
  • fix(triage): carry the /verify lane's hardening across to /tmux (#7753) by @wenshao
  • fix(web-shell): render task notifications as system messages (#7822) by @ytahdn
  • fix(ci): add default bash shell to container jobs in qwen-triage (#7838) by @qwen-code-dev-bot
  • fix(web-shell): preserve pasted text in composer (#7824) by @ytahdn
  • fix(ci): add git safe.directory for container jobs (#7843) by @qwen-code-dev-bot
  • fix(ci): add --init to container jobs to reap zombie processes (#7848) by @qwen-code-dev-bot
  • fix(core): wait for output stream flush before settling background shells (#7833) by @ComplexSimply
  • fix(scripts): retry model calls and surface degraded release notes (#7535) by @he-yufeng
  • fix(ci): prevent worktree cleanup from failing the verify job (#7857) by @qwen-code-dev-bot
  • fix(release): publish all channel packages, not just channel-base (#7845) by @yiliang114
  • fix(scripts): harden retry classification and preserve deadline error context (#7854) by @yiliang114
  • fix(core): fast-fail permanent quota-exhaustion 429s instead of silent retry (#7842) by @yiliang114
  • fix(web-shell): isolate history and session drafts (#7810) by @ytahdn
  • fix(triage): retry a transient npm ci before blaming the PR for it (#7884) by @wenshao
  • fix(webui): fall back to history_truncated marker recordId for transcript pagination anchor (#7829) by @wenshao
  • fix(review): give the review retry the remaining time budget (#7852) by @wenshao
  • fix(integration): configure Docker sandbox networking for submitted-prompt provenance test (#7879) (#7881) by @qwen-code-dev-bot
  • fix(cli): report a genuine $0.00 cost instead of N/A (#7784) by @chinesepowered
  • fix(core): reject socks5h and socks4a proxy URLs (#7786) by @chinesepowered
  • fix(core): correct the character classes in checkContentLoop (#7788) by @chinesepowered
  • fix(web-shell): make /copy with a bare index work (#7789) by @chinesepowered
  • fix(core): decline combined sed flags where -i is not last (#7790) by @chinesepowered
  • fix(core): pass the Grep pattern behind -e so a leading dash is not an option (#7863) by @chinesepowered
  • fix(core): cap a bare Error's message like every other getErrorMessage path (#7865) by @chinesepowered
  • fix(cli): make wrapToVisualLines count zero-width characters like its sibling (#7873) by @chinesepowered
  • fix(core): charge the separator and ellipsis to the preview budget (#7874) by @chinesepowered
  • fix(cli): do not count a partial trailing line when re-opening a split fence (#7875) by @chinesepowered
  • fix(cli): make /copy select the code block (#7883) by @chinesepowered
  • fix(test): Restore first-output benchmark measurement validity and correct its artifact schema (#7820) by @doudouOUC
  • fix(daemon): harden Todo Stop Guard continuations (#7821) by @doudouOUC
  • fix(core): read the stash reflog from the common git dir (#7774) by @chinesepowered
  • fix(core): keep Draft 4 boolean exclusive bounds in toOpenAPI30 (#7782) by @chinesepowered
  • fix(core): apply maxDepth to flat-format memory imports (#7851) by @chinesepowered
  • fix(core): render a thought part's reasoning instead of the boolean flag (#7866) by @chinesepowered
  • fix(core): bridge tool-result images for text-only models (#7484) by @LaZzyMan
  • fix(cli): patch ink to clear staticNode on indirect subtree removal (#7816) by @chiga0
  • fix(core): auto-retry transient network errors during API calls (#7898) by @chiga0
  • fix(cli): hide stale sticky todos from previous turns (#7900) by @chiga0
  • fix(serve): Release managed session writer locks on shutdown (#7812) by @doudouOUC
  • fix(cli): add polling fallback for git branch name display (#7830) by @qwen-code-dev-bot
  • fix(cli): remove redundant 'Read file' prefix from @mention tool card (#7902) by @qwen-code-dev-bot
  • fix(safe-mode): preserve caller-supplied top-tier MCP servers (#7827) by @VitaliBabkin
  • fix(ci): keep the post-merge E2E signal on main alive (#7795) by @wenshao
  • fix(core): short-circuit the flush wait when the output stream cannot flush (#7905) by @ComplexSimply
  • fix(core): track quotes inside a command substitution in splitCommands (#7870) by @chinesepowered
  • fix(core): count the per-server and per-tool always-allow outcomes as approvals (#7869) by @chinesepowered
  • fix(web-shell): report intended workspace to host when starting a new chat (#7910) by @wenshao
  • fix(cli): default to virtualized terminal history (#5738) by @ZevGit
  • fix(ci): restore workspace ownership in cleanup to prevent EACCES (#7931) by @qwen-code-dev-bot
  • fix(review): recover the resolved effort when --effort is not re-threaded (#7855) by @wenshao
  • fix(scripts): slim release-note model prompts and log request timing (#7941) by @yiliang114
  • fix(release): pin channel-base dep to exact version during release bump (#7953) by @yiliang114
  • fix(triage): make the build-process guard diagnosable and zombie-aware (#7858) by @wenshao
  • fix(ci): give each job its own proxy wrapper directory (#7951) by @wenshao

Performance

  • perf(cli): cache GitHub PR list in the daemon route with a 60s TTL (#7705) by @wenshao
  • perf(core): keep the volatile auto-memory section last in the system prompt (#7651) by @DragonnZhang
  • perf(web-shell): paint the composer git chip before git status completes (#7680) by @wenshao
  • perf(core): Lazy-load first-use dependencies (#7686) by @doudouOUC
  • perf(cli): replace comment-json settings parser (#7747) by @doudouOUC
  • perf(acp): Preload providers after session creation (#7767) by @doudouOUC
  • perf(core): add early Anthropic cache breakpoint on the stable system prefix (#7912) by @DragonnZhang
  • perf(ci): cut the E2E suite from ~40min to ~24min (#7798) by @wenshao

Documentation

  • docs(channels): Document loops and proactive delivery (#7628) by @wenshao

Internal Changes

  • refactor(autofix): extract review verification runner (#7644) by @qqqys
  • test(web-shell): capture the git-mode new-branch sub-state in the visuals suite (#7672) by @wenshao
  • Refactors system prompt assembly into a layered builder to explicitly manage stable, context, and volatile instruction layers. (#7707) by @DragonnZhang
  • Adds regression tests to verify that restored-session transcript pagination correctly URL-encodes boundaries and preserves state during retry attempts. (#7657) by @jay666mnj
  • test(cli): cover bottom-stuck virtualized list behavior (#7652) by @jay666mnj
  • ci: keep the critical-audit gate honest when npm cannot answer (#7743) by @wenshao
  • test(integration): deflake tool-control permission cases (#7725) by @yiliang114
  • revert: drop the stale-base un-park recovery (#7602) (#7640) by @wenshao
  • test(serve): Add first-output latency benchmark (#7761) by @doudouOUC
  • test(channels): run the feishu, weixin and qqbot suites in CI (#7853) by @chinesepowered

New Contributors

Full Changelog: v0.21.0...v0.21.1