# PlantAI 桌面端(Electron 瘦客户端) 把 PlantAI 的 Vue 单页应用(`ui/`)封装成 Electron 桌面 App。**后端(Python/BFF/向量库)不打包进 App**,桌面端只是指向后端的瘦客户端。本仓库只含前端 + Electron 壳,与后端 monorepo 分离。 ## 目录结构 - 根目录 = Electron 壳(`main.js` / `server.js` / `config.js` / `preload.js` / `settings.html` / `package.json`)。 - `ui/` = 前端 Vue 3 + Vite 单页应用(全部功能)。 ## 原理 - Electron 主进程内起一个**只监听 `127.0.0.1`** 的本地 HTTP 服务(`server.js`): - 静态托管 `renderer-dist`(即 `ui/dist` 的副本); - 把 `/api` 反代到**可配置的后端地址(BFF)**。 - 前端源码 `ui/` **零改动**、后端 **CORS 零改动**:相对路径 `/api` 与 SSE 流靠同源天然可用。 - 后端各服务地址配置(`config.js`,存 `userData/config.json` 的 `services` 对象;应用内菜单「设置 → 后端服务地址…」逐项修改,保存后重载): - `bff`(8090,总入口)、`qa`(8091)、`rag`(8092)、`legacy`(8093)、`vstore`(8094)、`paper`(8097)、`bioflow`(8098)——每项都可指向本机或其它服务器。 - `PLANTAI_BFF_URL` 环境变量可覆盖 `bff`(脚本/CI 用)。 - **关于多服务路由**:前端只调用 `/api/*`,`bff`(BFF)是唯一入口;反代把 `/api` 转到 `bff`,由 BFF 内部再路由到 qa/rag/vstore/paper/bioflow。因此要把某个服务挪到别的服务器,需改 BFF 自己的配置(`sdk/app/config.py` 的 `qa_base_url` / `rag_base_url` / `rag_legacy_base_url` / `vstore_base_url` / `paper_writer_url` / `bioflow_service_url`,或用 `.env` 覆盖);桌面端设置里其余服务的地址当前仅作记录/预留。 ## 环境要求 - Node.js ≥ 18、npm。 ## 开发运行 ```bash npm install npm run build:ui # 构建 ui/ 并复制产物到 renderer-dist/ npm start # 启动 Electron 窗口 ``` ## 打包 ```bash npm run dist:linux # AppImage + deb npm run dist:win # NSIS 安装包 + portable npm run dist:mac # dmg + zip(必须在 macOS 上构建) ``` ## 跨平台注意事项 - `package.json` 的 `author` / `homepage` 为占位值,发布前请替换为真实作者与主页(deb 等安装包会写入这些元数据)。 - **macOS 安装包必须在 macOS 机器上构建**(或 macOS CI);Linux 无法产出 dmg。 - **Windows 可从 Linux 交叉打包**,个别步骤(图标/rcedit)可能依赖 wine;更稳的方式是用 CI 三平台矩阵产出。 - 应用图标:`build/icon.png`(512×512,PNG)。electron-builder 会据此自动派生 `.ico`/`.icns`;未提供时使用默认 Electron 图标。 - **后端可达性**:桌面端要能访问配置的后端地址(公网 HTTPS / VPN / SSH 隧道均可),属网络环境问题,非代码范围。