Skip to content

Release v0.20.1

Latest

Choose a tag to compare

@qwen-code-ci-bot qwen-code-ci-bot released this 21 Jul 16:52

Highlights

See the complete change list below.

Breaking Changes

No known breaking changes.

Complete Change List

Features

  • feat(autofix): label-driven takeover and release; fix forced-dispatch green no-op (#7165) by @wenshao
  • feat(autofix): direct takeover of maintainer-fork PRs (#7213) by @wenshao
  • feat(daemon): Advertise ACP preheat readiness (#7200) by @doudouOUC
  • feat(autofix): surface the running model in every autofix report (#7226) by @wenshao
  • feat(review): retry transient API failures once; surface quota clearly (#7233) by @wenshao
  • feat(core): inspect persisted conversation branches (#7185) by @doudouOUC
  • feat(core): Route Plan-mode shell commands by safety (#7172) by @doudouOUC
  • feat(ci): auto-open a deflake fix issue for confirmed flaky tests (#7231) by @wenshao
  • feat(autofix): auto-manage the bot's own fork PRs without a label (#7243) by @wenshao
  • feat(web-shell): worktree-isolated sessions for parallel tasks (#7221) by @wenshao
  • feat(i18n): update catalan translaiton (#7253) by @jordimas
  • feat: add CODEOWNERS for core harness modules (#7304) by @pomelo-nwu
  • feat(web-shell): support custom slash command actions (#7267) by @ytahdn
  • feat(web-shell): add git commit history browser (#7204) by @wenshao
  • feat: support workspace display names (#7179) by @samuelhsin
  • feat(channels): add content-safe memory recall telemetry (#7338) by @qqqys
  • feat(daemon): restore worktree isolation on session load/resume (#7262) by @wenshao
  • feat(autofix): re-arm a stranded PR with @qwen-code /retry instead of deleting a marker (#7354) by @wenshao
  • feat(serve): make ACP initialize handshake timeout configurable (#7246) by @qwen-code-dev-bot
  • feat(autofix): pick up managed fork PRs in real time instead of waiting for the throttled schedule (#7350) by @wenshao
  • feat(autofix): resolve the review threads whose findings it implemented (#7364) by @wenshao
  • feat(autofix): render the managed fleet into the scan's run summary (#7355) by @wenshao
  • feat(core): add fork_turns to fork subagents (#7346) by @DragonnZhang
  • feat(auth): add Singapore Token Plan region (#7280) by @han-dreamer
  • feat(web-shell): surface worktree isolation in the new-session empty state (#7365) by @wenshao
  • feat(core): add opt-in built-in web_search backed by the DashScope Responses API (#7215) by @tanzhenxin
  • feat(web-shell): Add sidebar customization API for branding, navigation, session actions, and footer (#7379) by @yuanyuanAli
  • feat(autofix): raise the strict round cap from 5 to 10 (#7412) by @wenshao
  • feat(autofix): feed the gate's rejection back so the retry can fix what it broke (#7368) by @wenshao

Bug Fixes

  • fix(autofix): stage SKILL.md beside run-agent.mjs so review-address boots (P0, regression from #7165) (#7225) by @wenshao
  • fix(ci): consolidate issue triage ownership (#7180) by @yiliang114
  • fix(cli): allow goal controls during active loops (#7202) by @yiliang114
  • fix(cli): show mode indicator alongside steering hint during streaming (#7219) by @qwen-code-dev-bot
  • fix(scripts): allow multiple dev:daemon instances by probing Vite port (#7212) by @wenshao
  • fix(review): say an unread chunk once, under its cause (#7234) by @wenshao
  • fix(autofix): a no-output crash must not advance the review watermark (#7229) by @wenshao
  • fix(review): prohibit isolation param in roster output and SKILL.md (#7235) by @wenshao
  • fix(cli): align npm update checks with global registry (#7224) by @yiliang114
  • fix(test): deflake tool-control E2E content assertions (#7261) by @qwen-code-dev-bot
  • fix(sdk): abort SSE request on iterator exit to release daemon subscriber (#7257) by @chinesepowered
  • fix(core): Enforce Plan mode entry boundary (#7248) by @doudouOUC
  • fix(channels): exclude discrete ACP messages from replies (#7223) by @qwen-code-dev-bot
  • fix(ci): create remote-tracking ref for fork PRs in autofix verify gate (#7281) by @wenshao
  • fix(sdk): clean up SSE requests on errors and dispose (#7269) by @doudouOUC
  • fix(cli): repaint the TUI after OS sleep/wake or SIGCONT (#7265) by @wenshao
  • fix(mobile-mcp): restore bounds in UI hierarchy dumps (#7321) by @LaZzyMan
  • fix(test): stabilize 3 flaky tests (serve startup, usage-stats TTL, TasksStatusMessage keypress) (#7319) by @qwen-code-dev-bot
  • fix(cli): Preserve cancellation during permission prompts (#7295) by @doudouOUC
  • fix(core): estimate reasoning_tokens when completion_tokens_details is missing (#7239) by @yiliang114
  • fix(ci): tighten API error detection to avoid false positive on review prose (#7328) by @wenshao
  • fix(web-shell): localize extension tag labels (#7337) by @callmeYe
  • fix(test): stabilize list_directory E2E — accept text output when model skips tool call (#7342) by @qwen-code-dev-bot
  • fix(autofix): resolve owning package for nested paths; report verify-failed handoffs as not pushed (#7330) by @wenshao
  • fix(review): retry gh CLI on transient GitHub errors (5xx) and keyring failures (#7291) by @wenshao
  • fix(channels): deliver background agent replies (#7336) by @qwen-code-dev-bot
  • fix(web-shell): proxy extension APIs without intercepting modules (#7294) by @ytahdn
  • fix(dingtalk): retry transient emotion failures (#7329) by @qwen-code-dev-bot
  • fix(web-shell): respect voice enabled setting (#7345) by @callmeYe
  • fix(cli): map positional args to optional MCP prompt parameters (#7317) by @qwen-code-dev-bot
  • fix(cli): include typed directory in /cd tab completion (#7320) by @qwen-code-dev-bot
  • fix(review): make agent launches and cleanup resilient (#7259) by @wenshao
  • fix(ci): stop a slow patrol classifier from killing every flaky rerun (#7358) by @wenshao
  • fix(ci): tell a visuals coverage gap apart from "no visual change" (#7375) by @wenshao
  • fix: ask when Auto Mode classifier is unavailable (#7331) by @LaZzyMan
  • fix(autofix): retry a verification-gate crash instead of burying the agent's fix (#7351) by @wenshao
  • fix(core): validate goal judge terminal evidence (#7208) by @qwen-code-dev-bot
  • fix(core): hide interaction tools in plain headless mode (#7285) by @DragonnZhang
  • fix(cli): show worktree branch in status line instead of workspace branch (#7367) by @wenshao
  • fix(acp-bridge): make detachClient idempotent via per-clientId attach-ref ledger (#7386) by @doudouOUC
  • fix(autofix): refuse a non-main takeover out loud instead of only in the job log (#7382) by @wenshao
  • fix(cli): update npm installs safely in background (#7322) by @yiliang114
  • fix(core): support qwen3.8 side queries on DashScope (#7303) by @yiliang114
  • fix(autofix): retry a model API error instead of stranding the PR (#7247) by @wenshao
  • fix(ci): stop /resolve reports from being guillotined mid-sentence (#7389) by @wenshao
  • fix(web-shell): restore scheduled task reference interactions (#7313) by @BZ-D
  • fix(core): bound web-fetch post-processing and preserve fetched content on failure (#7305) by @tanzhenxin
  • fix(core): Fence concurrent ACP session writers (#7237) by @doudouOUC
  • fix(ci): serialise the two workflows that push to a PR head branch (#7392) by @wenshao
  • fix(web-shell): persist the daemon bearer token per-tab so it survives refresh (#7374) by @zjunothing
  • fix(core,cli): drain background notifications outside the subagent's ALS frame (#7194) by @zjunothing
  • fix(acp-bridge): map Windows-shaped workspace paths to their sandbox mount (#7228) by @zjunothing
  • fix(core): salvage session usage into the history before deleting transcripts (#7391) by @zjunothing
  • fix(core): clarify background agent continuation (#7300) by @DragonnZhang
  • fix(transcript): mark dangling tool history incomplete (#7340) by @cxruan
  • fix(mcp): add opt-in model payload filtering (#7413) by @LaZzyMan
  • fix(ci): tell a triage action crash apart from a silent agent (#7418) by @wenshao
  • fix(acp-bridge): guarantee exactly-once prompt terminal events in daemon serve mode (#7400) by @doudouOUC
  • fix(dingtalk): anchor @mention strip regex to start of text (#7401) by @qwen-code-dev-bot
  • fix: support context-inheriting subagents in headless mode (#7378) by @DragonnZhang
  • fix(cli): soften update-check failure UX — warning instead of error, raise timeout to 5s (#7409) by @ComplexSimply
  • fix(test): widen daemon boot timeout from 10s to 30s for docker sandbox (#7419) by @qwen-code-dev-bot
  • fix: worktree sessions unopenable in Web Shell while actively running (#7424) by @wenshao
  • fix(web-shell): restore context tags in queued and recalled prompts (#7312) by @dreamWB
  • fix(core): resolve artifact workspacePath against workspace root in worktree sessions (#7429) by @wenshao
  • fix(cli): classify nested update-check network errors (#7428) by @yiliang114
  • fix(test): pin QWEN_RUNTIME_DIR in daemon integration tests (#7439) by @wenshao
  • fix(deps): regenerate the ink@7.0.3 patch so it applies on a clean install (#7407) by @chiga0
  • fix(core): relax additionalProperties:false on the OpenAI wire for optional-field schemas (#7344) by @zjunothing
  • fix(dingtalk): cap media download size to 50MB to match feishu (#7361) by @chinesepowered
  • fix(core): allow restricted git config for extension installs (#7293) by @ytahdn
  • fix(core): Enforce final tool response budgets (#7323) by @doudouOUC
  • fix(acp): clear inherited sandboxSessionId for each new ACP session (#7443) by @wenshao

Performance

  • perf(autofix): raise fleet simultaneity from 3 to 5 (#7396) by @wenshao
  • perf(telemetry): lazy-load the SDK and split OTLP exporter chains by protocol (#7276) by @doudouOUC
  • perf(autofix): stop the feedback gate waiting on the LLM review check (#7416) by @wenshao

Documentation

Internal Changes

New Contributors

Full Changelog: v0.20.0...v0.20.1