@honor-claw/yoyo 0.0.1-beta.4 → 0.0.1-beta.6

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/index.ts CHANGED
@@ -2,7 +2,7 @@ import { type OpenClawPluginApi } from "openclaw/plugin-sdk";
2
2
  import { setYoyoRuntime } from "./src/runtime.js";
3
3
  import { registerCommands } from "./src/commands/index.js";
4
4
  import { YoyoPluginConfigSchema } from "./src/schemas.js";
5
- import { ClawConnectionService } from "./src/services/connection/index.js";
5
+ import { createClawConnectionService } from "./src/services/connection/index.js";
6
6
  import { setClawLogger } from "./src/utils/logger.js";
7
7
 
8
8
  const plugin = {
@@ -15,7 +15,7 @@ const plugin = {
15
15
  setClawLogger(api.logger);
16
16
 
17
17
  // 利用服务来管理核心连接任务进行~
18
- api.registerService(ClawConnectionService);
18
+ api.registerService(createClawConnectionService(api));
19
19
 
20
20
  // 注册所有的命令行
21
21
  registerCommands(api);
@@ -22,6 +22,10 @@
22
22
  }
23
23
  },
24
24
  "additionalProperties": false
25
+ },
26
+ "env": {
27
+ "type": "string",
28
+ "enum": ["test", "production"]
25
29
  }
26
30
  }
27
31
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@honor-claw/yoyo",
3
- "version": "0.0.1-beta.4",
3
+ "version": "0.0.1-beta.6",
4
4
  "type": "module",
5
5
  "description": "OpenClaw Honor Yoyo connection plugin",
6
6
  "scripts": {
@@ -30,7 +30,6 @@
30
30
  ]
31
31
  },
32
32
  "dependencies": {
33
- "@sinclair/typebox": "0.34.48",
34
33
  "http-proxy-agent": "^8.0.0",
35
34
  "https-proxy-agent": "^8.0.0",
36
35
  "jsonwebtoken": "^9.0.3",
@@ -47,6 +46,7 @@
47
46
  "@types/ws": "^8.5.13",
48
47
  "@vitest/coverage-v8": "^2.1.8",
49
48
  "commander": "^14.0.3",
49
+ "openclaw": "2026.3.8",
50
50
  "tsx": "^4.21.0",
51
51
  "typescript": "^5.7.0",
52
52
  "vitest": "^2.1.8"
@@ -0,0 +1,182 @@
1
+ ---
2
+ name: search
3
+ description: "Search the web using Tavily's LLM-optimized search API. Returns relevant results with content snippets, scores, and metadata. Use when you need to find web content on any topic without writing code."
4
+ ---
5
+
6
+ # Search Skill
7
+
8
+ Search the web and get relevant results optimized for LLM consumption.
9
+
10
+ ## Authentication
11
+
12
+ The script uses OAuth via the Tavily MCP server. **No manual setup required** - on first run, it will:
13
+ 1. Check for existing tokens in `~/.mcp-auth/`
14
+ 2. If none found, automatically open your browser for OAuth authentication
15
+
16
+ > **Note:** You must have an existing Tavily account. The OAuth flow only supports login — account creation is not available through this flow. [Sign up at tavily.com](https://tavily.com) first if you don't have an account.
17
+
18
+ ### Alternative: API Key
19
+
20
+ If you prefer using an API key, get one at https://tavily.com and add to `~/.claude/settings.json`:
21
+ ```json
22
+ {
23
+ "env": {
24
+ "TAVILY_API_KEY": "tvly-your-api-key-here"
25
+ }
26
+ }
27
+ ```
28
+
29
+ ## Quick Start
30
+
31
+ ### Using the Script
32
+
33
+ ```bash
34
+ ./scripts/search.sh '<json>'
35
+ ```
36
+
37
+ **Examples:**
38
+ ```bash
39
+ # Basic search
40
+ ./scripts/search.sh '{"query": "python async patterns"}'
41
+
42
+ # With options
43
+ ./scripts/search.sh '{"query": "React hooks tutorial", "max_results": 10}'
44
+
45
+ # Advanced search with filters
46
+ ./scripts/search.sh '{"query": "AI news", "time_range": "week", "max_results": 10}'
47
+
48
+ # Domain-filtered search
49
+ ./scripts/search.sh '{"query": "machine learning", "include_domains": ["arxiv.org", "github.com"], "search_depth": "advanced"}'
50
+ ```
51
+
52
+ ### Basic Search
53
+
54
+ ```bash
55
+ curl --request POST \
56
+ --url https://api.tavily.com/search \
57
+ --header "Authorization: Bearer $TAVILY_API_KEY" \
58
+ --header 'Content-Type: application/json' \
59
+ --data '{
60
+ "query": "latest developments in quantum computing",
61
+ "max_results": 5
62
+ }'
63
+ ```
64
+
65
+ ### Advanced Search
66
+
67
+ ```bash
68
+ curl --request POST \
69
+ --url https://api.tavily.com/search \
70
+ --header "Authorization: Bearer $TAVILY_API_KEY" \
71
+ --header 'Content-Type: application/json' \
72
+ --data '{
73
+ "query": "machine learning best practices",
74
+ "max_results": 10,
75
+ "search_depth": "advanced",
76
+ "include_domains": ["arxiv.org", "github.com"]
77
+ }'
78
+ ```
79
+
80
+ ## API Reference
81
+
82
+ ### Endpoint
83
+
84
+ ```
85
+ POST https://api.tavily.com/search
86
+ ```
87
+
88
+ ### Headers
89
+
90
+ | Header | Value |
91
+ |--------|-------|
92
+ | `Authorization` | `Bearer <TAVILY_API_KEY>` |
93
+ | `Content-Type` | `application/json` |
94
+
95
+ ### Request Body
96
+
97
+ | Field | Type | Default | Description |
98
+ |-------|------|---------|-------------|
99
+ | `query` | string | Required | Search query (keep under 400 chars) |
100
+ | `max_results` | integer | 10 | Maximum results (0-20) |
101
+ | `search_depth` | string | `"basic"` | `ultra-fast`, `fast`, `basic`, `advanced` |
102
+ | `topic` | string | `"general"` | Search topic (general only) |
103
+ | `time_range` | string | null | `day`, `week`, `month`, `year` |
104
+ | `start_date` | string | null | Return results after this date (`YYYY-MM-DD`) |
105
+ | `end_date` | string | null | Return results before this date (`YYYY-MM-DD`) |
106
+ | `include_domains` | array | [] | Domains to include (max 300) |
107
+ | `exclude_domains` | array | [] | Domains to exclude (max 150) |
108
+ | `country` | string | null | Boost results from a specific country (general topic only) |
109
+ | `include_raw_content` | boolean | false | Include full page content |
110
+ | `include_images` | boolean | false | Include image results |
111
+ | `include_image_descriptions` | boolean | false | Include descriptions for images |
112
+ | `include_favicon` | boolean | false | Include favicon URL for each result |
113
+
114
+ ### Response Format
115
+
116
+ ```json
117
+ {
118
+ "query": "latest developments in quantum computing",
119
+ "results": [
120
+ {
121
+ "title": "Page Title",
122
+ "url": "https://example.com/page",
123
+ "content": "Extracted text snippet...",
124
+ "score": 0.85
125
+ }
126
+ ],
127
+ "response_time": 1.2
128
+ }
129
+ ```
130
+
131
+ ## Search Depth
132
+
133
+ | Depth | Latency | Relevance | Content Type |
134
+ |-------|---------|-----------|--------------|
135
+ | `ultra-fast` | Lowest | Lower | NLP summary |
136
+ | `fast` | Low | Good | Chunks |
137
+ | `basic` | Medium | High | NLP summary |
138
+ | `advanced` | Higher | Highest | Chunks |
139
+
140
+ **When to use each:**
141
+ - `ultra-fast`: Real-time chat, autocomplete
142
+ - `fast`: Need chunks but latency matters
143
+ - `basic`: General-purpose, balanced
144
+ - `advanced`: Precision matters (default recommendation)
145
+
146
+ ## Examples
147
+
148
+ ### Domain-Filtered Search
149
+
150
+ ```bash
151
+ curl --request POST \
152
+ --url https://api.tavily.com/search \
153
+ --header "Authorization: Bearer $TAVILY_API_KEY" \
154
+ --header 'Content-Type: application/json' \
155
+ --data '{
156
+ "query": "Python async best practices",
157
+ "include_domains": ["docs.python.org", "realpython.com", "github.com"],
158
+ "search_depth": "advanced"
159
+ }'
160
+ ```
161
+
162
+ ### Search with Full Content
163
+
164
+ ```bash
165
+ curl --request POST \
166
+ --url https://api.tavily.com/search \
167
+ --header "Authorization: Bearer $TAVILY_API_KEY" \
168
+ --header 'Content-Type: application/json' \
169
+ --data '{
170
+ "query": "React hooks tutorial",
171
+ "max_results": 3,
172
+ "include_raw_content": true
173
+ }'
174
+ ```
175
+
176
+ ## Tips
177
+
178
+ - **Keep queries under 400 characters** - Think search query, not prompt
179
+ - **Break complex queries into sub-queries** - Better results than one massive query
180
+ - **Use `include_domains`** to focus on trusted sources
181
+ - **Use `time_range`** for recent information
182
+ - **Filter by `score`** (0-1) to get highest relevance results
@@ -0,0 +1,69 @@
1
+ #!/bin/bash
2
+ # Tavily Search API script
3
+ # Usage: ./search.sh '{"query": "your search query", ...}'
4
+ # Example: ./search.sh '{"query": "AI news", "time_range": "week", "max_results": 10}'
5
+
6
+ set -e
7
+
8
+ # Check for TAVILY_API_KEY environment variable
9
+ if [ -z "$TAVILY_API_KEY" ]; then
10
+ echo "Error: TAVILY_API_KEY environment variable is required" >&2
11
+ echo "Please set it: export TAVILY_API_KEY='your-api-key'" >&2
12
+ exit 1
13
+ fi
14
+
15
+ JSON_INPUT="$1"
16
+
17
+ if [ -z "$JSON_INPUT" ]; then
18
+ echo "Usage: ./search.sh '<json>'"
19
+ echo ""
20
+ echo "Required:"
21
+ echo " query: string - Search query (keep under 400 chars)"
22
+ echo ""
23
+ echo "Optional:"
24
+ echo " search_depth: \"ultra-fast\", \"fast\", \"basic\" (default), \"advanced\""
25
+ echo " topic: \"general\" (default)"
26
+ echo " max_results: 1-20 (default: 10)"
27
+ echo " time_range: \"day\", \"week\", \"month\", \"year\""
28
+ echo " start_date: \"YYYY-MM-DD\""
29
+ echo " end_date: \"YYYY-MM-DD\""
30
+ echo " include_domains: [\"domain1.com\", \"domain2.com\"]"
31
+ echo " exclude_domains: [\"domain1.com\", \"domain2.com\"]"
32
+ echo " country: country name (general topic only)"
33
+ echo " include_raw_content: true/false"
34
+ echo " include_images: true/false"
35
+ echo " include_image_descriptions: true/false"
36
+ echo " include_favicon: true/false"
37
+ echo ""
38
+ echo "Example:"
39
+ echo " ./search.sh '{\"query\": \"latest AI trends\", \"time_range\": \"week\"}'"
40
+ exit 1
41
+ fi
42
+
43
+ MCP_REQUEST='{
44
+ "jsonrpc": "2.0",
45
+ "id": 1,
46
+ "method": "tools/call",
47
+ "params": {
48
+ "name": "tavily_search",
49
+ "arguments": '"$JSON_INPUT"'
50
+ }
51
+ }'
52
+
53
+ # Call Tavily MCP server via HTTPS
54
+ RESPONSE=$(curl -s --request POST \
55
+ --url "https://mcp.tavily.com/mcp" \
56
+ --header "Authorization: Bearer $TAVILY_API_KEY" \
57
+ --header 'Content-Type: application/json' \
58
+ --header 'Accept: application/json, text/event-stream' \
59
+ --header 'x-client-source: claude-code-skill' \
60
+ --data "$MCP_REQUEST")
61
+
62
+ # Parse SSE response and extract the JSON result
63
+ JSON_DATA=$(echo "$RESPONSE" | grep '^data:' | sed 's/^data://' | head -1)
64
+
65
+ if [ -n "$JSON_DATA" ]; then
66
+ echo "$JSON_DATA"
67
+ else
68
+ echo "$RESPONSE"
69
+ fi
@@ -5,7 +5,7 @@ description: Whenever a task requires **operating or controlling the phone**, eg
5
5
  metadata: { "openclaw": { "emoji": "📱", "always": true } }
6
6
  ---
7
7
 
8
- # Control phone with YOYO
8
+ # YOYO Control
9
9
 
10
10
  Follow the workflow to control phone or pad with YOYO, Don't guess the commands.
11
11
 
@@ -13,9 +13,9 @@ Follow the workflow to control phone or pad with YOYO, Don't guess the commands.
13
13
 
14
14
  Follow this **4-step workflow** when using the skill:
15
15
 
16
- 1. Query the device status to identify available device nodes.
17
- 2. Determine the target node, required tool, and execution parameters based on the user's intent.
18
- 3. Call the node tool using the correct parameter format.
16
+ 1. Query the nodes status to identify available device, and determine the target device.
17
+ 2. Plan the tool to use, and extract command & parameters according to the tool reference.
18
+ 3. Invoke node with correct nodeId, command and parameters.
19
19
  4. Present the result and confirm whether the operation was successful.
20
20
 
21
21
  ### Step 1. Discover Nodes
@@ -26,9 +26,11 @@ Follow this **4-step workflow** when using the skill:
26
26
 
27
27
  **Execution result**:
28
28
 
29
+ ```markdown
29
30
  | Node | ID | IP | Detail | Status | Caps |
30
31
  | ---------- | -------- | -------- | -------- | -------- | ------ |
31
32
  | <nodeName> | <nodeId> | <nodeIP> | <detail> | <status> | <caps> |
33
+ ```
32
34
 
33
35
  #### Capability Matching Logic
34
36
 
@@ -74,17 +76,19 @@ Before executing any device control operation, you **MUST** consult the correspo
74
76
 
75
77
  ### Available Tool References
76
78
 
77
- | Reference File | Capability | Description | Required Node Caps |
78
- | ---------------------------------- | ---------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------- |
79
- | `references/volume.md` | Volume Control | Adjust, set, increase, decrease, mute/unmute device volume; query current volume status; fine-grained control by stream type (media, call, ringtone, notification) | `volume.operate` |
80
- | `references/phone-call.md` | Phone Call | Initiate and manage phone calls; unified control for call operations | `phone.call` |
81
- | `references/screen-recorder.md` | Screen Recording | Start/stop screen recording; configure recording parameters; query recording status; app-specific recording control | `screen.record` |
82
- | `references/capture-screenshot.md` | Screenshot | Capture current screen content as image; support standard and scrolling screenshot modes | `capture.shot` |
83
- | `references/schedule.md` | Schedule | Provides the ability to create schedules | `schedule.create` |
84
- | `references/search-contact.md` | Contact | Provides the ability to search contacts | `search.contact ` |
85
- | `references/open-app.md` | Open Application | Used to help users open a specified app without any specific app internals. | `app.open` |
86
- | `references/send-message.md` | Send Message | Provide SMS sending services, users can send SMS content to specified numbers by providing phone numbers or contact information. | `send.message` |
87
- | `references/local-search.md` | Local Search | Search native data for documents, notes, calendars, galleries, yoyo memories, wallets, and more for direct answers to user questions or generate at-a-glance content | `message.send.message` |
79
+ | Reference File | Tool Name | Description | Required Node Caps |
80
+ | ---------------------------------- | ----------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------ |
81
+ | `references/volume.md` | volume | Adjust, set, increase, decrease, mute/unmute device volume; query current volume status; fine-grained control by stream type (media, call, ringtone, notification) | `volume.operate` |
82
+ | `references/phone-call.md` | phone_call | Initiate and manage phone calls; unified control for call operations | `phone.call` |
83
+ | `references/screen-recorder.md` | screen_recorder | Start/stop screen recording; configure recording parameters; query recording status; app-specific recording control | `screen.record` |
84
+ | `references/capture-screenshot.md` | capture_screenshot | Capture current screen content as image; support standard and scrolling screenshot modes | `capture.shot` |
85
+ | `references/schedule.md` | Schedschedule_createule | Provides the ability to create schedules | `schedule.create` |
86
+ | `references/search-contact.md` | search_contact | Provides the ability to search contacts | `search.contact ` |
87
+ | `references/open-app.md` | open_app | Used to help users open a specified app without any specific app internals. | `app.open` |
88
+ | `references/send-message.md` | send_message | Provide SMS sending services, users can send SMS content to specified numbers by providing phone numbers or contact information. | `send.message` |
89
+ | `references/local-search.md` | local_search | Search native data for documents, notes, calendars, galleries, yoyo memories, wallets, and more for direct answers to user questions or generate at-a-glance content | `loacal.search` |
90
+ | `references/hot-spot.md` | hot_spot | 手机热点控制能力 | `hot.spot` |
91
+ | `references/no-disturb.md` | hot_spot | 手机勿扰模式控制力 | `no.disturb` |
88
92
 
89
93
  ### Parameter Construction Workflow
90
94
 
@@ -181,17 +185,32 @@ Execute the following steps **in strict order** for each operation:
181
185
 
182
186
  ### Parameter Format Requirements
183
187
 
184
- | Platform | Format | Example |
185
- | ---------------------------- | --------------------------------------- | ----------------------- |
186
- | **Bash (Linux/macOS)** | Single quotes wrapping JSON | `'{"level":50}'` |
187
- | **Windows (PowerShell/CMD)** | Double quotes with escaped inner quotes | `"{\"level\":50}"` |
188
- | **Complex Objects** | Create JSON file first | `--params @params.json` |
188
+ **Platform-specific JSON parameter format:**
189
+
190
+ | Platform | Shell | Quote Style | Example |
191
+ | ----------- | ----- | ------------------------------- | ------------------------------- |
192
+ | **Windows** | CMD | Double quotes, escape inner `"` | `"{\"actionType\":\"打电话\"}"` |
193
+ | **Linux** | Bash | Single quotes | `'{"actionType":"打电话"}'` |
194
+ | **macOS** | Bash | Single quotes | `'{"actionType":"打电话"}'` |
195
+
196
+ **Windows CMD Execution:**
197
+
198
+ ```cmd
199
+ openclaw nodes invoke <nodeId> --command phone.call --params "{\"actionType\":\"打电话\",\"phoneNumber\":\"10086\"}"
200
+ ```
201
+
202
+ **Linux/macOS Bash Execution:**
203
+
204
+ ```bash
205
+ openclaw nodes invoke <nodeId> --command phone.call --params '{"actionType":"打电话","phoneNumber":"10086"}'
206
+ ```
189
207
 
190
208
  **Additional Requirements**:
191
209
 
192
210
  - Parameters must be valid JSON
193
211
  - Enum values must match documentation exactly (case-sensitive)
194
212
  - Numeric values must be within defined ranges
213
+ - On Windows, always use CMD (not PowerShell) to avoid quote parsing issues
195
214
 
196
215
  ### Examples
197
216
 
@@ -334,13 +353,3 @@ Would you like to check other nodes or retry later?"
334
353
  - ❌ **DO NOT** expose raw error codes to users
335
354
  - ❌ **DO NOT** assume user knows technical details
336
355
  - ❌ **DO NOT** leave user without next steps on failure
337
-
338
- ## 快速参考命令
339
-
340
- ```bash
341
- # 获取所有节点状态
342
- openclaw nodes status
343
-
344
- # 调用工具
345
- openclaw nodes invoke --node <id|name|ip> --command <command> --params <json>
346
- ```
@@ -0,0 +1,19 @@
1
+ # hot_spot 手机热点控制工具使用说明
2
+
3
+ ## Tool Command
4
+
5
+ ```bash
6
+ hot.spot
7
+ ```
8
+
9
+ ## Tool Parameters and Examples
10
+
11
+ ```json
12
+ {
13
+ "name": "hot_spot",
14
+ "description": "该工具提供对设备热点控制",
15
+ "parameters": {},
16
+ "required": [],
17
+ "examples": []
18
+ }
19
+ ```
@@ -0,0 +1,19 @@
1
+ # no_disturb 勿扰模式工具使用说明
2
+
3
+ ## Tool Command
4
+
5
+ ```bash
6
+ no.disturb
7
+ ```
8
+
9
+ ## Tool Parameters and Examples
10
+
11
+ ```json
12
+ {
13
+ "name": "no_disturb",
14
+ "description": "手机勿扰模式",
15
+ "parameters": {},
16
+ "required": [],
17
+ "examples": []
18
+ }
19
+ ```
@@ -65,7 +65,7 @@ phone.call
65
65
  ```json
66
66
  {
67
67
  "name": "phone_call",
68
- "description": "提供打电话能力,支持指定姓名、电话号码电话;支持选择打电话的卡;支持重拨、回拨已接听来电、回拨未接听来电、回拨电话",
68
+ "description": "提供打电话的功能,支持指定姓名、电话号码;支持选择打电话的卡;支持重拨、回拨已接听来电、回拨未接听来电、回拨电话",
69
69
  "parameters": {
70
70
  "actionType": {
71
71
  "type": "string",
@@ -91,125 +91,38 @@ phone.call
91
91
  },
92
92
  "contact": {
93
93
  "type": "string",
94
- "description": "泛化的"联系人"概念,可为:自然人名或昵称(如:张三、王总)、非自然实体(机构、部门、服务名称,如:招生办、物业客服)"
94
+ "description": "泛化的“联系人”概念,可为:自然人名或昵称(如:张三、王总)、非自然实体(机构、部门、服务名称,如:招生办、物业客服)"
95
95
  }
96
96
  },
97
97
  "examples": [
98
98
  {
99
- "scenario": "User provides phoneNumber directly",
100
- "query": "打电话给15651621029",
101
- "workflow": "Direct call (no contact search needed)",
99
+ "query": "拨打电话",
102
100
  "arguments": {
103
- "actionType": "打电话",
104
- "phoneNumber": "15651621029"
105
- }
106
- },
107
- {
108
- "scenario": "User provides contact name only",
109
- "query": "打电话给妈妈",
110
- "workflow": "search_contact → phone.call",
111
- "step1": {
112
- "tool": "search_contact",
113
- "arguments": {
114
- "contact": "妈妈"
115
- },
116
- "result": {
117
- "name": "妈妈",
118
- "phoneNumber": "13900139000"
119
- }
120
- },
121
- "step2": {
122
- "tool": "phone.call",
123
- "arguments": {
124
- "actionType": "打电话",
125
- "phoneNumber": "13900139000"
126
- }
101
+ "actionType": "打电话"
127
102
  }
128
103
  },
129
104
  {
130
- "scenario": "User provides contact with phoneCard",
131
- "query": "用移动卡打电话给张三",
132
- "workflow": "search_contact → phone.call with phoneCard",
133
- "step1": {
134
- "tool": "search_contact",
135
- "arguments": {
136
- "contact": "张三"
137
- },
138
- "result": {
139
- "name": "张三",
140
- "phoneNumber": "15651621029"
141
- }
142
- },
143
- "step2": {
144
- "tool": "phone.call",
145
- "arguments": {
146
- "actionType": "打电话",
147
- "phoneNumber": "15651621029",
148
- "phoneCard": "移动"
149
- }
150
- }
151
- },
152
- {
153
- "scenario": "User requests redial",
154
- "query": "重拨",
155
- "workflow": "Direct redial (no contact search needed)",
105
+ "query": "打电话给15651621029",
156
106
  "arguments": {
157
- "actionType": "重拨"
107
+ "actionType": "打电话",
108
+ "phoneNumber": "15651621029"
158
109
  }
159
110
  },
160
111
  {
161
- "scenario": "User requests callback missed call",
162
- "query": "回拨未接来电",
163
- "workflow": "Direct callback (no contact search needed)",
112
+ "query": "打电话给张三",
164
113
  "arguments": {
165
- "actionType": "回拨",
166
- "recallType": "回拨未接听来电"
167
- }
168
- },
169
- {
170
- "scenario": "User provides contact with multiple matches",
171
- "query": "打电话给李四",
172
- "workflow": "search_contact → user selects → phone.call",
173
- "step1": {
174
- "tool": "search_contact",
175
- "arguments": {
176
- "contact": "李四"
177
- },
178
- "result": {
179
- "matches": [
180
- { "name": "李四(公司)", "phoneNumber": "13800138001" },
181
- { "name": "李四(家里)", "phoneNumber": "13800138002" }
182
- ]
183
- }
184
- },
185
- "step2": {
186
- "action": "Ask user to select",
187
- "prompt": "找到多个李四,请选择:1. 李四(公司) 2. 李四(家里)"
188
- },
189
- "step3": {
190
- "tool": "phone.call",
191
- "arguments": {
192
- "actionType": "打电话",
193
- "phoneNumber": "13800138001"
194
- }
114
+ "actionType": "打电话",
115
+ "contact": "张三",
116
+ "phoneNumber": "15651621029"
195
117
  }
196
118
  },
197
119
  {
198
- "scenario": "User provides contact with no match",
199
- "query": "打电话给王五",
200
- "workflow": "search_contact → no match → ask for phoneNumber",
201
- "step1": {
202
- "tool": "search_contact",
203
- "arguments": {
204
- "contact": "王五"
205
- },
206
- "result": {
207
- "matches": []
208
- }
209
- },
210
- "step2": {
211
- "action": "Ask user for phoneNumber",
212
- "prompt": "未找到联系人王五,请提供电话号码"
120
+ "query": "用移动手机卡打电话给于洋",
121
+ "arguments": {
122
+ "actionType": "打电话",
123
+ "contact": "张三",
124
+ "phoneNumber": "15651621029",
125
+ "phoneCard": "移动手机卡"
213
126
  }
214
127
  }
215
128
  ]
@@ -1,6 +1,6 @@
1
1
  # volumn 音量控制工具使用说明
2
2
 
3
- ## 工具指令 command 定义
3
+ ## Tool Command
4
4
 
5
5
  ```bash
6
6
  volume.operate