Skip to content

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* 等
ExcelExcelOpenExecutor, 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
AIAiProviderExecutor

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.db23 张固定 TypeORM 实体表,存工作流、AI、数据源元数据、Cron 等
托管数据源{configDir}/db/managed/{dataSourceId}.db 或远程 MySQL/PG用户自定义业务表;表结构定义存主库 data_source_*,运行时按元数据建表
遗留 per-window{configDir}/db/{key}.dbIPC execDsCommand 路径保留;当前代码中 createDataSource() 无调用方

configDir 路径:

  • 开发环境:{项目根}/config/
  • 生产环境:{Electron userData}/config/

可通过 config/app.jsondataSource 段覆盖主库驱动(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

所有固定实体继承 BaseEntitysrc/main/db/entity/BaseEntity.ts):

类型说明
idinteger PK自增主键
created / updateddatetimeTypeORM 自动维护
partition / tenant / regionvarchar(64) nullable多域隔离;GlobalSubscriber 写入时从 appConfig.dataSource.partition 注入
createdBy / updatedByvarchar(64) nullable操作人

类级索引:@Index(['partition', 'tenant', 'region'])

关系建模约定:固定表之间不使用 TypeORM @ManyToOne / @JoinColumn,关联均通过业务 ID 字符串或整数逻辑引用(如 workflowIdsessionIddataSourceId)。例外:FolderEntity 使用 @Tree('materialized-path') 树形结构。

5.5.4 主库固定表一览(23 张)

分组表名实体类职责
工作流workflowWorkflowEntity画布 JSON、Cron、启用状态
workflow_workerWorkflowWorkerEntity执行器实例、进度、上下文
workflow-variablesWorkflowVariablesEntity工作流级变量
workflow-cookieWorkflowCookieEntity工作流 Cookie 隔离
workflow-statisticsWorkflowStatisticsEntity单次运行统计快照
日志workflow-logWorkflowLogEntity节点级执行日志
log-dataLogDataEntity节点输出数据
资源folderFolderEntity树形文件夹(materialized-path)
captured_elementCapturedElementEntity捕获元素库
screenshotScreenshotEntity截图库
调度cron_taskCronTaskEntity统一定时任务注册表
数据源元数据data_sourceDataSourceEntity托管数据源连接配置
data_source_tableDataSourceTableEntity逻辑表定义
data_source_table_columnDataSourceTableColumnEntity列定义 + 表单 UI
data_source_table_indexDataSourceTableIndexEntity索引定义
data_source_table_index_columnDataSourceTableIndexColumnEntity索引列与排序
AIai_sessionAiSessionEntity对话会话
ai_messageAiMessageEntity会话消息
ai_promptAiPromptEntity内置/自定义提示词
ai_channelAiChannelEntity钉钉/飞书通道
ai_custom_providerAiCustomProviderEntity自定义 OpenAI 兼容提供商
ai_provider_credentialAiProviderCredentialEntity提供商凭据
ai_message_autoexec_ruleAiMessageAutoexecRuleEntity消息自动执行规则

5.5.5 工作流域 ER 关系

Loading diagram…

WorkflowEntity 核心字段: namehosticonpreload/preloadCodecron/cronStatusstatusworkflowId(业务键)、json(画布)、enabledisDelete

WorkflowWorkerEntity 核心字段: workerId(唯一)、type(LOCAL/REMOTE/BROWSER/DESKTOP)、statusprogress/executedNodes/totalNodesconfig/context/input/output(JSON 字符串)、重试与超时配置、enabledisDelete

5.5.6 调度与资源 ER 关系

Loading diagram…

CronTaskEntity 为全应用统一定时注册表,CronManagerbizType 调度:

bizType说明
workflow窗口流程定时器(同步 workflow.cron
worker_trigger画布触发器 / 用户手动新建执行器定时
cleanup_workflow_log清理工作流日志
ai_bizapi定时执行 BizApi
ai_timerAI 一次性延迟任务

唯一约束:[bizId, bizType]

5.5.7 AI 模块 ER 关系

Loading diagram…

ai_message 索引:[sessionId, seq],保证同会话消息顺序。

5.5.8 托管数据源(元数据 + 动态表)

数据源采用 「元数据存主库、物理表存托管库」 模式:

Loading diagram…

动态建表流程:

  1. UI / DataSourceService 写入 data_source_* 元数据(主库)。
  2. buildManagedEntitySchemas()dataSourceSchemaBuilder.ts)将列/索引元数据转为 TypeORM EntitySchema
  3. Db.connectManagedDataSource() 建立托管连接;applyManagedSchemaSync() 对物理库执行 DDL 同步。
  4. getManagedSchemaDiff() / managedSchemaDiff.ts 对比元数据与物理 schema,支持增量感知。
  5. 工作流节点 TableOpExecutorExcelImportTableExecutor 通过 tableCode 读写托管表;managedTableQuery.ts 做字段白名单过滤。

支持的列类型: textvarcharintegerbigintrealdecimalbooleandatetimedatejsonblob

默认托管 SQLite 路径:{configDir}/db/managed/{dataSourceId}.db;首次启动 DataSourceService.ensureDefaultDataSource() 创建「默认数据集」。

5.5.9 多域隔离与软删除

机制实现
分域partition 列 + GlobalSubscriber 自动注入 + PaginationService.addPartitionWhere() 查询过滤
软删除isDelete = 1workflowworkflow_workerdata_sourcedata_source_tablecaptured_elementscreenshot
启用开关enabled = 0:禁用工作流/执行器/数据源,停止 Cron 与窗口调度

5.5.10 读写模块

模块路径读写表
Dbbeans/Db.ts主库生命周期、托管连接池、dsMap
GlobalSubscriberdb/services/GlobalSubscriber.ts写入拦截(partition/时间戳)
PaginationServicedb/services/PaginationService.ts分域分页查询
DataSourceServiceservice/DataSourceService.tsdata_source_* 元数据 + 托管表 CRUD
MainApiControllercontroller/MainApiController.tsworkflow、variables、cookie、log、folder、screenshot
WorkflowWorkerServiceservice/WorkflowWorkerService.tsworkflow_worker
WorkflowExecutionServiceservice/WorkflowExecutionService.ts运行时 variables、log
CronManagerbeans/CronManager.tscron_task、workflow cron 同步
ElementStorageServiceservice/ElementStorageService.tscaptured_elementscreenshot
*AI Storeai/beans/*Store.tsai_* 全表
BaseNodeExecutorengine/BaseNodeExecutor.tsworkflow-variables
TableOpExecutorengine/executors/TableOpExecutor.ts托管表按 tableCode
ThirdWindowFactoryplatform/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 自动执行
runBizApiAutoexecLoopLLM 解析 BizApi 计划 → 逐步 invoke → 结果回灌模型
AiTimerStoreAI 定时任务,复用 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/wsWebSocket 实时通信

请求格式:

json
{
    "id": "workflow-id",
    "action": "execute | status | stop",
    "args": { ... },
    "options": { ... }
}

6.4 BrowserWindow 通信

Loading diagram…

6.5 通信方式总结

通信类型方向技术用途
IPC invokeRenderer → MainipcRenderer.invoke()请求-响应模式
IPC sendMain → RendererwebContents.send()事件推送
HTTP RESTExternal → MainFastify POST外部系统集成
WebSocketExternal ↔ MainFastify WS实时双向通信
executeJSMain → BrowserWindowexecuteJavaScript()窗口脚本沙箱执行
PreloadMain ↔ BrowserWindowpreload script安全 API 暴露

七、执行器节点分类

Loading diagram…

八、开发新节点流程

开发新节点需要完成以下 10 个步骤:

步骤文件操作
1src/automa/types/command-types.ts在 CommandCategories 中添加命令定义
2src/automa/types/node-config.ts在 NodeKey 枚举中添加节点键
3src/automa/types/node-config.ts在 NodeTypesConfig 中添加节点 UI 配置
4src/automa/types/node-config.ts定义节点表单配置(xxxFormConfig)
5src/automa/types/node-types.ts定义节点配置接口(xxxNodeDefinition)
6src/automa/types/node-types.ts在 SpecificNodeDefinition 联合类型中添加
7src/automa/types/node-types.ts在 NodeDefinitionMap 映射中添加
8src/main/engine/executors/创建节点执行器类
9src/renderer/pages/workflow/nodes/创建节点 UI 组件
10src/renderer/pages/workflow/components/ConfigPanel/ConfigPanel.vue导入并注册表单配置

九、部署架构

Loading diagram…

十、安全考虑

  1. 进程隔离: 渲染进程与主进程通过 IPC 通信,预加载脚本限制暴露的 API
  2. 沙箱模式: BrowserWindow 可配置沙箱模式
  3. Cookie 隔离: 每个工作流的 Cookie 独立存储
  4. 日志脱敏: 敏感信息不记录到日志

十一、性能优化

  1. 并发执行: 支持多个工作流并发执行
  2. 分批读取: Excel 大文件分批读取
  3. 变量持久化: 运行时变量可持久化到数据库
  4. 图像缓存: 截图和图像查找结果缓存
  5. AI 文档懒加载: BizApi 自动执行所需的节点/接口文档按需生成,避免启动时全量加载
  6. 文档站点 Mermaid: 架构图默认适应窗口充满可视区;SVG 尺寸缩放 + requestAnimationFrame 节流拖拽,MutationObserver 防抖并在全部渲染完成后断开

十二、扩展性

  • 节点扩展: 通过继承 BaseNodeExecutor 添加新节点
  • API 扩展: 通过 Controller 添加新的 IPC API;AI 能力通过 @BizApi() 暴露给 LLM 自动调用
  • 原生扩展: 通过 Rust 模块添加新的原生功能
  • 脚本扩展: 支持自定义 JavaScript 脚本执行
  • AI 提供商扩展: 实现 AiChatProvider 或在 UI 添加自定义 OpenAI 兼容端点
  • IM 通道扩展: 实现 AiChannelAdapter 并注册到 AiChannelFactory

企业级桌面 RPA 自动化平台