@honor-claw/yoyo 1.4.0-alpha.2 → 1.4.0-beta.2

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.
@@ -3,11 +3,11 @@ import a from "node:path";
3
3
  import o from "node:fs/promises";
4
4
  //#region src/modules/device-toolset/skill-inject.ts
5
5
  async function s(e, t) {
6
- let n = a.join(e, r), i = await o.readFile(n, "utf8"), s = l(t, await c(e)), f = d(i, u(s));
7
- return f !== i && await o.writeFile(n, f, "utf8"), {
6
+ let n = a.join(e, r), i = await o.readFile(n, "utf8"), s = l(t, await c(e)), p = f(i, u(s));
7
+ return p !== i && await o.writeFile(n, p, "utf8"), {
8
8
  skillPath: n,
9
- rowCount: Object.keys(s).length,
10
- updated: f !== i
9
+ rowCount: d(s).length,
10
+ updated: p !== i
11
11
  };
12
12
  }
13
13
  async function c(e) {
@@ -15,7 +15,7 @@ async function c(e) {
15
15
  try {
16
16
  n = await o.readFile(t, "utf8");
17
17
  } catch (e) {
18
- if (m(e) && e.code === "ENOENT") return /* @__PURE__ */ new Set();
18
+ if (h(e) && e.code === "ENOENT") return /* @__PURE__ */ new Set();
19
19
  throw e;
20
20
  }
21
21
  let r = JSON.parse(n);
@@ -28,23 +28,33 @@ function l(e, t) {
28
28
  function u(t) {
29
29
  return [
30
30
  n,
31
- ...Object.values(t).toSorted((e, t) => e.name.localeCompare(t.name)).map((e) => `| ${f(e.name)} | ${f(e.description)} | ${f(e.supportedNodeIds.join(", "))} |`),
31
+ ...d(t).map((e) => `| ${p(e.name)} | ${p(e.description)} | ${p(e.nodeId)} |`),
32
32
  e
33
33
  ].join("\n");
34
34
  }
35
- function d(r, i) {
36
- let a = RegExp(`${p(n)}[\\s\\S]*?${p(e)}`);
35
+ function d(e) {
36
+ return Object.values(e).flatMap((e) => e.supportedNodeIds.map((t) => ({
37
+ name: e.name,
38
+ description: e.description,
39
+ nodeId: t
40
+ }))).toSorted((e, t) => {
41
+ let n = e.name.localeCompare(t.name);
42
+ return n === 0 ? e.nodeId.localeCompare(t.nodeId) : n;
43
+ });
44
+ }
45
+ function f(r, i) {
46
+ let a = RegExp(`${m(n)}[\\s\\S]*?${m(e)}`);
37
47
  if (a.test(r)) return r.replace(a, i);
38
48
  if (r.includes("{{full-mcp-tool-list}}")) return r.replace(t, i);
39
49
  throw Error("Unable to find MCP tools placeholder or generated block in yoyo-control skill");
40
50
  }
41
- function f(e) {
51
+ function p(e) {
42
52
  return e.replaceAll("|", "\\|").replace(/\r?\n/g, " ");
43
53
  }
44
- function p(e) {
54
+ function m(e) {
45
55
  return e.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
46
56
  }
47
- function m(e) {
57
+ function h(e) {
48
58
  return e instanceof Error && "code" in e;
49
59
  }
50
60
  //#endregion
@@ -1,7 +1,7 @@
1
1
  //#region src/utils/version.ts
2
2
  var e = null;
3
3
  function t() {
4
- return e === null && (e = "1.4.0-alpha.2".includes("beta") || "1.4.0-alpha.2".includes("alpha")), !!e;
4
+ return e === null && (e = "1.4.0-beta.2".includes("beta") || "1.4.0-beta.2".includes("alpha")), !!e;
5
5
  }
6
6
  //#endregion
7
7
  export { t as isBetaVersion };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@honor-claw/yoyo",
3
- "version": "1.4.0-alpha.2",
3
+ "version": "1.4.0-beta.2",
4
4
  "description": "OpenClaw Honor Yoyo connection plugin",
5
5
  "keywords": [
6
6
  "ai",
@@ -143,16 +143,71 @@ metadata: { "openclaw": { "emoji": "📱", "always": true } }
143
143
 
144
144
  > **触发条件**:上方 Sub-Skill 工具表中没有匹配项。
145
145
 
146
- | 工具名称 | 工具说明 | 支持的设备ID列表 (nodeID, 逗号分隔) |
146
+ | 工具名称 | 工具说明 | 支持的设备ID |
147
147
  | ------- | ------- | --------------- |
148
- {{full-mcp-tool-list}}
149
-
150
- **当工具支持的设备ID列表中包含当前设备ID时,该工具才可被调用。**
148
+ <!-- yoyo-mcp-tools:start -->
149
+ | answer_phone | 支持接听当前来电功能。 | 8e26e54c0065df89632178de48742731e54c5022cdb2536e859c44856530e8ee |
150
+ | answer_phone | 支持接听当前来电功能。 | 9cddc65b90031659e93a8ab935e15ca570463600761c33b2673caf8f9812e487 |
151
+ | answer_phone | 支持接听当前来电功能。 | fde5aea120ae4265bbf6f6471a7c8e2dd57c45f8ab65a0eef1f331ed85dc8fb0 |
152
+ | auto_rotate | 本工具提供自动旋转屏幕功能,支持打开/关闭自动旋转、查询当前旋转状态。 | 8e26e54c0065df89632178de48742731e54c5022cdb2536e859c44856530e8ee |
153
+ | auto_rotate | 本工具提供自动旋转屏幕功能,支持打开/关闭自动旋转、查询当前旋转状态。 | 9cddc65b90031659e93a8ab935e15ca570463600761c33b2673caf8f9812e487 |
154
+ | auto_rotate | 本工具提供自动旋转屏幕功能,支持打开/关闭自动旋转、查询当前旋转状态。 | fde5aea120ae4265bbf6f6471a7c8e2dd57c45f8ab65a0eef1f331ed85dc8fb0 |
155
+ | cancel_countdown_timer | 用于取消倒计时的工具。当用户query中包含取消计时、取消倒计时、关闭计时器等意图时调用。支持根据事件标题、计时器序号或范围定位需要取消的计时器。 | 8e26e54c0065df89632178de48742731e54c5022cdb2536e859c44856530e8ee |
156
+ | check_countdown_timer | 用于查询倒计时状态的工具。当用户query中包含查询计时、查看倒计时、查看计时器等意图时调用。支持查询当前是否存在运行中的计时器,也支持根据事件标题查询指定计时器,并返回计时器状态信息。 | 8e26e54c0065df89632178de48742731e54c5022cdb2536e859c44856530e8ee |
157
+ | check_in | 参加店铺的打卡活动、给店铺进行收藏打卡、给店铺写点评。①当用户说要参加打卡活动或者进行收藏打卡时,需要根据画面中的步骤完成任务活动 ②当用户只要求写评价时,收藏和打卡操作都不需要执行 | 8e26e54c0065df89632178de48742731e54c5022cdb2536e859c44856530e8ee |
158
+ | close_countdown_timer | 用于关闭倒计时的工具。当用户query中包含关闭计时、关闭倒计时、关闭计时器等意图时调用。支持根据事件标题、计时器序号或范围定位需要取消的计时器。如果没有计时器,则关闭时钟APP | 8e26e54c0065df89632178de48742731e54c5022cdb2536e859c44856530e8ee |
159
+ | create_countdown_timer | 用于创建倒计时。当用户在query中表达开始倒计时或指定具体时长进行计时(如“倒计时10分钟”“开始5分钟计时”)时调用该工具。支持设置倒计时时长以及可选的事件标题。 | 8e26e54c0065df89632178de48742731e54c5022cdb2536e859c44856530e8ee |
160
+ | desk_companion | 该工具用于启动或退出桌面陪伴功能。桌面陪伴是一种动态桌面交互体验,在桌面上展示虚拟角色或宠物,与用户进行实时互动。当用户想要开启桌面陪伴体验或结束桌面陪伴时使用。 | 8e26e54c0065df89632178de48742731e54c5022cdb2536e859c44856530e8ee |
161
+ | desktop | 本工具提供桌面管理功能,支持查询桌面布局、打开桌面设置页面,以及对桌面风格、角标、图标、快捷方式、搜索入口、桌面应用名称、通透模式、布局等进行配置。工具会根据actionType执行对应的桌面操作,并返回操作结果。 | 8e26e54c0065df89632178de48742731e54c5022cdb2536e859c44856530e8ee |
162
+ | desktop | 本工具提供桌面管理功能,支持查询桌面布局、打开桌面设置页面,以及对桌面风格、角标、图标、快捷方式、搜索入口、桌面应用名称、通透模式、布局等进行配置。工具会根据actionType执行对应的桌面操作,并返回操作结果。 | 9cddc65b90031659e93a8ab935e15ca570463600761c33b2673caf8f9812e487 |
163
+ | desktop | 本工具提供桌面管理功能,支持查询桌面布局、打开桌面设置页面,以及对桌面风格、角标、图标、快捷方式、搜索入口、桌面应用名称、通透模式、布局等进行配置。工具会根据actionType执行对应的桌面操作,并返回操作结果。 | fde5aea120ae4265bbf6f6471a7c8e2dd57c45f8ab65a0eef1f331ed85dc8fb0 |
164
+ | express_logistics_query | 快递物流状态查询、运单跟踪、签收核实服务承接,触发后统一跳转系统负一屏快递信息,无需前置校验运单号、承运商等信息。 | 8e26e54c0065df89632178de48742731e54c5022cdb2536e859c44856530e8ee |
165
+ | express_logistics_query | 快递物流状态查询、运单跟踪、签收核实服务承接,触发后统一跳转系统负一屏快递信息,无需前置校验运单号、承运商等信息。 | 9cddc65b90031659e93a8ab935e15ca570463600761c33b2673caf8f9812e487 |
166
+ | express_logistics_query | 快递物流状态查询、运单跟踪、签收核实服务承接,触发后统一跳转系统负一屏快递信息,无需前置校验运单号、承运商等信息。 | fde5aea120ae4265bbf6f6471a7c8e2dd57c45f8ab65a0eef1f331ed85dc8fb0 |
167
+ | hang_up_phone | 支持挂断当前通话功能。 | 8e26e54c0065df89632178de48742731e54c5022cdb2536e859c44856530e8ee |
168
+ | hang_up_phone | 支持挂断当前通话功能。 | 9cddc65b90031659e93a8ab935e15ca570463600761c33b2673caf8f9812e487 |
169
+ | hang_up_phone | 支持挂断当前通话功能。 | fde5aea120ae4265bbf6f6471a7c8e2dd57c45f8ab65a0eef1f331ed85dc8fb0 |
170
+ | hover_button | 该工具用于管理设备悬浮按钮功能(桌面小白点),支持打开悬浮按钮、关闭悬浮按钮以及进入悬浮按钮设置页面查看或调整相关设置。 | 8e26e54c0065df89632178de48742731e54c5022cdb2536e859c44856530e8ee |
171
+ | hover_button | 该工具用于管理设备悬浮按钮功能(桌面小白点),支持打开悬浮按钮、关闭悬浮按钮以及进入悬浮按钮设置页面查看或调整相关设置。 | 9cddc65b90031659e93a8ab935e15ca570463600761c33b2673caf8f9812e487 |
172
+ | hover_button | 该工具用于管理设备悬浮按钮功能(桌面小白点),支持打开悬浮按钮、关闭悬浮按钮以及进入悬浮按钮设置页面查看或调整相关设置。 | fde5aea120ae4265bbf6f6471a7c8e2dd57c45f8ab65a0eef1f331ed85dc8fb0 |
173
+ | navigation_service | 本工具用于发起导航请求,支持根据用户设定目的地、出发地、出行方式及途径地点规划路线,地址仅支持中国境内,并可指定特定的导航应用。支持指定高德地图、百度地图。 | 8e26e54c0065df89632178de48742731e54c5022cdb2536e859c44856530e8ee |
174
+ | navigation_service | 本工具用于发起导航请求,支持根据用户设定目的地、出发地、出行方式及途径地点规划路线,地址仅支持中国境内,并可指定特定的导航应用。支持指定高德地图、百度地图。 | 9cddc65b90031659e93a8ab935e15ca570463600761c33b2673caf8f9812e487 |
175
+ | navigation_service | 本工具用于发起导航请求,支持根据用户设定目的地、出发地、出行方式及途径地点规划路线,地址仅支持中国境内,并可指定特定的导航应用。支持指定高德地图、百度地图。 | fde5aea120ae4265bbf6f6471a7c8e2dd57c45f8ab65a0eef1f331ed85dc8fb0 |
176
+ | onehanded_mode | 该工具提供对设备单手模式的管理与控制能力。单手模式通过缩小屏幕显示区域并调整界面布局,使主要操作区域集中在屏幕一侧,方便用户单手操作大屏设备。该工具支持单手模式的开启与关闭、相关参数的设置、当前使用状态的查询。 | 8e26e54c0065df89632178de48742731e54c5022cdb2536e859c44856530e8ee |
177
+ | onehanded_mode | 该工具用于管理设备的单手模式开关。单手模式通过缩小屏幕显示区域,使主要操作区域集中在屏幕一侧,方便用户在大屏设备上进行单手操作。当前能力支持开启、关闭、查询单手模式状态以及进入单手模式设置页面。该工具仅控制系统级单手模式开关,不涉及应用级显示适配或单独配置项设置。 | 9cddc65b90031659e93a8ab935e15ca570463600761c33b2673caf8f9812e487 |
178
+ | onehanded_mode | 该工具用于管理设备的单手模式开关。单手模式通过缩小屏幕显示区域,使主要操作区域集中在屏幕一侧,方便用户在大屏设备上进行单手操作。当前能力支持开启、关闭、查询单手模式状态以及进入单手模式设置页面。该工具仅控制系统级单手模式开关,不涉及应用级显示适配或单独配置项设置。 | fde5aea120ae4265bbf6f6471a7c8e2dd57c45f8ab65a0eef1f331ed85dc8fb0 |
179
+ | open_countdown_timer | 用于打开倒计时的工具。用户query中含有打开倒计时、打开计时的意图时,业务上跳转到计时器界面。 | 8e26e54c0065df89632178de48742731e54c5022cdb2536e859c44856530e8ee |
180
+ | open_payment_code | 收付款码打开工具,付款码/收款码仅支持支付宝/微信打开二维码。没有指明app的情况下,默认使用支付宝 | 8e26e54c0065df89632178de48742731e54c5022cdb2536e859c44856530e8ee |
181
+ | open_payment_code | 收付款码打开工具,付款码/收款码仅支持支付宝/微信打开二维码。没有指明app的情况下,默认使用支付宝 | 9cddc65b90031659e93a8ab935e15ca570463600761c33b2673caf8f9812e487 |
182
+ | open_payment_code | 收付款码打开工具,付款码/收款码仅支持支付宝/微信打开二维码。没有指明app的情况下,默认使用支付宝 | fde5aea120ae4265bbf6f6471a7c8e2dd57c45f8ab65a0eef1f331ed85dc8fb0 |
183
+ | open_transport_code | 本工具用于快速打开支付宝、微信和云闪付的公交/地铁乘车码页面,方便用户快捷出行,并可指定使用的应用。仅支持指定支付宝、微信和云闪付。 | 8e26e54c0065df89632178de48742731e54c5022cdb2536e859c44856530e8ee |
184
+ | open_transport_code | 本工具用于快速打开支付宝、微信和云闪付的公交/地铁乘车码页面,方便用户快捷出行,并可指定使用的应用。仅支持指定支付宝、微信和云闪付。 | 9cddc65b90031659e93a8ab935e15ca570463600761c33b2673caf8f9812e487 |
185
+ | open_transport_code | 本工具用于快速打开支付宝、微信和云闪付的公交/地铁乘车码页面,方便用户快捷出行,并可指定使用的应用。仅支持指定支付宝、微信和云闪付。 | fde5aea120ae4265bbf6f6471a7c8e2dd57c45f8ab65a0eef1f331ed85dc8fb0 |
186
+ | outfit_change | 该工具用于为用户提供虚拟换装和试穿体验。当用户明确发起服装替换、试穿、换装等请求时调用,触发虚拟形象换装流程。工具将展示换装效果并返回结果。 | 8e26e54c0065df89632178de48742731e54c5022cdb2536e859c44856530e8ee |
187
+ | pause_countdown_timer | 用于暂停倒计时的工具。当用户query中包含暂停计时、暂停倒计时、暂停计时器等意图时调用。支持根据事件标题、计时器序号或范围定位需要暂停的计时器。 | 8e26e54c0065df89632178de48742731e54c5022cdb2536e859c44856530e8ee |
188
+ | play_game | 该工具用于与用户进行互动游戏。当用户表达想要玩游戏、一起玩游戏的意愿时调用,工具将随机选择一个互动游戏并开始游戏流程。 | 8e26e54c0065df89632178de48742731e54c5022cdb2536e859c44856530e8ee |
189
+ | play_joke | 该工具用于为用户讲一个笑话。当用户表达想要听笑话、讲个笑话等意愿时调用,工具将生成并返回一个适合当前对话语境的笑话内容。 | 8e26e54c0065df89632178de48742731e54c5022cdb2536e859c44856530e8ee |
190
+ | ptz_control | 该工具提供对进入退出robotphone模式的能力,支持手机云台摄像头的统一控制与状态管理,适用于拍摄取景、视频录制及稳定性调节等场景。用户可进行开关、参数设置及状态查询,实现对拍摄设备的精细化控制。 | 8e26e54c0065df89632178de48742731e54c5022cdb2536e859c44856530e8ee |
191
+ | ptz_control | 该工具提供对进入退出robotphone模式的能力,支持手机云台摄像头的统一控制与状态管理,适用于拍摄取景、视频录制及稳定性调节等场景。用户可进行开关、参数设置及状态查询,实现对拍摄设备的精细化控制。 | 9cddc65b90031659e93a8ab935e15ca570463600761c33b2673caf8f9812e487 |
192
+ | ptz_control | 该工具提供对进入退出robotphone模式的能力,支持手机云台摄像头的统一控制与状态管理,适用于拍摄取景、视频录制及稳定性调节等场景。用户可进行开关、参数设置及状态查询,实现对拍摄设备的精细化控制。 | fde5aea120ae4265bbf6f6471a7c8e2dd57c45f8ab65a0eef1f331ed85dc8fb0 |
193
+ | renewal_query | 支付宝本人自动续费查询、取消诉求承接,触发后统一跳转支付宝APP自动续费页面,不直接执行业务操作。 | 8e26e54c0065df89632178de48742731e54c5022cdb2536e859c44856530e8ee |
194
+ | renewal_query | 支付宝本人自动续费查询、取消诉求承接,触发后统一跳转支付宝APP自动续费页面,不直接执行业务操作。 | 9cddc65b90031659e93a8ab935e15ca570463600761c33b2673caf8f9812e487 |
195
+ | renewal_query | 支付宝本人自动续费查询、取消诉求承接,触发后统一跳转支付宝APP自动续费页面,不直接执行业务操作。 | fde5aea120ae4265bbf6f6471a7c8e2dd57c45f8ab65a0eef1f331ed85dc8fb0 |
196
+ | restart_countdown_timer | 用于重新启动或重启倒计时的工具。当用户query中包含重启计时、重新开始计时、重启倒计时、重新启动计时器等意图时调用。支持根据事件标题、序号或范围定位需要重启的计时器。 | 8e26e54c0065df89632178de48742731e54c5022cdb2536e859c44856530e8ee |
197
+ | resume_countdown_timer | 用于继续或恢复倒计时的工具。当用户query中包含继续计时、继续倒计时、恢复计时器等意图时调用。支持根据事件标题、计时器序号或范围定位需要继续的计时器。 | 8e26e54c0065df89632178de48742731e54c5022cdb2536e859c44856530e8ee |
198
+ | takeaway_order | 点外卖工具,支持美团、饿了么和淘宝闪购app的点餐。没有指明app的情况下,默认使用淘宝闪购 | 8e26e54c0065df89632178de48742731e54c5022cdb2536e859c44856530e8ee |
199
+ | takeaway_order | 点外卖工具,支持美团、饿了么和淘宝闪购app的点餐。没有指明app的情况下,默认使用淘宝闪购 | 9cddc65b90031659e93a8ab935e15ca570463600761c33b2673caf8f9812e487 |
200
+ | takeaway_order | 点外卖工具,支持美团、饿了么和淘宝闪购app的点餐。没有指明app的情况下,默认使用淘宝闪购 | fde5aea120ae4265bbf6f6471a7c8e2dd57c45f8ab65a0eef1f331ed85dc8fb0 |
201
+ <!-- yoyo-mcp-tools:end -->
202
+
203
+ **每行只对应一个设备ID。只有当该行的支持设备ID等于当前设备ID时,该工具才可被调用。**
151
204
 
152
205
  [MANDATORY] **必须强制执行**:
153
- 1. 在执行工具调用之前,**必须**严格匹配当前 nodeID 是否在 `支持的设备ID列表` 中,如果不在则告诉用户。
154
- 2. 如果当前 nodeID `支持的设备ID列表` 中,则**必须**从`mcptools/<tool_name>.json`中读取详细的工具定义。
155
- 3. 如果当前 nodeID 不在 `支持的设备ID列表` 中,则**必须**严格回复 "无工具可用"。
206
+ 1. 在执行工具调用之前,**必须**严格匹配当前 nodeID 是否等于某一行的 `支持的设备ID`,如果不等于则告诉用户。
207
+ 2. 如果当前 nodeID 等于某一行的 `支持的设备ID`,则**必须**从`mcptools/<tool_name>.json`中读取详细的工具定义。
208
+ 3. 如果当前 nodeID 不等于任意匹配工具行的 `支持的设备ID`,则**必须**严格回复 "无工具可用"。
209
+
210
+ **读取工具定义**:使用`read`工具读取`mcptools/<tool_name>.json`文件。
156
211
 
157
212
  ## 步骤 3:特殊场景处理
158
213
 
@@ -185,7 +240,7 @@ metadata: { "openclaw": { "emoji": "📱", "always": true } }
185
240
  按顺序完成以下校验,任一失败则停止执行:
186
241
 
187
242
  1. **节点标识** — 从 `nodes status` 输出中提取 IP 或 ID
188
- 2. **工具是否支持** — 如果是 `MCP工具`,必须严格校验 `支持的设备ID列表` 中是否包含当前节点标识 node 或 nodeID
243
+ 2. **工具是否支持** — 如果是 `MCP工具`,必须严格校验某一行的 `支持的设备ID` 是否等于当前节点标识 node 或 nodeID
189
244
  3. **工具文档** — 确认已读取对应的 `references/*.md` 或 `mcptools/*.json`
190
245
  4. **命令名称** — 从文档中精确提取 command
191
246
  5. **必填参数** — 从文档中提取并校验所有必填字段