- Merge coder-model and qwen3.5-plus into a single coder-model with vision capability
- Remove vlmSwitchMode CLI argument and experimental.vlmSwitchMode setting
- Remove useVisionAutoSwitch hook and inline image format checking into useGeminiStream
- Remove ModelSwitchDialog and related vision switch UI components
- Update all related tests to reflect the simplified model structure
- Set DEFAULT_QWEN_MODEL to coder-model
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
Fixes#1748 - gopls failed to start with JSON RPC parse error.
The workspaceFolders capability was incorrectly sent as an object
{ supported: true } instead of a boolean true, causing gopls to
fail with 'cannot unmarshal object into... bool'.
MCP tools annotated with readOnlyHint: true are now allowed to execute
in plan mode without being blocked. Previously, all MCP tools were
assigned Kind.Other and required confirmation, causing plan mode to
block even read-only MCP tools.
Changes:
- Add McpToolAnnotations interface to mcp-tool.ts
- Fetch tool annotations via mcpClient.listTools() during discovery
- Pass annotations through to DiscoveredMCPTool and its invocation
- Set Kind.Read for tools with readOnlyHint: true (instead of Kind.Other)
- Skip confirmation for readOnlyHint: true tools in shouldConfirmExecute
Fixes#1826
Move AbortController creation inside while(true) loop to create a new
instance per round. This prevents listeners from accumulating across
multiple rounds which was causing maxListener warnings.
Key changes:
- Create roundAbortController at the start of each loop iteration
- Track current round's controller with currentRoundAbortController
- External abort signal propagates to current round's controller in real-time
- Cleanup external listener and clear reference in finally block
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
- Use fixed 60s delay matching DashScope per-minute quota window
- Increase max retries from 3 to 10 to align with Claude Code behavior
- Remove unused isTPMThrottlingError, isGLMRateLimitError, isRateLimitThrottlingError functions
- Simplify getRateLimitRetryInfo to only extract reason, delay is now caller's responsibility
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
- Add Ajv2020 validator to support draft-2020-12 schemas used by playwright-mcp
- Auto-select validator based on $schema field
- Gracefully skip validation when schema compilation fails
- Add comprehensive tests for JSON Schema version support
Reference: gemini-cli implementation pattern
Add a .catch() handler to the promise before advancing timers to prevent
Node.js from reporting an unhandled rejection when maxAttempts is exhausted
during the TPM throttling retry test.
- Move TPM throttling check before shouldRetryOnError to ensure TPM errors
without standard HTTP status codes are still retried
- Add comprehensive unit tests for edge cases:
- TPM error without status property
- Nested TPM error object without top-level status
- Consecutive TPM throttling errors
- Max attempts exhaustion for TPM errors
- Remove redundant error checking logic in isTPMThrottlingError function
- Reuse isStructuredError and isApiError utilities from quotaErrorDetection module
- Clean up duplicate import statements
Add support for detecting and handling TPM (Tokens Per Minute) throttling errors.
When a TPM throttling error is detected (e.g., 'Throttling: TPM(10680324/10000000)'),
the system now waits 1 minute before retrying instead of using exponential backoff.
Changes:
- Add isTPMThrottlingError() function to detect TPM throttling errors
- Modify retryWithBackoff() to use fixed 1-minute delay for TPM errors
- Add unit tests for TPM throttling detection and retry behavior
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
Added logic to merge two function calls where the first has a name but no arguments, and the second has arguments but no name. This ensures that function calls are correctly represented when they are split across two parts.