Commit Graph
31 Commits
Author SHA1 Message Date
baiqing 0bd338a94c ci(release): split Windows tauri build into NSIS + MSI passes
Tauri 的签名 / updater artifact 是 post-bundle 钩子,单次 tauri build 内
任意 bundler 失败都会跳过 .sig 生成。MSI 必踩 ICE80,所以单 pass 永远
拿不到 NSIS 的 .exe.sig(v1.2.18 build 验证)。

拆两轮:
- Pass 1: --bundles nsis 单独跑,必须成功,产出 .exe + .exe.sig
- Pass 2: --bundles msi 单独跑,允许 ICE80 失败,Repair 用 light 重链兜底

不 bump 版本号——下一次 release 之前用 workflow_dispatch 验证 CI 全绿。
2026-05-04 23:11:41 +08:00
baiqing 429780b5e4 chore(release): 1.2.18 — Windows bundle 顺序锁 nsis,msi 让 updater 资产先落盘
历史链:
  1.2.13 ✓  无 IME wxs,MSI+NSIS 全过
  1.2.15 ✗  加 IME wxs;CI pwsh 把 JSON 引号吃掉,tauri 连 candle 都没跑
  1.2.16 ✗  shell 切 bash 后到 light 阶段,但 ICE80 触发,Repair 没 -sice
  1.2.17 ✗  Repair 加了 -sice:ICE80 修了 MSI;但 Tauri 字母序 msi→nsis 让
            MSI 先挂掉,NSIS 永远没机会跑,updater .exe(.sig) 缺失
  1.2.18    显式 --bundles nsis,msi:NSIS 先写盘产 updater 资产,MSI 再失败
            由 Repair 兜底 light.exe 重链

唯一改动:Build (Windows) 步骤两个分支都加 --bundles nsis,msi。
预留:NSIS 不读 wix.fragmentPaths,所以 .exe 暂不带 IME DLL;MSI 仍带,
后续单独 issue 跟进 NSIS IME 集成,不挂当前发版。
2026-05-04 22:56:33 +08:00
baiqing a5f1a8f16d chore(release): 1.2.17 — Windows MSI 修 light.exe ICE80 报错
x86/x64 IME DLL 都装进 INSTALLDIR\windows-ime\,32-bit 组件落在 64-bit
Directory 是 ICE80 的硬性报错。本场景路径绝对指向、不依赖 SysWOW64
重定向,按 Microsoft 文档是合法用法,给手动 light.exe 重链加 -sice:ICE80
即可放行。改动同步覆盖 CI workflow 和本地打包脚本。
2026-05-04 22:21:50 +08:00
baiqing 49210363d6 chore(release): 1.2.16 — Windows MSI 修 PowerShell 引号吞双引号 bug
1.2.15 第 4 轮 Windows job 在 wix 阶段之前就 exit 2,根因是上一版我把
Build (Windows) 整步切成 shell:pwsh 后,& npm run tauri --- build --config
'{"bundle":{"createUpdaterArtifacts":true}}' 这条命令 PowerShell 调外部
进程时把 JSON 内的双引号剥光,tauri 收到 {bundle:{createUpdaterArtifacts:true}}
直接拒绝。log 第 586 行能看到剥过引号的 commandline。

修法:
- Build (Windows) 切回 shell:bash(单引号能保留内部双引号)。set +e 抓
  exit code 写到 GITHUB_ENV,让本步不直接失败,把判断权交给下一步。
- 新增独立 step "Repair Windows MSI if Tauri failed at WiX link"(pwsh),
  仅在 tauri 非零退出且 MSI 不存在时手动从 appRoot 跑 light.exe 重链。
  本地 windows-package-msvc.ps1::Repair-TauriMsiBundle 同款手术。
2026-05-04 21:53:23 +08:00
baiqing dcfeb405bf chore(release): 1.2.15 — Windows MSI 修复 IME bundle 集成
1.2.14 三轮 release pipeline Windows job 全挂在 WiX 集成上:
  1. 没构建 IME DLL → light.exe 找不到文件
  2. 加了 build 步骤后用相对路径 src-tauri\target\... → Tauri wix bundler
     cwd 和本地脚本不同,相对路径 resolve 错位
  3. 改 $(env.OPENLESS_IME_DLL_X64) 想用绝对路径 → candle 处理 env var
     substitution 时 abort(具体原因被 Tauri 吞掉)

1.2.15 切换到本地 windows-package-msvc.ps1 已经验证可行的 Repair 思路:
  - wxs 维持字面相对路径 src-tauri\target\... (让 candle 正常吃过)
  - workflow 接住 tauri build 失败:从 appRoot (openless-all/app/) 手动跑
    light.exe 重链 main.wixobj + openless-ime.wixobj。这是 light 唯一能
    resolve 该相对路径的 cwd。
2026-05-04 20:39:22 +08:00
baiqing ac2edbe961 ci(release): wxs 用 env 绝对路径定位 IME DLL
之前 light.exe 失败的根因:openless-ime.wxs 的 Source 写的相对路径
src-tauri\target\windows-ime-msvc\... ,要从 openless-all/app/ 才能
resolve;但 Tauri 内置 wix bundler 的 candle/light cwd 是 src-tauri/,
路径错位,文件找不到 → light 失败。

本地 windows-package-msvc.ps1 通过 Repair-TauriMsiBundle 从 appRoot 手动
跑 light 兜底,CI 没有这个兜底所以挂掉。

修法:wxs Source 改用 $(env.OPENLESS_IME_DLL_X64) / _X86 绝对路径变量;
工作流的 IME build 步骤把绝对路径写到 $GITHUB_ENV。这样无论 candle/light
cwd 在哪,都能拿到正确的 DLL 路径。

本地脚本本就 set 这两个 env var(windows-package-msvc.ps1:213),改后
本地 + CI 共用同一条 absolute-path 路径,Repair fallback 不再必需。
2026-05-04 20:04:18 +08:00
baiqing f0040d0dd1 ci(release): build Windows IME DLLs before tauri bundle
openless-ime.wxs 引用 src-tauri\target\windows-ime-msvc\{x64,x86}\Release\
OpenLessIme.dll;release-tauri.yml 之前没有构建这两个 DLL 的步骤,导致
WiX light.exe 链接 MSI 时找不到文件,Windows 发版全挂。

复用本地 windows-package-msvc.ps1 同款方案:在 tauri build 之前调
windows-ime-build.ps1 编译 x64 + Win32 两个 Release DLL 到对应路径。
windows-latest runner 自带 VS Build Tools / vswhere,windows-ime-build.ps1
里的 Find-MSBuild 会自动定位。
2026-05-04 19:30:08 +08:00
H-Chris233 c8ccff0669 Avoid macOS updater asset collisions across architectures
Intel and Apple Silicon macOS jobs produced the same updater bundle filename,
which let one matrix job overwrite the other release asset and could point
both architecture manifests to a single binary. Rename macOS updater bundles
per architecture before release upload and prefer arch-specific artifact lookup
when generating updater manifests.

Constraint: Keep existing updater manifest format and release action usage
Rejected: Split macOS uploads into separate release jobs | larger workflow churn
Confidence: high
Scope-risk: narrow
Reversibility: clean
Directive: Any new macOS updater lane must keep unique asset names to preserve manifest correctness
Tested: release-tauri.yml YAML parse; diff audit for rename+manifest path alignment
Not-tested: End-to-end tagged GitHub Actions release run
2026-05-04 01:02:44 +08:00
H-Chris233 fbcddc40db Add Intel macOS artifacts to Tauri release matrix
The release workflow only produced Apple Silicon macOS packages, so Intel
users had no official GitHub Release artifact. Extend the matrix with an
x86_64 macOS lane and align artifact naming and updater-manifest paths
with per-arch outputs.

Constraint: Keep existing release pipeline shape and signing flow unchanged
Rejected: Split Intel build into separate workflow file | higher maintenance and duplicated logic
Confidence: high
Scope-risk: narrow
Reversibility: clean
Directive: Keep macOS conditions architecture-agnostic so new mac runners are not skipped accidentally
Tested: YAML syntax parse via python yaml.safe_load; workflow diff reviewed for mac gating/artifact paths
Not-tested: Full GitHub Actions matrix run on tag push
2026-05-04 00:27:02 +08:00
TRIP 7f64a1b464 fix(ci): allow PR-Agent review on external PRs 2026-05-03 09:55:17 +08:00
Chris233 280b50ea17 更新 pr-agent.yml 2026-05-02 21:16:12 +08:00
Chris233 69d7f62161 更新 pr-agent.yml 2026-05-02 20:07:26 +08:00
Chris233 4027909a8c 更新 pr-agent.yml 2026-05-02 19:23:44 +08:00
Chris233 14149207a4 更新 pr-agent.yml 2026-05-02 19:15:19 +08:00
Chris233 dbb95abab7 更新 pr-agent.yml 2026-05-02 18:55:56 +08:00
Chris233 f7c0c59408 创建 pr-agent.yml 2026-05-02 17:40:27 +08:00
Cooper-X-Oak e34b3feee7 fix updater download acceleration 2026-05-01 23:47:58 +08:00
baiqing 9b2f65fe71 fix: harden Windows hotkey release handling 2026-04-30 19:26:31 +08:00
baiqing a9c81e6e0e feat(updater): 增加应用自动更新入口 (#84)
H-Chris233: closes #33。

实现 Tauri 内置 updater 集成:
- Cargo: tauri-plugin-updater v2
- tauri.conf.json: 加 updater 配置(pubkey + endpoint 指向 GitHub Releases latest)
- capabilities/default.json: 授予 updater:default 能力
- lib.rs: 注册 updater 插件 + restart_app 命令
- src/pages/Settings.tsx + i18n: 关于区域加'检查'按钮、检查/下载/安装/重启对话框流
- 新脚本 scripts/write-updater-manifest.mjs: release 侧从 build artifact 拉签名生成 manifest
- workflow: TAURI_SIGNING_PRIVATE_KEY env + 各平台 build 时 createUpdaterArtifacts true

注意:下次 v*-tauri tag 必须配 TAURI_SIGNING_PRIVATE_KEY secret,否则 CI 硬失败。
2026-04-30 17:20:32 +08:00
TRIPandbaiqing e3f91e849c ci(release): 显式 strip macOS bundle xattr 作为 defense-in-depth (#83)
GitHub Actions 输出本来就不带 com.apple.quarantine (actions/upload-artifact
不跨机器持久化 xattr, softprops/action-gh-release 上传 binary stream 也不带),
但加这一步让 "云端 artifact 一定干净" 变成可验证的承诺, 未来 release 不会因
runner 环境变化退化.

用户下载到本地后浏览器/LaunchServices 仍会加 quarantine, 依赖 release notes
里的 xattr -cr 指引或一行安装命令处理.

Co-authored-by: baiqing <lbx12309@icloud.com>
2026-04-30 14:56:22 +08:00
Cooper OakandCooper-X-Oak 61177eafc3 ci(release): 补齐 macOS Tauri 产物发布 (#75)
Co-authored-by: Cooper-X-Oak <Cooper-X-Oak@users.noreply.github.com>
2026-04-30 14:21:54 +08:00
Cooper OakandCooper-X-Oak ff694c07c1 fix(windows): 收敛启动和开发产物路径 (#48)
* fix(windows): 收敛启动和开发产物路径

* ci(windows): 校验运行时 smoke 脚本

---------

Co-authored-by: Cooper-X-Oak <Cooper-X-Oak@users.noreply.github.com>
2026-04-30 14:21:35 +08:00
Chris233 85045c3ff4 chore(repo): 统一项目目录命名 (#39)
* Remove fragile space from active app path

The Tauri app lived under a path containing a literal space, which made CI paths and local commands easy to quote incorrectly. Rename the active tree to openless-all and update repository references so scripts, docs, and release workflows use the same space-free path.

Constraint: Preserve the existing app layout and move only the containing directory name.

Rejected: Add compatibility symlinks | would keep two app paths and leave quoting hazards in place.

Confidence: high

Scope-risk: moderate

Tested: npm run build

Tested: cargo clean && cargo check

Tested: git diff --check

Tested: grep -R for old openless -all and openless%20-all references

* Keep Windows build docs aligned with space-free path

The app directory was renamed to openless-all, but the GNU/MinGW route still described the new name as if it contained a space. Update the wording so the rationale matches the current path and keeps the helper-script guidance focused on consistent GNU setup.

Constraint: Documentation-only code review follow-up.

Confidence: high

Scope-risk: narrow

Tested: git diff --check
2026-04-30 10:44:31 +08:00
baiqing d3a8d3b815 ci: remove macOS from CI matrix, macOS DMG uploaded locally 2026-04-29 22:27:27 +08:00
TRIP 017569f5f3 Merge pull request #23 from Cooper-X-Oak/fix/windows-runtime-feedback
fix(windows): 补齐运行时反馈和平台化交互
2026-04-29 21:25:59 +08:00
Cooper-X-Oak 141303d67a ci(windows): 回填Tauri检查流程 2026-04-29 21:16:49 +08:00
H-Chris233 781ef4efa3 Clarify CI build split to prevent Linux duplicate-build regressions
The workflow logic already runs Windows and Linux builds in separate conditional steps. This note makes the intended split explicit so future edits do not accidentally reintroduce a second Linux build path.

Constraint: Keep changes minimal and scoped to existing release workflow

Rejected: Restructure build steps again in this pass | unnecessary churn for a comment-only review follow-up

Confidence: high

Scope-risk: narrow

Reversibility: clean

Directive: Keep Linux bundle generation in the dedicated Linux step only

Tested: Parsed .github/workflows/release-tauri.yml with yaml.safe_load

Not-tested: Full GitHub Actions run after this comment-only change
2026-04-29 19:41:12 +08:00
Chris233 bd4c3435ec Merge branch 'appergb:main' into main 2026-04-29 19:05:08 +08:00
H-Chris233 3e2e8e5139 Enable Linux release artifacts alongside existing macOS/Windows pipeline
The repository already had a single cross-platform release workflow for macOS and Windows.
This change extends the same workflow matrix with Ubuntu so Linux packaging runs in the
same release lane and publishes deb/rpm/AppImage artifacts consistently.

Constraint: Keep existing macOS and Windows release behavior unchanged
Constraint: User requested minimum-scope change in existing workflow rather than new pipeline
Rejected: Add a separate Linux workflow file | would duplicate release logic and increase drift risk
Confidence: high
Scope-risk: narrow
Reversibility: clean
Directive: Keep Linux package paths aligned with Tauri bundle output dirs when upgrading Tauri
Tested: YAML parse check for .github/workflows/release-tauri.yml
Not-tested: End-to-end GitHub Actions run in remote CI after push
2026-04-29 18:45:47 +08:00
baiqing 7acb3b89d4 fix(mac): restore microphone permission request 2026-04-29 17:38:04 +08:00
baiqing cf9afa8057 feat: 跨平台 Tauri 2 重写 + GitHub Actions 发版流水线
整套新代码放在 openless-all/ 目录下,与原 Swift 项目并行不冲突。

代码结构:
- openless -all/app/src/             React + TS UI(参考 design_handoff_openless 实现)
- openless -all/app/src-tauri/       Rust 后端(8 模块,与 Swift 库一一对应)
- openless -all/app/scripts/         构建脚本(macOS Info.plist 后注入 + ad-hoc 重签)
- .github/workflows/release-tauri.yml  推 v*-tauri tag 触发 macOS+Windows 矩阵构建

后端模块:
- hotkey:   macOS CGEventTap 原生 FFI / 其他 rdev;自动重试,Accessibility 一授权立即接管
- recorder: cpal 16kHz Int16 PCM
- asr:      Volcengine SAUC bigmodel WebSocket(二进制帧 + 热词 context 注入)
- polish:   OpenAI 兼容 Chat Completions(中文 prompt 一字不改自 Swift)
- insertion: macOS CGEventPost 原生 FFI 模拟 Cmd+V / 其他 enigo;不再用 enigo on macOS(TSM 主线程断言坑)
- persistence: ~/.openless/credentials.json v1 schema(同 Swift dev 路径,不走 Keychain 避免 ad-hoc 签名换 hash 反复弹框)
- coordinator: 状态机(idle/listening/processing),emit capsule:state 给胶囊窗口
- permissions: AVAudioApplication.recordPermission(同 Swift,与 cpal/AVAudioEngine 共享权限轨道)

UI:
- FloatingShell 主窗 + 5 tab(概览/历史/词汇表/风格/设置)
- Capsule 浮动胶囊(176×42 浅色磨砂 + 5 根 audio bars envelope,与 Swift CapsuleView 同源)
- 菜单栏托盘(LSUIElement = true,无 Dock 图标,关红按钮 = 隐藏)
- Onboarding 首次运行权限引导(辅助功能 + 麦克风)

跨平台已知限制:
- macOS:ad-hoc 签名,首次启动需要"右键 → 打开"或在 Gatekeeper 弹窗里点"仍要打开"
- Windows:无证书,SmartScreen 会警告
2026-04-29 16:51:13 +08:00