pi-ele Phase 1: Electron 骨架(主进程+托盘+preload,可复用 web/src)

- web/electron/main.cjs: BrowserWindow 加载 dist/index.html(prod)或 vite dev server
  托盘(进托盘/退出/单击恢复),关闭按钮隐藏到托盘而非退出(用户要求)
- web/electron/preload.cjs: contextBridge 暴露 gatewayUrl/versions/platform
- web/package.json: 加 main 指向 main.cjs、dev:electron / build:win / build:linux 脚本、
  electron 44.2.0 + electron-builder 26.15.3 依赖、build 配置(NSIS/AppImage/deb)
- .gitignore: /release/

验证(headless + xvfb):
- Electron 加载 Gateway WebUI 成功(title=AgentMail, body 渲染)
- Tray API 可用,BrowserWindow 正常
- prod 模式真实 main.cjs 无报错
This commit is contained in:
2026-09-07 07:46:07 +08:00
parent bf32369ebd
commit dc5b9e440f
4 changed files with 186 additions and 1 deletions

25
web/electron/preload.cjs Normal file
View File

@ -0,0 +1,25 @@
/**
* AgentMail Electron preload —— 通过 contextBridge 暴露安全 API 给渲染进程。
*
* 渲染进程是 web/src 的 React跑在 sandbox: true 下(无 nodeIntegration
* 需要桌面能力时文件选择、通知、托盘角标、SSE 转发)走这里暴露的桥。
*
* Phase 1 只暴露最小集;后续 Phase 逐步加。
*/
const { contextBridge, ipcRenderer } = require('electron');
contextBridge.exposeInMainWorld('agentmail', {
/** Gateway 基础地址(主进程 env 或默认 127.0.0.1:8180 */
gatewayUrl: () => ipcRenderer.invoke('get-gateway-url'),
/** 版本信息(渲染进程可显示在 About 页) */
versions: {
electron: process.versions.electron,
chrome: process.versions.chrome,
node: process.versions.node,
},
/** 平台标识win32 / linux / darwin */
platform: process.platform,
});