Commit graph

231 commits

Author SHA1 Message Date
jinye
e384338145
feat(SDK) Add Python SDK implementation for #3010 (#3494)
* Codex worktree snapshot: startup-cleanup

Co-authored-by: Codex

* Add Python SDK real smoke test

Adds a repository-only real E2E smoke script for the Python SDK, plus npm and developer documentation entry points.

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>

* fix(sdk-python): address review findings — bugs, type safety, and test coverage

- Fix prepare_spawn_info: JS files now use "node" instead of sys.executable
- Fix protocol.py: correct total=False misuse on 7 TypedDicts (required fields were optional)
- Fix query.py: add _closed guard in _ensure_started, suppress exceptions in close()
- Fix sync_query.py: prevent close() deadlock, add context manager, add timeouts
- Fix transport.py: handle malformed JSON lines, add _closed guard in start()
- Fix validation.py: use uuid.RFC_4122 instead of magic UUID
- Fix __init__.py: export TextBlock, widen query_sync signature
- Remove dead code: ensure_not_aborted, write_json_line, _thread_error
- Add 12 new tests (29 → 41): context managers, JSON skip, closed guards, spawn info, timeouts

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>

* fix(sdk-python): address wenshao review — session_id, bool validation, debug stderr

- Fix continue_session=True generating a wrong random session_id
- Add _as_optional_bool helper for strict type validation on bool fields
- Default debug stderr to sys.stderr when no custom callback is provided

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>

* fix(sdk-python): address remaining wenshao review feedback

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>

* test(cli): harden settings dialog restart prompt test

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>

* fix(sdk-python): review fixes — UUID compat, stderr fallback, sync cleanup

- Remove UUID version restriction to support v6/v7/v8 (RFC 9562)
- Always write to sys.stderr when stderr callback raises (was silent when debug=False)
- Prevent duplicate _STOP sentinel in SyncQuery.close() via _stop_sent flag
- Add ruff format --check to CI workflow
- Fix smoke_real.py version guard: fail early before imports instead of NameError
- Apply ruff format to existing files

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>

* fix(sdk-python): remaining review fixes — exit_code attr, guard strictness, sync timeout

- Add exit_code attribute to ProcessExitError for programmatic access
- Strengthen is_control_response/is_control_cancel guards to require
  payload fields, preventing misrouting of malformed messages
- Expose control_request_timeout property on Query so SyncQuery uses
  the configured timeout instead of a hardcoded 30s default
- Use dataclasses.replace() instead of direct mutation on frozen-style
  QueryOptions in query() factory
- Add ResourceWarning in SyncQuery.__del__ when not properly closed

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>

* fix(sdk-python): add exit_code default and guard __del__ against partial GC

- Give ProcessExitError.exit_code a default value (-1) so user code can
  construct the exception with just a message string
- Wrap SyncQuery.__del__ in try/except AttributeError to prevent crashes
  when the object is partially garbage-collected

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>

* fix(sdk-python): review fixes — resource leak, type safety, CI matrix, docs

- Fix SyncQuery.__del__ to call close() on GC instead of only warning
- Replace hasattr duck-type check with isinstance(prompt, AsyncIterable)
- Type-validate permission_mode/auth_type in QueryOptions.from_mapping
- Use TypeGuard return types on all is_sdk_*/is_control_* predicates
- Add 5s margin to sync wrapper timeouts to prevent error type masking
- Expand CI matrix to test Python 3.10, 3.11, 3.12
- Change ProcessExitError.exit_code default from -1 to None
- Add stderr to docs QueryOptions listing
- Update README sync example to use context manager pattern

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>

* fix(sdk-python): preserve iterator exhaustion state and suppress detached task warning

- Add _exhausted flag to Query.__anext__ and SyncQuery.__next__ so
  repeated iteration after end-of-stream raises Stop(Async)Iteration
  instead of blocking forever.
- Remove re-raise in _initialize() to prevent asyncio
  "Task exception was never retrieved" warning on detached tasks;
  the error is already surfaced via _finish_with_error().

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>

* fix(sdk-python): reject mcp_servers at validation time and add iterator/init tests

- Reject mcp_servers in validate_query_options() with a clear error
  instead of advertising MCP support to the CLI and then failing at
  runtime when mcp_message arrives.
- Remove dead mcp_servers branch from _initialize().
- Add tests for async/sync iterator exhaustion, detached init task
  warning suppression, and mcp_servers validation.

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>

* fix(sdk-python): fix ruff lint errors in new tests

- Use ControlRequestTimeoutError instead of bare Exception (B017)
- Fix import sorting for stdlib vs third-party (I001)
- Break long line to stay within 88-char limit (E501)

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>

* style(sdk-python): apply ruff format to new tests

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>

---------

Co-authored-by: jinye.djy <jinye.djy@alibaba-inc.com>
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-04-25 07:02:58 +08:00
pomelo
55c63e1a2a
docs(github): tighten PR template validation guidance (#3522)
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-04-24 22:14:06 +08:00
jinye
4e0a37549d
fix(i18n): sync mismatched keys between en.js and zh.js (#3534)
Some checks are pending
E2E Tests / E2E Test - macOS (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
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
* fix(i18n): sync mismatched keys between en.js and zh.js (#3503)

Add 4 keys missing from en.js that are actively used in source code,
add 5 missing Chinese translations to zh.js, integrate check-i18n
into CI to prevent future drift, and skip JSON file write in CI to
avoid dirtying the working tree.

---
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-04-24 00:38:32 +08:00
Shaojin Wen
f340d95446
ci(stale): enable 35+35 stale/close policy for pull requests (#3375)
* ci(stale): enable 28+28 stale/close policy for pull requests

- Fix the repository guard so the workflow actually runs on
  QwenLM/qwen-code (it was previously gated to google-gemini/gemini-cli
  and never executed in this repo).
- Scope the behavior to pull requests for now; issue policy will be
  introduced separately once triage labels are in place.
- Mark a PR stale after 4 weeks without activity, then close it after
  another 4 weeks.
- Exempt pinned, security, status/blocked, status/on-hold, and
  status/ready-for-merge from auto-close.
- Remove the stale label automatically when activity resumes, and
  process the oldest PRs first on each run.

* ci(stale): loosen PR cadence from 28+28 to 35+35

Five weeks + five weeks gives contributors more slack around holidays
and busy periods, and reduces the first-run impact on the existing
backlog. The total window moves from 56 days to 70 days.

* ci(stale): move cron from 01:30 UTC to 00:30 UTC

Shift by one hour so results are ready before the Beijing work day
starts (08:30 local), while still avoiding the top of the hour (the
high-contention window for GitHub-hosted runners) and staying 30
minutes after release.yml at 00:00 UTC.

* ci(stale): drop redundant repo guard and document ops-per-run

- Remove the `github.repository == 'QwenLM/qwen-code'` job guard:
  scheduled runs are already disabled on forks by GitHub, and
  workflow_dispatch is manually-triggered so the guard adds no safety.
- Add a comment explaining the `operations-per-run: 100` rationale
  (rate-limit headroom given the ~150-PR backlog).
2026-04-19 09:45:17 +08:00
易良
6af0f37bb8
ci(release): parallelize release validation (#3132)
* ci(release): parallelize release validation

* ci(release): allow publish when tests are skipped

* ci(release): drop planning artifact from workflow PR

* ci(release): address workflow review findings

* ci(release): fix quality job bootstrap

* ci(release): fix docker test and dry-run notify flow
2026-04-13 17:16:53 +08:00
tanzhenxin
00a4def954
Remove CODEOWNERS file (#2937)
The broad CODEOWNERS wildcard was adding notification noise without
providing meaningful ownership boundaries. Removing it so that any
team member with write access can provide approving reviews.
2026-04-07 13:08:54 +08:00
tanzhenxin
d07861ad5c chore(channels): make plugin-example private and remove from release workflow
- Mark @qwen-code/channel-plugin-example as private in package.json
- Remove publish step from release workflow
- Remove file: to semver rewrite logic in version script
- Use file: reference for @qwen-code/channel-base dependency

This change prevents the example plugin from being published to npm, as it's only intended for internal/development use.

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-04-01 20:43:45 +08:00
tanzhenxin
b2f04418fa
Merge pull request #2628 from QwenLM/feat/channels-telegram
feat(channels): add extensible Channels platform with plugin system and Telegram/WeChat/DingTalk channels
2026-04-01 16:19:08 +08:00
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
a700ce8186 chore(release): add channel packages to release workflow
- Bump channel package versions to 0.13.0
- Add publish steps for @qwen-code/channel-base and @qwen-code/channel-plugin-example
- Update version script to convert file: references to semver for published packages

This enables proper npm publishing of channel packages during the release process.

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-27 06:16:22 +00: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
yiliang114
b5d40a9f96 chore(CODEOWNERS): remove required reviewers for vscode-ide-companion and webui packages
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-16 10:08:17 +08:00
yiliang114
1ebb9bc994 chore: add yiliang114 as code owner for vscode-ide-companion and webui
Add @yiliang114 as the code owner for the following packages:
- packages/vscode-ide-companion/
- packages/webui/
2026-03-12 11:28:20 +08:00
mingholy.lmh
f1c88e9bc9 style: apply formatting and linting fixes across codebase
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-06 21:58:22 +08:00
DragonnZhang
3e0ec10c68 chore: add @DragonnZhang to CODEOWNERS for review assignments 2026-03-06 16:06:56 +08:00
易良
f027fdf621
Merge branch 'main' into feat/add-vscode-settings-json-schema 2026-03-03 11:21:57 +08:00
DragonnZhang
585081e7de feat: add CLI package build and settings schema validation to CI workflow 2026-02-26 16:10:14 +08:00
mingholy.lmh
bef3755ac2 fix(workflows): improve release notes handling in release-sdk.yml
- Use printf instead of echo for safer string output
- Remove --notes-start-tag as we use --notes-file for custom release notes

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-22 12:36:45 +08:00
mingholy.lmh
8fe304c19b fix(workflows): standardize release notes generation and add prerelease labels
- Fix release-sdk.yml: Use file-based approach with --notes-file instead of
  complex inline string interpolation to avoid shell parsing errors with
  backticks and special characters

- Fix release.yml: Add --prerelease flag for nightly and preview releases
to properly mark them as pre-releases on GitHub

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-20 21:57:53 +08:00
mingholy.lmh
77a8698bc5 ci(sdk-release): fix nightly and preview version calculation based on npm latest+1 patch
- Add getNextPatchVersion() to calculate next patch version from npm latest
- Fix getNightlyVersion() to use npm latest + 1 patch instead of package.json
- Fix getPreviewVersion() to use npm latest + 1 patch instead of nightly version
- Add version info logging in workflow for dry-run verification

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-06 12:34:31 +08:00
mingholy.lmh
b3cc60e293 ci(sdk-release): set npm_latest as default cli_source for safer SDK releases
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-06 11:23:56 +08:00
mingholy.lmh
39884cc6a1 ci(sdk-release): fix CLI package path handling
- Remove dist/ directory requirement from workflow (CLI files are in package root)
- Update bundle-cli-from-npm.js to use package root directly instead of package/dist

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-05 22:06:08 +08:00
mingholy.lmh
20b54c78de ci(sdk-release): fix actionlint and yamllint errors
- Fix SC2086: double quote variables to prevent globbing and word splitting
- Fix yamllint quoted-strings: wrap if conditions with double quotes

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-05 21:47:21 +08:00
mingholy.lmh
1e05359881 ci(sdk-release): add CLI source selection for SDK releases
- Replace cli_ref input with cli_source choice (build_from_source or npm_latest)
- Add support for bundling latest stable CLI from npm
- Add bundle-cli-from-npm.js script for npm-based CLI bundling
- Fix property naming in nonInteractiveCli.ts (outputUpdateHandler)
- Improve integration tests for subagents
- Skip creating issue on failure during dry-run mode

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-05 20:57:01 +08:00
tanzhenxin
4e28bd208e
Merge pull request #1710 from QwenLM/mingholy/ci/sdk-release-workflow
ci(sdk-release): use stable CLI tags for SDK releases
2026-02-05 16:25:03 +08:00
tanzhenxin
9abb958a23 fix(docker): use scripts/build.js and update workflow for manual builds
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-05 14:52:18 +08:00
mingholy.lmh
8de68f9675 ci(sdk-release): use stable CLI tag for SDK releases
- Add 'cli_ref' input parameter to specify CLI version to bundle
- Auto-detect latest stable CLI tag when cli_ref not specified
- Validate that stable SDK releases use tagged CLI versions (not main)
- Record bundled CLI version in SDK dist and release notes

This ensures SDK releases bundle stable, tested CLI code instead of
potentially unstable main branch code.

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-04 14:48:17 +08:00
tanzhenxin
44b7dad966 fix(ci): add --skip-duplicate flag to vsce publish
Prevents workflow failure when some platform VSIXes are already
published (e.g., darwin-arm64, darwin-x64) during retry runs.

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-03 15:10:38 +08:00
yiliang114
2779faf010 chore(ci): add webui dependency build step in release workflow
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-01-30 11:32:51 +08:00
tanzhenxin
f964c2a26b fix(ci): honor manual preview version input
When create_preview_release is enabled, allow the workflow_dispatch version input
to control the preview version (and avoid appending a timestamp if a preview id
is already provided) to match user intent.
2026-01-30 11:05:35 +08:00
tanzhenxin
e5b800a79d fix(vscode-ide-companion): prune ripgrep binaries and remove generic node-pty
- Re-enable macOS x64 CI builds using macos-15-intel runner
- Remove generic node-pty dependency in favor of platform-specific @lydell/node-pty-* packages
- Add ripgrep binary pruning for platform-specific builds to reduce VSIX size
- Add Windows workaround to remove npm junction self-references during packaging
2026-01-24 13:18:57 +08:00
tanzhenxin
3d6fe23c3b refactor(sdk,vscode): extract CLI bundling to dedicated script
- Move CLI bundling logic from build.js to bundle-cli.js in SDK package
- Add bundle:cli script to SDK package.json lifecycle hooks
- Remove redundant Build and Bundle step from workflow (prepackage handles it)
- Add repo build step to prepackage.js to ensure workspace artifacts exist
- Fix Windows workspace symlink issue by running npm install from tmpdir
- Remove lint/typecheck from prepackage (handled elsewhere in CI)
2026-01-24 11:35:33 +08:00
tanzhenxin
510610c575 ci(vscode-ide-companion): simplify workflow and fix report-failure job
- Remove redundant version update from prepare job (only needed before packaging)
- Use npm run release:version to update all package versions consistently
- Add build and bundle step before packaging
- Fix report-failure job by adding --repo flag to gh issue create
- Temporarily disable darwin-x64 build (macos-latest-large) due to billing
2026-01-24 07:10:08 +08:00
tanzhenxin
4770324df2 ci(vscode-ide-companion): add platform-specific builds to fix node-pty binary mismatch
Build separate VSIXes for each platform to ensure native node-pty
binaries match the user's OS, preventing "posix_spawnp failed" errors.
2026-01-24 06:25:43 +08:00
tanzhenxin
c2fbccc002 ci(vscode-ide-companion): add --no-dependencies flag to vsce package commands
Fix release workflow failing due to npm dependency validation errors
in monorepo setup where packages are hoisted to root node_modules.
2026-01-23 09:58:08 +08:00
yiliang114
bfe451bb4a ci(vscode-ide-companion): improve release workflow and fix yaml lint errors
- Fix yaml lint errors by properly quoting conditional expressions
- Update package version step to use correct working directory
- Modify test execution to run in the correct directory (packages/vscode-ide-companion)
- Enhance version retrieval logic to use actual package version for preview releases
- Add working directory to all relevant steps for consistency
- Simplify package version update command by removing redundant workspace flag

These changes ensure the release workflow runs correctly and follows
consistent directory structure practices.
2026-01-22 21:40:09 +08:00
yiliang114
605e8709fb build(vscode): Add VSCode IDE Companion Publish Workflow 2026-01-19 15:04:05 +08:00
mingholy.lmh
7d40e1470c chore: add CODEOWNERS for SDK TypeScript package and remove legacy CLI path alias 2026-01-11 21:24:45 +08:00
mingholy.lmh
7f15256eba fix: improve release workflow 2026-01-09 18:00:01 +08:00
mingholy.lmh
c81c24d45d chore: improve release-sdk workflow 2025-12-25 10:46:57 +08:00
mingholy.lmh
4407597794 chore: skip bumping sdk version when release nightly/preview or dry run 2025-12-24 18:12:23 +08:00
mingholy.lmh
2b9140940d chore: update release-sdk.yml to sync lockfile 2025-12-24 11:43:46 +08:00
mingholy.lmh
4efdea0981 chore: revert sdk-typescript version to 0.1.0 and update release workflow 2025-12-24 11:04:33 +08:00
tanzhenxin
fc1dac9dc7 update 2025-12-22 14:32:51 +08:00
tanzhenxin
338eb9038d fix e2e workflow 2025-12-22 14:28:36 +08:00
mingholy.lmh
ba87cf63f6 chore: build and bundle CLI for SDK release 2025-12-19 15:44:04 +08:00
mingholy.lmh
00a8c6a924 chore: separate CLI and SDK integration test 2025-12-19 15:44:04 +08:00
mingholy.lmh
96d458fa8c chore: rename @qwen-code/sdk-typescript to @qwen-code/sdk 2025-12-05 21:47:26 +08:00
mingholy.lmh
2949b33a4e chore: enhance integration testing for SDK and CLI 2025-12-05 21:05:36 +08:00