Commit graph

4865 commits

Author SHA1 Message Date
tanzhenxin
9f4dd53198 feat(channels): add DingTalk reply/quote message context support
- Add interfaces for DingTalkRepliedMsg and DingTalkRichTextPart types
- Support both newer text.repliedMsg and legacy quoteMessage formats
- Extract quoted message context with isReplyToBot detection
- Summarize replied content (text, richText, media placeholders)

This enables the bot to understand when users are replying to specific
messages and provides context about what message is being referenced.

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-26 09:08:36 +00:00
tanzhenxin
a61189b232 feat(channels): add DingTalk media download support
- Handle richText, picture, file, audio, video message types
- Download media via DingTalk API two-step flow
- Attach images as base64, save other files to temp dir
- Add DingTalkMessageData interface for richer payloads

This enables the DingTalk channel to process media attachments
in incoming messages.

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-26 08:49:56 +00:00
tanzhenxin
6c6057cf9c feat(channels): add DingTalk markdown normalization
- Convert tables to pipe-separated plain text (DingTalk doesn't render tables)
- Split long messages into chunks respecting ~3800 char limit
- Handle code fences across chunk boundaries
- Extract title from first markdown line for webhook payload

This ensures markdown content renders correctly in DingTalk's limited renderer.

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-26 08:34:34 +00:00
tanzhenxin
217964b849 feat(channels): add reaction feedback and webhook caching for DingTalk
- Cache sessionWebhook by conversationId for reliable message routing
- Show 👀 reaction while processing messages, then recall it
- Use conversationId as chatId instead of webhook URL
- Fix rawData parsing for already-parsed message data

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-26 08:29:27 +00: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
tanzhenxin
1a272a12e9 feat(channels): add reply context support for referenced messages
- Add referencedText field to Envelope for quoted/replied-to messages
- TelegramAdapter extracts text from reply_to_message
- WeixinAdapter extracts text from ref_msg field
- ChannelBase prepends referenced text to agent prompt

This allows the agent to see what message a user is replying to,
providing better context for conversations in both Telegram and WeChat.

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-26 03:34:16 +00:00
tanzhenxin
9c001ba61e feat(channels): add shared slash command system
- Add /help, /clear (aliases: /reset, /new), /status commands to ChannelBase
- Commands are handled locally without agent round-trip
- TelegramAdapter skips "Working..." indicator for local commands
- Update docs to reflect new command structure

This provides a consistent command interface across all channel types
(Telegram, WeChat, etc.) with platform-specific extensibility.

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-26 03:24:44 +00: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
tanzhenxin
f6ae769736 docs(channels): document media support and add WeChat guide
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>

- Add Media Support section to overview with images and files

- Document model option for multimodal channel support

- Add Images and Files section to Telegram guide

- Add complete WeChat (Weixin) setup guide with QR auth

This documents the new media handling capabilities added to both Telegram and WeChat channels.
2026-03-25 08:12:53 +00:00
tanzhenxin
b37e2110f5 feat(channels): add file and photo support for Telegram and WeChat
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>

- Add photo message handling in Telegram adapter with base64 encoding

- Add document/file message handling with temp directory storage

- Extend WeChat adapter to support file downloads from CDN

- Refactor envelope building into reusable buildEnvelope method

- Rename ImageCdnRef to CdnRef for generic media handling

This enables users to send images and files through both Telegram and WeChat channels, with files saved to a temp directory for agent access.
2026-03-25 08:09:21 +00: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
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
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
tanzhenxin
59ee49e0ab docs(channels): add Channels feature documentation
- Add overview page explaining channels architecture and configuration
- Add Telegram channel setup guide with bot creation steps
- Add navigation entries for channels section

This documents the new Channels feature that allows users to interact
with Qwen Code agents from messaging platforms like Telegram.

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-24 11:12:52 +00:00
tanzhenxin
2867e779b9 refactor(channels): simplify Telegram status tracking and improve event handling
- Add ToolCallEvent interface and emit typed events from AcpBridge
- Refactor sessionUpdate handling into dedicated method
- Simplify TelegramAdapter to use simple 'Working...' message
- Change to non-awaited handler to avoid Telegraf 90s timeout
- Remove console.log statements for cleaner code

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-24 10:18:23 +00:00
tanzhenxin
a5d2fafa3c fix(channels): fix TypeScript build errors
- Use bracket notation for index signature properties
- Add tsconfig.json for channels/base and channels/telegram packages

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-24 06:45:39 +00: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
tanzhenxin
2985201317 feat(channels/telegram): add slash command support
- Local commands: /start (welcome), /help (dynamic list), /reset (clear session)
- Non-local slash commands forwarded to ACP agent as prompts
- AcpBridge captures available_commands_update to populate /help dynamically
- SessionRouter gains hasSession/removeSession for /reset support
2026-03-24 06:33:37 +00:00
tanzhenxin
be838eea01 feat(channels/telegram): format agent markdown as Telegram HTML
Use telegram-markdown-formatter to convert agent markdown responses
to Telegram HTML (bold, italic, code blocks, links). Falls back to
plain text if HTML parsing fails. Also uses the package's built-in
HTML-aware message splitting for long responses.
2026-03-24 06:33:36 +00:00
tanzhenxin
3eedc43238 feat(channels): add Telegram channel integration with ACP bridge
Implements the channels infrastructure for connecting external messaging
platforms to Qwen Code via ACP. Phase 1 supports plain text round-trip:
Telegram user sends message -> AcpBridge -> qwen-code --acp -> response
back to Telegram.

New packages:
- @qwen-code/channel-base: AcpBridge, SessionRouter, SenderGate, ChannelBase
- @qwen-code/channel-telegram: TelegramAdapter using telegraf

CLI: `qwen channel start <name>` reads from settings.json channels config,
spawns ACP agent, connects to Telegram via polling.
2026-03-24 06:33:36 +00:00
DennisYu07
aebe889b31
Merge pull request #2607 from QwenLM/fix/hook_runner-process_kill
Some checks are pending
Qwen Code CI / Post Coverage Comment (push) Blocked by required conditions
Qwen Code CI / CodeQL (push) Waiting to run
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
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(hooks): terminate hook child processes when user exits CLI
2026-03-23 20:57:38 +08:00
DennisYu07
7573e1b0bd add systemMessage for jook 2026-03-23 19:48:08 +08:00
顾盼
0731ce81b8
Merge pull request #2610 from QwenLM/fix/web-fetch-system-instruction
fix(web-fetch): add simplified system instruction to prevent AI greeting responses
2026-03-23 19:34:08 +08:00
Qwen Code Bot
ca3086c62c fix(web-fetch): add simplified system instruction to prevent AI greeting responses
- Add concise system instruction for web content processing
- Prevents glm-5 and other models from using main session's complex prompt
- Fixes issue where web_fetch returns AI greetings instead of web content

Resolves #2609
2026-03-23 17:39:52 +08:00
DennisYu07
b87c731487 fix test 2026-03-23 16:42:46 +08:00
DennisYu07
8bd7cf2cda add singal abort for hooks 2026-03-23 16:02:54 +08:00
顾盼
a0041191a7
Merge pull request #2536 from LaZzyMan/fix/test-artifacts-and-shell-permissions
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 shell permission parsing and test-created debug artifacts
2026-03-23 11:34:16 +08:00
LaZzyMan
6653edeb0c Merge branch 'main' into fix/test-artifacts-and-shell-permissions 2026-03-23 11:10:05 +08:00
LaZzyMan
8769ba9e82 recover changes 2026-03-23 11:09:55 +08:00
易良
d709869aae
Merge pull request #2371 from QwenLM/feat/btw-command
feat(cli): add /btw slash command for ephemeral side questions
2026-03-23 11:01:16 +08:00
wenshao
13423f0676 fix(cli): harden /btw command error handling and type safety
- Add null/undefined guard in formatBtwError to avoid "null"/"undefined" strings
- Add type guard for btw property in HistoryItemDisplay to prevent crash
- Extract isBtwCommand regex to module-level constant and simplify with [/?]

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-22 01:21:07 +08:00
yiliang114
905f2c3f36 Merge branch 'main' into fix/pr2371-btw-complete 2026-03-21 01:10:48 +08:00
yiliang114
dff9822f9b fix(cli): improve /btw overlay UX — layout, dismiss hints, and history cleanup
- Make /btw overlay mutually exclusive with Composer (replaces input area)
- Add dismiss hints: "Press Escape to cancel" (pending) / "Press Space,
  Enter, or Escape to dismiss" (completed)
- Skip adding /btw to conversation history to avoid duplicate display
- Prioritize dialog shortcuts over btw dismiss via dialogsVisibleRef
- Add `sleep` property to terminal-capture FlowStep for async wait scenarios

Made-with: Cursor
2026-03-21 01:07:02 +08:00
LaZzyMan
c0df754418 Merge branch 'main' into fix/test-artifacts-and-shell-permissions 2026-03-20 18:04:44 +08:00
DennisYu07
38caa0b218
Merge pull request #2478 from QwenLM/feat/hooks-plugin
Some checks failed
Qwen Code CI / Lint (push) Has been cancelled
Qwen Code CI / CodeQL (push) Has been cancelled
E2E Tests / E2E Test (Linux) - sandbox:docker (push) Has been cancelled
E2E Tests / E2E Test (Linux) - sandbox:none (push) Has been cancelled
E2E Tests / E2E Test - macOS (push) Has been cancelled
Qwen Code CI / Test (push) Has been cancelled
Qwen Code CI / Test-1 (push) Has been cancelled
Qwen Code CI / Test-2 (push) Has been cancelled
Qwen Code CI / Test-3 (push) Has been cancelled
Qwen Code CI / Test-4 (push) Has been cancelled
Qwen Code CI / Test-5 (push) Has been cancelled
Qwen Code CI / Test-6 (push) Has been cancelled
Qwen Code CI / Test-7 (push) Has been cancelled
Qwen Code CI / Test-8 (push) Has been cancelled
Qwen Code CI / Post Coverage Comment (push) Has been cancelled
feat(hooks): use extension dir files instead of tmp dir files
2026-03-20 18:01:50 +08:00
LaZzyMan
dae107d60b Merge branch 'main' into fix/test-artifacts-and-shell-permissions 2026-03-20 17:58:50 +08:00
LaZzyMan
fcd31e2adf fix: prevent bogus shell permission rules in tests 2026-03-20 17:55:33 +08:00
DennisYu07
857c7fb99b Merge branch 'main' into feat/hooks-plugin 2026-03-20 17:43:30 +08:00
Mingholy
b15850b68c
Merge pull request #2535 from QwenLM/docs-update-by-joeytoday
fix: update Discord invite link to permanent URL
2026-03-20 17:41:38 +08:00
tanzhenxin
c1527adadd
Merge pull request #2533 from QwenLM/feat/add-screenshot-section-to-pr-template
docs: add Screenshots/Video Demo section to PR template
2026-03-20 17:40:49 +08:00
joeytoday
0b50b99f7d fix: update Discord invite link to permanent URL
The previous Discord invite link was invalid. Updated to a permanent
invite link as reported in #2103.

Closes #2103

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-20 17:27:53 +08:00
tanzhenxin
f670590e7e Merge branch 'main' into feat/add-screenshot-section-to-pr-template 2026-03-20 17:20:53 +08:00
tanzhenxin
4376a9026c
Merge pull request #2489 from QwenLM/refactor/task-to-agent-tool
feat(core): add Explore agent and rename TaskTool to AgentTool
2026-03-20 17:12:38 +08:00
tanzhenxin
bf5aa685c2 docs(pr-template): reorder sections for better flow
Move "Dive Deeper" section after "Screenshots / Video Demo" to improve
readability. Screenshots section is more actionable and should appear
earlier in the template.

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-20 17:04:58 +08:00
tanzhenxin
99613b85ce docs: add Screenshots/Video Demo section to PR template
Add a new section to the PR template encouraging contributors to attach
visual demos of their changes. This helps reviewers understand changes
quickly and prioritizes reviews. Also update CONTRIBUTING.md with
guidelines for different types of changes (bug fixes, features, refactors).

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-20 16:59:53 +08:00
tanzhenxin
71a59fbbb0 test(vscode): add mock child to AcpConnection test setup
This ensures the test has a properly initialized mock child process,
fixing potential test failures during the task-to-agent-tool refactor.

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-20 16:50:36 +08:00
tanzhenxin
3a686d5ad1 Merge remote-tracking branch 'origin/main' into refactor/task-to-agent-tool 2026-03-20 16:32:37 +08:00
DennisYu07
5a4a58c31b add hooks.json path in plugin config 2026-03-20 16:06:21 +08:00