Commit graph

3099 commits

Author SHA1 Message Date
echoVic
1789b16914 feat: support MCP readOnlyHint annotation in plan mode (#1826)
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
2026-02-14 15:07:03 +08:00
mingholy.lmh
32af4c7157 fix: ts error 2026-02-13 22:12:00 +08:00
mingholy.lmh
9daf20f3c7 refactor: rename session-id to sessionId for consistency in CLI argument handling 2026-02-13 22:05:38 +08:00
mingholy.lmh
82dc79629c feat: enhance session ID handling and error propagation 2026-02-13 21:41:38 +08:00
mingholy.lmh
51760fe3a6 fix: ci errors 2026-02-13 21:40:58 +08:00
mingholy.lmh
5d939fdb83 feat: add --session-id support for CLI and SDK
- Add --session-id flag to CLI for specifying custom session ID
- Add sessionId option to SDK QueryOptions
- Implement UUID validation for session IDs
- Pass session ID from SDK to CLI via --session-id argument
- Add integration tests for session-id functionality
- Update unit tests for ProcessTransport

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-13 21:40:57 +08:00
Mingholy
e8259092c6
Merge pull request #1823 from QwenLM/mingholy/fix/text-color
Fix auth UI to use semantic theme colors and correct selection sync
2026-02-13 21:39:54 +08:00
Mingholy
ffa2d89ecd
Merge pull request #1824 from QwenLM/mingholy/fix/esc-interrupt
refactor(cli): unify Escape key handling in AppContainer
2026-02-13 21:39:11 +08:00
Mingholy
f12c9edd20
Merge pull request #1825 from QwenLM/mingholy/fix/subagent-memory-leak
Fix abort listener accumulation in subagent while loop
2026-02-13 21:39:02 +08:00
pomelo
e7e67467e5
Merge pull request #1821 from QwenLM/fix/issue-1818-playwright-mcp-schema
fix: support JSON Schema draft-2020-12 for MCP tools (fixes #1818)
2026-02-13 17:59:56 +08:00
pomelo
b44e978c7d
Merge pull request #1813 from QwenLM/fix/issue-1764-showlinenumbers-default
fix: correct showLineNumbers default value to true
2026-02-13 17:58:43 +08:00
pomelo
001d0103f3
Merge pull request #1791 from wenshao/feat/tpm-throttling-retry
feat: add TPM throttling error handling with 1-minute retry delay
2026-02-13 17:34:05 +08:00
yiliang114
6eb6812f5e feat(core): add rate limit error detection utility
- Extract rate-limit detection into dedicated rateLimit.ts module
- Support detection from ApiError, StructuredError, HttpError, and JSON strings
- Handle common rate-limit codes: 429, 503, 1302 (GLM)
- Simplify retry.ts by removing duplicated detection logic
2026-02-13 15:32:35 +08:00
顾盼
aefea076b0
Merge pull request #1811 from QwenLM/fix/abort-signal-listener-leak
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
fix: prevent AbortSignal listener memory leak
2026-02-13 10:35:20 +08:00
mingholy.lmh
48a403407d Fix: Prevent abort listener accumulation in subagent while loop
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>
2026-02-12 23:20:44 +08:00
mingholy.lmh
86a358d26d fix: use semantic theme colors instead of hardcoded values in auth UI
- Replace hardcoded Colors.* with theme.* in AuthDialog and ApiKeyInput
- Fix selectedIndex reset when going back from API-KEY sub-view to main view

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-12 20:22:00 +08:00
mingholy.lmh
e7290c5d9a refactor(cli): unify Escape key handling in AppContainer
Consolidate Escape key behavior to improve UX and prevent conflicts:

- Move Escape handling from useGeminiStream to AppContainer
- Input with content: double-press to clear, then single-press to cancel
- Empty input: single-press immediately cancels ongoing request
- Preserve embeddedShellFocused check to allow shell's own escape handling
- Update tests to use cancelOngoingRequest directly instead of simulating keypress

Fixes inconsistent escape behavior between input clearing and request cancellation.

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-12 20:20:51 +08:00
yiliang114
0d2e394ef1 fix(openai): tool call cleanup order when fixing streaming errors 2026-02-12 18:09:58 +08:00
yiliang114
85a90b1080 refactor(core): simplify rate limit retry with fixed 60s delay
- 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>
2026-02-12 18:09:31 +08:00
yiliang114
3153ff5caa Merge branch 'main' into feat/tpm-throttling-retry-wenshao 2026-02-12 17:01:18 +08:00
LaZzyMan
3ae2f8f671 fix: support JSON Schema draft-2020-12 for MCP tools (fixes #1818)
- 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
2026-02-12 16:31:01 +08:00
yiliang114
3fb641ca1a feat(core, cli): add rate limit throttling retry with countdown UI
- Refactor retry utility to support GLM rate limit errors (code 1302) and TPM throttling
- Add getRateLimitRetryInfo() for unified rate-limit error detection
- Add exponential backoff for non-TPM rate limit errors
- Extend StreamEventType.RETRY with RetryInfo payload for UI feedback
- Add RetryCountdownMessage component for visual retry countdown
- Update useGeminiStream hook to handle retry events with countdown timer
- Add i18n support for rate limit messages (en/zh)
2026-02-12 16:21:10 +08:00
yiliang114
1c38455190 test(core): add rejection handler to prevent unhandled rejection in TPM throttling test
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.
2026-02-12 12:55:51 +08:00
LaZzyMan
428901f136 fix: correct showLineNumbers default value to true
- Changed default value from false to true in settingsSchema.ts
- This aligns the schema with the actual code behavior (?? true fallback)
- Matches documentation and test expectations
- Resolves inconsistency reported in issue #1764

Fixes #1764
2026-02-12 11:42:58 +08:00
LaZzyMan
3f04217458 fix: prevent AbortSignal listener memory leak
- Add abort listener cleanup in Query.close() to prevent memory leak
- Add abort listener cleanup in ControlDispatcher.shutdown()
- Remove AbortController recreation in Session.handleInterrupt()

This fixes the MaxListenersExceededWarning that occurred when:
- Creating 11+ Query instances in SDK/non-interactive mode
- Multiple user interrupts (Ctrl+C) in interactive mode
- Intensive control request scenarios
2026-02-12 10:39:19 +08:00
yiliang114
aef292125a test(core): fix type assertion in pipeline test for error_finish chunk
- Change 'as' to 'as unknown as' for proper type casting
2026-02-11 21:28:30 +08:00
yiliang114
e00ee9d45b refactor(core): prioritize TPM throttling check over shouldRetryOnError
- 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
2026-02-11 21:17:52 +08:00
yiliang114
e9d2ead38f refactor(core): simplify TPM throttling error detection logic
- Remove redundant error checking logic in isTPMThrottlingError function
- Reuse isStructuredError and isApiError utilities from quotaErrorDetection module
- Clean up duplicate import statements
2026-02-11 20:42:20 +08:00
yiliang114
93a131dd7b Handle TPM throttling in stream retries 2026-02-11 20:39:46 +08:00
mingholy.lmh
cc4ad12e06 chore: bump version to 0.10.1
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-11 19:22:31 +08:00
mingholy.lmh
a5c7f1db3b feat(i18n): add translations for "Configure authentication information for login" in multiple languages 2026-02-11 17:00:43 +08:00
Shaojin Wen
c573c6a743
Update packages/core/src/utils/retry.ts
Co-authored-by: 易良 <1204183885@qq.com>
2026-02-11 16:56:35 +08:00
mingholy.lmh
54d9073cc0 feat(auth): enhance AuthDialog with error handling and update API key link 2026-02-11 16:48:54 +08:00
mingholy.lmh
a8a05188cb feat(coding-plan): implement Coding Plan configuration management and update prompts 2026-02-11 16:18:23 +08:00
mingholy.lmh
5f710b5f6f fix: ui 2026-02-11 11:58:34 +08:00
mingholy.lmh
50e5cf7508 feat(ui): enhance AuthDialog with theming and documentation link 2026-02-11 11:58:34 +08:00
Mingholy
6626745197 fix: type & i18n & ut 2026-02-11 11:58:33 +08:00
mingholy.lmh
b9dd080bd1 feat: add auth entry: coding plan 2026-02-11 11:58:33 +08:00
Mingholy
169ad2d030
Merge pull request #1756 from QwenLM/feat/mcp-progress-updates
feat: add MCP tool progress update support in TUI and SDK mode
2026-02-11 11:07:20 +08:00
Mingholy
f7e3bd0ead
Merge pull request #1773 from QwenLM/fix/auth-model-login-ui
fix(auth-model-login-ui): prevent Enter key from triggering empty message submission
2026-02-11 11:07:11 +08:00
wenshao
48119e0cb1 feat: add TPM throttling error handling with 1-minute retry delay
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>
2026-02-10 23:43:41 +08:00
顾盼
66f754e203
Merge pull request #1770 from QwenLM/fix/local-extension-path-detection
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:none (push) Waiting to run
E2E Tests / E2E Test (Linux) - sandbox:docker (push) Waiting to run
E2E Tests / E2E Test - macOS (push) Waiting to run
fix: prioritize local path detection in extension installation
2026-02-10 14:39:19 +08:00
tanzhenxin
d6a33dbe03
Merge pull request #1662 from QwenLM/fix/top-right-model-not-updating
fix(ui): resolve model not updating in top-right corner
2026-02-10 10:22:08 +08:00
yiliang114
981692b239 fix(vscode-ide-companion): refine model selection keyboard handling and error display
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-09 19:17:46 +08:00
yiliang114
0109619c2d test: move webui component tests and clean docs 2026-02-09 15:54:49 +08:00
yiliang114
58adc7de63 Merge branch 'main' of https://github.com/QwenLM/qwen-code into fix/auth-model-login-ui 2026-02-09 14:34:14 +08:00
yiliang114
33bddd44f1 fix(vscode): prevent empty user message when selecting model via Enter
The ModelSelector's keydown handler used bubble-phase addEventListener
on document, so pressing Enter to confirm a model would also propagate
to the InputForm and trigger a form submit with empty text — creating
a ghost user-message bubble.

Fix: register the handler with `{ capture: true }` and call both
`preventDefault()` and `stopPropagation()` on arrow/Enter/Escape
keys so the event never reaches the InputForm.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-09 14:32:56 +08:00
LaZzyMan
f491281ee1 fix: prioritize local path detection in extension installation
- Reorder source type detection: check local path existence first, then Git URLs, then owner/repo format
- Remove 'marketplace' as a separate type; use originSource='Claude' instead to identify Claude marketplace extensions
- Simplify type system from 5 types (git/local/link/github-release/marketplace) to 4 types
- Fix issue where relative paths (../path, ./path) were incorrectly treated as owner/repo format
- Add comprehensive test coverage for all path detection scenarios
2026-02-09 14:15:44 +08:00
yiliang114
d18a5a37d1 fix(vscode): handle auth errors on model switch and show login page
When session/set_model fails with an authentication error (expired
token, invalid credentials, etc.), the extension now:
- Shows a VSCode error notification with the model name for context
- Sends a loginRequired message to the webview so it renders the
  Onboarding login page (without clearing chat history)
- On successful re-login the forceLogin overlay is dismissed

Also guards against empty/zero-width-space-only chat messages and
strips the internal ACP `\nData: {...}` payload from user-facing
error messages.

Includes unit tests for SessionMessageHandler (setModel success,
auth errors, generic errors, missing modelId, stripAcpErrorData)
and useWebViewMessages (loginRequired/loginSuccess round-trip).

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-09 14:01:22 +08:00
tanzhenxin
4e89c99216 Merge remote-tracking branch 'origin/main' into feat/mcp-progress-updates 2026-02-09 10:18:35 +08:00