Skip to content

fix(linux-egui): 修复设置崩溃与选区助手发送和收起 - #1136

Open
appergb wants to merge 3 commits into
betafrom
fix/linux-egui-ui
Open

appergb wants to merge 3 commits into
betafrom
fix/linux-egui-ui

Conversation

@appergb

@appergb appergb commented Oct 2, 2026 •

Copy link
Copy Markdown
Collaborator

摘要

打开 Linux 设置时,Siri 胶囊预览的波形端点产生 NaN,导致 egui tessellation 崩溃并退出窗口进程。选区助手空态没有 Core 会话,发送动作被额外的会话校验静默丢弃;收起后的快照又会重新显示窗口。此 PR 修复这三个用户操作链,并补齐热键显示与托盘失败日志。

输入 probe hello 后按 Enter 或点击发送,现在会由 Core 检查当前上下文并创建新轮次;调用失败在对应弹窗显示错误。再次切换收起会结束原生弹窗进程,迟到的 Idle 快照不能重新打开它。

修复 / 新增 / 改进

  • Siri 波形在分数次幂之前限制包络为非负值,避免 sin(π) 的浮点端点误差生成 NaN;设置七个分区与胶囊测试覆盖实际 tessellation 和顶点有限性。
  • QA 空态发送、录音、图钉和编辑模式使用一致的会话校验;文字提交调用 Core 的 submit_text_in_context,早期失败回传到对应面板,过期失败不覆盖新轮次。
  • QA 收起结束子进程,隐藏状态下只保留宿主快照;弹窗消息序号由宿主递增,支持同一 Core 事件之间的 UI 操作和错误反馈。共享润色预览与 QA 窗口时,隐藏请求只作用于实际发送的上下文;异步结果绑定窗口代次,防止旧空态错误显示到重开的面板。
  • Linux 快捷键标签将 RightOption 等旧名称显示为实际注册的 Right Alt / Left Alt 等按键名称。
  • 托盘初始化失败同时写入 stderr 和启动日志;同步 Linux 窗口与绘制约束的架构说明。

兼容

  • 不包含:Windows/macOS/Android 改动、凭证迁移逻辑或现有密钥修改。
  • 对现有用户 / 本地环境 / 构建流程的影响:QA 浮窗按需重建,Core 继续持有业务状态;正常关闭无托盘主窗口仍按现有策略退出应用。没有修改依赖、构建入口或 JSONL 消息字段。
  • 原 XFCE/fcitx5 设备上的全局热键与 Secret Service 凭证迁移仍需复测;本地验证使用 Ubuntu 24.04 ARM64 与 Xvfb/Xfwm4,不能替代原机验收。

测试计划

  • npm test:构建与 113 项前端/合同测试通过。
  • 基础提交 3ce107e8:cargo test -p openless-linux-egui --all-targets --jobs 1 --locked --offline,Ubuntu 24.04 ARM64 / Rust 1.98,345 项通过,4 项原生会话测试按既有设置忽略。
  • 最新提交 b5f5c022 的 云端 CI:Linux x86_64 Host 351 项通过(192 项库测试、149 项 UI/宿主二进制测试及 10 项合同测试),新增 6 项窗口上下文 / 空态关闭重开 / 旧子进程消息回归全部通过。
  • cargo test -p openless-core --test qa_contract --test qa_answer_replacement --test qa_edit_voice_lease --jobs 1 --locked --offline:36 项通过。
  • cargo fmt --all --check、git diff --check:通过。
  • 基础提交 3ce107e8 的 Xvfb/Xfwm4 原生窗口冒烟:Enter 和发送按钮从空态发出 SubmitQa;宿主结束子进程后窗口消失;新空态窗口重新映射成功。
  • 证据源码:linux-egui/src/main.rs 的 an_idle_popup_submission_reaches_core_and_displays_failure、closing_qa_drops_its_window_and_late_idle_does_not_reopen_it、late_qa_action_failures_do_not_overwrite_a_new_turn;ui/frontend/mod.rs 的 settings_modal_tessellates_after_opening_and_resizing;ui/frontend/siri_gl.rs 的胶囊绘制回归。路径均相对 openless-all/app/。
  • 云端 PR CI:Core 全部测试、Core/Host Clippy、Linux x86_64 Release 构建、fcitx5 插件构建及测试、远程输入 TLS/Unix 权限、deb/rpm 生成与校验全部通过;macOS Rust 1.88 MSRV 检查通过。

@appergb appergb left a comment

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

审查结论:已核对 b5f5c022115e33f06111a96759b1f4f3bd34bfa0 相对 beta 的完整差异,未发现尚未修复的新增代码阻塞项。

本次 review 发现并在同一 PR 修复了两类窗口时序问题:

  1. QA 与润色预览共用窗口时,无条件结束子进程会让旧上下文的 Hide 关闭当前窗口。现在保存实际发送的上下文,跨上下文的 Hide 被忽略;切回 QA 创建新的协议状态,后台 QA 更新保留当前预览。
  2. 空态关闭后重开仍是 session_id = None,单独比较 Core 会话无法识别旧窗口的异步失败。现在异步结果与排队的子进程消息都绑定窗口代次,旧错误和旧进程的退出事件不能覆盖或结束新面板。

设置崩溃修复经过实际 tessellation 回归验证;QA 文字提交继续由 Core 原子检查上下文并创建轮次;热键修改仅影响 Linux 显示标签。新增 6 项回归在云端全部通过,Linux Host 合计 351 项测试通过。

最新提交的云端 CI 已成功:Core/Host 测试与 Clippy、fcitx5 插件构建及测试、Linux x86_64 Release、deb/rpm 打包及校验、远程输入 TLS/Unix 权限、macOS Rust 1.88 MSRV。原 XFCE/fcitx5 设备与钥匙环迁移的验收边界保留在 PR 说明中。

此结论以 COMMENT review 提交;PR 的正式批准仍需独立审阅者。

@H-Chris233 H-Chris233 added area:input Input area area:ui UI area bug Something isn't working needs-review Needs review P1 High priority platform:linux Linux-specific labels Oct 13, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:input Input area area:ui UI area bug Something isn't working needs-review Needs review P1 High priority platform:linux Linux-specific

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants