桌面应用

📎 引用文件

本文引用的文件 - desktop/electron/package.json - desktop/electron/src/main.ts - desktop/electron/src/preload.ts - desktop/electron/src/backend-manager.ts - desktop/electron/src/backend-watchdog.ts - desktop/electron/src/secure-credentials.ts - desktop/electron/src/locales.ts - desktop/electron/README.md - desktop/electron/THREAT_MODEL.md - desktop/electron/scripts/prepare-electron.mjs - desktop/electron/scripts/build-signed-installer.mjs - frontend/package.json

目录

  1. 简介
  2. 项目结构
  3. 核心组件
  4. 架构总览
  5. 详细组件分析
  6. 依赖关系分析
  7. 性能与可靠性
  8. 故障排查指南
  9. 结论
  10. 附录:配置、参数与返回值

简介

本仓库包含 Vibe-Trading 的 Electron 桌面宿主层,负责启动并管理本地 Python 后端服务、渲染安全隔离的 UI、处理 IPC、凭据加密存储、日志收集、菜单与国际化,以及 Windows 打包与签名流程。该层不内置自动更新、IM 适配器或代理行为修改,重点在于进程边界安全、本地回环通信与跨平台构建产物。

项目结构

桌面端由以下关键部分组成: - Electron 主进程:生命周期、窗口、菜单、IPC、后端管理、安全策略 - Preload 脚本:向渲染进程暴露最小能力(状态、错误、重试、日志、重启后端、凭据写入) - 后端管理器:发现可执行、分配端口、启动子进程、健康检查、日志捕获、优雅关闭 - Watchdog:守护 Python 后端进程,监控父进程存活与 IPC 断开,必要时强制终止进程树 - 安全凭据存储:使用 safeStorage 加密保存允许列表中的密钥,支持迁移与注入到子进程环境 - 国际化:多语言消息与加载页方向控制 - 构建与打包:准备 Electron 运行时、校验校验和、生成 NSIS 安装包、可选 Authenticode 签名与验证

graph TB A["Electron 主进程<br/>main.ts"] --> B["Preload 桥接<br/>preload.ts"] A --> C["后端管理器<br/>backend-manager.ts"] C --> D["Watchdog<br/>backend-watchdog.ts"] D --> E["Python 后端<br/>vibe-trading serve"] A --> F["安全凭据存储<br/>secure-credentials.ts"] A --> G["国际化<br/>locales.ts"] A --> H["系统菜单/窗口/权限<br/>main.ts"] B --> I["渲染进程 UI<br/>React/Vite 构建产物"] I --> J["本地 API (127.0.0.1)<br/>带 Authorization 头"]

图表来源 - desktop/electron/src/main.ts:65-117 - desktop/electron/src/preload.ts:3-17 - desktop/electron/src/backend-manager.ts:63-146 - desktop/electron/src/backend-watchdog.ts:31-68 - desktop/electron/src/secure-credentials.ts:69-124 - desktop/electron/src/locales.ts:53-60

章节来源 - desktop/electron/README.md:11-35 - desktop/electron/package.json:9-22

核心组件

章节来源 - desktop/electron/src/main.ts:49-63 - desktop/electron/src/preload.ts:3-17 - desktop/electron/src/backend-manager.ts:52-146 - desktop/electron/src/backend-watchdog.ts:43-86 - desktop/electron/src/secure-credentials.ts:69-124 - desktop/electron/src/locales.ts:61-96

架构总览

Electron 主进程作为受信任边界,持有每启动一次的随机 API 密钥,仅对同源本地请求注入 Authorization 头;渲染进程在沙箱中运行,无法直接访问 Node 与敏感 API;后端以 loopback 绑定且需认证;watchdog 确保进程生命周期一致性与健壮性。

sequenceDiagram participant U as "用户" participant M as "主进程<br/>main.ts" participant P as "预加载<br/>preload.ts" participant R as "渲染进程<br/>UI" participant BM as "后端管理器<br/>backend-manager.ts" participant W as "Watchdog<br/>backend-watchdog.ts" participant S as "Python 后端" U->>M : 启动应用 M->>M : 初始化窗口/权限/菜单 M->>BM : start() BM->>W : spawn(watchdog, env) W->>S : spawn(vibe-trading serve) BM->>S : GET /health (Bearer 密钥) S-->>BM : 200 OK BM-->>M : 返回 URL M->>R : loadURL(本地后端地址) R->>P : 订阅状态/错误 R->>S : 发起 API 请求 (浏览器自动携带 Authorization) U->>M : 关闭窗口 M->>S : POST /system/shutdown (Bearer 密钥) M->>W : 发送 terminate-backend W->>S : 终止进程树

图表来源 - desktop/electron/src/main.ts:165-192 - desktop/electron/src/backend-manager.ts:63-146 - desktop/electron/src/backend-watchdog.ts:31-68 - desktop/electron/src/main.ts:88-98

详细组件分析

主进程与窗口安全

章节来源 - desktop/electron/src/main.ts:65-117 - desktop/electron/src/main.ts:212-238

IPC 通信模型

sequenceDiagram participant R as "渲染进程" participant PL as "Preload" participant MP as "主进程" participant CS as "SecureCredentialStore" R->>PL : restartBackend() PL->>MP : invoke("desktop : restart-backend") MP->>MP : assertMainWindowSender() MP->>MP : boot() MP-->>PL : true R->>PL : setCredential(name, value) PL->>MP : invoke("desktop : set-credential", name, value) MP->>CS : set(name, value) CS-->>MP : status() MP-->>PL : status()

图表来源 - desktop/electron/src/preload.ts:3-17 - desktop/electron/src/main.ts:119-146 - desktop/electron/src/secure-credentials.ts:106-124

章节来源 - desktop/electron/src/main.ts:119-146 - desktop/electron/src/preload.ts:3-17

文件系统访问与日志

章节来源 - desktop/electron/src/backend-manager.ts:79-85 - desktop/electron/src/secure-credentials.ts:156-165 - desktop/electron/src/main.ts:124-127

系统托盘与菜单

章节来源 - desktop/electron/src/main.ts:212-238

后端管理与进程生命周期

flowchart TD Start(["启动后端"]) --> Resolve["解析可执行路径"] Resolve --> Port{"分配端口成功?"} Port -- 否 --> ErrorPort["报错: 端口不可用"] Port -- 是 --> Spawn["spawn watchdog"] Spawn --> Health["轮询 /health"] Health --> Ready{"健康检查通过?"} Ready -- 否 --> Timeout["健康检查超时"] Ready -- 是 --> LoadUI["加载 UI 到本地 URL"] LoadUI --> Running["运行中"] Running --> Shutdown{"收到关闭?"} Shutdown -- 是 --> Graceful["POST /system/shutdown"] Graceful --> Terminate["请求 watchdog 终止"] Terminate --> KillTree["taskkill 进程树"] KillTree --> End(["结束"])

图表来源 - desktop/electron/src/backend-manager.ts:63-146 - desktop/electron/src/backend-manager.ts:221-246 - desktop/electron/src/backend-manager.ts:148-187

章节来源 - desktop/electron/src/backend-manager.ts:270-371 - desktop/electron/src/backend-manager.ts:373-421

安全机制与威胁模型

章节来源 - desktop/electron/THREAT_MODEL.md:22-79 - desktop/electron/THREAT_MODEL.md:81-160

构建、打包与签名

章节来源 - desktop/electron/scripts/prepare-electron.mjs:1-75 - desktop/electron/scripts/build-signed-installer.mjs:1-79 - desktop/electron/scripts/build-signed-installer.mjs:93-121 - desktop/electron/package.json:30-84

前端与构建

章节来源 - frontend/package.json:1-58

依赖关系分析

graph LR Main["main.ts"] --> BM["backend-manager.ts"] Main --> SC["secure-credentials.ts"] Main --> LO["locales.ts"] BM --> WD["backend-watchdog.ts"] BM --> FS["node:fs"] BM --> NET["node:net"] WD --> PROC["node:child_process"] SC --> SAFE["electron:safeStorage"]

图表来源 - desktop/electron/src/main.ts:1-21 - desktop/electron/src/backend-manager.ts:1-14 - desktop/electron/src/backend-watchdog.ts:1-12 - desktop/electron/src/secure-credentials.ts:1-5

章节来源 - desktop/electron/src/main.ts:1-21 - desktop/electron/src/backend-manager.ts:1-14 - desktop/electron/src/backend-watchdog.ts:1-12 - desktop/electron/src/secure-credentials.ts:1-5

性能与可靠性

[本节为通用指导,无需具体文件引用]

故障排查指南

章节来源 - desktop/electron/src/main.ts:206-210 - desktop/electron/src/backend-manager.ts:221-246 - desktop/electron/src/secure-credentials.ts:85-96 - desktop/electron/scripts/build-signed-installer.mjs:13-24

结论

Vibe-Trading 桌面层通过严格的进程边界、安全的 IPC 与凭据管理、健壮的后端生命周期控制,提供了可靠的本地化部署体验。其构建与签名流程确保了分发产物的完整性与可信度。尽管不包含自动更新与 IM 集成,但其设计为后续扩展预留了清晰的安全边界与模块化接口。

[本节为总结,无需具体文件引用]

附录:配置、参数与返回值

章节来源 - desktop/electron/src/main.ts:119-146 - desktop/electron/src/backend-manager.ts:63-146 - desktop/electron/src/backend-watchdog.ts:7-12 - desktop/electron/src/secure-credentials.ts:12-34 - desktop/electron/src/secure-credentials.ts:117-124