Files

48 lines
2.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 隧道均可),属网络环境问题,非代码范围。