Commit Graph
53 Commits
Author SHA1 Message Date
Chris233 69e566277d Merge pull request #264 from weikeyi/capsule-windows-shadow-inset
fix(capsule): center Windows pill within shadow inset
2026-05-07 00:04:25 +08:00
weikeyi 62005a6391 test(capsule): tighten host centering regex 2026-05-06 23:32:28 +08:00
weikeyi 94e9686a45 fix(capsule): restore non-windows box sizing contract 2026-05-06 23:18:16 +08:00
H-Chris233 1d04131bed Preserve strict credential gate for real regression mode
Real regression runs that explicitly pass -RequireCredentials should still fail fast when credentials cannot be confirmed. This keeps the real-ASR signal strict while leaving the default runtime smoke suite decoupled from legacy credentials.json.\n\nConstraint: default smoke suite must not depend on migrated plaintext JSON.\nRejected: Keep warning-only behavior in real regression mode | allows credential-missing runs to appear as valid real-ASR regressions.\nConfidence: high\nScope-risk: narrow\nDirective: Keep -RequireCredentials in windows-real-regression as a hard gate unless credential-vault probing is added.\nTested: git diff --check\nNot-tested: Running Windows PowerShell regression scripts in Linux environment.\nRelated: #230
2026-05-06 15:49:28 +08:00
H-Chris233 c06db84d3e Keep Windows smoke gates compatible with vault storage
Windows smoke scripts should no longer fail solely because credentials.json was migrated into the OS credential vault. The default suite now runs runtime startup without the obsolete JSON gate, and explicit legacy JSON checks warn instead of blocking vault-backed test machines.\n\nConstraint: Provider credentials now live in the OS credential vault after migration.\nRejected: Query Windows Credential Manager from smoke scripts | larger platform-specific parsing surface for a smoke gate that only needs to avoid the obsolete JSON blocker.\nConfidence: high\nScope-risk: narrow\nDirective: Do not make Windows smoke defaults depend on migrated plaintext credentials.json.\nTested: git diff --check\nTested: Python sanity check for conflict markers in edited PowerShell scripts\nNot-tested: PowerShell parser unavailable in this Linux environment.\nRelated: #230
2026-05-06 15:21:29 +08:00
H-Chris233 13ccf85a48 Store credentials in the system vault
Provider credentials should follow the platform credential-store threat model instead of continuing normal plaintext JSON writes. The vault now stores the existing multi-provider credentials payload in the OS credential store, migrates the legacy JSON file only when the vault has no entry, removes the legacy file after a successful write, and keeps raw credential IPC restricted to the main settings window.

Constraint: User explicitly chose Keychain/Credential Manager/Linux keyring for issue #230.

Constraint: Preserve the existing provider schema and active-provider routing with minimal frontend churn.

Rejected: Keep plaintext JSON as the documented product choice | user rejected this direction.

Rejected: Split every credential field into separate vault entries | larger migration surface and risks losing active provider state.

Confidence: medium

Scope-risk: moderate

Directive: Security-model and storage-strategy choices must be confirmed with the user before implementation.

Tested: cargo check --manifest-path src-tauri/Cargo.toml; npm run -s build; git diff --check; grep for stale plaintext/Keychain fallback wording.

Not-tested: Manual migration on macOS Keychain, Windows Credential Manager, or Linux desktop keyring.

Related: https://github.com/appergb/openless/issues/230
2026-05-06 14:39:40 +08:00
baiqing 3414e1ff5e chore(release-prep): 修 P2 + 清理 noop bundle.resources override
完整审查 CI 流程后发现两类问题:

1. windows-build-gnu.ps1 不 build OpenLessIme.dll 也不 export
   OPENLESS_IME_DLL_X64 / _X86 env,但 NSIS hook (nsis/openless-ime-hooks.nsh)
   PREINSTALL 用 File "$%OPENLESS_IME_DLL_X64%" / _X86 引用 dll,
   makensis 编译时 env 为空 → File 路径无效 → NSIS bundle 失败。
   补 IME dll 双平台 (x64 / Win32) build + Set-Item Env:。
   (Codex PR #280 P2 review)

2. build-mac.sh 之前为绕过 bundle.resources 占位 dll 加的
   --config '{"bundle":{"resources":{}}}' override,
   PR #280 已删除 bundle.resources,此 override 退化为 noop,删除让命令更干净。

release-tauri.yml 还有 2 处同源遗留("复制 dll 到 openless-ime-payload"
死步骤、Linux build 同样的 noop override)需要 workflow scope 才能动,
留待下一个 PR。
2026-05-06 11:20:24 +08:00
TRIP b84b0bdae3 Merge pull request #279 from appergb/fix/local-asr-release-flow
fix(windows): NSIS 安装包注册 TSF DLL + local-asr RAM 真正归还
2026-05-06 11:07:27 +08:00
baiqing 5aec74653b fix(windows): NSIS 安装包注册 OpenLess TSF DLL — 修"输入法后端:不可用"
## 现象
1.2.15 起在 Settings 页"Windows 输入法后端"出现 Pill「不可用」。`get_windows_ime_status()`
查 HKLM 注册表四件套(COM CLSID + TSF LanguageProfile + 三个 Category),缺一即报 NotInstalled。

## 根因
- MSI 通过 wix/openless-ime.wxs 的 RegisterOpenLessIme* CustomAction 跑 regsvr32 → 注册齐全。
- NSIS 包既没把 OpenLessIme.dll 打进去(wxs.componentRefs 是 MSI-only),也没 hook 跑
  regsvr32 → 用 setup.exe 安装的用户、走 updater 自动升级的存量用户全部命中"不可用"。
- 由于 updater latest-windows-x86_64.json 是 NSIS pass 写的,老 MSI 用户每次更新后也
  会被替换为没 TSF 的 NSIS 版本。

## 修复
- 加 src-tauri/installer.nsh:NSIS_HOOK_POSTINSTALL/PREUNINSTALL 跑 regsvr32 注册/反注册。
- bundle.resources map 把 OpenLessIme.dll 拷贝到 $INSTDIR\tsf-ime\OpenLessIme.dll
  (target 路径避开 wxs File 已声明的 windows-ime\x64\,避免 MSI component 路径冲突)。
- bundle.windows.nsis.installMode = "perMachine",让 NSIS 以管理员身份运行(写 HKLM 必需)。
- CI 在 build native dll 后把真 dll 复制到 src-tauri/openless-ime-payload/x64/OpenLessIme.dll;
  仓库 commit 0 字节占位文件,让本地 mac 端 tauri build 也能 resolve resources 路径。
- build-mac.sh 与 Linux build 步骤加 --config '{"bundle":{"resources":{}}}' 跳过 Windows-only
  的 dll 占位,避免污染 mac .app / Linux .deb/.rpm/.AppImage。

## Trade-off
- NSIS perMachine 升级需要 UAC,老 currentUser 用户首次升级时多一次 UAC 提示。
- MSI 包里 dll 会有两份(wxs File + bundle.resources),磁盘冗余 ~几百 KB,无功能影响。
2026-05-06 10:41:07 +08:00
millionart ec9f658a1d fix: harden Windows IME installer smoke 2026-05-05 19:31:49 +08:00
millionart 4a7a1b6b8c test: cover nsis ime edge cases 2026-05-05 18:51:29 +08:00
millionart 933e014a80 test: assert nsis uninstall ignores unregister failures 2026-05-05 18:36:17 +08:00
millionart e67755d04e fix: address Windows IME installer review feedback 2026-05-05 18:16:48 +08:00
millionart 753236dd55 fix: register Windows IME from NSIS installer 2026-05-05 17:38:28 +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
millionart 104793cf18 merge upstream main into Windows IME PR 2026-05-04 10:23:42 +08:00
millionart 2554259d80 fix: harden Windows IME review edge cases 2026-05-04 10:17:56 +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
millionart 8cb289ea8c fix: move Word caret after IME commit 2026-05-03 23:53:29 +08:00
millionart 152e38c843 fix: support async Word IME commits 2026-05-03 23:38:35 +08:00
millionart cb10e0d39c fix: register 32-bit Windows IME 2026-05-03 22:59:38 +08:00
millionart f497cd4eb5 merge Windows TSF IME support 2026-05-03 19:24:21 +08:00
millionart 865e432fb7 fix: package and register Windows TSF IME 2026-05-03 19:03:43 +08:00
baiqing 91f1c5fae8 fix(macos): keep native traffic lights visible 2026-05-03 09:56:47 +08:00
baiqing 420c5425e6 fix(macos): tune window chrome motion 2026-05-03 09:43:19 +08:00
baiqing f89a285877 fix(macos): restore native window chrome and capsule focus 2026-05-03 09:29:59 +08:00
Cooper-X-Oak 802ee653c9 fix(windows): 收紧主窗口 shell 外观契约 2026-05-02 12:12:46 +08:00
baiqing 9fd726ec87 test(windows): 对齐 capsule geometry 新契约断言 2026-05-02 12:06:22 +08:00
Cooper-X-Oak 9875e089d8 fix(windows): 收紧 capsule 几何契约 2026-05-02 12:05:09 +08:00
TRIP 68298d253c Merge pull request #138 from Cooper-X-Oak/codex/auto-update-download-acceleration
fix(tauri): 加速自动更新下载
2026-05-02 09:51:13 +08:00
TRIP 124778036d Merge pull request #145 from Cooper-X-Oak/codex/windows-cold-start-ui-pr
fix(windows): 收口 startup visible-ready 生命周期并进入评审观察
2026-05-02 09:48:13 +08:00
Cooper-X-Oak c74ea1bcb2 fix(windows): fully hide inactive capsule helper window 2026-05-02 09:46:39 +08:00
Cooper-X-Oak 283cfdf9f3 test(windows): stabilize lifecycle regression coverage 2026-05-02 05:07:40 +08:00
Cooper-X-Oak 734c430339 test(windows): automate openless lifecycle evidence 2026-05-02 04:47:37 +08:00
Cooper-X-Oak 02a3e0a225 fix(windows): delay clipboard restore after synthetic paste 2026-05-02 03:59:01 +08:00
Cooper-X-Oak 31e3f541d1 fix(windows): gate main window visibility on startup readiness 2026-05-02 03:29:49 +08:00
Cooper-X-Oak 27dbeadcfd fix: make capsule click-through outside recording 2026-05-02 00:54:37 +08:00
Cooper-X-Oak e34b3feee7 fix updater download acceleration 2026-05-01 23:47:58 +08:00
millionart c3b59329cd fix: avoid clipboard fallback for Windows voice insertion 2026-05-01 23:17:04 +08:00
millionart 300d01ebba fix: require admin for Windows IME registration 2026-05-01 21:44:26 +08:00
millionart 7225caa12b feat: add Windows IME build and registration scripts 2026-05-01 20:53:50 +08:00
Cooper-X-Oak c177634a0c test(windows): allow manual speech in real ASR smoke 2026-05-01 15:11:40 +08:00
Cooper-X-Oak f5f6a7f5b1 test(windows): align real ASR smoke hook log pattern 2026-05-01 15:04:35 +08:00
Cooper-X-Oak 6232c491fd fix(windows): guard paste by restored target 2026-05-01 14:09:00 +08:00
TRIP 769fbdffde Merge pull request #108 from Cooper-X-Oak/codex/windows-ui-fixes
fix(windows): polish capsule and custom titlebar shell
2026-05-01 08:14:09 +08:00
Cooper-X-Oak ed504c1a9f fix(windows): polish capsule and custom titlebar shell 2026-05-01 00:46:31 +08:00
Cooper-X-Oak 920a31fa0f fix(windows): 收敛插入焦点与剪贴板副作用 2026-04-30 23:23:47 +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
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
Cooper OakandCooper-X-Oak 96ff66eb80 test(windows): 增加真机回归 smoke 矩阵 (#73)
Co-authored-by: Cooper-X-Oak <Cooper-X-Oak@users.noreply.github.com>
2026-04-30 14:19:29 +08:00