跳转到内容

Overlay 桌面端

OpenCorvus 的 Tauri 2 桌面面板——半透明浮层接管本机 opencorvus serve。

Overlay 是 OpenCorvus 的 Tauri 2 桌面面板:半透明浮层驻留在屏幕右下角,接管本机 opencorvus serve,把 agent 工作流以图形化方式呈现给你。

技术栈

选型
桌面容器Tauri 2(Rust 宿主 + WebView2/WKWebView/WebKitGTK)
前端Solid.js 1.9 + Vite 7
状态管理Solid signals(src/store/*
构建Bun + tauri build
后端通信SSE(EventSource)+ HTTP REST

来源:packages/overlay/package.jsonsrc-tauri/Cargo.toml

启动模式

开发

Terminal window
cd packages/overlay
bun run dev # tauri dev:Vite HMR + Rust 热重载
bun run dev:vite # 仅前端 Vite(调试 UI 用)

或从根目录:

Terminal window
bun run dev:overlay # 等价于 cd packages/overlay/src-tauri && cargo run --release

打包

Terminal window
bun run build:overlay # 保留的开发构建,生成当前主机绑定的可执行文件

正式安装包(.msi.dmg.deb 等)由原生平台矩阵调用 packages/overlay/script/build.ts 生成。

核心面板

面板作用文件
Board任务总览:spec/计划/目标/评估/交付各阶段状态src/components/Board.tsx
WorkLedger左侧 Project、Mission、Task 和 Chat 台账src/components/WorkLedger.tsx
ConversationAgent 对话 / 工具调用 / 推理过程src/components/Conversation.tsx
ChatComposer输入框,支持发消息 / 附件src/components/ChatComposer.tsx
InteractionCard时间线和对话框中的权限、问题回复src/components/InteractionCard.tsx
ChangesPanel文件变更 diff 预览src/components/ChangesPanel.tsx
MemoryPanelAgent 记忆 / 上下文src/components/MemoryPanel.tsx
TracePanel执行轨迹src/components/TracePanel.tsx
LogViewer原始日志src/components/LogViewer.tsx

设置导航由 src/store/dialog.tsCONFIG_SECTIONS 提供;ConfigDialogHost.tsx 将这些标签页归入 Personal、Expert Squad、Chat、Memory & Context、Integrations、Archived 和 About。

通信机制

SSE 事件流(两条长连接)

  1. 任务详情流(选中任务时建立)

    GET http://127.0.0.1:7878/task/{taskID}/events?after={sequence}

    任务详情流是 Task 记录读取;服务端从 taskID 解析项目归属,不需要 directory

    代码:src/services/sse.ts startSSE() 用原生 EventSource 绕过 WebView2 对 fetch().body 的缓冲延迟。

  2. 全局任务列表流(应用级)

    GET http://127.0.0.1:7878/task/events

    代码:src/services/sse.ts startTaskListSSE()。这条流根据服务端盖章的 notify 元数据统一负责系统通知,并刷新任务列表徽标投影。

事件路由

src/services/events.ts routeSSEEvent() 把事件分流:

事件目的地
message.updated / part.updated / part.deltamessageStore 批处理
agent.updatedagentEvents
config.changed触发 loadConfigInfo()
任务详情流里的 task.* / goal.* / plan.*handleEventStreamEvent,debounce 刷新 Board
全局任务列表流里带 notify 的事件routeNotification();界面 toast / 系统通知的唯一入口

Rust 侧原生能力

src-tauri/src/main.rs 是唯一 Rust 源文件,注册所有 Tauri 命令:

命令用途
overlay_server_info / overlay_server_restart嵌入的 opencorvus 后端进程管理
overlay_settings_load / overlay_settings_save设置以 overlay.jsonc 持久化到 Tauri app config 目录
overlay_pick_dir / overlay_pick_files目录 / 文件选择对话框
overlay_open_url / overlay_open_path外部打开
overlay_notification_send系统通知与原生 informational 注意提示(Dock 弹跳、任务栏闪烁或桌面环境 urgency hint),聚焦后清除注意状态
overlay_toggle_devtools开发者工具切换

进程清理:Windows 用 Job Object + KILL_ON_JOB_CLOSE;Unix 用 SIGKILL 进程组——确保 overlay 退出时后端进程及子进程全部回收。

后端集成

  1. 启动时main.rs setup):定位嵌入二进制 opencorvus[.exe],找空闲端口 → opencorvus serve --hostname 127.0.0.1 --port <port>
  2. 握手:前端 initApp()overlay_server_info → 获取实际端口 → 更新 API 客户端基地址
  3. 健康探测GET /global/health,最多重试 8 次
  4. 重连:每 10 秒轮询,离线后自动重启 SSE

配置

Tauri app config 目录下的 overlay.jsonc 存 UI 偏好(主题、位置、缩放、server URL override);托盘菜单的 Restart 会重启后端并 location.reload() 前端。