Skip to content

Commit e692392

Browse files
chore(cli): merge main into fix/tui-system-reminder-display
main's #12605 recorded shell intent on the same message-queue and submitQuery APIs this branch extended with the producer's system-reminder decomposition. Keep both features: shellMode stays in trunk's positional slot and reminders appends after it, so the drain routes on recorded intent while the restored aggregate still carries its per-member envelope run.
2 parents 891cde3 + 663d98e commit e692392

945 files changed

Lines changed: 212882 additions & 3395 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎.github/workflows/.size-baseline‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@
5555
35955 release.yml
5656
44285 repo-hygiene.yml
5757
1079 scorecard-monthly.yml
58-
12011 sdk-java.yml
58+
16542 sdk-java.yml
5959
3886 sdk-python.yml
6060
5595 security-checks.yml
6161
6777 serve-ab-publish.yml

‎.github/workflows/ci.yml‎

Lines changed: 39 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -747,6 +747,13 @@ jobs:
747747
QWEN_SKIP_LATENCY_BUDGETS: "${{ startsWith(runner.name, 'ecs-qwen-') && '1' || '' }}"
748748
run: |-
749749
node -e "const fs = require('node:fs'); for (const key of ['HOME', 'USERPROFILE']) { const dir = process.env[key]; if (dir) fs.mkdirSync(dir, { recursive: true }); }"
750+
test_runner=()
751+
if [ "$(id -u)" -eq 0 ]; then
752+
# Permission-denial fixtures must also work on root-run ECS lanes.
753+
chown -R 0 "$GITHUB_WORKSPACE" "$HOME"
754+
echo 'Dropping DAC override capabilities for root unit tests'
755+
test_runner=(setpriv '--bounding-set=-dac_override,-dac_read_search' '--inh-caps=-dac_override,-dac_read_search')
756+
fi
750757
# ENOSPC has failed test steps mid-suite while the host looks
751758
# healthy afterwards — a transient spike, likely /tmp inodes or a
752759
# tmpfs cap. Sample the routed temp filesystem every 10s so the
@@ -777,10 +784,10 @@ jobs:
777784
retry_arg=(--retry="${VITEST_RETRY}")
778785
fi
779786
set +e
780-
npm run test:ci:workspaces -- "${retry_arg[@]}"
787+
"${test_runner[@]}" npm run test:ci:workspaces -- "${retry_arg[@]}"
781788
RC=$?
782789
if [ "$RC" -eq 0 ]; then
783-
npm run test:scripts -- "${retry_arg[@]}"
790+
"${test_runner[@]}" npm run test:scripts -- "${retry_arg[@]}"
784791
RC=$?
785792
fi
786793
set -e
@@ -1638,6 +1645,12 @@ jobs:
16381645
run: |-
16391646
corepack pnpm install --frozen-lockfile --prefer-offline --reporter=append-only
16401647
1648+
- name: 'Hosted portable process smoke'
1649+
if: "${{ needs.classify_pr.outputs.skip_ci != 'true' }}"
1650+
timeout-minutes: 5
1651+
run: |-
1652+
npm run test:integration:hosted:sandbox:none -- -t 'portable startup'
1653+
16411654
- name: 'Run tests and generate reports'
16421655
if: "${{ needs.classify_pr.outputs.skip_ci != 'true' }}"
16431656
env:
@@ -1813,6 +1826,12 @@ jobs:
18131826
run: |-
18141827
corepack pnpm install --frozen-lockfile --prefer-offline --reporter=append-only
18151828
1829+
- name: 'Hosted portable process smoke'
1830+
if: "${{ needs.classify_pr.outputs.skip_ci != 'true' }}"
1831+
timeout-minutes: 5
1832+
run: |-
1833+
npm run test:integration:hosted:sandbox:none -- -t 'portable startup'
1834+
18161835
- name: 'Run tests and generate reports'
18171836
if: "${{ needs.classify_pr.outputs.skip_ci != 'true' }}"
18181837
env:
@@ -2325,10 +2344,17 @@ jobs:
23252344
# classifier makes above. The two-tree `git diff BASE HEAD` this replaced
23262345
# is not the PR's diff: it reports everything the base gained since the
23272346
# branch point as a change on the PR's side. #8132 added
2328-
# packages/desktop-shell, so every branch older than it saw 78 phantom
2329-
# desktop-shell paths, ran this job, and failed in a checkout of
2330-
# refs/pull/N/head that has no such directory.
2331-
- name: 'Detect desktop-shell changes'
2347+
# packages/desktop-shell (since renamed to packages/desktop), so every
2348+
# branch older than it saw 78 phantom desktop paths, ran this job, and
2349+
# failed in a checkout of refs/pull/N/head that has no such directory.
2350+
# The rename cuts the other way and is not caught by the guard below: a
2351+
# pre-rename head's files sit under packages/desktop-shell, which the
2352+
# path filter no longer matches, so the job skips and reports green
2353+
# having compiled nothing. Such a branch needs a rebase to be gated
2354+
# again. The Cargo.toml guard covers the remaining case -- a head the
2355+
# filter matched because ci.yml itself changed, with no crate at the
2356+
# new path.
2357+
- name: 'Detect desktop changes'
23322358
id: 'filter'
23332359
env:
23342360
GH_TOKEN: '${{ github.token }}'
@@ -2339,7 +2365,7 @@ jobs:
23392365
# `previous_filename` too: renaming a file out of the crate changes
23402366
# it, and only the old path says so.
23412367
if files="$(gh api --paginate "repos/${GITHUB_REPOSITORY}/pulls/${PR_NUMBER}/files" --jq '.[] | .filename, (.previous_filename // empty)')"; then
2342-
if grep -Eq '^(packages/desktop-shell/|\.github/scripts/create-desktop-update-manifest\.mjs|\.github/workflows/ci\.yml|\.github/workflows/desktop-release\.yml)' <<<"${files}"; then
2368+
if grep -Eq '^(packages/desktop/|\.github/scripts/create-desktop-update-manifest\.mjs|\.github/workflows/ci\.yml|\.github/workflows/desktop-release\.yml)' <<<"${files}"; then
23432369
changed=true
23442370
else
23452371
changed=false
@@ -2351,12 +2377,12 @@ jobs:
23512377
# Whatever the filter decided, a tree without the crate cannot have
23522378
# regressed it, and cargo has no manifest to run against — the job
23532379
# would report a missing working directory as a failure of the PR.
2354-
if [[ "${changed}" == "true" && ! -f packages/desktop-shell/src-tauri/Cargo.toml ]]; then
2355-
echo "::notice::packages/desktop-shell/src-tauri is absent from this head; nothing to compile."
2380+
if [[ "${changed}" == "true" && ! -f packages/desktop/src-tauri/Cargo.toml ]]; then
2381+
echo "::notice::packages/desktop/src-tauri is absent from this head; nothing to compile."
23562382
changed=false
23572383
fi
23582384
echo "changed=${changed}" >> "${GITHUB_OUTPUT}"
2359-
echo "desktop-shell changed: ${changed}"
2385+
echo "desktop changed: ${changed}"
23602386
23612387
# cargo test links the Tauri/wry webview, so the WebKit/GTK dev headers
23622388
# must be present (mirrors the Linux build job in desktop-release.yml).
@@ -2377,14 +2403,14 @@ jobs:
23772403
- uses: 'Swatinem/rust-cache@42dc69e1aa15d09112580998cf2ef0119e2e91ae' # v2
23782404
if: "${{ steps.filter.outputs.changed == 'true' }}"
23792405
with:
2380-
workspaces: 'packages/desktop-shell/src-tauri -> target'
2406+
workspaces: 'packages/desktop/src-tauri -> target'
23812407

23822408
- name: 'Compile and test the desktop crate'
23832409
if: "${{ steps.filter.outputs.changed == 'true' }}"
2384-
working-directory: 'packages/desktop-shell'
2410+
working-directory: 'packages/desktop'
23852411
run: 'cargo test --manifest-path src-tauri/Cargo.toml'
23862412

23872413
- name: 'Run desktop release tests'
23882414
if: "${{ steps.filter.outputs.changed == 'true' && runner.os == 'Linux' }}"
2389-
working-directory: 'packages/desktop-shell'
2415+
working-directory: 'packages/desktop'
23902416
run: 'node scripts/test-release.js'

‎.github/workflows/desktop-release.yml‎

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -277,7 +277,7 @@ jobs:
277277
with:
278278
node-version: '${{ env.NODE_VERSION }}'
279279
cache: 'npm'
280-
cache-dependency-path: 'packages/desktop-shell/package-lock.json'
280+
cache-dependency-path: 'packages/desktop/package-lock.json'
281281

282282
- name: 'Configure bundled Node.js cache'
283283
id: 'node-cache-path'
@@ -299,7 +299,7 @@ jobs:
299299

300300
- uses: 'Swatinem/rust-cache@42dc69e1aa15d09112580998cf2ef0119e2e91ae' # v2
301301
with:
302-
workspaces: 'packages/desktop-shell/src-tauri -> target'
302+
workspaces: 'packages/desktop/src-tauri -> target'
303303

304304
- name: 'Install Linux dependencies'
305305
if: "runner.os == 'Linux'"
@@ -320,11 +320,11 @@ jobs:
320320
fi
321321
322322
- name: 'Install desktop dependencies'
323-
working-directory: 'packages/desktop-shell'
323+
working-directory: 'packages/desktop'
324324
run: 'npm ci'
325325

326326
- name: 'Set desktop version'
327-
working-directory: 'packages/desktop-shell'
327+
working-directory: 'packages/desktop'
328328
run: 'node scripts/version.js "${{ needs.prepare.outputs.version }}"'
329329

330330
- name: 'Require updater signing key for publishing'
@@ -444,7 +444,7 @@ jobs:
444444
}
445445
446446
- name: 'Prepare bundled runtime'
447-
working-directory: 'packages/desktop-shell'
447+
working-directory: 'packages/desktop'
448448
run: 'npm run build:runtime'
449449

450450
- uses: 'actions/cache/save@0057852bfaa89a56745cba8c7296529d2fc39830' # v4
@@ -454,16 +454,16 @@ jobs:
454454
key: 'desktop-node-v2-${{ matrix.rust_target }}-${{ env.NODE_VERSION }}-${{ inputs.dry_run }}'
455455

456456
- name: 'Run desktop tests'
457-
working-directory: 'packages/desktop-shell'
457+
working-directory: 'packages/desktop'
458458
run: 'npm test'
459459

460460
- name: 'Run desktop release tests'
461-
working-directory: 'packages/desktop-shell'
461+
working-directory: 'packages/desktop'
462462
run: 'npm run test:release'
463463

464464
- name: 'Sign bundled vendor binaries (macOS)'
465465
if: "runner.os == 'macOS' && (github.event_name == 'release' || inputs.dry_run == false)"
466-
working-directory: 'packages/desktop-shell'
466+
working-directory: 'packages/desktop'
467467
shell: 'bash'
468468
env:
469469
APPLE_SIGNING_IDENTITY: '${{ env.APPLE_SIGNING_IDENTITY }}'
@@ -516,15 +516,15 @@ jobs:
516516
517517
- name: 'Refresh bundled runtime checksums after signing (macOS)'
518518
if: "runner.os == 'macOS' && (github.event_name == 'release' || inputs.dry_run == false)"
519-
working-directory: 'packages/desktop-shell'
519+
working-directory: 'packages/desktop'
520520
run: 'node scripts/prepare-runtime.js --refresh-checksums'
521521

522522
- name: 'Verify bundled runtime'
523-
working-directory: 'packages/desktop-shell'
523+
working-directory: 'packages/desktop'
524524
run: 'npm run smoke:runtime'
525525

526526
- name: 'Build desktop installers'
527-
working-directory: 'packages/desktop-shell'
527+
working-directory: 'packages/desktop'
528528
shell: 'bash'
529529
env:
530530
DRY_RUN: "${{ github.event_name == 'release' && 'false' || inputs.dry_run }}"
@@ -546,7 +546,7 @@ jobs:
546546
shell: 'bash'
547547
run: |
548548
set -euo pipefail
549-
app="$(find packages/desktop-shell/src-tauri/target/${{ matrix.rust_target }}/release/bundle/macos -maxdepth 1 -name '*.app' -print -quit)"
549+
app="$(find packages/desktop/src-tauri/target/${{ matrix.rust_target }}/release/bundle/macos -maxdepth 1 -name '*.app' -print -quit)"
550550
codesign --verify --deep --strict --verbose=2 "$app"
551551
spctl --assess --type execute --verbose=2 "$app"
552552
entitlements="$(mktemp)"
@@ -560,7 +560,7 @@ jobs:
560560
env:
561561
WINDOWS_CONFIG: '${{ env.WINDOWS_CONFIG }}'
562562
run: |
563-
$installer = Get-ChildItem packages/desktop-shell/src-tauri/target/${{ matrix.rust_target }}/release/bundle/nsis/*.exe | Select-Object -First 1
563+
$installer = Get-ChildItem packages/desktop/src-tauri/target/${{ matrix.rust_target }}/release/bundle/nsis/*.exe | Select-Object -First 1
564564
$signature = Get-AuthenticodeSignature $installer.FullName
565565
if ($signature.Status -eq 'Valid') {
566566
Write-Output "Windows installer is Authenticode-signed."
@@ -577,18 +577,18 @@ jobs:
577577
LEGACY_ARCH: '${{ matrix.legacy_arch }}'
578578
run: |
579579
set -euo pipefail
580-
app="$(find packages/desktop-shell/src-tauri/target/${{ matrix.rust_target }}/release/bundle/macos -maxdepth 1 -name 'Qwen Code Desktop.app' -print -quit)"
580+
app="$(find packages/desktop/src-tauri/target/${{ matrix.rust_target }}/release/bundle/macos -maxdepth 1 -name 'Qwen Code Desktop.app' -print -quit)"
581581
if [ -z "$app" ]; then
582582
echo '::error::The legacy-named macOS app bundle was not produced.'
583583
exit 1
584584
fi
585-
destination="packages/desktop-shell/src-tauri/target/${{ matrix.rust_target }}/release/bundle/electron-bridge"
585+
destination="packages/desktop/src-tauri/target/${{ matrix.rust_target }}/release/bundle/electron-bridge"
586586
mkdir -p "$destination"
587587
ditto -c -k --sequesterRsrc --keepParent "$app" "$destination/Qwen-Code-Desktop-$LEGACY_ARCH.zip"
588588
589589
- name: 'Smoke packaged application'
590590
if: "runner.os == 'macOS'"
591-
working-directory: 'packages/desktop-shell'
591+
working-directory: 'packages/desktop'
592592
shell: 'bash'
593593
run: |
594594
set -euo pipefail
@@ -599,15 +599,15 @@ jobs:
599599
600600
- name: 'Smoke packaged application'
601601
if: "runner.os == 'Windows'"
602-
working-directory: 'packages/desktop-shell'
602+
working-directory: 'packages/desktop'
603603
shell: 'pwsh'
604604
run: |
605605
$executable = Get-ChildItem src-tauri/target/${{ matrix.rust_target }}/release/qwen-code-desktop.exe | Select-Object -First 1
606606
npm run smoke:packaged -- $executable.FullName
607607
608608
- name: 'Smoke packaged application'
609609
if: "runner.os == 'Linux'"
610-
working-directory: 'packages/desktop-shell'
610+
working-directory: 'packages/desktop'
611611
shell: 'bash'
612612
run: |
613613
set -euo pipefail
@@ -621,7 +621,7 @@ jobs:
621621
set -euo pipefail
622622
destination="$RUNNER_TEMP/desktop-artifacts"
623623
mkdir -p "$destination"
624-
bundle_root="packages/desktop-shell/src-tauri/target/${{ matrix.rust_target }}/release/bundle"
624+
bundle_root="packages/desktop/src-tauri/target/${{ matrix.rust_target }}/release/bundle"
625625
while IFS= read -r -d '' artifact; do
626626
name="$(basename "$artifact")"
627627
if [ "$RUNNER_OS" = 'macOS' ]; then

‎.github/workflows/e2e.yml‎

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -286,6 +286,16 @@ jobs:
286286
npm config set fetch-retries 5
287287
npm config set fetch-timeout 300000
288288
289+
# Fail fast on a saturated pool host instead of dying on ENOSPC
290+
# mid-job (#10035): run 36241138248 lost this leg with no failed step
291+
# and no test result when the runner's own worker died writing its
292+
# diag log on a full disk (#12764). ci.yml and the release lane already
293+
# gate on this script; a gate failure is a clear, retryable signal and
294+
# a re-run lands on a host with headroom.
295+
- name: 'Disk floor gate (self-hosted)'
296+
if: "${{ runner.environment == 'self-hosted' }}"
297+
run: 'bash .github/scripts/check-disk-floor.sh "${GITHUB_WORKSPACE}" "${RUNNER_TEMP:-/tmp}"'
298+
289299
- name: 'Install dependencies'
290300
env:
291301
# `npm ci` runs the `prepare` script, which builds and bundles the

‎.github/workflows/pnpm-worktree-smoke.yml‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ on:
1111
- '.pnpmfile.mjs'
1212
- 'package.json'
1313
- 'packages/*/package.json'
14-
- '!packages/desktop-shell/package.json'
14+
- '!packages/desktop/package.json'
1515
- '!packages/live-host/package.json'
1616
- '!packages/mobile-shell/package.json'
1717
- 'packages/channels/*/package.json'
@@ -35,7 +35,7 @@ on:
3535
- '.pnpmfile.mjs'
3636
- 'package.json'
3737
- 'packages/*/package.json'
38-
- '!packages/desktop-shell/package.json'
38+
- '!packages/desktop/package.json'
3939
- '!packages/live-host/package.json'
4040
- '!packages/mobile-shell/package.json'
4141
- 'packages/channels/*/package.json'

‎.github/workflows/release.yml‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -704,6 +704,7 @@ jobs:
704704
env:
705705
RELEASE_VERSION: '${{ needs.prepare.outputs.release_version }}'
706706
QWEN_STANDALONE_REQUIRE_AUDIO_CAPTURE_PREBUILD: "${{ github.repository == 'QwenLM/qwen-code' && '1' || '' }}"
707+
QWEN_STANDALONE_REQUIRE_NODE_PTY_PREBUILD: "${{ github.repository == 'QwenLM/qwen-code' && '1' || '' }}"
707708
OPENTUI_PREVIEW_RELEASE_ENABLED: "${{ vars.OPENTUI_PREVIEW_RELEASE_ENABLED == 'true' }}"
708709
run: '.release-workflow/.github/scripts/run-release-step.sh build-archives'
709710

0 commit comments

Comments
 (0)