@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 +2 -2
- package/openclaw.plugin.json +4 -0
- package/package.json +2 -2
- package/skills/search/SKILL.md +182 -0
- package/skills/search/scripts/search.sh +69 -0
- package/skills/yoyo-control/SKILL.md +39 -30
- package/skills/yoyo-control/references/hot-spot.md +19 -0
- package/skills/yoyo-control/references/no-disturb.md +19 -0
- package/skills/yoyo-control/references/phone-call.md +17 -104
- package/skills/yoyo-control/references/volume.md +1 -1
- package/src/agent/copy-templates.ts +56 -0
- package/src/agent/index.ts +3 -0
- package/src/cloud-channel/client.ts +8 -3
- package/src/commands/env/impl.ts +38 -0
- package/src/commands/env/index.ts +1 -0
- package/src/commands/index.ts +9 -1
- package/src/commands/login/impl.ts +6 -4
- package/src/honor-auth/config.ts +25 -17
- package/src/modules/claw-configs/config-manager.ts +64 -10
- package/src/modules/claw-configs/types.ts +2 -0
- package/src/modules/login/impl.ts +22 -2
- package/src/runtime.ts +20 -0
- package/src/schemas.ts +3 -2
- package/src/services/connection/impl.ts +7 -3
- package/src/utils/fs-safe.ts +544 -0
- package/src/utils/version.ts +21 -0
- package/skills/yoyo-control/scripts/README.md +0 -103
- package/skills/yoyo-control/scripts/invoke.js +0 -119
- package/skills/yoyo-control/scripts/volume-up.json +0 -7
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 {
|
|
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(
|
|
18
|
+
api.registerService(createClawConnectionService(api));
|
|
19
19
|
|
|
20
20
|
// 注册所有的命令行
|
|
21
21
|
registerCommands(api);
|
package/openclaw.plugin.json
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@honor-claw/yoyo",
|
|
3
|
-
"version": "0.0.1-beta.
|
|
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
|
|
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
|
|
17
|
-
2.
|
|
18
|
-
3.
|
|
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 |
|
|
78
|
-
| ---------------------------------- |
|
|
79
|
-
| `references/volume.md` |
|
|
80
|
-
| `references/phone-call.md` |
|
|
81
|
-
| `references/screen-recorder.md` |
|
|
82
|
-
| `references/capture-screenshot.md` |
|
|
83
|
-
| `references/schedule.md` |
|
|
84
|
-
| `references/search-contact.md` |
|
|
85
|
-
| `references/open-app.md` |
|
|
86
|
-
| `references/send-message.md` |
|
|
87
|
-
| `references/local-search.md` |
|
|
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
|
-
|
|
185
|
-
|
|
186
|
-
|
|
|
187
|
-
|
|
|
188
|
-
| **
|
|
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
|
-
"
|
|
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
|
-
"
|
|
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
|
-
"
|
|
162
|
-
"query": "回拨未接来电",
|
|
163
|
-
"workflow": "Direct callback (no contact search needed)",
|
|
112
|
+
"query": "打电话给张三",
|
|
164
113
|
"arguments": {
|
|
165
|
-
"actionType": "
|
|
166
|
-
"
|
|
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
|
-
"
|
|
199
|
-
"
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
"
|
|
203
|
-
"
|
|
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
|
]
|