Commit graph

2483 commits

Author SHA1 Message Date
tanzhenxin
811ccdd02d Merge remote-tracking branch 'origin/main' into feat/channels-telegram 2026-03-27 08:21:41 +00:00
JohnKeating1997
ddc397360f refactor(auth): support multiple model IDs in Alibaba Cloud Standard API authentication
- Updated AuthDialog to handle multiple model IDs, allowing users to input and submit a comma-separated list.
- Adjusted related functions to process and validate multiple model IDs.
- Enhanced user feedback messages to reflect the changes in model ID handling.
2026-03-27 15:49:05 +08:00
DennisYu07
8dfd981af0 Merge branch 'main' into feat/hooks-refactor-ui-event 2026-03-27 13:59:33 +08:00
tanzhenxin
ad20049a4e Merge remote-tracking branch 'origin/main' into refactor/subagent-model-selection 2026-03-27 11:56:29 +08:00
tanzhenxin
5d58b2f112 feat: simplify subagent model configuration with model selector
Refactor subagent model configuration from nested modelConfig object to a simple model string field for better UX and clarity.

Changes:
- Replace modelConfig object with model string in SubagentConfig interface
- Add model-selection.ts utility for parsing and validating model selectors
- Support 'inherit' keyword and bare model IDs (e.g., 'glm-5', 'claude-sonnet-4-6')
- Maintain backward compatibility by parsing legacy modelConfig frontmatter
- Update validation to reject cross-provider authType-prefixed selectors
- Update SDK types (TypeScript and Java) to reflect new schema
- Add comprehensive tests for model selection and validation
- Update documentation with model selection examples

Breaking changes:
- modelConfig.frontmatter field deprecated in favor of model field
- Cross-provider model selectors (e.g., 'openai:gpt-4') not supported for subagents

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-27 11:49:45 +08:00
DennisYu07
0c6b16c695 add check for userPromptSubmit 2026-03-27 11:27:33 +08:00
LaZzyMan
cec0074b2d fix(acp): prefer filePath over fileName in buildPermissionRequestContent
When building diff content for edit-type permission requests, use
confirmation.filePath (full path) when available, falling back to
confirmation.fileName. This aligns with the test expectation and
ensures SubAgentTracker sends the correct file path in ACP permission
dialogs.
2026-03-27 10:58:00 +08:00
LaZzyMan
0fd6f3a78b Merge branch 'main' into fix/acp-permission-flow 2026-03-27 10:54:25 +08:00
DennisYu07
cf0b67ef8e refactor ui for stop hook reason and systemMessage 2026-03-27 10:54:16 +08:00
LaZzyMan
3b2d50fad6 fix: @ file search stops working after selecting a slash command (#2518) 2026-03-27 10:47:55 +08:00
LaZzyMan
07273015fd test(acp): add coverage for L1 isToolEnabled deny in Session.runTool
Verify that when PermissionManager.isToolEnabled resolves to false the
tool is never executed and no permission dialog is opened.  This guards
against the async-await regression fixed in the previous commit.
2026-03-27 10:46:35 +08:00
LaZzyMan
cb97bf6068 fix(acp): add missing await for async isToolEnabled in Session.runTool
PermissionManager.isToolEnabled was changed to async in this PR but the
call site in Session.runTool was not updated, causing the Promise to be
evaluated as a truthy value and the L1 tool-enablement check to always
pass — effectively disabling permission denial in the ACP session path.
2026-03-27 10:37:20 +08:00
LaZzyMan
585bce06d2 Merge branch 'fix-permission-issues' into fix/acp-permission-flow 2026-03-27 10:05:01 +08:00
LaZzyMan
dd518de5b0 fix(acp): align permission flow across clients 2026-03-26 23:25:04 +08:00
tanzhenxin
06ccc80c48 feat(channels): allow extensions to register channel plugins
- Add ExtensionChannelConfig interface for declaring channels in extension manifests
- Add loadChannelsFromExtensions() to discover and register channel plugins from active extensions
- Integrate extension channel loading into channel start commands

This enables extensions to contribute new channel types (e.g., Telegram, Slack) without modifying core code.

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-26 13:59:32 +00:00
Mingholy
26e0128dc6
Merge pull request #2631 from QwenLM/fix/issue-1203-subagent-diff-tab-stuck
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(acp-integration/agent): clear stale subagent diff confirmation after IDE accept
2026-03-26 21:44:16 +08:00
Mingholy
d6502dd352
Merge pull request #2637 from LaZzyMan/fix-permission-issues
feat: human-readable permission labels, deny rule feedback, and multi-dir search improvements
2026-03-26 21:44:00 +08:00
Mingholy
be32213973
Merge pull request #2611 from QwenLM/mingholy/fix/node-pty-errors
fix(shell): handle PTY race condition errors gracefully
2026-03-26 21:43:33 +08:00
tanzhenxin
8a6ed128ea feat(channels): add ChannelPlugin interface and registry-based factory
Refactor channel system to use a formal plugin interface:

- Add ChannelPlugin interface to @qwen-code/channel-base (channelType,
  displayName, requiredConfigFields, createChannel factory)
- Each built-in adapter (Telegram, WeChat, DingTalk) exports a plugin object
- Replace hardcoded if/else factory with a Map-based channel registry
- Config validation now uses plugin's requiredConfigFields dynamically
- ChannelType changed from fixed union to string for extensibility
- Multi-channel mode now picks model from first channel config

This is the foundation for external plugin support — built-in channels
go through the exact same code path that third-party plugins will use.
2026-03-26 12:34:31 +00:00
DennisYu07
80d4b50f90
Merge pull request #2679 from QwenLM/feat/hooks-doc
docs: add hooks documentation and fix JSON schema
2026-03-26 20:14:40 +08:00
Mingholy
00447356ad
Merge pull request #2602 from QwenLM/feat/hooks-refactor-hooks-ui
feat(hooks ui): refactor ui for Qwen Code hooks
2026-03-26 20:11:50 +08:00
DennisYu07
e11deedc67 fix test 2026-03-26 19:52:53 +08:00
DennisYu07
a4e2ff9554 remove cases 2026-03-26 19:25:48 +08:00
DennisYu07
b0d01a1fb9 remove case 2026-03-26 18:53:51 +08:00
DennisYu07
14be6aed4e change some phrase 2026-03-26 17:11:13 +08:00
DennisYu07
7e5613cf2a fix comment 2026-03-26 16:51:57 +08:00
tanzhenxin
92c54ff309 feat(channels): add DingTalk channel adapter
- Add @qwen-code/channel-dingtalk package with stream-based bot integration
- Support clientId/clientSecret authentication for DingTalk
- Add message deduplication and group chat mention handling
- Update ChannelConfig type to include dingtalk channel type

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-26 08:03:43 +00:00
DennisYu07
12eb0f8f8d correct hooks JSON schema 2026-03-26 14:07:36 +08:00
DennisYu07
db7ec117c2
Merge pull request #2645 from QwenLM/fix/git_bash_change_windows
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(windows): support git bash/MSYS2 shell detection on Windows
2026-03-26 13:04:38 +08:00
tanzhenxin
697898a9fb feat(channel): add status and stop commands for service management
- Add `qwen channel status` to check running service info
- Add `qwen channel stop` to gracefully stop the service
- Add PID file tracking to prevent duplicate service instances
- Update documentation with new commands and usage

This enables users to manage the channel service from another terminal
without needing to use Ctrl+C on the foreground process.

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-26 03:06:48 +00:00
tanzhenxin
1a605ec973 feat(channels): add crash recovery and gateway mode support
- Add session persistence to SessionRouter for crash recovery
- Add loadSession method to AcpBridge for restoring sessions
- Add ChannelBaseOptions to support external router injection
- Refactor start.ts to support both standalone and gateway modes
- Extract config utilities into separate module

This enables channels to recover sessions after bridge crashes and
supports running multiple channels under a gateway process.

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-26 02:55:18 +00:00
Mingholy
a1b700192b
Merge pull request #2080 from zy6p/fix/2049-preserve-selected-auth-type-on-auth-failure
fix(cli): preserve selected auth type on startup auth failure
2026-03-26 10:06:02 +08:00
JohnKeating1997
41b5001e54 fix(auth): update descriptions for API key compatibility in AuthDialog 2026-03-25 23:29:57 +08:00
JohnKeating1997
28dbf6649d feat(auth): implement Alibaba Cloud Standard API Key support 2026-03-25 23:27:03 +08:00
DennisYu07
a5c6084222 refactor ui for stop hook and userPromptSubmit 2026-03-25 20:44:55 +08:00
zhangxy-zju
e1371ec781 chore: address review feedback - log cleanup errors, add inline comment 2026-03-25 19:30:11 +08:00
zhangxy-zju
38d0acb01c fix: clean up MCP subprocesses on ACP shutdown to prevent orphan processes
PR #2472 added SIGTERM/SIGINT handlers in runAcpAgent() that destroy
stdin/stdout streams, allowing the ACP connection to close. However,
it did not call runExitCleanup() to terminate child processes (MCP
servers, etc.) spawned by the CLI. This caused orphan subprocesses
to persist after the IDE disconnects, especially noticeable in VSCode
with multiple tabs.

Changes:
- acpAgent.ts: Call runExitCleanup() in the shutdown signal handler
  before process.exit(0), ensuring MCP server subprocesses are killed
- gemini.tsx: Call runExitCleanup() + process.exit(0) after
  runAcpAgent() returns normally, matching the cleanup pattern used
  by other non-interactive exit paths
- Add 4 unit tests covering SIGTERM cleanup, SIGINT cleanup,
  idempotent shutdown, and cleanup-failure resilience

Closes #1884
2026-03-25 19:30:09 +08:00
顾盼
b57b8ed5fe
Merge pull request #2368 from huww98/fix/memory-show-multi-file-support
fix(cli): `/memory show --project` and `--global` now display all configured context files
2026-03-25 16:51:08 +08:00
tanzhenxin
4f2b9e9bd8 feat(channels): add multimodal support with image handling
- Add model configuration option for channel-specific model selection
- Support base64-encoded images in prompts via AcpBridge
- Add media utilities for WeChat/Weixin channel
- Update settings schema for model configuration

Enables channels to process images and use custom models.

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-25 07:43:48 +00:00
tanzhenxin
24c9b0f333 feat(channels): add WeChat/Weixin channel support
- Add WeixinAdapter with accounts, api, login, monitor, send modules
- Add channel configure command for interactive setup
- Update TelegramAdapter for consistency

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-25 06:54:51 +00:00
LaZzyMan
05062fd689 fix: resolve /clear command and ESC key lag caused by hooks system
- Make hook events fire-and-forget in clearCommand to avoid blocking UI
- Move context.ui.clear() before resetChat for immediate responsiveness
- Add hasHooksForEvent() fast-path check to HookSystem and Config
- Skip MessageBus round-trips in client.ts when no hooks are registered
- Add comprehensive unit tests for all changes

Fixes #2651
2026-03-25 14:01:24 +08:00
DennisYu07
50ade83e4d fix comment 2026-03-25 11:08:23 +08:00
tanzhenxin
90236465d3 feat(channels): add group chat support for Telegram
- Add GroupGate class for group access control with three policies:
  disabled (default), allowlist, and open
- Implement mention gating: bot only responds when @mentioned or replied to
  in groups (configurable per-group)
- Extend Envelope type with isGroup, isMentioned, isReplyToBot fields
- Update TelegramAdapter to detect group context and mentions
- Add comprehensive documentation for group chat setup and troubleshooting

This enables using Qwen Code bots in Telegram groups with fine-grained
access control and mention-based activation to prevent noise.

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-25 02:04:27 +00:00
DennisYu07
3edcfc1cfd fix test 2026-03-25 10:04:26 +08:00
LaZzyMan
a5a8ec5d67 feat: human-readable permission labels, deny rule feedback, and multi-dir search tests
- Add buildHumanReadableRuleLabel() to convert raw permission rules into
  natural-language descriptions for the 'Always Allow' UI options
- Add PermissionManager.findMatchingDenyRule() to surface which deny rule
  caused a tool to be blocked, improving error messages in coreToolScheduler
- Update ToolConfirmationMessage to use friendly labels with i18n support
- Add comprehensive tests for new permission features and multi-directory
  search in glob, grep, and ripGrep tools
- Fix integration test for tool-control allowedTools configuration
2026-03-24 19:47:07 +08:00
tanzhenxin
8753245b5f feat(channels): add DM pairing flow for sender approval
- Add PairingStore for managing pending requests and approved users
- Update SenderGate to support pairing policy with code generation
- Add CLI commands: `qwen channel pairing list/approve`
- Document pairing flow with rules and usage examples

This allows unknown senders to request access via a pairing code
that the bot operator approves through the CLI.

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-24 11:37:16 +00:00
DennisYu07
a0b3cc3268 add hook detail page 2026-03-24 18:08:15 +08:00
DennisYu07
247e8b8742 add test for hooks ui 2026-03-24 15:23:31 +08:00
DennisYu07
7a53185dbf add multi-language for hooks ui 2026-03-24 14:49:16 +08:00
tanzhenxin
615ccd08f2 feat(channels): add config validation, instructions, and sessionScope support
- Validate required fields (type, token) with clear error messages
- Prepend channel instructions to first prompt of each session
- SessionRouter respects sessionScope (user/thread/single) for routing keys
2026-03-24 06:33:37 +00:00