diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index a0b0365ac9..0bd54b2443 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -431,6 +431,36 @@ jobs: --generate-notes \ ${PRERELEASE_FLAG} + - name: 'Regenerate CHANGELOG.md' + # Stable releases only: nightly/preview ship daily and would drown out + # the changelog. The just-created GitHub Release is already queryable, + # so the generator picks it up. The release branch was already pushed + # above, so push this follow-up commit too — otherwise the PR opened + # below (whose head is the remote branch) would not include it. + # + # Non-blocking by design: the only realistic failures are transient + # (the gh API read or the git push). The changelog is rebuilt from the + # full release history on every run, so a skipped update self-heals on + # the next stable release — never worth blocking the version-bump PR to + # main that follows. + if: |- + ${{ needs.prepare.outputs.is_dry_run == 'false' && needs.prepare.outputs.is_nightly == 'false' && needs.prepare.outputs.is_preview == 'false' }} + continue-on-error: true + env: + GH_TOKEN: '${{ secrets.GITHUB_TOKEN }}' + RELEASE_TAG: '${{ needs.prepare.outputs.release_tag }}' + BRANCH_NAME: '${{ steps.release_branch.outputs.BRANCH_NAME }}' + run: |- + set -euo pipefail + node scripts/generate-changelog.js + git add CHANGELOG.md + if git diff --cached --quiet -- CHANGELOG.md; then + echo "CHANGELOG.md already up to date." + else + git commit -m "docs(changelog): sync for ${RELEASE_TAG}" + git push origin "${BRANCH_NAME}" + fi + - name: 'Create PR to merge release branch into main' if: |- ${{ needs.prepare.outputs.is_dry_run == 'false' && needs.prepare.outputs.is_nightly == 'false' && needs.prepare.outputs.is_preview == 'false' }} @@ -448,7 +478,7 @@ jobs: --base main \ --head "${RELEASE_BRANCH}" \ --title "chore(release): ${RELEASE_TAG}" \ - --body "Automated release PR for ${RELEASE_TAG}. Syncs package.json versions on main.")" + --body "Automated release PR for ${RELEASE_TAG}. Syncs package.json versions and CHANGELOG.md on main.")" fi echo "PR_URL=${pr_url}" >> "${GITHUB_OUTPUT}" diff --git a/.prettierignore b/.prettierignore index 5e9d79005c..2f1018fda9 100644 --- a/.prettierignore +++ b/.prettierignore @@ -13,6 +13,8 @@ *.tsbuildinfo *.vsix bower_components +# Generated by scripts/generate-changelog.js — do not hand-format. +CHANGELOG.md eslint.config.js **/generated gha-creds-*.json diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000000..616c0ab395 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,2356 @@ +# Changelog + +All notable changes to [Qwen Code](https://github.com/QwenLM/qwen-code) are +documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), +and the project follows +[Semantic Versioning](https://semver.org/spec/v2.0.0.html). Only stable releases +are listed; nightly and preview pre-releases are intentionally omitted. + +> **This file is generated automatically** from +> [GitHub Releases](https://github.com/QwenLM/qwen-code/releases). Do not edit it +> by hand — run `npm run changelog` to regenerate. + +## [0.17.1](https://github.com/QwenLM/qwen-code/releases/tag/v0.17.1) - 2026-06-03 + +### Added + +- core: add memory pressure monitor ([#4403](https://github.com/QwenLM/qwen-code/pull/4403)) +- cli: Add settings JSON corrupted warning dialog ([#4560](https://github.com/QwenLM/qwen-code/pull/4560)) +- cli: add respectUserColors and hideContextIndicator options for statusline ([#4670](https://github.com/QwenLM/qwen-code/pull/4670)) +- cli: notify when background shells finish ([#4355](https://github.com/QwenLM/qwen-code/pull/4355)) +- core: add simplify bundled skill ([#3570](https://github.com/QwenLM/qwen-code/pull/3570)) +- skills: add agent reproduction workflows ([#4118](https://github.com/QwenLM/qwen-code/pull/4118)) +- cli: virtual viewport for long conversations on ink 7 ([#4146](https://github.com/QwenLM/qwen-code/pull/4146)) +- cli: background housekeeping for stale file-history dirs ([#4414](https://github.com/QwenLM/qwen-code/pull/4414)) +- core: inject context env vars (session/agent/prompt ID) into shell subprocesses ([#4649](https://github.com/QwenLM/qwen-code/pull/4649)) +- core: auto-dump memory diagnostics to disk on pressure detection ([#4654](https://github.com/QwenLM/qwen-code/pull/4654)) +- core: atomic write rollout for credentials, memory, config, JSONL (closes #3681, #4095 Phase 2) ([#4333](https://github.com/QwenLM/qwen-code/pull/4333)) +- cli: Add searchable MiniMax-M3 model setup ([#4668](https://github.com/QwenLM/qwen-code/pull/4668)) +- core,cli: auto-compact follow-up — /compress instructions, PreCompact hook plumb, plan/subagent attachments ([#4688](https://github.com/QwenLM/qwen-code/pull/4688)) +- input: move physical cursor to visual cursor for IME input ([#4652](https://github.com/QwenLM/qwen-code/pull/4652)) +- core: add post tool batch hooks ([#4454](https://github.com/QwenLM/qwen-code/pull/4454)) +- prompt: deduplicate tool guidance between system prompt and tool descriptions ([#4569](https://github.com/QwenLM/qwen-code/pull/4569)) +- cli: add CPU profiling support for Chrome DevTools analysis ([#4620](https://github.com/QwenLM/qwen-code/pull/4620)) +- prompt: enhance system prompts with global reasoning discipline and iterative planning ([#4436](https://github.com/QwenLM/qwen-code/pull/4436)) +- subagent: add fork subagent feature gate and "Don't peek / Don't race" prompt discipline ([#4574](https://github.com/QwenLM/qwen-code/pull/4574)) +- core: strengthen system prompts for reading code before editing, dedicated tool priority, and step-by-step communication ([#4375](https://github.com/QwenLM/qwen-code/pull/4375)) +- skills: add triage skill for issue/PR gatekeeping ([#4577](https://github.com/QwenLM/qwen-code/pull/4577)) +- computer-use: use @qwen-code/open-computer-use fork (signed + notarized) ([#4726](https://github.com/QwenLM/qwen-code/pull/4726)) + +### Changed + +- cli: rename "Default" approval mode to "Ask permissions" (#4625) ([#4674](https://github.com/QwenLM/qwen-code/pull/4674)) + +### Fixed + +- rewind: false "compressed turn" error when mid-turn messages exist ([#4580](https://github.com/QwenLM/qwen-code/pull/4580)) +- core: emit enable_thinking on DashScope when reasoning is disabled ([#4505](https://github.com/QwenLM/qwen-code/pull/4505)) +- core: surface Anthropic empty stream provider errors ([#4540](https://github.com/QwenLM/qwen-code/pull/4540)) +- core: guard oversized resumed history sends ([#4531](https://github.com/QwenLM/qwen-code/pull/4531)) +- cli: stabilize statusline preset ordering ([#4634](https://github.com/QwenLM/qwen-code/pull/4634)) +- config: load home .env vars before settings ${VAR} resolution (#4466) ([#4474](https://github.com/QwenLM/qwen-code/pull/4474)) +- acp: drop discontinued Qwen OAuth method ([#4639](https://github.com/QwenLM/qwen-code/pull/4639)) +- core: enforce adjacent tool results ([#4622](https://github.com/QwenLM/qwen-code/pull/4622)) +- cli: hide completed sticky todos ([#4635](https://github.com/QwenLM/qwen-code/pull/4635)) +- core: harden context error text collection ([#4632](https://github.com/QwenLM/qwen-code/pull/4632)) +- core: apply output language to side queries ([#4636](https://github.com/QwenLM/qwen-code/pull/4636)) +- cli: persist /memory toggle state across dialog reopen ([#4650](https://github.com/QwenLM/qwen-code/pull/4650)) +- docs: Hide internal docs from docs site ([#4357](https://github.com/QwenLM/qwen-code/pull/4357)) +- core: preserve uid in atomicWriteFile to avoid breaking shared-write files ([#4431](https://github.com/QwenLM/qwen-code/pull/4431)) +- cli: use session channel when closing ACP sessions ([#4522](https://github.com/QwenLM/qwen-code/pull/4522)) +- core,cli: replace full-history structuredClone with shallow/tail variants to prevent OOM on resume ([#4644](https://github.com/QwenLM/qwen-code/pull/4644)) +- core: tolerate unsupported Streamable HTTP GET SSE ([#4521](https://github.com/QwenLM/qwen-code/pull/4521)) +- insight: Harden insight facet normalization and empty qualitative handling ([#3557](https://github.com/QwenLM/qwen-code/pull/3557)) +- core: loosen auto-mode classifier timeouts, disable stage-2 thinking ([#4680](https://github.com/QwenLM/qwen-code/pull/4680)) +- core: coerce hostile-provider usage token counts (#4350 part 1) ([#4439](https://github.com/QwenLM/qwen-code/pull/4439)) +- cli: honor list extensions flag ([#4673](https://github.com/QwenLM/qwen-code/pull/4673)) +- ui: distinguish auto approval mode indicators ([#4600](https://github.com/QwenLM/qwen-code/pull/4600)) +- core: disable undici 300s bodyTimeout for no-proxy Node.js path ([#4605](https://github.com/QwenLM/qwen-code/pull/4605)) +- cli: suppress completion menu for history-restored text until edited ([#4558](https://github.com/QwenLM/qwen-code/pull/4558)) +- cli: statusline not re-rendering when switching from preset to command type ([#4706](https://github.com/QwenLM/qwen-code/pull/4706)) +- cli: avoid exit-time history deep clones ([#4717](https://github.com/QwenLM/qwen-code/pull/4717)) +- telemetry: clear span dedup state after chat compression (#3731) ([#4660](https://github.com/QwenLM/qwen-code/pull/4660)) +- core: remove proactive subagent system-reminder injection ([#4587](https://github.com/QwenLM/qwen-code/pull/4587)) +- cli: fix Space key not working in Arena model selection dialog ([#4701](https://github.com/QwenLM/qwen-code/pull/4701)) + +### Documentation + +- add /diff command and auto theme detection documentation ([#4699](https://github.com/QwenLM/qwen-code/pull/4699)) + +### Other + +- Improve hooks matcher display ([#4545](https://github.com/QwenLM/qwen-code/pull/4545)) +- Add AUTO mode denial observability and caps ([#4476](https://github.com/QwenLM/qwen-code/pull/4476)) +- chore(deps): update @google/genai from 1.30.0 to 2.6.0 ([#4485](https://github.com/QwenLM/qwen-code/pull/4485)) + +## [0.17.0](https://github.com/QwenLM/qwen-code/releases/tag/v0.17.0) - 2026-05-29 + +### Added + +- channels: add Feishu (Lark) channel adapter ([#4379](https://github.com/QwenLM/qwen-code/pull/4379)) +- telemetry: foundation for skill-based RT optimization (P0+P1) ([#4565](https://github.com/QwenLM/qwen-code/pull/4565)) +- computer-use: zero-config built-in via open-computer-use MCP ([#4590](https://github.com/QwenLM/qwen-code/pull/4590)) + +### Changed + +- **BREAKING** core: replace tail-preservation compaction with summary + restoration attachments ([#4599](https://github.com/QwenLM/qwen-code/pull/4599)) + +### Fixed + +- cli: surface startup warnings on stderr before TUI render (#4448) ([#4461](https://github.com/QwenLM/qwen-code/pull/4461)) +- telemetry: improve LogToSpan bridge error info and TUI handling ([#4482](https://github.com/QwenLM/qwen-code/pull/4482)) +- cli: track model-sent slash command history ([#3826](https://github.com/QwenLM/qwen-code/pull/3826)) +- core: use undici fetch for IDE proxy requests ([#4607](https://github.com/QwenLM/qwen-code/pull/4607)) +- core,cli: label screenshot-triggered compaction accurately in the auto-compact notice ([#4623](https://github.com/QwenLM/qwen-code/pull/4623)) + +### Other + +- Emit PermissionDenied hooks for AUTO classifier blocks ([#4376](https://github.com/QwenLM/qwen-code/pull/4376)) + +## [0.16.2](https://github.com/QwenLM/qwen-code/releases/tag/v0.16.2) - 2026-05-27 + +### Added + +- cli: do not append trailing space for directory completions (#4092) ([#4288](https://github.com/QwenLM/qwen-code/pull/4288)) +- skills: add memory-leak-debug skill for heap snapshot diagnosis ([#4468](https://github.com/QwenLM/qwen-code/pull/4468)) +- memory: load .qwen/QWEN.local.md as project-local context (#4091) ([#4394](https://github.com/QwenLM/qwen-code/pull/4394)) +- core: limit background agent concurrency ([#4324](https://github.com/QwenLM/qwen-code/pull/4324)) +- core: enable Token Plan cache control ([#4495](https://github.com/QwenLM/qwen-code/pull/4495)) +- **BREAKING** core: redesign auto-compaction thresholds with three-tier ladder ([#4345](https://github.com/QwenLM/qwen-code/pull/4345)) +- telemetry: client-side HTTP span + opt-in W3C traceparent propagation (#4384) ([#4390](https://github.com/QwenLM/qwen-code/pull/4390)) +- cli: headless / non-interactive runaway-protection guardrails (#4103) ([#4502](https://github.com/QwenLM/qwen-code/pull/4502)) +- cli: dense inline panel + keyboard navigation for parallel agent fan-out ([#4477](https://github.com/QwenLM/qwen-code/pull/4477)) +- prompt: move new app prompt from system prompt to skills ([#4567](https://github.com/QwenLM/qwen-code/pull/4567)) +- worktree: Phase D — startup --worktree flag + symlinkDirectories + PR refs ([#4381](https://github.com/QwenLM/qwen-code/pull/4381)) +- cli: default auto-dream/auto-skill to on and add /memory toggle ([#4547](https://github.com/QwenLM/qwen-code/pull/4547)) + +### Fixed + +- build: clean stale outputs before tsc --build to prevent TS5055 ([#4453](https://github.com/QwenLM/qwen-code/pull/4453)) +- cli: resolve stale closure race in text buffer submit handler ([#4470](https://github.com/QwenLM/qwen-code/pull/4470)) +- weixin: allow Windows image paths inside workspace ([#4465](https://github.com/QwenLM/qwen-code/pull/4465)) +- weixin: send decryptable image payloads ([#4464](https://github.com/QwenLM/qwen-code/pull/4464)) +- core: preserve duplicate object references in safeJsonStringify ([#4407](https://github.com/QwenLM/qwen-code/pull/4407)) +- extension: redact credentialed source diagnostics ([#4426](https://github.com/QwenLM/qwen-code/pull/4426)) +- core: strip additional dangerous interpreter rules ([#4371](https://github.com/QwenLM/qwen-code/pull/4371)) +- cli: require whitespace before @ to trigger file completion ([#4487](https://github.com/QwenLM/qwen-code/pull/4487)) +- auth: align Token Plan model defaults with ModelStudio ([#4478](https://github.com/QwenLM/qwen-code/pull/4478)) +- extension: populate resources when Claude marketplace points at whole folder ([#4497](https://github.com/QwenLM/qwen-code/pull/4497)) +- cli: align /context token breakdown with actual API request ([#4512](https://github.com/QwenLM/qwen-code/pull/4512)) +- sdk: honor canUseTool timeout in CLI control requests ([#4491](https://github.com/QwenLM/qwen-code/pull/4491)) +- core: stop AbortSignal listener leak in long sessions (MaxListenersExceededWarning) ([#4366](https://github.com/QwenLM/qwen-code/pull/4366)) +- core: prevent auto-skill creation from overwriting existing skills (#4437) ([#4489](https://github.com/QwenLM/qwen-code/pull/4489)) +- sdk: Include CLI chunks in SDK package ([#4541](https://github.com/QwenLM/qwen-code/pull/4541)) +- cli: persist MCP server removals ([#4535](https://github.com/QwenLM/qwen-code/pull/4535)) +- models: refresh raw model-derived defaults ([#4517](https://github.com/QwenLM/qwen-code/pull/4517)) +- vscode-ide-companion: exclude workspace packages from NOTICES.txt generation ([#4455](https://github.com/QwenLM/qwen-code/pull/4455)) +- telemetry: attach interaction span to session root context ([#4499](https://github.com/QwenLM/qwen-code/pull/4499)) +- cli: auto-prepend @ when pasting or dropping multiple file paths ([#4544](https://github.com/QwenLM/qwen-code/pull/4544)) +- permissions: make command substitution ask, not deny (#4093) ([#4386](https://github.com/QwenLM/qwen-code/pull/4386)) + +### Documentation + +- tools: document monitor tool ([#4356](https://github.com/QwenLM/qwen-code/pull/4356)) +- agents,pr-template: add Working Principles and restructure PR template ([#4496](https://github.com/QwenLM/qwen-code/pull/4496)) + +### Other + +- ci: split Aliyun OSS sync into a separate post-release workflow ([#4492](https://github.com/QwenLM/qwen-code/pull/4492)) + +## [0.16.1](https://github.com/QwenLM/qwen-code/releases/tag/v0.16.1) - 2026-05-23 + +### Added + +- telemetry: Phase 4a — TTFT capture + GenAI semconv dual-emit (#3731) ([#4417](https://github.com/QwenLM/qwen-code/pull/4417)) + +### Fixed + +- core,cli: close tool_use↔tool_result invariant across all failure paths ([#4176](https://github.com/QwenLM/qwen-code/pull/4176)) +- vscode: skip redundant tsc build in prepackage to prevent TS5055 ([#4401](https://github.com/QwenLM/qwen-code/pull/4401)) +- core: preserve tab-indented notebook formatting ([#4373](https://github.com/QwenLM/qwen-code/pull/4373)) +- scripts: renormalize CRLF storage for install-qwen-standalone.bat ([#4427](https://github.com/QwenLM/qwen-code/pull/4427)) +- build: tree-shake React reconciler dev build to prevent PerformanceMeasure leak ([#4462](https://github.com/QwenLM/qwen-code/pull/4462)) +- cli: stabilize flaky sticky-todo remeasure test ([#4416](https://github.com/QwenLM/qwen-code/pull/4416)) +- cli: gate mintty OSC 8 detection on TERM_PROGRAM_VERSION ≥ 3.3 (#4420) ([#4451](https://github.com/QwenLM/qwen-code/pull/4451)) +- release: move constants above entry point to avoid TDZ error ([#4398](https://github.com/QwenLM/qwen-code/pull/4398)) + +### Other + +- chore(deps): update express from 4.21.2 to 5.2.1 ([#4458](https://github.com/QwenLM/qwen-code/pull/4458)) + +## [0.16.0](https://github.com/QwenLM/qwen-code/releases/tag/v0.16.0) - 2026-05-21 + +### Added + +- cli: wrap markdown links in OSC 8 so wrapped URLs stay clickable ([#4037](https://github.com/QwenLM/qwen-code/pull/4037)) +- cli: support batch deletion of sessions in /delete ([#3733](https://github.com/QwenLM/qwen-code/pull/3733)) +- subagents: use fastModel for Explore subagent ([#4086](https://github.com/QwenLM/qwen-code/pull/4086)) +- perf: progressive MCP availability — MCP no longer blocks first input ([#3994](https://github.com/QwenLM/qwen-code/pull/3994)) +- core: strip inline media before chat compaction summary ([#4101](https://github.com/QwenLM/qwen-code/pull/4101)) +- tools: add generic worktree support — EnterWorktree/ExitWorktree + Agent isolation ([#4073](https://github.com/QwenLM/qwen-code/pull/4073)) +- cli: add ModelScope as a built-in third-party API provider ([#4150](https://github.com/QwenLM/qwen-code/pull/4150)) +- core: add image+video support for Qwen3.6-35B-A3B quant variants ([#4106](https://github.com/QwenLM/qwen-code/pull/4106)) +- hooks: Add TodoCreated and TodoCompleted hooks for todo lifecycle events ([#3378](https://github.com/QwenLM/qwen-code/pull/3378)) +- hooks: add prompt hook type with LLM evaluation support ([#3388](https://github.com/QwenLM/qwen-code/pull/3388)) +- core,cli: add generic atomicWriteFile, wire into Write/Edit tools, upgrade @types/node ([#4096](https://github.com/QwenLM/qwen-code/pull/4096)) +- cli: warn users that rewind is disabled in IDE mode ([#4122](https://github.com/QwenLM/qwen-code/pull/4122)) +- cli: argument hint + --auto completion for /rename ([#4048](https://github.com/QwenLM/qwen-code/pull/4048)) +- cli: add baseline /doctor memory diagnostics ([#4180](https://github.com/QwenLM/qwen-code/pull/4180)) +- cli: add session-scoped /goal command with judge-driven turn continuation ([#4123](https://github.com/QwenLM/qwen-code/pull/4123)) +- rewind: add file restoration support to /rewind command ([#4064](https://github.com/QwenLM/qwen-code/pull/4064)) +- skills: add /stuck diagnostic skill for frozen sessions ([#4133](https://github.com/QwenLM/qwen-code/pull/4133)) +- telemetry: unify span creation paths for hierarchical trace tree ([#4126](https://github.com/QwenLM/qwen-code/pull/4126)) +- cli: readline Ctrl+P/N for history and selection navigation ([#4082](https://github.com/QwenLM/qwen-code/pull/4082)) +- cli: add built-in status line presets with interactive dialog ([#4120](https://github.com/QwenLM/qwen-code/pull/4120)) +- cli: add fork-session resume flag ([#4159](https://github.com/QwenLM/qwen-code/pull/4159)) +- telemetry: add interaction span and detailed sensitive attributes ([#4097](https://github.com/QwenLM/qwen-code/pull/4097)) +- core: PR-2.5 — post-promote stream redirect + natural-exit registry settle (#3831 follow-up) ([#4102](https://github.com/QwenLM/qwen-code/pull/4102)) +- cli: add configurable plansDirectory for Plan Mode ([#4062](https://github.com/QwenLM/qwen-code/pull/4062)) +- cli: add structured memory diagnostics JSON ([#3785](https://github.com/QwenLM/qwen-code/pull/3785)) +- core: fail impossible goals ([#4230](https://github.com/QwenLM/qwen-code/pull/4230)) +- serve: add /demo debug page for qwen serve daemon ([#4132](https://github.com/QwenLM/qwen-code/pull/4132)) +- worktree: Phase C — session persistence, hooksPath, Footer + WorktreeExitDialog, three-mode --resume restore ([#4174](https://github.com/QwenLM/qwen-code/pull/4174)) +- core: extend cross-auth fast models to agents ([#4153](https://github.com/QwenLM/qwen-code/pull/4153)) +- cli,core: add Auto approval mode with LLM classifier ([#4151](https://github.com/QwenLM/qwen-code/pull/4151)) +- cli: per-turn /diff with interactive dialog ([#4277](https://github.com/QwenLM/qwen-code/pull/4277)) +- cli: add session path status command ([#4124](https://github.com/QwenLM/qwen-code/pull/4124)) +- core: inject git status into system prompt and refine Explore/git-log guidance ([#4110](https://github.com/QwenLM/qwen-code/pull/4110)) +- core: add NotebookEdit tool for Jupyter notebooks ([#3900](https://github.com/QwenLM/qwen-code/pull/3900)) +- cli: respect /editor preference in Ctrl+X external editor ([#4310](https://github.com/QwenLM/qwen-code/pull/4310)) +- telemetry: Phase 2 — tool.blocked_on_user + hook spans (#3731) ([#4321](https://github.com/QwenLM/qwen-code/pull/4321)) +- installer: add standalone hosted install and uninstall flow ([#3828](https://github.com/QwenLM/qwen-code/pull/3828)) +- telemetry: support custom resource attributes and add metric cardinality controls ([#4367](https://github.com/QwenLM/qwen-code/pull/4367)) +- skills: support priority field in SKILL.md for sorting skill display order ([#4155](https://github.com/QwenLM/qwen-code/pull/4155)) + +### Changed + +- cli: revert dynamic slash command LLM translation ([#4145](https://github.com/QwenLM/qwen-code/pull/4145)) +- core: TaskBase envelope + foreground subagent persistence ([#3970](https://github.com/QwenLM/qwen-code/pull/3970)) +- auth: unify provider config in core, simplify /auth as "Connect a Provider" ([#4287](https://github.com/QwenLM/qwen-code/pull/4287)) +- core: undo x-api-key + Authorization double-emit (#4342) — regresses IdeaLab-style proxies ([#4385](https://github.com/QwenLM/qwen-code/pull/4385)) + +### Fixed + +- core: normalize cumulative OpenAI stream deltas to suffixes ([#3896](https://github.com/QwenLM/qwen-code/pull/3896)) +- cli: auto-restore prompt and preserve queue on cancel ([#4023](https://github.com/QwenLM/qwen-code/pull/4023)) +- core: tag subagent OpenAI JSON logs ([#4099](https://github.com/QwenLM/qwen-code/pull/4099)) +- dashscope: use URL hostname check instead of regex to avoid ReDoS (CodeQL) ([#4112](https://github.com/QwenLM/qwen-code/pull/4112)) +- core: improve runtime fetch options error handling and documentation ([#3997](https://github.com/QwenLM/qwen-code/pull/3997)) +- telemetry: address PR #3847 review follow-ups for trace correlation ([#4058](https://github.com/QwenLM/qwen-code/pull/4058)) +- search: make empty-query exit synchronous and normalize Windows Backspace ([#3981](https://github.com/QwenLM/qwen-code/pull/3981)) +- anthropic: allow cache_control on tool_result blocks ([#4121](https://github.com/QwenLM/qwen-code/pull/4121)) +- core: merge IDE context into user prompt ([#3980](https://github.com/QwenLM/qwen-code/pull/3980)) +- cli: apply /language output to running session without restart ([#4143](https://github.com/QwenLM/qwen-code/pull/4143)) +- core: correct context-usage Footer for prompt size and Anthropic caches ([#4109](https://github.com/QwenLM/qwen-code/pull/4109)) +- core: support cross-auth fast side queries ([#4117](https://github.com/QwenLM/qwen-code/pull/4117)) +- vscode: preserve thinking state and recover missing edit snapshots ([#4147](https://github.com/QwenLM/qwen-code/pull/4147)) +- cli: handle MinTTY Ctrl+Backspace as delete-previous-word ([#4059](https://github.com/QwenLM/qwen-code/pull/4059)) +- cli: preserve debug session across sandbox relaunch ([#4060](https://github.com/QwenLM/qwen-code/pull/4060)) +- hooks: inject SessionStart additionalContext into chat context ([#4115](https://github.com/QwenLM/qwen-code/pull/4115)) +- i18n: Correct zh-TW translations to match Traditional Chinese conventions ([#4129](https://github.com/QwenLM/qwen-code/pull/4129)) +- core: refresh systemInstruction in setTools() so progressive MCP tools reach the model ([#4166](https://github.com/QwenLM/qwen-code/pull/4166)) +- vscode-ide-companion: use existing editor group for diff instead of forcing a new one ([#4130](https://github.com/QwenLM/qwen-code/pull/4130)) +- core: add heap-pressure auto-compaction safety net ([#4186](https://github.com/QwenLM/qwen-code/pull/4186)) +- cli: pass rewind selector test props ([#4211](https://github.com/QwenLM/qwen-code/pull/4211)) +- lsp: expose status and startup diagnostics ([#3649](https://github.com/QwenLM/qwen-code/pull/3649)) +- rewind: restore upstream TOCTOU ordering + heal sticky failed marker ([#4216](https://github.com/QwenLM/qwen-code/pull/4216)) +- test: clear boundedPromise timers to prevent unhandled rejections in abort-and-lifecycle test ([#4220](https://github.com/QwenLM/qwen-code/pull/4220)) +- ui: trim background task results and show newest first (#4094) ([#4125](https://github.com/QwenLM/qwen-code/pull/4125)) +- core: align shell tool description with configured shell ([#4170](https://github.com/QwenLM/qwen-code/pull/4170)) +- cli: include skill base dir in slash commands ([#4224](https://github.com/QwenLM/qwen-code/pull/4224)) +- cli: restore ACP prompt counter on resume ([#4233](https://github.com/QwenLM/qwen-code/pull/4233)) +- core: extend DashScope provider detection with additional hostname rules ([#4157](https://github.com/QwenLM/qwen-code/pull/4157)) +- core: apply tool name migrations at dispatch ([#4213](https://github.com/QwenLM/qwen-code/pull/4213)) +- cli: record mid-turn queued user prompts ([#4215](https://github.com/QwenLM/qwen-code/pull/4215)) +- add cache limits to prevent OOM during build/test ([#4188](https://github.com/QwenLM/qwen-code/pull/4188)) +- core: preserve read-before-write state across idle microcompaction ([#4243](https://github.com/QwenLM/qwen-code/pull/4243)) +- telemetry: Phase 1.5 polish — fallback order, abort-as-result, log/span consistency ([#4302](https://github.com/QwenLM/qwen-code/pull/4302)) +- cli: /status preserves prior error history items (#4169) ([#4265](https://github.com/QwenLM/qwen-code/pull/4265)) +- core: decouple auto-memory recall from main-agent request path ([#4172](https://github.com/QwenLM/qwen-code/pull/4172)) +- core: apply defaultModalities() on env-var-only model config (#4219) ([#4262](https://github.com/QwenLM/qwen-code/pull/4262)) +- cli: block Windows Tab approval-mode toggle when input has a Tab consumer ([#4308](https://github.com/QwenLM/qwen-code/pull/4308)) +- core: mirror Qwen3 reasoning on outbound history ([#4294](https://github.com/QwenLM/qwen-code/pull/4294)) +- test: count result messages instead of assistant messages in multi-model E2E test ([#4341](https://github.com/QwenLM/qwen-code/pull/4341)) +- test: raise timeout for Windows installer end-to-end tests ([#4352](https://github.com/QwenLM/qwen-code/pull/4352)) +- review: harden SKILL.md against weak-model rule skipping ([#4340](https://github.com/QwenLM/qwen-code/pull/4340)) +- cli: remove QWEN_OAUTH gate from feedback dialog ([#4316](https://github.com/QwenLM/qwen-code/pull/4316)) +- core: replace structuredClone with shallow copy to prevent OOM in long sessions ([#4286](https://github.com/QwenLM/qwen-code/pull/4286)) +- core: align session hook matcher targets ([#4354](https://github.com/QwenLM/qwen-code/pull/4354)) +- core: handle MiMo tool-result media ([#4281](https://github.com/QwenLM/qwen-code/pull/4281)) +- core: deduplicate geminiChat recovery continuation text ([#3966](https://github.com/QwenLM/qwen-code/pull/3966)) +- ci: resolve TS5055 release build failure since May 19 ([#4383](https://github.com/QwenLM/qwen-code/pull/4383)) + +### Performance + +- cli: code-split lowlight to cut startup V8 parse cost ([#4070](https://github.com/QwenLM/qwen-code/pull/4070)) + +### Documentation + +- auth: add custom API key wizard PRD ([#3583](https://github.com/QwenLM/qwen-code/pull/3583)) +- user + design docs for --json-schema structured output ([#4051](https://github.com/QwenLM/qwen-code/pull/4051)) + +### Other + +- ci(deps): bump docker/* actions to Node 24 majors (silences GitHub Node 20 deprecation warning) ([#4131](https://github.com/QwenLM/qwen-code/pull/4131)) +- test(integration): pin simple-mcp-server to legacy MCP path until #4163 is fixed ([#4164](https://github.com/QwenLM/qwen-code/pull/4164)) +- chore(deps): re-upgrade ink 6 → 7.0.3 (upstream Static remount fix landed) ([#4119](https://github.com/QwenLM/qwen-code/pull/4119)) +- Add stop hook blocking cap ([#4208](https://github.com/QwenLM/qwen-code/pull/4208)) +- [codex] Allow custom output directory for /export ([#4193](https://github.com/QwenLM/qwen-code/pull/4193)) +- test(perf): skip daemon baseline harness under sandbox ([#4234](https://github.com/QwenLM/qwen-code/pull/4234)) +- test: reduce wait-dependent UI test delays ([#3987](https://github.com/QwenLM/qwen-code/pull/3987)) +- chore(vscode): run development ACP CLI from source ([#4283](https://github.com/QwenLM/qwen-code/pull/4283)) +- Support active goal stream events and non-interactive goals ([#4273](https://github.com/QwenLM/qwen-code/pull/4273)) +- Pin fetch to bundled undici for undici higher versions compatibility ([#4238](https://github.com/QwenLM/qwen-code/pull/4238)) +- chore: add .github/release.yml to support skip-changelog label ([#4327](https://github.com/QwenLM/qwen-code/pull/4327)) +- Expose active goal in stream JSON ([#4314](https://github.com/QwenLM/qwen-code/pull/4314)) + +## [0.15.11](https://github.com/QwenLM/qwen-code/releases/tag/v0.15.11) - 2026-05-13 + +### Added + +- cli: core built-in i18n coverage ([#3871](https://github.com/QwenLM/qwen-code/pull/3871)) +- core: write runtime.json sidecar for active sessions ([#3714](https://github.com/QwenLM/qwen-code/pull/3714)) +- telemetry: inject traceId/spanId into debug log files for OTel correlation ([#3847](https://github.com/QwenLM/qwen-code/pull/3847)) +- tools: defer low-frequency built-in tools to reduce initial prompt size ([#4022](https://github.com/QwenLM/qwen-code/pull/4022)) +- installer: add standalone archive installation ([#3776](https://github.com/QwenLM/qwen-code/pull/3776)) +- cli: Ctrl+B promote keybind (#3831 PR-3 of 3) ([#3969](https://github.com/QwenLM/qwen-code/pull/3969)) +- cli: add --json-schema for structured output in headless mode ([#3598](https://github.com/QwenLM/qwen-code/pull/3598)) +- skills: Add codegraph skill for PR review risk analysis and conflict detection ([#3910](https://github.com/QwenLM/qwen-code/pull/3910)) +- tools: keep ask_user_question always-visible to surface clarification UX ([#4041](https://github.com/QwenLM/qwen-code/pull/4041)) +- core: improve Anthropic proxy compatibility and enable global prompt cache scope ([#4020](https://github.com/QwenLM/qwen-code/pull/4020)) +- cli: add tools.toolSearch.enabled setting for prefix-caching models ([#4069](https://github.com/QwenLM/qwen-code/pull/4069)) +- core: replace fdir crawler with git ls-files + ripgrep fallback ([#3214](https://github.com/QwenLM/qwen-code/pull/3214)) +- dashscope: support DASHSCOPE_PROXY_BASE_URL for prompt cache via API gateway ([#3991](https://github.com/QwenLM/qwen-code/pull/3991)) +- telemetry: add hierarchical session tracing spans ([#4071](https://github.com/QwenLM/qwen-code/pull/4071)) + +### Changed + +- cli: remove legacy `qwen auth` CLI subcommand, redirect to /auth TUI dialog ([#3959](https://github.com/QwenLM/qwen-code/pull/3959)) +- core: route side-query LLM calls through runSideQuery chokepoint ([#3775](https://github.com/QwenLM/qwen-code/pull/3775)) +- telemetry: remove dead useCollector setting and unreachable TelemetryTarget.QWEN ([#4061](https://github.com/QwenLM/qwen-code/pull/4061)) +- deps: downgrade ink 7 → 6 to fix Static-remount TUI regression from #3860 ([#4083](https://github.com/QwenLM/qwen-code/pull/4083)) + +### Fixed + +- cli: keep long model stats header on one line ([#4032](https://github.com/QwenLM/qwen-code/pull/4032)) +- test: repair stale --json-schema integration assertion ([#4075](https://github.com/QwenLM/qwen-code/pull/4075)) +- cli: improve rendering on narrow terminals ([#3968](https://github.com/QwenLM/qwen-code/pull/3968)) +- channels: expand tilde in channel cwd config ([#4045](https://github.com/QwenLM/qwen-code/pull/4045)) +- cli: preserve table ANSI color across wrapped lines ([#4050](https://github.com/QwenLM/qwen-code/pull/4050)) +- core: log internal OpenAI JSON requests ([#4081](https://github.com/QwenLM/qwen-code/pull/4081)) + +### Performance + +- core: bound session-list metadata reads to head/tail 64KB; pool buffer; lazy message count ([#3897](https://github.com/QwenLM/qwen-code/pull/3897)) + +### Documentation + +- telemetry: align config and docs semantics for target, outfile, and CLI flags ([#4066](https://github.com/QwenLM/qwen-code/pull/4066)) + +### Other + +- test: stabilize main e2e flakes ([#3992](https://github.com/QwenLM/qwen-code/pull/3992)) +- ci: skip unnecessary release and SDK checks ([#3984](https://github.com/QwenLM/qwen-code/pull/3984)) +- chore(deps): upgrade ink 6.2.3 → 7.0.2 + bump Node engine to 22 ([#3860](https://github.com/QwenLM/qwen-code/pull/3860)) +- chore(core): runtime.json sidecar follow-ups from #3714 review ([#4030](https://github.com/QwenLM/qwen-code/pull/4030)) +- Upgrade GitHub Actions for Node 24 compatibility ([#1876](https://github.com/QwenLM/qwen-code/pull/1876)) +- doc[sdk-python] Expand Python SDK usage documentation ([#3995](https://github.com/QwenLM/qwen-code/pull/3995)) +- ci(e2e): stabilize MCP/CLI flows and cancel stale main runs ([#4039](https://github.com/QwenLM/qwen-code/pull/4039)) + +## [0.15.10](https://github.com/QwenLM/qwen-code/releases/tag/v0.15.10) - 2026-05-10 + +### Added + +- core: add reactive compression on context overflow ([#3879](https://github.com/QwenLM/qwen-code/pull/3879)) +- memory: add autoSkill background project skill extraction ([#3673](https://github.com/QwenLM/qwen-code/pull/3673)) +- cli: improve slash command discovery ([#3736](https://github.com/QwenLM/qwen-code/pull/3736)) +- core: support QWEN_HOME env var to customize config directory ([#2953](https://github.com/QwenLM/qwen-code/pull/2953)) +- vscode: add message edit/rewind and message metadata UI ([#3762](https://github.com/QwenLM/qwen-code/pull/3762)) +- add /diff command and git diff statistics utility ([#3491](https://github.com/QwenLM/qwen-code/pull/3491)) +- tools: add ToolSearch for on-demand loading of deferred tool schemas ([#3589](https://github.com/QwenLM/qwen-code/pull/3589)) + +### Fixed + +- cli: validate /model command arguments ([#3963](https://github.com/QwenLM/qwen-code/pull/3963)) +- core: log the OpenAI request actually sent on the wire ([#3767](https://github.com/QwenLM/qwen-code/pull/3767)) +- core: drop disabled MCP server from health status registry ([#3916](https://github.com/QwenLM/qwen-code/pull/3916)) +- core: filter Mistral reasoning content at request boundary ([#3882](https://github.com/QwenLM/qwen-code/pull/3882)) +- cli: preserve comments and formatting in settings.json during migration write-back ([#3861](https://github.com/QwenLM/qwen-code/pull/3861)) +- cli: unfreeze Ctrl+O compact-mode toggle on long conversations ([#3905](https://github.com/QwenLM/qwen-code/pull/3905)) +- cli: replace clearTerminal with targeted repaint on resize ([#3967](https://github.com/QwenLM/qwen-code/pull/3967)) +- core: harden reactive compression follow-ups ([#3985](https://github.com/QwenLM/qwen-code/pull/3985)) +- core: throttle shell tool live text updates ([#3902](https://github.com/QwenLM/qwen-code/pull/3902)) +- core: unify Edit/WriteFile prior-read with Claude Code; close #3964 + #3945 ([#4002](https://github.com/QwenLM/qwen-code/pull/4002)) + +### Other + +- test(cli): drop wait-dependent SessionPicker search tests (closes #3977) ([#3978](https://github.com/QwenLM/qwen-code/pull/3978)) +- [codex] fix monitor notifications for subagents ([#3933](https://github.com/QwenLM/qwen-code/pull/3933)) +- feat(telemetry) suppress OpenTelemetry diagnostics from UI ([#3986](https://github.com/QwenLM/qwen-code/pull/3986)) + +## [0.15.9](https://github.com/QwenLM/qwen-code/releases/tag/v0.15.9) - 2026-05-08 + +### Added + +- telemetry: add sensitive span attribute opt-in ([#3893](https://github.com/QwenLM/qwen-code/pull/3893)) +- add commit attribution with per-file AI contribution tracking ([#3115](https://github.com/QwenLM/qwen-code/pull/3115)) +- sdk-python: replace verbatim release notes inheritance with --generate-notes ([#3835](https://github.com/QwenLM/qwen-code/pull/3835)) +- cli: add Idealab as third-party provider ([#3955](https://github.com/QwenLM/qwen-code/pull/3955)) +- session: add /branch to fork the current conversation ([#3539](https://github.com/QwenLM/qwen-code/pull/3539)) +- core: foreground → background promote integration (#3831 PR-2 of 3) ([#3894](https://github.com/QwenLM/qwen-code/pull/3894)) +- cli: searchable /resume picker with focus-aware modes ([#3880](https://github.com/QwenLM/qwen-code/pull/3880)) +- skills: reload slash commands when SkillManager fires change event ([#3923](https://github.com/QwenLM/qwen-code/pull/3923)) + +### Changed + +- cli: provider-first auth registry with unified install pipeline ([#3864](https://github.com/QwenLM/qwen-code/pull/3864)) + +### Fixed + +- core: per-agent ContentGenerator view via AsyncLocalStorage ([#3707](https://github.com/QwenLM/qwen-code/pull/3707)) +- core: accept partial reads in prior-read enforcement ([#3932](https://github.com/QwenLM/qwen-code/pull/3932)) +- cli,core: live-phase panel-ownership filter + post-delete statusChange emit ([#3919](https://github.com/QwenLM/qwen-code/pull/3919)) +- core: close bound-tool gap on runForkedAgent's YOLO wrapper ([#3892](https://github.com/QwenLM/qwen-code/pull/3892)) +- vscode: mark Qwen OAuth coder-model as Discontinued in model picker ([#3948](https://github.com/QwenLM/qwen-code/pull/3948)) +- cli: show tool details in subagent approval banner ([#3956](https://github.com/QwenLM/qwen-code/pull/3956)) +- cli: trim blank streaming tails from live preview ([#3965](https://github.com/QwenLM/qwen-code/pull/3965)) +- core: route countSessionMessages through parseLineTolerant ([#3692](https://github.com/QwenLM/qwen-code/pull/3692)) + +### Other + +- ci(release): keep skip-ci out of release PR titles ([#3950](https://github.com/QwenLM/qwen-code/pull/3950)) +- chore: Add bilingual requirement to create-issue command ([#3952](https://github.com/QwenLM/qwen-code/pull/3952)) +- [codex] Persist ACP model selection ([#3947](https://github.com/QwenLM/qwen-code/pull/3947)) +- ci: reduce PR test matrix runtime ([#3962](https://github.com/QwenLM/qwen-code/pull/3962)) + +## [0.15.8](https://github.com/QwenLM/qwen-code/releases/tag/v0.15.8) - 2026-05-07 + +### Added + +- web-templates: add light theme and toggle to /export HTML ([#3908](https://github.com/QwenLM/qwen-code/pull/3908)) +- cli: replace inline AgentExecutionDisplay with always-on LiveAgentPanel ([#3909](https://github.com/QwenLM/qwen-code/pull/3909)) + +### Fixed + +- skills: allow symlinks pointing outside the skills directory ([#3915](https://github.com/QwenLM/qwen-code/pull/3915)) +- core: foreground agent entry lingering in status bar after completion ([#3921](https://github.com/QwenLM/qwen-code/pull/3921)) +- cli: prevent ESC in background tasks dialog from cancelling running request ([#3922](https://github.com/QwenLM/qwen-code/pull/3922)) +- memory: address code review feedback for auto-memory recall ([#3866](https://github.com/QwenLM/qwen-code/pull/3866)) +- cli: use tmux-safe dots spinner to reduce redraw pressure ([#3903](https://github.com/QwenLM/qwen-code/pull/3903)) + +### Other + +- test(sdk): align tool-control E2E with prior-read enforcement ([#3898](https://github.com/QwenLM/qwen-code/pull/3898)) +- ci(issue-followup-bot): render bot comment newlines correctly ([#3918](https://github.com/QwenLM/qwen-code/pull/3918)) +- ci(release): skip CI on the version-bump squash commit on main ([#3912](https://github.com/QwenLM/qwen-code/pull/3912)) + +## [0.15.7](https://github.com/QwenLM/qwen-code/releases/tag/v0.15.7) - 2026-05-07 + +### Added + +- core: add FileReadCache and short-circuit unchanged Reads ([#3717](https://github.com/QwenLM/qwen-code/pull/3717)) +- core: add shared permission flow for tool execution unification ([#3723](https://github.com/QwenLM/qwen-code/pull/3723)) +- review: expand review pipeline + qwen review CLI subcommands ([#3754](https://github.com/QwenLM/qwen-code/pull/3754)) +- telemetry: define HTTP OTLP endpoint behavior and signal routing ([#3779](https://github.com/QwenLM/qwen-code/pull/3779)) +- core: event monitor tool with throttled stdout streaming (Phase C) ([#3684](https://github.com/QwenLM/qwen-code/pull/3684)) +- cli: add MCP health pill to footer ([#3741](https://github.com/QwenLM/qwen-code/pull/3741)) +- cli: wire Monitor entries into combined Background tasks dialog ([#3791](https://github.com/QwenLM/qwen-code/pull/3791)) +- cli: include monitors in /tasks + add interactive-mode hint ([#3801](https://github.com/QwenLM/qwen-code/pull/3801)) +- sdk-python: add PyPI release workflow ([#3685](https://github.com/QwenLM/qwen-code/pull/3685)) +- core: support reasoning effort 'max' tier (DeepSeek extension) ([#3800](https://github.com/QwenLM/qwen-code/pull/3800)) +- core: hint to background long-running foreground bash commands ([#3809](https://github.com/QwenLM/qwen-code/pull/3809)) +- skills: parallelize loading + add path-conditional activation ([#3604](https://github.com/QwenLM/qwen-code/pull/3604)) +- sdk-python: add network timeouts to release version helper ([#3833](https://github.com/QwenLM/qwen-code/pull/3833)) +- cli: improve export format completion navigation ([#3701](https://github.com/QwenLM/qwen-code/pull/3701)) +- cli: Add ability to switch models non-interactively from the cli ([#3783](https://github.com/QwenLM/qwen-code/pull/3783)) +- weixin: add image sending support via CDN upload ([#3781](https://github.com/QwenLM/qwen-code/pull/3781)) +- core,cli: surface and cancel auto-memory dream tasks ([#3836](https://github.com/QwenLM/qwen-code/pull/3836)) +- cli: route foreground subagents through pill+dialog while running ([#3768](https://github.com/QwenLM/qwen-code/pull/3768)) +- core: enforce prior read before Edit / WriteFile mutates a file ([#3774](https://github.com/QwenLM/qwen-code/pull/3774)) +- cli: customize banner area (logo, title, hide) ([#3710](https://github.com/QwenLM/qwen-code/pull/3710)) +- core: add signal.reason convention for ShellExecutionService (#3831 PR-1 of 3) ([#3842](https://github.com/QwenLM/qwen-code/pull/3842)) +- cli: expand TUI markdown rendering ([#3680](https://github.com/QwenLM/qwen-code/pull/3680)) + +### Changed + +- extract shared release helper utilities ([#3834](https://github.com/QwenLM/qwen-code/pull/3834)) + +### Fixed + +- cli: honor proxy setting ([#3753](https://github.com/QwenLM/qwen-code/pull/3753)) +- cli: restore SubAgent shortcut focus ([#3771](https://github.com/QwenLM/qwen-code/pull/3771)) +- vscode-companion: align package eslint config with root and style cleanup ([#3782](https://github.com/QwenLM/qwen-code/pull/3782)) +- test: restore abort-and-lifecycle stdin-close test to pre-#3723 version ([#3777](https://github.com/QwenLM/qwen-code/pull/3777)) +- core: inject thinking blocks for DeepSeek anthropic-compatible provider ([#3788](https://github.com/QwenLM/qwen-code/pull/3788)) +- cli: stop double-wrapping and double-printing API errors in non-interactive mode ([#3749](https://github.com/QwenLM/qwen-code/pull/3749)) +- telemetry: suppress async resource attribute warning on startup ([#3807](https://github.com/QwenLM/qwen-code/pull/3807)) +- core: address post-merge monitor tool and UI routing issues ([#3792](https://github.com/QwenLM/qwen-code/pull/3792)) +- core: clear FileReadCache on every history rewrite path ([#3810](https://github.com/QwenLM/qwen-code/pull/3810)) +- core: unescape shell-escaped file paths in Edit, WriteFile, and ReadFile tools ([#3820](https://github.com/QwenLM/qwen-code/pull/3820)) +- openai: parse MiniMax thinking tags ([#3677](https://github.com/QwenLM/qwen-code/pull/3677)) +- telemetry: add bounded shutdown timeout and fix service.version resource attribute ([#3813](https://github.com/QwenLM/qwen-code/pull/3813)) +- acp: run auto compression before model sends ([#3698](https://github.com/QwenLM/qwen-code/pull/3698)) +- core: coalesce MCP server rediscovery ([#3818](https://github.com/QwenLM/qwen-code/pull/3818)) +- core: activate skills from discovered result paths ([#3852](https://github.com/QwenLM/qwen-code/pull/3852)) +- core: use per-model settings for fast model side queries ([#3815](https://github.com/QwenLM/qwen-code/pull/3815)) +- core: prevent auto-memory recall from blocking main request ([#3814](https://github.com/QwenLM/qwen-code/pull/3814)) +- sdk-python: standardize TAG_PREFIX to include v suffix ([#3832](https://github.com/QwenLM/qwen-code/pull/3832)) +- cli: prevent file paths from being treated as slash commands ([#3743](https://github.com/QwenLM/qwen-code/pull/3743)) +- core: auto-compact subagent context to prevent overflow ([#3735](https://github.com/QwenLM/qwen-code/pull/3735)) +- core: shrink file diff session records ([#3872](https://github.com/QwenLM/qwen-code/pull/3872)) +- core: rebuild tool registry on subagent Config overrides so bound tools resolve to the subagent ([#3873](https://github.com/QwenLM/qwen-code/pull/3873)) +- core: create temp dir before saving truncated shell output ([#3875](https://github.com/QwenLM/qwen-code/pull/3875)) +- core: improve stream rate-limit retry handling ([#3790](https://github.com/QwenLM/qwen-code/pull/3790)) +- core: address @tanzhenxin's PR-1 review notes (post-merge follow-up to #3842) ([#3886](https://github.com/QwenLM/qwen-code/pull/3886)) +- core: stop per-subagent ToolRegistry on foreground-fork path ([#3887](https://github.com/QwenLM/qwen-code/pull/3887)) +- cli: warn on ignored provider generation config ([#3883](https://github.com/QwenLM/qwen-code/pull/3883)) + +### Documentation + +- core: point background-shell + monitor guidance at both /tasks and the dialog ([#3808](https://github.com/QwenLM/qwen-code/pull/3808)) +- cli: document new banner customization settings ([#3885](https://github.com/QwenLM/qwen-code/pull/3885)) + +### Other + +- chore: remove legacy Gemini workflows ([#3725](https://github.com/QwenLM/qwen-code/pull/3725)) +- Add background agent resume and continuation ([#3739](https://github.com/QwenLM/qwen-code/pull/3739)) +- Feat/stats model cost estimation rebase ([#3780](https://github.com/QwenLM/qwen-code/pull/3780)) +- ci: add Qwen Code issue follow-up bot workflow ([#3854](https://github.com/QwenLM/qwen-code/pull/3854)) + +## [0.15.6](https://github.com/QwenLM/qwen-code/releases/tag/v0.15.6) - 2026-04-30 + +### Fixed + +- memory: use project transcript path for dream ([#3722](https://github.com/QwenLM/qwen-code/pull/3722)) +- cli: bound SubAgent display by visual height to prevent flicker ([#3721](https://github.com/QwenLM/qwen-code/pull/3721)) +- cli: keep sticky todo panel compact ([#3647](https://github.com/QwenLM/qwen-code/pull/3647)) +- core: replay DeepSeek reasoning_content on all assistant turns ([#3747](https://github.com/QwenLM/qwen-code/pull/3747)) +- cli: correct model precedence — argv > settings > auth env vars ([#3645](https://github.com/QwenLM/qwen-code/pull/3645)) +- core: preserve reasoning_content in rewind, compression, and merge paths (#3579) ([#3737](https://github.com/QwenLM/qwen-code/pull/3737)) +- cli: persist directory add entries ([#3752](https://github.com/QwenLM/qwen-code/pull/3752)) +- lsp: 修复 LSP 文档、isPathSafe 限制,并提升 LSP 工具调用率 ([#3615](https://github.com/QwenLM/qwen-code/pull/3615)) +- vscode-companion: fill slash commands into input on Enter instead of auto-submitting ([#3618](https://github.com/QwenLM/qwen-code/pull/3618)) +- ci: add merge-back PR for stable releases in release workflow ([#3764](https://github.com/QwenLM/qwen-code/pull/3764)) + +### Other + +- chore(core): drop tool token usage tracking ([#3727](https://github.com/QwenLM/qwen-code/pull/3727)) + +## [0.15.5](https://github.com/QwenLM/qwen-code/releases/tag/v0.15.5) - 2026-04-29 + +### Added + +- core: wire background shells into the task_stop tool ([#3687](https://github.com/QwenLM/qwen-code/pull/3687)) +- skills: add tmux-real-user-testing skill for readable TUI test logs ([#3577](https://github.com/QwenLM/qwen-code/pull/3577)) +- cli: wire background shells into combined Background tasks dialog ([#3720](https://github.com/QwenLM/qwen-code/pull/3720)) + +### Fixed + +- cli: refresh static header on model switch ([#3667](https://github.com/QwenLM/qwen-code/pull/3667)) +- core: inject reasoning_content on DeepSeek tool-call replays ([#3729](https://github.com/QwenLM/qwen-code/pull/3729)) + +### Other + +- mcp config as cli ([#1279](https://github.com/QwenLM/qwen-code/pull/1279)) + +## [0.15.4](https://github.com/QwenLM/qwen-code/releases/tag/v0.15.4) - 2026-04-28 + +### Added + +- Adds Catalan language support ([#3643](https://github.com/QwenLM/qwen-code/pull/3643)) +- cli: add API preconnect to reduce first-call latency ([#3318](https://github.com/QwenLM/qwen-code/pull/3318)) +- cli: Add argument-hint support for slash commands ([#3593](https://github.com/QwenLM/qwen-code/pull/3593)) +- cli,core: LLM-generated summary labels for tool-call batches ([#3538](https://github.com/QwenLM/qwen-code/pull/3538)) +- cli: add OSC notification support for iTerm2, Kitty, and Ghostty ([#3562](https://github.com/QwenLM/qwen-code/pull/3562)) +- vscode: add tab dot indicator and notification system (#3106) ([#3661](https://github.com/QwenLM/qwen-code/pull/3661)) +- core: model-facing agent control (task_stop, send_message, per-agent transcript) ([#3471](https://github.com/QwenLM/qwen-code/pull/3471)) +- cli: background-agent UI — pill, combined dialog, detail view ([#3488](https://github.com/QwenLM/qwen-code/pull/3488)) +- core: managed background shell pool with /tasks command ([#3642](https://github.com/QwenLM/qwen-code/pull/3642)) + +### Changed + +- config: dedupe QWEN_CODE_API_TIMEOUT_MS env override logic ([#3653](https://github.com/QwenLM/qwen-code/pull/3653)) + +### Fixed + +- vscode-companion: slash command completion not triggering after message submit ([#3609](https://github.com/QwenLM/qwen-code/pull/3609)) +- cli: guard gradient rendering without colors ([#3640](https://github.com/QwenLM/qwen-code/pull/3640)) +- config: support QWEN_CODE_API_TIMEOUT_MS across OAuth and non-OAuth paths ([#3629](https://github.com/QwenLM/qwen-code/pull/3629)) +- cli: add API Key option to `qwen auth` interactive menu ([#3624](https://github.com/QwenLM/qwen-code/pull/3624)) +- core: recover from `}{` glued records on session JSONL load (#3606) ([#3656](https://github.com/QwenLM/qwen-code/pull/3656)) +- core: split tool-result media into follow-up user message for strict OpenAI compat ([#3617](https://github.com/QwenLM/qwen-code/pull/3617)) +- core: handle shell line continuations in command splitting ([#3600](https://github.com/QwenLM/qwen-code/pull/3600)) +- cli: recognize OpenAI-compatible providers in `qwen auth status` ([#3623](https://github.com/QwenLM/qwen-code/pull/3623)) +- core,cli: stop stripping reasoning on model switch/history load ([#3682](https://github.com/QwenLM/qwen-code/pull/3682)) +- ci: use squash merge for SDK release auto-merge ([#3690](https://github.com/QwenLM/qwen-code/pull/3690)) +- cli: preserve description in subject-bearing thought chunks ([#3691](https://github.com/QwenLM/qwen-code/pull/3691)) +- core: treat ask_user_question multiSelect as optional ([#3699](https://github.com/QwenLM/qwen-code/pull/3699)) +- core: set DeepSeek V4 context to 1M and output to 384K ([#3693](https://github.com/QwenLM/qwen-code/pull/3693)) +- ci: preserve preview version overrides ([#3705](https://github.com/QwenLM/qwen-code/pull/3705)) + +### Other + +- chore(gitignore): add .codex directory ([#3665](https://github.com/QwenLM/qwen-code/pull/3665)) +- Feat/openrouter auth ([#3576](https://github.com/QwenLM/qwen-code/pull/3576)) +- test(cli): remove 8 flaky TUI input tests surfaced by CI history mining ([#3694](https://github.com/QwenLM/qwen-code/pull/3694)) + +## [0.15.3](https://github.com/QwenLM/qwen-code/releases/tag/v0.15.3) - 2026-04-26 + +### Added + +- vscode: add native context menu copy actions for webview chat ([#3477](https://github.com/QwenLM/qwen-code/pull/3477)) +- cli: add Traditional Chinese (zh-TW) as a UI language option ([#3569](https://github.com/QwenLM/qwen-code/pull/3569)) +- vscode: expose /skills as slash command with secondary picker ([#2548](https://github.com/QwenLM/qwen-code/pull/2548)) +- cli: add conversation rewind feature with double-ESC and /rewind command ([#3441](https://github.com/QwenLM/qwen-code/pull/3441)) +- adds a Space-to-preview affordance to the /resume session picker ([#3605](https://github.com/QwenLM/qwen-code/pull/3605)) +- cli: add sticky todo panel to app layouts ([#3507](https://github.com/QwenLM/qwen-code/pull/3507)) + +### Changed + +- cli: undo OPENAI_MODEL precedence change in modelProviders lookup (#3567) ([#3633](https://github.com/QwenLM/qwen-code/pull/3633)) + +### Fixed + +- cli: memoize useHistory() return to avoid unnecessary re-renders ([#3547](https://github.com/QwenLM/qwen-code/pull/3547)) +- cli: respect OPENAI_MODEL precedence in CLI model resolution ([#3567](https://github.com/QwenLM/qwen-code/pull/3567)) +- cli: add TUI flicker foundation fixes ([#3591](https://github.com/QwenLM/qwen-code/pull/3591)) +- cli: drain runExitCleanup before process.exit in error handlers ([#3602](https://github.com/QwenLM/qwen-code/pull/3602)) +- review: respect /language output setting for local reviews ([#3611](https://github.com/QwenLM/qwen-code/pull/3611)) +- test: update rewind E2E Test 1 assertion after isRealUserTurn fix ([#3622](https://github.com/QwenLM/qwen-code/pull/3622)) +- core: preserve settings-sourced apiKey when registry model envKey is absent ([#3495](https://github.com/QwenLM/qwen-code/pull/3495)) +- telemetry: use safeJsonStringify in FileExporter to avoid circular reference crash ([#3630](https://github.com/QwenLM/qwen-code/pull/3630)) +- core: match DeepSeek provider by model name for sglang/vllm (#3613) ([#3620](https://github.com/QwenLM/qwen-code/pull/3620)) + +### Performance + +- core: cut runtime sync I/O on tool hot path by 91% ([#3581](https://github.com/QwenLM/qwen-code/pull/3581)) + +### Documentation + +- github: tighten PR template validation guidance ([#3522](https://github.com/QwenLM/qwen-code/pull/3522)) +- telemetry: clarify Alibaba Cloud console entry ([#3498](https://github.com/QwenLM/qwen-code/pull/3498)) + +### Other + +- feat(SDK) Add Python SDK implementation for #3010 ([#3494](https://github.com/QwenLM/qwen-code/pull/3494)) +- test(arena): cover select dialog key actions ([#3614](https://github.com/QwenLM/qwen-code/pull/3614)) + +## [0.15.2](https://github.com/QwenLM/qwen-code/releases/tag/v0.15.2) - 2026-04-24 + +### Added + +- session: auto-title sessions via fast model, add /rename --auto ([#3540](https://github.com/QwenLM/qwen-code/pull/3540)) +- web-search: remove built-in web_search tool, replace with MCP-based approach ([#3502](https://github.com/QwenLM/qwen-code/pull/3502)) +- docs: add qwen-code skills, agents, and updated AGENTS.md ([#3575](https://github.com/QwenLM/qwen-code/pull/3575)) +- vscode-companion: support /export session command ([#2592](https://github.com/QwenLM/qwen-code/pull/2592)) + +### Changed + +- core: make OpenAI converter stateless (follow-up to #3525) ([#3550](https://github.com/QwenLM/qwen-code/pull/3550)) +- vscode-ide-companion: undo #3450 split-stream timestamp sharing ([#3573](https://github.com/QwenLM/qwen-code/pull/3573)) + +### Fixed + +- core: treat empty 'pages' parameter as unset in ReadFile ([#3559](https://github.com/QwenLM/qwen-code/pull/3559)) +- i18n: sync mismatched keys between en.js and zh.js ([#3534](https://github.com/QwenLM/qwen-code/pull/3534)) +- cli: remove residual blank lines after MCP init completes ([#3509](https://github.com/QwenLM/qwen-code/pull/3509)) +- sdk-java: pass custom env to CLI process ([#3543](https://github.com/QwenLM/qwen-code/pull/3543)) +- cli: promote resubmitted history prompt to most recent ([#3531](https://github.com/QwenLM/qwen-code/pull/3531)) +- Strengthen error handling in qwenOAuth2.ts to prevent unhandled 'error' event ([#3481](https://github.com/QwenLM/qwen-code/pull/3481)) +- acp: support SSE and HTTP MCP servers in ACP mode ([#3574](https://github.com/QwenLM/qwen-code/pull/3574)) +- cli: run ACP Agent tool calls concurrently (#2516) ([#3463](https://github.com/QwenLM/qwen-code/pull/3463)) +- cli: disable Kitty keyboard protocol on SIGINT to prevent garbled 9;5u output ([#3544](https://github.com/QwenLM/qwen-code/pull/3544)) +- cli: dispatch queued slash commands through the slash path ([#3523](https://github.com/QwenLM/qwen-code/pull/3523)) +- core: preserve reasoning_content during session resume and active sessions (GH#3579) ([#3590](https://github.com/QwenLM/qwen-code/pull/3590)) + +## [0.15.1](https://github.com/QwenLM/qwen-code/releases/tag/v0.15.1) - 2026-04-23 + +### Added + +- cli: combine elapsed + timeout in shell time indicator ([#3512](https://github.com/QwenLM/qwen-code/pull/3512)) + +### Fixed + +- core: scope StreamingToolCallParser per stream, not per Converter (#3516) ([#3525](https://github.com/QwenLM/qwen-code/pull/3525)) +- cli: stop slash completion render loop ([#3533](https://github.com/QwenLM/qwen-code/pull/3533)) + +### Other + +- chore: bump version to 0.15.1 ([#3541](https://github.com/QwenLM/qwen-code/pull/3541)) + +## [0.15.0](https://github.com/QwenLM/qwen-code/releases/tag/v0.15.0) - 2026-04-22 + +### Added + +- acp: add complete hooks support for ACP integration ([#3248](https://github.com/QwenLM/qwen-code/pull/3248)) +- optimize compact mode UX — shortcuts, settings sync, and safety ([#3100](https://github.com/QwenLM/qwen-code/pull/3100)) +- hooks: Add HTTP Hook, Function Hook and Async Hook support ([#2827](https://github.com/QwenLM/qwen-code/pull/2827)) +- memory: managed auto-memory and auto-dream system ([#3087](https://github.com/QwenLM/qwen-code/pull/3087)) +- cli: support multi-line status line output ([#3311](https://github.com/QwenLM/qwen-code/pull/3311)) +- skills: add /batch skill for parallel batch operations ([#3079](https://github.com/QwenLM/qwen-code/pull/3079)) +- background subagents with headless and SDK support ([#3076](https://github.com/QwenLM/qwen-code/pull/3076)) +- core: add path-based context rule injection from .qwen/rules/ ([#3339](https://github.com/QwenLM/qwen-code/pull/3339)) +- cli: add dual-output sidecar mode for TUI ([#3352](https://github.com/QwenLM/qwen-code/pull/3352)) +- bind `M-d` to a reasonable (Emacs-like) default ([#3358](https://github.com/QwenLM/qwen-code/pull/3358)) +- core: detect tool validation retry loops and inject stop directive ([#3178](https://github.com/QwenLM/qwen-code/pull/3178)) +- mcp: add OSC 52 copy hotkey for OAuth authorization URL ([#3393](https://github.com/QwenLM/qwen-code/pull/3393)) +- vscode-ide-companion: add dedicated agent execution display ([#2590](https://github.com/QwenLM/qwen-code/pull/2590)) +- cli: add early input capture to prevent keystroke loss during startup ([#3319](https://github.com/QwenLM/qwen-code/pull/3319)) +- cli: support refreshInterval in statusLine for periodic refresh ([#3383](https://github.com/QwenLM/qwen-code/pull/3383)) +- core: add dynamic swarm worker tool ([#3433](https://github.com/QwenLM/qwen-code/pull/3433)) +- tools: add Markdown for Agents support to WebFetch tool ([#2734](https://github.com/QwenLM/qwen-code/pull/2734)) +- core: enhanced loop detection with stagnation + validation-retry checks ([#3236](https://github.com/QwenLM/qwen-code/pull/3236)) +- cli: add /doctor diagnostic command ([#3404](https://github.com/QwenLM/qwen-code/pull/3404)) +- vscode-companion: enable Plan Mode toggle and approval UI ([#2551](https://github.com/QwenLM/qwen-code/pull/2551)) +- cli: add session recap with /recap and auto-show on return ([#3434](https://github.com/QwenLM/qwen-code/pull/3434)) +- cli: add bare startup mode ([#3448](https://github.com/QwenLM/qwen-code/pull/3448)) +- vscode-ide-companion: support /insight command ([#2593](https://github.com/QwenLM/qwen-code/pull/2593)) +- cli: add slashCommands.disabled setting to gate slash commands ([#3445](https://github.com/QwenLM/qwen-code/pull/3445)) +- core: PDF text extraction fallback and Jupyter notebook parsing ([#3160](https://github.com/QwenLM/qwen-code/pull/3160)) +- cli: add OAuth configuration flags to `mcp add` ([#3442](https://github.com/QwenLM/qwen-code/pull/3442)) +- cli: add tool execution progress messages ([#3155](https://github.com/QwenLM/qwen-code/pull/3155)) +- cli: make ACP message rewrite timeout configurable ([#3475](https://github.com/QwenLM/qwen-code/pull/3475)) +- cli: attribute /stats rows to the originating subagent ([#3229](https://github.com/QwenLM/qwen-code/pull/3229)) +- webui: render markdown in generic and web-fetch tool outputs ([#3469](https://github.com/QwenLM/qwen-code/pull/3469)) +- cli: display real-time token consumption during streaming (#2742) ([#3329](https://github.com/QwenLM/qwen-code/pull/3329)) +- retry: add persistent retry mode for unattended CI/CD environments ([#3080](https://github.com/QwenLM/qwen-code/pull/3080)) +- vscode: replace OAuth with Coding Plan / API Key provider setup ([#3398](https://github.com/QwenLM/qwen-code/pull/3398)) +- arena: add comparison summary for agent results ([#3394](https://github.com/QwenLM/qwen-code/pull/3394)) +- session: add rename, delete, and auto-title generation for session ([#3093](https://github.com/QwenLM/qwen-code/pull/3093)) +- cli: cap inline shell output with configurable line limit ([#3508](https://github.com/QwenLM/qwen-code/pull/3508)) +- cli: auto-detect terminal theme ('auto' or unset) ([#3460](https://github.com/QwenLM/qwen-code/pull/3460)) +- cli: Phase 2 — slash command multi-mode expansion, ACP fixes, and UX improvements ([#3377](https://github.com/QwenLM/qwen-code/pull/3377)) + +### Changed + +- core: move fork subagent params from execute() to construction time ([#3255](https://github.com/QwenLM/qwen-code/pull/3255)) +- cli: replace slash command whitelist with capability-based filtering (Phase 1) ([#3283](https://github.com/QwenLM/qwen-code/pull/3283)) + +### Fixed + +- sdk: avoid leaking process exit listeners in ProcessTransport ([#3295](https://github.com/QwenLM/qwen-code/pull/3295)) +- cli: prevent statusline spawn EBADF from crashing CLI (#3264) ([#3310](https://github.com/QwenLM/qwen-code/pull/3310)) +- cli: remember "Start new chat session" until summary changes ([#3308](https://github.com/QwenLM/qwen-code/pull/3308)) +- cli: defer update notifications until model response completes ([#3321](https://github.com/QwenLM/qwen-code/pull/3321)) +- core: limit skill watcher depth to prevent FD exhaustion ([#3320](https://github.com/QwenLM/qwen-code/pull/3320)) +- core: strip thinking blocks from history on model switch ([#3315](https://github.com/QwenLM/qwen-code/pull/3315)) +- core: add shell argument quoting guidance to prevent special char errors ([#3327](https://github.com/QwenLM/qwen-code/pull/3327)) +- cli: reduce terminal redraw cursor movement ([#3381](https://github.com/QwenLM/qwen-code/pull/3381)) +- dingtalk: only suffix '(cont.)' on continuation chunks, not the first ([#2977](https://github.com/QwenLM/qwen-code/pull/2977)) +- dingtalk: preserve empty text after @mention strip instead of falling back ([#2978](https://github.com/QwenLM/qwen-code/pull/2978)) +- dingtalk: remove reactionContext map to stop leak on blocked messages ([#2979](https://github.com/QwenLM/qwen-code/pull/2979)) +- sandbox: fall back to 'latest' tag when image name has no colon ([#2962](https://github.com/QwenLM/qwen-code/pull/2962)) +- scripts: remove duplicate bundle rmSync in clean script ([#2964](https://github.com/QwenLM/qwen-code/pull/2964)) +- integration-tests: honor stdinDoesNotEnd option ([#2966](https://github.com/QwenLM/qwen-code/pull/2966)) +- scripts: Fix `"undefined Options: ..."` in generated JSON schema for enum settings without descriptions. ([#2963](https://github.com/QwenLM/qwen-code/pull/2963)) +- text-buffer: unify offset-to-position logic ([#2969](https://github.com/QwenLM/qwen-code/pull/2969)) +- weixin: check full 4-byte PNG magic signature ([#2970](https://github.com/QwenLM/qwen-code/pull/2970)) +- cli: re-arm disconnected listener on rebuilt AcpBridge after crash ([#2975](https://github.com/QwenLM/qwen-code/pull/2975)) +- sdk: settle pending next() promise in Stream.return() to prevent hangs ([#2981](https://github.com/QwenLM/qwen-code/pull/2981)) +- cli: auto-submit on number key press in AskUserQuestionDialog ([#3407](https://github.com/QwenLM/qwen-code/pull/3407)) +- tool-registry: add lazy factory registration with inflight concurrency dedup ([#3297](https://github.com/QwenLM/qwen-code/pull/3297)) +- cli: wait for dual output stream shutdown ([#3416](https://github.com/QwenLM/qwen-code/pull/3416)) +- build: invoke tsx directly via node --import instead of npx ([#3237](https://github.com/QwenLM/qwen-code/pull/3237)) +- core: support older Git during repository initialization ([#3436](https://github.com/QwenLM/qwen-code/pull/3436)) +- cli: /clear dismisses active /btw side-question dialog ([#3431](https://github.com/QwenLM/qwen-code/pull/3431)) +- cli: let /btw use live conversation context ([#3429](https://github.com/QwenLM/qwen-code/pull/3429)) +- display ">100%" when context usage exceeds limit ([#2766](https://github.com/QwenLM/qwen-code/pull/2766)) +- ui: constrain shell output width to prevent box overflow ([#2857](https://github.com/QwenLM/qwen-code/pull/2857)) +- core: remove abort listener during cleanup ([#3438](https://github.com/QwenLM/qwen-code/pull/3438)) +- vscode-ide-companion: preserve split stream message ordering ([#3450](https://github.com/QwenLM/qwen-code/pull/3450)) +- core: normalize Windows PATH for MCP stdio servers ([#3451](https://github.com/QwenLM/qwen-code/pull/3451)) +- core: prevent malformed permission rules from becoming tool-wide catch-alls ([#3467](https://github.com/QwenLM/qwen-code/pull/3467)) +- cli: pin /recap above input and align defaults with fastModel ([#3478](https://github.com/QwenLM/qwen-code/pull/3478)) +- cli: rework session recap rendering and add blur threshold setting ([#3482](https://github.com/QwenLM/qwen-code/pull/3482)) +- mcp: make the OAuth authorization URL clickable when wrapped ([#3489](https://github.com/QwenLM/qwen-code/pull/3489)) +- core: recover from truncated tool calls via multi-turn continuation ([#3313](https://github.com/QwenLM/qwen-code/pull/3313)) +- editor: detect Zed.app on macOS when CLI is not in PATH ([#3303](https://github.com/QwenLM/qwen-code/pull/3303)) +- openai: when samplingParams is set, pass it through verbatim ([#3458](https://github.com/QwenLM/qwen-code/pull/3458)) +- Handle missing xdg-open (ENOENT) gracefully to prevent crash ([#1675](https://github.com/QwenLM/qwen-code/pull/1675)) +- core: use empty string instead of null for reasoning-only assistant content ([#3499](https://github.com/QwenLM/qwen-code/pull/3499)) +- cli: inject plan/subagent/arena system reminders in ACP (#1151) ([#3479](https://github.com/QwenLM/qwen-code/pull/3479)) +- core: reject truncated subagent write_file calls ([#3505](https://github.com/QwenLM/qwen-code/pull/3505)) + +### Performance + +- vscode: fix input lag in long conversations ([#2550](https://github.com/QwenLM/qwen-code/pull/2550)) + +### Documentation + +- fix Windows install command to work in both CMD and PowerShell ([#3252](https://github.com/QwenLM/qwen-code/pull/3252)) +- update authentication methods to reflect OAuth discontinuation ([#3325](https://github.com/QwenLM/qwen-code/pull/3325)) + +### Other + +- test(core): stabilize glob truncation tests ([#3322](https://github.com/QwenLM/qwen-code/pull/3322)) +- test(integration): match new cron notification format in interactive tests ([#3402](https://github.com/QwenLM/qwen-code/pull/3402)) +- Fix typo in class name ([#2189](https://github.com/QwenLM/qwen-code/pull/2189)) +- test(core): update scheduler registry mock ([#3415](https://github.com/QwenLM/qwen-code/pull/3415)) +- ci(stale): enable 60+30 stale/close policy for pull requests ([#3375](https://github.com/QwenLM/qwen-code/pull/3375)) +- Revert "feat(core): add dynamic swarm worker tool" ([#3468](https://github.com/QwenLM/qwen-code/pull/3468)) +- test(integration): switch settings-migration probe from --help to mcp list ([#3486](https://github.com/QwenLM/qwen-code/pull/3486)) + +## [0.14.5](https://github.com/QwenLM/qwen-code/releases/tag/v0.14.5) - 2026-04-15 + +### Added + +- cli/sdk: expose /context usage data in non-interactive mode and SDK API ([#2916](https://github.com/QwenLM/qwen-code/pull/2916)) +- cli: add startup performance profiler ([#3232](https://github.com/QwenLM/qwen-code/pull/3232)) +- core: implement fork subagent for context sharing ([#2936](https://github.com/QwenLM/qwen-code/pull/2936)) +- vscode-ide-companion: add /account for account display ([#2984](https://github.com/QwenLM/qwen-code/pull/2984)) +- acp: LLM-based message rewrite middleware with custom prompts ([#3191](https://github.com/QwenLM/qwen-code/pull/3191)) +- auth: discontinue Qwen OAuth free tier (2026-04-15 cutoff) ([#3291](https://github.com/QwenLM/qwen-code/pull/3291)) + +### Fixed + +- core: detect rate-limit errors from streamed SSE frames ([#3246](https://github.com/QwenLM/qwen-code/pull/3246)) +- vscode: limit session tab title length to prevent tab bar overflow ([#3249](https://github.com/QwenLM/qwen-code/pull/3249)) +- core: respect custom Gemini baseUrl from modelProviders ([#3212](https://github.com/QwenLM/qwen-code/pull/3212)) +- core: allow thought-only responses in GeminiChat stream validation ([#3251](https://github.com/QwenLM/qwen-code/pull/3251)) +- cli: make /bug easier to open in terminals without hyperlink support ([#3257](https://github.com/QwenLM/qwen-code/pull/3257)) +- cli: ignore literal Tab input in BaseTextInput ([#3270](https://github.com/QwenLM/qwen-code/pull/3270)) +- channels/dingtalk: prioritize senderStaffId over senderId for allowedUsers matching ([#3294](https://github.com/QwenLM/qwen-code/pull/3294)) +- cli: block discontinued qwen-oauth model selection in ModelDialog ([#3299](https://github.com/QwenLM/qwen-code/pull/3299)) + +## [0.14.4](https://github.com/QwenLM/qwen-code/releases/tag/v0.14.4) - 2026-04-13 + +### Added + +- cli: CJK word segmentation and Ctrl+arrow navigation optimization ([#2942](https://github.com/QwenLM/qwen-code/pull/2942)) +- replace text input with model picker for Fast Model in /settings ([#3120](https://github.com/QwenLM/qwen-code/pull/3120)) +- show description for active setting in /settings dialog ([#3116](https://github.com/QwenLM/qwen-code/pull/3116)) +- i18n: add French (fr-FR) locale support ([#3126](https://github.com/QwenLM/qwen-code/pull/3126)) +- cli: queue input editing — pop queued messages for editing via ↑/ESC ([#2871](https://github.com/QwenLM/qwen-code/pull/2871)) +- channels: add voice message support in TelegramAdapter ([#3150](https://github.com/QwenLM/qwen-code/pull/3150)) +- cli: support tools.sandboxImage in settings ([#3146](https://github.com/QwenLM/qwen-code/pull/3146)) +- cli: warn when workspace overrides global modelProviders ([#3148](https://github.com/QwenLM/qwen-code/pull/3148)) +- hooks: Add StopFailure and PostCompact hook events ([#2825](https://github.com/QwenLM/qwen-code/pull/2825)) +- core: intelligent tool parallelism with Kind-based batching and shell read-only detection ([#2864](https://github.com/QwenLM/qwen-code/pull/2864)) +- add contextual tips system with post-response context awareness ([#2904](https://github.com/QwenLM/qwen-code/pull/2904)) +- subagents: propagate approval mode to sub-agents ([#3066](https://github.com/QwenLM/qwen-code/pull/3066)) +- skills: add model override support via skill frontmatter ([#2949](https://github.com/QwenLM/qwen-code/pull/2949)) +- cli: support bare exit/quit commands to exit the CLI ([#3201](https://github.com/QwenLM/qwen-code/pull/3201)) +- subagents: add disallowedTools field to agent definitions ([#3064](https://github.com/QwenLM/qwen-code/pull/3064)) +- core: add microcompaction for idle context cleanup ([#3006](https://github.com/QwenLM/qwen-code/pull/3006)) + +### Changed + +- merge test-utils package into core ([#3200](https://github.com/QwenLM/qwen-code/pull/3200)) + +### Fixed + +- vscode: force fresh ACP session on new-session action ([#2874](https://github.com/QwenLM/qwen-code/pull/2874)) +- cli: prioritize slash command completions ([#3104](https://github.com/QwenLM/qwen-code/pull/3104)) +- cli: improve markdown table rendering in terminal ([#2914](https://github.com/QwenLM/qwen-code/pull/2914)) +- prevent statusline script from corrupting settings.json ([#3091](https://github.com/QwenLM/qwen-code/pull/3091)) +- cli: check NEWLINE before SUBMIT in TextInput multiline mode ([#3094](https://github.com/QwenLM/qwen-code/pull/3094)) +- input: preserve tab characters in pasted content ([#3045](https://github.com/QwenLM/qwen-code/pull/3045)) +- use latest assistant token count on resume instead of stale compression checkpoint ([#3109](https://github.com/QwenLM/qwen-code/pull/3109)) +- upgrade normalize-package-data to 7.0.1 (fixes DEP0169 warning) ([#2865](https://github.com/QwenLM/qwen-code/pull/2865)) +- core: cap recursive file crawler at 100k entries to prevent OOM ([#3138](https://github.com/QwenLM/qwen-code/pull/3138)) +- channels: apply proxy settings to channel start command ([#3136](https://github.com/QwenLM/qwen-code/pull/3136)) +- lazy-load channel plugins to eliminate DEP0040 startup warning ([#3134](https://github.com/QwenLM/qwen-code/pull/3134)) +- core: fall back to CLI confirmation when IDE diff open fails ([#3031](https://github.com/QwenLM/qwen-code/pull/3031)) +- core: handle empty OAuth refresh response body ([#3123](https://github.com/QwenLM/qwen-code/pull/3123)) +- followup: fix follow-up suggestions not working on OpenAI-compatible providers ([#3151](https://github.com/QwenLM/qwen-code/pull/3151)) +- cli: recover from stuck bracketed-paste mode and keep Ctrl+C reachable ([#3181](https://github.com/QwenLM/qwen-code/pull/3181)) +- cli: set qwen3.5-plus as default model for Coding Plan ([#3193](https://github.com/QwenLM/qwen-code/pull/3193)) +- core: respect respectGitIgnore setting in @file injection path ([#3197](https://github.com/QwenLM/qwen-code/pull/3197)) +- core: show clear error when MCP server cwd does not exist ([#3192](https://github.com/QwenLM/qwen-code/pull/3192)) +- cli: honor --openai-api-key in non-interactive auth validation ([#3187](https://github.com/QwenLM/qwen-code/pull/3187)) +- cli: stop refilling input with prior prompt on cancel ([#3208](https://github.com/QwenLM/qwen-code/pull/3208)) +- core: allow Unicode characters in agent names ([#3194](https://github.com/QwenLM/qwen-code/pull/3194)) + +### Documentation + +- readme: Add announcement for Qwen OAuth free tier policy adjustment ([#3207](https://github.com/QwenLM/qwen-code/pull/3207)) +- update quota exceeded alternatives to OpenRouter and Fireworks ([#3217](https://github.com/QwenLM/qwen-code/pull/3217)) + +### Other + +- chore: remove legacy directories (.gcp, .aoneci, hello, .allstar) ([#3199](https://github.com/QwenLM/qwen-code/pull/3199)) +- ci(release): parallelize release validation ([#3132](https://github.com/QwenLM/qwen-code/pull/3132)) +- chore: bump version to 0.14.4 ([#3209](https://github.com/QwenLM/qwen-code/pull/3209)) + +## [0.14.3](https://github.com/QwenLM/qwen-code/releases/tag/v0.14.3) - 2026-04-10 + +### Added + +- plan: add "Yes, restore previous mode" option when exiting plan mode ([#3008](https://github.com/QwenLM/qwen-code/pull/3008)) +- review: enhance /review with deterministic analysis, autofix, and security hardening ([#2932](https://github.com/QwenLM/qwen-code/pull/2932)) +- ui: add customizable status line with /statusline command ([#2923](https://github.com/QwenLM/qwen-code/pull/2923)) + +### Changed + +- centralize IDE diff interaction in CoreToolScheduler ([#2728](https://github.com/QwenLM/qwen-code/pull/2728)) +- rename verboseMode to compactMode for better UX clarity ([#3075](https://github.com/QwenLM/qwen-code/pull/3075)) + +### Fixed + +- ui: Remove dead dirs state and unused hook parameter from InputPrompt ([#2891](https://github.com/QwenLM/qwen-code/pull/2891)) +- followup: prevent tool call UI leak and Enter accept buffer race ([#2872](https://github.com/QwenLM/qwen-code/pull/2872)) +- core: add getDefaultPermission and allowExternalPaths to ripGrep tool ([#2948](https://github.com/QwenLM/qwen-code/pull/2948)) +- webui: fix chat input scrollbar not draggable in VS Code plugin ([#3038](https://github.com/QwenLM/qwen-code/pull/3038)) +- bundle: inline tree-sitter WASM for bundled installs ([#2985](https://github.com/QwenLM/qwen-code/pull/2985)) +- cli: serialize subagent confirmation focus to prevent concurrent input conflicts ([#2930](https://github.com/QwenLM/qwen-code/pull/2930)) +- permissions: match env-prefixed shell commands against saved permission rules ([#2850](https://github.com/QwenLM/qwen-code/pull/2850)) +- prevent Shift+Tab from accepting prompt placeholder suggestion ([#3060](https://github.com/QwenLM/qwen-code/pull/3060)) +- weixin: add missing iLink headers to QR code login flow ([#3044](https://github.com/QwenLM/qwen-code/pull/3044)) +- improve /model --fast description clarity ([#3077](https://github.com/QwenLM/qwen-code/pull/3077)) +- cli: add 'detail' subcommand to /context command ([#3042](https://github.com/QwenLM/qwen-code/pull/3042)) +- persist ProceedAlways permission outcome in compact mode ([#3069](https://github.com/QwenLM/qwen-code/pull/3069)) +- add --fast hint to /model description for discoverability ([#3086](https://github.com/QwenLM/qwen-code/pull/3086)) + +### Other + +- chore: remove outdated pr-review skill ([#3028](https://github.com/QwenLM/qwen-code/pull/3028)) +- test: add tests for confirmation-bus, prompt-registry, and cli/core modules ([#2272](https://github.com/QwenLM/qwen-code/pull/2272)) +- [codex] fix checkpointing init in non-repo directories ([#3041](https://github.com/QwenLM/qwen-code/pull/3041)) +- chore: bump version to 0.14.3 ([#3112](https://github.com/QwenLM/qwen-code/pull/3112)) + +## [0.14.2](https://github.com/QwenLM/qwen-code/releases/tag/v0.14.2) - 2026-04-08 + +### Added + +- cli: implement /plan command for plan mode ([#2921](https://github.com/QwenLM/qwen-code/pull/2921)) +- core: thinking block cross-turn retention with idle cleanup ([#2897](https://github.com/QwenLM/qwen-code/pull/2897)) +- core: adaptive output token escalation (8K default + 64K retry) ([#2898](https://github.com/QwenLM/qwen-code/pull/2898)) +- add bugfix workflow, test-engineer agent, and debugging skills ([#2881](https://github.com/QwenLM/qwen-code/pull/2881)) +- add qwen3.6-plus model to ModelStudio Coding Plan ([#3015](https://github.com/QwenLM/qwen-code/pull/3015)) + +### Fixed + +- vscode-ide-companion: fix blank screen in VS Code 0.14.1 webview ([#2959](https://github.com/QwenLM/qwen-code/pull/2959)) +- hooks: preserve null exit code from signal kills instead of collapsing to 0 ([#2976](https://github.com/QwenLM/qwen-code/pull/2976)) +- cli: disable follow-up suggestions by default ([#2954](https://github.com/QwenLM/qwen-code/pull/2954)) +- cli: fix csiUPrefix error in Linux/Wayland ([#2995](https://github.com/QwenLM/qwen-code/pull/2995)) +- cli: sync packages/cli version and sandboxImageUri to 0.14.2 ([#3026](https://github.com/QwenLM/qwen-code/pull/3026)) + +### Other + +- bump version to 0.14.2 ([#3020](https://github.com/QwenLM/qwen-code/pull/3020)) + +## [0.14.1](https://github.com/QwenLM/qwen-code/releases/tag/v0.14.1) - 2026-04-07 + +### Added + +- cli: enhance /btw side question with improved prompt and Ctrl+C/D cancel ([#2776](https://github.com/QwenLM/qwen-code/pull/2776)) +- cli, webui: add follow-up suggestions feature ([#2525](https://github.com/QwenLM/qwen-code/pull/2525)) +- webui: unify remaining tool display labels ([#2595](https://github.com/QwenLM/qwen-code/pull/2595)) +- allow Ctrl+Y to skip rate-limit retry delay immediately ([#2420](https://github.com/QwenLM/qwen-code/pull/2420)) +- prompt: add dangerous actions behavior guidance in system prompt ([#2889](https://github.com/QwenLM/qwen-code/pull/2889)) +- core: implement mid-turn queue drain for agent execution ([#2854](https://github.com/QwenLM/qwen-code/pull/2854)) +- to #2767, support verbose and compact mode swither with ctrl-o ([#2770](https://github.com/QwenLM/qwen-code/pull/2770)) + +### Changed + +- tools: remove duplicate proxy setup in WebFetchTool ([#2888](https://github.com/QwenLM/qwen-code/pull/2888)) + +### Fixed + +- hooks: clean up abort listener in error handler ([#2841](https://github.com/QwenLM/qwen-code/pull/2841)) +- cli: commit pending AI response before adding hook system message ([#2848](https://github.com/QwenLM/qwen-code/pull/2848)) +- subagents: preserve session subagents during cache refresh ([#2895](https://github.com/QwenLM/qwen-code/pull/2895)) +- telegram: send only failed chunk as plaintext fallback ([#2894](https://github.com/QwenLM/qwen-code/pull/2894)) +- auth: only release token refresh lock if it was acquired ([#2893](https://github.com/QwenLM/qwen-code/pull/2893)) +- extensions: handle individual extension update check failures ([#2892](https://github.com/QwenLM/qwen-code/pull/2892)) +- mcp: clear OAuth callback timeout on all completion paths ([#2890](https://github.com/QwenLM/qwen-code/pull/2890)) +- mcp: clean up directory listener on connect failure ([#2896](https://github.com/QwenLM/qwen-code/pull/2896)) +- permissions: allow non-core tools to bypass coreTools allowlist ([#2843](https://github.com/QwenLM/qwen-code/pull/2843)) +- prevent output-language.md from being overwritten on startup ([#2842](https://github.com/QwenLM/qwen-code/pull/2842)) +- cli: restore ? shortcuts in vim normal mode ([#2884](https://github.com/QwenLM/qwen-code/pull/2884)) +- cli: prevent ideCommand failure from breaking all slash commands… ([#2822](https://github.com/QwenLM/qwen-code/pull/2822)) +- improve ACP connection reliability with spawn retry and auto-reconnect ([#2804](https://github.com/QwenLM/qwen-code/pull/2804)) +- vscode: inherit model selection for new chat tabs ([#2802](https://github.com/QwenLM/qwen-code/pull/2802)) +- hooks: parse JSON output on exit code 2 to preserve hook additionalContext ([#2815](https://github.com/QwenLM/qwen-code/pull/2815)) +- cli: remove quote-based drag detection to prevent input lag ([#2837](https://github.com/QwenLM/qwen-code/pull/2837)) +- cli: restore previous theme on /theme cancel (refs #2833) ([#2834](https://github.com/QwenLM/qwen-code/pull/2834)) +- extensions: await async calls in extension refresh chain ([#2835](https://github.com/QwenLM/qwen-code/pull/2835)) +- cli: preserve runtime-added models when saving settings ([#2455](https://github.com/QwenLM/qwen-code/pull/2455)) +- tools: exit_plan_mode now exits correctly in YOLO mode ([#2586](https://github.com/QwenLM/qwen-code/pull/2586)) +- vscode: remove @vscode/vsce from devDependencies to fix local build ([#2824](https://github.com/QwenLM/qwen-code/pull/2824)) +- webui: remove @qwen-code/qwen-code-core dependency ([#2902](https://github.com/QwenLM/qwen-code/pull/2902)) +- core: coerce stringified JSON values for anyOf/oneOf MCP tool schemas ([#2858](https://github.com/QwenLM/qwen-code/pull/2858)) +- weixin: add missing iLink-App-Id and iLink-App-ClientVersion headers ([#2943](https://github.com/QwenLM/qwen-code/pull/2943)) + +### Other + +- chore: bump version to 0.14.1 ([#2849](https://github.com/QwenLM/qwen-code/pull/2849)) +- Fix Markdown table cell separator escaping in MarkdownDisplay.tsx ([#2463](https://github.com/QwenLM/qwen-code/pull/2463)) +- Remove CODEOWNERS file ([#2937](https://github.com/QwenLM/qwen-code/pull/2937)) + +## [0.14.0](https://github.com/QwenLM/qwen-code/releases/tag/v0.14.0) - 2026-04-03 + +### Added + +- hooks: remove experimental flag and add disabled state UI ([#2781](https://github.com/QwenLM/qwen-code/pull/2781)) +- vscode: add retry logic and auto-reconnect for ACP connection ([#2666](https://github.com/QwenLM/qwen-code/pull/2666)) +- add cross-provider model selection for subagents ([#2698](https://github.com/QwenLM/qwen-code/pull/2698)) +- extension: Add npm registry support for extension installation ([#2719](https://github.com/QwenLM/qwen-code/pull/2719)) +- cron: add in-session loop scheduling with cron tools ([#2731](https://github.com/QwenLM/qwen-code/pull/2731)) +- channels: add extensible Channels platform with plugin system and Telegram/WeChat/DingTalk channels ([#2628](https://github.com/QwenLM/qwen-code/pull/2628)) +- mcp: add reconnect command and implement auto-reconnect logic ([#2428](https://github.com/QwenLM/qwen-code/pull/2428)) + +### Changed + +- ui: improve hook event handling with dedicated history items ([#2696](https://github.com/QwenLM/qwen-code/pull/2696)) +- PR #2666 ACP retry/reconnect logic ([#2792](https://github.com/QwenLM/qwen-code/pull/2792)) + +### Fixed + +- add .qwen path replacement in markdown files during extension install ([#2769](https://github.com/QwenLM/qwen-code/pull/2769)) +- normalize proxy URLs to support addresses without protocol prefix ([#2745](https://github.com/QwenLM/qwen-code/pull/2745)) +- make /compress handle tool-heavy conversations correctly ([#2659](https://github.com/QwenLM/qwen-code/pull/2659)) +- core: robustly resolve tree-sitter WASM path for symlinked CLI installations ([#2764](https://github.com/QwenLM/qwen-code/pull/2764)) +- prevent subagent telemetry from overwriting main agent footer context ([#2765](https://github.com/QwenLM/qwen-code/pull/2765)) +- upgrade @lydell/node-pty to 1.2.0-beta.10 to fix PTY FD leak on macOS ([#2777](https://github.com/QwenLM/qwen-code/pull/2777)) +- allow web fetch approvals in plan mode ([#2763](https://github.com/QwenLM/qwen-code/pull/2763)) +- prevent orphan ACP processes on tab close and clean up MCP subprocesses on shutdown ([#2662](https://github.com/QwenLM/qwen-code/pull/2662)) +- cli: enhance KeypressProvider with kitty sequence timeout manage… ([#2612](https://github.com/QwenLM/qwen-code/pull/2612)) +- delete design doc ([#2789](https://github.com/QwenLM/qwen-code/pull/2789)) +- resolve punycode to userland package and skip env var test in sandbox ([#2796](https://github.com/QwenLM/qwen-code/pull/2796)) +- hide skills with cron allowedTools when cron is disabled ([#2811](https://github.com/QwenLM/qwen-code/pull/2811)) + +### Other + +- Enhance /review: add verification, false positive control, and PR comments ([#2687](https://github.com/QwenLM/qwen-code/pull/2687)) +- chore(channels): make plugin-example private and remove from release workflow ([#2801](https://github.com/QwenLM/qwen-code/pull/2801)) +- 🎉 feat: add Qwen3.6-Plus model support ([#2820](https://github.com/QwenLM/qwen-code/pull/2820)) + +## [0.13.2](https://github.com/QwenLM/qwen-code/releases/tag/v0.13.2) - 2026-03-30 + +### Added + +- add bundled qc-helper skill, qwen-code-claw reference, and README claw guide ([#2623](https://github.com/QwenLM/qwen-code/pull/2623)) + +### Fixed + +- docs: update references from Bailian to ModelStudio in README an… ([#2714](https://github.com/QwenLM/qwen-code/pull/2714)) +- shell: resolve Git Bash path for node-pty on Windows ([#2733](https://github.com/QwenLM/qwen-code/pull/2733)) +- resolve /clear command and ESC key lag caused by hooks system ([#2656](https://github.com/QwenLM/qwen-code/pull/2656)) +- preserve original line endings (CRLF/LF) when editing files ([#2707](https://github.com/QwenLM/qwen-code/pull/2707)) +- core: resolve tree-sitter wasm path for symlinked CLI ([#2744](https://github.com/QwenLM/qwen-code/pull/2744)) +- cli: prevent terminal response leakage on high-latency SSH ([#2718](https://github.com/QwenLM/qwen-code/pull/2718)) +- shell: remove command substitution deny check from getDefaultPermission ([#2747](https://github.com/QwenLM/qwen-code/pull/2747)) +- make list_directory integration test more deterministic ([#2752](https://github.com/QwenLM/qwen-code/pull/2752)) + +### Documentation + +- clarify envKey usage and add env field examples ([#2715](https://github.com/QwenLM/qwen-code/pull/2715)) + +### Other + +- chore: bump version to 0.13.1 ([#2716](https://github.com/QwenLM/qwen-code/pull/2716)) +- chore: release v0.13.2 ([#2750](https://github.com/QwenLM/qwen-code/pull/2750)) + +## [0.13.1](https://github.com/QwenLM/qwen-code/releases/tag/v0.13.1) - 2026-03-27 + +### Added + +- hooks: Add comprehensive hook execution telemetry ([#2421](https://github.com/QwenLM/qwen-code/pull/2421)) +- hooks ui: refactor ui for Qwen Code hooks ([#2602](https://github.com/QwenLM/qwen-code/pull/2602)) +- human-readable permission labels, deny rule feedback, and multi-dir search improvements ([#2637](https://github.com/QwenLM/qwen-code/pull/2637)) +- auth: implement Alibaba Cloud Standard API Key support ([#2668](https://github.com/QwenLM/qwen-code/pull/2668)) + +### Fixed + +- extensions: support non-GitHub git URLs for extension installation ([#2539](https://github.com/QwenLM/qwen-code/pull/2539)) +- cli: `/memory show --project` and `--global` now display all configured context files ([#2368](https://github.com/QwenLM/qwen-code/pull/2368)) +- mcp: restore trust+isTrustedFolder permission check in getDefaultPermission ([#2642](https://github.com/QwenLM/qwen-code/pull/2642)) +- cli: preserve selected auth type on startup auth failure ([#2080](https://github.com/QwenLM/qwen-code/pull/2080)) +- vscode-ide-companion: improve ACP error handling to prevent silent loading hangs ([#2546](https://github.com/QwenLM/qwen-code/pull/2546)) +- vscode-ide-companion: silence secondary sidebar warning on older VS Code versions ([#2545](https://github.com/QwenLM/qwen-code/pull/2545)) +- lsp: improve C++/Java/Python language server support ([#2547](https://github.com/QwenLM/qwen-code/pull/2547)) +- vscode-ide-companion: preserve model metadata on switch ([#2591](https://github.com/QwenLM/qwen-code/pull/2591)) +- windows: support git bash/MSYS2 shell detection on Windows ([#2645](https://github.com/QwenLM/qwen-code/pull/2645)) +- shell: handle PTY race condition errors gracefully ([#2611](https://github.com/QwenLM/qwen-code/pull/2611)) +- acp-integration/agent: clear stale subagent diff confirmation after IDE accept ([#2631](https://github.com/QwenLM/qwen-code/pull/2631)) +- use config working directory for OpenAI logger path resolution in ACP mode ([#2675](https://github.com/QwenLM/qwen-code/pull/2675)) +- @ file search stops working after selecting a slash command ([#2694](https://github.com/QwenLM/qwen-code/pull/2694)) +- acp: align permission flow across clients ([#2690](https://github.com/QwenLM/qwen-code/pull/2690)) + +### Documentation + +- add hooks documentation and fix JSON schema ([#2679](https://github.com/QwenLM/qwen-code/pull/2679)) + +### Other + +- test(sdk): improve tool control docs and add pattern matching tests ([#2644](https://github.com/QwenLM/qwen-code/pull/2644)) +- test(sdk): improve permission message pattern matching ([#2712](https://github.com/QwenLM/qwen-code/pull/2712)) + +## [0.13.0](https://github.com/QwenLM/qwen-code/releases/tag/v0.13.0) - 2026-03-23 + +### Added + +- add system prompt customization options in SDK and CLI ([#2400](https://github.com/QwenLM/qwen-code/pull/2400)) +- hooks: implement hooks extension mechanism ([#2352](https://github.com/QwenLM/qwen-code/pull/2352)) +- core: execute task tools concurrently for improved performance ([#2434](https://github.com/QwenLM/qwen-code/pull/2434)) +- arena: Add agent collaboration arena with multi-model competitive execution ([#1912](https://github.com/QwenLM/qwen-code/pull/1912)) +- ui: Display token usage in the loading/progress indicator ([#2445](https://github.com/QwenLM/qwen-code/pull/2445)) +- vscode-ide-companion: add Tab key fill-only behavior for completions ([#2431](https://github.com/QwenLM/qwen-code/pull/2431)) +- add /context command to display context window token usage breakdown ([#1835](https://github.com/QwenLM/qwen-code/pull/1835)) +- support skills in .agents directory and other provider directories ([#2202](https://github.com/QwenLM/qwen-code/pull/2202)) +- add `auth` CLI command and Qwen Code Claw skill ([#2440](https://github.com/QwenLM/qwen-code/pull/2440)) +- export: add metadata and statistics tracking ([#2328](https://github.com/QwenLM/qwen-code/pull/2328)) +- hooks: Implement 10 core event hooks for session lifecycle and tool execution ([#2203](https://github.com/QwenLM/qwen-code/pull/2203)) +- support permission ([#2283](https://github.com/QwenLM/qwen-code/pull/2283)) +- add .agents/skills as a skill provider directory ([#2476](https://github.com/QwenLM/qwen-code/pull/2476)) +- vscode-ide-companion: add image paste support ([#1978](https://github.com/QwenLM/qwen-code/pull/1978)) +- storage: support configurable runtime output directory ([#2127](https://github.com/QwenLM/qwen-code/pull/2127)) +- core: add Explore agent and rename TaskTool to AgentTool ([#2489](https://github.com/QwenLM/qwen-code/pull/2489)) +- hooks: use extension dir files instead of tmp dir files ([#2478](https://github.com/QwenLM/qwen-code/pull/2478)) +- cli: add /btw slash command for ephemeral side questions ([#2371](https://github.com/QwenLM/qwen-code/pull/2371)) + +### Changed + +- core: improve error handling and quota detection ([#2458](https://github.com/QwenLM/qwen-code/pull/2458)) +- Refactors the VS Code file completion system to use fuzzy search ([#2437](https://github.com/QwenLM/qwen-code/pull/2437)) + +### Fixed + +- pipeline: handle duplicate finish_reason chunks from OpenRouter ([#2403](https://github.com/QwenLM/qwen-code/pull/2403)) +- cli: show newest-first history for Ctrl+R command search ([#2425](https://github.com/QwenLM/qwen-code/pull/2425)) +- Ensure message_start and message_stop events are paired in SDK streaming ([#2448](https://github.com/QwenLM/qwen-code/pull/2448)) +- core: add truncation support for MCP tool output ([#2446](https://github.com/QwenLM/qwen-code/pull/2446)) +- vscode-ide-companion: update URI handling for Windows paths ([#2457](https://github.com/QwenLM/qwen-code/pull/2457)) +- test: update LoadingIndicator snapshot for correct output alignment ([#2469](https://github.com/QwenLM/qwen-code/pull/2469)) +- correct token limits for MiniMax-M2.5 and GLM models ([#2470](https://github.com/QwenLM/qwen-code/pull/2470)) +- update TOS link in VS Code extension README ([#2495](https://github.com/QwenLM/qwen-code/pull/2495)) +- preserve modalities during OpenAI logging request conversion ([#2473](https://github.com/QwenLM/qwen-code/pull/2473)) +- clean up ACP connection state when child process exits ([#2472](https://github.com/QwenLM/qwen-code/pull/2472)) +- vscode-ide-companion: pass proxy configuration to CLI ([#2501](https://github.com/QwenLM/qwen-code/pull/2501)) +- include bundled skills directory in published package ([#2521](https://github.com/QwenLM/qwen-code/pull/2521)) +- update Discord invite link to permanent URL ([#2535](https://github.com/QwenLM/qwen-code/pull/2535)) +- web-fetch: add simplified system instruction to prevent AI greeting responses ([#2610](https://github.com/QwenLM/qwen-code/pull/2610)) +- hooks: terminate hook child processes when user exits CLI ([#2607](https://github.com/QwenLM/qwen-code/pull/2607)) + +### Documentation + +- rename QWEN.md to AGENTS.md to follow community best practices ([#2527](https://github.com/QwenLM/qwen-code/pull/2527)) +- add Screenshots/Video Demo section to PR template ([#2533](https://github.com/QwenLM/qwen-code/pull/2533)) + +### Other + +- chore: bump version to 0.13.0 ([#2451](https://github.com/QwenLM/qwen-code/pull/2451)) +- Fix shell permission parsing and test-created debug artifacts ([#2536](https://github.com/QwenLM/qwen-code/pull/2536)) + +## [0.12.6](https://github.com/QwenLM/qwen-code/releases/tag/v0.12.6) - 2026-03-17 + +### Fixed + +- improve max_tokens handling with conservative defaults ([#2438](https://github.com/QwenLM/qwen-code/pull/2438)) + +### Other + +- chore: bump version to 0.12.6 ([#2442](https://github.com/QwenLM/qwen-code/pull/2442)) + +## [0.12.5](https://github.com/QwenLM/qwen-code/releases/tag/v0.12.5) - 2026-03-16 + +### Fixed + +- shell: resolve Windows encoding issues for non-ASCII output ([#2423](https://github.com/QwenLM/qwen-code/pull/2423)) + +### Other + +- test(sdk): simplify integration tests for reliability ([#2410](https://github.com/QwenLM/qwen-code/pull/2410)) +- chore: bump version to 0.12.5 ([#2422](https://github.com/QwenLM/qwen-code/pull/2422)) + +## [0.12.4](https://github.com/QwenLM/qwen-code/releases/tag/v0.12.4) - 2026-03-16 + +### Added + +- skills: add bundled /review skill for out-of-the-box code review ([#2348](https://github.com/QwenLM/qwen-code/pull/2348)) +- skills: add docs audit and update helpers ([#2397](https://github.com/QwenLM/qwen-code/pull/2397)) + +### Fixed + +- insight: handle individual LLM failures in qualitative insights (#2341) ([#2361](https://github.com/QwenLM/qwen-code/pull/2361)) +- core: add deepseek-r1 to output token limit patterns ([#2362](https://github.com/QwenLM/qwen-code/pull/2362)) +- i18n: localize slash command descriptions ([#2333](https://github.com/QwenLM/qwen-code/pull/2333)) +- core: guard against empty choices in convertOpenAIResponseToGemini ([#2364](https://github.com/QwenLM/qwen-code/pull/2364)) +- extension: disable symlinks on Windows during git clone to fix install failure ([#2286](https://github.com/QwenLM/qwen-code/pull/2286)) +- core: reject PDF files to prevent session corruption (fixes #2020) ([#2024](https://github.com/QwenLM/qwen-code/pull/2024)) +- cli: allow /dev/ptmx and /dev/ttys* in macOS permissive sandbox ([#2391](https://github.com/QwenLM/qwen-code/pull/2391)) +- correct hooks JSON schema type definition ([#2280](https://github.com/QwenLM/qwen-code/pull/2280)) +- core: strip orphaned user entries before retry to prevent API errors ([#2367](https://github.com/QwenLM/qwen-code/pull/2367)) +- core: correctly capture rapid pty outputs in interactive shell mode ([#2389](https://github.com/QwenLM/qwen-code/pull/2389)) +- vscode: prevent race conditions in prompt cancellation and streaming ([#2374](https://github.com/QwenLM/qwen-code/pull/2374)) +- core: improve shell tool truncation, simplify tool output handling, and remove summarization ([#2388](https://github.com/QwenLM/qwen-code/pull/2388)) +- remove redundant plan files ([#2407](https://github.com/QwenLM/qwen-code/pull/2407)) +- core: normalize Windows PATH-like env keys for shell execution ([#1904](https://github.com/QwenLM/qwen-code/pull/1904)) +- auto-detect max_tokens from model when not set by provider ([#2356](https://github.com/QwenLM/qwen-code/pull/2356)) + +### Documentation + +- explain Docker sandbox runtime and Java usage ([#1642](https://github.com/QwenLM/qwen-code/pull/1642)) +- integration: add ACP Registry for Zed and JetBrains integration docs ([#2372](https://github.com/QwenLM/qwen-code/pull/2372)) + +### Other + +- Docs/subagent system prompt limits ([#2001](https://github.com/QwenLM/qwen-code/pull/2001)) +- Keep rejected plan content visible in plan mode ([#2157](https://github.com/QwenLM/qwen-code/pull/2157)) +- chore(CODEOWNERS): remove required reviewers for vscode-ide-companion and webui packages ([#2408](https://github.com/QwenLM/qwen-code/pull/2408)) +- Increase DEFAULT_OUTPUT_TOKEN_LIMIT from 8K to 16K ([#2411](https://github.com/QwenLM/qwen-code/pull/2411)) + +## [0.12.3](https://github.com/QwenLM/qwen-code/releases/tag/v0.12.3) - 2026-03-13 + +### Added + +- mcp: improve OAuth auth UX - post-auth feedback, i18n, clear auth, and bug fixes ([#2327](https://github.com/QwenLM/qwen-code/pull/2327)) + +### Fixed + +- ide: resolve IDE connection issues in some VSCode clients and optimize connection config lookup ([#2322](https://github.com/QwenLM/qwen-code/pull/2322)) +- core: correct GPT-5.x input token limit to 272K ([#2345](https://github.com/QwenLM/qwen-code/pull/2345)) +- shell: pass args as string on Windows to prevent quoting issues ([#2347](https://github.com/QwenLM/qwen-code/pull/2347)) +- core: disable node-pty on older Windows builds with broken ConPTY ([#2349](https://github.com/QwenLM/qwen-code/pull/2349)) +- improve qwen mcp add option handling for arrays ([#2245](https://github.com/QwenLM/qwen-code/pull/2245)) +- cli: prevent Ctrl+F from leaking to PTY as ^F artifact ([#2350](https://github.com/QwenLM/qwen-code/pull/2350)) +- core: remove duplicate exports in packages/core/src/index.ts ([#2265](https://github.com/QwenLM/qwen-code/pull/2265)) +- cli: remove unused debug log session setup in loadSettings ([#2355](https://github.com/QwenLM/qwen-code/pull/2355)) + +### Other + +- Refactors `FileSystemService` interface to use ACP-aligned request/response objects ([#2344](https://github.com/QwenLM/qwen-code/pull/2344)) + +## [0.12.2](https://github.com/QwenLM/qwen-code/releases/tag/v0.12.2) - 2026-03-12 + +### Added + +- core: add truncation support to LS tool ([#2324](https://github.com/QwenLM/qwen-code/pull/2324)) + +### Fixed + +- export command should use current session ID instead of loadLastSession ([#2268](https://github.com/QwenLM/qwen-code/pull/2268)) +- webui: add Tab key support to CompletionMenu ([#2308](https://github.com/QwenLM/qwen-code/pull/2308)) +- core: convert array content to string for DeepSeek API ([#2320](https://github.com/QwenLM/qwen-code/pull/2320)) +- improve ACP file operation error handling ([#2298](https://github.com/QwenLM/qwen-code/pull/2298)) +- remove QR code from OAuth authentication UI to prevent screen flickering ([#2315](https://github.com/QwenLM/qwen-code/pull/2315)) +- clear retry error messages promptly after auto-retry succeeds ([#2326](https://github.com/QwenLM/qwen-code/pull/2326)) + +### Other + +- chore: add yiliang114 as code owner for vscode-ide-companion and webui ([#2312](https://github.com/QwenLM/qwen-code/pull/2312)) +- chore: Release v0.12.2 ([#2307](https://github.com/QwenLM/qwen-code/pull/2307)) + +## [0.12.1](https://github.com/QwenLM/qwen-code/releases/tag/v0.12.1) - 2026-03-11 + +### Added + +- cli: change temporary filename prefix to qwen-edit- ([#2045](https://github.com/QwenLM/qwen-code/pull/2045)) +- vscode-ide-companion: add sidebar view and multi-position chat layout ([#2188](https://github.com/QwenLM/qwen-code/pull/2188)) + +### Fixed + +- mcp: use scopes from protected resource metadata (RFC 9728) ([#2212](https://github.com/QwenLM/qwen-code/pull/2212)) +- cli: clear static error message when starting new query ([#2110](https://github.com/QwenLM/qwen-code/pull/2110)) +- clean up MCP server display and add CONCAT merge strategy for mcp allowed/excluded lists ([#2219](https://github.com/QwenLM/qwen-code/pull/2219)) +- hooks: Fix failing hook integration tests by updating hook scripts to create hook_invoke_count.txt ([#2230](https://github.com/QwenLM/qwen-code/pull/2230)) +- hooks: Remove useless expect ([#2238](https://github.com/QwenLM/qwen-code/pull/2238)) +- core: skip openDiff in YOLO mode to prevent VS Code editor from opening ([#2221](https://github.com/QwenLM/qwen-code/pull/2221)) +- cli: suppress Windows pty resize race condition ([#2289](https://github.com/QwenLM/qwen-code/pull/2289)) +- vscode-ide-companion: map ENOENT errors to ACP RESOURCE_NOT_FOUND in readTextFile ([#2291](https://github.com/QwenLM/qwen-code/pull/2291)) + +### Other + +- improve readability of context compression description ([#2224](https://github.com/QwenLM/qwen-code/pull/2224)) +- refactore: Start qwen after installation ([#2290](https://github.com/QwenLM/qwen-code/pull/2290)) + +## [0.12.0](https://github.com/QwenLM/qwen-code/releases/tag/v0.12.0) - 2026-03-09 + +### Added + +- add tabWidth support for code highlighting and replace tabs with spaces in CodeColorizer ([#2077](https://github.com/QwenLM/qwen-code/pull/2077)) +- export-html: viewer for tool call results ([#2085](https://github.com/QwenLM/qwen-code/pull/2085)) +- terminal-capture: add streaming capture with GIF generation ([#2116](https://github.com/QwenLM/qwen-code/pull/2116)) +- commands: add custom QC commands for GitHub workflows ([#2117](https://github.com/QwenLM/qwen-code/pull/2117)) +- add support for printable CSI-u keys in KeypressContext ([#1827](https://github.com/QwenLM/qwen-code/pull/1827)) +- add JSON Schema validation for VS Code settings ([#1830](https://github.com/QwenLM/qwen-code/pull/1830)) +- hooks: Implement hooks system infrastructure with CLI and UI management ([#1988](https://github.com/QwenLM/qwen-code/pull/1988)) +- shell: enable PTY by default and various enhancements ([#2108](https://github.com/QwenLM/qwen-code/pull/2108)) +- Enhance MCP Management TUI with dynamic enable/disable and runtime updates ([#1831](https://github.com/QwenLM/qwen-code/pull/1831)) +- Add interactive TUI for extension management ([#2008](https://github.com/QwenLM/qwen-code/pull/2008)) +- Implement AskUserQuestionTool for interactive user queries ([#1828](https://github.com/QwenLM/qwen-code/pull/1828)) + +### Changed + +- cli: consolidate message components and fix leading icon display issues ([#2120](https://github.com/QwenLM/qwen-code/pull/2120)) +- unify sandbox configuration naming and improve telemetry config ([#1793](https://github.com/QwenLM/qwen-code/pull/1793)) +- acp: migrate ACP integration to @agentclientprotocol/sdk ([#2063](https://github.com/QwenLM/qwen-code/pull/2063)) + +### Fixed + +- cli: parse markdown command frontmatter on Windows CRLF/BOM ([#2078](https://github.com/QwenLM/qwen-code/pull/2078)) +- cli: ignore stream-json input format in TTY mode to prevent hanging ([#2047](https://github.com/QwenLM/qwen-code/pull/2047)) +- core: prevent duplicate function-call yields from trailing stream chunks ([#2125](https://github.com/QwenLM/qwen-code/pull/2125)) +- ide: add async DNS check for host.docker.internal in container environments ([#1817](https://github.com/QwenLM/qwen-code/pull/1817)) +- handle symlinks during extension installation ([#2056](https://github.com/QwenLM/qwen-code/pull/2056)) +- preserve original encoding when reading/writing non-UTF-8 files ([#2073](https://github.com/QwenLM/qwen-code/pull/2073)) +- install: Add tips and fix installation issues for installation scripts ([#2118](https://github.com/QwenLM/qwen-code/pull/2118)) +- core: add independent retry budget for transient stream anomalies ([#2126](https://github.com/QwenLM/qwen-code/pull/2126)) +- windows: resolve silent failures caused by CRLF line endings (#1868) ([#1890](https://github.com/QwenLM/qwen-code/pull/1890)) +- cli: keep AGENTS.md enabled by default context reset ([#2082](https://github.com/QwenLM/qwen-code/pull/2082)) +- core: remove LLM-based loop detection and enable skipLoopDetection by default ([#2092](https://github.com/QwenLM/qwen-code/pull/2092)) +- keyboard: handle Kitty keypad private-use keycodes ([#2137](https://github.com/QwenLM/qwen-code/pull/2137)) +- hooks: fix result aggregator for userPromptSubmit and fix enable for integration test ([#2139](https://github.com/QwenLM/qwen-code/pull/2139)) +- hooks: Move enable from hooks to hookConfig and add max turns ([#2156](https://github.com/QwenLM/qwen-code/pull/2156)) +- Hooks online integration test failed ([#2183](https://github.com/QwenLM/qwen-code/pull/2183)) +- improve MCP Management & Extension Management TUI based on 0.12.0 feedback ([#2208](https://github.com/QwenLM/qwen-code/pull/2208)) +- test: use toContain instead of toBe for file content assertion ([#2218](https://github.com/QwenLM/qwen-code/pull/2218)) + +### Other + +- chore: bump version to 0.12.0 ([#2090](https://github.com/QwenLM/qwen-code/pull/2090)) +- Refactor settings migration to sequential framework with atomic file writes ([#2037](https://github.com/QwenLM/qwen-code/pull/2037)) +- chore: add @DragonnZhang to CODEOWNERS ([#2138](https://github.com/QwenLM/qwen-code/pull/2138)) + +## [0.11.1](https://github.com/QwenLM/qwen-code/releases/tag/v0.11.1) - 2026-03-03 + +### Added + +- support AGENTS.md as default context file ([#2018](https://github.com/QwenLM/qwen-code/pull/2018)) +- cli: add Ctrl+Y shortcut to retry failed requests ([#2011](https://github.com/QwenLM/qwen-code/pull/2011)) +- cli: improve auth dialog UX with clearer three-option layout ([#2030](https://github.com/QwenLM/qwen-code/pull/2030)) +- i18n: strengthen output-language.md template to enforce language compliance ([#2005](https://github.com/QwenLM/qwen-code/pull/2005)) + +### Changed + +- core: extract single tool-call execution path ([#1999](https://github.com/QwenLM/qwen-code/pull/1999)) + +### Fixed + +- subagent: append output-language.md to subagent system prompt and prioritize project-level settings ([#1993](https://github.com/QwenLM/qwen-code/pull/1993)) +- core/rateLimit: add support for rate limit error code 1305 and custom retry error codes ([#1995](https://github.com/QwenLM/qwen-code/pull/1995)) +- logging: reduce excessive streaming output in session history logs ([#2041](https://github.com/QwenLM/qwen-code/pull/2041)) +- add modality defaults to prevent API errors when reading PDFs and other media ([#1982](https://github.com/QwenLM/qwen-code/pull/1982)) +- detect and protect against truncated tool call output ([#2021](https://github.com/QwenLM/qwen-code/pull/2021)) +- acp: add session/set_config_option method to enable config option updates from Zed UI ([#2059](https://github.com/QwenLM/qwen-code/pull/2059)) +- dashscope: support subdomain URL patterns for DashScope provider detection ([#2060](https://github.com/QwenLM/qwen-code/pull/2060)) + +### Documentation + +- update installation instructions ([#1994](https://github.com/QwenLM/qwen-code/pull/1994)) + +### Other + +- chore: bump version to 0.11.1 ([#2026](https://github.com/QwenLM/qwen-code/pull/2026)) +- Fix ACP protocol compatibility issues with Zed editor ([#2017](https://github.com/QwenLM/qwen-code/pull/2017)) + +## [0.11.0](https://github.com/QwenLM/qwen-code/releases/tag/v0.11.0) - 2026-02-28 + +### Added + +- Add clipboard image support and attachment UI to CLI ([#1612](https://github.com/QwenLM/qwen-code/pull/1612)) +- support MCP readOnlyHint annotation in plan mode (#1826) ([#1837](https://github.com/QwenLM/qwen-code/pull/1837)) +- Add insight command for personalized programming insights ([#1593](https://github.com/QwenLM/qwen-code/pull/1593)) +- auth: add automatic backup of settings.json before auth modification ([#1952](https://github.com/QwenLM/qwen-code/pull/1952)) +- cli: Increase /insight feature exposure via weighted tips ([#2019](https://github.com/QwenLM/qwen-code/pull/2019)) + +### Fixed + +- Installation script permission check for arch os and add sudo check ([#1877](https://github.com/QwenLM/qwen-code/pull/1877)) +- normalize Windows paths to lowercase for case-insensitive session matching ([#1768](https://github.com/QwenLM/qwen-code/pull/1768)) +- enforce plan mode restrictions in ACP sessions ([#1812](https://github.com/QwenLM/qwen-code/pull/1812)) +- test: keep plan mode active during ACP integration test ([#1956](https://github.com/QwenLM/qwen-code/pull/1956)) +- change workspaceFolders capability to boolean for LSP servers ([#1929](https://github.com/QwenLM/qwen-code/pull/1929)) +- unblock input after ESC cancel ([#1796](https://github.com/QwenLM/qwen-code/pull/1796)) + +### Documentation + +- enhance modelProviders documentation with comprehensive examples and behavior clarifications ([#1927](https://github.com/QwenLM/qwen-code/pull/1927)) +- fix documentation errors in commands and model-providers ([#1962](https://github.com/QwenLM/qwen-code/pull/1962)) + +### Other + +- 📸 terminal-capture: CLI Terminal Screenshot Automation ([#1840](https://github.com/QwenLM/qwen-code/pull/1840)) +- chore: bump version to 0.11.0 ([#1953](https://github.com/QwenLM/qwen-code/pull/1953)) +- Merge coder-model and qwen3.5-plus, remove vision auto-switching ([#1852](https://github.com/QwenLM/qwen-code/pull/1852)) +- Rename GEMINI_CLI_INTEGRATION_TEST to QWEN_CODE_INTEGRATION_TEST and refactor sandbox user handling ([#1966](https://github.com/QwenLM/qwen-code/pull/1966)) + +## [0.10.6](https://github.com/QwenLM/qwen-code/releases/tag/v0.10.6) - 2026-02-24 + +### Added + +- add third-party models (glm-4.7, kimi-k2.5, qwen3-coder-next) to Coding Plan ([#1907](https://github.com/QwenLM/qwen-code/pull/1907)) +- runner: support auth_type for model configuration ([#1874](https://github.com/QwenLM/qwen-code/pull/1874)) +- update bailian coding plan models ([#1931](https://github.com/QwenLM/qwen-code/pull/1931)) + +### Fixed + +- fs: Improve BOM detection with length check and codePointAt ([#1857](https://github.com/QwenLM/qwen-code/pull/1857)) +- update security vulnerability reporting channel ([#1921](https://github.com/QwenLM/qwen-code/pull/1921)) + +### Other + +- chore: bump version to 0.10.5 ([#1886](https://github.com/QwenLM/qwen-code/pull/1886)) +- Fix release workflows: standardize notes generation and add prerelease labels ([#1885](https://github.com/QwenLM/qwen-code/pull/1885)) +- chore: exclude .qwen/commands/ and .qwen/skills/ from gitignore ([#1847](https://github.com/QwenLM/qwen-code/pull/1847)) + +## [0.10.5](https://github.com/QwenLM/qwen-code/releases/tag/v0.10.5) - 2026-02-18 + +### Added + +- add qwen3.5-plus model support for Coding Plan ([#1867](https://github.com/QwenLM/qwen-code/pull/1867)) + +### Other + +- chore: bump version to 0.10.4 ([#1864](https://github.com/QwenLM/qwen-code/pull/1864)) + +## [0.10.4](https://github.com/QwenLM/qwen-code/releases/tag/v0.10.4) - 2026-02-18 + +### Documentation + +- add news banner about Qwen3.5-Plus launch ([#1854](https://github.com/QwenLM/qwen-code/pull/1854)) + +### Other + +- Fix sandbox user permission in integration tests ([#1843](https://github.com/QwenLM/qwen-code/pull/1843)) +- Add Coding Plan Global/Intl region support ([#1860](https://github.com/QwenLM/qwen-code/pull/1860)) +- chore: bump version to 0.10.3 ([#1863](https://github.com/QwenLM/qwen-code/pull/1863)) + +## [0.10.3](https://github.com/QwenLM/qwen-code/releases/tag/v0.10.3) - 2026-02-16 + +### Added + +- update readme ([#1853](https://github.com/QwenLM/qwen-code/pull/1853)) + +### Documentation + +- improve settings.json configuration guide with quick setup examples ([#1850](https://github.com/QwenLM/qwen-code/pull/1850)) + +### Other + +- chore: bump version to 0.10.2 ([#1844](https://github.com/QwenLM/qwen-code/pull/1844)) + +## [0.10.2](https://github.com/QwenLM/qwen-code/releases/tag/v0.10.2) - 2026-02-14 + +### Added + +- add TPM throttling error handling with 1-minute retry delay ([#1791](https://github.com/QwenLM/qwen-code/pull/1791)) + +### Changed + +- cli: unify Escape key handling in AppContainer ([#1824](https://github.com/QwenLM/qwen-code/pull/1824)) + +### Fixed + +- Fix node installation permission issue in shell script ([#1819](https://github.com/QwenLM/qwen-code/pull/1819)) +- prevent AbortSignal listener memory leak ([#1811](https://github.com/QwenLM/qwen-code/pull/1811)) +- correct showLineNumbers default value to true ([#1813](https://github.com/QwenLM/qwen-code/pull/1813)) +- support JSON Schema draft-2020-12 for MCP tools (fixes #1818) ([#1821](https://github.com/QwenLM/qwen-code/pull/1821)) + +### Documentation + +- update authentication documentation with Coding Plan setup guide ([#1800](https://github.com/QwenLM/qwen-code/pull/1800)) + +### Other + +- chore: bump version to 0.10.1 ([#1808](https://github.com/QwenLM/qwen-code/pull/1808)) +- Add dev launch config and preserve existing NODE_OPTIONS ([#1784](https://github.com/QwenLM/qwen-code/pull/1784)) +- Fix abort listener accumulation in subagent while loop ([#1825](https://github.com/QwenLM/qwen-code/pull/1825)) +- Fix auth UI to use semantic theme colors and correct selection sync ([#1823](https://github.com/QwenLM/qwen-code/pull/1823)) +- Add --session-id support for CLI and SDK ([#1822](https://github.com/QwenLM/qwen-code/pull/1822)) + +## [0.10.1](https://github.com/QwenLM/qwen-code/releases/tag/v0.10.1) - 2026-02-11 + +### Added + +- add MCP tool progress update support in TUI and SDK mode ([#1756](https://github.com/QwenLM/qwen-code/pull/1756)) +- add Coding Plan authentication mode with unified AuthDialog ([#1788](https://github.com/QwenLM/qwen-code/pull/1788)) +- coding-plan: implement Coding Plan configuration management and update prompts ([#1805](https://github.com/QwenLM/qwen-code/pull/1805)) + +### Fixed + +- Warning in installation shell script ([#1771](https://github.com/QwenLM/qwen-code/pull/1771)) +- ui: resolve model not updating in top-right corner ([#1662](https://github.com/QwenLM/qwen-code/pull/1662)) +- cli: use PowerShell Get-Command for Windows sandbox detection ([#1604](https://github.com/QwenLM/qwen-code/pull/1604)) +- prioritize local path detection in extension installation ([#1770](https://github.com/QwenLM/qwen-code/pull/1770)) +- auth-model-login-ui: prevent Enter key from triggering empty message submission ([#1773](https://github.com/QwenLM/qwen-code/pull/1773)) + +### Other + +- Fix SDK MCP integration tests by updating hardcoded tool names to use constants ([#1769](https://github.com/QwenLM/qwen-code/pull/1769)) + +## [0.10.0](https://github.com/QwenLM/qwen-code/releases/tag/v0.10.0) - 2026-02-09 + +### Added + +- query: add support for resuming sessions with session ID ([#1714](https://github.com/QwenLM/qwen-code/pull/1714)) +- Remove Smart Edit tool and ClearcutLogger ([#1684](https://github.com/QwenLM/qwen-code/pull/1684)) +- sdk: add resume, continue options and extend authType support ([#1726](https://github.com/QwenLM/qwen-code/pull/1726)) +- debug mode output refactor — route console calls to logfile-first debugLogger ([#1610](https://github.com/QwenLM/qwen-code/pull/1610)) +- paste: add large paste placeholder and fix enter-submit on macOS ([#1713](https://github.com/QwenLM/qwen-code/pull/1713)) +- promote Agent Skills from experimental to stable ([#1738](https://github.com/QwenLM/qwen-code/pull/1738)) +- add source information tracking in telemetry logs ([#1653](https://github.com/QwenLM/qwen-code/pull/1653)) +- settings: add settings.env field for environment variable configuration ([#1751](https://github.com/QwenLM/qwen-code/pull/1751)) + +### Changed + +- i18n: translate Agent as 智能体 ([#1718](https://github.com/QwenLM/qwen-code/pull/1718)) +- remove read_many_files tool, add readManyFiles utility for user @-commands ([#1673](https://github.com/QwenLM/qwen-code/pull/1673)) + +### Fixed + +- docker: fix build error and enable manual version builds ([#1722](https://github.com/QwenLM/qwen-code/pull/1722)) +- settings: rename negative settings to positive naming (disable* -> enable*) ([#1330](https://github.com/QwenLM/qwen-code/pull/1330)) +- clarify is_background parameter is required in docs and examples ([#1716](https://github.com/QwenLM/qwen-code/pull/1716)) +- vscode-ide-companion: Fix UI display issues with server-side timestamp and file path extraction ([#1682](https://github.com/QwenLM/qwen-code/pull/1682)) +- ui: resolve auth not updating in top-right corner ([#1670](https://github.com/QwenLM/qwen-code/pull/1670)) +- use openai model instead of index=0 in acp integration test ([#1733](https://github.com/QwenLM/qwen-code/pull/1733)) +- cli: route sandbox diagnostic messages to stderr ([#1735](https://github.com/QwenLM/qwen-code/pull/1735)) +- cli: prevent Tab key from cycling approval mode when autocomplete is active on Windows ([#1736](https://github.com/QwenLM/qwen-code/pull/1736)) +- mcp: improve MCP server management and authentication ([#1752](https://github.com/QwenLM/qwen-code/pull/1752)) +- core: properly handle MCP multi-part tool results in OpenAI converter ([#1755](https://github.com/QwenLM/qwen-code/pull/1755)) +- integration-tests: correct MCP tool name in simple-mcp-server test ([#1763](https://github.com/QwenLM/qwen-code/pull/1763)) + +### Documentation + +- Update Linux/Mac installation commands in README ([#1739](https://github.com/QwenLM/qwen-code/pull/1739)) + +### Other + +- ci(sdk-release): use stable CLI tags for SDK releases ([#1710](https://github.com/QwenLM/qwen-code/pull/1710)) +- add hint for installing external source extensions ([#1694](https://github.com/QwenLM/qwen-code/pull/1694)) +- Feat/javasdk alpha 202501 ([#1717](https://github.com/QwenLM/qwen-code/pull/1717)) +- Add export command for session history with markdown and HTML formats ([#1515](https://github.com/QwenLM/qwen-code/pull/1515)) +- Add FORK_MODE support to ProcessTransport for Electron IPC integration ([#1719](https://github.com/QwenLM/qwen-code/pull/1719)) +- Fix ACP model selection to handle all configured authentication types ([#1555](https://github.com/QwenLM/qwen-code/pull/1555)) +- chore: Reduce Qwen OAuth free quota from 2000 to 1000 requests per day ([#1730](https://github.com/QwenLM/qwen-code/pull/1730)) +- Add CLI source selection for SDK releases and fix subagent output handler ([#1732](https://github.com/QwenLM/qwen-code/pull/1732)) +- Fix CLI argument parsing for /dist/cli/cli.js entry point ([#1758](https://github.com/QwenLM/qwen-code/pull/1758)) + +## [0.9.1](https://github.com/QwenLM/qwen-code/releases/tag/v0.9.1) - 2026-02-05 + +### Added + +- core: add symlink support for skill manager ([#1690](https://github.com/QwenLM/qwen-code/pull/1690)) +- Preserve UTF-8 BOM when editing files ([#1680](https://github.com/QwenLM/qwen-code/pull/1680)) + +### Fixed + +- core: properly cleanup MCP server subprocesses on exit ([#1285](https://github.com/QwenLM/qwen-code/pull/1285)) +- cli: expand MCP @server: resource references ([#1531](https://github.com/QwenLM/qwen-code/pull/1531)) +- core: auto-enable WebFetch and WebSearch tools in Plan mode ([#1686](https://github.com/QwenLM/qwen-code/pull/1686)) +- normalize skill file content in extensions to handle BOM and CRLF ([#1667](https://github.com/QwenLM/qwen-code/pull/1667)) +- ci: honor manual preview version input ([#1665](https://github.com/QwenLM/qwen-code/pull/1665)) +- core: handle heredoc in command substitution guard ([#1701](https://github.com/QwenLM/qwen-code/pull/1701)) +- core: Preserve trailing whitespace in newString during edits ([#1688](https://github.com/QwenLM/qwen-code/pull/1688)) +- enable Shift+Tab shortcut in Windows PowerShell ([#1607](https://github.com/QwenLM/qwen-code/pull/1607)) +- core: enforce tool restrictions in subagents ([#1691](https://github.com/QwenLM/qwen-code/pull/1691)) + +### Other + +- test(cli): stabilize AuthDialog ESC assertion ([#1535](https://github.com/QwenLM/qwen-code/pull/1535)) +- build: Improve build efficiency and add dev mode ([#1681](https://github.com/QwenLM/qwen-code/pull/1681)) +- [AnthropicContentGenerator] optimize: ADD cache_control for system and last user text message ([#1613](https://github.com/QwenLM/qwen-code/pull/1613)) + +## [0.9.0](https://github.com/QwenLM/qwen-code/releases/tag/v0.9.0) - 2026-02-03 + +### Added + +- core: improve error message when skill is invoked as tool ([#1623](https://github.com/QwenLM/qwen-code/pull/1623)) +- core: improve retry logic for better 429/5xx error handling ([#1628](https://github.com/QwenLM/qwen-code/pull/1628)) +- add extra_body support for OpenAI-compatible providers ([#1654](https://github.com/QwenLM/qwen-code/pull/1654)) +- add multi-modal input support (image, PDF, audio) across all content generators ([#1564](https://github.com/QwenLM/qwen-code/pull/1564)) +- clarify output formats for non-interactive mode ([#1579](https://github.com/QwenLM/qwen-code/pull/1579)) +- add concurrent runner for batch CLI execution ([#1640](https://github.com/QwenLM/qwen-code/pull/1640)) +- webui: implement unified UI architecture with shared component library ([#1543](https://github.com/QwenLM/qwen-code/pull/1543)) + +### Fixed + +- Use resolved authType to initialize ACP agent ([#1622](https://github.com/QwenLM/qwen-code/pull/1622)) +- acp: stream subagent text + reasoning chunks ([#1626](https://github.com/QwenLM/qwen-code/pull/1626)) +- ensure output-language.md is created before config initialization ([#1637](https://github.com/QwenLM/qwen-code/pull/1637)) +- security: prevent command injection via newline bypass in shell command validation ([#1638](https://github.com/QwenLM/qwen-code/pull/1638)) +- React/React-DOM version inconsistency in package.json and lockfile ([#1659](https://github.com/QwenLM/qwen-code/pull/1659)) +- core: avoid passing undici agent to Anthropic SDK ([#1663](https://github.com/QwenLM/qwen-code/pull/1663)) +- vscode-ide-companion: fix race conditions and improve @ file completion search ([#1676](https://github.com/QwenLM/qwen-code/pull/1676)) + +### Other + +- chore: bump version to 0.8.2 ([#1632](https://github.com/QwenLM/qwen-code/pull/1632)) +- Add parentToolCallId and subagentType for ACP subagent tracking ([#1620](https://github.com/QwenLM/qwen-code/pull/1620)) +- Fix Claude plugin resource collection to respect marketplace config ([#1639](https://github.com/QwenLM/qwen-code/pull/1639)) +- Support model selection through ACP in vscode ide companion ([#1582](https://github.com/QwenLM/qwen-code/pull/1582)) +- Add Zed extension for Qwen Code agent server ([#1630](https://github.com/QwenLM/qwen-code/pull/1630)) +- Add experimental LSP support for code intelligence ([#1401](https://github.com/QwenLM/qwen-code/pull/1401)) +- chore: bump version to 0.9.0 ([#1661](https://github.com/QwenLM/qwen-code/pull/1661)) +- Add contextWindowSize Configuration Support ([#1539](https://github.com/QwenLM/qwen-code/pull/1539)) + +## [0.8.2](https://github.com/QwenLM/qwen-code/releases/tag/v0.8.2) - 2026-01-30 + +_See [GitHub release](https://github.com/QwenLM/qwen-code/releases/tag/v0.8.2) for details._ + +## [0.8.1](https://github.com/QwenLM/qwen-code/releases/tag/v0.8.1) - 2026-01-27 + +### Added + +- i18n: Add Japanese language support and fix menu labels in other languages ([#1392](https://github.com/QwenLM/qwen-code/pull/1392)) +- Add Portuguese (pt-BR) language support with complete translations and refactor i18n architecture for better language management. ([#1616](https://github.com/QwenLM/qwen-code/pull/1616)) +- add skills and agents display to extension list with i18n support ([#1629](https://github.com/QwenLM/qwen-code/pull/1629)) + +### Fixed + +- replace EnvHttpProxyAgent with ProxyAgent to suppress experimental warning ([#1624](https://github.com/QwenLM/qwen-code/pull/1624)) + +### Other + +- test: improve SDK integration test reliability with createResultWaiter and ProcessTransport error handling ([#1627](https://github.com/QwenLM/qwen-code/pull/1627)) +- chore: bump version to 0.8.1 ([#1631](https://github.com/QwenLM/qwen-code/pull/1631)) + +## [0.8.0](https://github.com/QwenLM/qwen-code/releases/tag/v0.8.0) - 2026-01-27 + +### Added + +- cli: use dim colors for YOLO/auto-accept mode borders ([#1476](https://github.com/QwenLM/qwen-code/pull/1476)) +- Redesign CLI welcome screen and settings dialog ([#1513](https://github.com/QwenLM/qwen-code/pull/1513)) +- extensions: add detail command and improve extension validation ([#1580](https://github.com/QwenLM/qwen-code/pull/1580)) +- add runtime-aware fetch options for Anthropic and OpenAI providers ([#1516](https://github.com/QwenLM/qwen-code/pull/1516)) +- extensions: add plugin selection UI for Claude marketplace ([#1592](https://github.com/QwenLM/qwen-code/pull/1592)) +- make DiffRenderer respect ui.showLineNumbers setting ([#1561](https://github.com/QwenLM/qwen-code/pull/1561)) +- Implement temporary dismissal for feedback dialogs with persistent prompting ([#1590](https://github.com/QwenLM/qwen-code/pull/1590)) + +### Fixed + +- replace spawn shell option with explicit shell args to avoid Node.js DEP0190 warning ([#1234](https://github.com/QwenLM/qwen-code/pull/1234)) +- skip non-existent file imports instead of warning (ENOENT) ([#1563](https://github.com/QwenLM/qwen-code/pull/1563)) +- correct schema field name for context.loadFromIncludeDirectories ([#1609](https://github.com/QwenLM/qwen-code/pull/1609)) +- vscode-ide-companion: platform-specific builds with optimized VSIX packaging ([#1586](https://github.com/QwenLM/qwen-code/pull/1586)) +- cli: pass paths to read_many_files in ACP ([#1614](https://github.com/QwenLM/qwen-code/pull/1614)) +- Add toolName metadata for ACP tool call messages ([#1615](https://github.com/QwenLM/qwen-code/pull/1615)) +- cli input stream handling and error management ([#1588](https://github.com/QwenLM/qwen-code/pull/1588)) + +### Documentation + +- add Trendshift badge to README ([#1553](https://github.com/QwenLM/qwen-code/pull/1553)) + +### Other + +- chore: remove tiktoken dependency and use API-reported token counts ([#1526](https://github.com/QwenLM/qwen-code/pull/1526)) +- Add /bug command to non-interactive mode ([#1552](https://github.com/QwenLM/qwen-code/pull/1552)) +- Feat/extension ([#1534](https://github.com/QwenLM/qwen-code/pull/1534)) +- fix dependences of core pkg ([#1574](https://github.com/QwenLM/qwen-code/pull/1574)) +- fix github pkg dependence ([#1576](https://github.com/QwenLM/qwen-code/pull/1576)) +- fix prompts denpendence ([#1578](https://github.com/QwenLM/qwen-code/pull/1578)) +- Add VSCode IDE Companion Release Workflow ([#1542](https://github.com/QwenLM/qwen-code/pull/1542)) +- Update command usage in add.ts to reflect new name ([#1572](https://github.com/QwenLM/qwen-code/pull/1572)) +- Security: Fix awk/sed Command Injection in READ_ONLY_ROOT_COMMANDS ([#1601](https://github.com/QwenLM/qwen-code/pull/1601)) +- Simplify permission response handling and fix edit failure and VSCode diff issues ([#1581](https://github.com/QwenLM/qwen-code/pull/1581)) + +## [0.7.2](https://github.com/QwenLM/qwen-code/releases/tag/v0.7.2) - 2026-01-20 + +### Added + +- cli: add settings support for experimental skills ([#1497](https://github.com/QwenLM/qwen-code/pull/1497)) +- Improve QWEN. md file loading by filtering system files and limiting scope ([#1486](https://github.com/QwenLM/qwen-code/pull/1486)) +- add user feedback dialog ([#1465](https://github.com/QwenLM/qwen-code/pull/1465)) + +### Fixed + +- include --acp flag in tool exclusion check ([#1499](https://github.com/QwenLM/qwen-code/pull/1499)) +- vscode-ide-companion: simplify ELECTRON_RUN_AS_NODE detection and improve README ([#1496](https://github.com/QwenLM/qwen-code/pull/1496)) +- mistranslation of token ([#1508](https://github.com/QwenLM/qwen-code/pull/1508)) +- unable to remove MCP server when only one element exists ([#1490](https://github.com/QwenLM/qwen-code/pull/1490)) +- core: parse skills frontmatter with CRLF/BOM ([#1528](https://github.com/QwenLM/qwen-code/pull/1528)) +- cli: relocate skills setting to experimental namespace ([#1538](https://github.com/QwenLM/qwen-code/pull/1538)) +- acp: implement session/set_model method for JetBrains compatibility ([#1521](https://github.com/QwenLM/qwen-code/pull/1521)) +- resolve arrow key navigation conflict between history and completion ([#1519](https://github.com/QwenLM/qwen-code/pull/1519)) +- cli: isolate modelConfigUtils tests from system env vars ([#1545](https://github.com/QwenLM/qwen-code/pull/1545)) +- acp: propagate ENOENT errors correctly and centralize error codes ([#1550](https://github.com/QwenLM/qwen-code/pull/1550)) +- Update Qwen OAuth model information ([#1548](https://github.com/QwenLM/qwen-code/pull/1548)) + +### Documentation + +- auth: add Coding Plan documentation ([#1509](https://github.com/QwenLM/qwen-code/pull/1509)) + +### Other + +- Fix credential management and authentication flows with improved generation config preservation ([#1510](https://github.com/QwenLM/qwen-code/pull/1510)) + +## [0.7.1](https://github.com/QwenLM/qwen-code/releases/tag/v0.7.1) - 2026-01-14 + +### Fixed + +- docs ([#1485](https://github.com/QwenLM/qwen-code/pull/1485)) + +### Other + +- Reduce slow quit by trimming skills watchers ([#1489](https://github.com/QwenLM/qwen-code/pull/1489)) +- Fix timing issue in LoggingContentGenerator initialization ([#1492](https://github.com/QwenLM/qwen-code/pull/1492)) +- chore: bump version to 0.7.1 ([#1494](https://github.com/QwenLM/qwen-code/pull/1494)) + +## [0.7.0](https://github.com/QwenLM/qwen-code/releases/tag/v0.7.0) - 2026-01-14 + +### Added + +- Modify the selection order of user Settings and workspace Settings ([#1433](https://github.com/QwenLM/qwen-code/pull/1433)) +- multi-provider models config support ([#1291](https://github.com/QwenLM/qwen-code/pull/1291)) +- skills: add experimental /skills command + hot reload ([#1436](https://github.com/QwenLM/qwen-code/pull/1436)) +- shell: add optional timeout for foreground commands ([#1469](https://github.com/QwenLM/qwen-code/pull/1469)) +- Customizing the sandbox environment ([#1473](https://github.com/QwenLM/qwen-code/pull/1473)) + +### Changed + +- convert IDE context from JSON to plain text format ([#1424](https://github.com/QwenLM/qwen-code/pull/1424)) + +### Fixed + +- core: ensure OAuth URL always displayed in headless mode ([#1426](https://github.com/QwenLM/qwen-code/pull/1426)) +- multi provider cold start issue ([#1439](https://github.com/QwenLM/qwen-code/pull/1439)) +- cli: /memory show respects context.fileName ([#1428](https://github.com/QwenLM/qwen-code/pull/1428)) +- resolve external editor launch failure on macOS and Windows ([#1351](https://github.com/QwenLM/qwen-code/pull/1351)) +- core: handle missing delta in OpenAI stream chunks ([#1448](https://github.com/QwenLM/qwen-code/pull/1448)) +- cli: default sandbox UID/GID mapping on Linux ([#1453](https://github.com/QwenLM/qwen-code/pull/1453)) +- shell: prevent console window flash on Windows for foreground tasks ([#1464](https://github.com/QwenLM/qwen-code/pull/1464)) +- cli: warn on deprecated/unknown settings keys ([#1427](https://github.com/QwenLM/qwen-code/pull/1427)) +- core: improve OAuth fetch-failed diagnostics ([#1457](https://github.com/QwenLM/qwen-code/pull/1457)) +- SDK release workflow and stability improvements ([#1462](https://github.com/QwenLM/qwen-code/pull/1462)) +- vscode-ide-companion: Fix cross-platform CLI terminal execution ([#1474](https://github.com/QwenLM/qwen-code/pull/1474)) +- cli: improve error message display for object errors ([#1386](https://github.com/QwenLM/qwen-code/pull/1386)) +- Improve qwen-oauth fallback message display ([#1480](https://github.com/QwenLM/qwen-code/pull/1480)) +- docs errors and add community contacts ([#1484](https://github.com/QwenLM/qwen-code/pull/1484)) + +### Documentation + +- vscode-ide-companion: update vscode extension readme ([#1472](https://github.com/QwenLM/qwen-code/pull/1472)) +- add integration guide for JetBrains IDEs ([#1411](https://github.com/QwenLM/qwen-code/pull/1411)) + +### Other + +- chore: bump version to 0.7.0 ([#1434](https://github.com/QwenLM/qwen-code/pull/1434)) +- Support Jupyter Notebook (.ipynb) File Code Selection ([#1460](https://github.com/QwenLM/qwen-code/pull/1460)) +- Feature/add custom headers support ([#1447](https://github.com/QwenLM/qwen-code/pull/1447)) +- Fix auth type switching and model persistence issues ([#1478](https://github.com/QwenLM/qwen-code/pull/1478)) +- Skip flaky permission control test ([#1482](https://github.com/QwenLM/qwen-code/pull/1482)) + +## [0.6.2](https://github.com/QwenLM/qwen-code/releases/tag/v0.6.2) - 2026-01-12 + +_See [GitHub release](https://github.com/QwenLM/qwen-code/releases/tag/v0.6.2) for details._ + +## [0.6.1](https://github.com/QwenLM/qwen-code/releases/tag/v0.6.1) - 2026-01-07 + +### Added + +- i18n: auto-detect LLM output language from system locale ([#1247](https://github.com/QwenLM/qwen-code/pull/1247)) +- i18n: update Russian translation with new strings ([#1293](https://github.com/QwenLM/qwen-code/pull/1293)) +- i18n: add German language support ([#1378](https://github.com/QwenLM/qwen-code/pull/1378)) +- graduate `--experimental-acp` to stable `--acp` flag ([#1355](https://github.com/QwenLM/qwen-code/pull/1355)) +- cli: add direct argument support for /approval-mode command ([#1391](https://github.com/QwenLM/qwen-code/pull/1391)) +- Optimize the issue where an error message indicating unfriendli… ([#1282](https://github.com/QwenLM/qwen-code/pull/1282)) + +### Fixed + +- core: coerce string boolean values in schema validation ([#1284](https://github.com/QwenLM/qwen-code/pull/1284)) +- cli: skip update check when disableUpdateNag is true ([#1397](https://github.com/QwenLM/qwen-code/pull/1397)) +- improve tool execution feedback in non-interactive mode ([#1383](https://github.com/QwenLM/qwen-code/pull/1383)) +- exit with non-zero code on API errors in text mode ([#1376](https://github.com/QwenLM/qwen-code/pull/1376)) +- preserve whitespace in thinking content for stream-json output format ([#1365](https://github.com/QwenLM/qwen-code/pull/1365)) +- improve windows background process handling and cleanup ([#1146](https://github.com/QwenLM/qwen-code/pull/1146)) +- cli,core: honor `tools.core` / `tools.allowed` in non-interactive runs ([#1406](https://github.com/QwenLM/qwen-code/pull/1406)) +- core: don’t force reasoning/topP defaults for OpenAI-compatible APIs ([#1415](https://github.com/QwenLM/qwen-code/pull/1415)) + +### Documentation + +- add AionUi to ecosystem section ([#1360](https://github.com/QwenLM/qwen-code/pull/1360)) + +### Other + +- Fix multi-language and documentation related issues. ([#1332](https://github.com/QwenLM/qwen-code/pull/1332)) +- support merge ChatCompletionContentPart && add filterEmptyMessages ([#1288](https://github.com/QwenLM/qwen-code/pull/1288)) +- Feat/javasdk ([#1412](https://github.com/QwenLM/qwen-code/pull/1412)) +- Doc/qwencode java ([#1414](https://github.com/QwenLM/qwen-code/pull/1414)) +- Fix resume command broken after new chat ([#1374](https://github.com/QwenLM/qwen-code/pull/1374)) +- chore: bump version to 0.6.1 ([#1423](https://github.com/QwenLM/qwen-code/pull/1423)) +- [OpenaiContentGenerate] convertOpenAIResponseToGemini record thoughtsTokenCount ([#1393](https://github.com/QwenLM/qwen-code/pull/1393)) + +## [0.6.0](https://github.com/QwenLM/qwen-code/releases/tag/v0.6.0) - 2025-12-26 + +### Added + +- add a link to Gemini CLI Desktop for Qwen Code users who prefer desktop UIs ([#286](https://github.com/QwenLM/qwen-code/pull/286)) +- add Anthropic provider, normalize auth/env config, and centralize logging ([#1331](https://github.com/QwenLM/qwen-code/pull/1331)) +- vscode-ide-companion: in/output part in the bash toolcall can be clicked to open a temporary file ([#1345](https://github.com/QwenLM/qwen-code/pull/1345)) +- support /compress and /summary commands for non-interactive & ACP ([#1322](https://github.com/QwenLM/qwen-code/pull/1322)) + +### Fixed + +- cli path parsing issue in Windows ([#1321](https://github.com/QwenLM/qwen-code/pull/1321)) +- mcp: update OAuth client name for Figma MCP server compatibility ([#1302](https://github.com/QwenLM/qwen-code/pull/1302)) + +### Documentation + +- readme: clarify value props, usage modes ([#1312](https://github.com/QwenLM/qwen-code/pull/1312)) + +### Other + +- Add Gemini provider, remove legacy Google OAuth, and tune generation … ([#1297](https://github.com/QwenLM/qwen-code/pull/1297)) +- Add experimental Skills feature ([#1314](https://github.com/QwenLM/qwen-code/pull/1314)) +- chore: revert sdk-typescript version to 0.1.0 and update release workflow ([#1325](https://github.com/QwenLM/qwen-code/pull/1325)) +- Follow up on pr #1331 ([#1340](https://github.com/QwenLM/qwen-code/pull/1340)) +- fix one flaky integration test ([#1343](https://github.com/QwenLM/qwen-code/pull/1343)) +- Enhance VS Code extension description with download link ([#1341](https://github.com/QwenLM/qwen-code/pull/1341)) +- fix one flaky integration test ([#1349](https://github.com/QwenLM/qwen-code/pull/1349)) +- chore: improve release-sdk workflow ([#1334](https://github.com/QwenLM/qwen-code/pull/1334)) +- context left on vscode ide companion ([#1327](https://github.com/QwenLM/qwen-code/pull/1327)) + +## [0.5.2](https://github.com/QwenLM/qwen-code/releases/tag/v0.5.2) - 2025-12-22 + +### Other + +- pump version to 0.6.0 ([#1309](https://github.com/QwenLM/qwen-code/pull/1309)) +- Improve robustness of getProcessInfo with try-catch and empty output fallback ([#1310](https://github.com/QwenLM/qwen-code/pull/1310)) +- fix e2e workflow ([#1311](https://github.com/QwenLM/qwen-code/pull/1311)) + +## [0.5.1](https://github.com/QwenLM/qwen-code/releases/tag/v0.5.1) - 2025-12-19 + +### Added + +- expose gitCoAuthor setting in settings.json and document it ([#1228](https://github.com/QwenLM/qwen-code/pull/1228)) +- ui: add /resume slash command to switch between sessions ([#1239](https://github.com/QwenLM/qwen-code/pull/1239)) + +### Fixed + +- handle case-insensitive path comparison in glob tool on Windows ([#1174](https://github.com/QwenLM/qwen-code/pull/1174)) +- ide: rename Gemini references to Qwen and fix IDE connection path ([#1205](https://github.com/QwenLM/qwen-code/pull/1205)) +- add configurable OpenAPI 3.0 schema compliance for Gemini compatibility (#1186) ([#1214](https://github.com/QwenLM/qwen-code/pull/1214)) +- cli: handle PAT tokens and credentials in git remote URL parsing ([#1225](https://github.com/QwenLM/qwen-code/pull/1225)) +- cli: add -r and -C aliases for --resume and --continue options ([#1286](https://github.com/QwenLM/qwen-code/pull/1286)) +- default values of sampling params ([#1269](https://github.com/QwenLM/qwen-code/pull/1269)) +- vscode-ide-companion: Optimize stream termination handling and fix style layering issues ([#1261](https://github.com/QwenLM/qwen-code/pull/1261)) +- optimize windows process tree retrieval to prevent hang ([#1231](https://github.com/QwenLM/qwen-code/pull/1231)) + +### Documentation + +- add comprehensive MCP Quick Start guides and examples ([#796](https://github.com/QwenLM/qwen-code/pull/796)) +- restructure docs to follow the Claude Code organization ([#1260](https://github.com/QwenLM/qwen-code/pull/1260)) + +### Other + +- Add chat recording toggle (CLI + settings) and disable recording in tests ([#1254](https://github.com/QwenLM/qwen-code/pull/1254)) +- pump version to 0.5.1 ([#1259](https://github.com/QwenLM/qwen-code/pull/1259)) +- remove one flaky integration test ([#1275](https://github.com/QwenLM/qwen-code/pull/1275)) +- docs:Fix the errors in the document ([#1266](https://github.com/QwenLM/qwen-code/pull/1266)) +- Bundle CLI into SDK package and separate CLI & SDK E2E tests ([#1265](https://github.com/QwenLM/qwen-code/pull/1265)) +- chore(vscode-ide-companion): update vscode engine version from ^1.99.0 to ^1.85.0 ([#1262](https://github.com/QwenLM/qwen-code/pull/1262)) +- IDE companion discovery: switch to ~/.qwen/ide lock files ([#1257](https://github.com/QwenLM/qwen-code/pull/1257)) + +## [0.5.0](https://github.com/QwenLM/qwen-code/releases/tag/v0.5.0) - 2025-12-13 + +### Added + +- i18n: add Russian language support ([#1238](https://github.com/QwenLM/qwen-code/pull/1238)) +- show session resume command on exit ([#1219](https://github.com/QwenLM/qwen-code/pull/1219)) +- add terminal bell setting to enable/disable audio notifications ([#1194](https://github.com/QwenLM/qwen-code/pull/1194)) + +### Changed + +- vscode-ide-companion: optimize CLI detection and version management ([#1248](https://github.com/QwenLM/qwen-code/pull/1248)) + +### Fixed + +- remove redundant if-check and add tests for OpenAI converter ([#1235](https://github.com/QwenLM/qwen-code/pull/1235)) +- vscode-ide-companion: improve cross-platform compatibility in prepackage script ([#1249](https://github.com/QwenLM/qwen-code/pull/1249)) + +### Other + +- test(cli): add tests for /language command and fix LLM output language parsing ([#1236](https://github.com/QwenLM/qwen-code/pull/1236)) +- Add ACP authenticate update message ([#1240](https://github.com/QwenLM/qwen-code/pull/1240)) +- Remove obsolete “corgi mode” ([#1245](https://github.com/QwenLM/qwen-code/pull/1245)) +- Fix/vscode ide companion completion menu content ([#1243](https://github.com/QwenLM/qwen-code/pull/1243)) +- Bundle CLI into VSCode release package ([#1246](https://github.com/QwenLM/qwen-code/pull/1246)) + +## [0.4.1](https://github.com/QwenLM/qwen-code/releases/tag/v0.4.1) - 2025-12-12 + +### Added + +- ui: remove vertical borders from input prompt for easier copy/paste ([#1191](https://github.com/QwenLM/qwen-code/pull/1191)) +- VSCode Extension Implementation ([#1059](https://github.com/QwenLM/qwen-code/pull/1059)) +- update references from Gemini to Qwen in setup commands and gitignore handling ([#1156](https://github.com/QwenLM/qwen-code/pull/1156)) +- Add channel field support for client identification ([#1226](https://github.com/QwenLM/qwen-code/pull/1226)) + +### Fixed + +- prefer UTF-8 encoding for shell output on Windows when detected ([#1157](https://github.com/QwenLM/qwen-code/pull/1157)) +- update vulnerable dependencies (glob, jws, tar, js-yaml) ([#1189](https://github.com/QwenLM/qwen-code/pull/1189)) +- 修复在docker环境中无法连接ide的问题 ([#1230](https://github.com/QwenLM/qwen-code/pull/1230)) +- vscode-ide-companion/auth: deduplicate concurrent authentication calls ([#1223](https://github.com/QwenLM/qwen-code/pull/1223)) + +### Other + +- pump versionm to 0.4.1 ([#1177](https://github.com/QwenLM/qwen-code/pull/1177)) +- Feat/acp usage metadata ([#1176](https://github.com/QwenLM/qwen-code/pull/1176)) +- pump version to 0.5.0 ([#1233](https://github.com/QwenLM/qwen-code/pull/1233)) + +## [0.4.0](https://github.com/QwenLM/qwen-code/releases/tag/v0.4.0) - 2025-12-06 + +### Added + +- basic TypeScript SDK ([#1103](https://github.com/QwenLM/qwen-code/pull/1103)) + +### Fixed + +- shell-utils: resolve command detection on Ubuntu by using shell for builtins ([#1123](https://github.com/QwenLM/qwen-code/pull/1123)) +- update timeout settings and default logging level in SDK ([#1165](https://github.com/QwenLM/qwen-code/pull/1165)) + +### Other + +- Session-Level Conversation History Management ([#1113](https://github.com/QwenLM/qwen-code/pull/1113)) +- pump version to 0.4.0 ([#1132](https://github.com/QwenLM/qwen-code/pull/1132)) +- skip one flaky integration test ([#1137](https://github.com/QwenLM/qwen-code/pull/1137)) +- Skip acp integration test in sandbox environment ([#1141](https://github.com/QwenLM/qwen-code/pull/1141)) +- test: skip qwen-oauth test in containerized environments ([#1150](https://github.com/QwenLM/qwen-code/pull/1150)) +- Remove `/quit-confirm` flow ([#1148](https://github.com/QwenLM/qwen-code/pull/1148)) +- DeepSeek V3.2 Thinking Mode Integration ([#1134](https://github.com/QwenLM/qwen-code/pull/1134)) +- Custom tools support via SDK controlled MCP servers ([#1147](https://github.com/QwenLM/qwen-code/pull/1147)) +- test: separating integration tests for the CLI and SDK ([#1161](https://github.com/QwenLM/qwen-code/pull/1161)) +- test: skip unstable e2e test ([#1166](https://github.com/QwenLM/qwen-code/pull/1166)) + +## [0.3.0](https://github.com/QwenLM/qwen-code/releases/tag/v0.3.0) - 2025-11-28 + +### Added + +- i18n: Add Internationalization Support for UI and LLM Output ([#1058](https://github.com/QwenLM/qwen-code/pull/1058)) + +### Fixed + +- ci: remove non-existent label from release failure issue creation ([#1097](https://github.com/QwenLM/qwen-code/pull/1097)) +- reset authType settings ([#1091](https://github.com/QwenLM/qwen-code/pull/1091)) + +### Other + +- Headless enhancement: add `stream-json` as `input-format`/`output-format` to support programmatically use ([#926](https://github.com/QwenLM/qwen-code/pull/926)) +- chore: pump version to 0.3.0 ([#1085](https://github.com/QwenLM/qwen-code/pull/1085)) +- Improve Usage Statistics by Moving Key Snapshot Fields into Properties ([#1090](https://github.com/QwenLM/qwen-code/pull/1090)) + +## [0.2.3](https://github.com/QwenLM/qwen-code/releases/tag/v0.2.3) - 2025-11-20 + +### Changed + +- auth: enhance useAuthCommand to include history management … ([#1077](https://github.com/QwenLM/qwen-code/pull/1077)) + +### Fixed + +- character encoding corruption when executing the /copy command on Windows. ([#1069](https://github.com/QwenLM/qwen-code/pull/1069)) +- remove broken link ([#1074](https://github.com/QwenLM/qwen-code/pull/1074)) + +### Other + +- chore: pump version to 0.2.3 ([#1073](https://github.com/QwenLM/qwen-code/pull/1073)) +- Disable Prompt Completion Feature ([#1076](https://github.com/QwenLM/qwen-code/pull/1076)) +- Replace spawn with execFile for memory-safe command execution ([#1068](https://github.com/QwenLM/qwen-code/pull/1068)) + +## [0.2.2](https://github.com/QwenLM/qwen-code/releases/tag/v0.2.2) - 2025-11-19 + +### Added + +- openApi configurable window ([#1019](https://github.com/QwenLM/qwen-code/pull/1019)) +- add support for alternative cached_tokens format in OpenAI conv… ([#1035](https://github.com/QwenLM/qwen-code/pull/1035)) +- add support for Trae editor ([#1037](https://github.com/QwenLM/qwen-code/pull/1037)) + +### Changed + +- auth: save authType after successfully authenticated ([#1036](https://github.com/QwenLM/qwen-code/pull/1036)) + +### Fixed + +- core: add modelscope provider to handle stream_options ([#848](https://github.com/QwenLM/qwen-code/pull/848)) +- Improve ripgrep binary detection and cross-platform compatibility ([#1060](https://github.com/QwenLM/qwen-code/pull/1060)) +- skip problematic integration test ([#1065](https://github.com/QwenLM/qwen-code/pull/1065)) + +### Other + +- chore: pump version to 0.2.2 ([#1027](https://github.com/QwenLM/qwen-code/pull/1027)) +- 🎯 Enhance QwenLogger with OS Platform and Version Metadata ([#1053](https://github.com/QwenLM/qwen-code/pull/1053)) +- Add Terminal Attention Notifications for User Alerts ([#1052](https://github.com/QwenLM/qwen-code/pull/1052)) +- Add (limited) slash command support for ACP integration. ([#1020](https://github.com/QwenLM/qwen-code/pull/1020)) +- Fix integration tests ([#1062](https://github.com/QwenLM/qwen-code/pull/1062)) + +## [0.2.1](https://github.com/QwenLM/qwen-code/releases/tag/v0.2.1) - 2025-11-13 + +### Added + +- enhance zed integration with TodoWriteTool and TaskTool support ([#992](https://github.com/QwenLM/qwen-code/pull/992)) + +### Fixed + +- Stream parsing for Windows Zed integration ([#996](https://github.com/QwenLM/qwen-code/pull/996)) +- print request errors for logging only in debug mode ([#1006](https://github.com/QwenLM/qwen-code/pull/1006)) + +### Other + +- chore: pump version to 0.2.1 ([#1005](https://github.com/QwenLM/qwen-code/pull/1005)) +- 🔧 Refactor: Standardize Tool Naming and Configuration System ([#1004](https://github.com/QwenLM/qwen-code/pull/1004)) +- Fix incorrect tools list format in subagent template documentation ([#1026](https://github.com/QwenLM/qwen-code/pull/1026)) +- 🎯 PR: Improve Edit Tool Reliability with Fuzzy Matching Pipeline ([#1025](https://github.com/QwenLM/qwen-code/pull/1025)) +- Add Interactive Approval Mode Dialog ([#1012](https://github.com/QwenLM/qwen-code/pull/1012)) +- Change deepseek token limits regex patterns for deepseek-chat ([#817](https://github.com/QwenLM/qwen-code/pull/817)) + +## [0.2.0](https://github.com/QwenLM/qwen-code/releases/tag/v0.2.0) - 2025-11-07 + +### Added + +- Simplify and Improve Search Tools (glob, grep, ripgrep) ([#969](https://github.com/QwenLM/qwen-code/pull/969)) + +### Changed + +- Unifying the system information display between `/about` and `/bug` commands ([#977](https://github.com/QwenLM/qwen-code/pull/977)) + +### Fixed + +- VSCode detection null check and debug message optimization ([#983](https://github.com/QwenLM/qwen-code/pull/983)) + +### Other + +- chore: pump version to 0.1.5 ([#974](https://github.com/QwenLM/qwen-code/pull/974)) +- 🎯 Feature: Customizable Model Training and Tool Output Management ([#981](https://github.com/QwenLM/qwen-code/pull/981)) +- chore: pump version to 0.2.0 ([#991](https://github.com/QwenLM/qwen-code/pull/991)) + +## [0.1.5](https://github.com/QwenLM/qwen-code/releases/tag/v0.1.5) - 2025-11-07 + +### Added + +- Simplify and Improve Search Tools (glob, grep, ripgrep) ([#969](https://github.com/QwenLM/qwen-code/pull/969)) + +### Changed + +- Unifying the system information display between `/about` and `/bug` commands ([#977](https://github.com/QwenLM/qwen-code/pull/977)) + +### Fixed + +- VSCode detection null check and debug message optimization ([#983](https://github.com/QwenLM/qwen-code/pull/983)) + +### Other + +- chore: pump version to 0.1.5 ([#974](https://github.com/QwenLM/qwen-code/pull/974)) +- 🎯 Feature: Customizable Model Training and Tool Output Management ([#981](https://github.com/QwenLM/qwen-code/pull/981)) +- chore: pump version to 0.2.0 ([#991](https://github.com/QwenLM/qwen-code/pull/991)) + +## [0.1.4](https://github.com/QwenLM/qwen-code/releases/tag/v0.1.4) - 2025-11-05 + +### Added + +- support for custom OpenAI logging directory configuration ([#972](https://github.com/QwenLM/qwen-code/pull/972)) + +### Fixed + +- handle AbortError gracefully when loading commands ([#936](https://github.com/QwenLM/qwen-code/pull/936)) + +### Other + +- chore: pump version to 0.1.4 ([#962](https://github.com/QwenLM/qwen-code/pull/962)) +- chore: Web Search Tool Refactoring with Multi-Provider Support ([#885](https://github.com/QwenLM/qwen-code/pull/885)) +- Fix kimi2 token limits ([#970](https://github.com/QwenLM/qwen-code/pull/970)) + +## [0.1.3](https://github.com/QwenLM/qwen-code/releases/tag/v0.1.3) - 2025-11-04 + +### Fixed + +- Include macOS Seatbelt Sandbox Files in NPM Package ([#949](https://github.com/QwenLM/qwen-code/pull/949)) + +### Other + +- chore: pump version to 0.1.3 ([#939](https://github.com/QwenLM/qwen-code/pull/939)) +- 🐛 Fix: `/ide install` command fails on Windows ([#957](https://github.com/QwenLM/qwen-code/pull/957)) +- Fix unhandled promise rejection on connecting to VSCode companion ([#958](https://github.com/QwenLM/qwen-code/pull/958)) + +## [0.1.2](https://github.com/QwenLM/qwen-code/releases/tag/v0.1.2) - 2025-10-31 + +### Fixed + +- Use runtime session ID in /bug command ([#927](https://github.com/QwenLM/qwen-code/pull/927)) +- update tool name from Gemini to Qwen Code in ToolsList component… ([#933](https://github.com/QwenLM/qwen-code/pull/933)) +- settings: add version field to prevent partial migration corruption ([#937](https://github.com/QwenLM/qwen-code/pull/937)) + +### Other + +- chore: pump version to v0.1.2 ([#907](https://github.com/QwenLM/qwen-code/pull/907)) +- fixbug: fix qwen help des ([#915](https://github.com/QwenLM/qwen-code/pull/915)) +- 🔍 Refactor and Enhance Ripgrep Tool ([#930](https://github.com/QwenLM/qwen-code/pull/930)) +- change Launch Gemini CLI to Qwen Code CLI in help information ([#929](https://github.com/QwenLM/qwen-code/pull/929)) +- Fix Chat Compression System Instruction and Empty Summary Edge Case ([#935](https://github.com/QwenLM/qwen-code/pull/935)) + +## [0.1.1](https://github.com/QwenLM/qwen-code/releases/tag/v0.1.1) - 2025-10-29 + +### Fixed + +- e2e test ([#905](https://github.com/QwenLM/qwen-code/pull/905)) + +### Other + +- chore: pump version to 0.1.1 ([#883](https://github.com/QwenLM/qwen-code/pull/883)) +- fix input filter ([#892](https://github.com/QwenLM/qwen-code/pull/892)) +- 🐛 Bug Fixes Release v0.1.1 ([#898](https://github.com/QwenLM/qwen-code/pull/898)) +- [to #12345678] docs: update excludeTools documentation in extensions … ([#904](https://github.com/QwenLM/qwen-code/pull/904)) + +## [0.1.0](https://github.com/QwenLM/qwen-code/releases/tag/v0.1.0) - 2025-10-27 + +### Fixed + +- Invalid Tool Calls Due to Improper Request Cancellation ([#790](https://github.com/QwenLM/qwen-code/pull/790)) +- remove unavailable options ([#685](https://github.com/QwenLM/qwen-code/pull/685)) +- token limits for qwen3-max ([#724](https://github.com/QwenLM/qwen-code/pull/724)) +- add missing trace info and cancellation events ([#791](https://github.com/QwenLM/qwen-code/pull/791)) +- unable to quit when auth dialog is opened ([#804](https://github.com/QwenLM/qwen-code/pull/804)) + +### Documentation + +- add /model command documentation ([#872](https://github.com/QwenLM/qwen-code/pull/872)) + +### Other + +- chore: remove default topp & temperature value ([#785](https://github.com/QwenLM/qwen-code/pull/785)) +- Fix and update the token limits handling ([#754](https://github.com/QwenLM/qwen-code/pull/754)) +- chore: re-organize labels for better triage results ([#819](https://github.com/QwenLM/qwen-code/pull/819)) +- Sync upstream Gemini-CLI v0.8.2 ([#838](https://github.com/QwenLM/qwen-code/pull/838)) +- chore: Adjusted docs directory structure ([#864](https://github.com/QwenLM/qwen-code/pull/864)) +- 📦 Release qwen-code CLI as a Standalone Bundled Package ([#866](https://github.com/QwenLM/qwen-code/pull/866)) +- Standardize Tool Output Format for Better LLM Communication ([#881](https://github.com/QwenLM/qwen-code/pull/881)) + +## [0.0.14](https://github.com/QwenLM/qwen-code/releases/tag/v0.0.14) - 2025-09-29 + +### Added + +- Implement Plan Mode for Safe Code Planning ([#658](https://github.com/QwenLM/qwen-code/pull/658)) +- Add Qwen3-VL-Plus token limits (256K input, 32K output) ([#720](https://github.com/QwenLM/qwen-code/pull/720)) + +### Fixed + +- TaskTool Dynamic Updates ([#697](https://github.com/QwenLM/qwen-code/pull/697)) + +### Other + +- chore: bump version to 0.0.13 ([#695](https://github.com/QwenLM/qwen-code/pull/695)) +- 🐛 Remove unreliable editCorrector that injects extra escape characters ([#713](https://github.com/QwenLM/qwen-code/pull/713)) +- Fix/qwen3 vl plus highres ([#721](https://github.com/QwenLM/qwen-code/pull/721)) +- 🚀 feat: DashScope cache control enhancement ([#735](https://github.com/QwenLM/qwen-code/pull/735)) + +## [0.0.13](https://github.com/QwenLM/qwen-code/releases/tag/v0.0.13) - 2025-09-24 + +### Added + +- add OpenAI and Qwen OAuth auth support to Zed ACP integration ([#678](https://github.com/QwenLM/qwen-code/pull/678)) +- add yolo mode support to auto vision model switch ([#652](https://github.com/QwenLM/qwen-code/pull/652)) + +### Fixed + +- output token limit for qwen ([#664](https://github.com/QwenLM/qwen-code/pull/664)) +- auth hang when select qwen-oauth in Zed ([#684](https://github.com/QwenLM/qwen-code/pull/684)) +- ripgrep load issue ([#676](https://github.com/QwenLM/qwen-code/pull/676)) + +### Other + +- chore: bump version to 0.0.12 ([#662](https://github.com/QwenLM/qwen-code/pull/662)) +- 🐛 Fix: Resolve Markdown list display issues on Windows ([#693](https://github.com/QwenLM/qwen-code/pull/693)) + +## [0.0.12](https://github.com/QwenLM/qwen-code/releases/tag/v0.0.12) - 2025-09-19 + +### Added + +- Enhance /init command with confirmation prompt ([#624](https://github.com/QwenLM/qwen-code/pull/624)) + +### Fixed + +- Windows Multi-line Paste Handling with Debounced Data Processing ([#627](https://github.com/QwenLM/qwen-code/pull/627)) +- subagent system improvements and UI fixes ([#638](https://github.com/QwenLM/qwen-code/pull/638)) +- reset is_background ([#644](https://github.com/QwenLM/qwen-code/pull/644)) +- switch system prompt to avoid malformed tool_calls ([#650](https://github.com/QwenLM/qwen-code/pull/650)) +- missing tool call chunks for openai logging ([#657](https://github.com/QwenLM/qwen-code/pull/657)) +- arrow keys on windows ([#661](https://github.com/QwenLM/qwen-code/pull/661)) + +### Other + +- chore: bump version to 0.0.11 ([#622](https://github.com/QwenLM/qwen-code/pull/622)) +- Add `skipLoopDetection` Configuration Option ([#610](https://github.com/QwenLM/qwen-code/pull/610)) +- Chore/sync gemini cli v0.3.4 ([#605](https://github.com/QwenLM/qwen-code/pull/605)) +- Enable tool call type coersion ([#477](https://github.com/QwenLM/qwen-code/pull/477)) +- Vision model support for Qwen-OAuth ([#525](https://github.com/QwenLM/qwen-code/pull/525)) + +## [0.0.11](https://github.com/QwenLM/qwen-code/releases/tag/v0.0.11) - 2025-09-12 + +### Added + +- Update the multilingual documentation links in the README ([#536](https://github.com/QwenLM/qwen-code/pull/536)) +- Add Welcome Back Dialog, Project Summary, and Enhanced Quit Options ([#553](https://github.com/QwenLM/qwen-code/pull/553)) +- Replace all Gemini CLI brand references with Qwen Code. ([#588](https://github.com/QwenLM/qwen-code/pull/588)) + +### Changed + +- cli: update OpenAI API key prompt with Bailian URL ([#50](https://github.com/QwenLM/qwen-code/pull/50)) +- openaiContentGenerator ([#501](https://github.com/QwenLM/qwen-code/pull/501)) + +### Fixed + +- update OpenAIKeyPrompt test to expect Alibaba Cloud API URL ([#560](https://github.com/QwenLM/qwen-code/pull/560)) +- resolve EditTool naming inconsistency causing agent confusion loops ([#513](https://github.com/QwenLM/qwen-code/pull/513)) +- unexpected re-auth when auth-token is expired ([#549](https://github.com/QwenLM/qwen-code/pull/549)) +- relax chunk validation to avoid unnecessary retry ([#584](https://github.com/QwenLM/qwen-code/pull/584)) +- clear saved creds when switching authType ([#587](https://github.com/QwenLM/qwen-code/pull/587)) +- tool calls ui issues ([#590](https://github.com/QwenLM/qwen-code/pull/590)) + +### Other + +- chore: add configurable cache control ([#498](https://github.com/QwenLM/qwen-code/pull/498)) +- chore: pump version to 0.0.10 ([#502](https://github.com/QwenLM/qwen-code/pull/502)) +- Terminal Bench Integration Test ([#521](https://github.com/QwenLM/qwen-code/pull/521)) +- Fix E2E caused by Terminal Bench test ([#529](https://github.com/QwenLM/qwen-code/pull/529)) +- Re-implement tokenLimits class to make it work correctly for Qwen and… ([#542](https://github.com/QwenLM/qwen-code/pull/542)) +- Fix packages/cli/src/config/config.test.ts ([#562](https://github.com/QwenLM/qwen-code/pull/562)) +- 🎯 Subagents Feature ([#573](https://github.com/QwenLM/qwen-code/pull/573)) +- Make the ReadManyFiles tool share the "DEFAULT_MAX_LINES_TEXT_FILE" limit across files. ([#563](https://github.com/QwenLM/qwen-code/pull/563)) +- Fix performance issues with SharedTokenManager causing 20-minute delays ([#586](https://github.com/QwenLM/qwen-code/pull/586)) + +## [0.0.10](https://github.com/QwenLM/qwen-code/releases/tag/v0.0.10) - 2025-09-02 + +### Documentation + +- Add homebrew install ([#474](https://github.com/QwenLM/qwen-code/pull/474)) + +### Other + +- chore: bump version to 0.0.9 ([#468](https://github.com/QwenLM/qwen-code/pull/468)) +- 🚀 Add Todo Write Tool for Task Management and Progress Tracking ([#478](https://github.com/QwenLM/qwen-code/pull/478)) +- # 🚀 Sync Gemini CLI v0.2.1 - Major Feature Update ([#483](https://github.com/QwenLM/qwen-code/pull/483)) + +## [0.0.9](https://github.com/QwenLM/qwen-code/releases/tag/v0.0.9) - 2025-08-27 + +### Added + +- update /docs link ([#438](https://github.com/QwenLM/qwen-code/pull/438)) + +### Fixed + +- add explicit is_background param for shell tool ([#445](https://github.com/QwenLM/qwen-code/pull/445)) +- sync token among multiple qwen sessions ([#443](https://github.com/QwenLM/qwen-code/pull/443)) +- ambiguous literals ([#461](https://github.com/QwenLM/qwen-code/pull/461)) + +### Other + +- chore: pump version to 0.0.8 ([#421](https://github.com/QwenLM/qwen-code/pull/421)) +- Sync upstream gemini-cli v0.1.21 ([#398](https://github.com/QwenLM/qwen-code/pull/398)) +- Fix GitHub Workflows Configuration Issues ([#451](https://github.com/QwenLM/qwen-code/pull/451)) +- Fix parallel tool use ([#400](https://github.com/QwenLM/qwen-code/pull/400)) +- Fix race condition in submitQuery preventing tool response continuations ([#458](https://github.com/QwenLM/qwen-code/pull/458)) +- use sub-command to switch between project and global memory ops ([#450](https://github.com/QwenLM/qwen-code/pull/450)) +- 🔧 Miscellaneous Improvements and Refactoring ([#466](https://github.com/QwenLM/qwen-code/pull/466)) + +## [0.0.8](https://github.com/QwenLM/qwen-code/releases/tag/v0.0.8) - 2025-08-22 + +### Added + +- use .geminiignore in grep tool ([#349](https://github.com/QwenLM/qwen-code/pull/349)) +- Add deterministic cache control ([#411](https://github.com/QwenLM/qwen-code/pull/411)) + +### Fixed + +- revert trimEnd on LLM response content ([#397](https://github.com/QwenLM/qwen-code/pull/397)) +- Critical Issues in v0.0.8-nightly.7 ([#419](https://github.com/QwenLM/qwen-code/pull/419)) + +### Documentation + +- Update security policy with Alibaba contact information ([#390](https://github.com/QwenLM/qwen-code/pull/390)) + +### Other + +- Chore/release 0.0.7 ([#343](https://github.com/QwenLM/qwen-code/pull/343)) +- support: project/global save location option. ([#368](https://github.com/QwenLM/qwen-code/pull/368)) +- doc: Add links to translated README versions ([#171](https://github.com/QwenLM/qwen-code/pull/171)) +- Sync upstream gemini-cli v0.1.19 ([#364](https://github.com/QwenLM/qwen-code/pull/364)) +- 🚀 Enhance Release Notes Generation with Previous Tag Detection ([#394](https://github.com/QwenLM/qwen-code/pull/394)) +- Update Documentation Branding from Gemini CLI to Qwen Code ([#391](https://github.com/QwenLM/qwen-code/pull/391)) +- Fix prompt re-submission ([#392](https://github.com/QwenLM/qwen-code/pull/392)) +- Fix GitHub Workflows for Issue Triage ([#396](https://github.com/QwenLM/qwen-code/pull/396)) +- Limit grep result ([#407](https://github.com/QwenLM/qwen-code/pull/407)) + +## [0.0.7](https://github.com/QwenLM/qwen-code/releases/tag/v0.0.7) - 2025-08-15 + +### Added + +- sandbox: add GHA to build sandbox image ([#262](https://github.com/QwenLM/qwen-code/pull/262)) +- prevent concurrent query submissions in useGeminiStream hook ([#322](https://github.com/QwenLM/qwen-code/pull/322)) +- refactor web-fetch tool to remove google genai dependency ([#340](https://github.com/QwenLM/qwen-code/pull/340)) + +### Fixed + +- qwen logger exit handler setup ([#325](https://github.com/QwenLM/qwen-code/pull/325)) +- seperate static QR code and dynamic spin components ([#327](https://github.com/QwenLM/qwen-code/pull/327)) +- OpenAI tools ([#328](https://github.com/QwenLM/qwen-code/pull/328)) +- custom API's trailing space and empty tool id issues ([#326](https://github.com/QwenLM/qwen-code/pull/326)) + +### Other + +- chore: add api request logger ([#313](https://github.com/QwenLM/qwen-code/pull/313)) +- Sync with upstream gemini-cli v0.1.18 ([#309](https://github.com/QwenLM/qwen-code/pull/309)) +- chore: bump version to 0.0.6 ([#323](https://github.com/QwenLM/qwen-code/pull/323)) +- Migrate web search from Google/Gemini to Tavily API ([#329](https://github.com/QwenLM/qwen-code/pull/329)) +- Update qwen-code-pr-review.yml ([#342](https://github.com/QwenLM/qwen-code/pull/342)) + +## [0.0.6](https://github.com/QwenLM/qwen-code/releases/tag/v0.0.6) - 2025-08-12 + +### Added + +- add usage statistics logging for Qwen integration ([#284](https://github.com/QwenLM/qwen-code/pull/284)) + +### Fixed + +- rename make run-npx from gemini to qwen ([#242](https://github.com/QwenLM/qwen-code/pull/242)) +- terminal flicker when waiting for login ([#248](https://github.com/QwenLM/qwen-code/pull/248)) +- openaiContentGenerator ([#283](https://github.com/QwenLM/qwen-code/pull/283)) +- 🐛 fix EPERM error when run `qwen --sandbox` in macOS ([#293](https://github.com/QwenLM/qwen-code/pull/293)) + +### Other + +- rename GEMINI.md to QWEN.md across the codebase ([#235](https://github.com/QwenLM/qwen-code/pull/235)) +- Fix README.md: Replace /status command with /stats command in documen… ([#266](https://github.com/QwenLM/qwen-code/pull/266)) +- Make `/init` respect configured context filename and align docs with QWEN.md ([#274](https://github.com/QwenLM/qwen-code/pull/274)) +- chore: adjust workflow to run PR review ([#297](https://github.com/QwenLM/qwen-code/pull/297)) +- Chore/pkg version ([#298](https://github.com/QwenLM/qwen-code/pull/298)) + +## [0.0.5](https://github.com/QwenLM/qwen-code/releases/tag/v0.0.5) - 2025-08-08 + +### Added + +- Add systemPromptMappings Configuration Feature ([#108](https://github.com/QwenLM/qwen-code/pull/108)) +- update /bug command to point to Qwen-Code repo ([#154](https://github.com/QwenLM/qwen-code/pull/154)) +- add qwencoder as co-author ([#207](https://github.com/QwenLM/qwen-code/pull/207)) +- oauth: add Qwen OAuth integration ([#225](https://github.com/QwenLM/qwen-code/pull/225)) + +### Fixed + +- resolve RadioButtonSelect array bounds crash and auth dialog navigation ([#46](https://github.com/QwenLM/qwen-code/pull/46)) +- streaming token usage ([#102](https://github.com/QwenLM/qwen-code/pull/102)) +- Enhanced OpenAI Usage Logging and Response Metadata Handling ([#141](https://github.com/QwenLM/qwen-code/pull/141)) + +### Other + +- pre-release: fix ci ([#1](https://github.com/QwenLM/qwen-code/pull/1)) +- fix login preflight & sync with npm version ([#55](https://github.com/QwenLM/qwen-code/pull/55)) +- add star history ([#109](https://github.com/QwenLM/qwen-code/pull/109)) +- update: add info about modelscope-api ([#116](https://github.com/QwenLM/qwen-code/pull/116)) +- Fix Default Model Configuration and Fallback Behavior ([#142](https://github.com/QwenLM/qwen-code/pull/142)) +- Update: shrink/hard constrained token usage ([#136](https://github.com/QwenLM/qwen-code/pull/136)) +- Fix E2E ([#156](https://github.com/QwenLM/qwen-code/pull/156)) +- Fix Sandbox docker mode ([#160](https://github.com/QwenLM/qwen-code/pull/160)) +- Support openrouter ([#162](https://github.com/QwenLM/qwen-code/pull/162)) +- Update: add telemetry service ([#161](https://github.com/QwenLM/qwen-code/pull/161)) +- Update README.md to clarify the requirement for using Modelscope inference API ([#131](https://github.com/QwenLM/qwen-code/pull/131)) +- fix config ([#163](https://github.com/QwenLM/qwen-code/pull/163)) +- fix release workflow ([#172](https://github.com/QwenLM/qwen-code/pull/172)) +- sync gemini cli 0.1.15 ([#175](https://github.com/QwenLM/qwen-code/pull/175)) +- fix e2e ([#185](https://github.com/QwenLM/qwen-code/pull/185)) +- fix system md ([#189](https://github.com/QwenLM/qwen-code/pull/189)) +- sync gemini cli 0.1.17 ([#206](https://github.com/QwenLM/qwen-code/pull/206)) +- chore: remove google registry ([#227](https://github.com/QwenLM/qwen-code/pull/227)) + +## [0.0.4](https://github.com/QwenLM/qwen-code/releases/tag/v0.0.4) - 2025-08-03 + +### Other + +- sync gemini cli 0.1.15 ([#175](https://github.com/QwenLM/qwen-code/pull/175)) +- fix e2e ([#185](https://github.com/QwenLM/qwen-code/pull/185)) +- fix system md ([#189](https://github.com/QwenLM/qwen-code/pull/189)) + +## [0.0.2](https://github.com/QwenLM/qwen-code/releases/tag/v0.0.2) - 2025-08-01 + +_See [GitHub release](https://github.com/QwenLM/qwen-code/releases/tag/v0.0.2) for details._ diff --git a/package.json b/package.json index b0b7736345..e76faa6755 100644 --- a/package.json +++ b/package.json @@ -72,6 +72,7 @@ "package:standalone:release": "node scripts/build-standalone-release.js", "verify:installation-release": "node scripts/verify-installation-release.js", "release:version": "node scripts/version.js", + "changelog": "node scripts/generate-changelog.js", "telemetry": "node scripts/telemetry.js", "check:lockfile": "node scripts/check-lockfile.js", "desktop-openwork-sync": "bun run scripts/desktop-openwork-sync.ts", diff --git a/scripts/generate-changelog.js b/scripts/generate-changelog.js new file mode 100644 index 0000000000..4e1ea3b59f --- /dev/null +++ b/scripts/generate-changelog.js @@ -0,0 +1,327 @@ +#!/usr/bin/env node + +/** + * @license + * Copyright 2026 Qwen Team + * SPDX-License-Identifier: Apache-2.0 + */ + +/** + * Generate `CHANGELOG.md` from the project's GitHub Releases. + * + * The changelog only lists *stable* releases (`vX.Y.Z`); nightly and preview + * pre-releases are intentionally omitted because they ship daily and would + * drown out the signal. Each release's auto-generated "What's Changed" list is + * re-grouped into Keep a Changelog sections (Added / Changed / Fixed / ...) by + * the conventional-commit prefix every PR title uses in this repo. + * + * The file is fully derived from the GitHub Releases API, so it is safe to + * regenerate at any time and should not be edited by hand. + * + * Usage: + * node scripts/generate-changelog.js # write ./CHANGELOG.md + * node scripts/generate-changelog.js --dry-run # print to stdout instead + * node scripts/generate-changelog.js --repo=owner/name --output=path.md + * + * Requires the GitHub CLI (`gh`) to be installed and authenticated. + */ + +import { execFileSync } from 'node:child_process'; +import { writeFileSync } from 'node:fs'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; +import { readJson } from './lib/release-helpers.js'; +import { isMainModule, parseArgs } from './release-script-utils.js'; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const REPO_ROOT = path.resolve(__dirname, '..'); + +/** + * Keep a Changelog sections, in render order, each listing the + * conventional-commit types that feed it. `Other` is the catch-all for unmapped + * types. This is the single source of truth — `TYPE_TO_SECTION` and + * `SECTION_ORDER` are derived from it so the two can never drift apart. + */ +const SECTIONS = [ + { name: 'Added', types: ['feat'] }, + { name: 'Changed', types: ['refactor', 'revert'] }, + { name: 'Fixed', types: ['fix'] }, + { name: 'Performance', types: ['perf'] }, + { name: 'Documentation', types: ['docs'] }, + { name: 'Other', types: [] }, +]; + +const TYPE_TO_SECTION = Object.fromEntries( + SECTIONS.flatMap((section) => + section.types.map((type) => [type, section.name]), + ), +); + +const SECTION_ORDER = SECTIONS.map((section) => section.name); + +/** Matches a stable `vX.Y.Z` tag (no `-preview` / `-nightly` suffix). */ +const STABLE_TAG_RE = /^v?(\d+)\.(\d+)\.(\d+)$/; + +/** + * Matches a GitHub "What's Changed" bullet, e.g. + * * fix(core): do a thing by @octocat in https://github.com/o/r/pull/42 + * The title is captured greedily so a trailing " by @user in " binds to + * the last occurrence, and "New Contributors" / "Full Changelog" lines (which + * lack the " by @… in …/pull/N" tail) are skipped. The author group allows a + * trailing `[bot]` so GitHub App authors (e.g. `@dependabot[bot]`) still match. + */ +const ENTRY_RE = + /^[*-]\s+(.+)\s+by\s+@([A-Za-z0-9-]+(?:\[bot\])?)\s+in\s+(https?:\/\/\S+\/pull\/(\d+))\s*$/; + +/** + * Splits a conventional-commit subject into + * `{ type, scope, description, breaking }`. The `!` breaking-change marker + * (e.g. `feat(core)!: …`) is captured so it can be surfaced in the output. + */ +export function categorize(title) { + const match = /^(\w+)(?:\(([^)]*)\))?(!)?:\s*(.+)$/.exec(title.trim()); + if (!match) { + return { + type: null, + scope: null, + description: title.trim(), + breaking: false, + }; + } + return { + type: match[1].toLowerCase(), + scope: match[2] || null, + description: match[4], + breaking: Boolean(match[3]), + }; +} + +/** + * Pure version-bump commits the release bot makes (`chore(release): vX.Y.Z`) + * are noise in a user-facing changelog, so they are dropped. Takes a parsed + * `categorize()` result so callers that already parsed the title don't re-parse. + */ +export function isNoiseEntry({ type, scope }) { + return type === 'chore' && scope === 'release'; +} + +/** Parse the "What's Changed" bullets out of a release body. */ +export function parseReleaseEntries(body) { + const entries = []; + for (const line of (body || '').split(/\r?\n/)) { + const match = ENTRY_RE.exec(line); + if (!match) { + continue; + } + entries.push({ + title: match[1].trim(), + author: match[2], + prUrl: match[3], + prNumber: match[4], + }); + } + return entries; +} + +/** Render a single "What's Changed" entry as a changelog list item. */ +export function formatEntry(entry, cat = categorize(entry.title)) { + const { type, scope, description, breaking } = cat; + let text; + if (TYPE_TO_SECTION[type]) { + // Recognised type: drop the redundant leading keyword (the section heading + // already conveys it) but keep the scope for context. + text = scope ? `${scope}: ${description}` : description; + } else { + // Unknown or prefix-less title: keep it verbatim. + text = entry.title; + } + if (breaking) { + text = `**BREAKING** ${text}`; + } + return `- ${text} ([#${entry.prNumber}](${entry.prUrl}))`; +} + +/** Render one release as a Markdown block. */ +export function formatRelease(release) { + const lines = []; + const heading = release.htmlUrl + ? `## [${release.version}](${release.htmlUrl}) - ${release.date}` + : `## [${release.version}] - ${release.date}`; + lines.push(heading, ''); + + const buckets = new Map(); + for (const entry of release.entries) { + const cat = categorize(entry.title); + if (isNoiseEntry(cat)) { + continue; + } + const section = TYPE_TO_SECTION[cat.type] || 'Other'; + if (!buckets.has(section)) { + buckets.set(section, []); + } + buckets.get(section).push(formatEntry(entry, cat)); + } + + let rendered = false; + for (const section of SECTION_ORDER) { + const items = buckets.get(section); + if (!items || items.length === 0) { + continue; + } + rendered = true; + lines.push(`### ${section}`, '', ...items, ''); + } + + if (!rendered) { + const link = release.htmlUrl + ? `[GitHub release](${release.htmlUrl})` + : 'the GitHub release'; + lines.push(`_See ${link} for details._`, ''); + } + + return lines.join('\n'); +} + +const HEADER = `# Changelog + +All notable changes to [Qwen Code](https://github.com/QwenLM/qwen-code) are +documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), +and the project follows +[Semantic Versioning](https://semver.org/spec/v2.0.0.html). Only stable releases +are listed; nightly and preview pre-releases are intentionally omitted. + +> **This file is generated automatically** from +> [GitHub Releases](https://github.com/QwenLM/qwen-code/releases). Do not edit it +> by hand — run \`npm run changelog\` to regenerate. +`; + +/** Build the full CHANGELOG.md contents from an ordered list of releases. */ +export function buildChangelog(releases) { + const blocks = releases.map((release) => formatRelease(release)); + const body = `${HEADER}\n${blocks.join('\n')}`; + // Collapse any run of blank lines and guarantee a single trailing newline. + return `${body.replace(/\n{3,}/g, '\n\n').replace(/\s+$/, '')}\n`; +} + +/** Convert a raw GitHub Releases API object into our release model. */ +export function toReleaseModel(raw) { + const match = STABLE_TAG_RE.exec(raw.tag || ''); + return { + tag: raw.tag, + version: match ? `${match[1]}.${match[2]}.${match[3]}` : null, + date: (raw.date || '').slice(0, 10), + htmlUrl: raw.url || '', + entries: parseReleaseEntries(raw.body), + }; +} + +/** Keep only stable releases, newest first. */ +export function selectStableReleases(rawReleases) { + return rawReleases + .filter((raw) => !raw.prerelease && !raw.draft) + .map(toReleaseModel) + .filter((release) => release.version) + .sort((a, b) => { + // Newest first, comparing numeric semver components. + const x = a.version.split('.').map(Number); + const y = b.version.split('.').map(Number); + return y[0] - x[0] || y[1] - x[1] || y[2] - x[2]; + }); +} + +/** Fetch every release (paginated) as newline-delimited JSON via the gh CLI. */ +function fetchReleasesJsonl(repo) { + // Validate before shelling out, and pass args via execFileSync (no shell) so + // a `repo` value can never be interpreted as a shell command. + if (!/^[A-Za-z0-9_.-]+\/[A-Za-z0-9_.-]+$/.test(repo)) { + throw new Error(`Invalid repository "${repo}"; expected "owner/name".`); + } + return execFileSync( + 'gh', + [ + 'api', + `repos/${repo}/releases?per_page=100`, + '--paginate', + '--jq', + '.[] | {tag: .tag_name, date: .published_at, prerelease: .prerelease, draft: .draft, url: .html_url, body: .body}', + ], + { encoding: 'utf-8', maxBuffer: 256 * 1024 * 1024 }, + ); +} + +/** Parse newline-delimited JSON (one release object per line). */ +export function parseJsonl(jsonl) { + return jsonl + .split('\n') + .map((line) => line.trim()) + .filter(Boolean) + .map((line) => JSON.parse(line)); +} + +/** Resolve the default `owner/repo` from the environment or package.json. */ +function getDefaultRepo() { + if (process.env.GITHUB_REPOSITORY) { + return process.env.GITHUB_REPOSITORY; + } + const url = readJson(path.join(REPO_ROOT, 'package.json'))?.repository?.url; + const match = /github\.com[/:]([^/]+\/[^/.]+)/.exec(url || ''); + return match ? match[1] : 'QwenLM/qwen-code'; +} + +const HELP = `Generate CHANGELOG.md from GitHub Releases. + +Usage: + node scripts/generate-changelog.js [options] + +Options: + --repo= Source repository (default: $GITHUB_REPOSITORY or package.json). + --output= Output file (default: ./CHANGELOG.md). + --dry-run Print to stdout instead of writing the file. + -h, --help Show this help. +`; + +function main() { + // parseArgs rejects unknown options (so a `--dryrun` typo errors instead of + // silently overwriting) and handles `-h`/`--help` natively. + const args = parseArgs(process.argv.slice(2), { + '--repo': { key: 'repo', type: 'value' }, + '--output': { key: 'output', type: 'value' }, + '--dry-run': { key: 'dry-run', type: 'flag' }, + }); + if (args.help) { + process.stdout.write(HELP); + return; + } + + const repo = args.repo || getDefaultRepo(); + const output = args.output || path.join(REPO_ROOT, 'CHANGELOG.md'); + + const rawReleases = parseJsonl(fetchReleasesJsonl(repo)); + const releases = selectStableReleases(rawReleases); + if (releases.length === 0) { + // A populated repo returning zero stable releases means the fetch failed + // (rate limit, auth expiry, transient 5xx). Refuse to overwrite a good + // CHANGELOG with an empty stub; the next release run regenerates it. + console.error( + `ERROR: no stable releases found for ${repo}; refusing to overwrite ${path.basename(output)}.`, + ); + process.exit(1); + } + const changelog = buildChangelog(releases); + + if (args['dry-run']) { + process.stdout.write(changelog); + return; + } + + writeFileSync(output, changelog); + console.error( + `Wrote ${releases.length} stable releases to ${path.relative(process.cwd(), output)}`, + ); +} + +if (isMainModule(import.meta.url)) { + main(); +} diff --git a/scripts/tests/generate-changelog.test.js b/scripts/tests/generate-changelog.test.js new file mode 100644 index 0000000000..d06b811514 --- /dev/null +++ b/scripts/tests/generate-changelog.test.js @@ -0,0 +1,282 @@ +/** + * @license + * Copyright 2026 Qwen Team + * SPDX-License-Identifier: Apache-2.0 + */ + +import { describe, it, expect } from 'vitest'; +import { + categorize, + isNoiseEntry, + parseReleaseEntries, + formatEntry, + formatRelease, + buildChangelog, + toReleaseModel, + selectStableReleases, + parseJsonl, +} from '../generate-changelog.js'; + +const PR = (n) => `https://github.com/QwenLM/qwen-code/pull/${n}`; + +describe('categorize', () => { + it('splits type, scope, and description', () => { + expect(categorize('feat(cli): add x')).toEqual({ + type: 'feat', + scope: 'cli', + description: 'add x', + breaking: false, + }); + }); + + it('handles a missing scope', () => { + expect(categorize('fix: bar')).toEqual({ + type: 'fix', + scope: null, + description: 'bar', + breaking: false, + }); + }); + + it('captures the breaking-change "!" marker', () => { + expect(categorize('feat(core)!: breaking')).toEqual({ + type: 'feat', + scope: 'core', + description: 'breaking', + breaking: true, + }); + }); + + it('captures "!" even without a scope', () => { + expect(categorize('feat!: drop legacy flag')).toEqual({ + type: 'feat', + scope: null, + description: 'drop legacy flag', + breaking: true, + }); + }); + + it('treats a prefix-less subject as untyped', () => { + expect(categorize('Improve hooks matcher display')).toEqual({ + type: null, + scope: null, + description: 'Improve hooks matcher display', + breaking: false, + }); + }); +}); + +describe('isNoiseEntry', () => { + it('drops the release bot version bump', () => { + expect(isNoiseEntry(categorize('chore(release): v0.17.0'))).toBe(true); + }); + + it('keeps other chores (e.g. dependency bumps)', () => { + expect(isNoiseEntry(categorize('chore(deps): update @google/genai'))).toBe( + false, + ); + }); + + it('keeps real changes', () => { + expect(isNoiseEntry(categorize('feat(cli): add x'))).toBe(false); + }); +}); + +describe('parseReleaseEntries', () => { + it('extracts only "What\'s Changed" bullets', () => { + const body = [ + "## What's Changed", + '* feat(cli): add x by @alice in ' + PR(42), + '- fix(core): do y by @bob-1 in ' + PR(7), + '', + '## New Contributors', + '* @newbie made their first contribution in ' + PR(99), + '', + '**Full Changelog**: https://github.com/QwenLM/qwen-code/compare/v1...v2', + ].join('\n'); + + expect(parseReleaseEntries(body)).toEqual([ + { + title: 'feat(cli): add x', + author: 'alice', + prUrl: PR(42), + prNumber: '42', + }, + { + title: 'fix(core): do y', + author: 'bob-1', + prUrl: PR(7), + prNumber: '7', + }, + ]); + }); + + it('parses GitHub App authors with a [bot] suffix', () => { + const body = '* chore(deps): bump foo by @dependabot[bot] in ' + PR(33); + expect(parseReleaseEntries(body)).toEqual([ + { + title: 'chore(deps): bump foo', + author: 'dependabot[bot]', + prUrl: PR(33), + prNumber: '33', + }, + ]); + }); + + it('binds the trailing " by @… in …" to the last occurrence', () => { + const body = '* fix: stop saying "done" by @carol in ' + PR(5); + expect(parseReleaseEntries(body)).toEqual([ + { + title: 'fix: stop saying "done"', + author: 'carol', + prUrl: PR(5), + prNumber: '5', + }, + ]); + }); + + it('returns an empty list for an empty or link-only body', () => { + expect(parseReleaseEntries('')).toEqual([]); + expect( + parseReleaseEntries( + '**Full Changelog**: https://github.com/o/r/compare/a...b', + ), + ).toEqual([]); + }); +}); + +describe('formatEntry', () => { + it('strips a recognised type prefix but keeps the scope', () => { + expect( + formatEntry({ title: 'feat(cli): add x', prNumber: '42', prUrl: PR(42) }), + ).toBe(`- cli: add x ([#42](${PR(42)}))`); + }); + + it('drops the prefix entirely when there is no scope', () => { + expect( + formatEntry({ title: 'fix: bar', prNumber: '7', prUrl: PR(7) }), + ).toBe(`- bar ([#7](${PR(7)}))`); + }); + + it('keeps an untyped title verbatim', () => { + expect( + formatEntry({ title: 'Support openrouter', prNumber: '9', prUrl: PR(9) }), + ).toBe(`- Support openrouter ([#9](${PR(9)}))`); + }); + + it('flags a breaking change with a BREAKING prefix', () => { + expect( + formatEntry({ + title: 'refactor(core)!: replace X', + prNumber: '8', + prUrl: PR(8), + }), + ).toBe(`- **BREAKING** core: replace X ([#8](${PR(8)}))`); + }); +}); + +describe('formatRelease', () => { + it('groups entries into ordered sections and drops noise', () => { + const block = formatRelease({ + version: '1.2.3', + date: '2026-01-02', + htmlUrl: 'https://example.com/v1.2.3', + entries: [ + { title: 'fix(core): a', prNumber: '1', prUrl: PR(1) }, + { title: 'feat(cli): b', prNumber: '2', prUrl: PR(2) }, + { title: 'chore(release): v1.2.3', prNumber: '3', prUrl: PR(3) }, + { title: 'docs: c', prNumber: '4', prUrl: PR(4) }, + ], + }); + + expect(block).toContain( + '## [1.2.3](https://example.com/v1.2.3) - 2026-01-02', + ); + // Added before Fixed before Documentation. + expect(block.indexOf('### Added')).toBeLessThan(block.indexOf('### Fixed')); + expect(block.indexOf('### Fixed')).toBeLessThan( + block.indexOf('### Documentation'), + ); + // The release bot bump is excluded. + expect(block).not.toContain('v1.2.3 ('); + expect(block).not.toContain('### Other'); + }); + + it('falls back to a release link when nothing parses', () => { + const block = formatRelease({ + version: '0.0.2', + date: '2025-08-01', + htmlUrl: 'https://example.com/v0.0.2', + entries: [], + }); + expect(block).toContain( + '_See [GitHub release](https://example.com/v0.0.2) for details._', + ); + expect(block).not.toContain('###'); + }); +}); + +describe('selectStableReleases', () => { + it('keeps only stable semver releases, newest first', () => { + const stable = (tag) => ({ tag, prerelease: false, draft: false }); + const releases = selectStableReleases([ + stable('v1.2.0'), + stable('v1.10.0'), + { tag: 'v1.2.0-preview.1', prerelease: true, draft: false }, + { tag: 'v1.3.0-nightly.20260101.abc', prerelease: true, draft: false }, + stable('some-random-tag'), + { tag: 'v1.0.0', prerelease: false, draft: true }, + ]); + + // Drops the preview/nightly pre-releases, the non-semver tag, and the + // draft; sorts the survivors newest-first (1.10.0 > 1.2.0). + expect(releases.map((r) => r.version)).toEqual(['1.10.0', '1.2.0']); + }); +}); + +describe('toReleaseModel', () => { + it('derives version and trims the date', () => { + const model = toReleaseModel({ + tag: 'v0.17.1', + date: '2026-06-03T11:58:14Z', + url: 'https://example.com/v0.17.1', + body: '* feat: x by @a in ' + PR(1), + }); + expect(model.version).toBe('0.17.1'); + expect(model.date).toBe('2026-06-03'); + expect(model.entries).toHaveLength(1); + }); + + it('marks a non-semver tag as unversioned', () => { + expect( + toReleaseModel({ tag: 'nightly-build', body: '' }).version, + ).toBeNull(); + }); +}); + +describe('parseJsonl', () => { + it('parses one object per line and skips blanks', () => { + const jsonl = '{"tag":"v1.0.0"}\n\n{"tag":"v1.1.0"}\n'; + expect(parseJsonl(jsonl)).toEqual([{ tag: 'v1.0.0' }, { tag: 'v1.1.0' }]); + }); +}); + +describe('buildChangelog', () => { + it('renders the header and each release once', () => { + const out = buildChangelog([ + { + version: '1.0.0', + date: '2026-01-01', + htmlUrl: 'https://example.com/v1.0.0', + entries: [{ title: 'feat: launch', prNumber: '1', prUrl: PR(1) }], + }, + ]); + expect(out.startsWith('# Changelog')).toBe(true); + expect(out).toContain('Keep a Changelog'); + expect(out).toContain( + '## [1.0.0](https://example.com/v1.0.0) - 2026-01-01', + ); + expect(out.endsWith('\n')).toBe(true); + expect(out).not.toMatch(/\n{3,}/); + }); +});