@honor-claw/yoyo 1.5.0-beta.1 → 1.5.0-beta.3
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/utils/version.mjs +2 -2
- package/package.json +1 -1
- package/skills/yoyo-control/SKILL.md +6 -0
- package/skills/yoyo-control/references/gui-task-create.md +222 -0
- package/skills/yoyo-control/references/gui-task-pause.md +188 -0
- package/skills/yoyo-control/references/gui-task-terminate.md +192 -0
- package/skills/yoyo-update/SKILL.md +48 -159
package/dist/utils/version.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
//#region src/utils/version.ts
|
|
2
2
|
var e = null, t = null;
|
|
3
3
|
function n() {
|
|
4
|
-
return e === null && (e = "1.5.0-beta.
|
|
4
|
+
return e === null && (e = "1.5.0-beta.3".includes("beta") || "1.5.0-beta.3".includes("alpha")), !!e;
|
|
5
5
|
}
|
|
6
6
|
function r(e) {
|
|
7
7
|
if (!e) return 0;
|
|
@@ -10,7 +10,7 @@ function r(e) {
|
|
|
10
10
|
}
|
|
11
11
|
function i() {
|
|
12
12
|
if (t !== null) return t;
|
|
13
|
-
let [e, n, i] = "1.5.0-beta.
|
|
13
|
+
let [e, n, i] = "1.5.0-beta.3".split("-", 1)[0].split("."), a = r(e), o = r(n), s = r(i);
|
|
14
14
|
return t = a * 1e6 + o * 1e3 + s, t;
|
|
15
15
|
}
|
|
16
16
|
//#endregion
|
package/package.json
CHANGED
|
@@ -3,6 +3,7 @@ name: yoyo_phone_control
|
|
|
3
3
|
description: >
|
|
4
4
|
通过YOYO操作手机系统用机功能,包括打开/关闭/卸载应用、发送/查找短信、拨打电话、搜索联系人、搜索通话记录、创建/打开/查询/关闭/删除闹钟、创建/添加/新建日程、计时器管理、录音、截屏、屏幕录制、调节音量、屏幕亮度调节、切换响铃/静音/勿扰/护眼/深色/飞行模式、管理移动数据或热点或蓝牙或WLAN、进行本地内容搜索、文件发送、调用相机拍照/录像、电池状态/电量查询与、开启/关闭定位服务、开启/关闭NFC功能、开启/关闭自动亮屏功能、USB共享网络、设备电源状态与屏幕状态控制、状态栏显示信息管理与控制、进行扫码操作、控制手机的手电筒、清理和维护设备扬声器、机票监控、查快递等。
|
|
5
5
|
支持与手机系统用机交互的相关操作。
|
|
6
|
+
此外,还支持完成在用户指定App应用内进行GUI操作。
|
|
6
7
|
metadata: { "openclaw": { "emoji": "📱", "always": true } }
|
|
7
8
|
---
|
|
8
9
|
|
|
@@ -35,6 +36,7 @@ metadata: { "openclaw": { "emoji": "📱", "always": true } }
|
|
|
35
36
|
- 参数必须为合法 JSON,枚举值区分大小写,数值在定义范围内
|
|
36
37
|
- 当工具执行错误时,必须确认下发的指令是否存在格式问题,尤其是单双引号的使用问题
|
|
37
38
|
- 如果执行失败,必须重新读取 `SKILL.md` 和对应的工具定义文件,然后重新执行
|
|
39
|
+
- 禁止使用GUI工具作为兜底工具,除非用户明确要求在指定 App 内执行指定动作
|
|
38
40
|
- 绝对不能使用任何其他设备的工具
|
|
39
41
|
- 不要尝试任何其他方式完成任务,不要提供替代方案
|
|
40
42
|
- **Never try a different approach**
|
|
@@ -82,6 +84,7 @@ metadata: { "openclaw": { "emoji": "📱", "always": true } }
|
|
|
82
84
|
4. **如果 Sub-Skill 和 MCP 均无匹配**:
|
|
83
85
|
- 告知用户暂不支持该功能
|
|
84
86
|
- 终止本次操作
|
|
87
|
+
- 严禁使用 GUI 工具作为备选工具
|
|
85
88
|
|
|
86
89
|
#### Sub-Skill 工具参考表
|
|
87
90
|
|
|
@@ -129,6 +132,9 @@ metadata: { "openclaw": { "emoji": "📱", "always": true } }
|
|
|
129
132
|
| `battery` | `references/battery.md` | 电量与省电模式管理 |
|
|
130
133
|
| `audio-record` | `references/audio-record.md` | 录音管理 |
|
|
131
134
|
| `camera` | `references/camera.md` | 相机控制(拍照/录像),不支持手电筒相关的操作。 |
|
|
135
|
+
| `gui` | `references/gui-task-create.md` | 启动 GUI 操作任务(UI Agent),只有当用户明确要求在指定 App 内执行指定动作时才使用。如果用户没有提供应用名,严禁使用本工具。|
|
|
136
|
+
| `gui` | `references/gui-task-terminate.md` | 取消 GUI 任务 |
|
|
137
|
+
| `gui` | `references/gui-task-pause.md` | 暂停 GUI 任务 |
|
|
132
138
|
| `scan-code` | `references/scan-code.md` | 扫码(二维码/条形码) |
|
|
133
139
|
| `flashlight` | `references/flashlight.md` | 手电筒控制 |
|
|
134
140
|
| `airplane-mode` | `references/airplane-mode.md` | 飞行模式管理 |
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: gui.create
|
|
3
|
+
description: >
|
|
4
|
+
启动基于 GUI 的应用操作任务(UI Agent)。用于在手机上对指定 App 发起一次独立的操控流程;多 App 或含条件的流程需拆分为多次调用,续办需携带上次任务的 task_id。
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Gui Task Create GUI 任务创建
|
|
8
|
+
|
|
9
|
+
## Tool Command
|
|
10
|
+
```bash
|
|
11
|
+
gui.create
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
## 3. 业务规则
|
|
15
|
+
|
|
16
|
+
### 适用场景及操作流程
|
|
17
|
+
1. 针对单一 App 的一次性 GUI 操作任务,直接发起调用
|
|
18
|
+
2. 涉及多个 App 的连续操作需拆分为多个独立任务,逐个调用
|
|
19
|
+
3. 涉及条件判断(如“若…则…”)时,将条件判断与执行任务拆分为两次调用
|
|
20
|
+
4. 若为对未结束任务的补充/修改/继续,需在请求中补充对应的 task_id
|
|
21
|
+
|
|
22
|
+
### 特定交互
|
|
23
|
+
- 当用户表达“继续/接着/沿用上次”等续办意图时,应查找并填写上一未结束任务的 task_id
|
|
24
|
+
- 用户 query 中提及多个 App 时需与用户确认目标 App 后再调用
|
|
25
|
+
- task_query 应尽量保持用户原始指令表述,避免改写
|
|
26
|
+
|
|
27
|
+
## 集成工作流
|
|
28
|
+
|
|
29
|
+
### Step 1: 意图解析与参数组装
|
|
30
|
+
```
|
|
31
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
32
|
+
│ 意图识别与参数提取 │
|
|
33
|
+
│ - 识别操作意图: 创建/发起 + GUI 应用操作任务 │
|
|
34
|
+
│ - 提取应用名称: 官方名/通用别称/拼音 │
|
|
35
|
+
│ - 提取任务指令: 包含明确操作步骤或目标 │
|
|
36
|
+
│ - 判断是否为续办: 根据“继续/接着/上次”等上下文 │
|
|
37
|
+
│ - 特殊处理: query 含多个App时确定目标应用 │
|
|
38
|
+
└─────────────────────────────────────────────────────────────┘
|
|
39
|
+
↓
|
|
40
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
41
|
+
│ 消歧与槽位填充 │
|
|
42
|
+
│ - 未指定应用名称时,需向用户追问app_name │
|
|
43
|
+
│ - 未提供任务指令时,需向用户追问task_query │
|
|
44
|
+
│ - 多个应用候选时,需追问或让用户选择其一 │
|
|
45
|
+
│ - task_id仅当为未结束任务的更新/补充时填写 │
|
|
46
|
+
│ - "继续/接着/上次那个" → 映射为续办并查找task_id │
|
|
47
|
+
│ - 验证应用名称有效性(是否可被唤起) │
|
|
48
|
+
└─────────────────────────────────────────────────────────────┘
|
|
49
|
+
↓
|
|
50
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
51
|
+
│ 生成工具调用 │
|
|
52
|
+
│ - 组装 app_name, task_query 及可选参数(task_id) │
|
|
53
|
+
│ - 生成平台特定的命令格式 │
|
|
54
|
+
└─────────────────────────────────────────────────────────────┘
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### Step 2: 执行调用
|
|
58
|
+
- 根据操作系统选择对应的命令格式
|
|
59
|
+
- Windows: Cmd 格式(双引号需转义)
|
|
60
|
+
- Linux: Bash 格式(单引号包裹)
|
|
61
|
+
|
|
62
|
+
## 参数定义
|
|
63
|
+
```json
|
|
64
|
+
{
|
|
65
|
+
"app_name": {
|
|
66
|
+
"type": "string",
|
|
67
|
+
"description": "必填参数,需要执行该任务的app名称"
|
|
68
|
+
},
|
|
69
|
+
"task_query": {
|
|
70
|
+
"type": "string",
|
|
71
|
+
"description": "必填参数,需要让GUI执行的任务的明确query,通常为一个包含app名称的指令性query"
|
|
72
|
+
},
|
|
73
|
+
"task_id": {
|
|
74
|
+
"type": "string",
|
|
75
|
+
"description": "任务id,当前query为gui执行,且是对上一个未结束的gui任务的更新、补充,那么则将上一个未结束的gui任务的task_id填入"
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
### 参数注意事项
|
|
81
|
+
1. `task_query` 应尽量保持用户原始意图,并将其改写成包含app名称的指令性query,或明确的gui操作指令。
|
|
82
|
+
2. **同义词/间接表述映射**: “用X/在X里/打开X然后…”均映射为识别 `app_name`=X;“继续/接着/上次那个”映射为续办语义,需要填写 `task_id`。
|
|
83
|
+
3. **默认值或缺省行为**: `app_name` 与 `task_query` 为必填,无默认值,如果缺失则需要追问用户;新增任务场景下 `task_id` 留空或不填写。
|
|
84
|
+
4. **参数间关联/依赖**: `task_query` 通常包含 App 名称,但仍须单独提供 `app_name`;续办场景中 `task_id` 与所指任务保持一致。
|
|
85
|
+
5. **可选参数填写条件**: 仅当用户明确为未结束任务的更新/补充/继续时才填写 `task_id`,否则不传。
|
|
86
|
+
|
|
87
|
+
## Query 示例及输出
|
|
88
|
+
|
|
89
|
+
### 示例 1: 在携程查询最便宜的机票(新增任务)
|
|
90
|
+
|
|
91
|
+
**用户输入**: "帮我在携程查询一下从上海去北京最便宜的机票"
|
|
92
|
+
|
|
93
|
+
**工具**: "gui.create"
|
|
94
|
+
|
|
95
|
+
**JSON 参数**:
|
|
96
|
+
```json
|
|
97
|
+
{
|
|
98
|
+
"app_name": "携程",
|
|
99
|
+
"task_query": "帮我在携程查询一下从上海去北京最便宜的机票"
|
|
100
|
+
}
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
**Windows (Cmd) 执行命令**:
|
|
104
|
+
```bash
|
|
105
|
+
cmd /c 'openclaw nodes invoke --node <ID> --command gui.create --params "{\"app_name\":\"携程\",\"task_query\":\"帮我在携程查询一下从上海去北京最便宜的机票\"}"'
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
**Linux (Bash) 执行命令**:
|
|
109
|
+
```bash
|
|
110
|
+
openclaw nodes invoke --node <ID> --command gui.create --params '{"app_name":"携程","task_query":"帮我在携程查询一下从上海去北京最便宜的机票"}'
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
---
|
|
114
|
+
|
|
115
|
+
### 示例 2: 用汽水音乐识别当前音乐(新增任务)
|
|
116
|
+
|
|
117
|
+
**用户输入**: "用汽水音乐帮我识别一下这个是什么音乐"
|
|
118
|
+
|
|
119
|
+
**工具**: "gui.create"
|
|
120
|
+
|
|
121
|
+
**JSON 参数**:
|
|
122
|
+
```json
|
|
123
|
+
{
|
|
124
|
+
"app_name": "汽水音乐",
|
|
125
|
+
"task_query": "使用汽水音乐听歌识曲,识别当前的音乐"
|
|
126
|
+
}
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
**Windows (Cmd) 执行命令**:
|
|
130
|
+
```bash
|
|
131
|
+
cmd /c 'openclaw nodes invoke --node <ID> --command gui.create --params "{\"app_name\":\"汽水音乐\",\"task_query\":\"使用汽水音乐听歌识曲,识别当前的音乐\"}"'
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
**Linux (Bash) 执行命令**:
|
|
135
|
+
```bash
|
|
136
|
+
openclaw nodes invoke --node <ID> --command gui.create --params '{"app_name":"汽水音乐","task_query":"使用汽水音乐听歌识曲,识别当前的音乐"}'
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
---
|
|
140
|
+
|
|
141
|
+
### 示例 3: 继续上次在高德地图的导航并修改目的地(续办,带 task_id)
|
|
142
|
+
|
|
143
|
+
**用户输入**: "接着刚才在高德地图的导航,把目的地改成北京南站"
|
|
144
|
+
|
|
145
|
+
**工具**: "gui.create"
|
|
146
|
+
|
|
147
|
+
**JSON 参数**:
|
|
148
|
+
```json
|
|
149
|
+
{
|
|
150
|
+
"app_name": "高德地图",
|
|
151
|
+
"task_query": "继续在高德地图进行导航,将目的地改为北京南站",
|
|
152
|
+
"task_id": "prev-task-id-001"
|
|
153
|
+
}
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
**Windows (Cmd) 执行命令**:
|
|
157
|
+
```bash
|
|
158
|
+
cmd /c 'openclaw nodes invoke --node <ID> --command gui.create --params "{\"app_name\":\"高德地图\",\"task_query\":\"继续在高德地图进行导航,将目的地改为北京南站\",\"task_id\":\"prev-task-id-001\"}"'
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
**Linux (Bash) 执行命令**:
|
|
162
|
+
```bash
|
|
163
|
+
openclaw nodes invoke --node <ID> --command gui.create --params '{"app_name":"高德地图","task_query":"继续在高德地图进行导航,将目的地改为北京南站","task_id":"prev-task-id-001"}'
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
---
|
|
167
|
+
|
|
168
|
+
### 示例 4: 在淘宝将指定商品加入购物车(新增任务)
|
|
169
|
+
|
|
170
|
+
**用户输入**: "在淘宝把羽绒服加入购物车"
|
|
171
|
+
|
|
172
|
+
**工具**: "gui.create"
|
|
173
|
+
|
|
174
|
+
**JSON 参数**:
|
|
175
|
+
```json
|
|
176
|
+
{
|
|
177
|
+
"app_name": "淘宝",
|
|
178
|
+
"task_query": "在淘宝将“羽绒服”加入购物车"
|
|
179
|
+
}
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
**Windows (Cmd) 执行命令**:
|
|
183
|
+
```bash
|
|
184
|
+
cmd /c 'openclaw nodes invoke --node <ID> --command gui.create --params "{\"app_name\":\"淘宝\",\"task_query\":\"在淘宝将“羽绒服”加入购物车\"}"'
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
**Linux (Bash) 执行命令**:
|
|
188
|
+
```bash
|
|
189
|
+
openclaw nodes invoke --node <ID> --command gui.create --params '{"app_name":"淘宝","task_query":"在淘宝将“羽绒服”加入购物车"}'
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
---
|
|
193
|
+
|
|
194
|
+
### 示例 5: 在系统设置中关闭蓝牙(新增任务)
|
|
195
|
+
|
|
196
|
+
**用户输入**: "打开设置把蓝牙关闭"
|
|
197
|
+
|
|
198
|
+
**工具**: "gui.create"
|
|
199
|
+
|
|
200
|
+
**JSON 参数**:
|
|
201
|
+
```json
|
|
202
|
+
{
|
|
203
|
+
"app_name": "设置",
|
|
204
|
+
"task_query": "在设置中关闭蓝牙"
|
|
205
|
+
}
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
**Windows (Cmd) 执行命令**:
|
|
209
|
+
```bash
|
|
210
|
+
cmd /c 'openclaw nodes invoke --node <ID> --command gui.create --params "{\"app_name\":\"设置\",\"task_query\":\"在设置中关闭蓝牙\"}"'
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
**Linux (Bash) 执行命令**:
|
|
214
|
+
```bash
|
|
215
|
+
openclaw nodes invoke --node <ID> --command gui.create --params '{"app_name":"设置","task_query":"在设置中关闭蓝牙"}'
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
---
|
|
219
|
+
|
|
220
|
+
**注意**:
|
|
221
|
+
- 返回给用户的回复话术严禁包含完整的 `task_id`,以免泄露隐私。
|
|
222
|
+
- 回复话术使用简短的task_id,且task_id不能被特殊字符包裹,例如:成功创建了任务55cd5faf-2871-468c-86bc-415b24ee0cc4,应该返回的回复话术为:✅ GUI 任务已启动,正在规划中。\n📋 任务 ID:55cd5faf
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: gui.pause
|
|
3
|
+
description: >
|
|
4
|
+
GUI 任务暂停工具。用于暂停由 gui_task_create 创建且正在执行中的 GUI 任务(UI Agent 接口)。
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Gui Task Pause GUI任务暂停
|
|
8
|
+
|
|
9
|
+
## Tool Command
|
|
10
|
+
```bash
|
|
11
|
+
gui.pause
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
## 集成工作流
|
|
15
|
+
|
|
16
|
+
### Step 1: 意图解析与参数组装
|
|
17
|
+
```
|
|
18
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
19
|
+
│ 意图识别与参数提取 │
|
|
20
|
+
│ - 识别操作意图: 暂停 + GUI任务 │
|
|
21
|
+
│ - 提取任务标识: 从会话上下文获取上一个未结束的 task_id │
|
|
22
|
+
│ - 判断任务上下文: 如无未结束任务需提示或追问 │
|
|
23
|
+
│ - 提取修饰词: 用户表述中的时间性短语不影响暂停意图 │
|
|
24
|
+
│ - 特殊处理: "暂停/先停一下/稍后继续/先别动"等同义词统一识别 │
|
|
25
|
+
└─────────────────────────────────────────────────────────────┘
|
|
26
|
+
↓
|
|
27
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
28
|
+
│ 消歧与槽位填充 │
|
|
29
|
+
│ - 未指定 task_id 时,默认为上一个未结束的 GUI 任务 │
|
|
30
|
+
│ - 无可用任务时,需向用户追问具体 task_id 或返回不可暂停 │
|
|
31
|
+
│ - "先暂停一下/停一停" → 映射为暂停操作 │
|
|
32
|
+
│ - 验证任务状态: 仅当任务处于执行中方可暂停 │
|
|
33
|
+
│ - 特殊约束: query 保持用户原始输入,严禁改写 │
|
|
34
|
+
└─────────────────────────────────────────────────────────────┘
|
|
35
|
+
↓
|
|
36
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
37
|
+
│ 生成工具调用 │
|
|
38
|
+
│ - 组装 task_id 及可选参数(无) │
|
|
39
|
+
│ - 生成平台特定的命令格式 │
|
|
40
|
+
└─────────────────────────────────────────────────────────────┘
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
### Step 2: 执行调用
|
|
44
|
+
- 根据操作系统选择对应的命令格式
|
|
45
|
+
- Windows: Cmd 格式(双引号需转义)
|
|
46
|
+
- Linux: Bash 格式(单引号包裹)
|
|
47
|
+
|
|
48
|
+
## 参数定义
|
|
49
|
+
```json
|
|
50
|
+
{
|
|
51
|
+
"task_id": {
|
|
52
|
+
"type": "string",
|
|
53
|
+
"description": "必填参数,任务id,当前query为gui执行,且是对上一个未结束的gui任务的更新、补充,那么则将上一个未结束的gui任务的task_id填入"
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
### 参数注意事项
|
|
59
|
+
1. **同义词/间接表述映射**: 用户表述如`“暂停”/“先暂停一下”/“停一下”/“稍后继续”/“先别动”`均识别为暂停操作,对应调用本工具并填充`task_id`。
|
|
60
|
+
2. **默认值或缺省行为**: 未显式提供`task_id`时,默认使用“上一个未结束的 GUI 任务”的`task_id`;若不存在此类任务,应向用户追问或返回不可暂停。
|
|
61
|
+
3. **参数间关联/依赖**: 仅可暂停由`gui_task_create`创建且处于执行中的任务;`task_id`若对应已完成或已取消的任务,应进行状态校验并提示无法暂停。
|
|
62
|
+
4. **格式/原样保留要求**: `task_id`需精确传递为系统返回的原始字符串,不得改写、截断或格式化。
|
|
63
|
+
|
|
64
|
+
## Query 示例及输出
|
|
65
|
+
|
|
66
|
+
### 示例 1: 暂停后台执行中的任务(已知任务ID)
|
|
67
|
+
**用户输入**: "暂停后台的应用操作"
|
|
68
|
+
|
|
69
|
+
**工具**: "gui.pause"
|
|
70
|
+
|
|
71
|
+
**JSON 参数**:
|
|
72
|
+
```json
|
|
73
|
+
{
|
|
74
|
+
"task_id": "1234567890"
|
|
75
|
+
}
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
**Windows (Cmd) 执行命令**:
|
|
79
|
+
```bash
|
|
80
|
+
cmd /c 'openclaw nodes invoke --node <ID> --command gui.pause --params "{\\"task_id\\":\\"1234567890\\"}"'
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
**Linux (Bash) 执行命令**:
|
|
84
|
+
```bash
|
|
85
|
+
openclaw nodes invoke --node <ID> --command gui.pause --params '{"task_id":"1234567890"}'
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
### 示例 2: 暂停当前GUI执行(使用上一个未结束任务)
|
|
91
|
+
**用户输入**: "先暂停当前的GUI执行"
|
|
92
|
+
|
|
93
|
+
**工具**: "gui.pause"
|
|
94
|
+
|
|
95
|
+
**JSON 参数**:
|
|
96
|
+
```json
|
|
97
|
+
{
|
|
98
|
+
"task_id": "gui-20240408-01"
|
|
99
|
+
}
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
**Windows (Cmd) 执行命令**:
|
|
103
|
+
```bash
|
|
104
|
+
cmd /c 'openclaw nodes invoke --node <ID> --command gui.pause --params "{\\"task_id\\":\\"gui-20240408-01\\"}"'
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
**Linux (Bash) 执行命令**:
|
|
108
|
+
```bash
|
|
109
|
+
openclaw nodes invoke --node <ID> --command gui.pause --params '{"task_id":"gui-20240408-01"}'
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
### 示例 3: 暂停自动化点按流程
|
|
115
|
+
**用户输入**: "把刚才的自动化点按流程停一下"
|
|
116
|
+
|
|
117
|
+
**工具**: "gui.pause"
|
|
118
|
+
|
|
119
|
+
**JSON 参数**:
|
|
120
|
+
```json
|
|
121
|
+
{
|
|
122
|
+
"task_id": "task_98765"
|
|
123
|
+
}
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
**Windows (Cmd) 执行命令**:
|
|
127
|
+
```bash
|
|
128
|
+
cmd /c 'openclaw nodes invoke --node <ID> --command gui.pause --params "{\\"task_id\\":\\"task_98765\\"}"'
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
**Linux (Bash) 执行命令**:
|
|
132
|
+
```bash
|
|
133
|
+
openclaw nodes invoke --node <ID> --command gui.pause --params '{"task_id":"task_98765"}'
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
---
|
|
137
|
+
|
|
138
|
+
### 示例 4: 暂停,待命令再继续
|
|
139
|
+
**用户输入**: "先别动,等我说继续再跑"
|
|
140
|
+
|
|
141
|
+
**工具**: "gui.pause"
|
|
142
|
+
|
|
143
|
+
**JSON 参数**:
|
|
144
|
+
```json
|
|
145
|
+
{
|
|
146
|
+
"task_id": "t-001"
|
|
147
|
+
}
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
**Windows (Cmd) 执行命令**:
|
|
151
|
+
```bash
|
|
152
|
+
cmd /c 'openclaw nodes invoke --node <ID> --command gui.pause --params "{\\"task_id\\":\\"t-001\\"}"'
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
**Linux (Bash) 执行命令**:
|
|
156
|
+
```bash
|
|
157
|
+
openclaw nodes invoke --node <ID> --command gui.pause --params '{"task_id":"t-001"}'
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
---
|
|
161
|
+
|
|
162
|
+
### 示例 5: 暂停指定应用场景的GUI任务
|
|
163
|
+
**用户输入**: "暂停抖音店铺浏览任务"
|
|
164
|
+
|
|
165
|
+
**工具**: "gui.pause"
|
|
166
|
+
|
|
167
|
+
**JSON 参数**:
|
|
168
|
+
```json
|
|
169
|
+
{
|
|
170
|
+
"task_id": "9f2a1c3e"
|
|
171
|
+
}
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
**Windows (Cmd) 执行命令**:
|
|
175
|
+
```bash
|
|
176
|
+
cmd /c 'openclaw nodes invoke --node <ID> --command gui.pause --params "{\\"task_id\\":\\"9f2a1c3e\\"}"'
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
**Linux (Bash) 执行命令**:
|
|
180
|
+
```bash
|
|
181
|
+
openclaw nodes invoke --node <ID> --command gui.pause --params '{"task_id":"9f2a1c3e"}'
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
---
|
|
185
|
+
|
|
186
|
+
**注意**:
|
|
187
|
+
- 返回给用户的回复话术严禁包含完整的 `task_id`,以免泄露隐私。
|
|
188
|
+
- 回复话术使用简短的task_id,且task_id不能被特殊字符包裹,例如:成功暂停了任务55cd5faf-2871-468c-86bc-415b24ee0cc4,应该返回的回复话术为:✅ GUI 任务(55cd5faf)已暂停。
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: gui.terminate
|
|
3
|
+
description: >
|
|
4
|
+
GUI 任务取消工具。用于通过 UI Agent 取消由 gui_task_create 创建且正在执行的 GUI 任务。
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Gui Task Terminate GUI 任务取消
|
|
8
|
+
|
|
9
|
+
## Tool Command
|
|
10
|
+
```bash
|
|
11
|
+
gui.terminate
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
## 集成工作流
|
|
15
|
+
|
|
16
|
+
### Step 1: 意图解析与参数组装
|
|
17
|
+
```
|
|
18
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
19
|
+
│ 意图识别与参数提取 │
|
|
20
|
+
│ - 识别操作意图: 取消 + GUI 任务 │
|
|
21
|
+
│ - 提取任务ID: 从上下文获取上一个未结束 GUI 任务的 task_id │
|
|
22
|
+
│ - 判断场景: 当前是否为对上一个未结束 GUI 任务的更新/补充 │
|
|
23
|
+
│ - 特殊处理: "取消/停止/终止/结束/中止/打断/别做了" 等同义词│
|
|
24
|
+
│ 统一识别 │
|
|
25
|
+
└─────────────────────────────────────────────────────────────┘
|
|
26
|
+
↓
|
|
27
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
28
|
+
│ 消歧与槽位填充 │
|
|
29
|
+
│ - 未指定task_id且存在唯一未结束任务时,默认为该任务 │
|
|
30
|
+
│ - task_id缺失且无法从上下文确定时,需向用户追问要取消的任务│
|
|
31
|
+
│ - "停止/终止/结束/打断/不要了" → 映射为取消操作 │
|
|
32
|
+
│ - task_id需为非空字符串,若无效需提示用户 │
|
|
33
|
+
│ - query保持用户原始输入,严禁改写 │
|
|
34
|
+
└─────────────────────────────────────────────────────────────┘
|
|
35
|
+
↓
|
|
36
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
37
|
+
│ 生成工具调用 │
|
|
38
|
+
│ - 组装 task_id 及可选参数(无) │
|
|
39
|
+
│ - 生成平台特定的命令格式 │
|
|
40
|
+
└─────────────────────────────────────────────────────────────┘
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
### Step 2: 执行调用
|
|
44
|
+
- 根据操作系统选择对应的命令格式
|
|
45
|
+
- Windows: Cmd 格式(双引号需转义)
|
|
46
|
+
- Linux: Bash 格式(单引号包裹)
|
|
47
|
+
|
|
48
|
+
## 参数定义
|
|
49
|
+
```json
|
|
50
|
+
{
|
|
51
|
+
"task_id": {
|
|
52
|
+
"type": "string",
|
|
53
|
+
"description": "必填参数,任务id,当前query为gui执行,且是对上一个未结束的gui任务的更新、补充,那么则将上一个未结束的gui任务的task_id填入"
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
### 参数注意事项
|
|
59
|
+
1. **同义词/间接表述映射**: 用户口语化表述如“取消/停止/终止/结束/中止/打断/别做了/不要了”均视为取消当前 GUI 任务,映射到填写`task_id`并调用本工具。
|
|
60
|
+
2. **默认值或缺省行为**: 当存在唯一未结束的 GUI 任务且用户未显式提供`task_id`时,默认使用该任务的`task_id`进行取消。
|
|
61
|
+
3. **参数依赖与来源**: `task_id`通常来源于由`gui_task_create`创建的最近未结束任务的上下文;如有多个未结束任务,必须让用户明确指定目标任务。
|
|
62
|
+
|
|
63
|
+
## Query 示例及输出
|
|
64
|
+
|
|
65
|
+
### 示例 1: 取消正在进行的后台应用操作
|
|
66
|
+
|
|
67
|
+
**用户输入**: "取消后台的应用操作"
|
|
68
|
+
|
|
69
|
+
**工具**: "gui.terminate"
|
|
70
|
+
|
|
71
|
+
**JSON 参数**:
|
|
72
|
+
```json
|
|
73
|
+
{
|
|
74
|
+
"task_id": "1234567890"
|
|
75
|
+
}
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
**Windows (Cmd) 执行命令**:
|
|
79
|
+
```bash
|
|
80
|
+
cmd /c 'openclaw nodes invoke --node <ID> --command gui.terminate --params "{\"task_id\":\"1234567890\"}"'
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
**Linux (Bash) 执行命令**:
|
|
84
|
+
```bash
|
|
85
|
+
openclaw nodes invoke --node <ID> --command gui.terminate --params '{"task_id":"1234567890"}'
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
### 示例 2: 用户切换任务,终止上个 GUI 操作
|
|
91
|
+
|
|
92
|
+
**用户输入**: "直接做下一个任务"
|
|
93
|
+
|
|
94
|
+
**工具**: "gui.terminate"
|
|
95
|
+
|
|
96
|
+
**JSON 参数**:
|
|
97
|
+
```json
|
|
98
|
+
{
|
|
99
|
+
"task_id": "1234567890"
|
|
100
|
+
}
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
**Windows (Cmd) 执行命令**:
|
|
104
|
+
```bash
|
|
105
|
+
cmd /c 'openclaw nodes invoke --node <ID> --command gui.terminate --params "{\"task_id\":\"1234567890\"}"'
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
**Linux (Bash) 执行命令**:
|
|
109
|
+
```bash
|
|
110
|
+
openclaw nodes invoke --node <ID> --command gui.terminate --params '{"task_id":"1234567890"}'
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
---
|
|
114
|
+
|
|
115
|
+
### 示例 3: 口语化表达终止操作
|
|
116
|
+
|
|
117
|
+
**用户输入**: "把刚才的 GUI 操作停一下"
|
|
118
|
+
|
|
119
|
+
**工具**: "gui.terminate"
|
|
120
|
+
|
|
121
|
+
**JSON 参数**:
|
|
122
|
+
```json
|
|
123
|
+
{
|
|
124
|
+
"task_id": "9876543210"
|
|
125
|
+
}
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
**Windows (Cmd) 执行命令**:
|
|
129
|
+
```bash
|
|
130
|
+
cmd /c 'openclaw nodes invoke --node <ID> --command gui.terminate --params "{\"task_id\":\"9876543210\"}"'
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
**Linux (Bash) 执行命令**:
|
|
134
|
+
```bash
|
|
135
|
+
openclaw nodes invoke --node <ID> --command gui.terminate --params '{"task_id":"9876543210"}'
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
---
|
|
139
|
+
|
|
140
|
+
### 示例 4: 指代“上个任务”的场景
|
|
141
|
+
|
|
142
|
+
**用户输入**: "中止上个图形化任务"
|
|
143
|
+
|
|
144
|
+
**工具**: "gui.terminate"
|
|
145
|
+
|
|
146
|
+
**JSON 参数**:
|
|
147
|
+
```json
|
|
148
|
+
{
|
|
149
|
+
"task_id": "task-abc-001"
|
|
150
|
+
}
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
**Windows (Cmd) 执行命令**:
|
|
154
|
+
```bash
|
|
155
|
+
cmd /c 'openclaw nodes invoke --node <ID> --command gui.terminate --params "{\"task_id\":\"task-abc-001\"}"'
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
**Linux (Bash) 执行命令**:
|
|
159
|
+
```bash
|
|
160
|
+
openclaw nodes invoke --node <ID> --command gui.terminate --params '{"task_id":"task-abc-001"}'
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
---
|
|
164
|
+
|
|
165
|
+
### 示例 5: 结束刚才的自动执行
|
|
166
|
+
|
|
167
|
+
**用户输入**: "结束刚才的自动操作"
|
|
168
|
+
|
|
169
|
+
**工具**: "gui.terminate"
|
|
170
|
+
|
|
171
|
+
**JSON 参数**:
|
|
172
|
+
```json
|
|
173
|
+
{
|
|
174
|
+
"task_id": "last-gui-0001"
|
|
175
|
+
}
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
**Windows (Cmd) 执行命令**:
|
|
179
|
+
```bash
|
|
180
|
+
cmd /c 'openclaw nodes invoke --node <ID> --command gui.terminate --params "{\"task_id\":\"last-gui-0001\"}"'
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
**Linux (Bash) 执行命令**:
|
|
184
|
+
```bash
|
|
185
|
+
openclaw nodes invoke --node <ID> --command gui.terminate --params '{"task_id":"last-gui-0001"}'
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
---
|
|
189
|
+
|
|
190
|
+
**注意**:
|
|
191
|
+
- 返回给用户的回复话术严禁包含完整的 `task_id`,以免泄露隐私。
|
|
192
|
+
- 回复话术使用简短的task_id,且task_id不能被特殊字符包裹,例如:成功终止了任务55cd5faf-2871-468c-86bc-415b24ee0cc4,应该返回的回复话术为:✅ GUI 任务(55cd5faf)已终止。
|
|
@@ -1,112 +1,50 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: yoyo-update
|
|
3
3
|
description: >
|
|
4
|
-
更新 YOYO
|
|
4
|
+
更新 YOYO 插件到最新版本。当用户说“升级 YOYO Claw 插件到最新版本”,或要求更新、升级 yoyo 插件,或检查 yoyo 插件版本更新时触发。
|
|
5
5
|
metadata: { "openclaw": { "emoji": "🔄", "always": true } }
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
# YOYO 插件更新
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
严格按下面顺序执行。不要输出步骤名、命令、判断过程或额外解释;只输出本文写明的用户可见文案。所有输出使用中文。
|
|
11
11
|
|
|
12
|
-
##
|
|
12
|
+
## 禁止事项
|
|
13
13
|
|
|
14
|
-
-
|
|
15
|
-
-
|
|
16
|
-
-
|
|
17
|
-
- [MANDATORY] 所有面向用户的输出必须使用中文
|
|
18
|
-
- [MANDATORY] 不支持精确版本号安装的插件自动升级;检测到精确版本号时必须停止流程并提示用户自行更新插件
|
|
19
|
-
- [MANDATORY] 执行 `openclaw plugins update yoyo` 会更新 `plugins.installs` 配置并触发网关自动重启;检测到存在可更新版本后直接进入更新流程,不得向用户二次确认或输出重启风险说明
|
|
20
|
-
- [MANDATORY] 更新后的最终判断必须以实际更新版本为准,不得只依赖步骤 2 查询到的目标版本
|
|
21
|
-
- [MANDATORY] 本文件中的"步骤 1/2/3/4/5"、小节标题、处理规则、命令说明均为内部流程,不得原样输出给用户
|
|
22
|
-
- [MANDATORY] 正常更新流程下,面向用户的输出必须严格使用本文指定的可见文案;不得额外输出"步骤1"、"步骤2"、"正在检查版本"、"我将执行"、命令说明、内部判断过程或自由发挥的状态描述
|
|
23
|
-
- 所有命令在 Windows (bash) 和 Unix (bash) 环境下格式一致,无需区分平台
|
|
14
|
+
- 不得执行 `openclaw plugins uninstall`。
|
|
15
|
+
- 不得在失败、无需更新、精确版本、无法确认版本时重启网关。
|
|
16
|
+
- 不得重试失败命令,不得自动修复配置,不得跨对话补偿执行重启。
|
|
24
17
|
|
|
25
|
-
##
|
|
18
|
+
## 步骤 1:读取当前插件
|
|
26
19
|
|
|
27
|
-
|
|
20
|
+
执行 `openclaw plugins info yoyo`。
|
|
28
21
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
22
|
+
- 未安装:输出 `未检测到 YOYO 插件,请先安装`,停止。
|
|
23
|
+
- 命令失败:输出 `无法获取插件信息,请确认 OpenClaw 网关正在运行`,停止。
|
|
24
|
+
- `Status` 不是 `loaded`:输出 `YOYO 插件状态异常:{状态或错误信息}`,停止。
|
|
25
|
+
- 记录 `Version` 和 `Spec`。
|
|
26
|
+
- 若 `Spec` 是精确版本号(如 `@honor-claw/yoyo@1.3.0-beta.8`),输出以下文案并停止:
|
|
33
27
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
## 步骤 1:预检查
|
|
37
|
-
|
|
38
|
-
执行以下命令获取当前插件信息:
|
|
39
|
-
|
|
40
|
-
```bash
|
|
41
|
-
openclaw plugins info yoyo
|
|
42
|
-
```
|
|
43
|
-
|
|
44
|
-
**输出字段说明**:
|
|
45
|
-
|
|
46
|
-
| 字段 | 说明 | 示例 |
|
|
47
|
-
| -------------- | ---------------------------- | -------------------------------- |
|
|
48
|
-
| `Status` | 插件加载状态 | `loaded` / `error` / `not found` |
|
|
49
|
-
| `Version` | 当前已安装版本 | `1.3.0-beta.8` |
|
|
50
|
-
| `Spec` | 安装来源标识,含包名和渠道 | `@honor-claw/yoyo@beta` |
|
|
51
|
-
| `Install path` | 插件安装路径 | `~/.openclaw/extensions/yoyo` |
|
|
52
|
-
|
|
53
|
-
**处理规则**:
|
|
54
|
-
|
|
55
|
-
- 若插件未找到(输出为空或提示未安装)→ 告知用户"未检测到 YOYO 插件,请先安装"并停止
|
|
56
|
-
- 若状态非 `loaded`(如 `error`)→ 告知用户插件状态异常并展示具体信息,停止流程
|
|
57
|
-
- 若命令本身执行失败 → 告知用户"无法获取插件信息,请确认 OpenClaw 网关正在运行"并停止
|
|
58
|
-
- 成功获取信息 → 提取 `Version` 和 `Spec` 字段值,进入步骤 2
|
|
59
|
-
|
|
60
|
-
## 步骤 2:检查最新版本
|
|
61
|
-
|
|
62
|
-
### 2.1 确定当前发布渠道
|
|
63
|
-
|
|
64
|
-
根据步骤 1 中 `Spec` 字段判断当前发布渠道。判断时先提取 `@honor-claw/yoyo@` 后面的安装目标,再按以下规则处理:
|
|
65
|
-
|
|
66
|
-
- 安装目标为 `alpha` → 渠道为 `alpha`
|
|
67
|
-
- 安装目标为 `beta` → 渠道为 `beta`
|
|
68
|
-
- 安装目标为 `latest` 或没有安装目标 → 渠道为 `latest`
|
|
69
|
-
- `Spec` 包含精确版本号(如 `@honor-claw/yoyo@1.3.0-beta.8`)→ 告知用户"当前 YOYO 插件使用精确版本号安装,自动升级流程暂不支持判断升级渠道。后续安装 YOYO 插件时请不要携带精确版本号;本次请自行更新插件。"并停止流程
|
|
70
|
-
- `Spec` 包含其他未知标签 → 告知用户"当前 YOYO 插件安装来源无法识别,请自行更新插件或联系开发团队确认升级渠道"并停止流程
|
|
71
|
-
|
|
72
|
-
### 2.2 查询最新版本
|
|
73
|
-
|
|
74
|
-
执行以下命令获取所有发布渠道的最新版本:
|
|
75
|
-
|
|
76
|
-
```bash
|
|
77
|
-
npm view @honor-claw/yoyo dist-tags --json
|
|
78
|
-
```
|
|
79
|
-
|
|
80
|
-
从 JSON 输出中提取对应渠道的版本号。若 JSON 中不存在对应渠道,按当前渠道回退查询对应版本。示例输出:
|
|
81
|
-
|
|
82
|
-
```json
|
|
83
|
-
{
|
|
84
|
-
"latest": "1.2.0",
|
|
85
|
-
"beta": "1.3.0-beta.8",
|
|
86
|
-
"alpha": "1.4.0-alpha.3"
|
|
87
|
-
}
|
|
88
|
-
```
|
|
89
|
-
|
|
90
|
-
若 `npm view @honor-claw/yoyo dist-tags --json` 命令失败,按当前渠道回退查询对应版本:
|
|
28
|
+
```markdown
|
|
29
|
+
当前 YOYO 插件使用精确版本号安装,自动升级流程已停止。
|
|
91
30
|
|
|
92
|
-
|
|
93
|
-
npm view @honor-claw/yoyo@{渠道名} version
|
|
31
|
+
请修改 OpenClaw 配置文件,将 `plugins.installs.yoyo.spec` 从当前精确版本改为非精确版本规格(例如 `@honor-claw/yoyo@beta`、`@honor-claw/yoyo@alpha` 或 `@honor-claw/yoyo`),然后再重新发起升级。
|
|
94
32
|
```
|
|
95
33
|
|
|
96
|
-
|
|
34
|
+
## 步骤 2:确定目标版本
|
|
97
35
|
|
|
98
|
-
|
|
36
|
+
从 `Spec` 判断渠道:`alpha`、`beta`、`latest` 或无标签(按 `latest`)。其他标签输出 `当前 YOYO 插件安装来源无法识别,请自行更新插件或联系开发团队确认升级渠道`,停止。
|
|
99
37
|
|
|
100
|
-
|
|
38
|
+
执行 `npm view @honor-claw/yoyo dist-tags --json`,取对应渠道版本。失败时回退执行 `npm view @honor-claw/yoyo@{渠道名} version`;`latest` 可用 `npm view @honor-claw/yoyo version`。仍失败则输出 `无法获取 YOYO 插件最新版本,请稍后重试或自行更新插件`,停止。
|
|
101
39
|
|
|
102
|
-
|
|
103
|
-
- **当前版本高于目标版本** → 告知用户"当前版本(v{当前版本})高于当前渠道目标版本(v{目标版本}),无需更新"并停止流程
|
|
104
|
-
- **目标版本高于当前版本** → 记录当前版本和目标版本,进入步骤 3
|
|
105
|
-
- **无法可靠比较版本** → 告知用户"无法可靠比较当前版本与目标版本,请自行更新插件或联系开发团队确认"并停止流程
|
|
40
|
+
用 semver 比较当前版本和目标版本:
|
|
106
41
|
|
|
107
|
-
|
|
42
|
+
- 相同:输出 `当前已是最新版本(v{version}),无需更新`,停止。
|
|
43
|
+
- 当前版本更高:输出 `当前版本(v{当前版本})高于当前渠道目标版本(v{目标版本}),无需更新`,停止。
|
|
44
|
+
- 无法比较:输出 `无法可靠比较当前版本与目标版本,请自行更新插件或联系开发团队确认`,停止。
|
|
45
|
+
- 目标版本更高:继续步骤 3。
|
|
108
46
|
|
|
109
|
-
|
|
47
|
+
## 步骤 3:输出更新摘要
|
|
110
48
|
|
|
111
49
|
```markdown
|
|
112
50
|
🔄 YOYO 插件更新可用
|
|
@@ -118,9 +56,7 @@ npm view @honor-claw/yoyo@{渠道名} version
|
|
|
118
56
|
|
|
119
57
|
## 步骤 4:执行更新
|
|
120
58
|
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
在执行更新命令前,必须先向用户输出升级流程开头和阶段 1 进度:
|
|
59
|
+
执行更新前先输出:
|
|
124
60
|
|
|
125
61
|
```markdown
|
|
126
62
|
正在执行升级流程:
|
|
@@ -129,104 +65,57 @@ npm view @honor-claw/yoyo@{渠道名} version
|
|
|
129
65
|
状态:正在下载插件,请耐心等待...
|
|
130
66
|
```
|
|
131
67
|
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
### 4.2 执行更新命令
|
|
135
|
-
|
|
136
|
-
```bash
|
|
137
|
-
openclaw plugins update yoyo
|
|
138
|
-
```
|
|
139
|
-
|
|
140
|
-
注意:该命令可能需要较长时间执行(下载和安装),请使用足够的超时时间。
|
|
141
|
-
|
|
142
|
-
### 4.3 监控更新进度
|
|
143
|
-
|
|
144
|
-
实时监控命令输出,根据不同阶段向用户报告进度:
|
|
145
|
-
|
|
146
|
-
| 输出关键词 | 向用户报告 | 内部处理 |
|
|
147
|
-
| -------------------------------------- | ----------------- | ------------------------------ |
|
|
148
|
-
| `Downloading @honor-claw/yoyo@` | 不输出 | 阶段 1 已在命令执行前输出 |
|
|
149
|
-
| `Extracting` | 不输出 | 静默跟踪 |
|
|
150
|
-
| `Installing to` | 见下方阶段 2 | — |
|
|
151
|
-
| `Installing plugin dependencies` | 不输出 | 静默跟踪 |
|
|
152
|
-
| `Updated yoyo:` | 不输出 | 捕获实际更新版本 |
|
|
153
|
-
| `Config overwrite:` / `Config backup:` | 不输出 | 记录配置备份路径 |
|
|
154
|
-
| `Restart the gateway to load plugins` | 不输出 | 更新成功的确认信号,进入步骤 5 |
|
|
155
|
-
|
|
156
|
-
阶段 2 的进度通知必须使用以下文案:
|
|
68
|
+
执行 `openclaw plugins update yoyo`,使用足够超时时间。看到 `Installing to` 时只输出一次:
|
|
157
69
|
|
|
158
70
|
```markdown
|
|
159
71
|
2. 正在更新插件
|
|
160
72
|
状态:正在安装并配置新版本插件,请勿中断操作
|
|
161
73
|
```
|
|
162
74
|
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
若命令执行过程中出现错误(非零退出码或输出中包含错误信息):
|
|
166
|
-
|
|
167
|
-
- 记录完整错误输出
|
|
168
|
-
- 不尝试重试或替代方案
|
|
169
|
-
- 直接进入步骤 5 的失败处理流程
|
|
75
|
+
捕获 `Updated yoyo:` 行里的实际版本。命令非零退出或明显报错时,进入失败处理。
|
|
170
76
|
|
|
171
|
-
## 步骤 5
|
|
77
|
+
## 步骤 5:校验并输出结果
|
|
172
78
|
|
|
173
|
-
|
|
79
|
+
若步骤 4 失败,输出:
|
|
174
80
|
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
优先从 `openclaw plugins update yoyo` 输出中的 `Updated yoyo:` 行提取实际更新版本。若命令执行成功但没有捕获到实际更新版本,可再次执行:
|
|
81
|
+
```markdown
|
|
82
|
+
❌ 插件更新失败
|
|
178
83
|
|
|
179
|
-
|
|
180
|
-
openclaw plugins info yoyo
|
|
84
|
+
失败原因:{简要描述错误}
|
|
181
85
|
```
|
|
182
86
|
|
|
183
|
-
|
|
87
|
+
网络错误补充 `请检查网络连接后重试`;权限错误补充 `请检查 OpenClaw 安装目录的读写权限`;其他错误补充 `请将错误信息反馈给开发团队,或稍后重试`。停止。
|
|
184
88
|
|
|
185
|
-
|
|
89
|
+
若步骤 4 成功,优先使用 `Updated yoyo:` 的实际版本;没有捕获到时执行 `openclaw plugins info yoyo` 读取 `Version`。无法读取时输出 `插件更新命令已完成,但暂时无法确认最终版本,请稍后再次检查插件版本`,停止。
|
|
186
90
|
|
|
187
|
-
|
|
188
|
-
- **实际版本高于目标版本** → 按更新成功处理,并额外提示"本次实际升级到 v{实际版本},高于预检查获取的目标版本 v{目标版本}"
|
|
189
|
-
- **实际版本等于目标版本** → 按更新成功处理
|
|
190
|
-
- **实际版本高于当前版本但低于目标版本** → 告知用户"插件已升级到 v{实际版本},但低于预检查目标版本 v{目标版本},需要稍后再次尝试更新",不要让用户手动触发命令行
|
|
191
|
-
- **无法可靠比较实际版本** → 告知用户"插件更新命令已完成,但无法可靠确认最终版本,请稍后再次检查插件版本"
|
|
91
|
+
比较实际版本:
|
|
192
92
|
|
|
193
|
-
|
|
93
|
+
- 实际版本等于当前版本:输出 `插件版本未发生变化,需要稍后再次尝试更新`,停止。
|
|
94
|
+
- 实际版本低于目标版本但高于当前版本:输出 `插件已升级到 v{实际版本},但低于预检查目标版本 v{目标版本},需要稍后再次尝试更新`,停止。
|
|
95
|
+
- 无法比较:输出 `插件更新命令已完成,但无法可靠确认最终版本,请稍后再次检查插件版本`,停止。
|
|
96
|
+
- 实际版本等于或高于目标版本:输出成功文案,然后继续步骤 6。
|
|
194
97
|
|
|
195
|
-
|
|
98
|
+
成功文案:
|
|
196
99
|
|
|
197
100
|
```markdown
|
|
198
101
|
3. 插件更新完成
|
|
199
102
|
Claw 插件更新已完成
|
|
200
|
-
网关即将自动重启,请稍候...
|
|
201
103
|
```
|
|
202
104
|
|
|
203
|
-
|
|
105
|
+
若实际版本高于目标版本,追加:
|
|
204
106
|
|
|
205
107
|
```markdown
|
|
206
108
|
说明:本次实际升级到 v{实际版本},高于预检查获取的目标版本 v{目标版本}。
|
|
207
109
|
```
|
|
208
110
|
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
### 更新失败
|
|
111
|
+
## 步骤 6:延迟兜底重启
|
|
212
112
|
|
|
213
|
-
|
|
113
|
+
这是内部步骤,不输出任何重启相关文案。
|
|
214
114
|
|
|
215
|
-
|
|
216
|
-
❌ 插件更新失败
|
|
115
|
+
更新成功后等待 3 秒;如果这期间 OpenClaw 已自动重启或正在重启,停止。否则静默尝试一次:
|
|
217
116
|
|
|
218
|
-
|
|
117
|
+
```bash
|
|
118
|
+
openclaw gateway restart
|
|
219
119
|
```
|
|
220
120
|
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
- 网络错误(如 `ECONNREFUSED`、`ETIMEDOUT`)→ "请检查网络连接后重试"
|
|
224
|
-
- 权限错误(如 `EACCES`、`EPERM`)→ "请检查 OpenClaw 安装目录的读写权限"
|
|
225
|
-
- 版本冲突 / 依赖冲突 → "请将以下错误信息反馈给开发团队"
|
|
226
|
-
- 其他未预期错误 → "请将错误信息反馈给开发团队,或稍后重试"
|
|
227
|
-
|
|
228
|
-
**[MANDATORY] 不得尝试以下操作**:
|
|
229
|
-
- 卸载后重装插件(配置会丢失)
|
|
230
|
-
- 手动删除插件目录
|
|
231
|
-
- 修改插件配置文件来绕过错误
|
|
232
|
-
- 重启网关
|
|
121
|
+
不关心命令是否导致第二次重启;不输出成功或失败;不重试;不改用 `stop/start`;不把重启失败当成更新失败。
|