Appearance
Automa Agent 架构文档
本文描述 Automa Agent 的进程模型、模块分层、技术栈与核心数据流,供架构评审与二次开发参考。
一、项目概述
Automa Agent 是基于 Electron + Vue 3 + TypeScript + Rust 的桌面自动化应用,面向网页与桌面场景的数据采集、流程编排与无人值守执行。
核心特点
- 脚本驱动:脚本可直接调用页面能力或接口,灵活组合业务逻辑
- 流程隔离:每个流程在独立浏览器窗口中执行,互不干扰
- 并发执行:支持多工作流同时调度运行
- 可视化编排:基于 Vue Flow 的拖拽式工作流设计器
- AI 工作台:多模型对话、BizApi 自动执行、钉钉/飞书通道、截图分析与语音输入
二、技术栈
| 层级 | 技术 |
|---|---|
| 框架 | Electron 30 + Vue 3 + TypeScript + Rust |
| 构建工具 | Vite 6 + electron-vite + napi-rs |
| UI 组件库 | @erp/biz (业务组件) + @erp/common (基础组件) |
| 工作流设计 | @vue-flow/core |
| 数据库 | SQLite (better-sqlite3,默认主库) + TypeORM;托管数据源支持 SQLite / MySQL / PostgreSQL |
| 原生模块 | Rust (desktop-selection-native) |
| 图像处理 | Sharp + OpenCV + Tesseract.js (OCR) |
| HTTP 服务 | Fastify(REST / WebSocket / BizApi) |
| 定时任务 | node-cron + CronManager(工作流 Cron + AI 定时器) |
| AI 能力 | Ollama / DeepSeek / Cursor / 自定义 OpenAI 兼容;钉钉 / 飞书通道;BizApi 自动执行循环 |
| IM SDK | @larksuiteoapi/node-sdk(飞书) |
三、整体架构图
Loading diagram…
四、目录结构
text
src/
├── automa/ # 自动化核心类型定义
│ ├── types/
│ │ ├── command-types.ts # 命令分类定义(面板显示)
│ │ ├── node-config.ts # 节点配置(枚举、UI、表单)
│ │ ├── node-types.ts # 节点类型定义
│ │ └── engine-types.ts # 引擎类型定义
│ ├── content/ # 内容脚本
│ ├── utils/ # 工具函数
│ └── workflowEngine/ # 工作流引擎(旧版)
│
├── core/ # 核心框架
│ └── summer/ # IoC 容器框架
│ ├── context/ # 上下文管理
│ ├── services/ # 服务注册
│ ├── widgets/ # 组件管理
│ └── Summer.ts # 核心类
│
├── main/ # 主进程
│ ├── index.ts # 入口文件
│ ├── platform/ # 平台层
│ │ ├── PlatformApp.ts # 应用入口
│ │ ├── MainWindow.ts # 主窗口
│ │ └── ThirdWindowFactory.ts # 第三方窗口
│ ├── controller/ # 控制器(IPC / BizApi)
│ │ ├── MainApiController.ts
│ │ ├── NativeApiController.ts
│ │ ├── WorkflowApiController.ts
│ │ ├── WorkflowExecutionController.ts
│ │ ├── WorkflowWorkerController.ts
│ │ ├── DataSourceApiController.ts
│ │ ├── CronController.ts
│ │ └── AiApiController.ts # AI 工作台 BizApi
│ ├── ai/ # AI 模块
│ │ ├── beans/ # Session / Channel / Provider / Timer Store
│ │ ├── channel/ # 钉钉 / 飞书通道适配器
│ │ ├── providers/ # Ollama / DeepSeek / Cursor / 自定义 OpenAI
│ │ ├── autoexec/ # BizApi 自动执行循环
│ │ ├── entity/ # AI TypeORM 实体
│ │ └── prompt/ # 内置提示词与生成文档
│ ├── engine/ # 工作流引擎
│ │ ├── WorkflowEngine.ts # 引擎核心
│ │ ├── BaseNodeExecutor.ts # 执行器基类
│ │ ├── Logger.ts # 日志管理
│ │ └── executors/ # 80+ 节点执行器
│ ├── beans/ # Bean 组件
│ │ ├── Db.ts # 数据库
│ │ ├── DesktopNative.ts # 原生功能封装
│ │ ├── CronManager.ts # 定时任务
│ │ ├── AppServer.ts # Fastify HTTP / BizApi
│ │ ├── MouseManager.ts # 鼠标管理
│ │ └── SmartImageFinder.ts # 图像查找
│ ├── db/ # 数据库
│ │ ├── entity/ # 工作流 / 数据源 / Cron 实体(extends BaseEntity)
│ │ ├── services/ # GlobalSubscriber / PaginationService
│ │ ├── dataSourceSchemaBuilder.ts # 托管表 EntitySchema 动态构建
│ │ ├── managedSchemaDiff.ts # 元数据 vs 物理 Schema 差异
│ │ └── managedTableQuery.ts # 动态表字段白名单查询
│ └── service/ # 业务服务
│ ├── WorkflowExecutionService.ts
│ ├── WorkflowWorkerService.ts
│ ├── DataSourceService.ts
│ ├── AiChannelTalkStreamService.ts
│ ├── AiMessageAutoexecService.ts
│ └── AiSingleExecutorRunner.ts
│
├── preload/ # 预加载脚本
│ ├── index.ts # 主预加载
│ ├── base.ts # 基础 API
│ └── elementSelector.ts # 元素选择器
│
├── renderer/ # 渲染进程
│ ├── pages/
│ │ └── workflow/ # 工作流设计器
│ │ ├── WorkflowDesigner.vue # 设计器主组件
│ │ ├── nodes/ # 57 个节点 UI 组件
│ │ ├── components/ # 通用组件
│ │ │ └── ConfigPanel/ # 配置面板
│ │ ├── composables/ # 组合式函数
│ │ └── edges/ # 连线组件
│ ├── common/ # 公共模块
│ │ └── apiService.ts # API 服务
│ └── src/ # 应用源码
│ └── views/
│ └── AiDashboardPage/ # AI 工作台(会话 / 通道 / 自动执行)
│
└── native/ # Rust 原生模块
└── desktop_selection/ # 桌面选择功能五、核心模块详解
5.1 工作流引擎 (WorkflowEngine)
工作流引擎是系统的核心,负责解析和执行工作流定义。
Loading diagram…
核心特性:
- 从 Trigger 节点启动工作流
- 支持执行状态反写到数据库
- 支持暂停、继续、停止操作
- 支持变量同步和持久化
5.2 节点执行器 (NodeExecutor)
所有节点执行器继承自 BaseNodeExecutor,提供统一的执行接口。
typescript
export abstract class BaseNodeExecutor implements INodeExecutor {
abstract type: NodeKey;
// 依赖注入
@Autowired() protected readonly desktopNative: DesktopNative;
@Autowired() protected readonly db: Db;
// 抽象方法 - 子类实现
abstract execute(node: NodeDefinition, context: ExecutionContext): Promise<NodeExecutionResult>;
// 工具方法
protected success(output?, nextNodeId?): NodeExecutionResult;
protected failure(error: string): NodeExecutionResult;
protected getConfig<T>(node, key, defaultValue?): T;
protected async getVariable<T>(context, name, defaultValue?): Promise<T>;
protected async setVariable(context, name, value): Promise<void>;
protected resolveExpression(expression, context): string;
}已实现的执行器(80+):
| 分类 | 执行器 |
|---|---|
| 鼠标键盘 | MouseClickExecutor, MouseMoveExecutor, MouseScrollExecutor, KeyboardInputExecutor |
| 桌面自动化 | OpenAppExecutor, CloseAppExecutor, GetWindowListExecutor |
| 窗口自动化 | OpenBrowserWindowExecutor, CloseBrowserWindowExecutor, ExecuteInWindowExecutor, WindowFormsExecutor, WindowHttpExecutor, WindowCookieExecutor 等 |
| Android (ADB) | AndroidTapExecutor, AndroidSwipeExecutor, AndroidScreenshotExecutor, AndroidAdbShellExecutor, AndroidUsb* 等 |
| Excel | ExcelOpenExecutor, ExcelReadExecutor, ExcelWriteExecutor, ExcelSaveExecutor, ExcelCloseExecutor, ExcelBatchReadExecutor, ExcelImportTableExecutor |
| 流程控制 | LoopExecutor, ConditionExecutor, SwitchExecutor, LogExecutor, TerminateWorkflowExecutor |
| 等待 | DelayExecutor, WaitElementExecutor, WaitWindowExecutor, WaitFileExecutor |
| 数据处理 | SetVarExecutor, JsonParseExecutor, RegexExecutor, StringOpExecutor, DateTimeExecutor, ArrayOpExecutor, TableOpExecutor, Base64Encode/DecodeExecutor |
| 截图识别 | ScreenshotExecutor, FindImageExecutor, OcrExecutor |
| 剪贴板 | ClipboardSetExecutor, ClipboardGetTextExecutor, ClipboardClearExecutor, ClipboardAddFilesExecutor |
| 文件操作 | ReadFileExecutor, WriteFileExecutor, CopyFileExecutor, DeleteFileExecutor, MoveFileExecutor, RenameFileExecutor, ZipFileExecutor, UnzipFileExecutor |
| 网络 / 集成 | HttpGetExecutor, HttpPostExecutor, DownloadFileExecutor, DingtalkNotifyExecutor, GitOpExecutor, ShellExecExecutor |
| AI | AiProviderExecutor |
5.3 IoC 容器 (Summer)
项目使用自研的 IoC 容器框架 Summer,提供依赖注入和生命周期管理。
typescript
// 定义 Bean
@Bean()
export class DesktopNative {
@PreConstruct()
init() { /* 初始化 */ }
}
// 定义应用
@Application()
export class PlatformApp extends Summer<Options, Params> {
@Autowired()
private readonly db: Db;
@Autowired()
private readonly cronManager: CronManager;
}核心装饰器:
@Application()- 标记应用入口@Bean()- 标记为 Bean 组件@Autowired()- 自动注入依赖@PreConstruct()- 构造后初始化
5.4 原生功能 (DesktopNative)
封装 Rust 原生模块,提供桌面自动化能力。
Loading diagram…
主要功能:
- 屏幕截图(全屏/区域)
- 鼠标控制(移动/点击/滚动)
- 键盘输入(文本/快捷键)
- 元素定位(Accessibility API)
- 图像定位
- 桌面窗口管理
5.5 数据库设计
数据库层基于 TypeORM + better-sqlite3(默认),通过 Db Bean 统一管理。设计分为 主元数据库、托管业务数据源、遗留 per-window 数据源 三层;不使用迁移文件,依赖 TypeORM synchronize 与托管 schema 显式同步。
5.5.1 三层存储架构
Loading diagram…
| 层级 | 物理位置 | 用途 |
|---|---|---|
| 主元数据库 | {configDir}/erp_automa.db | 23 张固定 TypeORM 实体表,存工作流、AI、数据源元数据、Cron 等 |
| 托管数据源 | {configDir}/db/managed/{dataSourceId}.db 或远程 MySQL/PG | 用户自定义业务表;表结构定义存主库 data_source_*,运行时按元数据建表 |
| 遗留 per-window | {configDir}/db/{key}.db | IPC execDsCommand 路径保留;当前代码中 createDataSource() 无调用方 |
configDir 路径:
- 开发环境:
{项目根}/config/ - 生产环境:
{Electron userData}/config/
可通过 config/app.json 的 dataSource 段覆盖主库驱动(MySQL/PostgreSQL)与 partition 分域。
5.5.2 初始化与 Schema 策略
Loading diagram…
| 场景 | synchronize 策略 |
|---|---|
| 主库 SQLite(默认) | 开发环境始终 true;生产首次启动(库文件不存在)自动建表,之后默认 false |
| 主库 MySQL/PostgreSQL | 默认 false;若显式开启会警告可能删列/改类型 |
| 托管数据源 | 连接时 synchronize: false;需通过 applyManagedSchemaSync() 显式同步 |
实体自动发现:import.meta.glob('../db/entity/*Entity.ts') + AI 模块显式注册(src/main/ai/entity/index.ts),避免打包后类引用不一致。
5.5.3 公共基类 BaseEntity
所有固定实体继承 BaseEntity(src/main/db/entity/BaseEntity.ts):
| 列 | 类型 | 说明 |
|---|---|---|
id | integer PK | 自增主键 |
created / updated | datetime | TypeORM 自动维护 |
partition / tenant / region | varchar(64) nullable | 多域隔离;GlobalSubscriber 写入时从 appConfig.dataSource.partition 注入 |
createdBy / updatedBy | varchar(64) nullable | 操作人 |
类级索引:@Index(['partition', 'tenant', 'region'])。
关系建模约定:固定表之间不使用 TypeORM
@ManyToOne/@JoinColumn,关联均通过业务 ID 字符串或整数逻辑引用(如workflowId、sessionId、dataSourceId)。例外:FolderEntity使用@Tree('materialized-path')树形结构。
5.5.4 主库固定表一览(23 张)
| 分组 | 表名 | 实体类 | 职责 |
|---|---|---|---|
| 工作流 | workflow | WorkflowEntity | 画布 JSON、Cron、启用状态 |
workflow_worker | WorkflowWorkerEntity | 执行器实例、进度、上下文 | |
workflow-variables | WorkflowVariablesEntity | 工作流级变量 | |
workflow-cookie | WorkflowCookieEntity | 工作流 Cookie 隔离 | |
workflow-statistics | WorkflowStatisticsEntity | 单次运行统计快照 | |
| 日志 | workflow-log | WorkflowLogEntity | 节点级执行日志 |
log-data | LogDataEntity | 节点输出数据 | |
| 资源 | folder | FolderEntity | 树形文件夹(materialized-path) |
captured_element | CapturedElementEntity | 捕获元素库 | |
screenshot | ScreenshotEntity | 截图库 | |
| 调度 | cron_task | CronTaskEntity | 统一定时任务注册表 |
| 数据源元数据 | data_source | DataSourceEntity | 托管数据源连接配置 |
data_source_table | DataSourceTableEntity | 逻辑表定义 | |
data_source_table_column | DataSourceTableColumnEntity | 列定义 + 表单 UI | |
data_source_table_index | DataSourceTableIndexEntity | 索引定义 | |
data_source_table_index_column | DataSourceTableIndexColumnEntity | 索引列与排序 | |
| AI | ai_session | AiSessionEntity | 对话会话 |
ai_message | AiMessageEntity | 会话消息 | |
ai_prompt | AiPromptEntity | 内置/自定义提示词 | |
ai_channel | AiChannelEntity | 钉钉/飞书通道 | |
ai_custom_provider | AiCustomProviderEntity | 自定义 OpenAI 兼容提供商 | |
ai_provider_credential | AiProviderCredentialEntity | 提供商凭据 | |
ai_message_autoexec_rule | AiMessageAutoexecRuleEntity | 消息自动执行规则 |
5.5.5 工作流域 ER 关系
Loading diagram…
WorkflowEntity 核心字段: name、host、icon、preload/preloadCode、cron/cronStatus、status、workflowId(业务键)、json(画布)、enabled、isDelete。
WorkflowWorkerEntity 核心字段: workerId(唯一)、type(LOCAL/REMOTE/BROWSER/DESKTOP)、status、progress/executedNodes/totalNodes、config/context/input/output(JSON 字符串)、重试与超时配置、enabled、isDelete。
5.5.6 调度与资源 ER 关系
Loading diagram…
CronTaskEntity 为全应用统一定时注册表,CronManager 按 bizType 调度:
| bizType | 说明 |
|---|---|
workflow | 窗口流程定时器(同步 workflow.cron) |
worker_trigger | 画布触发器 / 用户手动新建执行器定时 |
cleanup_workflow_log | 清理工作流日志 |
ai_bizapi | 定时执行 BizApi |
ai_timer | AI 一次性延迟任务 |
唯一约束:[bizId, bizType]。
5.5.7 AI 模块 ER 关系
Loading diagram…
ai_message 索引:[sessionId, seq],保证同会话消息顺序。
5.5.8 托管数据源(元数据 + 动态表)
数据源采用 「元数据存主库、物理表存托管库」 模式:
Loading diagram…
动态建表流程:
- UI /
DataSourceService写入data_source_*元数据(主库)。 buildManagedEntitySchemas()(dataSourceSchemaBuilder.ts)将列/索引元数据转为 TypeORMEntitySchema。Db.connectManagedDataSource()建立托管连接;applyManagedSchemaSync()对物理库执行 DDL 同步。getManagedSchemaDiff()/managedSchemaDiff.ts对比元数据与物理 schema,支持增量感知。- 工作流节点
TableOpExecutor、ExcelImportTableExecutor通过tableCode读写托管表;managedTableQuery.ts做字段白名单过滤。
支持的列类型: text、varchar、integer、bigint、real、decimal、boolean、datetime、date、json、blob。
默认托管 SQLite 路径:{configDir}/db/managed/{dataSourceId}.db;首次启动 DataSourceService.ensureDefaultDataSource() 创建「默认数据集」。
5.5.9 多域隔离与软删除
| 机制 | 实现 |
|---|---|
| 分域 | partition 列 + GlobalSubscriber 自动注入 + PaginationService.addPartitionWhere() 查询过滤 |
| 软删除 | isDelete = 1:workflow、workflow_worker、data_source、data_source_table、captured_element、screenshot |
| 启用开关 | enabled = 0:禁用工作流/执行器/数据源,停止 Cron 与窗口调度 |
5.5.10 读写模块
| 模块 | 路径 | 读写表 |
|---|---|---|
| Db | beans/Db.ts | 主库生命周期、托管连接池、dsMap |
| GlobalSubscriber | db/services/GlobalSubscriber.ts | 写入拦截(partition/时间戳) |
| PaginationService | db/services/PaginationService.ts | 分域分页查询 |
| DataSourceService | service/DataSourceService.ts | data_source_* 元数据 + 托管表 CRUD |
| MainApiController | controller/MainApiController.ts | workflow、variables、cookie、log、folder、screenshot |
| WorkflowWorkerService | service/WorkflowWorkerService.ts | workflow_worker |
| WorkflowExecutionService | service/WorkflowExecutionService.ts | 运行时 variables、log |
| CronManager | beans/CronManager.ts | cron_task、workflow cron 同步 |
| ElementStorageService | service/ElementStorageService.ts | captured_element、screenshot |
| *AI Store | ai/beans/*Store.ts | ai_* 全表 |
| BaseNodeExecutor | engine/BaseNodeExecutor.ts | workflow-variables |
| TableOpExecutor | engine/executors/TableOpExecutor.ts | 托管表按 tableCode |
| ThirdWindowFactory | platform/ThirdWindowFactory.ts | 窗口级 log/cookie/statistics、遗留 execDsCommand |
5.5.11 执行器类型与状态
| 类型 | 说明 |
|---|---|
| LOCAL | 本地执行器,在主进程中执行 |
| REMOTE | 远程执行器,通过 HTTP API 触发 |
| BROWSER | 浏览器执行器,在 BrowserWindow 中执行 |
| DESKTOP | 桌面自动化执行器,调用原生模块 |
5.5.12 执行器状态流转
Loading diagram…
5.6 AI 工作台
AI 工作台是独立于工作流设计器的对话与自动化入口,主进程模块位于 src/main/ai/,渲染端为 AiDashboardPage。
Loading diagram…
核心组件:
| 组件 | 职责 |
|---|---|
| AiSessionStore / AiSessionLlmRunner | 会话 CRUD、消息持久化、流式对话编排 |
| AiProviderFactory | 内置 Ollama / DeepSeek / Cursor + 自定义 OpenAI 兼容提供商 |
| AiChannelStore + Adapter | 钉钉、飞书 IM 通道配置与消息收发 |
| AiMessageAutoexecService | 按规则匹配用户消息,触发 BizApi 自动执行 |
| runBizApiAutoexecLoop | LLM 解析 BizApi 计划 → 逐步 invoke → 结果回灌模型 |
| AiTimerStore | AI 定时任务,复用 CronManager / CronTaskEntity |
| AiProviderExecutor | 工作流节点内调用 AI 补全 |
Bean 自动注册: PlatformApp 通过 import.meta.glob 扫描 controller/、service/、beans/、ai/beans/**、ai/channel/**、ai/providers/** 并注入 Summer 容器。
六、通信架构
6.1 整体通信架构
Loading diagram…
6.2 IPC 通信(进程间通信)
Loading diagram…
IPC 通道分类:
| 通道前缀 | 说明 | 示例 |
|---|---|---|
main: | 主窗口相关 | main:getConfig, main:setConfig |
native: | 原生功能 | native:screenshot, native:mouseClick |
workflow: | 工作流管理 | workflow:list, workflow:save |
worker: | 执行器控制 | worker:start, worker:stop |
db: | 数据库操作 | db:query, db:save |
datasource: | 数据源管理 | 表结构同步、CRUD |
cron: | 统一定时任务 | 工作流 Cron、AI 定时器 |
BizApi ai: | AI 工作台(@BizApi 装饰器) | listAiProvidersApi, chatStreamApi, listAiChannelsApi |
6.3 HTTP 通信架构
Loading diagram…
HTTP API 端点:
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | / | 健康检查 |
| POST | /wf | 工作流操作(执行/状态/停止) |
| WS | /ws | WebSocket 实时通信 |
请求格式:
json
{
"id": "workflow-id",
"action": "execute | status | stop",
"args": { ... },
"options": { ... }
}6.4 BrowserWindow 通信
Loading diagram…
6.5 通信方式总结
| 通信类型 | 方向 | 技术 | 用途 |
|---|---|---|---|
| IPC invoke | Renderer → Main | ipcRenderer.invoke() | 请求-响应模式 |
| IPC send | Main → Renderer | webContents.send() | 事件推送 |
| HTTP REST | External → Main | Fastify POST | 外部系统集成 |
| WebSocket | External ↔ Main | Fastify WS | 实时双向通信 |
| executeJS | Main → BrowserWindow | executeJavaScript() | 窗口脚本沙箱执行 |
| Preload | Main ↔ BrowserWindow | preload script | 安全 API 暴露 |
七、执行器节点分类
Loading diagram…
八、开发新节点流程
开发新节点需要完成以下 10 个步骤:
| 步骤 | 文件 | 操作 |
|---|---|---|
| 1 | src/automa/types/command-types.ts | 在 CommandCategories 中添加命令定义 |
| 2 | src/automa/types/node-config.ts | 在 NodeKey 枚举中添加节点键 |
| 3 | src/automa/types/node-config.ts | 在 NodeTypesConfig 中添加节点 UI 配置 |
| 4 | src/automa/types/node-config.ts | 定义节点表单配置(xxxFormConfig) |
| 5 | src/automa/types/node-types.ts | 定义节点配置接口(xxxNodeDefinition) |
| 6 | src/automa/types/node-types.ts | 在 SpecificNodeDefinition 联合类型中添加 |
| 7 | src/automa/types/node-types.ts | 在 NodeDefinitionMap 映射中添加 |
| 8 | src/main/engine/executors/ | 创建节点执行器类 |
| 9 | src/renderer/pages/workflow/nodes/ | 创建节点 UI 组件 |
| 10 | src/renderer/pages/workflow/components/ConfigPanel/ConfigPanel.vue | 导入并注册表单配置 |
九、部署架构
Loading diagram…
十、安全考虑
- 进程隔离: 渲染进程与主进程通过 IPC 通信,预加载脚本限制暴露的 API
- 沙箱模式: BrowserWindow 可配置沙箱模式
- Cookie 隔离: 每个工作流的 Cookie 独立存储
- 日志脱敏: 敏感信息不记录到日志
十一、性能优化
- 并发执行: 支持多个工作流并发执行
- 分批读取: Excel 大文件分批读取
- 变量持久化: 运行时变量可持久化到数据库
- 图像缓存: 截图和图像查找结果缓存
- AI 文档懒加载: BizApi 自动执行所需的节点/接口文档按需生成,避免启动时全量加载
- 文档站点 Mermaid: 架构图默认适应窗口充满可视区;SVG 尺寸缩放 +
requestAnimationFrame节流拖拽,MutationObserver 防抖并在全部渲染完成后断开
十二、扩展性
- 节点扩展: 通过继承 BaseNodeExecutor 添加新节点
- API 扩展: 通过 Controller 添加新的 IPC API;AI 能力通过
@BizApi()暴露给 LLM 自动调用 - 原生扩展: 通过 Rust 模块添加新的原生功能
- 脚本扩展: 支持自定义 JavaScript 脚本执行
- AI 提供商扩展: 实现
AiChatProvider或在 UI 添加自定义 OpenAI 兼容端点 - IM 通道扩展: 实现
AiChannelAdapter并注册到AiChannelFactory