Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
8 changes: 7 additions & 1 deletion docs/architecture.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# OpenLess 2.0 架构

状态:canonical,当前实现说明;更新:2026-09-30。平台范围见 [2.0 需求](2.0-requirements.md),文件定位见 [目录结构](structure.md)。
状态:canonical,当前实现说明;更新:2026-10-02。平台范围见 [2.0 需求](2.0-requirements.md),文件定位见 [目录结构](structure.md)。

## 1. 分层与工作区

Expand Down Expand Up @@ -75,6 +75,12 @@ Tauri 在 `src-tauri/src/coordinator.rs` 构造 Core,`core_adapters.rs` 组装

主窗口默认逻辑尺寸为 1300×835,允许用户调整;macOS 原生窗口按钮左侧和顶部均留出 16px,前端保留 44px 拖动区。桌面侧栏宽 226px,主内容从版本行下方开始,设置面板单独限制高度并在内部滚动。

Linux 主窗口和 QA 面板由常驻宿主拉起的独立进程承载。QA 空态没有 Core 会话,宿主与面板统一使用空态标识校验操作;文字发送通过 `submit_text_in_context` 在 Core 中检查当前上下文并创建新轮次。早期调用失败回传到对应面板,迟到的失败不能覆盖新轮次。弹窗消息使用宿主递增的序号,不依赖 Core 是否发布了新事件;显式收起 QA 结束窗口进程,隐藏时的 QA 快照只更新宿主状态,下一次打开再创建窗口。没有托盘时,正常关闭主窗口仍会退出应用,托盘注册失败的原因写入启动日志。

Linux 的 Siri 波形包络在分数次幂运算前限制为非负值,避免浮点端点误差生成 NaN。设置和胶囊绘制回归须经过 egui tessellation 并检查生成顶点的有限性,文字快照不能单独证明绘制成功。

QA 与润色预览共用浮窗时,宿主记录实际发送的上下文,只允许当前上下文的隐藏请求结束窗口;切回 QA 会创建新的窗口协议状态,后台 QA 更新不能覆盖正在显示的润色预览。异步 QA 调用结果还绑定窗口代次,空态关闭后重新打开仍没有 Core 会话 ID,旧代次的结果也不能显示到新面板。

Siri、Classic、Typeless 三种胶囊共用 Core 的 `CapsuleStyle`,窗口尺寸与点击范围在保存偏好时同步。胶囊按显示器工作区底部定位,避开未自动隐藏的 Dock/任务栏;可见期间重新检查工作区。带正文的浮窗使用不透明底色,聊天面板另叠加细噪点纹理,圆角外部仍保留透明区域。

思考动画覆盖转写、润色和原生文字写入,输入完成后才收尾。macOS 流式键盘输入由会话内串行 worker 维护原控件和累计 UTF-16 终点;每批发送后不再等待 AX 长确认,finish/cancel 在已接收写入之后等待最终屏障,再恢复输入源。AX 仅读选区范围,不读正文;采用 250 ms 无进展预算和 10 秒总预算。不可读、提交型 Return 或预算耗尽时明确降级到按键已发送语义,不重新粘贴已发送文字。目标应用的实际输入表现仍需设备验收。
Expand Down
4 changes: 3 additions & 1 deletion openless-all/app/linux-egui/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,9 @@ pub use resources::{
};
pub use runtime::{LinuxNativeRuntime, LinuxRuntimePumpResult};
pub use selection::LinuxSelectionRuntime;
pub use settings::{is_bare_modifier_binding, LinuxSettingsEffects, LinuxSettingsRuntime};
pub use settings::{
is_bare_modifier_binding, shortcut_display_label, LinuxSettingsEffects, LinuxSettingsRuntime,
};
pub use single_instance::{
LinuxLaunchIntent, SingleInstanceBroker, SingleInstanceGuard, SingleInstanceRole,
};
Expand Down
Loading
Loading