Files
zn-ai/PROJECT_OVERVIEW.md
2026-03-19 16:55:31 +08:00

93 lines
5.1 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.

# 项目概览zn-ai (智念AI)
**zn-ai** 是一款基于 Electron 和 Vue 3 构建的桌面应用程序旨在自动化处理各类酒店管理平台OTA的任务如飞猪、美团、抖音和携程/去哪儿。它结合了传统的浏览器自动化技术(通过 Playwright与 AI 能力(集成 OpenAI以提供智能辅助功能。
## 技术栈
* **核心框架**: Electron (v38), TypeScript
* **前端**: Vue 3, Vite, TailwindCSS, Element Plus
* **自动化**: Playwright (通过 CDP 连接), Node.js 子进程
* **AI 集成**: OpenAI SDK (流式对话补全)
* **构建工具**: Electron Forge, Vite
* **状态管理**: Pinia
* **持久化存储**: electron-store, dexie (IndexedDB 封装)
## 项目结构
### `src/main` (主进程)
处理应用生命周期、窗口管理、IPC 通信以及任务编排。
* **`process/`**: 包含核心业务逻辑。
* `runTaskOperationService.ts`: 管理任务操作,启动本地 Chrome并执行自动化脚本。
* `runAgentService.ts`: AI Agent 执行的占位符/入口。
* **`service/`**: 各种功能的模块化服务。
* `execute-script-service/`: 启动 Node.js 子进程以安全地运行自动化脚本。
* `config-service/`: 管理应用程序配置。
* `logger/`: 使用 `electron-log` 进行集中式日志记录。
* `window-service/`: 管理 Electron 窗口。
* **`providers/`**: AI 模型提供商。
* `OpenAIProvider.ts`: 支持流式传输的 OpenAI 对话补全实现。
* **`scripts/`**: 由主进程执行的自动化脚本。
* `fg_trace.js`: 飞猪自动化脚本。
* `mt_trace.js`: 美团自动化脚本。
* `dy_hotel_trace.js` / `dy_hot_spring_trace.js`: 抖音自动化脚本。
* `xc_trace.js`: 携程/去哪儿自动化脚本。
* `open_all_channel.js`: 在浏览器中打开所有已配置渠道的脚本。
* `common/tabs.js`: 用于连接 Chrome 并智能管理/复用标签页的工具。
* **`utils/chrome/`**: Chrome 管理助手。
* `launchLocalChrome.ts`: 启动带有 `--remote-debugging-port=9222` 参数的本地 Chrome 实例。
### `src/renderer` (渲染进程)
使用 Vue 3 构建的用户界面。
* **`views/`**: Vue 页面组件。
* `dashboard/`: 主仪表盘。
* `home/`: 聊天界面AI 交互)和任务中心。
* `task/`: 任务管理视图。
* `setting/`: 应用程序设置(账号、渠道、系统配置)。
* **`components/`**: 可复用的 UI 组件Header, SideMenus, TaskList
* **`api/`**: 后端或 IPC 通信的 API 定义。
* **`store/`**: 用于状态管理的 Pinia store用户信息等
### `src/common`
主进程和渲染进程共用的常量、类型和工具。
## 核心功能与架构
### 1. 本地 Chrome 自动化
本应用不使用 Electron 自带的浏览器进行自动化。相反,它会启动一个开启了远程调试(`--remote-debugging-port=9222`)的 **本地 Google Chrome 实例**。这使得自动化脚本能够挂载到一个“真实”的浏览器会话中,从而保留 Cookie、登录状态和扩展程序。
### 2. 任务执行流程
1. **触发**: 用户从 UI 发起任务或打开渠道。
2. **IPC**: 渲染进程向主进程发送 IPC 消息(`IPC_EVENTS.OPEN_CHANNEL``IPC_EVENTS.EXECUTE_SCRIPT`)。
3. **服务**: `runTaskOperationService` 处理该请求。
* 确保本地 Chrome 正在运行 (`launchLocalChrome`)。
* 根据渠道或任务类型决定运行哪个脚本。
4. **执行**: `executeScriptService` 启动一个独立的 Node.js 子进程(使用带有 `ELECTRON_RUN_AS_NODE``process.execPath`)来运行特定的 `.mjs` 脚本。
5. **自动化**: 脚本(例如 `fg_trace.mjs`)使用 `playwright` 连接到 `http://127.0.0.1:9222`
* 它使用 `common/tabs.js` 查找目标 URL 的现有标签页或创建一个新标签页。
* 它在页面上执行操作(导航、点击、抓取)。
### 3. 标签页管理策略
`src/main/scripts/common/tabs.js` 模块提供了智能的标签页复用功能:
* **目标匹配**: 检查现有标签页是否匹配目标 URL 或源Origin以避免打开重复的标签页。
* **空白页复用**: 如果可用,复用 `about:blank` 标签页。
* **标签页索引**: 可以针对特定的标签页索引(用于有序打开渠道)。
* **隐身模式 (Stealth)**: 注入脚本以隐藏自动化信号(`navigator.webdriver`)。
### 4. AI 集成
应用程序集成了兼容 OpenAI 的 API`OpenAIProvider` 中配置)以提供聊天功能。`home` 视图可能作为用户与 AI Agent 交互的界面,潜在用于指导任务或检索信息。
### 5. 渠道支持
应用程序支持多个 OTA 渠道,配置在 `src/renderer/constant/channel.ts` 并在 `runTaskOperationService.ts` 中映射:
* **飞猪 (fz)**
* **美团 (mt)**
* **抖音 (dy)** - 酒店和温泉类别
* **携程/去哪儿 (xc)**
## 开发命令
* `npm start`: 以开发模式启动应用 (Electron + Vite HMR)。
* `npm run package`: 打包应用程序以进行分发。
* `npm run lint`: 对代码库进行 Lint 检查。