@qing3a/flow-rpa-app 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.d.ts +48 -0
- package/dist/cli.js +145 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +24 -0
- package/dist/config.js +28 -0
- package/dist/config.js.map +1 -0
- package/dist/hello.d.ts +5 -0
- package/dist/hello.js +9 -0
- package/dist/hello.js.map +1 -0
- package/dist/http.d.ts +28 -0
- package/dist/http.js +119 -0
- package/dist/http.js.map +1 -0
- package/dist/main.d.ts +2 -0
- package/dist/main.js +47 -0
- package/dist/main.js.map +1 -0
- package/dist/registry.d.ts +35 -0
- package/dist/registry.js +64 -0
- package/dist/registry.js.map +1 -0
- package/dist/runner.d.ts +107 -0
- package/dist/runner.js +284 -0
- package/dist/runner.js.map +1 -0
- package/dist/server.d.ts +59 -0
- package/dist/server.js +386 -0
- package/dist/server.js.map +1 -0
- package/dist/status.d.ts +65 -0
- package/dist/status.js +150 -0
- package/dist/status.js.map +1 -0
- package/package.json +32 -0
- package/skill/flow-rpa-engine.md +102 -0
package/package.json
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@qing3a/flow-rpa-app",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"description": "flow-rpa 应用壳(原 app crate):MCP server + CLI",
|
|
6
|
+
"publishConfig": {
|
|
7
|
+
"access": "public"
|
|
8
|
+
},
|
|
9
|
+
"bin": {
|
|
10
|
+
"flow-app": "dist/main.js"
|
|
11
|
+
},
|
|
12
|
+
"main": "./dist/main.js",
|
|
13
|
+
"types": "./dist/main.d.ts",
|
|
14
|
+
"exports": {
|
|
15
|
+
".": {
|
|
16
|
+
"types": "./dist/main.d.ts",
|
|
17
|
+
"default": "./dist/main.js"
|
|
18
|
+
},
|
|
19
|
+
"./package.json": "./package.json"
|
|
20
|
+
},
|
|
21
|
+
"files": ["dist", "skill"],
|
|
22
|
+
"scripts": {
|
|
23
|
+
"build": "tsc -p tsconfig.build.json && node ../../scripts/build-skill.mjs",
|
|
24
|
+
"test": "vitest run --root ../.. --project app",
|
|
25
|
+
"typecheck": "tsc --noEmit"
|
|
26
|
+
},
|
|
27
|
+
"dependencies": {
|
|
28
|
+
"@qing3a/flow-rpa-engine": "^0.1.0",
|
|
29
|
+
"@modelcontextprotocol/sdk": "^1.30.0",
|
|
30
|
+
"zod": "^4.4.3"
|
|
31
|
+
}
|
|
32
|
+
}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
<!-- 由 docs/SKILL-ENGINE.md 构建生成(M11c D-K1),勿手改;改 docs 真源后重跑 pnpm build -->
|
|
2
|
+
# 引擎级 skill 初稿:flow-rpa 本地 RPA 引擎(契约版)
|
|
3
|
+
|
|
4
|
+
> 状态:**初稿**(2026-08-25,基于已冻结的 MCP 工具面契约;M11 打包进 npm 时按实现校对)
|
|
5
|
+
> 用途:挂载在 npm 包内作为「引擎级 skill」的唯一真源(ARCHITECTURE #10),安装时同步/链接到 Agent 平台的 skills 目录。
|
|
6
|
+
> 分工:本 skill 只讲「怎么调引擎」;业务编排(何时调、调哪个流程)在业务级 skill(外部/平台分发)。
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## 一、这是什么
|
|
11
|
+
|
|
12
|
+
flow-rpa 是本地 RPA 执行引擎:它解释执行**流程定义**(JSON 数据),拟人化操作用户本地的浏览器(CDP),产生结构化执行记录,并把脱敏统计上传到协作平台(md-forge)。
|
|
13
|
+
|
|
14
|
+
- **流程是数据**:执行什么由 flow.json 决定,引擎不含业务逻辑。
|
|
15
|
+
- **接口是 MCP**:本引擎通过 MCP 工具被 Agent 调用(stdio 传输,进程由 Agent 拉起)。
|
|
16
|
+
- **流程级工具面**:只提供「跑流程/查结果/管建议」等流程级工具,**不提供**页面原子操作(点击/输入/截图等),也不提供业务工具。
|
|
17
|
+
|
|
18
|
+
## 二、工具面(12 个,签名冻结;get_status 为第 12 个,2026-08-25)
|
|
19
|
+
|
|
20
|
+
### 核心执行
|
|
21
|
+
|
|
22
|
+
| 工具 | 参数 | 返回 | 说明 |
|
|
23
|
+
|---|---|---|---|
|
|
24
|
+
| `get_status` | 无 | 引擎状态 JSON(版本/skill 版本/浏览器连接/队列/锁/流程列表/上传台账/platform) | **调用流程前预检环境**:浏览器是否连接、队列是否忙、锁是否被占、平台是否配置;platform 不含 token |
|
|
25
|
+
| `list_flows` | 无 | 流程列表(id/name/version) | **调用任何流程前先查这里**,不要硬编码流程 id(流程包会更新) |
|
|
26
|
+
| `run_flow` | `flow_id`(必填)、`vars`(可选,如 `{"keyword":"算法工程师"}`)、`wait`(可选,默认 false) | `{runId, status:'running'\|'done'\|'failed', error?}` | **异步**:wait=false 立即返回 runId,用 `get_run` 轮询;流程含 30~60s 冷却,同步等待会超时 |
|
|
27
|
+
| `get_run` | `run_id` | run.json 全量(每步 verify/耗时/失败类别) | 轮询直到 status 为 done/failed;**步骤级**看哪步失败 |
|
|
28
|
+
| `validate_flow` | `json` 或 `path` | `{valid, flowId?, error?}` | 校验流程定义 |
|
|
29
|
+
|
|
30
|
+
### 学习与建议
|
|
31
|
+
|
|
32
|
+
| 工具 | 参数 | 返回 | 说明 |
|
|
33
|
+
|---|---|---|---|
|
|
34
|
+
| `list_suggestions` | `flow_id?` | 建议列表(来源 local/platform、状态 pending/mature、样本数) | L2 学习产物;**未成熟建议必须人工确认后才能应用** |
|
|
35
|
+
| `apply_suggestion` | `suggestion_id`、`confirm`(布尔) | 应用结果 | 结构改动铁律:pending 建议必须 confirm=true;mature 建议可自动 |
|
|
36
|
+
| `dismiss_suggestion` | `suggestion_id` | 忽略结果 | 人工处置,不再展示 |
|
|
37
|
+
|
|
38
|
+
### 运维(仅 owner / 开发期,不暴露给最终用户)
|
|
39
|
+
|
|
40
|
+
| 工具 | 说明 |
|
|
41
|
+
|---|---|
|
|
42
|
+
| `export_observation` | 把一次执行导出为观察报告包(观察通道;本地模拟/真实平台上传) |
|
|
43
|
+
| `sync_pending_uploads` | 重试待上传的观察包(断网恢复入口) |
|
|
44
|
+
| `get_perf` | 端到端性能基准(质量门数据) |
|
|
45
|
+
| `pkg_update` | 从 md-forge 更新流程包(拉 manifest → 版本比对 → 下载 → 哈希校验 → 替换) |
|
|
46
|
+
|
|
47
|
+
## 三、典型调用序列
|
|
48
|
+
|
|
49
|
+
```
|
|
50
|
+
0. get_status(可选) → 预检环境:浏览器是否连接、队列是否忙、锁是否被占、平台是否配置
|
|
51
|
+
(浏览器未连接 / 锁被其他实例持有 → 先处理环境再调流程,见「失败处理·环境类」)
|
|
52
|
+
1. list_flows → 确认流程 id + **inputs 参数声明**(每个流程要什么变量)
|
|
53
|
+
2. run_flow(flow_id, vars) → {runId, status:"running"}
|
|
54
|
+
vars 按 list_flows 返回的 inputs 组装;缺必填参数引擎会报「缺少必填参数: {name}」
|
|
55
|
+
3. get_run(runId) 轮询 → status=done → 读 steps 结果
|
|
56
|
+
(轮询间隔建议 3~5s;流程含冷却,跑完可能要几分钟)
|
|
57
|
+
4. 流程失败 → 看 error 与失败步骤的 verify/失败类别 → 决定重试/换词/人工
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
## 四、调用规则
|
|
61
|
+
|
|
62
|
+
**前置条件(2026-08-25 定案:独立 profile 优先)**
|
|
63
|
+
- **引擎默认使用专用浏览器(独立 profile)**:首次使用需人工登录一次(引擎会拉起自己的浏览器实例,登录目标平台后即可)——登录态与用户日常浏览器**隔离**,用户日常登录 ≠ 引擎已登录
|
|
64
|
+
- 可选能力:若用户主动以调试模式(9222)启动了浏览器,引擎可复用其登录态(不鼓励给日常浏览器开调试模式——同 profile 双进程有锁冲突风险)
|
|
65
|
+
- 同站节流:同一站点两次执行间隔 ≥10 分钟(引擎强制);间隔不足会被拒(返回需等待时间)——**不要自行绕过或频繁重试**
|
|
66
|
+
|
|
67
|
+
**参数组装**
|
|
68
|
+
- `vars` 按 `list_flows` 返回的 `inputs` 声明组装(`{name, required, description}`);值为字符串
|
|
69
|
+
- 循环索引 `{i}` 由引擎注入,不要传
|
|
70
|
+
|
|
71
|
+
**结果解读**
|
|
72
|
+
- run.json 的 `status`:done / failed
|
|
73
|
+
- 每步记录:`status`(done/failed)、`verify`(验证点结果:passed/durationMs)、`durationMs`、失败时 `error`(已脱敏掩码)
|
|
74
|
+
- extract 步骤:`field`(字段标签)、`count`(命中数)、`saved`(是否落盘本地明细)
|
|
75
|
+
- `selectorHit`:实际生效的选择器(页面改版排查用)
|
|
76
|
+
|
|
77
|
+
**失败处理**
|
|
78
|
+
- `索引越界`:循环内列表耗尽,**正常终止不是错误**,流程仍为 done
|
|
79
|
+
- 验证码 / 环境验证:**立即停止,告知用户人工处理**,绝不自动重试(执行树级风险事件)
|
|
80
|
+
- **环境类失败(首次使用必踩,重点)**:
|
|
81
|
+
- `浏览器未就绪` / 9222 连不上 → 引擎浏览器没启动或调试端口不可用 → **告知用户检查/启动引擎浏览器**,不要重试流程(调用前可用 `get_status` 预检 `browser.connected`)
|
|
82
|
+
- 登录页 / 未登录 → 引擎浏览器的登录态失效或从未登录 → **告知用户在引擎浏览器里登录目标平台**,不要重试流程
|
|
83
|
+
- 引擎浏览器与用户日常浏览器是隔离的 profile——用户日常登录 ≠ 引擎已登录
|
|
84
|
+
- 其他失败:看失败步骤与类别;重试前先确认前置条件(登录态/节流),**重试最多一次**
|
|
85
|
+
|
|
86
|
+
**禁止事项**
|
|
87
|
+
- ❌ 不直接操作浏览器页面(无此工具;那是 L3 自主探索,明确不做)
|
|
88
|
+
- ❌ 不绕过同站闸门 / 不修改冷却参数
|
|
89
|
+
- ❌ 不自动应用 pending 建议(人工确认铁律;除非用户明确同意,不得传 confirm:true)
|
|
90
|
+
- ❌ 不把业务判断写成引擎工具调用链的循环(业务编排在业务级 skill)
|
|
91
|
+
- ❌ 不使用运维工具(export_observation 等)除非你是 owner 且明确需要
|
|
92
|
+
|
|
93
|
+
## 五、与业务级 skill 的关系
|
|
94
|
+
|
|
95
|
+
- 本 skill:引擎能力说明书(npm 包内,随版本更新)
|
|
96
|
+
- 业务级 skill(如「猎头工作流」):何时调、调哪个流程、业务规则(外部维护或平台分发)
|
|
97
|
+
- 冲突时:业务级 skill 管「做什么」,本 skill 管「怎么调」
|
|
98
|
+
|
|
99
|
+
## 六、版本与同步
|
|
100
|
+
|
|
101
|
+
- 本 skill 与引擎版本绑定:npm 包升级 → 本文件更新 → 安装/启动时同步到 Agent skills 目录(带版本标注)
|
|
102
|
+
- 若 Agent 平台已有一份旧拷贝:以「引擎版本 + skill 内容哈希」判断是否需要覆盖
|