|
@@ -9,226 +9,200 @@
|
|
|
}
|
|
}
|
|
|
```
|
|
```
|
|
|
|
|
|
|
|
-## 语法分层
|
|
|
|
|
|
|
+## 结点总结
|
|
|
|
|
|
|
|
-- **基础语法**:`schedule`、`if`、`while`
|
|
|
|
|
-- **基础 action**:`adb`(通过 method 区分)
|
|
|
|
|
-- **扩展标签(Func)**:`src/pages/processing/func/` 目录下的脚本文件名即为标签名
|
|
|
|
|
|
|
+- **控制/循环结点**:`schedule`、`if`、`for`、`while`
|
|
|
|
|
+- **系统结点**:`delay`、`set`、`echo`、`random`、`log`
|
|
|
|
|
+- **ADB 结点**:`input`、`click`、`locate`、`press`、`swipe`、`scroll`、`keyevent`
|
|
|
|
|
+- **扩展标签(Func)**:
|
|
|
|
|
+- `ocr-chat`、`extract-messages`、`ocr-chat-history`、`extract-chat-history`、`read-last-message`、`smart-chat-append`、`save-messages`、`generate-summary`、`generate-history-summary`、`read-txt` / `read-text`、`save-txt` / `save-text`、`img-center-point-location`、`img-bounding-box-location`、`img-cropping`、`ai-generate`、`string-press`
|
|
|
|
|
|
|
|
-## 定时执行(schedule)
|
|
|
|
|
|
|
+---
|
|
|
|
|
+
|
|
|
|
|
+## 结点分类说明
|
|
|
|
|
+
|
|
|
|
|
+---
|
|
|
|
|
+
|
|
|
|
|
+### 一、控制/循环结点
|
|
|
|
|
+
|
|
|
|
|
+**schedule**(定时执行)
|
|
|
|
|
|
|
|
```json
|
|
```json
|
|
|
-{
|
|
|
|
|
- "type": "schedule",
|
|
|
|
|
- "condition": {
|
|
|
|
|
- "interval": "1s",
|
|
|
|
|
- "repeat": -1
|
|
|
|
|
- },
|
|
|
|
|
- "interval": []
|
|
|
|
|
-}
|
|
|
|
|
|
|
+{ "type": "schedule", "condition": { "interval": "1s", "repeat": -1 }, "interval": [] }
|
|
|
```
|
|
```
|
|
|
|
|
|
|
|
-- `interval`: 执行间隔("1s", "2m", "3h")
|
|
|
|
|
-- `repeat`: 重复次数(`-1` 表示无限循环)
|
|
|
|
|
|
|
+- `condition.interval`:间隔(如 `"1s"`、`"2m"`、`"3h"`)。`condition.repeat`:次数,`-1` 或 `"forever"` 为无限。`interval`:每次执行的操作数组。
|
|
|
|
|
|
|
|
-## ADB操作(adb)
|
|
|
|
|
|
|
+**if**(条件判断)
|
|
|
|
|
|
|
|
-统一格式:
|
|
|
|
|
```json
|
|
```json
|
|
|
-{
|
|
|
|
|
- "type": "adb",
|
|
|
|
|
- "method": "input|click|locate|swipe|scroll|press|string-press",
|
|
|
|
|
- "inVars": [],
|
|
|
|
|
- "outVars": []
|
|
|
|
|
-}
|
|
|
|
|
|
|
+{ "type": "if", "condition": "{变量} == '值'", "then": [], "else": [] }
|
|
|
```
|
|
```
|
|
|
|
|
|
|
|
-| method | 说明 | inVars |
|
|
|
|
|
-|--------|------|--------|
|
|
|
|
|
-| `input` | 输入文本 | `[0]`: 文本内容 |
|
|
|
|
|
-| `click` | 点击 | `[0]`: 位置坐标(字符串格式:`"{\"x\":123,\"y\":456}"` 或 `"123,456"`) |
|
|
|
|
|
-| `locate` | 定位 | `[0]`: 图片/文字,`outVars[0]`: 保存位置 |
|
|
|
|
|
-| `swipe` | 滑动 | `[0]`: 方向(up-down/down-up/left-right/right-left) |
|
|
|
|
|
-| `scroll` | 滚动 | `[0]`: 方向(up/down) |
|
|
|
|
|
-| `press` | 图像匹配并点击 | `[0]`: 图片路径 |
|
|
|
|
|
-| `string-press` | 文字识别并点击 | `[0]`: 文字内容 |
|
|
|
|
|
|
|
+- `condition` 支持 `{变量}`、`==` `!=` `>` `<` `>=` `<=`、`&&` `||`。兼容旧字段 **ture**。
|
|
|
|
|
|
|
|
-## 条件判断(if)
|
|
|
|
|
|
|
+**for**(循环)
|
|
|
|
|
|
|
|
```json
|
|
```json
|
|
|
-{
|
|
|
|
|
- "type": "if",
|
|
|
|
|
- "condition": "{变量} == '值'",
|
|
|
|
|
- "ture": [],
|
|
|
|
|
- "false": []
|
|
|
|
|
-}
|
|
|
|
|
|
|
+{ "type": "for", "variable": "{item}", "items": [1, 2, 3], "body": [] }
|
|
|
```
|
|
```
|
|
|
|
|
|
|
|
-支持操作符:`==` `!=` `>` `<` `>=` `<=`
|
|
|
|
|
|
|
+- `variable`:当前元素变量。`items`:数组(可写 `"{listVar}"`)。`body`:每轮操作数组。
|
|
|
|
|
|
|
|
-### 条件判断示例
|
|
|
|
|
|
|
+**while**(循环)
|
|
|
|
|
|
|
|
-**数值比较:**
|
|
|
|
|
```json
|
|
```json
|
|
|
-{
|
|
|
|
|
- "type": "if",
|
|
|
|
|
- "condition": "{count} > 5",
|
|
|
|
|
- "ture": [{"type": "echo", "value": "count大于5"}],
|
|
|
|
|
- "false": []
|
|
|
|
|
-}
|
|
|
|
|
|
|
+{ "type": "while", "condition": "{变量} > 0", "body": [] }
|
|
|
```
|
|
```
|
|
|
|
|
|
|
|
-**字符串比较:**
|
|
|
|
|
|
|
+- `condition` 同 if。`body`:循环体。兼容旧字段 **ture**。
|
|
|
|
|
+
|
|
|
|
|
+---
|
|
|
|
|
+
|
|
|
|
|
+### 二、系统结点
|
|
|
|
|
+
|
|
|
|
|
+**delay**(延迟)
|
|
|
|
|
+
|
|
|
```json
|
|
```json
|
|
|
-{
|
|
|
|
|
- "type": "if",
|
|
|
|
|
- "condition": "{message} == \"hello\"",
|
|
|
|
|
- "ture": [{"type": "echo", "value": "消息是hello"}],
|
|
|
|
|
- "false": []
|
|
|
|
|
-}
|
|
|
|
|
|
|
+{ "type": "delay", "value": "2s" }
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+- 也支持字段 `delay`。单位:`s`、`m`、`h`。
|
|
|
|
|
+
|
|
|
|
|
+**set**(变量设置)
|
|
|
|
|
+
|
|
|
|
|
+```json
|
|
|
|
|
+{ "type": "set", "variable": "{name}", "value": "value" }
|
|
|
```
|
|
```
|
|
|
|
|
|
|
|
-**布尔值判断:**
|
|
|
|
|
|
|
+- **支持的数据类型**:`number`(整数或小数)、`string`(字符串)、`bool`(`true` / `false`)。写入后参与运算或比较时按上述类型处理;布尔在变量上下文中以 `"1"` / `"0"` 存储。
|
|
|
|
|
+- `value` 支持 `{var}` 替换;含 `+`、`-`、`*`、`/` 时按算术表达式求值。变量定义在根级 `variables`,引用用 `"{name}"`,echo 中拼接用 `{{name}}`。
|
|
|
|
|
+
|
|
|
|
|
+**echo**(打印console.log信息)
|
|
|
|
|
+
|
|
|
```json
|
|
```json
|
|
|
-{
|
|
|
|
|
- "type": "if",
|
|
|
|
|
- "condition": "{isReady} == true",
|
|
|
|
|
- "ture": [{"type": "echo", "value": "已准备好"}],
|
|
|
|
|
- "false": [{"type": "echo", "value": "未准备好"}]
|
|
|
|
|
-}
|
|
|
|
|
|
|
+{ "type": "echo", "value": "消息: {{var}}" }
|
|
|
```
|
|
```
|
|
|
|
|
+或
|
|
|
|
|
+```json
|
|
|
|
|
+{ "type": "echo", "inVars": ["{var1}", "{var2}"] }
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+- 打印信息到log.txt,如果报错会把报错信息显示
|
|
|
|
|
+
|
|
|
|
|
+**log**(仅 UI 输出)
|
|
|
|
|
|
|
|
-或直接使用布尔变量:
|
|
|
|
|
```json
|
|
```json
|
|
|
-{
|
|
|
|
|
- "type": "if",
|
|
|
|
|
- "condition": "{isReady}",
|
|
|
|
|
- "ture": [{"type": "echo", "value": "已准备好"}],
|
|
|
|
|
- "false": []
|
|
|
|
|
-}
|
|
|
|
|
|
|
+{ "type": "log", "value": "调试信息" }
|
|
|
|
|
+```
|
|
|
|
|
+或
|
|
|
|
|
+```json
|
|
|
|
|
+{ "type": "log", "inVars": ["{var}"] }
|
|
|
```
|
|
```
|
|
|
|
|
|
|
|
-## 循环(while)
|
|
|
|
|
|
|
+**random**(随机数)
|
|
|
|
|
|
|
|
```json
|
|
```json
|
|
|
-{
|
|
|
|
|
- "type": "while",
|
|
|
|
|
- "condition": "{变量} > 0",
|
|
|
|
|
- "ture": []
|
|
|
|
|
-}
|
|
|
|
|
|
|
+{ "type": "random", "inVars": ["1", "100"], "outVars": ["{randomNum}"], "integer": true }
|
|
|
```
|
|
```
|
|
|
|
|
|
|
|
-> 注意:`ture` 是 `body` 的别名。
|
|
|
|
|
|
|
+- `inVars[0/1]`:最小/最大值。`outVars[0]`:结果变量。`integer` 默认 `true`。传统写法 `variable`、`min`、`max` 仍支持。
|
|
|
|
|
+
|
|
|
|
|
+---
|
|
|
|
|
|
|
|
-## 内置操作
|
|
|
|
|
|
|
+### 三、ADB 结点
|
|
|
|
|
|
|
|
-### 延迟(delay)
|
|
|
|
|
```json
|
|
```json
|
|
|
-{ "type": "delay", "value": "2s" }
|
|
|
|
|
|
|
+{ "type": "input", "value": "文本", "clear": false }
|
|
|
|
|
+```
|
|
|
|
|
+```json
|
|
|
|
|
+{ "type": "click", "target": "{\"x\":100,\"y\":200}" }
|
|
|
|
|
+```
|
|
|
|
|
+```json
|
|
|
|
|
+{ "type": "locate", "method": "image", "target": "resources/icon.png", "variable": "{pos}" }
|
|
|
|
|
+```
|
|
|
|
|
+```json
|
|
|
|
|
+{ "type": "press", "value": "resources/btn.png" }
|
|
|
|
|
+```
|
|
|
|
|
+```json
|
|
|
|
|
+{ "type": "swipe", "value": "up-down" }
|
|
|
|
|
+```
|
|
|
|
|
+```json
|
|
|
|
|
+{ "type": "scroll", "value": "down" }
|
|
|
|
|
+```
|
|
|
|
|
+```json
|
|
|
|
|
+{ "type": "keyevent", "value": "4" }
|
|
|
```
|
|
```
|
|
|
|
|
|
|
|
-### 设置变量(set)
|
|
|
|
|
|
|
+---
|
|
|
|
|
+
|
|
|
|
|
+### 四、扩展标签(Func)
|
|
|
|
|
+
|
|
|
|
|
+**通用基础结构**(多数扩展标签)
|
|
|
|
|
+
|
|
|
```json
|
|
```json
|
|
|
-{ "type": "set", "variable": "{name}", "value": "value" }
|
|
|
|
|
|
|
+{ "type": "标签名", "inVars": [], "outVars": [] }
|
|
|
```
|
|
```
|
|
|
|
|
|
|
|
-### 打印信息(echo)
|
|
|
|
|
|
|
+各扩展标签基础结构示例:
|
|
|
|
|
+
|
|
|
|
|
+- **fun**(method 为 func 目录下脚本名)
|
|
|
```json
|
|
```json
|
|
|
-{ "type": "echo", "value": "当前消息: {{lastMessage}}" }
|
|
|
|
|
|
|
+{ "type": "fun", "method": "脚本文件名", "inVars": [], "outVars": [] }
|
|
|
```
|
|
```
|
|
|
|
|
|
|
|
-或使用 `inVars`:
|
|
|
|
|
|
|
+- **ocr-chat** / **extract-messages** / **ocr-chat-history** / **extract-chat-history**
|
|
|
```json
|
|
```json
|
|
|
-{ "type": "echo", "inVars": ["{lastMessage}", "{lastRole}"] }
|
|
|
|
|
|
|
+{ "type": "ocr-chat", "inVars": ["(r,g,b)", "(r,g,b)", "区域坐标JSON"], "outVars": ["{chatHistory}"] }
|
|
|
```
|
|
```
|
|
|
|
|
|
|
|
-- `value`: 直接文本,支持 `{{variable}}` 格式的变量替换(双花括号用于字符串拼接)
|
|
|
|
|
-- `inVars`: 变量名数组,输出所有变量的值
|
|
|
|
|
|
|
+- **read-last-message**
|
|
|
|
|
+```json
|
|
|
|
|
+{ "type": "read-last-message", "inVars": ["{chatJson}"], "outVars": ["{text}", "{sender}"] }
|
|
|
|
|
+```
|
|
|
|
|
|
|
|
-> 注意:`log` 标签已废弃,请使用 `echo` 标签。
|
|
|
|
|
|
|
+- **smart-chat-append**
|
|
|
|
|
+```json
|
|
|
|
|
+{ "type": "smart-chat-append", "inVars": ["{history}", "{current}"], "outVars": ["{merged}"] }
|
|
|
|
|
+```
|
|
|
|
|
|
|
|
-### 随机数(random)
|
|
|
|
|
|
|
+- **read-txt** / **read-text**
|
|
|
```json
|
|
```json
|
|
|
-{
|
|
|
|
|
- "type": "random",
|
|
|
|
|
- "inVars": ["1", "100"],
|
|
|
|
|
- "outVars": ["{randomNum}"]
|
|
|
|
|
-}
|
|
|
|
|
|
|
+{ "type": "read-txt", "inVars": ["history/chat-history.txt"], "outVars": ["{content}"] }
|
|
|
```
|
|
```
|
|
|
|
|
|
|
|
-- `inVars[0]`: 最小值(字符串格式的数字或变量引用)
|
|
|
|
|
-- `inVars[1]`: 最大值(字符串格式的数字或变量引用)
|
|
|
|
|
-- `outVars[0]`: 输出变量(**`number` 类型**,可以是整数或小数)
|
|
|
|
|
|
|
+- **save-txt** / **save-text**
|
|
|
|
|
+```json
|
|
|
|
|
+{ "type": "save-txt", "inVars": ["{content}", "history/out.txt"], "outVars": [] }
|
|
|
|
|
+```
|
|
|
|
|
|
|
|
-**传统格式(已过时,建议使用上述格式):**
|
|
|
|
|
|
|
+- **img-center-point-location**
|
|
|
```json
|
|
```json
|
|
|
-{
|
|
|
|
|
- "type": "random",
|
|
|
|
|
- "variable": "num",
|
|
|
|
|
- "min": 1,
|
|
|
|
|
- "max": 100,
|
|
|
|
|
- "integer": true
|
|
|
|
|
-}
|
|
|
|
|
|
|
+{ "type": "img-center-point-location", "inVars": ["template.png"], "outVars": ["{pos}"] }
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+- **img-bounding-box-location**
|
|
|
|
|
+```json
|
|
|
|
|
+{ "type": "img-bounding-box-location", "inVars": ["ScreenShot.jpg", "ChatArea.png"], "outVars": ["{corners}"] }
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+- **img-cropping**
|
|
|
|
|
+```json
|
|
|
|
|
+{ "type": "img-cropping", "inVars": ["{areaJson}", "history/crop.png"], "outVars": [] }
|
|
|
```
|
|
```
|
|
|
|
|
|
|
|
-## 变量
|
|
|
|
|
-
|
|
|
|
|
-- 定义:`"variables": {"name": "value"}`
|
|
|
|
|
-- 使用:`"{name}"` 在字段中引用
|
|
|
|
|
-- 保存:`"outVars": ["{name}"]` 或 `"variable": "{name}"`
|
|
|
|
|
-- 类型:支持三种数据类型:
|
|
|
|
|
- - **`number`**:数值类型(整数或小数),例如:`1`、`3.14`、`-5.2`
|
|
|
|
|
- - **`string`**:字符串类型,例如:`"hello"`、`""`
|
|
|
|
|
- - **`bool`**:布尔类型,只能是 `true` 或 `false`(不是字符串)
|
|
|
|
|
-
|
|
|
|
|
-### 变量类型说明
|
|
|
|
|
-- 变量的类型由其初始值自动推断:
|
|
|
|
|
- - 如果初始值是数字(如 `1`、`3.14`),类型为 `number`
|
|
|
|
|
- - 如果初始值是字符串(如 `"text"`、`""`),类型为 `string`
|
|
|
|
|
- - 如果初始值是布尔值(如 `true`、`false`),类型为 `bool`
|
|
|
|
|
-- 示例:
|
|
|
|
|
- ```json
|
|
|
|
|
- {
|
|
|
|
|
- "variables": {
|
|
|
|
|
- "count": 0, // number 类型
|
|
|
|
|
- "message": "", // string 类型
|
|
|
|
|
- "isReady": false // bool 类型
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- ```
|
|
|
|
|
-
|
|
|
|
|
-## 时间格式
|
|
|
|
|
-
|
|
|
|
|
-- 间隔:`"1s"`, `"2m"`, `"3h"`
|
|
|
|
|
-- 日期:`"2026/1/14 01:21"`
|
|
|
|
|
-- 时间:`"09:00"`
|
|
|
|
|
-
|
|
|
|
|
-## 扩展标签
|
|
|
|
|
-
|
|
|
|
|
-扩展标签由 `src/pages/processing/func/` 目录下的脚本文件决定,每个脚本文件名即为标签名。
|
|
|
|
|
-
|
|
|
|
|
-常用标签:
|
|
|
|
|
-- `ocr-chat`: OCR识别对话内容
|
|
|
|
|
- - `inVars`: `[好友RGB颜色, 我的RGB颜色, 区域坐标]`(RGB格式:`"(r,g,b)"`,区域坐标:JSON字符串)
|
|
|
|
|
- - `outVars`: `[聊天记录变量]`(输出 chat-history.txt 格式的JSON字符串)
|
|
|
|
|
-- `read-last-message`: 读取最后一条消息(输出文本和发送者角色)
|
|
|
|
|
-- `smart-chat-append`: 智能合并历史聊天记录和当前聊天记录,自动检测并去除连续重合部分后返回新的聊天记录字符串
|
|
|
|
|
- - `inVars`: `[历史记录, 当前记录]`
|
|
|
|
|
- - `outVars`: `[合并后的记录]`
|
|
|
|
|
-- `read-txt`: 读取文本文件内容
|
|
|
|
|
- - `inVars`: `[文件路径]`(相对于工作流目录,如 `"history/chat-history.txt"`)
|
|
|
|
|
- - `outVars`: `[文件内容变量]`
|
|
|
|
|
-- `save-txt`: 保存字符串为文本文件
|
|
|
|
|
- - `inVars`: `[内容, 文件路径]`(路径相对于工作流目录)
|
|
|
|
|
- - `outVars`: `[]`
|
|
|
|
|
-- `img-center-point-location`: 图像中心点定位
|
|
|
|
|
- - `inVars`: `[模板图片路径]`(相对于工作流目录的 resources 文件夹)
|
|
|
|
|
- - `outVars`: `[位置坐标变量]`(输出JSON字符串格式:`{"x":123,"y":456}`)
|
|
|
|
|
-- `img-bounding-box-location`: 图像区域定位(在完整截图中查找区域图片的位置)
|
|
|
|
|
- - `inVars`: `[截图路径, 区域图片路径]`(都相对于工作流目录的 resources 文件夹,如 `"ScreenShot.jpg"` 和 `"ChatArea.png"`)
|
|
|
|
|
- - `outVars`: `[区域坐标变量]`(返回四个顶点坐标:`{topLeft: {x, y}, topRight: {x, y}, bottomLeft: {x, y}, bottomRight: {x, y}}`)
|
|
|
|
|
- - 注意:此标签**不主动截图**,使用 `resources/` 文件夹下已有的截图文件进行匹配
|
|
|
|
|
-- `img-cropping`: 图像区域裁剪(从当前屏幕截图裁剪指定区域)
|
|
|
|
|
- - `inVars`: `[区域坐标, 保存路径]`(区域坐标:JSON字符串格式,保存路径相对于工作流目录的 history 文件夹)
|
|
|
|
|
- - `outVars`: `[]`
|
|
|
|
|
- - 功能:从主进程缓存获取最新截图,保存到 `history/ScreenShot.jpg`,然后根据区域坐标裁剪并保存到指定路径
|
|
|
|
|
|
|
+- **ai-generate**
|
|
|
|
|
+```json
|
|
|
|
|
+{ "type": "ai-generate", "prompt": "请总结:{{input}}", "inVars": ["{input}"], "outVars": ["{result}"] }
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+- **string-press**
|
|
|
|
|
+```json
|
|
|
|
|
+{ "type": "string-press", "inVars": ["确定"], "outVars": [] }
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+---
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|