npm @qwen-code/qwen-code 0.21.1
Release v0.21.1

one hour ago

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
  • fix(core): treat properties as a name map in toOpenAPI30 by @chinesepowered in #7760
  • fix(core): keep leading whitespace in gitignore patterns by @chinesepowered in #7763
  • fix(core): stop trailing slash from anchoring nested gitignore patterns by @chinesepowered in #7764
  • fix(core): keep the model name when a model id carries a variant tag by @chinesepowered in #7766
  • fix(weixin): create the account credential file already private by @chinesepowered in #7726
  • fix(core): stop rewriting backslash escapes in gitignore patterns by @chinesepowered in #7765
  • fix(core): scope the timeout veto to the fragment it appears in by @chinesepowered in #7776
  • feat(dingtalk): support outbound image delivery by @qqqys in #7698
  • feat(web-shell): allow widening sidebar up to half the window width by @wenshao in #7778
  • fix(core): decline sed patterns whose bracket expression starts with ] by @chinesepowered in #7775
  • test(serve): Add first-output latency benchmark by @doudouOUC in #7761
  • feat(core): add Goal v3 worker tools by @qqqys in #7729
  • feat(review): script-lint as a deterministic gate — compose-review reads the report, no agent by @wenshao in #7751
  • fix(web-shell): stabilize mobile voice input by @ytahdn in #7806
  • fix(test): give every E2E case a clean directory again by @wenshao in #7811
  • fix(web-shell): allow shell commands in new tasks without a session by @wenshao in #7724
  • fix(triage): carry the /verify lane's hardening across to /tmux by @wenshao in #7753
  • fix(web-shell): render task notifications as system messages by @ytahdn in #7822
  • fix(ci): add default bash shell to container jobs in qwen-triage by @qwen-code-dev-bot in #7838
  • fix(web-shell): preserve pasted text in composer by @ytahdn in #7824
  • feat(web-shell): add monitor task details by @ytahdn in #7817
  • fix(ci): add git safe.directory for container jobs by @qwen-code-dev-bot in #7843
  • fix(ci): add --init to container jobs to reap zombie processes by @qwen-code-dev-bot in #7848
  • fix(core): wait for output stream flush before settling background shells by @ComplexSimply in #7833
  • fix(scripts): retry model calls and surface degraded release notes by @he-yufeng in #7535
  • feat(web-shell): Scope voice to composer workspace by @doudouOUC in #7754
  • feat(hooks): Add submitted prompt provenance by @doudouOUC in #7762
  • fix(ci): prevent worktree cleanup from failing the verify job by @qwen-code-dev-bot in #7857
  • perf(acp): Preload providers after session creation by @doudouOUC in #7767
  • test(channels): run the feishu, weixin and qqbot suites in CI by @chinesepowered in #7853
  • feat(autofix): retry deterministic rejection once by @qqqys in #7796
  • fix(release): publish all channel packages, not just channel-base by @yiliang114 in #7845
  • feat(web-shell): add Channel management page by @qqqys in #7793
  • feat(acp): add session-scoped runtime MCP by @qqqys in #7847
  • feat(core): persist and replay Goal v3 state by @qqqys in #7815
  • feat(core): add full-resolution image zoom tool by @qqqys in #7809
  • fix(scripts): harden retry classification and preserve deadline error context by @yiliang114 in #7854
  • feat(web-shell): add composer footer renderer by @dreamWB in #7856
  • fix(core): fast-fail permanent quota-exhaustion 429s instead of silent retry by @yiliang114 in #7842
  • fix(web-shell): isolate history and session drafts by @ytahdn in #7810
  • fix(triage): retry a transient npm ci before blaming the PR for it by @wenshao in #7884
  • fix(webui): fall back to history_truncated marker recordId for transcript pagination anchor by @wenshao in #7829
  • feat: Gate session writer lease behind opt-in by @doudouOUC in #7894
  • fix(review): give the review retry the remaining time budget by @wenshao in #7852
  • fix(integration): configure Docker sandbox networking for submitted-prompt provenance test (#7879) by @qwen-code-dev-bot in #7881
  • fix(cli): report a genuine $0.00 cost instead of N/A by @chinesepowered in #7784
  • fix(core): reject socks5h and socks4a proxy URLs by @chinesepowered in #7786
  • fix(core): correct the character classes in checkContentLoop by @chinesepowered in #7788
  • fix(web-shell): make /copy with a bare index work by @chinesepowered in #7789
  • fix(core): decline combined sed flags where -i is not last by @chinesepowered in #7790
  • fix(core): pass the Grep pattern behind -e so a leading dash is not an option by @chinesepowered in #7863
  • feat(ci): Deduplicate E2E failure issues by commenting on existing issue by @yiliang114 in #7792
  • fix(core): cap a bare Error's message like every other getErrorMessage path by @chinesepowered in #7865
  • fix(cli): make wrapToVisualLines count zero-width characters like its sibling by @chinesepowered in #7873
  • fix(core): charge the separator and ellipsis to the preview budget by @chinesepowered in #7874
  • fix(cli): do not count a partial trailing line when re-opening a split fence by @chinesepowered in #7875
  • fix(cli): make /copy select the code block by @chinesepowered in #7883
  • feat(triage): add revert-pattern high-risk path detection by @yiliang114 in #7414
  • feat(web-shell): add native workspace folder picker by @qqqys in #7849
  • feat(web-shell): add Channel configuration flows by @qqqys in #7893
  • fix(test): Restore first-output benchmark measurement validity and correct its artifact schema by @doudouOUC in #7820
  • fix(daemon): harden Todo Stop Guard continuations by @doudouOUC in #7821
  • fix(core): read the stash reflog from the common git dir by @chinesepowered in #7774
  • fix(core): keep Draft 4 boolean exclusive bounds in toOpenAPI30 by @chinesepowered in #7782
  • fix(core): apply maxDepth to flat-format memory imports by @chinesepowered in #7851
  • fix(core): render a thought part's reasoning instead of the boolean flag by @chinesepowered in #7866
  • fix(core): bridge tool-result images for text-only models by @LaZzyMan in #7484
  • fix(cli): patch ink to clear staticNode on indirect subtree removal by @chiga0 in #7816
  • fix(core): auto-retry transient network errors during API calls by @chiga0 in #7898
  • fix(cli): hide stale sticky todos from previous turns by @chiga0 in #7900
  • fix(serve): Release managed session writer locks on shutdown by @doudouOUC in #7812
  • perf(core): add early Anthropic cache breakpoint on the stable system prefix by @DragonnZhang in #7912
  • fix(cli): add polling fallback for git branch name display by @qwen-code-dev-bot in #7830
  • fix(cli): remove redundant 'Read file' prefix from @mention tool card by @qwen-code-dev-bot in #7902
  • feat(core): Add ARMS session user ID by @doudouOUC in #7921
  • fix(safe-mode): preserve caller-supplied top-tier MCP servers by @VitaliBabkin in #7827
  • fix(ci): keep the post-merge E2E signal on main alive by @wenshao in #7795
  • fix(core): short-circuit the flush wait when the output stream cannot flush by @ComplexSimply in #7905
  • fix(core): track quotes inside a command substitution in splitCommands by @chinesepowered in #7870
  • fix(core): count the per-server and per-tool always-allow outcomes as approvals by @chinesepowered in #7869
  • fix(web-shell): report intended workspace to host when starting a new chat by @wenshao in #7910
  • fix(cli): default to virtualized terminal history by @ZevGit in #5738
  • fix(ci): restore workspace ownership in cleanup to prevent EACCES by @qwen-code-dev-bot in #7931
  • perf(ci): cut the E2E suite from ~40min to ~24min by @wenshao in #7798
  • feat(channels): expose loop tools in daemon sessions by @qqqys in #7891
  • fix(review): recover the resolved effort when --effort is not re-threaded by @wenshao in #7855
  • feat(web-shell): honor voice hold mode by @callmeYe in #7839
  • feat(web-shell): manage Channel pairing requests by @qqqys in #7909
  • feat(channels): dispatch GitHub notifications by reason by @yiliang114 in #7826
  • feat(web-shell): add git branch picker, commit dialog, and create PR flow by @wenshao in #7731
  • feat(triage): surface the sandboxed lanes on the CI path by @wenshao in #7917
  • fix(scripts): slim release-note model prompts and log request timing by @yiliang114 in #7941
  • feat(web-shell): suggest BTW for side questions by @carffuca in #7935
  • fix(release): pin channel-base dep to exact version during release bump by @yiliang114 in #7953
  • feat(triage): make the verify report readable in Chinese by @wenshao in #7918
  • fix(triage): make the build-process guard diagnosable and zombie-aware by @wenshao in #7858
  • fix(ci): give each job its own proxy wrapper directory by @wenshao in #7951

New Contributors

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

Don't miss a new qwen-code release

NewReleases is sending notifications on new releases.