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

84 lines
4.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 禁令约束。