PRA-only-demo/packages/rpa-core
yu 5f5e8bcb0e fix(browser): 审查整改批次2镜像——浏览器生命周期四缺陷(对面 55bc8f1b 同源)
目标:对齐对面 feat 分支 RPA-REV-2 的浏览器侧整改,保持双仓同源
代码逻辑:①killStaleBrowserProcesses 失败记 warning 不再静默;PowerShell -like 元字符转义防扩大匹配;②默认 userDataDir 加随机后缀防并发互踩;③launch 失败路径(/json/list、transport.connect)回收自拉子进程;④ExternalTransport.connect 失败/超时关闭底层 WS 并清理 timer
验证:对面 rpa-core tsc 归零 + engine 32/32;本仓库同代码
风险与回滚:低——失败路径增强,revert 即回
2026-11-09 09:55:59 +08:00
..
scripts feat: 视觉能力去 Electron 化,经 HostBridge.screen 注入(迁移阶段1-A9) 2026-11-06 10:53:42 +08:00
src fix(browser): 审查整改批次2镜像——浏览器生命周期四缺陷(对面 55bc8f1b 同源) 2026-11-09 09:55:59 +08:00
test feat(engine): node.finished 全事件补 attempt 审计字段(无人值守审批对账:对面 actionId=runId:stepId:attempt) 2026-11-06 17:21:45 +08:00
package.json feat: 视觉能力去 Electron 化,经 HostBridge.screen 注入(迁移阶段1-A9) 2026-11-06 10:53:42 +08:00
README.md 阶段3-driver抽象: powershell助手拆至driver/windows, 五域AutomationDriver接口+WindowsDriver(PowerShell实现行为不变), desktop/window-extended/system-extended/common-final改走driver, catalog构建填充platformTag=win32 2026-11-04 13:28:32 +08:00
tsconfig.json 阶段1-rpa-core建包: engine+31个纯Node能力迁入packages/rpa-core, 领域类型单一源化, createEngine工厂收拢模块级状态 2026-11-04 12:36:03 +08:00
vitest.config.ts 阶段1-rpa-core建包: engine+31个纯Node能力迁入packages/rpa-core, 领域类型单一源化, createEngine工厂收拢模块级状态 2026-11-04 12:36:03 +08:00

@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)。