@honor-claw/yoyo 1.4.0-beta.4 → 1.4.0-beta.5

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.
@@ -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-beta.4".includes("beta") || "1.4.0-beta.4".includes("alpha")), !!e;
4
+ return e === null && (e = "1.4.0-beta.5".includes("beta") || "1.4.0-beta.5".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-beta.4",
3
+ "version": "1.4.0-beta.5",
4
4
  "description": "OpenClaw Honor Yoyo connection plugin",
5
5
  "keywords": [
6
6
  "ai",
@@ -1,7 +1,8 @@
1
1
  ---
2
2
  name: yoyo_phone_control
3
3
  description: >
4
- 通过 YOYO 控制手机系统功能(应用管理、通话短信、闹钟日程、设备设置等)。
4
+ 通过YOYO操作手机系统用机功能,包括打开/关闭/卸载应用、发送/查找短信、拨打电话、搜索联系人、搜索通话记录、创建/打开/查询/关闭/删除闹钟、创建/添加/新建日程、计时器管理、录音、截屏、屏幕录制、调节音量、屏幕亮度调节、切换响铃/静音/勿扰/护眼/深色/飞行模式、管理移动数据或热点或蓝牙或WLAN、进行本地内容搜索、文件发送、调用相机拍照/录像、电池状态/电量查询与、开启/关闭定位服务、开启/关闭NFC功能、开启/关闭自动亮屏功能、USB共享网络、设备电源状态与屏幕状态控制、状态栏显示信息管理与控制、进行扫码操作、控制手机的手电筒、清理和维护设备扬声器、机票监控、查快递等。
5
+ 支持与手机系统用机交互的相关操作。
5
6
  metadata: { "openclaw": { "emoji": "📱", "always": true } }
6
7
  ---
7
8
 
@@ -36,6 +37,7 @@ metadata: { "openclaw": { "emoji": "📱", "always": true } }
36
37
  - 如果执行失败,必须重新读取 `SKILL.md` 和对应的工具定义文件,然后重新执行
37
38
  - 绝对不能使用任何其他设备的工具
38
39
  - 不要尝试任何其他方式完成任务,不要提供替代方案
40
+ - **Never try a different approach**
39
41
 
40
42
  ## 步骤 1:确定目标设备
41
43
 
@@ -134,6 +136,8 @@ metadata: { "openclaw": { "emoji": "📱", "always": true } }
134
136
  | `flight-monitor` | `references/flight-monitor-create.md` | 创建机票价格监控 |
135
137
  | `flight-monitor` | `references/flight-monitor-search.md` | 查询机票监控任务 |
136
138
  | `express` | `references/express-logistics-search.md` | 快递查询 |
139
+ | `countdown-timer` | `references/countdown-timer.md` | 倒计时计时器管理 |
140
+ | `desktop` | `references/desktop.md` | 手机桌面管理,支持查询桌面布局、打开桌面设置页,并对风格、应用角标、桌面图标、快捷方式、搜索入口、应用名称、通透模式与布局等进行配置。 |
137
141
 
138
142
  ### 2.3 MCP 工具查找流程
139
143
 
@@ -143,12 +147,12 @@ metadata: { "openclaw": { "emoji": "📱", "always": true } }
143
147
  | ------- | ------- | --------------- |
144
148
  {{full-mcp-tool-list}}
145
149
 
146
- **每行只对应一个设备ID。只有当该行的支持设备ID等于当前设备ID时,该工具才可被调用。**
150
+ **当工具支持的设备ID列表中包含当前设备ID时,该工具才可被调用。**
147
151
 
148
152
  [MANDATORY] **必须强制执行**:
149
- 1. 在执行工具调用之前,**必须**严格匹配当前 nodeID 是否等于某一行的 `支持的设备ID`,如果不等于则告诉用户。
150
- 2. 如果当前 nodeID 等于某一行的 `支持的设备ID`,则**必须**从`mcptools/<tool_name>.json`中读取详细的工具定义。
151
- 3. 如果当前 nodeID 不等于任意匹配工具行的 `支持的设备ID`,则**必须**严格回复 "无工具可用"。
153
+ 1. 在执行工具调用之前,**必须**严格匹配当前 nodeID 是否在 `支持的设备ID列表` 中,如果不在则告诉用户。
154
+ 2. 如果当前 nodeID `支持的设备ID列表` 中,则**必须**从`mcptools/<tool_name>.json`中读取详细的工具定义。
155
+ 3. 如果当前 nodeID 不在 `支持的设备ID列表` 中,则**必须立即执行**严格回复 "❌ <设备名称> 不支持该操作"。
152
156
 
153
157
  **读取工具定义**:使用`read`工具读取`mcptools/<tool_name>.json`文件。
154
158
 
@@ -167,7 +171,7 @@ metadata: { "openclaw": { "emoji": "📱", "always": true } }
167
171
 
168
172
  ## 步骤 4:执行调用
169
173
 
170
- ### 命令格式
174
+ ### 4.1 命令格式
171
175
 
172
176
  根据操作系统选择对应格式:
173
177
 
@@ -178,27 +182,28 @@ metadata: { "openclaw": { "emoji": "📱", "always": true } }
178
182
  - Windows (Cmd): `cmd /c 'openclaw nodes invoke --node <ID> --command mcp.tool.call --params "{\"name\":\"<tool_name>\",\"appPkg\":\"<pkgName>\",\"arguments\":<json-string>}"'`
179
183
  - Linux/macOS (Bash): `openclaw nodes invoke --node <IP> --command mcp.tool.call --params '{"name":"<tool_name>","appPkg":"<pkgName>","arguments":<json-string>}'`
180
184
 
181
- ### 执行前校验
185
+ ### 4.2 执行前校验
182
186
 
183
187
  按顺序完成以下校验,任一失败则停止执行:
184
188
 
185
- 1. **节点标识** — 从 `nodes status` 输出中提取 IP 或 ID
186
- 2. **工具是否支持** — 如果是 `MCP工具`,必须严格校验某一行的 `支持的设备ID` 是否等于当前节点标识 node 或 nodeID
189
+ 1. **节点标识** — 从 `nodes status --json` 输出中提取 IP 或 ID
190
+ 2. **工具是否支持** — 如果是 `MCP工具`,必须严格校验 `支持的设备ID列表` 中是否包含当前节点标识 node 或 nodeID
187
191
  3. **工具文档** — 确认已读取对应的 `references/*.md` 或 `mcptools/*.json`
188
192
  4. **命令名称** — 从文档中精确提取 command
189
193
  5. **必填参数** — 从文档中提取并校验所有必填字段
194
+ 6. **格式检验** - 严格按照4.1中定义的命令格式,**必须正确使用双引号、单引号和反斜杠转义字符**
190
195
 
191
- ### 错误处理与重试
196
+ ### 4.3 错误处理与重试
192
197
 
193
198
  最大重试次数:3 次,每次间隔 1 秒。
194
199
 
195
- | 错误类型 | 处理方式 | 可重试 |
196
- | -------------------------- | --------------------------------------- | --------------- |
197
- | 参数无效 | 校验参数后修正重试 | 是(最多 3 次) |
198
- | 连接错误 / 超时 / 临时故障 | 等待后重试 | 是(最多 3 次) |
199
- | 节点离线 | 重新执行 `nodes status` 确认 | 否 |
200
- | 权限拒绝 | 检查 `gateway.nodes.allowCommands` 配置 | 否 |
201
- | 节点不支持该能力 | 重新执行读取 `SKILL.md` 确认 | 是(最多 1 次) |
200
+ | 错误类型 | 处理方式 | 可重试 |
201
+ | -------------------------- | -------------------------------------- | -------------- |
202
+ | 参数无效 | 校验参数后修正重试 | 是(最多 3 次) |
203
+ | 连接错误 / 超时 / 临时故障 | 等待后重试 | 是(最多 3 次) |
204
+ | 节点离线 | 重新执行 `nodes status --json` 确认 | 否 |
205
+ | 权限拒绝 | 检查 `gateway.nodes.allowCommands` 配置 | 否 |
206
+ | 节点不支持该能力 | 重新执行读取 `SKILL.md` 确认 | 是(最多 1 次) |
202
207
 
203
208
  如果发送错误**必须强制执行**重新读取 `SKILL.md` 和 对应的工具定义文件,并重新执行。
204
209
  3 次重试均失败后,停止重试,向用户报告错误诊断并建议手动处理。
@@ -213,8 +218,13 @@ metadata: { "openclaw": { "emoji": "📱", "always": true } }
213
218
 
214
219
  - 示例:`❌ Honor Magic6 离线,请检查设备连接后重试`
215
220
 
221
+ **设备ID不匹配时**:说明设备不支持该操作,严禁输出设备ID。
222
+
223
+ - 示例:`❌ Honor Magic6 不支持该操作`
224
+
216
225
  **原则**:
217
226
 
218
227
  - 始终包含设备名称
219
228
  - 不暴露原始错误码
229
+ - **严禁使用行内代码块**,严禁使用 \`任何文本内容\` 标签。
220
230
  - 失败时必须提供下一步建议
@@ -0,0 +1,393 @@
1
+ ---
2
+ name: countdown_timer_management
3
+ description: >
4
+ 倒计时计时器管理工具集,支持创建、查询、暂停、恢复、重启和取消倒计时。
5
+ 核心逻辑遵循“先查后操”原则:对于非创建类操作,若用户未提供明确ID,需先调用查询工具获取列表;
6
+ 若匹配唯一则自动执行,若存在歧义则请求用户澄清。
7
+ ---
8
+
9
+ # Countdown Timer Management 倒计时计时器管理
10
+
11
+ ## Tool Provider
12
+ ```bash
13
+ com.hihonor.deskclock
14
+ ```
15
+
16
+ ## Tool Command
17
+
18
+ 本 Skill 包含一组原子化工具,根据用户意图动态选择调用。主要命令入口如下:
19
+
20
+ ```bash
21
+ # 创建计时器
22
+ createTimer --totalTime <毫秒> [--timerName <名称>]
23
+
24
+ # 查询计时器状态(用于前置检查或独立查询)
25
+ queryTimer [--timerName <名称>] [--timerState <状态>] [--totalTime <毫秒>]
26
+
27
+ # 暂停计时器
28
+ pauseTimer [--timerIdList <ID数组-string>]
29
+
30
+ # 恢复/继续计时器
31
+ resumeTimer [--timerIdList <ID数组-string>]
32
+
33
+ # 重启计时器
34
+ restartTimer [--timerIdList <ID数组-string>]
35
+
36
+ # 取消计时器
37
+ cancelTimer [--timerIdList <ID数组-string>]
38
+ ```
39
+ *(注意:timerIdList 接受字符串类型的参数,例如:[1,2,3]需要转义成 \"[1,2,3]\")*
40
+
41
+ ## 集成工作流
42
+
43
+ 在处理用户请求时,必须严格遵循以下编排逻辑,特别是针对**非创建类**的操作(暂停、恢复、重启、取消)。
44
+
45
+ ### Step 1: 意图解析与参数组装
46
+
47
+ 1. **识别意图**:判断用户是想要“创建”新计时器,还是对“现有”计时器进行操作(查、停、恢、重、消)。
48
+ 2. **创建类意图**:
49
+ * 提取 `totalTime`(必填,单位毫秒)和 `timerName`(选填,需润色为简洁语句)。
50
+ * 直接调用 `createTimer`。
51
+ 3. **操作类意图**(暂停/恢复/重启/取消):
52
+ * **检查参数**:用户是否提供了明确的 `timerIdList`?
53
+ * **是**:直接调用对应操作工具。
54
+ * **否**:进入“模糊匹配流程”。
55
+ 4. **模糊匹配流程**:
56
+ * 调用 `queryTimer` 获取当前所有相关计时器列表。
57
+ * 根据用户提供的名称(如“煮蛋”)或状态进行过滤。
58
+ * **判断匹配结果**:
59
+ * **无匹配**:返回提示“未找到相关计时器”。
60
+ * **唯一匹配**:自动提取该计时器的 ID,组装参数,**无需二次确认**,直接调用对应操作工具。
61
+ * **多重匹配/歧义**:将匹配到的计时器以 **Markdown 表格** 形式展示给用户,并提示用户明确指定(例如:“找到多个‘健身’计时器,请指定是哪一个?”)。
62
+
63
+ ### Step 2: 执行调用与结果处理
64
+
65
+ 1. 执行最终确定的工具调用。
66
+ 2. 解析返回结果中的 `clkRetCode`:
67
+ * **成功**:提取成功提示语及最新的计时器列表信息(ID, Name, State),向用户反馈执行结果。
68
+ * **失败**:提取 `errorMsg` 并向用户报错。
69
+
70
+ ### Step 3: 组装openclaw nodes invoke命令
71
+
72
+ **Windows(cmd)执行命令**:
73
+ ```bash
74
+ cmd /c 'openclaw nodes invoke --node <ID> --command mcp.tool.call --params "{\"name\":\"<工具名>\",\"appPkg\":\"com.hihonor.deskclock\",\"arguments\":<JSON参数>}"'
75
+ ```
76
+
77
+ **Linux(bash)执行命令**:
78
+ ```bash
79
+ openclaw nodes invoke --node <ID> --command mcp.tool.call --params '{"name":"<工具名>","appPkg":"com.hihonor.deskclock","arguments":<JSON参数>}"
80
+ ```
81
+
82
+
83
+ ### ASCII 流程图
84
+
85
+ ```ascii
86
+ Start
87
+ |
88
+ +-- [意图识别]
89
+ | |
90
+ | +-- 创建计时器? --> 提取 totalTime, timerName --> Call createTimer --> End
91
+ | |
92
+ | +-- 操作现有计时器? (暂停/恢复/重启/取消)
93
+ | |
94
+ | +-- 用户提供了明确 ID?
95
+ | | |
96
+ | | +-- Yes --> Call Target Tool with timerIdList --> End
97
+ | | |
98
+ | | +-- No --> Call queryTimer (Query)
99
+ | | |
100
+ | | +-- 解析返回列表
101
+ | | |
102
+ | | +-- 无匹配? --> 回复"未找到" --> End
103
+ | | |
104
+ | | +-- 唯一匹配? --> 自动提取 ID --> Call Target Tool --> End
105
+ | | |
106
+ | | +-- 多重匹配? --> 展示 Markdown 表格 --> 请求用户澄清 --> Wait for Input
107
+ |
108
+ End
109
+ ```
110
+
111
+ ## 参数定义
112
+
113
+ 以下是各工具的核心参数定义,严格按照参数定义与说明进行槽位提取。
114
+
115
+ ### 1. 创建计时器 (`createTimer`)
116
+
117
+ ```json
118
+ {
119
+ "type": "object",
120
+ "properties": {
121
+ "totalTime": {
122
+ "type": "integer",
123
+ "description": "倒计时总时长(必填),单位为毫秒。需要将用户表达的时间统一换算为毫秒,例如:1分钟=60000,5分钟=300000,1小时=3600000。",
124
+ "required": true
125
+ },
126
+ "timerName": {
127
+ "type": "string",
128
+ "description": "计时器名称。选填,当用户明确说明名称时从query中提取。若无特殊要求,应根据用户Query润色为简洁语句(如'健身'而非'我要开始健身了')。",
129
+ "required": false
130
+ }
131
+ }
132
+ }
133
+ ```
134
+
135
+ ### 2. 查询计时器 (`queryTimer`)
136
+
137
+ ```json
138
+ {
139
+ "type": "object",
140
+ "properties": {
141
+ "totalTime": {
142
+ "type": "integer",
143
+ "description": "表示需要匹配的计时器总时长,非必填。仅当用户明确提到计时器时长时填写;如果用户未提及时长,则不填写。填写值需转换为毫秒整数,例如用户说1分钟时填写60000。"
144
+ },
145
+ "timerName": {
146
+ "type": "string",
147
+ "description": "表示用户指定的倒计时名称,非必填。仅当用户明确提到计时器名称时填写;如果用户未提及具体名称,则不填写。填写内容应与用户输入中的名称原文保持一致,不做改写或归一化。"
148
+ },
149
+ "timerState": {
150
+ "type": "string",
151
+ "description": "表示用户希望筛选的计时器状态,非必填。仅当用户明确指定计时器状态时填写;未指定时不填写。枚举值说明如下:暂停:计时器已开始但当前处于暂停状态,适用于用户查询已暂停的计时器;运行中:计时器当前正在倒计时,适用于用户查询正在运行的计时器;响铃:计时器已结束并正在响铃,适用于用户查询已到时的计时器。填写时仅可从上述枚举值中选择与用户原意一致的一项。",
152
+ "enum": [
153
+ "暂停",
154
+ "运行中",
155
+ "响铃"
156
+ ]
157
+ }
158
+ }
159
+ }
160
+ ```
161
+
162
+ ### 3. 操作类工具 (`pauseTimer`, `resumeTimer`, `restartTimer`, `cancelTimer`)
163
+
164
+ 这些工具共享相似的参数结构,核心在于 `timerIdList`。
165
+
166
+ ```json
167
+ {
168
+ "type": "object",
169
+ "properties": {
170
+ "timerIdList": {
171
+ "type": "string",
172
+ "description": "必填参数,需要操作的计时器ID列表,输入为整数数组的字符串形式,例如[5,3]。若用户未指定且上下文无法唯一确定,要求用户补充说明,需遵循'先查后操'的工作流逻辑。"
173
+ }
174
+ }
175
+ }
176
+ ```
177
+
178
+ **参数注意事项:**
179
+ * **单位统一**:`totalTime` 始终为**毫秒**。例如:5分钟 = 300,000 ms。
180
+ * **ID 依赖性**:除创建外,其他操作强烈依赖准确的 `timerId`。严禁在未查询的情况下猜测 ID。
181
+ * **默认行为**:若用户说“暂停计时器”但未指定哪个,且当前只有一个运行中的计时器,系统应能智能推断;若有多个,必须通过查询流程让用户选择。
182
+
183
+ ### 4. 返回参数说明
184
+ 所有倒计时工具的返回参数定义如下:
185
+ ```json
186
+ {
187
+ "clkRetCode": {
188
+ "type": "integer",
189
+ "description": "时钟服务调用结果码,用于表示接口执行结果。1表示调用成功;0表示未知错误;负数表示调用失败。-20002 表示计时器ID不存在,其余值表示其他计时器错误场景。"
190
+ },
191
+ "errorMsg": {
192
+ "type": "string",
193
+ "description": "错误信息描述。当 clkRetCode 不为 1 时返回具体错误原因;当 clkRetCode 为 1 时返回 \"Success\"。"
194
+ },
195
+ "extraBody": {
196
+ "type": "array",
197
+ "description": "本次操作后返回的计时器最新完整状态列表。每个元素表示一个计时器对象,包含计时器运行状态、剩余时间以及相关配置字段,用于客户端更新本地计时器数据。",
198
+ "items": {
199
+ "type": "object",
200
+ "properties": {
201
+ "id": {
202
+ "type": "integer",
203
+ "description": "计时器唯一标识ID"
204
+ },
205
+ "timerName": {
206
+ "type": "string",
207
+ "description": "计时器名称,如果用户未自定义则使用系统默认名称(如1分钟、10分钟)"
208
+ },
209
+ "totalTime": {
210
+ "type": "integer",
211
+ "description": "计时器总时长,单位毫秒"
212
+ },
213
+ "timerState": {
214
+ "type": "integer",
215
+ "description": "计时器状态:0初始状态,1运行中,2暂停,3倒计时已到时间处于超时状态,4已停止"
216
+ },
217
+ "startTime": {
218
+ "type": "integer",
219
+ "description": "计时器开始时间戳,单位毫秒"
220
+ },
221
+ "stopTime": {
222
+ "type": "integer",
223
+ "description": "计时器停止时间戳,单位毫秒"
224
+ },
225
+ "remainingTime": {
226
+ "type": "integer",
227
+ "description": "计时器剩余时间,单位毫秒,暂停时记录用于恢复计时"
228
+ }
229
+ }
230
+ }
231
+ }
232
+ }
233
+ ```
234
+
235
+
236
+ ## Query 示例及输出
237
+
238
+ ### 示例 1:创建计时器
239
+
240
+ **用户输入**:
241
+ > “帮我设一个10分钟的煮蛋计时器”
242
+
243
+ **JSON 参数**:
244
+ ```json
245
+ {
246
+ "totalTime": 600000,
247
+ "timerName": "煮蛋"
248
+ }
249
+ ```
250
+ **Windows(cmd)执行命令**:
251
+ ```bash
252
+ cmd /c 'openclaw nodes invoke --node <ID> --command mcp.tool.call --params "{\"name\":\"createTimer\",\"appPkg\":\"com.hihonor.deskclock\",\"arguments\":{\"totalTime\":600000,\"timerName\":\"煮蛋\"}}"'
253
+ ```
254
+ **Linux(bash)执行命令**:
255
+ ```bash
256
+ openclaw nodes invoke --node <ID> --command mcp.tool.call --params '{"name":"createTimer","appPkg":"com.hihonor.deskclock","arguments":{"totalTime":600000,"timerName":"煮蛋"}}'
257
+ ```
258
+
259
+ **预期输出逻辑**:
260
+ 检查 `clkRetCode`,若成功,返回:“已创建‘煮蛋’计时器,时长10分钟。”
261
+
262
+ ---
263
+
264
+ ### 示例 2:模糊匹配后自动执行(唯一匹配)
265
+
266
+ **用户输入**:
267
+ > “暂停煮蛋的计时器”
268
+ *(假设系统中只有一个名为“煮蛋”的计时器,ID为 1)*
269
+
270
+ **Step 1: 内部调用查询**
271
+ **Windows(cmd)执行命令**:
272
+ ```bash
273
+ cmd /c 'openclaw nodes invoke --node <ID> --command mcp.tool.call --params "{\"name\":\"queryTimer\",\"appPkg\":\"com.hihonor.deskclock\",\"arguments\":{\"timerName\":\"煮蛋\"}}"'
274
+ ```
275
+ **Linux(bash)执行命令**:
276
+ ```bash
277
+ openclaw nodes invoke --node <ID> --command mcp.tool.call --params '{"name":"queryTimer","appPkg":"com.hihonor.deskclock","arguments":{"timerName":"煮蛋"}}'
278
+ ```
279
+
280
+ *查询返回*:`[{ "timerId": 1, "timerName": "煮蛋", "timerState": "running" }]`
281
+
282
+ **Step 2: 逻辑判断**
283
+ 匹配结果为唯一项 (ID: 1)。
284
+
285
+ **Step 3: 执行操作**
286
+ **JSON 参数**:
287
+ ```json
288
+ {
289
+ "timerIdList": "[1]"
290
+ }
291
+ ```
292
+ **Windows(cmd)执行命令**:
293
+ ```bash
294
+ cmd /c 'openclaw nodes invoke --node <ID> --command mcp.tool.call --params "{\"name\":\"pauseTimer\",\"appPkg\":\"com.hihonor.deskclock\",\"arguments\":{\"timerIdList\":\"[1]\"}}"'
295
+ ```
296
+ **Linux(bash)执行命令**:
297
+ ```bash
298
+ openclaw nodes invoke --node <ID> --command mcp.tool.call --params '{"name":"pauseTimer","appPkg":"com.hihonor.deskclock","arguments":{"timerIdList":"[1]"}}'
299
+ ```
300
+
301
+ **预期输出逻辑**:
302
+ 返回:“已暂停‘煮蛋’计时器。”
303
+
304
+ ---
305
+
306
+ ### 示例 3:模糊匹配需用户澄清(多重匹配)
307
+
308
+ **用户输入**:
309
+ > “恢复健身计时器”
310
+ *(假设系统中有两个名为“健身”的计时器,ID分别为 10 和 12)*
311
+
312
+ **Step 1: 内部调用查询**
313
+ **Windows(cmd)执行命令**:
314
+ ```bash
315
+ cmd /c 'openclaw nodes invoke --node <ID> --command mcp.tool.call --params "{\"name\":\"queryTimer\",\"appPkg\":\"com.hihonor.deskclock\",\"arguments\":{\"timerName\":\"健身\"}}"'
316
+ ```
317
+ **Linux(bash)执行命令**:
318
+ ```bash
319
+ openclaw nodes invoke --node <ID> --command mcp.tool.call --params '{"name":"queryTimer","appPkg":"com.hihonor.deskclock","arguments":{"timerName":"健身"}}'
320
+ ```
321
+
322
+ *查询返回*:
323
+ ```json
324
+ [
325
+ { "timerId": 10, "timerName": "健身", "timerState": "paused" },
326
+ { "timerId": 12, "timerName": "健身-有氧", "timerState": "paused" }
327
+ ]
328
+ ```
329
+
330
+ **Step 2: 逻辑判断**
331
+ 匹配结果为多项,存在歧义。
332
+
333
+ **Step 3: 用户交互(不立即执行操作工具)**
334
+ **系统回复**:
335
+ > 找到以下 2 个“健身”计时器,请指定要恢复哪一个:
336
+ >
337
+ > | 序号 | ID | 名称 | 状态 |
338
+ > | :--- | :--- | :--- | :--- |
339
+ > | 1 | 10 | 健身 | 暂停 |
340
+ > | 2 | 12 | 健身 | 暂停 |
341
+
342
+ *(等待用户进一步指令,如“恢复第一个”)*
343
+
344
+ ---
345
+
346
+ ### 示例 4:明确 ID 操作
347
+
348
+ **用户输入**:
349
+ > “重启第1个和第2个倒计时”
350
+ *(假设用户已知或通过上文得知 ID 为 10 和 12)*
351
+
352
+ **JSON 参数**:
353
+ ```json
354
+ {
355
+ "timerIdList": "[10, 12]"
356
+ }
357
+ ```
358
+ **Windows(cmd)执行命令**:
359
+ ```bash
360
+ cmd /c 'openclaw nodes invoke --node <ID> --command mcp.tool.call --params "{\"name\":\"pauseTimer\",\"appPkg\":\"com.hihonor.deskclock\",\"arguments\":{\"timerIdList\":\"[10,12]\"}}"'
361
+ ```
362
+ **Linux(bash)执行命令**:
363
+ ```bash
364
+ openclaw nodes invoke --node <ID> --command mcp.tool.call --params '{"name":"pauseTimer","appPkg":"com.hihonor.deskclock","arguments":{"timerIdList":"[10,12]"}}'
365
+ ```
366
+
367
+ **预期输出逻辑**:
368
+ 返回:“已重启 ID 为 10 和 12 的计时器。”
369
+
370
+ ---
371
+
372
+ ### 示例 5:查询计时器状态
373
+
374
+ **用户输入**:
375
+ > “看看现在有哪些计时器在跑”
376
+
377
+ **JSON 参数**:
378
+ ```json
379
+ {
380
+ "timerState": "running",
381
+ }
382
+ ```
383
+ **Windows(cmd)执行命令**:
384
+ ```bash
385
+ cmd /c 'openclaw nodes invoke --node <ID> --command mcp.tool.call --params "{\"name\":\"queryTimer\",\"appPkg\":\"com.hihonor.deskclock\",\"arguments\":{\"timerState\":\"running\"}}"'
386
+ ```
387
+ **Linux(bash)执行命令**:
388
+ ```bash
389
+ openclaw nodes invoke --node <ID> --command mcp.tool.call --params '{"name":"queryTimer","appPkg":"com.hihonor.deskclock","arguments":{"timerState":"running"}}'
390
+ ```
391
+
392
+ **预期输出逻辑**:
393
+ 返回 Markdown 表格展示所有计时器的 ID、名称、剩余时间和状态。
@@ -0,0 +1,196 @@
1
+ ---
2
+ name: desktop
3
+ description: >
4
+ 桌面管理与配置工具。支持查询桌面布局、打开桌面设置页,并对风格、角标、图标、
5
+ 快捷方式、搜索入口、应用名称、通透模式与布局等进行配置,按 actionType 执行操作。
6
+ ---
7
+
8
+ # Desktop 桌面管理
9
+
10
+ ## Tool Provider
11
+ ```bash
12
+ com.hihonor.magicvoice
13
+ ```
14
+
15
+ ## Tool Command
16
+ ```bash
17
+ desktop
18
+ ```
19
+
20
+ ## 集成工作流
21
+
22
+ ### Step 1: 意图解析与参数组装
23
+ ```
24
+ ┌─────────────────────────────────────────────────────────────┐
25
+ │ 意图识别与参数提取 │
26
+ │ - 识别操作类型: 打开/关闭/设置/查询/添加/调大/调小/设值 │
27
+ │ - 识别操作对象: 桌面/风格/角标/图标/快捷方式/搜索入口/ │
28
+ │ 桌面应用名称/通透模式/布局 │
29
+ │ - 提取风格类型: 标准/抽屉 │
30
+ │ - 提取角标类型: 数字/圆点 │
31
+ │ - 提取数值信息: 数字/百分比/分数/极值/布局规格 │
32
+ │ - 提取应用名称: app(如需按应用粒度操作) │
33
+ │ - 特殊处理: "显示/隐藏应用名称" → 打开/关闭目标 │
34
+ └─────────────────────────────────────────────────────────────┘
35
+
36
+ ┌─────────────────────────────────────────────────────────────┐
37
+ │ 消歧与槽位填充 │
38
+ │ - 未明确操作对象时,需根据关键词推断或追问 │
39
+ │ - 目标为风格且未给styleType时,需追问风格类型 │
40
+ │ - 目标为角标且未给badgeType时,需追问角标类型 │
41
+ │ - 调大/调小未给数值时,按系统默认步长调整 │
42
+ │ - app仅当用户指明具体应用时填写 │
43
+ │ - 验证应用名称有效性(如微信、知乎等) │
44
+ └─────────────────────────────────────────────────────────────┘
45
+
46
+ ┌─────────────────────────────────────────────────────────────┐
47
+ │ 生成工具调用 │
48
+ │ - 组装 actionType, target 及可选参数(styleType, badgeType, │
49
+ │ app, number, numberType) │
50
+ │ - 生成平台特定的命令格式 │
51
+ └─────────────────────────────────────────────────────────────┘
52
+ ```
53
+
54
+ ### Step 2: 执行调用
55
+ - 根据操作系统选择对应的命令格式
56
+ - Windows: Cmd 格式(双引号需转义)
57
+ - Linux: Bash 格式(单引号包裹)
58
+
59
+ ## 参数定义
60
+ ```json
61
+ {
62
+ "type": "object",
63
+ "required": ["actionType", "target"],
64
+ "properties": {
65
+ "actionType": {
66
+ "type": "string",
67
+ "enum": ["打开", "关闭", "设置", "查询", "添加", "调大", "调小", "设值"],
68
+ "description": "必填参数,操作类型,用于指示对桌面相关功能进行的操作"
69
+ },
70
+ "target": {
71
+ "type": "string",
72
+ "enum": ["桌面", "风格", "角标", "图标", "快捷方式", "搜索入口", "桌面应用名称", "通透模式", "布局"],
73
+ "description": "必填参数,操作对象,指明要操作的桌面功能项"
74
+ },
75
+ "styleType": {
76
+ "type": "string",
77
+ "enum": ["标准", "抽屉"],
78
+ "description": "桌面风格类型(当 target=风格 或 需设置风格时使用)"
79
+ },
80
+ "badgeType": {
81
+ "type": "string",
82
+ "enum": ["数字", "圆点"],
83
+ "description": "角标类型(当 target=角标 且需指定类型时使用)"
84
+ },
85
+ "app": {
86
+ "type": "string",
87
+ "description": "应用名称(在按应用粒度操作角标或应用名称显示/隐藏时填写,如“微信”、“知乎”)"
88
+ },
89
+ "number": {
90
+ "type": "string",
91
+ "description": "数值/百分比/分数/极值/布局规格等,例如“10%”“1/3”“最小”“零”“4X5”"
92
+ },
93
+ "numberType": {
94
+ "type": "string",
95
+ "enum": ["数字", "百分比", "分数", "极值", "布局"],
96
+ "description": "数值类型,用于解释 number 的取值语义"
97
+ }
98
+ }
99
+ }
100
+ ```
101
+
102
+ ### 参数注意事项
103
+ 1. **同义词/间接表述映射**: "返回桌面/回到主屏/回主界面"→actionType=打开 + target=桌面;"小圆点/红点提醒"统一识别为 badgeType=圆点;"设为/调到/调成/切换到"→actionType=设值;"显示应用名称/隐藏应用名称"→actionType=打开/关闭 且 target=桌面应用名称。
104
+ 2. **默认值或缺省行为**: `actionType` 为"调大/调小"且未给 `number` 时,按系统默认步长调整;未指定 `app` 时,默认对系统全局生效(非按单一应用)。
105
+ 3. **参数间关联/依赖关系**:
106
+ 1. 当 `actionType`=`设置/打开/关闭`时,如果`target` =`风格` ,必须配合 `styleType`;如果`target`=`角标` ,必须配合 `badgeType`;涉及通透模式、图标大小、布局设定等数值设置时,`number` 与 `numberType` 必须联动填写。
107
+ 2. `actionType`和`target` 必须组合出现。
108
+ 4. **可选参数填写条件**: `app` 仅当用户明确提及具体应用时填写;当 `numberType`=`布局` 时,`number` 应为布局规格(如 `"4X5"`)。
109
+
110
+ ## Query 示例及输出
111
+
112
+ ### 示例 1: 返回桌面
113
+ **用户输入**: "返回桌面"
114
+
115
+ **工具**: "desktop"
116
+
117
+ **JSON 参数**:
118
+ ```json
119
+ {"actionType":"打开","target":"桌面"}
120
+ ```
121
+
122
+ **Windows (Cmd) 执行命令**:
123
+ ```bash
124
+ cmd /c 'openclaw nodes invoke --node <ID> --command mcp.tool.call --params "{\"name\":\"desktop\",\"appPkg\":\"com.hihonor.magicvoice\",\"arguments\":{\"actionType\":\"打开\",\"target\":\"桌面\"}}"'
125
+ ```
126
+
127
+ **Linux (Bash) 执行命令**:
128
+ ```bash
129
+ openclaw nodes invoke --node <ID> --command mcp.tool.call --params '{"name":"desktop","appPkg":"com.hihonor.magicvoice","arguments":{"actionType":"打开","target":"桌面"}}'
130
+ ```
131
+
132
+ ---
133
+
134
+ ### 示例 2: 设置桌面为标准风格
135
+ **用户输入**: "设置桌面标准风格"
136
+
137
+ **工具**: "desktop"
138
+
139
+ **JSON 参数**:
140
+ ```json
141
+ {"actionType":"设置","target":"风格","styleType":"标准"}
142
+ ```
143
+
144
+ **Windows (Cmd) 执行命令**:
145
+ ```bash
146
+ cmd /c 'openclaw nodes invoke --node <ID> --command mcp.tool.call --params "{\"name\":\"desktop\",\"appPkg\":\"com.hihonor.magicvoice\",\"arguments\":{\"actionType\":\"设置\",\"target\":\"风格\",\"styleType\":\"标准\"}}"'
147
+ ```
148
+
149
+ **Linux (Bash) 执行命令**:
150
+ ```bash
151
+ openclaw nodes invoke --node <ID> --command mcp.tool.call --params '{"name":"desktop","appPkg":"com.hihonor.magicvoice","arguments":{"actionType":"设置","target":"风格","styleType":"标准"}}'
152
+ ```
153
+
154
+ ---
155
+
156
+ ### 示例 3: 桌面透明度提高10%
157
+ **用户输入**: "桌面透明度提高10%"
158
+
159
+ **工具**: "desktop"
160
+
161
+ **JSON 参数**:
162
+ ```json
163
+ {"actionType":"调大","target":"通透模式","number":"10%","numberType":"百分比"}
164
+ ```
165
+
166
+ **Windows (Cmd) 执行命令**:
167
+ ```bash
168
+ cmd /c 'openclaw nodes invoke --node <ID> --command mcp.tool.call --params "{\"name\":\"desktop\",\"appPkg\":\"com.hihonor.magicvoice\",\"arguments\":{\"actionType\":\"调大\",\"target\":\"通透模式\",\"number\":\"10%\",\"numberType\":\"百分比\"}}"'
169
+ ```
170
+
171
+ **Linux (Bash) 执行命令**:
172
+ ```bash
173
+ openclaw nodes invoke --node <ID> --command mcp.tool.call --params '{"name":"desktop","appPkg":"com.hihonor.magicvoice","arguments":{"actionType":"调大","target":"通透模式","number":"10%","numberType":"百分比"}}'
174
+ ```
175
+
176
+ ---
177
+
178
+ ### 示例 4: 切换桌面布局为 4X5
179
+ **用户输入**: "切换桌面到4X5格式。"
180
+
181
+ **工具**: "desktop"
182
+
183
+ **JSON 参数**:
184
+ ```json
185
+ {"actionType":"设值","target":"布局","number":"4X5","numberType":"布局"}
186
+ ```
187
+
188
+ **Windows (Cmd) 执行命令**:
189
+ ```bash
190
+ cmd /c 'openclaw nodes invoke --node <ID> --command mcp.tool.call --params "{\"name\":\"desktop\",\"appPkg\":\"com.hihonor.magicvoice\",\"arguments\":{\"actionType\":\"设值\",\"target\":\"布局\",\"number\":\"4X5\",\"numberType\":\"布局\"}}"'
191
+ ```
192
+
193
+ **Linux (Bash) 执行命令**:
194
+ ```bash
195
+ openclaw nodes invoke --node <ID> --command mcp.tool.call --params '{"name":"desktop","appPkg":"com.hihonor.magicvoice","arguments":{"actionType":"设值","target":"布局","number":"4X5","numberType":"布局"}}'
196
+ ```