@honor-claw/yoyo 1.5.1-alpha.1 → 1.5.1-alpha.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/home-dir.mjs
CHANGED
|
@@ -1,21 +1,16 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { findPackageRoot as e } from "./package-json.mjs";
|
|
2
2
|
import t from "node:path";
|
|
3
|
-
import n from "node:
|
|
4
|
-
import
|
|
3
|
+
import { fileURLToPath as n } from "node:url";
|
|
4
|
+
import r from "node:os";
|
|
5
5
|
//#region src/utils/home-dir.ts
|
|
6
6
|
function i(e) {
|
|
7
7
|
return e?.trim() || void 0;
|
|
8
8
|
}
|
|
9
|
-
function a(
|
|
10
|
-
|
|
11
|
-
for (; i !== t.dirname(i);) {
|
|
12
|
-
if (e(t.join(i, "package.json"))) return i;
|
|
13
|
-
i = t.dirname(i);
|
|
14
|
-
}
|
|
15
|
-
return i;
|
|
9
|
+
function a(r = import.meta.url) {
|
|
10
|
+
return e(r) ?? t.parse(n(r)).root;
|
|
16
11
|
}
|
|
17
|
-
function o(e = process.env,
|
|
18
|
-
let i = s(e,
|
|
12
|
+
function o(e = process.env, n = r.homedir) {
|
|
13
|
+
let i = s(e, n);
|
|
19
14
|
return i ? t.resolve(i) : void 0;
|
|
20
15
|
}
|
|
21
16
|
function s(e, t) {
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { existsSync as e, readFileSync as t } from "node:fs";
|
|
2
|
+
import n from "node:path";
|
|
3
|
+
import { fileURLToPath as r } from "node:url";
|
|
4
|
+
//#region src/utils/package-json.ts
|
|
5
|
+
function i(t = import.meta.url, i) {
|
|
6
|
+
let a = n.dirname(r(t));
|
|
7
|
+
for (; a !== n.dirname(a);) {
|
|
8
|
+
let t = n.join(a, "package.json");
|
|
9
|
+
if (e(t) && (!i || o(t)?.name === i)) return a;
|
|
10
|
+
a = n.dirname(a);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
function a(e) {
|
|
14
|
+
return o(n.join(e, "package.json"));
|
|
15
|
+
}
|
|
16
|
+
function o(e) {
|
|
17
|
+
try {
|
|
18
|
+
let n = JSON.parse(t(e, "utf-8"));
|
|
19
|
+
return n && typeof n == "object" ? n : void 0;
|
|
20
|
+
} catch {
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
//#endregion
|
|
25
|
+
export { i as findPackageRoot, a as readPackageJson };
|
package/dist/utils/version.mjs
CHANGED
|
@@ -1,17 +1,27 @@
|
|
|
1
|
+
import { findPackageRoot as e, readPackageJson as t } from "./package-json.mjs";
|
|
1
2
|
//#region src/utils/version.ts
|
|
2
|
-
var
|
|
3
|
-
function
|
|
4
|
-
|
|
3
|
+
var n = "@honor-claw/yoyo";
|
|
4
|
+
function r() {
|
|
5
|
+
let e = o();
|
|
6
|
+
return e.includes("beta") || e.includes("alpha");
|
|
5
7
|
}
|
|
6
|
-
function
|
|
8
|
+
function i(e) {
|
|
7
9
|
if (!e) return 0;
|
|
8
10
|
let t = Number.parseInt(e, 10);
|
|
9
11
|
return Number.isFinite(t) && t >= 0 ? t : 0;
|
|
10
12
|
}
|
|
11
|
-
function
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
13
|
+
function a() {
|
|
14
|
+
let [e, t, n] = o().split("-", 1)[0].split("."), r = i(e), a = i(t), s = i(n);
|
|
15
|
+
return r * 1e6 + a * 1e3 + s;
|
|
16
|
+
}
|
|
17
|
+
function o() {
|
|
18
|
+
try {
|
|
19
|
+
let r = e(import.meta.url, n);
|
|
20
|
+
if (!r) return "0.0.0";
|
|
21
|
+
let i = t(r)?.version;
|
|
22
|
+
if (typeof i == "string") return i;
|
|
23
|
+
} catch {}
|
|
24
|
+
return "0.0.0";
|
|
15
25
|
}
|
|
16
26
|
//#endregion
|
|
17
|
-
export {
|
|
27
|
+
export { a as getYoyoPluginVersionCode, r as isBetaVersion };
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: gui.create
|
|
3
3
|
description: >
|
|
4
|
-
启动基于 GUI 的应用操作任务(UI Agent)。用于在手机上对指定 App
|
|
4
|
+
启动基于 GUI 的应用操作任务(UI Agent)。用于在手机上对指定 App 发起一次独立的操控流程;单一 App 禁止拆分任务,多 App 或含条件的流程需拆分为多次调用,续办需携带上次任务的 task_id。
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# Gui Task Create GUI 任务创建
|
|
@@ -14,7 +14,7 @@ gui.create
|
|
|
14
14
|
## 3. 业务规则
|
|
15
15
|
|
|
16
16
|
### 适用场景及操作流程
|
|
17
|
-
1. 针对单一 App
|
|
17
|
+
1. 针对单一 App 的任何 GUI 操作任务,禁止拆分任务,必须直接发起调用
|
|
18
18
|
2. 涉及多个 App 的连续操作需拆分为多个独立任务,逐个调用
|
|
19
19
|
3. 涉及条件判断(如“若…则…”)时,将条件判断与执行任务拆分为两次调用
|
|
20
20
|
4. 若为对未结束任务的补充/修改/继续,需在请求中补充对应的 task_id
|
|
@@ -112,107 +112,91 @@ openclaw nodes invoke --node <ID> --command gui.create --params '{"app_name":"
|
|
|
112
112
|
|
|
113
113
|
---
|
|
114
114
|
|
|
115
|
-
### 示例 2:
|
|
115
|
+
### 示例 2: 单一应用任务(禁止拆解任务)
|
|
116
116
|
|
|
117
|
-
**用户输入**: "
|
|
117
|
+
**用户输入**: "打开微信添加好友A和好友B,并给A发送你好"
|
|
118
118
|
|
|
119
119
|
**工具**: "gui.create"
|
|
120
120
|
|
|
121
121
|
**JSON 参数**:
|
|
122
122
|
```json
|
|
123
123
|
{
|
|
124
|
-
"app_name": "
|
|
125
|
-
"task_query": "
|
|
124
|
+
"app_name": "微信",
|
|
125
|
+
"task_query": "打开微信添加好友A和好友B,并给A发送你好"
|
|
126
126
|
}
|
|
127
127
|
```
|
|
128
128
|
|
|
129
129
|
**Windows (Cmd) 执行命令**:
|
|
130
130
|
```bash
|
|
131
|
-
cmd /c 'openclaw nodes invoke --node <ID> --command gui.create --params "{\"app_name\":\"
|
|
131
|
+
cmd /c 'openclaw nodes invoke --node <ID> --command gui.create --params "{\"app_name\":\"微信\",\"task_query\":\"打开微信添加好友A和好友B,并给A发送你好\"}"'
|
|
132
132
|
```
|
|
133
133
|
|
|
134
134
|
**Linux (Bash) 执行命令**:
|
|
135
135
|
```bash
|
|
136
|
-
openclaw nodes invoke --node <ID> --command gui.create --params '{"app_name":"
|
|
136
|
+
openclaw nodes invoke --node <ID> --command gui.create --params '{"app_name":"微信","task_query":"打开微信添加好友A和好友B,并给A发送你好"}'
|
|
137
137
|
```
|
|
138
138
|
|
|
139
139
|
---
|
|
140
140
|
|
|
141
|
-
### 示例 3:
|
|
141
|
+
### 示例 3: 多应用任务(必须按app拆解任务)
|
|
142
142
|
|
|
143
|
-
**用户输入**: "
|
|
143
|
+
**用户输入**: "在淘宝把羽绒服加入购物车,然后截图发给微信好友A"
|
|
144
144
|
|
|
145
145
|
**工具**: "gui.create"
|
|
146
146
|
|
|
147
147
|
**JSON 参数**:
|
|
148
|
+
sub-task 1: 在淘宝将“羽绒服”加入购物车并截图
|
|
148
149
|
```json
|
|
149
150
|
{
|
|
150
|
-
"app_name": "
|
|
151
|
-
"task_query": "
|
|
152
|
-
"task_id": "prev-task-id-001"
|
|
151
|
+
"app_name": "淘宝",
|
|
152
|
+
"task_query": "在淘宝将“羽绒服”加入购物车并截图"
|
|
153
153
|
}
|
|
154
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 参数**:
|
|
155
|
+
sub-task 2: 在微信将截图发送给好友A
|
|
175
156
|
```json
|
|
176
157
|
{
|
|
177
|
-
"app_name": "
|
|
178
|
-
"task_query": "
|
|
158
|
+
"app_name": "微信",
|
|
159
|
+
"task_query": "在微信将截图发送给好友A"
|
|
179
160
|
}
|
|
180
161
|
```
|
|
181
162
|
|
|
182
163
|
**Windows (Cmd) 执行命令**:
|
|
183
164
|
```bash
|
|
184
|
-
cmd /c 'openclaw nodes invoke --node <ID> --command gui.create --params "{\"app_name\":\"淘宝\",\"task_query\":\"
|
|
165
|
+
cmd /c 'openclaw nodes invoke --node <ID> --command gui.create --params "{\"app_name\":\"淘宝\",\"task_query\":\"在淘宝将“羽绒服”加入购物车并截图\"}"'
|
|
166
|
+
cmd /c 'openclaw nodes invoke --node <ID> --command gui.create --params "{\"app_name\":\"微信\",\"task_query\":\"在微信将截图发送给好友A\"}"'
|
|
185
167
|
```
|
|
186
168
|
|
|
187
169
|
**Linux (Bash) 执行命令**:
|
|
188
170
|
```bash
|
|
189
|
-
openclaw nodes invoke --node <ID> --command gui.create --params '{"app_name":"淘宝","task_query":"
|
|
171
|
+
openclaw nodes invoke --node <ID> --command gui.create --params '{"app_name":"淘宝","task_query":"在淘宝将“羽绒服”加入购物车并截图"}'
|
|
172
|
+
openclaw nodes invoke --node <ID> --command gui.create --params '{"app_name":"微信","task_query":"在微信将截图发送给好友A"}'
|
|
190
173
|
```
|
|
191
174
|
|
|
192
175
|
---
|
|
193
176
|
|
|
194
|
-
### 示例
|
|
177
|
+
### 示例 4: 继续上次在高德地图的导航并修改目的地(续办,带 task_id)
|
|
195
178
|
|
|
196
|
-
**用户输入**: "
|
|
179
|
+
**用户输入**: "接着刚才在高德地图的导航,把目的地改成北京南站"
|
|
197
180
|
|
|
198
181
|
**工具**: "gui.create"
|
|
199
182
|
|
|
200
183
|
**JSON 参数**:
|
|
201
184
|
```json
|
|
202
185
|
{
|
|
203
|
-
"app_name": "
|
|
204
|
-
"task_query": "
|
|
186
|
+
"app_name": "高德地图",
|
|
187
|
+
"task_query": "继续在高德地图进行导航,将目的地改为北京南站",
|
|
188
|
+
"task_id": "prev-task-id-001"
|
|
205
189
|
}
|
|
206
190
|
```
|
|
207
191
|
|
|
208
192
|
**Windows (Cmd) 执行命令**:
|
|
209
193
|
```bash
|
|
210
|
-
cmd /c 'openclaw nodes invoke --node <ID> --command gui.create --params "{\"app_name\":\"
|
|
194
|
+
cmd /c 'openclaw nodes invoke --node <ID> --command gui.create --params "{\"app_name\":\"高德地图\",\"task_query\":\"继续在高德地图进行导航,将目的地改为北京南站\",\"task_id\":\"prev-task-id-001\"}"'
|
|
211
195
|
```
|
|
212
196
|
|
|
213
197
|
**Linux (Bash) 执行命令**:
|
|
214
198
|
```bash
|
|
215
|
-
openclaw nodes invoke --node <ID> --command gui.create --params '{"app_name":"
|
|
199
|
+
openclaw nodes invoke --node <ID> --command gui.create --params '{"app_name":"高德地图","task_query":"继续在高德地图进行导航,将目的地改为北京南站","task_id":"prev-task-id-001"}'
|
|
216
200
|
```
|
|
217
201
|
|
|
218
202
|
---
|
|
@@ -56,14 +56,7 @@ metadata: { "openclaw": { "emoji": "🔄", "always": true } }
|
|
|
56
56
|
|
|
57
57
|
## 步骤 4:执行更新
|
|
58
58
|
|
|
59
|
-
执行 `openclaw plugins update yoyo
|
|
60
|
-
|
|
61
|
-
- 看到 `Downloading @honor-claw/yoyo@`:立刻输出一次阶段 1 文案。
|
|
62
|
-
- 看到 `Installing to`:立刻输出一次阶段 2 文案。
|
|
63
|
-
- 看到 `Updated yoyo:`:捕获实际更新版本。
|
|
64
|
-
- 看到 `Restart the gateway to load plugins`:视为更新命令成功,进入步骤 5。
|
|
65
|
-
|
|
66
|
-
阶段 1 文案:
|
|
59
|
+
执行 `openclaw plugins update yoyo` 前,先输出阶段 1 文案:
|
|
67
60
|
|
|
68
61
|
```markdown
|
|
69
62
|
正在执行升级流程:
|
|
@@ -72,6 +65,8 @@ metadata: { "openclaw": { "emoji": "🔄", "always": true } }
|
|
|
72
65
|
状态:正在下载插件,请耐心等待...
|
|
73
66
|
```
|
|
74
67
|
|
|
68
|
+
然后执行 `openclaw plugins update yoyo`,使用足够超时时间,并捕获输出中的 `Updated yoyo:` 实际版本。命令开始执行后,立刻输出阶段 2 文案;命令非零退出或明显报错时,进入失败处理。
|
|
69
|
+
|
|
75
70
|
阶段 2 文案:
|
|
76
71
|
|
|
77
72
|
```markdown
|
|
@@ -79,8 +74,6 @@ metadata: { "openclaw": { "emoji": "🔄", "always": true } }
|
|
|
79
74
|
状态:正在安装并配置新版本插件,请勿中断操作
|
|
80
75
|
```
|
|
81
76
|
|
|
82
|
-
命令非零退出或明显报错时,进入失败处理。
|
|
83
|
-
|
|
84
77
|
## 步骤 5:校验并输出结果
|
|
85
78
|
|
|
86
79
|
若步骤 4 失败,输出:
|
|
@@ -100,30 +93,28 @@ metadata: { "openclaw": { "emoji": "🔄", "always": true } }
|
|
|
100
93
|
- 实际版本等于当前版本:输出 `插件版本未发生变化,需要稍后再次尝试更新`,停止。
|
|
101
94
|
- 实际版本低于目标版本但高于当前版本:输出 `插件已升级到 v{实际版本},但低于预检查目标版本 v{目标版本},需要稍后再次尝试更新`,停止。
|
|
102
95
|
- 无法比较:输出 `插件更新命令已完成,但无法可靠确认最终版本,请稍后再次检查插件版本`,停止。
|
|
103
|
-
-
|
|
96
|
+
- 实际版本等于或高于目标版本:继续步骤 6。
|
|
104
97
|
|
|
105
|
-
|
|
98
|
+
成功文案见步骤 6。
|
|
106
99
|
|
|
107
|
-
|
|
108
|
-
3. 插件更新完成
|
|
109
|
-
Claw 插件更新已完成
|
|
110
|
-
网关即将自动重启,请稍候...
|
|
111
|
-
```
|
|
112
|
-
|
|
113
|
-
若实际版本高于步骤 2 获取的目标版本,在成功文案后追加:
|
|
100
|
+
若实际版本高于步骤 2 获取的目标版本,在步骤 6 成功文案后追加:
|
|
114
101
|
|
|
115
102
|
```markdown
|
|
116
103
|
说明:本次实际升级到 v{实际版本},高于预检查获取的目标版本 v{目标版本}。
|
|
117
104
|
```
|
|
118
105
|
|
|
119
|
-
## 步骤 6
|
|
106
|
+
## 步骤 6:兜底重启
|
|
120
107
|
|
|
121
|
-
|
|
108
|
+
输出阶段 3 文案后,立即静默尝试一次 `openclaw gateway restart`。
|
|
122
109
|
|
|
123
|
-
|
|
110
|
+
```markdown
|
|
111
|
+
3. 插件更新完成
|
|
112
|
+
Claw 插件更新已完成
|
|
113
|
+
网关即将重启,请稍候...
|
|
114
|
+
```
|
|
124
115
|
|
|
125
116
|
```bash
|
|
126
117
|
openclaw gateway restart
|
|
127
118
|
```
|
|
128
119
|
|
|
129
|
-
|
|
120
|
+
不等待;不关心命令是否导致第二次重启;不输出重启成功或失败;不重试;不改用 `stop/start`;不把重启失败当成更新失败。
|