Skip to content

feat(linux-egui): native EGUI parity host - #1060

Merged
H-Chris233 merged 221 commits into
Open-Less:betafrom
aeoform:feat/linux-egui-tauri-parity
Sep 27, 2026
Merged

H-Chris233 merged 221 commits into
Open-Less:betafrom
aeoform:feat/linux-egui-tauri-parity

Conversation

@aeoform

@aeoform aeoform commented Sep 11, 2026

Copy link
Copy Markdown
Collaborator

Summary

  • Introduces the native Linux EGUI host and parity-oriented desktop integration.
  • Restores Linux desktop services, settings, history, marketplace, Fcitx5 hotkeys, updater, localization, and native popup flows.
  • Adds Linux release packaging and contract coverage.

Follow-up before merge

  • Review the local-model / Qwen ASR surface separately; it should not be introduced as a Linux runtime dependency without an explicit decision.
  • Rebase onto the current beta baseline and run the Linux build/package validation.

…tauri-parity

Upstream Beta.3 brings the desktop panel refresh, encrypted cloud sync and
the macOS streaming input rework. Nine conflicts were resolved:

- ci.yml: keep the reusable linux-egui-package job (it already runs the
  upstream linux-core-contract commands) and take upstream's workflow_dispatch
  guard.
- Cargo.lock: took upstream's pins; the workspace resolves cleanly.
- lib.rs: keep both the selection-polish-preview event constants and the new
  macOS less-computer positioned flag.
- QaPanel.tsx: took upstream's rewritten capsule shell and re-applied the
  润色结果 mode (state, listeners, Escape handling, render branch) on top of it,
  using the new qa-panel.css classes.
- SelectionPolishPreview.tsx: kept our deletion (the preview reuses the QA
  panel now) and verified nothing imports it.
- coordinator.rs / hotkey_loops.rs / side_aware_combo.rs / core_adapters.rs:
  took upstream's new structure and error handling, then re-applied our
  removal of the Tauri Linux host (fcitx5 plugin bridge, Linux insertion,
  side-combo rejection), which Linux no longer builds.

Verified: openless-core 1036 tests, openless-linux-egui 186+132 tests, tsc
--noEmit clean, frontend test runner green, 52 node contract tests green,
release build reports OpenLess 2.0.0-Beta.3-101.
Beta.3's encrypted-sync store called tokio::spawn directly, which needs an
ambient runtime and defeats the TaskSpawner seam the runtime gate enforces.
The store now takes the injected spawner and awaits an owned operation through
a channel, so dropping the caller still cannot cancel journalled work.

Also teach the gate which module files are test-only: files declared by
`#[cfg(test)] mod x;` (including a `#[path]` include inside a test module)
were reported as production and broke the Linux job. The gate now classifies
them transitively and reports every violation instead of stopping at the first.

Refreshes the Linux package revision to 102.
The repository holds 14 GB of caches against GitHub's 10 GB limit, so the
least recently used entries were evicted and jobs such as the Linux egui check
started from a cold dependency tree (~10 minutes). Pull requests no longer
store their own copy of the platform dependency trees; they restore the base
branch cache, which only branch pushes and tags write. The Linux job keeps its
own cache, saves it even when the test step fails, and builds without debug
info so the cache stays small and links stay fast.
Every push of a linux-egui-only change re-ran the macOS, Windows and Android
Tauri jobs plus the Rust 1.88 MSRV compile, although those builds cannot reach
that code. A 'changes' job now feeds scripts/ci-changed-areas.sh, which decides
per area whether the change set can affect it and always answers 'true' when the
diff is unreadable - a skipped platform check must be provably out of scope, not
the result of a failed lookup. Push, tag and manual runs stay fully verified.
The contract test drives the script against real git diffs in both directions.

Also bounds every job with timeout-minutes (a stuck run previously held a
runner for 24 hours) and stops publishing Linux deb/rpm artifacts on plain push
runs, where only the pull request and tag runs have consumers.

README now states the MSRV policy that CI actually enforces: 1.88 for
openless-core and src-tauri on macOS and Windows, stable for the Linux host
(which requires 1.95 because of egui).
The repository was holding 14 GB of caches against GitHub's 10 GB limit, so the
least recently used scopes were evicted silently and jobs started from a cold
dependency tree: the same cargo test step costs 148 s restored and 579 s cold.
Pull request runs no longer store their own copy of the platform trees, and this
adds the rest of the policy: ci-cache-usage.sh reports usage per scope, --prune
deletes only scopes of closed or merged pull requests (open, branch and tag
scopes stay untouched), and cache-maintenance.yml runs it weekly.

docs/ci-trigger-and-cache-policy.md records the measured sizes, the per-platform
budget, the key layout and the release pre-warm step so the duplication is not
reintroduced.
The Linux job is the most expensive single job in a Linux pull request, and a
documentation-only change set cannot reach the host build, its tests or the
deb/rpm chain. The reusable workflow now takes a 'scope' input (default 'full'),
so push, tag and release callers keep building everything while the pull request
run passes 'none' for prose-only change sets. Gated runs leave checkout and the
version assertion in place, so the job stays a well-formed no-op.
@aeoform

aeoform commented Sep 26, 2026

Copy link
Copy Markdown
Collaborator Author

@H-Chris233 能不能先审查合并一下,我现在总得解决tauri的冲突

The first run of the gating skipped the Linux job although the change set
contained code: the detect step never wrote the 'linux' output, so the reusable
workflow received an empty scope. Two fixes:

- The detect step computes every area in one loop, and each gate now skips only
  on an explicit 'false' (an empty or unreadable output runs the job); the
  Linux job's scope input defaults to a full build.
- The contract test reads ci.yml and the reusable workflow and asserts that
  every area is published as a job output, that each gate is fail-open, and that
  the reusable workflow defaults to a full build. Removing the 'linux' output
  again makes that test fail, which is the regression it should catch.
@H-Chris233 H-Chris233 self-assigned this Sep 26, 2026
@H-Chris233

Copy link
Copy Markdown
Collaborator

开始审查

@H-Chris233
H-Chris233 merged commit 913279c into Open-Less:beta Sep 27, 2026
6 checks passed
HKLHaoBin added a commit to HKLHaoBin/openless that referenced this pull request Sep 27, 2026
Resolve content conflicts:
- cloud_sync_e2ee_store: keep beta spawn_owned (TaskSpawner seam)
- linux-egui main/host_contract: take beta (Open-Less#1060 parity + capsule liveness)
- Cargo.toml: keep Android wry vendor patch; drop deleted wayland-scanner patch
@aeoform
aeoform deleted the feat/linux-egui-tauri-parity branch September 27, 2026 07:47
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants