qwen-code/docs/users
qqqys a1e046eb6c
Some checks are pending
E2E Tests / E2E Test (Linux) - sandbox:docker - shard 1/3 (push) Waiting to run
E2E Tests / E2E Test (Linux) - sandbox:docker - shard 2/3 (push) Waiting to run
E2E Tests / E2E Test (Linux) - sandbox:docker - shard 3/3 (push) Waiting to run
E2E Tests / E2E Test (Linux) - sandbox:none - shard 1/3 (push) Waiting to run
E2E Tests / E2E Test (Linux) - sandbox:none - shard 2/3 (push) Waiting to run
E2E Tests / E2E Test (Linux) - sandbox:none - shard 3/3 (push) Waiting to run
E2E Tests / E2E Test - macOS - shard 1/2 (push) Waiting to run
E2E Tests / E2E Test - macOS - shard 2/2 (push) Waiting to run
E2E Tests / channel-plugin E2E (nightly) (push) Waiting to run
E2E Tests / cron-interactive E2E (nightly) (push) Waiting to run
E2E Tests / web-shell Browser Regression (push) Waiting to run
Security Checks / Dependency CVE audit (push) Waiting to run
Security Checks / Secret scan (TruffleHog) (push) Waiting to run
feat(core): add a live-session registry and qwen sessions ps (#8969)
* feat(core): add a live-session registry and `qwen sessions ps`

Records each interactive session at `~/.qwen/sessions/<pid>.json` while it
runs, so "which Qwen Code sessions are on this machine right now" is one
readdir instead of a walk over every project's transcript directory.

This is the discovery surface cross-session messaging needs
(QwenLM/qwen-code#8724), landed on its own because it is useful by itself
and changes nothing about how a session behaves.

Why not extend the existing runtime.json sidecar: it lives under
`<projectDir>/chats/<sessionId>.runtime.json` and is never unlinked, so
presence carries no liveness signal. The cost of asking it this question
is visible in `isSessionRuntimeActive` — ~150 lines of candidate-directory
guessing plus a recursive scan, and that only answers whether one *known*
session is alive. Enumerating every live session that way is that cost
times N. The two coexist: runtime.json stays the kimi-compatible "which
session is PID X serving" sidecar for external observers.

Staleness is decided by PID liveness plus a start identity of
`<boot_id>:<starttime>` read from /proc, so neither a recycled PID nor a
reboot can resurrect a dead session's record. `session-writer-lease.ts`
composes the same Linux identity and is deliberately left alone — its
token is a persisted format with takeover semantics. The new
`process-liveness` helpers replace the private copy in teamHelpers.

Registry hygiene worth calling out, each one a real failure mode rather
than defensive habit: the directory is chmod 0700 on every register
(mkdir's mode is umask-masked and does nothing for an existing
directory); records are 0600 and written `noFollow`, so a pre-planted
symlink cannot redirect a registration write; only `<digits>.json` is
ever considered a record, because a lenient prefix match would read
`2026-planning-notes.json` as PID 2026 and delete a file this code never
wrote; and a record that fails validation is skipped without being swept,
since we cannot reason about what we cannot parse.

`qwen sessions ps` prints the live sessions; `--json` emits JSON Lines.
Record fields come from other processes, so the table renders them
through `sanitizeTerminalText` — ANSI, control bytes, and bidi overrides
(CVE-2021-42572 class) all matter when DIRECTORY is the column a user
relies on to tell two sessions apart.

Registration happens after first paint: nothing on screen depends on it,
and it is an mkdir plus an fsync'd write. `/clear` and `/resume` patch the
record's session id, and a directory switch patches its cwd, but never its
name — that name is the handle a user just read out of `ps`.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* fix(core): harden the session registry per review feedback (#8969)

* fix(core): guard session registry identities per machine and boot (#8969)

* fix(core): harden session registry identity guards under boot-id and schema outages (#8969)

Boot-id unreadability now degrades the write paths (register/patch/
unregister) to accepting only tokenless records and never disables the
reader-side cross-machine guard, so a foreign machine's live record can
no longer be overwritten, merged into, unlinked or swept during an
outage. readRecord discriminates newer-schema records from torn files
and the write paths refuse them like foreign-identity records instead of
treating them as unowned. Registration on Linux retries the start token
once and refuses rather than writing an impersonable tokenless record.
The /cd refresh queues the sidecar write and the registry patch as
separate entries so a sidecar failure cannot skip the patch, and patch/
unregister reuse the record path captured at registration so a relative
QWEN_HOME resolving against a moved cwd keeps working. deriveSessionName
NFC-normalizes, keeps combining marks, and truncates by code point.

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

* fix(cli): keep the review-context manifest under the resolved-file bound (#8969)

The committed-manifest tripwire failed once main's coordinate skill
landed: the every-rule-co-matched relatedPaths expansion grew from 128
to 129 resolved files, one past the wire bound. Narrow the core-skills
rule's relatedPaths to the infrastructure files directly under
packages/core/src/skills/ — bundled skill content is self-contained,
arrives in the diff itself when it changes, and grows with every new
bundled skill, so leaving bundled/** in the glob would spend the
bound's headroom on each addition. All fail-closed bounds stay pinned.

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

* fix(core): close session registry race and outage gaps per round-4 review (#8969)

Refuse registration when the Linux PID-namespace id stays unreadable
(the record would be unreclaimable litter poisoning its PID slot),
retry once like the start token. Treat non-ENOENT read failures as
intact-foreign ("read-error") in register/unregister instead of
unowned. Require a readable matching start token before patch merges.
Re-read a record before the sweep unlinks it so a registration winning
the window is not deleted. Tolerate ENOSYS/ENOTSUP on the registry-dir
chmod. Move registry patches off the sidecar write chain onto their
own never-awaited chain so a rejecting or hanging sidecar write can
neither skip a patch nor hang /cd on the HOME write.

* fix(core): serialize session registry lifecycle

* test(cli): update session registry mocks

---------

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-authored-by: qwen-code-dev-bot <qwen-code-dev@service.alibaba.com>
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
Co-authored-by: qwen-code-dev-bot <qwen-code-dev-bot@users.noreply.github.com>
Co-authored-by: qqqys <266654365+qqqys@users.noreply.github.com>
2026-08-17 03:53:12 +00:00
..
configuration feat(review): apply the huge round reduction only when the run has a clock (#9203) 2026-08-16 03:26:59 +00:00
extension feat(extensions): support Agent Plugins v1 (#8834) 2026-08-11 19:45:11 +00:00
features feat(core): add a live-session registry and qwen sessions ps (#8969) 2026-08-17 03:53:12 +00:00
ide-integration fix(cli): replace all emoji with Unicode text symbols in TUI rendering (#5999) 2026-06-30 15:18:01 +00:00
reference fix(cli): switch completion tabs with bare arrows (#8576) 2026-08-11 02:29:11 +00:00
support fix(cli): add ui.mouseTracking setting to restore right-click and URL clicks (#8198) 2026-08-01 14:15:42 +00:00
_meta.ts feat(daemon): merge daemon-mode feature batch into main (#4490) 2026-06-12 00:34:49 +08:00
common-workflow.md docs: fix stale defaults, CLI syntax, and tool naming drift (#5158) 2026-06-15 20:06:34 +08:00
integration-github-action.md feat(web-shell): show subagent sessions in detail panel (#7380) 2026-07-22 02:31:08 +00:00
integration-jetbrains.md feat(cli): expose reasoning effort through ACP (#8526) 2026-08-11 10:32:33 +00:00
integration-vscode.md fix(core): honor NO_PROXY for model requests (#6640) 2026-07-10 10:41:04 +00:00
integration-zed.md docs(integration): use CDN URLs for images and fix formatting 2026-03-16 14:12:48 +08:00
overview.md docs: fix config/command/auth drift and surface the model-providers page (#5735) 2026-06-24 06:06:01 +08:00
quickstart.md docs: fix config/command/auth drift and surface the model-providers page (#5735) 2026-06-24 06:06:01 +08:00
qwen-serve-deploy-local.md feat: add Local Control pairing to CLI and Desktop (#8727) 2026-08-09 08:31:54 +00:00
qwen-serve.md feat(daemon): guard cross-worktree Git mutations (#8687) 2026-08-14 09:55:59 +00:00