根因: ws 被打进主进程 bundle 时, 其可选依赖 bufferutil 的打包解析产物 破坏了客户端发帧的 mask fallback; permessage-deflate 协商开启时错误被 压缩路径静默吞掉 —— 表现为 ws 握手成功但所有 CDP 命令零字节发出、 无响应(输入文本节点 10s 超时), dev 与打包版皆受影响。 - electron.vite.config: externalizeDepsPlugin include ws, 运行时 require - package.json: ws 提升到根依赖, electron-builder 随包收集 - electron-builder.config: 确认 node_modules/ws 进入 asar - transport: 显式 perMessageDeflate:false(双保险, 附注释) - package.mjs: verifyLaunch 剥离 ELECTRON_RUN_AS_NODE/NODE_OPTIONS, 防止外部工具链环境把打包应用带进纯 Node 模式(bad option 退出码 9) - flows: 演示流程支持 RPA_DEMO_BROWSER 强制指定浏览器(Chrome 缺装回退 Edge) 验证: 全量测试 349 绿 + 浏览器 e2e 绿 + portable/NSIS 双冒烟通过, 安装包/zip/SHA256 已产出。 |
||
|---|---|---|
| .. | ||
| scripts | ||
| src | ||
| package.json | ||
| README.md | ||
| tsconfig.json | ||
| vitest.config.ts | ||
@rpa/core
RPA 能力层包:零 Electron 依赖的流程引擎、能力注册表与能力实现。
抽离路线见 docs/rpa-core-refactor-tasks.md,开发规范见 docs/dev-conventions.md。
包边界
| 模块 | 说明 |
|---|---|
src/engine/ |
注册表、运行时、表达式、createEngine() 工厂、host-bridge.ts 宿主桥 |
src/driver/ |
types.ts 五域 AutomationDriver 接口(mouse/keyboard/window/screen/element)+ windows/powershell.ts 进程助手 + windows/windows-driver.ts PowerShell 实现 |
src/capabilities/ |
能力实现(副作用注册,经 @rpa/core/capabilities 拉起) |
src/browser/ |
外部浏览器 CDP:external.ts(Edge/Chrome 进程管理)+ transport.ts(CdpTransport 接口、ExternalTransport) |
HostBridge 契约(决策点 4 最小面)
宿主(Electron 主进程 / 未来 Agent-Employee product-shell)启动时注入:
import { setHostBridge, setSubflowSource } from "@rpa/core";
setHostBridge({
createFormWindow({ title }) { /* 返回 HostDialogWindow 适配(BrowserWindow) */ },
dipToScreenPoint(p) { /* screen.dipToScreenPoint */ },
screenToDipPoint(p) { /* screen.screenToDipPoint */ },
loadAiConfig() { /* settings.aiConfig */ }
});
setSubflowSource({ listFlows, getFlow }); // 子流程仓库
未注入时的行为:window-extended 的 DPI 换算回退恒等(与旧 vitest 行为一致);
ai-service 返回空配置(requireAiConfig 统一抛 ai_not_configured);
human-dialog 抛 host_unavailable。
Electron 相关能力留守清单(宿主适配层,不入包)
src/main/browser/session.ts:BrowserSession 编排 + 内置运行浏览器(依赖BrowserWindow与应用生命周期)src/main/browser/transport.ts:EmbeddedTransport(包装webContents.debugger)src/main/capabilities/browser*.ts/web-batch2.ts/web-crawl.ts:经 BrowserSession 操作浏览器窗口src/main/capabilities/ai-caps.ts:AI 编排能力(依赖宿主注入的 chatCompletion 配置面,可随后续阶段评估迁入)src/main/overlay.ts/desktop-pick.ts/vision-lab.ts/fixture/:Electron 窗口强耦合src/main/local-vision/:onnxruntime-node 原生依赖,Bun 兼容性单独立项验证src/main/flows.ts/run//settings.ts:应用级编排与持久化
依赖护栏
npm run check:deps(根目录亦可)扫描 src/**:禁止 import "electron"、
相对引用逃出包 src/、引用宿主 src/main。阶段 2 起为提交前必跑项。
Driver(阶段 3)
- 五域接口
AutomationDriver(决策点 6):RpaEngine.driver默认new WindowsDriver(),createEngine()可注入自定义实现(CLI/Linux driver 等未来形态)。 - 驱动只承载原始注入原语(单次 SetCursorPos / SendKeys / 窗口操作);拟真抖动、 DIP 坐标换算、多步组合等策略留在能力文件,保证机械替换不改时序行为。
- element 域实现承载在
capabilities/desktop-uia.ts(经setElementDriverImplementation注册到 WindowsDriver),handler 层面向 driver 的收口在阶段 5/6 按需进行。 powershell()助手统一位于driver/windows/powershell.ts,包内能力禁止自行execFile("powershell.exe")(check:deps 与 review 双重把关)。- 平台标记:
npm run catalog构建时按组填充platformTag: "win32"(desktop/app/ office/vision 组),渲染层置灰延后(决策点 7)。