PRA-only-demo/docs/dev-conventions.md

4.8 KiB
Raw Permalink Blame History

RPA Studio 开发规范(v1 · 面向 rpa-core 抽离)

生效日期:2026-11-04。 背景:本平台继续作为日常开发载体;所有新代码必须同时满足"当前可用"和"将来可直接搬入 packages/rpa-core(最终迁入 Agent-Employee)"。迁移路线与任务清单见 docs/rpa-core-refactor-tasks.md,本规范是它的日常执行约束。

核心思想

迁移不是将来的改造,而是现在每次写代码时的选择。 遵守本规范写的能力,抽包时是搬运; 违反规范写的能力,抽包时是返工。


一、分层归属(硬性规则)

层 目录 判别标准 未来去向
L1 包内层 src/main/engine/、src/main/capabilities/ 大部分、src/main/browser/external.ts、transport.ts 不依赖 Electron 窗口即可运行 rpa-core 包
L2 宿主层 src/main/index.ts、overlay、desktop-pick、vision-lab、fixture/、local-vision/、flows、run/、settings、logger、browser/session.ts 内置浏览器部分 需要 Electron 窗口/应用生命周期 宿主适配层

判别口诀:这个能力在没有窗口的 CLI 里能跑吗?能 → L1;不能 → L2。


二、L1 层禁令(现有代码不追溯,新代码必须遵守)

  1. 禁止 import ... from "electron" 需要剪贴板/对话框/截屏/屏幕信息时:先看 Node 等价物(fs/os/child_process), 确实需要宿主能力时在 RunContext 或参数中注入,并在代码处注释 // HostBridge 候选。
  2. 禁止横向依赖宿主模块 L1 内禁止 import "../settings"、"../logger"、"../flows" 等。配置走参数/ctx,日志走 ctx.log。
  3. 禁止私起 PowerShell 进程 所有 PowerShell 调用必须使用 capabilities/desktop.ts 导出的 powershell() / psString()。 禁止自己 execFile("powershell.exe", ...)。原因:将来统一切换为常驻 worker(任务 3.5)。
  4. 禁止新增模块级可变全局状态 不写模块顶层 const cache = new Map() / let globalXxx。需要跨调用状态时挂在显式 store 或 RunContext 上(目标形态:createEngine() 实例持有)。
  5. 禁止把 PowerShell 逻辑写成不可拆的内联串 复杂脚本提取为独立函数/常量,便于将来搬进 WindowsDriver。

三、能力编写规范(tool 友好,为 Agent-Employee 准备)

  1. 结构化进出:参数从 args 对象取具名字段,返回结构化对象或原始值; 禁止返回"为 UI 拼接的字符串"(渲染层需要展示时自行格式化)。
  2. 必有超时:涉及外部交互(进程/网络/窗口等待)的能力必须有 timeout 参数和默认值。
  3. 错误契约:失败抛 RuntimeError(code, message, { recommendation }); code 用稳定英文枚举(必须登记在 packages/rpa-core/src/engine/error-codes.ts 的 RUNTIME_ERROR_CODES,任务 4.3 起机器可读),message 中文,recommendation 给可执行建议。禁止裸 throw string。
  4. 平台标记:Windows 专用能力(user32/UIA/COM)在 catalog 注册时带 platforms: ["win32"];能用纯 Node 实现的能力不调 PowerShell。
  5. 可测试:每个能力有同名 *.test.ts(vitest),与实现同目录。
  6. 结构化 meta(任务 4.1 起,新能力强制):register(ids, handler, meta) 第三参 必填 CapabilityMeta(summary / params / returns / timeoutMs / errorCodes / needsScreenshot / platforms)。老能力逐步补齐,review 时放行不带 meta 的旧文件改动。

四、新能力验收 checklist

  • 归属判定正确(L1/L2 口诀)
  • 无 electron / 宿主模块 import(L1 时)
  • PowerShell 只经 powershell() 助手(如需要)
  • 无新增模块级全局状态
  • 结构化参数/返回 + 超时 + RuntimeError 错误契约
  • catalog 注册完整(含 platforms 标记)
  • 有测试,npm run test + npm run typecheck 全绿

五、渐进收紧节奏

规范随改造阶段自动收紧,不必一步到位:

里程碑(见任务清单) 规范变化
现在 本文第二节禁令生效(靠 review 执行)
阶段 2 完成 L1 禁 electron 升级为 ESLint no-restricted-imports 强制
阶段 3 完成 powershell() 收口进 driver/windows/,L1 禁止直接引用
阶段 4 完成 无 schema 的新能力不允许进 catalog

六、明确不动的部分

  • 现有 77 处 PowerShell 调用点:不做预防性重构,统一等阶段 3 的 driver 抽象一次性处理。 之前只修 bug、只加能力,不重写。
  • 渲染层(React)按产品需求正常开发,不为其迁移性投资。
  • local-vision/、overlay/ 等宿主层模块正常开发,不受 L1 禁令约束。