Skip to content

前端概览

MiQi Desktop 前端基于 Electron + React + TypeScript 构建,提供原生桌面级的 AI 助手交互体验。

技术栈

组件 技术 版本
桌面框架 Electron 35.2.1
UI 框架 React 19.1
类型系统 TypeScript 5.8
构建工具 electron-vite 3.1
CSS 框架 Tailwind CSS 4 4.x
组件库 Radix UI -
图标 Lucide React 0.510
Markdown react-markdown + remark-gfm -
数据验证 Zod 3.24
打包 electron-builder 26.0
测试 Vitest 3.1

进程架构

graph TB subgraph MP [Main Process - Node.js] BW[BrowserWindow 管理] BM[BridgeManager Python子进程] IPCH[IPC Handler 注册路由] API[系统原生 API] end subgraph PS [Preload Script] CB[contextBridge 安全API暴露] NS[window.miqi 命名空间] end subgraph RP [Renderer Process - Chromium] RC[React 19 应用] PGS[15个功能页面] TW[Tailwind CSS 4 样式] end MP --> PS --> RP

安全设计

Context Isolation

// main/index.ts
new BrowserWindow({
  webPreferences: {
    sandbox: true,
    contextIsolation: true,
    nodeIntegration: false,
    preload: path.join(__dirname, '../preload/index.js')
  }
})

Preload API

仅暴露最小必要的 API 到渲染进程:

// preload/index.ts
contextBridge.exposeInMainWorld('miqi', {
  chat: { send, abort, onProgress },
  config: { get, set },
  sessions: { list, get, delete, archive },
  providers: { list, test, update },
  memory: { facts, lessons, deleteLesson },
  skills: { list, create, upload, delete },
  files: { diff, revert, accept },
  // ...
})

导航系统

通过 NavId 类型控制页面切换:

type NavId =
  | 'chat'       // 聊天
  | 'providers'  // 提供商
  | 'channels'   // 消息通道
  | 'approvals'  // 审批
  | 'cron'       // 定时任务
  | 'memory'     // 记忆
  | 'skills'     // 技能
  | 'workspace'  // 工作区
  | 'settings'   // 设置

热重载

开发模式下,electron-vite 提供:

  • React 组件的 HMR (Hot Module Replacement)
  • Python 文件变更自动重启 Bridge 子进程
  • Electron Main 进程变更自动重启应用