Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
120 commits
Select commit Hold shift + click to select a range
76bd8f9
chore(linux-egui): advance the package revision to 103
aeoform Sep 27, 2026
b20c027
docs: add the Beta.3-103 device acceptance checklist
aeoform Sep 27, 2026
96ac68e
fix(linux): stop the fcitx5 startup barrier failing on a session-mana…
aeoform Sep 27, 2026
6baa1e0
docs: record the session-managed fcitx5 case in the acceptance checklist
aeoform Sep 27, 2026
8b97599
chore(linux-egui): advance the package revision to 104
aeoform Sep 27, 2026
ec07236
chore(linux-egui): keep clippy quiet on the declared toolchains
aeoform Sep 27, 2026
c6a2a59
fix(linux-egui): degrade the UI snapshot instead of blinking the window
aeoform Sep 27, 2026
29c48fa
feat(linux-egui): page large frontend collections
aeoform Sep 27, 2026
3700ac0
ci: align Linux egui workflow name
aeoform Sep 27, 2026
ad9f60e
fix: degrade gracefully when fcitx5 is unavailable
aeoform Sep 27, 2026
cfa12b4
chore: remove unused Linux desktop helpers
aeoform Sep 27, 2026
38b4bdd
fix: keep Linux popup panels inside X11 work area
aeoform Sep 27, 2026
ed3b000
fix: match Linux capsule styles to Tauri geometry
aeoform Sep 27, 2026
00fcf4d
fix: keep typeless capsule at the OpenLess size
aeoform Sep 27, 2026
9869466
refactor: remove Linux egui OpenGL rendering
aeoform Sep 27, 2026
2a5f529
fix(linux-egui): remove standalone startup error window
aeoform Sep 27, 2026
4932d88
fix(linux-egui): pad Siri WGPU uniform buffer
aeoform Sep 27, 2026
e2f3951
fix(linux-egui): restore transparent Siri rendering and previews
aeoform Sep 27, 2026
a3a2de0
fix(linux-egui): match Siri stage size and spectral colors
aeoform Sep 27, 2026
7e02f2a
fix(linux-egui): animate Siri preview and show thinking label
aeoform Sep 27, 2026
5fe0e3a
perf(linux-egui): stop wgpu reserving ~180 MiB of VRAM per process
aeoform Sep 27, 2026
6a646a4
fix(linux-egui): assert the Vulkan runtime deps in the release contract
aeoform Sep 27, 2026
99661c6
fix(linux-egui): keep the device descriptor test clippy-clean
aeoform Sep 27, 2026
61420b3
fix(core): prune history with the injected clock, not the wall clock
aeoform Sep 27, 2026
23275d5
Merge remote-tracking branch 'origin/beta' into feat/linux-egui-follo…
aeoform Sep 28, 2026
2387882
fix(linux-egui): bound the UI snapshot inbox, stop the 5.8 GB freeze
aeoform Sep 28, 2026
9f2a0c9
feat(linux-egui): match the Tauri AI-services page
aeoform Sep 28, 2026
402ce6e
feat(linux-egui): embedded channel editor, flush settings rail, right…
aeoform Sep 28, 2026
7d569f0
feat(linux-egui): auto-save the channel editor and add channels throu…
aeoform Sep 28, 2026
4a08a8f
fix(linux-egui): the channel editor must not hijack the settings sheet
aeoform Sep 28, 2026
2c0d28b
feat(linux-egui): 思考光点的转速跟着流式输出速率走
aeoform Sep 28, 2026
d35540e
feat(linux-egui): 撤掉转速功能,逐项对齐 Siri 胶囊的入场/收尾节奏
aeoform Sep 28, 2026
1529eba
test(linux-egui): 把「窗口不排空 + 保活快照」的 5.8 GB 事故钉成回归测试
aeoform Sep 30, 2026
a34f57c
fix(linux-egui): 首选麦克风不再把音响/HDMI 监听列进来
aeoform Sep 30, 2026
fb59afd
Merge remote-tracking branch 'origin/beta' into feat/linux-egui-follo…
aeoform Sep 30, 2026
c546be6
chore(linux-egui): 跟上 Beta.4 的版本线与文案
aeoform Sep 30, 2026
bafc10d
feat(linux-egui): 对齐 Beta.4 的确认式词库学习(胶囊里的「要记住这个词吗」卡片)
aeoform Sep 30, 2026
82e78cb
Merge remote-tracking branch 'origin/beta' into feat/linux-egui-follo…
aeoform Oct 9, 2026
6f823f3
[pi] Work in progress
aeoform Oct 10, 2026
2c9f23c
[pi] Work in progress
aeoform Oct 10, 2026
14d67a7
fix(linux-egui): wire Omni settings and correct tray submenu protocol
aeoform Oct 11, 2026
cdcf6f7
ci: reuse Linux TLS build outputs and cache Playwright browsers
aeoform Oct 11, 2026
7dd4f47
fix(ci): align UI assertions and repair cross-platform dependency bou…
aeoform Oct 11, 2026
6a68347
ci: make PR caches read-only and maintain shared caches on beta
aeoform Oct 11, 2026
4ba1ae1
fix(ci): satisfy tray activation clippy guard
aeoform Oct 11, 2026
3b410e7
fix(linux-egui): restore capsule pointer actions and sequence Siri co…
aeoform Oct 11, 2026
2b457c9
fix(linux-egui): handle native touch and smooth Siri point handoff
aeoform Oct 11, 2026
003585c
revert(linux-egui): back out the last two Siri animation changes
aeoform Oct 12, 2026
2b5e872
fix(linux-egui): rebuild Siri morph on a single timeline and fluid di…
aeoform Oct 12, 2026
ce41c48
fix(ci): keep Core SHA-256 API compatible with current beta
aeoform Oct 12, 2026
105a42a
fix(linux-egui): honor capsule repaint deadlines and FIFO pacing
aeoform Oct 12, 2026
b74d096
fix(ci): isolate keepalive RSS regression from parallel UI allocations
aeoform Oct 12, 2026
d292778
fix(linux-egui): tailor permissions and data settings to Linux sessio…
aeoform Oct 12, 2026
817ff7c
fix(linux-egui): verify keyring and network state and left-align priv…
aeoform Oct 12, 2026
3261c30
merge: sync current beta and retain Linux audio and privacy followups
aeoform Oct 14, 2026
2a13fef
fix(linux-egui): keep new provider editors open and order model and c…
aeoform Oct 14, 2026
af69c8d
fix(linux-egui): keep QA panel actions alive and pass the public-surf…
aeoform Oct 14, 2026
9bad6b3
fix(linux-egui): preserve vault identity and align channel drafts wit…
aeoform Oct 17, 2026
f4e0f01
merge: bring beta's Linux egui work into the follow-up branch
aeoform Oct 17, 2026
e45a203
fix(linux-egui): keep provider drafts and skip list loading state on …
aeoform Oct 17, 2026
9c30af3
feat(linux-egui): port the encrypted cloud sync card and reading typo…
aeoform Oct 17, 2026
1d2d661
fix(ci): refresh the Tauri lockfiles after the beta merge
aeoform Oct 17, 2026
67f2c0f
[pi] Work in progress
aeoform Oct 18, 2026
f4f6a9a
feat(linux-egui): render settings as a full page, and pin aes for the…
aeoform Oct 18, 2026
61cdb52
chore(linux-egui): bump package revision to 106
aeoform Oct 18, 2026
a175d6f
feat(linux-egui): match the new shortcuts page and settings header
aeoform Oct 18, 2026
bc28b0d
chore(linux-egui): bump package revision to 107
aeoform Oct 18, 2026
8ab2202
fix(linux-egui): translate the shortcut filters, order keycaps, inset…
aeoform Oct 18, 2026
ff9b61a
fix(linux-egui): make the shortcut filters local, box the recorder, d…
aeoform Oct 18, 2026
ed4302f
fix(linux-egui): make the filters actually click, white content pane,…
aeoform Oct 18, 2026
5ea4d82
fix(linux-egui): right-align the shortcut recorder with explicit rects
aeoform Oct 18, 2026
4b9f1b2
feat(linux-egui): click-outside cancels recording; inline recorder ev…
aeoform Oct 18, 2026
d75ed56
fix(linux-egui): stop the typography card from painting raw i18n keys
aeoform Oct 18, 2026
ec6b70c
feat(linux-egui): align the recording & input page with the Tauri client
aeoform Oct 18, 2026
2e9e758
feat(linux-egui): full 选区助手 card (voice edit, intent, edit plan, prompt)
aeoform Oct 18, 2026
067f082
chore(linux-egui): package revision 128
aeoform Oct 18, 2026
a664be1
fix(linux-egui): stop reporting a healthy fcitx5 plugin as unavailable
aeoform Oct 18, 2026
1299ffe
fix(linux-egui): stop painting raw i18n keys for cloud-sync failures
aeoform Oct 18, 2026
97371c3
fix(linux-egui): actually construct the encrypted cloud-sync service
aeoform Oct 18, 2026
a5152e5
fix(linux-egui): fill in the cloud-sync card's step/state strings
aeoform Oct 18, 2026
1f5a58c
fix(linux-egui): re-seed the channel editor fields when a config arrives
aeoform Oct 18, 2026
52d1d16
fix(linux-egui): omni test/fetch sent a channel id Core rejects; hydr…
aeoform Oct 18, 2026
2f09581
fix(linux-egui): keep the API key in the editor after it is saved
aeoform Oct 18, 2026
cd5ac88
test(linux-egui): avoid a default-endpoint literal in the hydration test
aeoform Oct 18, 2026
f878b53
fix(linux-egui): address PR1117 review findings
H-Chris233 Oct 19, 2026
40743d1
Merge beta and disambiguate Harmony base64 lock entry
H-Chris233 Oct 19, 2026
f5c3b21
fix(linux-egui): clear drag state without Default bound
H-Chris233 Oct 19, 2026
7df9ca3
test(linux-egui): consume headless popup texture deltas
H-Chris233 Oct 19, 2026
3ad5863
Merge upstream beta (2.0.2 Beta.1) and fix dependency-version drift
aeoform Oct 19, 2026
f14a8cd
chore(deps): update the whole workspace to the latest versions, inclu…
aeoform Oct 19, 2026
57e8157
chore(src-tauri): refresh the Tauri 2.11 train to its latest patches
aeoform Oct 19, 2026
5c1af68
docs(deps): full dependency audit, and register the Linux correction-…
aeoform Oct 19, 2026
7c99744
chore(deps): lift the four exact npm dev-tool pins; document every `=…
aeoform Oct 19, 2026
a1e2ade
fix(deps): keep MSRV 1.88, align sherpa-onnx with its sys crate, refr…
aeoform Oct 19, 2026
6212df5
docs(deps): record the third lock file and the sherpa-onnx 1.13.8 ali…
aeoform Oct 19, 2026
fe6ed6b
fix(deps): pin uuid to 1.26.1 in the Tauri locks so Rust 1.88 MSRV holds
aeoform Oct 19, 2026
81aa4de
chore(msrv): raise the desktop MSRV to Rust 1.89 instead of pinning o…
aeoform Oct 19, 2026
06f5128
[pi] Work in progress
aeoform Oct 19, 2026
4ba46e2
[pi] Work in progress
aeoform Oct 19, 2026
bd78ce8
chore: raise MSRV to Rust 1.99 and move the Tauri train to 2.12.4
aeoform Oct 19, 2026
f18fc39
ci: repair cache pruning, stop per-push release caches, add a Harmony…
aeoform Oct 19, 2026
fffdbfd
release: attach Linux assets automatically, add the HarmonyOS release…
aeoform Oct 19, 2026
d2da60c
release(harmony): run the HAP build on hosted runners via a pinned SD…
aeoform Oct 19, 2026
9a82db8
release(harmony): build the HAP end to end, and split release/test/un…
aeoform Oct 19, 2026
f2d021f
fix(ci): the release workflow used the runner context in a job-level env
aeoform Oct 19, 2026
279637e
fix(ci): a reusable workflow may not widen its caller's permissions
aeoform Oct 19, 2026
28aa8ce
fix(linux-egui): write SHA256SUMS as part of packaging
aeoform Oct 19, 2026
c061f45
docs: 删除一次性记录,修复失效引用,补齐当前结构
aeoform Oct 19, 2026
35e77dd
chore: 删除未引用的 chat UI 脚手架,修正三处触发范围契约
aeoform Oct 19, 2026
273cd7b
chore: 把示例样例并进 docs,把 .cargo 放到真正的工作区根
aeoform Oct 19, 2026
840a3a2
chore: 删掉空的 openless-all/dist 与 22 行的语言包同步原型
aeoform Oct 19, 2026
54595a7
chore: 合并两个脚本目录,openless-all/scripts 并入 app/scripts
aeoform Oct 19, 2026
d839c3a
ci(harmony): 说明该 job 到底验证什么,并在配置了 SDK 时真的编 HAP
aeoform Oct 19, 2026
8386b81
ci: 去掉两处重复编译,MSRV 只在其真正落后时才跑 macOS
aeoform Oct 19, 2026
f2dfa18
ci(windows): 真正编译一次 TSF 输入法
aeoform Oct 19, 2026
c8a66ec
ci(harmony): 用公开镜像里的官方命令行工具,CI 不再需要任何配置
aeoform Oct 19, 2026
f9e9ae8
fix(harmony): 工具链是 zip 不是 tar,按扩展名分派解压
aeoform Oct 19, 2026
16b593d
fix(ci): 让 harmony job 真的能跑 HAP 构建
aeoform Oct 19, 2026
3f0d678
fix(ci): HAP 校验按打包时的 numeric versionName 比对
aeoform Oct 19, 2026
5743b2c
fix(linux-egui): 校验脚本接受 SHA256SUMS-linux,并让失败有话说
aeoform Oct 19, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 25 additions & 0 deletions .github/actions/cache-npm/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
name: Cache npm from beta
description: Reuse the baseline npm download cache without creating per-PR copies.
runs:
using: composite
steps:
- name: Resolve npm cache identity
id: npm
shell: bash
run: |
echo "path=$(npm config get cache)" >> "$GITHUB_OUTPUT"
echo "arch=$(node -p process.arch)" >> "$GITHUB_OUTPUT"
# Keep setup-node's existing key and path so the current beta cache remains
# reusable. Cache lookup falls back to the PR base/default branch on a miss.
- name: Restore npm outside beta builds
if: github.ref != 'refs/heads/beta' || (github.event_name != 'push' && github.event_name != 'workflow_dispatch')
uses: actions/cache/restore@v4
with:
path: ${{ steps.npm.outputs.path }}
key: node-cache-${{ runner.os }}-${{ steps.npm.outputs.arch }}-npm-${{ hashFiles('openless-all/app/package-lock.json') }}
- name: Maintain npm cache on beta builds
if: github.ref == 'refs/heads/beta' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch')
uses: actions/cache@v4
with:
path: ${{ steps.npm.outputs.path }}
key: node-cache-${{ runner.os }}-${{ steps.npm.outputs.arch }}-npm-${{ hashFiles('openless-all/app/package-lock.json') }}
8 changes: 6 additions & 2 deletions .github/workflows/android-apk.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,14 @@ name: Android APK (debug)

on:
push:
branches:
- '**'
# Same reasoning as release-tauri: an APK per branch push cost 13-18 minutes
# and duplicated the Gradle + Rust trees that `android-check` already keeps
# warm. Tags, a weekly smoke build and explicit dispatch cover it.
tags:
- 'v*-tauri'
schedule:
# Monday 05:23 UTC: weekly APK smoke build (debug-grade, not published).
- cron: '23 5 * * 1'
workflow_dispatch:
inputs:
abis:
Expand Down
7 changes: 6 additions & 1 deletion .github/workflows/cache-maintenance.yml
Original file line number Diff line number Diff line change
Expand Up @@ -38,4 +38,9 @@ jobs:
REPO: ${{ github.repository }}
LIMIT_GB: '8'
working-directory: openless-all/app
run: bash scripts/ci-cache-usage.sh --prune --repo "$REPO" --limit-gb "$LIMIT_GB"
# `--keep-family 2` also drops superseded generations inside the branch
# scope: only the two newest keys of one (branch, key family) pair stay,
# because `restore-keys` never needs more than the previous generation.
run: >-
bash scripts/ci-cache-usage.sh
--prune --keep-family 2 --repo "$REPO" --limit-gb "$LIMIT_GB"
84 changes: 75 additions & 9 deletions .github/workflows/check-linux-egui.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: Linux egui build and backend checks
name: Linux Core, egui and deb/rpm checks

# CI and independent manual Linux builds share this deb/rpm verification path.
# No standalone push trigger: a Linux PR must show one combined Linux check.
Expand All @@ -12,9 +12,30 @@ on:
required: false
type: string
default: full
# The tag whose commit is being packaged. Set by the release entry point so
# the version assertion and the GitHub Release linkage cannot be skipped by
# dispatching the workflow on a branch instead.
release_tag:
required: false
type: string
default: ''
# Attach the verified packages to that Release. Linux used to be
# administrator-attached only; the packages now ship in the same Release as
# the desktop and Android assets.
publish:
required: false
type: boolean
default: false
checkout_ref:
required: false
type: string
default: ''

permissions:
contents: read
# No `permissions:` here on purpose: a reusable workflow inherits its caller's
# grant, and the release caller needs `contents: write` for `gh release upload`
# while CI keeps `contents: read`. Asking for more than the caller grants is
# rejected before the run starts (`startup_failure`, zero jobs); asking for less
# silently breaks the upload.

concurrency:
group: linux-egui-build-${{ github.workflow }}-${{ github.ref }}
Expand All @@ -27,16 +48,20 @@ jobs:
# A cold dependency tree costs ~18 minutes; anything past this is a hang.
timeout-minutes: 90
env:
RELEASE_TAG: ${{ github.ref_type == 'tag' && startsWith(github.ref, 'refs/tags/v') && endsWith(github.ref, '-tauri') && github.ref_name || '' }}
RELEASE_TAG: ${{ inputs.release_tag || (github.ref_type == 'tag' && startsWith(github.ref, 'refs/tags/v') && endsWith(github.ref, '-tauri') && github.ref_name || '') }}
# Debug info dominates both compile time and cache size for this host, and
# the gate below never reads it. The Linux job keeps its own cache so a
# red run still starts warm.
CARGO_PROFILE_DEV_DEBUG: 0
CARGO_PROFILE_TEST_DEBUG: 0
# The standalone TLS contract otherwise recompiles common dependencies in
# src-tauri/backend-tests/target, outside the host's restored cache.
CARGO_TARGET_DIR: ${{ github.workspace }}/openless-all/app/target
steps:
- uses: actions/checkout@v6
with:
submodules: false
ref: ${{ inputs.checkout_ref || github.ref }}

- name: Install native build and packaging dependencies
if: inputs.scope != 'none'
Expand Down Expand Up @@ -85,14 +110,17 @@ jobs:
- uses: swatinem/rust-cache@v2
if: inputs.scope != 'none'
with:
workspaces: 'openless-all/app -> target'
# Saving after a failed test step keeps the next push incremental
# instead of repeating a cold build of the whole dependency tree.
workspaces: |
openless-all/app -> target
openless-all/app/src-tauri/backend-tests -> ../../target
# Failed beta checks can still warm the shared tree. PRs never write
# their own copy, even when tests fail or dependencies change.
cache-on-failure: true
save-if: ${{ github.ref == 'refs/heads/beta' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch') }}

- name: Build and test fcitx5 plugin
if: inputs.scope != 'none'
working-directory: openless-all/scripts/linux-fcitx5-plugin
working-directory: openless-all/app/scripts/linux-fcitx5-plugin
run: |
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr
cmake --build build --parallel
Expand All @@ -109,10 +137,12 @@ jobs:
cargo clippy --locked -p openless-core --all-targets -- -D warnings
cargo test --locked -p openless-linux-egui --all-targets
cargo clippy --locked -p openless-linux-egui --all-targets -- -D warnings
cargo check --locked -p openless-linux-egui --all-targets
node scripts/linux-egui-tauri-free-contract.test.mjs
node scripts/linux-egui-release-contract.test.mjs
node scripts/ci-changed-areas.test.mjs
node scripts/ci-cache-usage.test.mjs
node scripts/ci-cache-sharing.test.mjs
node scripts/harmony-release-contract.test.mjs
node scripts/tauri-linux-free-contract.test.mjs
pwsh -NoProfile -File ./scripts/check-core-deps.ps1
pwsh -NoProfile -File ./scripts/check-core-deps.ps1 openless-linux-egui
Expand Down Expand Up @@ -156,6 +186,9 @@ jobs:
set -euo pipefail
OUTPUT=target/linux-egui-packages
( cd "$OUTPUT" && sha256sum ./*.deb ./*.rpm > SHA256SUMS )
# Release attachment name: the desktop and Android assets carry their own
# SHA256SUMS, so the Linux one is published under a distinct name.
cp "$OUTPUT/SHA256SUMS" "$OUTPUT/SHA256SUMS-linux"
bash scripts/verify-linux-egui-packages.sh

- name: Stage direct download aliases
Expand Down Expand Up @@ -184,6 +217,39 @@ jobs:
path: openless-all/app/target/linux-egui-packages/*
if-no-files-found: error

- name: Attach Linux packages to the GitHub Release
# Runs only for the release entry point, which pins the tag; PR and push
# builds never publish.
if: inputs.scope != 'none' && inputs.publish && inputs.release_tag != ''
env:
GH_TOKEN: ${{ github.token }}
RELEASE_TAG: ${{ inputs.release_tag }}
working-directory: openless-all/app
run: |
set -euo pipefail
# The desktop workflow creates the Release for this tag; wait for it
# instead of racing it, and fail loudly if it never appears.
for attempt in $(seq 1 40); do
if gh release view "$RELEASE_TAG" --json isDraft > /dev/null 2>&1; then
break
fi
if [ "$attempt" = 40 ]; then
echo "::error::release $RELEASE_TAG was not created by the desktop workflow"
exit 1
fi
sleep 15
done
output=target/linux-egui-packages
alias_dir="$RUNNER_TEMP/openless-linux-egui-direct-download"
gh release upload "$RELEASE_TAG" \
"$output"/OpenLess-Linux-egui-*.deb \
"$output"/OpenLess-Linux-egui-*.rpm \
"$output"/SHA256SUMS-linux \
"$alias_dir"/OpenLess_linux_x86_64.deb \
"$alias_dir"/OpenLess_linux_x86_64.rpm \
--clobber
echo "attached Linux assets to $RELEASE_TAG"

- name: Upload direct download aliases
if: inputs.scope != 'none' && (github.event_name != 'push' || env.RELEASE_TAG != '')
uses: actions/upload-artifact@v7
Expand Down
Loading
Loading