Commit graph

4938 commits

Author SHA1 Message Date
tanzhenxin
ded89618ec refactor(tests): reorganize integration tests by execution mode
Move non-interactive tests to cli/, interactive tests to interactive/.
Add cron-interactive.test.ts wrapping terminal-capture E2E in vitest.
Update npm scripts and release workflow for new directory layout.
2026-03-29 05:49:17 +00:00
tanzhenxin
707b06ca48 fix(cron): replace "Claude" with "Qwen Code" in tool messages
Also adds terminal capture test scenario for cron-loop feature.

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-29 13:17:52 +08:00
tanzhenxin
bc674ca049 docs(scheduled-tasks): add documentation for /loop and cron scheduling features
- Add scheduled-tasks.md with comprehensive guide on using /loop and CronCreate/CronList/CronDelete tools
- Update _meta.ts sidebar to include new Scheduled Tasks page in documentation navigation

This provides users with complete documentation for session-scoped scheduled tasks, including interval syntax, one-time reminders, task management, and scheduling behavior details.

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-29 12:56:28 +08:00
tanzhenxin
42e7e543cb fix(cron): improve jitter strategy and fix vixie-cron day matching semantics
- Update cron scheduler with separate jitter strategies for recurring (up to 10% of period, capped at 15 min) and one-shot jobs (up to 90s early for :00/:30 minute marks)
- Accept 7 as valid day-of-week value (Sunday) and normalize to 0 in parser
- Implement vixie-cron day matching: OR logic when both dom and dow are constrained, AND logic when only one is constrained
- Update tests to use every-minute cron expressions for faster execution and add coverage for new day matching behavior

This improves cron job reliability by using smarter jitter calculation based on job type and fixes day-of-week matching to follow standard vixie-cron behavior where either day field can trigger execution when both are specified.

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-29 12:52:11 +08:00
tanzhenxin
69fff4337d feat(loop): add subcommands and improve cron display output
- Add list and clear subcommands to loop skill
- Create human-readable cron display utility for common patterns
- Update tool descriptions and return displays for better UX
- Separate LLM content from user-facing display in cron tools

This enhances the loop skill with convenient subcommands while making cron job displays more readable by converting common cron expressions into natural language (e.g., 'Every 5 minutes' instead of '*/5 * * * *').

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-29 12:28:57 +08:00
tanzhenxin
a3623fd819 feat(cron): add interactive E2E tests and fix cron trigger reactivity
- Add getScreenText() to TerminalCapture for reading rendered xterm.js screen
- Add E2E tests for in-session cron: inline firing, user priority, error resilience
- Fix cron prompts not processing by adding cronTrigger state dependency

This ensures cron-injected prompts are processed immediately when fired,
not just when streaming state changes, and provides comprehensive test
coverage for the in-session cron feature.

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-29 04:22:28 +00:00
tanzhenxin
f063e7cd22 refactor(cron): simplify and improve cron tool output messages
- Update cron-create to validate cron expression before scheduling and improve success messages with clearer session-lifetime guidance
- Simplify cron-delete messages from 'deleted' to 'cancelled' for better clarity
- Streamline cron-list output to single-line format per job (ID — expression (type) [session-only]: prompt)
- Remove unused nextFireTime calculations from cron tools
- Update corresponding tests to match new output formats

This makes cron tool responses more concise and user-friendly while providing clearer information about session-only job lifetime.

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-29 12:08:48 +08:00
tanzhenxin
023638fe0e docs(loop): improve /loop skill documentation with clearer parsing rules and examples
- Add detailed parsing priority order (leading token, trailing "every" clause, default)
- Include concrete examples for each parsing rule
- Clarify interval-to-cron conversion table with edge cases
- Document rounding behavior for non-divisible intervals
- Specify immediate execution after scheduling first cron fire
- Update action steps with clearer confirmation requirements

This enhances the /loop skill documentation to make interval parsing behavior more predictable and provides better guidance for handling edge cases.

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-29 11:20:17 +08:00
tanzhenxin
57cf2b0bf2 refactor(cron): rename cron_expression param to cron and enhance documentation
- Rename cron_expression parameter to cron for brevity across CronCreateTool
- Expand tool description with comprehensive usage guidance for one-shot and recurring tasks
- Add best practices for avoiding :00/:30 minute marks to reduce API load spikes
- Document 3-day auto-expiration for recurring jobs and session-only lifetime
- Add additionalProperties: false to all cron tool schemas for stricter validation
- Update integration tests and loop SKILL to use renamed parameter

This improves the developer experience with clearer parameter names and provides users with detailed guidance on scheduling patterns and runtime behavior.

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-29 11:05:37 +08:00
tanzhenxin
439a1a46e2 feat(cron): make cron tools opt-in via experimental settings
Change cron/loop tools from opt-out to opt-in. Cron tools are now
disabled by default and can be enabled via:
- settings.json: { "experimental": { "cron": true } }
- Environment variable: QWEN_CODE_ENABLE_CRON=1

This ensures experimental features are explicitly enabled by users
who want to try them.

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-29 02:25:28 +00:00
tanzhenxin
99e5a9fbfd test(integration): add cron tools integration tests
- Test cron_create, cron_list, cron_delete tool registration
- Test create-list-delete workflow in single turn
- Test one-shot (non-recurring) job creation

This validates the cron scheduler tool functionality end-to-end.

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-29 01:15:14 +00:00
tanzhenxin
c4ae7bf0cd test(cli): add cron config mocks to test fixtures
- Add isCronDisabled mock returning true
- Add getCronScheduler mock returning null

This aligns test mocks with the new cron scheduler config interface.

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-29 00:58:00 +00:00
tanzhenxin
aa4939111c feat(cron): add in-session loop scheduling with cron tools
Add session-scoped recurring jobs that fire while you work. Jobs live
inside the current Qwen Code process and are gone when you exit.

New tools:
- cron_create: schedule a prompt to run on a cron expression
- cron_list: list active cron jobs
- cron_delete: cancel a scheduled job

Components:
- CronScheduler service for in-process job management
- cronParser utility for 5-field cron expressions
- /loop skill for natural language scheduling
- Non-interactive mode integration to keep process alive

Constraints:
- Max 50 jobs per session
- 3-day expiry for recurring jobs
- Jitter to prevent thundering herd
- No catch-up for missed fire times

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-28 14:37:29 +00:00
qwen-code-ci-bot
070ec5b43e
chore: bump version to v0.13.1 (#2716)
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
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-27 18:32:26 +08:00
pomelo
d5448990f0
Merge pull request #2714 from JohnKeating1997/feat/rename-bailian-to-modelstudio 2026-03-27 18:18:16 +08:00
JohnKeating1997
181316c900 fix(docs): update references from Bailian to ModelStudio in README and localization files
- Changed all instances of "Bailian Coding Plan" to "ModelStudio Coding Plan" in README.md and related documentation.
- Updated localization files for multiple languages to reflect the new branding.
- Ensured consistency across all references to the API key and subscription requirements for the ModelStudio Coding Plan.
2026-03-27 17:55:42 +08:00
pomelo
4bacdea01e
Merge pull request #2668 from JohnKeating1997/feat/optimize-auth-intro 2026-03-27 17:38:17 +08:00
Mingholy
f7716eeb01
Merge pull request #2712 from QwenLM/mingholy/fix/permission-message-variants
test(sdk): improve permission message pattern matching
2026-03-27 17:35:28 +08:00
JohnKeating1997
5871be4496 fix(auth): update references to Alibaba Cloud ModelStudio Standard API Key in AuthDialog
- Changed all instances of "Alibaba Cloud Standard API Key" to "Alibaba Cloud ModelStudio Standard API Key" in AuthDialog and related tests.
- Added documentation links for ModelStudio Standard API Key based on region selection.
- Enhanced user feedback messages to reflect the new API key terminology.
2026-03-27 17:30:24 +08:00
Mingholy
f6c273d0a0
Merge pull request #2690 from LaZzyMan/fix/acp-permission-flow
fix(acp): align permission flow across clients
2026-03-27 17:19:46 +08:00
Mingholy
81c7a3a3f4
Merge pull request #2694 from QwenLM/fix/at-file-search-after-slash-command-2518
fix: @ file search stops working after selecting a slash command
2026-03-27 17:19:27 +08:00
Mingholy
4f8c98576a
Merge pull request #2675 from LaZzyMan/fix-issue-2671
fix: use config working directory for OpenAI logger path resolution in ACP mode
2026-03-27 16:54:59 +08:00
mingholy.lmh
4219101397 test(sdk): improve permission message pattern matching
Support both 'declined' and 'denied' variants for permission denied messages in tool control tests.

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-27 16:36:06 +08: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
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
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
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
Mingholy
27bb18455f
Merge pull request #2644 from QwenLM/fix-sdk-e2e
test(sdk): improve tool control docs and add pattern matching tests
2026-03-26 21:43:09 +08:00
Mingholy
849a7327eb
Potential fix for code scanning alert no. 110: Replacement of a substring with itself
Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
2026-03-26 21:41:10 +08:00
mingholy.lmh
3edbf561e6 test(sdk): remove debug executable path 2026-03-26 21:14:35 +08:00
mingholy.lmh
9db176a07b test(sdk): improve abort test reliability with partial message handling
- Use includePartialMessages and isSDKPartialAssistantMessage for more reliable abort triggering
- Remove flaky tool name assertions that could fail when tools aren't registered (issue #2653)

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-26 21:02:30 +08: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
LaZzyMan
460c81a7b6 fix(tools): fix glob ignore base path and add dedup for grep/ripgrep
- glob: compute relativePaths relative to projectRoot (config.getTargetDir())
  instead of searchDir so that FileDiscoveryService evaluates .gitignore /
  .qwenignore rules against the correct paths when path option is used or
  when searching across multiple workspace directories

- grep: deduplicate rawMatches by filePath:lineNumber key when searching
  multiple workspace directories to prevent duplicate results from
  overlapping search roots (e.g. parent dir + child dir in workspace)

- ripGrep: deduplicate output lines by filepath:linenum prefix when
  searching multiple workspace paths to handle the same edge case

- tests: add regression tests covering
  - glob ignores files matching .gitignore/.qwenignore when path option
    points to a subdirectory
  - grep deduplication with parent+child overlapping workspace dirs
  - ripgrep deduplication when raw output contains duplicate lines
2026-03-26 17:54:38 +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
DennisYu07
17b45c44e5 move picture to cnd 2026-03-26 16:28:07 +08:00
DennisYu07
35e11da11f add experimental for hooks 2026-03-26 16:23:59 +08:00
DennisYu07
72c4c0384f add doc for hooks 2026-03-26 16:13:24 +08:00
DennisYu07
12eb0f8f8d correct hooks JSON schema 2026-03-26 14:07:36 +08:00