machinaos 0.0.10 → 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.
Files changed (72) hide show
  1. package/.env.template +16 -0
  2. package/client/package.json +1 -1
  3. package/client/src/Dashboard.tsx +3 -3
  4. package/client/src/components/AIAgentNode.tsx +24 -12
  5. package/client/src/components/OutputPanel.tsx +3 -2
  6. package/client/src/components/parameterPanel/InputSection.tsx +16 -3
  7. package/client/src/nodeDefinitions/aiAgentNodes.ts +12 -0
  8. package/client/src/nodeDefinitions/specializedAgentNodes.ts +68 -320
  9. package/client/src/nodeDefinitions/toolNodes.ts +87 -1
  10. package/client/src/nodeDefinitions/workflowNodes.ts +55 -1
  11. package/package.json +12 -3
  12. package/scripts/daemon.js +427 -0
  13. package/scripts/start.js +7 -1
  14. package/scripts/sync-version.js +108 -0
  15. package/server/Dockerfile +6 -7
  16. package/server/constants.py +2 -0
  17. package/server/core/cleanup.py +123 -0
  18. package/server/core/config.py +16 -0
  19. package/server/core/database.py +92 -1
  20. package/server/core/health.py +121 -0
  21. package/server/examples/__init__.py +1 -0
  22. package/server/gunicorn.conf.py +46 -0
  23. package/server/main.py +38 -3
  24. package/server/models/database.py +1 -0
  25. package/server/models/nodes.py +18 -2
  26. package/server/requirements-docker.txt +86 -0
  27. package/server/routers/database.py +16 -0
  28. package/server/routers/websocket.py +6 -5
  29. package/server/services/ai.py +115 -14
  30. package/server/services/auth.py +6 -1
  31. package/server/services/deployment/manager.py +14 -0
  32. package/server/services/event_waiter.py +55 -0
  33. package/server/services/example_loader.py +60 -0
  34. package/server/services/execution/executor.py +2 -0
  35. package/server/services/execution/models.py +8 -0
  36. package/server/services/handlers/__init__.py +2 -0
  37. package/server/services/handlers/ai.py +164 -11
  38. package/server/services/handlers/document.py +13 -4
  39. package/server/services/handlers/tools.py +445 -14
  40. package/server/services/node_executor.py +3 -0
  41. package/server/services/temporal/activities.py +3 -0
  42. package/server/services/workflow.py +2 -0
  43. package/server/skills/android_agent/app-launcher-skill/SKILL.md +137 -0
  44. package/server/skills/android_agent/app-list-skill/SKILL.md +148 -0
  45. package/server/skills/android_agent/audio-skill/SKILL.md +169 -0
  46. package/server/skills/android_agent/battery-skill/SKILL.md +114 -0
  47. package/server/skills/android_agent/bluetooth-skill/SKILL.md +151 -0
  48. package/server/skills/android_agent/camera-skill/SKILL.md +148 -0
  49. package/server/skills/android_agent/environmental-skill/SKILL.md +140 -0
  50. package/server/skills/android_agent/location-skill/SKILL.md +163 -0
  51. package/server/skills/android_agent/motion-skill/SKILL.md +141 -0
  52. package/server/skills/android_agent/screen-control-skill/SKILL.md +164 -0
  53. package/server/skills/android_agent/wifi-skill/SKILL.md +182 -0
  54. package/server/skills/assistant/subagent-skill/SKILL.md +205 -0
  55. package/server/skills/coding_agent/javascript-skill/SKILL.md +196 -0
  56. package/server/skills/coding_agent/python-skill/SKILL.md +165 -0
  57. package/server/skills/social_agent/whatsapp-db-skill/SKILL.md +284 -0
  58. package/server/skills/social_agent/whatsapp-send-skill/SKILL.md +180 -0
  59. package/server/skills/task_agent/cron-scheduler-skill/SKILL.md +215 -0
  60. package/server/skills/task_agent/task-manager-skill/SKILL.md +251 -0
  61. package/server/skills/task_agent/timer-skill/SKILL.md +168 -0
  62. package/server/skills/travel_agent/geocoding-skill/SKILL.md +186 -0
  63. package/server/skills/travel_agent/nearby-places-skill/SKILL.md +234 -0
  64. package/server/skills/web_agent/http-request-skill/SKILL.md +211 -0
  65. package/server/skills/android/skill/SKILL.md +0 -84
  66. package/server/skills/assistant/code-skill/SKILL.md +0 -176
  67. package/server/skills/assistant/http-skill/SKILL.md +0 -163
  68. package/server/skills/assistant/maps-skill/SKILL.md +0 -172
  69. package/server/skills/assistant/scheduler-skill/SKILL.md +0 -86
  70. package/server/skills/assistant/whatsapp-skill/SKILL.md +0 -285
  71. /package/server/skills/{android → android_agent}/personality/SKILL.md +0 -0
  72. /package/server/skills/{assistant → web_agent}/web-search-skill/SKILL.md +0 -0
@@ -0,0 +1,168 @@
1
+ ---
2
+ name: timer-skill
3
+ description: Set one-time delayed timers. Execute actions after a specified duration (seconds, minutes, hours, days).
4
+ allowed-tools: timer
5
+ metadata:
6
+ author: machina
7
+ version: "1.0"
8
+ category: automation
9
+ icon: "⏱️"
10
+ color: "#10B981"
11
+ ---
12
+
13
+ # Timer Tool
14
+
15
+ Set one-time delayed execution timers.
16
+
17
+ ## How It Works
18
+
19
+ This skill provides instructions for the **Timer** tool node. Connect the **Timer** node to Zeenie's `input-tools` handle to enable timed delays.
20
+
21
+ ## timer Tool
22
+
23
+ Create a one-time timer that triggers after a specified duration.
24
+
25
+ ### Schema Fields
26
+
27
+ | Field | Type | Required | Description |
28
+ |-------|------|----------|-------------|
29
+ | duration | number | Yes | Time value for the delay |
30
+ | unit | string | Yes | Time unit: `"seconds"`, `"minutes"`, `"hours"`, `"days"` |
31
+
32
+ ### Time Units
33
+
34
+ | Unit | Range | Use Case |
35
+ |------|-------|----------|
36
+ | `seconds` | 1-3600 | Short delays, testing |
37
+ | `minutes` | 1-1440 | Task reminders, short waits |
38
+ | `hours` | 1-168 | Scheduled checks, delayed notifications |
39
+ | `days` | 1-30 | Long-term reminders, follow-ups |
40
+
41
+ ### Examples
42
+
43
+ **30 second delay:**
44
+ ```json
45
+ {
46
+ "duration": 30,
47
+ "unit": "seconds"
48
+ }
49
+ ```
50
+
51
+ **5 minute reminder:**
52
+ ```json
53
+ {
54
+ "duration": 5,
55
+ "unit": "minutes"
56
+ }
57
+ ```
58
+
59
+ **1 hour delay:**
60
+ ```json
61
+ {
62
+ "duration": 1,
63
+ "unit": "hours"
64
+ }
65
+ ```
66
+
67
+ **2 day follow-up:**
68
+ ```json
69
+ {
70
+ "duration": 2,
71
+ "unit": "days"
72
+ }
73
+ ```
74
+
75
+ ### Response Format
76
+
77
+ **Timer set:**
78
+ ```json
79
+ {
80
+ "success": true,
81
+ "message": "Timer set for 5 minutes",
82
+ "duration": 5,
83
+ "unit": "minutes",
84
+ "duration_seconds": 300,
85
+ "trigger_at": "2025-01-30T12:05:00Z"
86
+ }
87
+ ```
88
+
89
+ **Timer triggered:**
90
+ ```json
91
+ {
92
+ "success": true,
93
+ "triggered": true,
94
+ "message": "Timer completed after 5 minutes",
95
+ "duration": 5,
96
+ "unit": "minutes"
97
+ }
98
+ ```
99
+
100
+ ### Error Response
101
+
102
+ ```json
103
+ {
104
+ "error": "Duration must be a positive number"
105
+ }
106
+ ```
107
+
108
+ ## Use Cases
109
+
110
+ | Use Case | Duration | Unit | Description |
111
+ |----------|----------|------|-------------|
112
+ | Quick test | 10-30 | seconds | Testing workflow execution |
113
+ | Reminder | 5-30 | minutes | Short-term reminders |
114
+ | Rate limit | 60 | seconds | Wait between API calls |
115
+ | Daily check | 24 | hours | Daily automation |
116
+ | Follow-up | 2-7 | days | Long-term follow-ups |
117
+
118
+ ## Common Workflows
119
+
120
+ ### Delayed notification
121
+
122
+ 1. Receive user request for reminder
123
+ 2. Set timer with requested duration
124
+ 3. Timer triggers → send notification
125
+
126
+ ### Rate-limited API calls
127
+
128
+ 1. Make API call
129
+ 2. Set 60-second timer
130
+ 3. Timer triggers → make next call
131
+
132
+ ### Scheduled workflow
133
+
134
+ 1. Set timer for desired delay
135
+ 2. Timer triggers → execute workflow nodes
136
+
137
+ ## Integration with Workflow
138
+
139
+ When used as a trigger node in a workflow:
140
+ 1. Deploy the workflow
141
+ 2. Timer countdown begins
142
+ 3. After duration, downstream nodes execute
143
+
144
+ When used as AI tool:
145
+ 1. Agent decides to set timer
146
+ 2. Timer is scheduled
147
+ 3. Agent can proceed with other work
148
+ 4. Notification when timer triggers
149
+
150
+ ## Best Practices
151
+
152
+ 1. **Use appropriate units**: Don't use 3600 seconds when 1 hour is clearer
153
+ 2. **Consider time zones**: Timers use server time
154
+ 3. **Account for drift**: Long timers may have slight variance
155
+ 4. **Test short first**: Start with seconds before days
156
+ 5. **Chain timers carefully**: Avoid infinite loops
157
+
158
+ ## Limitations
159
+
160
+ - Timers are not persistent across server restarts
161
+ - Maximum practical delay depends on server uptime
162
+ - Timers are one-time (use cron for recurring)
163
+
164
+ ## Setup Requirements
165
+
166
+ 1. Connect the **Timer** node to Zeenie's `input-tools` handle
167
+ 2. For workflow triggers, connect Timer as the first node
168
+ 3. Deploy workflow to activate timer
@@ -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