machinaos 0.0.12 → 0.0.13
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/client/package.json +1 -1
- package/client/src/components/OutputPanel.tsx +3 -2
- package/client/src/components/parameterPanel/InputSection.tsx +4 -3
- package/package.json +1 -1
- package/server/routers/websocket.py +5 -5
- package/server/services/ai.py +38 -13
- package/server/services/deployment/manager.py +14 -0
- package/server/services/execution/executor.py +2 -0
- package/server/services/execution/models.py +8 -0
- package/server/services/handlers/ai.py +71 -23
- package/server/services/handlers/tools.py +103 -6
- package/server/skills/android_agent/app-launcher-skill/SKILL.md +137 -0
- package/server/skills/android_agent/app-list-skill/SKILL.md +148 -0
- package/server/skills/android_agent/audio-skill/SKILL.md +169 -0
- package/server/skills/android_agent/battery-skill/SKILL.md +114 -0
- package/server/skills/android_agent/bluetooth-skill/SKILL.md +151 -0
- package/server/skills/android_agent/camera-skill/SKILL.md +148 -0
- package/server/skills/android_agent/environmental-skill/SKILL.md +140 -0
- package/server/skills/android_agent/location-skill/SKILL.md +163 -0
- package/server/skills/android_agent/motion-skill/SKILL.md +141 -0
- package/server/skills/android_agent/screen-control-skill/SKILL.md +164 -0
- package/server/skills/android_agent/wifi-skill/SKILL.md +182 -0
- package/server/skills/assistant/subagent-skill/SKILL.md +62 -30
- package/server/skills/coding_agent/javascript-skill/SKILL.md +196 -0
- package/server/skills/coding_agent/python-skill/SKILL.md +165 -0
- package/server/skills/social_agent/whatsapp-db-skill/SKILL.md +284 -0
- package/server/skills/social_agent/whatsapp-send-skill/SKILL.md +180 -0
- package/server/skills/task_agent/cron-scheduler-skill/SKILL.md +215 -0
- package/server/skills/task_agent/task-manager-skill/SKILL.md +251 -0
- package/server/skills/task_agent/timer-skill/SKILL.md +168 -0
- package/server/skills/travel_agent/geocoding-skill/SKILL.md +186 -0
- package/server/skills/travel_agent/nearby-places-skill/SKILL.md +234 -0
- package/server/skills/web_agent/http-request-skill/SKILL.md +211 -0
- package/server/skills/android/skill/SKILL.md +0 -84
- package/server/skills/assistant/code-skill/SKILL.md +0 -176
- package/server/skills/assistant/http-skill/SKILL.md +0 -163
- package/server/skills/assistant/maps-skill/SKILL.md +0 -172
- package/server/skills/assistant/scheduler-skill/SKILL.md +0 -86
- package/server/skills/assistant/whatsapp-skill/SKILL.md +0 -285
- /package/server/skills/{android → android_agent}/personality/SKILL.md +0 -0
- /package/server/skills/{assistant → web_agent}/web-search-skill/SKILL.md +0 -0
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: geocoding-skill
|
|
3
|
+
description: Convert addresses to coordinates (geocoding) or coordinates to addresses (reverse geocoding) using Google Maps API.
|
|
4
|
+
allowed-tools: add_locations
|
|
5
|
+
metadata:
|
|
6
|
+
author: machina
|
|
7
|
+
version: "1.0"
|
|
8
|
+
category: location
|
|
9
|
+
icon: "📍"
|
|
10
|
+
color: "#4285F4"
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# Geocoding Tool
|
|
14
|
+
|
|
15
|
+
Convert addresses to GPS coordinates or coordinates to addresses using Google Maps Geocoding API.
|
|
16
|
+
|
|
17
|
+
## How It Works
|
|
18
|
+
|
|
19
|
+
This skill provides instructions for the **Add Locations** (gmaps_locations) tool node. Connect the **Add Locations** node to Zeenie's `input-tools` handle to enable geocoding operations.
|
|
20
|
+
|
|
21
|
+
## add_locations Tool
|
|
22
|
+
|
|
23
|
+
Geocode addresses or reverse geocode coordinates.
|
|
24
|
+
|
|
25
|
+
### Schema Fields
|
|
26
|
+
|
|
27
|
+
| Field | Type | Required | Description |
|
|
28
|
+
|-------|------|----------|-------------|
|
|
29
|
+
| service_type | string | Yes | `"geocode"` (address to coordinates) or `"reverse_geocode"` (coordinates to address) |
|
|
30
|
+
| address | string | If geocode | Address to convert to coordinates |
|
|
31
|
+
| lat | float | If reverse_geocode | Latitude coordinate |
|
|
32
|
+
| lng | float | If reverse_geocode | Longitude coordinate |
|
|
33
|
+
|
|
34
|
+
### Operations
|
|
35
|
+
|
|
36
|
+
| Service Type | Input | Output |
|
|
37
|
+
|--------------|-------|--------|
|
|
38
|
+
| `geocode` | Address string | Coordinates (lat, lng) |
|
|
39
|
+
| `reverse_geocode` | Coordinates (lat, lng) | Formatted address |
|
|
40
|
+
|
|
41
|
+
### Examples
|
|
42
|
+
|
|
43
|
+
**Geocode an address:**
|
|
44
|
+
```json
|
|
45
|
+
{
|
|
46
|
+
"service_type": "geocode",
|
|
47
|
+
"address": "1600 Amphitheatre Parkway, Mountain View, CA"
|
|
48
|
+
}
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
**Geocode a landmark:**
|
|
52
|
+
```json
|
|
53
|
+
{
|
|
54
|
+
"service_type": "geocode",
|
|
55
|
+
"address": "Eiffel Tower, Paris"
|
|
56
|
+
}
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
**Geocode a city:**
|
|
60
|
+
```json
|
|
61
|
+
{
|
|
62
|
+
"service_type": "geocode",
|
|
63
|
+
"address": "New York City, USA"
|
|
64
|
+
}
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
**Reverse geocode (coordinates to address):**
|
|
68
|
+
```json
|
|
69
|
+
{
|
|
70
|
+
"service_type": "reverse_geocode",
|
|
71
|
+
"lat": 48.8584,
|
|
72
|
+
"lng": 2.2945
|
|
73
|
+
}
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
### Response Format
|
|
77
|
+
|
|
78
|
+
**Geocode response:**
|
|
79
|
+
```json
|
|
80
|
+
{
|
|
81
|
+
"success": true,
|
|
82
|
+
"service_type": "geocoding",
|
|
83
|
+
"input": {"address": "Eiffel Tower, Paris"},
|
|
84
|
+
"results": [
|
|
85
|
+
{
|
|
86
|
+
"formatted_address": "Champ de Mars, 5 Av. Anatole France, 75007 Paris, France",
|
|
87
|
+
"geometry": {
|
|
88
|
+
"location": {"lat": 48.8583701, "lng": 2.2944813}
|
|
89
|
+
},
|
|
90
|
+
"address_components": [
|
|
91
|
+
{"long_name": "5", "short_name": "5", "types": ["street_number"]},
|
|
92
|
+
{"long_name": "Avenue Anatole France", "short_name": "Av. Anatole France", "types": ["route"]},
|
|
93
|
+
{"long_name": "Paris", "short_name": "Paris", "types": ["locality"]}
|
|
94
|
+
]
|
|
95
|
+
}
|
|
96
|
+
],
|
|
97
|
+
"status": "OK"
|
|
98
|
+
}
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
**Reverse geocode response:**
|
|
102
|
+
```json
|
|
103
|
+
{
|
|
104
|
+
"success": true,
|
|
105
|
+
"service_type": "reverse_geocoding",
|
|
106
|
+
"input": {"lat": 48.8584, "lng": 2.2945},
|
|
107
|
+
"results": [
|
|
108
|
+
{
|
|
109
|
+
"formatted_address": "Champ de Mars, 5 Av. Anatole France, 75007 Paris, France",
|
|
110
|
+
"geometry": {
|
|
111
|
+
"location": {"lat": 48.8583701, "lng": 2.2944813}
|
|
112
|
+
},
|
|
113
|
+
"address_components": [...]
|
|
114
|
+
}
|
|
115
|
+
],
|
|
116
|
+
"status": "OK"
|
|
117
|
+
}
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
### Error Response
|
|
121
|
+
|
|
122
|
+
```json
|
|
123
|
+
{
|
|
124
|
+
"error": "address is required for geocoding"
|
|
125
|
+
}
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
```json
|
|
129
|
+
{
|
|
130
|
+
"error": "Geocoding failed: ZERO_RESULTS"
|
|
131
|
+
}
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
## Use Cases
|
|
135
|
+
|
|
136
|
+
| Use Case | Service Type | Description |
|
|
137
|
+
|----------|--------------|-------------|
|
|
138
|
+
| Find location | geocode | Get coordinates for an address |
|
|
139
|
+
| Validate address | geocode | Get standardized address format |
|
|
140
|
+
| Get address | reverse_geocode | Find address from GPS coordinates |
|
|
141
|
+
| Location lookup | geocode | Search for landmarks, POIs |
|
|
142
|
+
|
|
143
|
+
## Common Workflows
|
|
144
|
+
|
|
145
|
+
### Get coordinates for sending location via WhatsApp
|
|
146
|
+
|
|
147
|
+
1. Use `geocode` to convert address to coordinates
|
|
148
|
+
2. Extract `lat` and `lng` from response
|
|
149
|
+
3. Use `whatsapp_send` with message_type="location"
|
|
150
|
+
|
|
151
|
+
### Identify a GPS location
|
|
152
|
+
|
|
153
|
+
1. Use `reverse_geocode` with lat/lng coordinates
|
|
154
|
+
2. Get formatted address from response
|
|
155
|
+
|
|
156
|
+
### Search for nearby places
|
|
157
|
+
|
|
158
|
+
1. Use `geocode` to get coordinates from address
|
|
159
|
+
2. Use `nearby_places` tool with those coordinates
|
|
160
|
+
|
|
161
|
+
## Address Format Guidelines
|
|
162
|
+
|
|
163
|
+
**Good address formats:**
|
|
164
|
+
- `"123 Main Street, New York, NY 10001"`
|
|
165
|
+
- `"Eiffel Tower, Paris, France"`
|
|
166
|
+
- `"Times Square, NYC"`
|
|
167
|
+
- `"Tokyo Station, Japan"`
|
|
168
|
+
|
|
169
|
+
**Tips:**
|
|
170
|
+
- Include city and country for better accuracy
|
|
171
|
+
- Landmarks and POIs work well
|
|
172
|
+
- Postal codes improve precision
|
|
173
|
+
- Use local language or English
|
|
174
|
+
|
|
175
|
+
## Coordinate Guidelines
|
|
176
|
+
|
|
177
|
+
- Latitude range: -90 to 90
|
|
178
|
+
- Longitude range: -180 to 180
|
|
179
|
+
- More decimal places = higher precision
|
|
180
|
+
- Standard precision: 6 decimal places
|
|
181
|
+
|
|
182
|
+
## Setup Requirements
|
|
183
|
+
|
|
184
|
+
1. Connect the **Add Locations** (gmaps_locations) node to Zeenie's `input-tools` handle
|
|
185
|
+
2. Google Maps API key must be configured in Credentials
|
|
186
|
+
3. Geocoding API must be enabled in Google Cloud Console
|
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: nearby-places-skill
|
|
3
|
+
description: Search for nearby places like restaurants, cafes, stores, and services using Google Places API. Find places by type and location.
|
|
4
|
+
allowed-tools: show_nearby_places
|
|
5
|
+
metadata:
|
|
6
|
+
author: machina
|
|
7
|
+
version: "1.0"
|
|
8
|
+
category: location
|
|
9
|
+
icon: "🗺️"
|
|
10
|
+
color: "#34A853"
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# Nearby Places Tool
|
|
14
|
+
|
|
15
|
+
Search for places near a location using Google Places API.
|
|
16
|
+
|
|
17
|
+
## How It Works
|
|
18
|
+
|
|
19
|
+
This skill provides instructions for the **Show Nearby Places** (gmaps_nearby_places) tool node. Connect the **Show Nearby Places** node to Zeenie's `input-tools` handle to enable place search.
|
|
20
|
+
|
|
21
|
+
## show_nearby_places Tool
|
|
22
|
+
|
|
23
|
+
Search for places near GPS coordinates.
|
|
24
|
+
|
|
25
|
+
### Schema Fields
|
|
26
|
+
|
|
27
|
+
| Field | Type | Required | Description |
|
|
28
|
+
|-------|------|----------|-------------|
|
|
29
|
+
| lat | float | Yes | Center latitude for search |
|
|
30
|
+
| lng | float | Yes | Center longitude for search |
|
|
31
|
+
| radius | int | No | Search radius in meters (default: 500, max: 50000) |
|
|
32
|
+
| type | string | No | Place type to search for (default: "restaurant") |
|
|
33
|
+
| keyword | string | No | Keyword to filter results |
|
|
34
|
+
|
|
35
|
+
### Place Types
|
|
36
|
+
|
|
37
|
+
**Food & Drink:**
|
|
38
|
+
- `restaurant` - Restaurants
|
|
39
|
+
- `cafe` - Coffee shops
|
|
40
|
+
- `bar` - Bars and pubs
|
|
41
|
+
- `bakery` - Bakeries
|
|
42
|
+
- `meal_takeaway` - Takeout restaurants
|
|
43
|
+
|
|
44
|
+
**Shopping:**
|
|
45
|
+
- `store` - General stores
|
|
46
|
+
- `supermarket` - Grocery stores
|
|
47
|
+
- `shopping_mall` - Shopping centers
|
|
48
|
+
- `clothing_store` - Clothing shops
|
|
49
|
+
- `convenience_store` - Convenience stores
|
|
50
|
+
|
|
51
|
+
**Services:**
|
|
52
|
+
- `bank` - Banks
|
|
53
|
+
- `atm` - ATMs
|
|
54
|
+
- `gas_station` - Gas/petrol stations
|
|
55
|
+
- `pharmacy` - Pharmacies
|
|
56
|
+
- `post_office` - Post offices
|
|
57
|
+
|
|
58
|
+
**Health:**
|
|
59
|
+
- `hospital` - Hospitals
|
|
60
|
+
- `doctor` - Doctor's offices
|
|
61
|
+
- `dentist` - Dental clinics
|
|
62
|
+
|
|
63
|
+
**Transport:**
|
|
64
|
+
- `bus_station` - Bus stations
|
|
65
|
+
- `train_station` - Train stations
|
|
66
|
+
- `airport` - Airports
|
|
67
|
+
- `taxi_stand` - Taxi stands
|
|
68
|
+
- `parking` - Parking lots
|
|
69
|
+
|
|
70
|
+
**Entertainment:**
|
|
71
|
+
- `movie_theater` - Cinemas
|
|
72
|
+
- `gym` - Fitness centers
|
|
73
|
+
- `park` - Parks
|
|
74
|
+
- `museum` - Museums
|
|
75
|
+
- `zoo` - Zoos
|
|
76
|
+
|
|
77
|
+
**Accommodation:**
|
|
78
|
+
- `hotel` - Hotels
|
|
79
|
+
- `lodging` - All lodging types
|
|
80
|
+
|
|
81
|
+
### Examples
|
|
82
|
+
|
|
83
|
+
**Find nearby restaurants:**
|
|
84
|
+
```json
|
|
85
|
+
{
|
|
86
|
+
"lat": 40.7484,
|
|
87
|
+
"lng": -73.9857,
|
|
88
|
+
"radius": 500,
|
|
89
|
+
"type": "restaurant"
|
|
90
|
+
}
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
**Find coffee shops:**
|
|
94
|
+
```json
|
|
95
|
+
{
|
|
96
|
+
"lat": 37.7749,
|
|
97
|
+
"lng": -122.4194,
|
|
98
|
+
"type": "cafe",
|
|
99
|
+
"radius": 1000
|
|
100
|
+
}
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
**Find specific chain:**
|
|
104
|
+
```json
|
|
105
|
+
{
|
|
106
|
+
"lat": 37.7749,
|
|
107
|
+
"lng": -122.4194,
|
|
108
|
+
"type": "cafe",
|
|
109
|
+
"keyword": "starbucks"
|
|
110
|
+
}
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
**Find gas stations:**
|
|
114
|
+
```json
|
|
115
|
+
{
|
|
116
|
+
"lat": 34.0522,
|
|
117
|
+
"lng": -118.2437,
|
|
118
|
+
"type": "gas_station",
|
|
119
|
+
"radius": 2000
|
|
120
|
+
}
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
**Find hotels:**
|
|
124
|
+
```json
|
|
125
|
+
{
|
|
126
|
+
"lat": 51.5074,
|
|
127
|
+
"lng": -0.1278,
|
|
128
|
+
"type": "hotel",
|
|
129
|
+
"radius": 1000
|
|
130
|
+
}
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
### Response Format
|
|
134
|
+
|
|
135
|
+
```json
|
|
136
|
+
{
|
|
137
|
+
"success": true,
|
|
138
|
+
"type": "restaurant",
|
|
139
|
+
"search_parameters": {
|
|
140
|
+
"location": {"lat": 40.7484, "lng": -73.9857},
|
|
141
|
+
"radius": 500,
|
|
142
|
+
"type": "restaurant"
|
|
143
|
+
},
|
|
144
|
+
"results": [
|
|
145
|
+
{
|
|
146
|
+
"name": "Example Restaurant",
|
|
147
|
+
"vicinity": "123 Main St, New York",
|
|
148
|
+
"rating": 4.5,
|
|
149
|
+
"user_ratings_total": 150,
|
|
150
|
+
"price_level": 2,
|
|
151
|
+
"geometry": {
|
|
152
|
+
"location": {"lat": 40.7485, "lng": -73.9860}
|
|
153
|
+
},
|
|
154
|
+
"types": ["restaurant", "food", "establishment"],
|
|
155
|
+
"opening_hours": {"open_now": true}
|
|
156
|
+
}
|
|
157
|
+
],
|
|
158
|
+
"total_results": 10,
|
|
159
|
+
"status": "OK"
|
|
160
|
+
}
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
### Response Fields
|
|
164
|
+
|
|
165
|
+
| Field | Description |
|
|
166
|
+
|-------|-------------|
|
|
167
|
+
| name | Place name |
|
|
168
|
+
| vicinity | Address or location description |
|
|
169
|
+
| rating | Average rating (1-5) |
|
|
170
|
+
| user_ratings_total | Number of reviews |
|
|
171
|
+
| price_level | Price level (0-4, 0=free, 4=very expensive) |
|
|
172
|
+
| geometry.location | Place coordinates |
|
|
173
|
+
| types | Place type categories |
|
|
174
|
+
| opening_hours.open_now | Whether currently open |
|
|
175
|
+
|
|
176
|
+
### Error Response
|
|
177
|
+
|
|
178
|
+
```json
|
|
179
|
+
{
|
|
180
|
+
"error": "lat and lng are required for nearby places search"
|
|
181
|
+
}
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
## Price Level Guide
|
|
185
|
+
|
|
186
|
+
| Level | Meaning |
|
|
187
|
+
|-------|---------|
|
|
188
|
+
| 0 | Free |
|
|
189
|
+
| 1 | Inexpensive ($) |
|
|
190
|
+
| 2 | Moderate ($$) |
|
|
191
|
+
| 3 | Expensive ($$$) |
|
|
192
|
+
| 4 | Very Expensive ($$$$) |
|
|
193
|
+
|
|
194
|
+
## Common Workflows
|
|
195
|
+
|
|
196
|
+
### Find places near an address
|
|
197
|
+
|
|
198
|
+
1. Use `geocoding` tool to convert address to coordinates
|
|
199
|
+
2. Use `nearby_places` with the lat/lng from step 1
|
|
200
|
+
|
|
201
|
+
### Find best-rated places
|
|
202
|
+
|
|
203
|
+
1. Search with appropriate type and radius
|
|
204
|
+
2. Sort results by rating in response
|
|
205
|
+
3. Filter by minimum rating threshold
|
|
206
|
+
|
|
207
|
+
### Find open places now
|
|
208
|
+
|
|
209
|
+
1. Search with desired type
|
|
210
|
+
2. Check `opening_hours.open_now` in results
|
|
211
|
+
|
|
212
|
+
## Radius Guidelines
|
|
213
|
+
|
|
214
|
+
| Radius | Use Case |
|
|
215
|
+
|--------|----------|
|
|
216
|
+
| 100-500m | Walking distance |
|
|
217
|
+
| 500-1000m | Short walk |
|
|
218
|
+
| 1000-2000m | 5-10 min walk |
|
|
219
|
+
| 2000-5000m | Driving distance |
|
|
220
|
+
| 5000-50000m | City-wide search |
|
|
221
|
+
|
|
222
|
+
## Tips
|
|
223
|
+
|
|
224
|
+
1. **Use specific types**: "cafe" not "coffee"
|
|
225
|
+
2. **Add keywords**: Filter by chain name or cuisine
|
|
226
|
+
3. **Adjust radius**: Start small, expand if needed
|
|
227
|
+
4. **Check ratings**: Higher ratings usually mean better quality
|
|
228
|
+
5. **Verify open_now**: Important for time-sensitive searches
|
|
229
|
+
|
|
230
|
+
## Setup Requirements
|
|
231
|
+
|
|
232
|
+
1. Connect the **Show Nearby Places** (gmaps_nearby_places) node to Zeenie's `input-tools` handle
|
|
233
|
+
2. Google Maps API key must be configured in Credentials
|
|
234
|
+
3. Places API must be enabled in Google Cloud Console
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: http-request-skill
|
|
3
|
+
description: Make HTTP requests to external APIs and web services. Supports GET, POST, PUT, DELETE, PATCH methods with headers and JSON body.
|
|
4
|
+
allowed-tools: http_request
|
|
5
|
+
metadata:
|
|
6
|
+
author: machina
|
|
7
|
+
version: "1.0"
|
|
8
|
+
category: integration
|
|
9
|
+
icon: "🌐"
|
|
10
|
+
color: "#EF4444"
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# HTTP Request Tool
|
|
14
|
+
|
|
15
|
+
Make HTTP requests to external APIs and web services.
|
|
16
|
+
|
|
17
|
+
## How It Works
|
|
18
|
+
|
|
19
|
+
This skill provides instructions for the **HTTP Request** tool node. Connect the **HTTP Request** node to Zeenie's `input-tools` handle to enable API calls.
|
|
20
|
+
|
|
21
|
+
## http_request Tool
|
|
22
|
+
|
|
23
|
+
Make an HTTP request to any URL.
|
|
24
|
+
|
|
25
|
+
### Schema Fields
|
|
26
|
+
|
|
27
|
+
| Field | Type | Required | Description |
|
|
28
|
+
|-------|------|----------|-------------|
|
|
29
|
+
| url | string | Yes | Full URL to request (e.g., `https://api.example.com/data`) |
|
|
30
|
+
| method | string | No | HTTP method: `GET`, `POST`, `PUT`, `DELETE`, `PATCH` (default: `GET`) |
|
|
31
|
+
| body | object | No | Request body as JSON object (for POST/PUT/PATCH) |
|
|
32
|
+
|
|
33
|
+
### Node Parameters
|
|
34
|
+
|
|
35
|
+
Additional options can be configured on the node:
|
|
36
|
+
|
|
37
|
+
| Parameter | Description |
|
|
38
|
+
|-----------|-------------|
|
|
39
|
+
| headers | Custom headers as JSON (e.g., `{"Authorization": "Bearer token"}`) |
|
|
40
|
+
| base_url | Base URL prepended to the url parameter |
|
|
41
|
+
|
|
42
|
+
### Response Format
|
|
43
|
+
|
|
44
|
+
```json
|
|
45
|
+
{
|
|
46
|
+
"status": 200,
|
|
47
|
+
"data": { "key": "value" },
|
|
48
|
+
"url": "https://api.example.com/data",
|
|
49
|
+
"method": "GET"
|
|
50
|
+
}
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### Examples
|
|
54
|
+
|
|
55
|
+
**GET request (fetch data):**
|
|
56
|
+
```json
|
|
57
|
+
{
|
|
58
|
+
"url": "https://api.example.com/users/123",
|
|
59
|
+
"method": "GET"
|
|
60
|
+
}
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
**POST request (create resource):**
|
|
64
|
+
```json
|
|
65
|
+
{
|
|
66
|
+
"url": "https://api.example.com/users",
|
|
67
|
+
"method": "POST",
|
|
68
|
+
"body": {
|
|
69
|
+
"name": "John Doe",
|
|
70
|
+
"email": "john@example.com"
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
**PUT request (update resource):**
|
|
76
|
+
```json
|
|
77
|
+
{
|
|
78
|
+
"url": "https://api.example.com/users/123",
|
|
79
|
+
"method": "PUT",
|
|
80
|
+
"body": {
|
|
81
|
+
"name": "John Updated"
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
**DELETE request:**
|
|
87
|
+
```json
|
|
88
|
+
{
|
|
89
|
+
"url": "https://api.example.com/users/123",
|
|
90
|
+
"method": "DELETE"
|
|
91
|
+
}
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
**PATCH request (partial update):**
|
|
95
|
+
```json
|
|
96
|
+
{
|
|
97
|
+
"url": "https://api.example.com/users/123",
|
|
98
|
+
"method": "PATCH",
|
|
99
|
+
"body": {
|
|
100
|
+
"status": "active"
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
### Real-World Examples
|
|
106
|
+
|
|
107
|
+
**Get Bitcoin price:**
|
|
108
|
+
```json
|
|
109
|
+
{
|
|
110
|
+
"url": "https://api.coindesk.com/v1/bpi/currentprice.json",
|
|
111
|
+
"method": "GET"
|
|
112
|
+
}
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
**Get weather:**
|
|
116
|
+
```json
|
|
117
|
+
{
|
|
118
|
+
"url": "https://api.openweathermap.org/data/2.5/weather?q=London&appid=YOUR_KEY",
|
|
119
|
+
"method": "GET"
|
|
120
|
+
}
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
**Post to webhook:**
|
|
124
|
+
```json
|
|
125
|
+
{
|
|
126
|
+
"url": "https://hooks.slack.com/services/xxx",
|
|
127
|
+
"method": "POST",
|
|
128
|
+
"body": {
|
|
129
|
+
"text": "Hello from MachinaOS!"
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
**Check website status:**
|
|
135
|
+
```json
|
|
136
|
+
{
|
|
137
|
+
"url": "https://example.com",
|
|
138
|
+
"method": "GET"
|
|
139
|
+
}
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
### Error Responses
|
|
143
|
+
|
|
144
|
+
**Timeout:**
|
|
145
|
+
```json
|
|
146
|
+
{
|
|
147
|
+
"error": "Request timed out"
|
|
148
|
+
}
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
**Connection failed:**
|
|
152
|
+
```json
|
|
153
|
+
{
|
|
154
|
+
"error": "Connection failed: Unable to reach host"
|
|
155
|
+
}
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
**HTTP error:**
|
|
159
|
+
```json
|
|
160
|
+
{
|
|
161
|
+
"status": 404,
|
|
162
|
+
"data": "Not Found",
|
|
163
|
+
"url": "https://api.example.com/missing",
|
|
164
|
+
"method": "GET"
|
|
165
|
+
}
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
## HTTP Status Codes
|
|
169
|
+
|
|
170
|
+
| Status | Meaning | Action |
|
|
171
|
+
|--------|---------|--------|
|
|
172
|
+
| 200-299 | Success | Process the response data |
|
|
173
|
+
| 400 | Bad Request | Check request parameters |
|
|
174
|
+
| 401 | Unauthorized | Check API key/authentication |
|
|
175
|
+
| 403 | Forbidden | Insufficient permissions |
|
|
176
|
+
| 404 | Not Found | Check URL path |
|
|
177
|
+
| 429 | Too Many Requests | Rate limited, wait and retry |
|
|
178
|
+
| 500-599 | Server Error | External service issue |
|
|
179
|
+
|
|
180
|
+
## Use Cases
|
|
181
|
+
|
|
182
|
+
| Use Case | Method | Description |
|
|
183
|
+
|----------|--------|-------------|
|
|
184
|
+
| Fetch data | GET | Retrieve resources |
|
|
185
|
+
| Create resource | POST | Add new data |
|
|
186
|
+
| Update resource | PUT/PATCH | Modify existing data |
|
|
187
|
+
| Delete resource | DELETE | Remove data |
|
|
188
|
+
| Health check | GET | Verify service availability |
|
|
189
|
+
| Webhook trigger | POST | Send events to services |
|
|
190
|
+
|
|
191
|
+
## Guidelines
|
|
192
|
+
|
|
193
|
+
1. **URLs**: Must be fully qualified with protocol (https://)
|
|
194
|
+
2. **Authentication**: Use node headers for API keys/tokens
|
|
195
|
+
3. **Timeout**: Default 30 seconds
|
|
196
|
+
4. **JSON body**: Automatically serialized for POST/PUT/PATCH
|
|
197
|
+
5. **Response**: JSON responses are automatically parsed
|
|
198
|
+
|
|
199
|
+
## Security Notes
|
|
200
|
+
|
|
201
|
+
1. Never expose API keys in responses to users
|
|
202
|
+
2. Validate URLs before making requests
|
|
203
|
+
3. Avoid internal/private network addresses (localhost, 192.168.x.x)
|
|
204
|
+
4. Respect rate limits of external services
|
|
205
|
+
5. Don't store sensitive data from API responses
|
|
206
|
+
|
|
207
|
+
## Setup Requirements
|
|
208
|
+
|
|
209
|
+
1. Connect the **HTTP Request** node to Zeenie's `input-tools` handle
|
|
210
|
+
2. Configure authentication headers on the node if needed
|
|
211
|
+
3. Ensure network access to target APIs
|
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: android-skill
|
|
3
|
-
description: Control Android devices - battery, wifi, bluetooth, apps, location, camera, and sensors. Use when user wants to interact with their Android phone or tablet.
|
|
4
|
-
metadata:
|
|
5
|
-
author: machina
|
|
6
|
-
version: "2.0"
|
|
7
|
-
category: device
|
|
8
|
-
icon: "📱"
|
|
9
|
-
color: "#3DDC84"
|
|
10
|
-
---
|
|
11
|
-
|
|
12
|
-
# Android Device Control
|
|
13
|
-
|
|
14
|
-
This skill provides context for monitoring and controlling Android devices.
|
|
15
|
-
|
|
16
|
-
## How It Works
|
|
17
|
-
|
|
18
|
-
This skill provides instructions and context. To execute Android actions, connect the **Android Toolkit** node to the Zeenie's `input-tools` handle, then connect Android service nodes to the toolkit:
|
|
19
|
-
|
|
20
|
-
```
|
|
21
|
-
[Battery Monitor] --+
|
|
22
|
-
|
|
|
23
|
-
[WiFi Automation] --+--> [Android Toolkit] --> [Zeenie]
|
|
24
|
-
|
|
|
25
|
-
[Location] ---+
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
## Available Android Service Nodes
|
|
29
|
-
|
|
30
|
-
Connect these to the Android Toolkit:
|
|
31
|
-
|
|
32
|
-
| Node | Capabilities |
|
|
33
|
-
|------|-------------|
|
|
34
|
-
| **Battery Monitor** | Battery level, charging status, health, temperature |
|
|
35
|
-
| **WiFi Automation** | Enable/disable WiFi, scan networks, get status |
|
|
36
|
-
| **Bluetooth Automation** | Enable/disable Bluetooth, paired devices |
|
|
37
|
-
| **App Launcher** | Launch applications by package name |
|
|
38
|
-
| **App List** | List installed applications |
|
|
39
|
-
| **Location** | Get current GPS coordinates |
|
|
40
|
-
| **Audio Automation** | Volume control, mute/unmute |
|
|
41
|
-
| **Screen Control** | Brightness, wake/sleep screen |
|
|
42
|
-
| **Camera Control** | Camera info, capture photos |
|
|
43
|
-
| **Motion Detection** | Accelerometer, gyroscope data |
|
|
44
|
-
| **Environmental Sensors** | Temperature, humidity, pressure |
|
|
45
|
-
|
|
46
|
-
## Example Interactions
|
|
47
|
-
|
|
48
|
-
**User**: "What's my phone's battery level?"
|
|
49
|
-
- Use the Battery Monitor service with action "status"
|
|
50
|
-
|
|
51
|
-
**User**: "Turn off WiFi"
|
|
52
|
-
- Use the WiFi Automation service with action "disable"
|
|
53
|
-
|
|
54
|
-
**User**: "What apps are installed?"
|
|
55
|
-
- Use the App List service with action "list"
|
|
56
|
-
|
|
57
|
-
**User**: "Open Chrome"
|
|
58
|
-
- Use the App Launcher service with action "launch", package_name "com.android.chrome"
|
|
59
|
-
|
|
60
|
-
**User**: "Where is my phone?"
|
|
61
|
-
- Use the Location service with action "current"
|
|
62
|
-
|
|
63
|
-
**User**: "Set volume to 50%"
|
|
64
|
-
- Use the Audio Automation service with action "set_volume", volume 50
|
|
65
|
-
|
|
66
|
-
## Device Connection
|
|
67
|
-
|
|
68
|
-
Before using Android tools, ensure:
|
|
69
|
-
1. Device is connected via ADB (USB) or remote WebSocket
|
|
70
|
-
2. Android Device Setup node shows connected status (green indicator)
|
|
71
|
-
3. Required permissions are granted on the device
|
|
72
|
-
|
|
73
|
-
## Error Handling
|
|
74
|
-
|
|
75
|
-
- If device is not connected, inform user to check connection
|
|
76
|
-
- If permission is denied, suggest enabling it in device settings
|
|
77
|
-
- If action fails, provide the error message and suggest alternatives
|
|
78
|
-
|
|
79
|
-
## Setup Requirements
|
|
80
|
-
|
|
81
|
-
1. Connect this skill to Zeenie's `input-skill` handle
|
|
82
|
-
2. Add **Android Toolkit** node and connect to Zeenie's `input-tools` handle
|
|
83
|
-
3. Connect desired Android service nodes to the Android Toolkit
|
|
84
|
-
4. Ensure Android device is paired (green status indicator)
|