Commit graph

3946 commits

Author SHA1 Message Date
tanzhenxin
449a421ca7
Merge pull request #2612 from qqqys/fix/ime_vscode
fix(cli): enhance KeypressProvider with kitty sequence timeout manage…
2026-04-01 16:10:02 +08:00
DennisYu07
06a0f4797d
Merge pull request #2696 from QwenLM/feat/hooks-refactor-ui-event
refactor(ui): improve hook event handling with dedicated history items
2026-04-01 15:56:17 +08:00
tanzhenxin
2f40c30160
Merge pull request #2662 from QwenLM/fix/acp-orphan-subprocess-cleanup
fix: prevent orphan ACP processes on tab close and clean up MCP subprocesses on shutdown
2026-04-01 15:44:12 +08:00
tanzhenxin
a55a986e1e
Merge pull request #2687 from QwenLM/enhance/review-verification-and-pr-comments
Enhance /review: add verification, false positive control, and PR comments
2026-04-01 15:43:28 +08:00
tanzhenxin
311f971ba7
Merge pull request #2763 from QwenLM/fix/2754-allow-webfetch-in-plan-mode
fix: allow web fetch approvals in plan mode
2026-04-01 15:41:03 +08:00
tanzhenxin
f70cc05bbc
Merge pull request #2777 from QwenLM/fix/pty-fd-leak-upgrade-node-pty
fix: upgrade @lydell/node-pty to 1.2.0-beta.10 to fix PTY FD leak on macOS
2026-04-01 15:38:13 +08:00
tanzhenxin
2489044e61
Merge pull request #2765 from QwenLM/fix/subagent-token-leak-footer
fix: prevent subagent telemetry from overwriting main agent footer context
2026-04-01 15:37:55 +08:00
tanzhenxin
a29e059d2e
Merge pull request #2781 from QwenLM/feat/hooks-remove-experimental
feat(hooks): remove experimental flag and add disabled state UI
2026-04-01 15:37:34 +08:00
tanzhenxin
32f3339908
Merge pull request #2764 from LaZzyMan/fix/tree-sitter-symlink-wasm
fix(core): robustly resolve tree-sitter WASM path for symlinked CLI installations
2026-04-01 15:37:06 +08:00
tanzhenxin
92132ec8fa
Merge pull request #2659 from QwenLM/fix/compress-split-point-tool-heavy-conversations
fix: make /compress handle tool-heavy conversations correctly
2026-04-01 15:36:56 +08:00
qqqys
d169aeb3ca Merge branch 'main' of https://github.com/qqqys/qwen-code into fix/ime_vscode 2026-04-01 15:34:36 +08:00
DennisYu07
3585b9e32d fix issue 2026-04-01 15:27:28 +08:00
LaZzyMan
38aa1a6aa2 fix lint 2026-04-01 14:33:29 +08:00
DennisYu07
4b05c74b02
Merge pull request #2745 from QwenLM/fix/proxy-url-compability
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: normalize proxy URLs to support addresses without protocol prefix
2026-04-01 14:30:29 +08:00
DennisYu07
3d5bb357c1 add markdown display 2026-04-01 14:00:52 +08:00
DennisYu07
b4d2ba2a56 remove test case 2026-04-01 13:39:51 +08:00
DennisYu07
a32ab3a58f fix test 2026-04-01 12:48:15 +08:00
DennisYu07
9c26c7fe85 add more notes 2026-04-01 12:04:37 +08:00
DennisYu07
5221002831 remove hooks experimental and refactor hook Config 2026-04-01 11:50:23 +08:00
tanzhenxin
89b79544d1 fix: upgrade @lydell/node-pty to 1.2.0-beta.10 to fix PTY FD leak
The previous version (1.1.0) has a native-level bug on macOS where each
PTY spawn leaks one /dev/ptmx file descriptor that is never closed. Over
a long session with hundreds of shell commands, this exhausts the
system-wide PTY pool (kern.tty.ptmx_max = 511), breaking other programs
like tmux and new terminal windows.

Root cause: microsoft/node-pty#882

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-04-01 07:55:56 +08:00
pomelo
20e51e3d30
Merge pull request #2769 from QwenLM/fix/qwen-path-replacement-in-md-files
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: add .qwen path replacement in markdown files during extension install
2026-03-31 22:22:26 +08:00
DennisYu07
1a7510d85e fix loss of stopHookCount 2026-03-31 20:22:51 +08:00
DennisYu07
3c484782ec fix: replace .claude paths with .qwen in markdown files during extension install
Previously, only shell scripts (.sh) had .claude -> .qwen path replacement.
Markdown files (.md) like cancel-ralph.md and help.md were missing this
conversion, causing incorrect paths like .claude/ralph-loop.local.md.

Now performVariableReplacement also replaces .claude directory references
in markdown files using the same regex pattern as shell scripts.
2026-03-31 19:47:03 +08:00
tanzhenxin
3d8f56a207 fix: prevent subagent telemetry from overwriting main agent footer context
Root cause: PR #1835 accidentally overwrote PR #1912's correct telemetry
isolation during a merge conflict resolution. This restores the original
guard logic so subagent GeminiChat instances (which don't receive a
telemetryService param) no longer write to the global uiTelemetryService.

- Remove unused uiTelemetryService import from geminiChat.ts
- Guard telemetry calls with this.telemetryService checks
- Add test verifying subagent isolation

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-31 09:15:51 +00:00
LaZzyMan
ee08ae9e7e fix: allow web fetch approvals in plan mode 2026-03-31 16:30:44 +08:00
LaZzyMan
ce2f1902b9 fix(core): add regex-based fallback when tree-sitter WASM fails to load
When the WASM files cannot be found (e.g. symlinked CLI whose vendor path
probe still fails, or any other I/O error), isShellCommandReadOnlyAST and
initParser previously left the agent in a permanently broken state:
  - initParser() returned a rejected promise stored in initPromise, so every
    subsequent call returned the same rejection immediately
  - isShellCommandReadOnlyAST() propagated the error to its caller, which
    caused the shell tool to throw and left the agent 'thinking forever'

Changes:
- Import isShellCommandReadOnly from shellReadOnlyChecker.js
- Track parserInitFailed: boolean flag on the parser singleton
- initParser(): on any init error, set parserInitFailed=true and reset
  initPromise=null (preventing permanent hang on the rejected promise)
- isShellCommandReadOnlyAST(): check parserInitFailed before attempting
  AST parse; wrap the AST path in try/catch so any unexpected runtime
  error also falls through to the regex checker
- _resetParser(): also resets parserInitFailed so tests can re-initialise
- Export _setParserFailedForTesting() to allow unit tests to exercise the
  fallback path without breaking actual WASM loading

Tests added:
- Fallback suite: verifies that when the parser is marked as failed, all
  isShellCommandReadOnlyAST calls delegate to isShellCommandReadOnly and
  that _resetParser() restores normal AST operation
- Consistency suite: 40+ commands from shellReadOnlyChecker.test.ts run
  through BOTH implementations; every case must agree. Known intentional
  divergences (pure assignment, process substitution, control flow,
  function definitions) are documented explicitly - all happen to agree
  on the same boolean result, confirming the two implementations are
  behaviourally consistent across the tested corpus

Fixes #2758
2026-03-31 15:23:51 +08:00
LaZzyMan
9f4bd9be5e fix(core): probe vendor directory existence to resolve WASM path robustly
The previous fix used fs.realpathSync(fileURLToPath(import.meta.url)) to
resolve symlinks before computing the WASM path.  This works in the common
case (/usr/bin/qwen → /usr/lib/node_modules/.../cli.js), but silently falls
back to the unresolved symlink path when:

  - realpathSync throws (ENOENT, EACCES, ELOOP, or other OS-level errors)
  - Node.js has already resolved import.meta.url to the real path on some
    platforms (making realpathSync a no-op and the first candidate correct),
    but the vendor files are still not found at that location

The new approach for the bundle case (inSrcUtils = false) collects up to four
candidate directories:

  1. path.dirname(fileURLToPath(import.meta.url))  — already resolved on
     Node.js 18+ on most platforms
  2. path.dirname(realpathSync(import.meta.url))   — symlink-resolved fallback
  3. path.dirname(process.argv[1])                 — entry point as invoked
  4. path.dirname(realpathSync(process.argv[1]))   — resolved entry point

It then calls fs.existsSync on each candidate path for the requested .wasm
file and returns the first one that actually exists, rather than trusting
that a single path computation is correct.  If none exist we fall back to
the first candidate so the caller still gets a deterministic ENOENT (instead
of silently using a wrong path).

Fixes #2758
2026-03-31 15:00:37 +08:00
LaZzyMan
501f80a514 fix: handle orphaned funcCall and improve compression logic for tool-heavy conversations
- Strip trailing orphaned funcCall (force=true) before split point calculation,
  so normal compression logic runs cleanly on the remaining history instead of
  requiring ad-hoc special-casing
- Remove redundant lastToolCompletionSplitPoint machinery: after fixing the
  i+2 index bug, lastSplitPoint already subsumes it, making Math.max redundant
- Add MIN_COMPRESSION_FRACTION constant (0.05) to guard against futile API
  calls when historyToCompress is too small relative to total history
- Add tests for orphaned funcCall handling (force=true compresses, force=false NOOP)
- Add test for MIN_COMPRESSION_FRACTION guard

Fixes #2647
2026-03-30 18:00:27 +08:00
DennisYu07
082d7981b2
Merge pull request #2750 from QwenLM/release/v0.13.2
chore: release v0.13.2
2026-03-30 16:43:37 +08:00
顾盼
9b9045f8f2
Merge pull request #2747 from LaZzyMan/fix/remove-command-substitution-deny
fix(shell): remove command substitution deny check from getDefaultPermission
2026-03-30 16:35:33 +08:00
DennisYu07
3fac7f6334 chore: bump version to 0.13.2
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-30 16:21:33 +08:00
DennisYu07
c975812d89 add @license 2026-03-30 16:11:26 +08:00
DennisYu07
067430eef2
Merge pull request #2718 from QwenLM/fix/terminal-response-leak-ssh
fix(cli): prevent terminal response leakage on high-latency SSH
2026-03-30 16:08:12 +08:00
DennisYu07
56492be757 fix normalize in different place 2026-03-30 16:06:31 +08:00
顾盼
fcaa1729d6
Merge pull request #2744 from LaZzyMan/fix/tree-sitter-symlink-wasm
fix(core): resolve tree-sitter wasm path for symlinked CLI
2026-03-30 15:52:02 +08:00
顾盼
76d40210f1
Merge pull request #2707 from QwenLM/fix/line-ending-preservation
fix: preserve original line endings (CRLF/LF) when editing files
2026-03-30 15:51:35 +08:00
LaZzyMan
fb7e30ad3e fix(shell): remove command substitution deny check from getDefaultPermission 2026-03-30 15:50:15 +08:00
DennisYu07
4767e6d267
Merge pull request #2623 from QwenLM/feat/qwen-code-helper
feat: add bundled qc-helper skill, qwen-code-claw reference, and README claw guide
2026-03-30 15:35:19 +08:00
顾盼
cd935a5896
Merge pull request #2656 from QwenLM/fix-issue-qwen-code
fix: resolve /clear command and ESC key lag caused by hooks system
2026-03-30 15:32:42 +08:00
DennisYu07
c7178b175b
Merge pull request #2733 from QwenLM/fix/windows-command-bash-git
fix(shell): resolve Git Bash path for node-pty on Windows
2026-03-30 15:25:07 +08:00
LaZzyMan
775ebc8470 fix(core): guard against mocked fs.realpathSync returning undefined in tests 2026-03-30 15:03:38 +08:00
DennisYu07
588ef60411 fix comment 2026-03-30 14:54:17 +08:00
DennisYu07
bba3ab93b1 fix proxy normalization 2026-03-30 14:37:18 +08:00
LaZzyMan
a288f91869 fix(core): resolve tree-sitter wasm path for symlinked CLI 2026-03-30 14:17:55 +08:00
github-actions[bot]
c7faae7b6e chore(release): sdk-typescript v0.1.6 2026-03-30 04:01:57 +00:00
wenshao
5e0d73b3f9 fix: add write_file to allowedTools, replace shell heredoc with write_file tool
The skill instructed agents to write temp files via `cat > file <<'EOF'`
in run_shell_command, which contradicts the repo's tool guidance
("Use write_file, NOT echo >/cat <<EOF"). Resolve the contradiction by:

1. Adding write_file to allowedTools in SKILL.md frontmatter
2. Replacing shell heredoc file writes with write_file tool calls
3. Keeping -F body=@file and --body-file for shell-safe gh api/pr usage

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-29 20:54:24 +08:00
wenshao
3e105452a2 fix: use temp file + quoted heredoc for shell-safe comment body
Review content may contain double quotes, $VAR, backticks, etc. that
break double-quoted shell arguments or trigger run_shell_command security
rejection. Replace direct string interpolation with a two-step approach:

1. Write body to temp file via quoted heredoc (<<'BODYEOF') which
   prevents ALL shell expansion
2. Reference file with -F body=@/tmp/pr-comment.txt in gh api calls
   and --body-file in gh pr review calls

Also update Step 5 to clean up all temp files.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-29 20:43:01 +08:00
wenshao
51ee971f31 fix: add start_side param for multi-line PR comments
Add explicit `-f start_side="RIGHT"` to the multi-line gh api comment
example. GitHub API docs indicate start_side may be required for ranged
comments. Adding it explicitly is low-cost and eliminates ambiguity.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-29 20:29:06 +08:00
wenshao
b96ef5f1bd fix: remove $() command substitution blocked by run_shell_command, align verdict with gh pr review action
- Replace heredoc `BODY=$(cat <<COMMENT_EOF ...)` with direct multi-line
  string in `-f body=` argument, since `$()` is blocked by run_shell_command
  security policy (chat-gpt-5.4 review feedback)
- Map Step 3 verdict to corresponding `gh pr review` action:
  Approve → --approve, Request changes → --request-changes, Comment → --comment

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-29 20:10:51 +08:00
DennisYu07
01fa348c17 add cache for path 2026-03-29 12:10:50 +08:00