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
@@ -6,6 +6,54 @@ import {
6
6
  } from '../types/INodeProperties';
7
7
  import { dracula } from '../styles/theme';
8
8
 
9
+ // ============================================================================
10
+ // SHARED AI AGENT INPUTS - Used by Specialized Agent Nodes
11
+ // ============================================================================
12
+
13
+ // Inputs shared by AI Agent and all Specialized Agent nodes
14
+ export const AI_AGENT_INPUTS = [
15
+ {
16
+ name: 'main',
17
+ displayName: 'Input',
18
+ type: 'main' as NodeConnectionType,
19
+ description: 'Agent input'
20
+ },
21
+ {
22
+ name: 'skill',
23
+ displayName: 'Skill',
24
+ type: 'main' as NodeConnectionType,
25
+ description: 'Skill nodes that provide context and instructions'
26
+ },
27
+ {
28
+ name: 'memory',
29
+ displayName: 'Memory',
30
+ type: 'main' as NodeConnectionType,
31
+ description: 'Memory node for conversation history'
32
+ },
33
+ {
34
+ name: 'tools',
35
+ displayName: 'Tool',
36
+ type: 'main' as NodeConnectionType,
37
+ description: 'Tool nodes for agent capabilities'
38
+ },
39
+ {
40
+ name: 'task',
41
+ displayName: 'Task',
42
+ type: 'main' as NodeConnectionType,
43
+ description: 'Task completion events from taskTrigger'
44
+ }
45
+ ];
46
+
47
+ // Outputs shared by AI Agent and all Specialized Agent nodes
48
+ export const AI_AGENT_OUTPUTS = [
49
+ {
50
+ name: 'main',
51
+ displayName: 'Output',
52
+ type: 'main' as NodeConnectionType,
53
+ description: 'Agent output'
54
+ }
55
+ ];
56
+
9
57
  // ============================================================================
10
58
  // SHARED AI AGENT PROPERTIES - Used by Specialized Agent Nodes
11
59
  // ============================================================================
@@ -128,38 +176,8 @@ export const specializedAgentNodes: Record<string, INodeTypeDescription> = {
128
176
  subtitle: 'Device Control',
129
177
  description: 'AI Agent specialized for Android device control. Connect skills, memory, and tool nodes to enable Android automation capabilities.',
130
178
  defaults: { name: 'Android Control Agent', color: dracula.green },
131
- inputs: [
132
- {
133
- name: 'main',
134
- displayName: 'Input',
135
- type: 'main' as NodeConnectionType,
136
- description: 'Agent input'
137
- },
138
- {
139
- name: 'skill',
140
- displayName: 'Skill',
141
- type: 'main' as NodeConnectionType,
142
- description: 'Skill nodes that provide context and instructions'
143
- },
144
- {
145
- name: 'memory',
146
- displayName: 'Memory',
147
- type: 'main' as NodeConnectionType,
148
- description: 'Memory node for conversation history'
149
- },
150
- {
151
- name: 'tools',
152
- displayName: 'Tool',
153
- type: 'main' as NodeConnectionType,
154
- description: 'Tool nodes for Android device operations'
155
- }
156
- ],
157
- outputs: [{
158
- name: 'main',
159
- displayName: 'Output',
160
- type: 'main' as NodeConnectionType,
161
- description: 'Agent output'
162
- }],
179
+ inputs: AI_AGENT_INPUTS,
180
+ outputs: AI_AGENT_OUTPUTS,
163
181
  properties: AI_AGENT_PROPERTIES
164
182
  },
165
183
 
@@ -173,38 +191,8 @@ export const specializedAgentNodes: Record<string, INodeTypeDescription> = {
173
191
  subtitle: 'Code Execution',
174
192
  description: 'AI Agent specialized for code execution. Connect skills, memory, and code executor nodes to enable coding capabilities.',
175
193
  defaults: { name: 'Coding Agent', color: dracula.cyan },
176
- inputs: [
177
- {
178
- name: 'main',
179
- displayName: 'Input',
180
- type: 'main' as NodeConnectionType,
181
- description: 'Agent input'
182
- },
183
- {
184
- name: 'skill',
185
- displayName: 'Skill',
186
- type: 'main' as NodeConnectionType,
187
- description: 'Skill nodes that provide context and instructions'
188
- },
189
- {
190
- name: 'memory',
191
- displayName: 'Memory',
192
- type: 'main' as NodeConnectionType,
193
- description: 'Memory node for conversation history'
194
- },
195
- {
196
- name: 'tools',
197
- displayName: 'Tool',
198
- type: 'main' as NodeConnectionType,
199
- description: 'Code executor nodes (Python, JavaScript, etc.)'
200
- }
201
- ],
202
- outputs: [{
203
- name: 'main',
204
- displayName: 'Output',
205
- type: 'main' as NodeConnectionType,
206
- description: 'Agent output'
207
- }],
194
+ inputs: AI_AGENT_INPUTS,
195
+ outputs: AI_AGENT_OUTPUTS,
208
196
  properties: AI_AGENT_PROPERTIES
209
197
  },
210
198
 
@@ -218,38 +206,8 @@ export const specializedAgentNodes: Record<string, INodeTypeDescription> = {
218
206
  subtitle: 'Browser Automation',
219
207
  description: 'AI Agent specialized for web automation. Connect skills, memory, and web control nodes to enable browser automation and HTTP capabilities.',
220
208
  defaults: { name: 'Web Control Agent', color: dracula.pink },
221
- inputs: [
222
- {
223
- name: 'main',
224
- displayName: 'Input',
225
- type: 'main' as NodeConnectionType,
226
- description: 'Agent input'
227
- },
228
- {
229
- name: 'skill',
230
- displayName: 'Skill',
231
- type: 'main' as NodeConnectionType,
232
- description: 'Skill nodes that provide context and instructions'
233
- },
234
- {
235
- name: 'memory',
236
- displayName: 'Memory',
237
- type: 'main' as NodeConnectionType,
238
- description: 'Memory node for conversation history'
239
- },
240
- {
241
- name: 'tools',
242
- displayName: 'Tool',
243
- type: 'main' as NodeConnectionType,
244
- description: 'Web control nodes (browser, scraper, HTTP, etc.)'
245
- }
246
- ],
247
- outputs: [{
248
- name: 'main',
249
- displayName: 'Output',
250
- type: 'main' as NodeConnectionType,
251
- description: 'Agent output'
252
- }],
209
+ inputs: AI_AGENT_INPUTS,
210
+ outputs: AI_AGENT_OUTPUTS,
253
211
  properties: AI_AGENT_PROPERTIES
254
212
  },
255
213
 
@@ -263,38 +221,8 @@ export const specializedAgentNodes: Record<string, INodeTypeDescription> = {
263
221
  subtitle: 'Task Automation',
264
222
  description: 'AI Agent specialized for task management. Connect skills, memory, and task nodes to enable scheduling and reminder capabilities.',
265
223
  defaults: { name: 'Task Management Agent', color: dracula.purple },
266
- inputs: [
267
- {
268
- name: 'main',
269
- displayName: 'Input',
270
- type: 'main' as NodeConnectionType,
271
- description: 'Agent input'
272
- },
273
- {
274
- name: 'skill',
275
- displayName: 'Skill',
276
- type: 'main' as NodeConnectionType,
277
- description: 'Skill nodes that provide context and instructions'
278
- },
279
- {
280
- name: 'memory',
281
- displayName: 'Memory',
282
- type: 'main' as NodeConnectionType,
283
- description: 'Memory node for conversation history'
284
- },
285
- {
286
- name: 'tools',
287
- displayName: 'Tool',
288
- type: 'main' as NodeConnectionType,
289
- description: 'Task management nodes (scheduler, reminders, etc.)'
290
- }
291
- ],
292
- outputs: [{
293
- name: 'main',
294
- displayName: 'Output',
295
- type: 'main' as NodeConnectionType,
296
- description: 'Agent output'
297
- }],
224
+ inputs: AI_AGENT_INPUTS,
225
+ outputs: AI_AGENT_OUTPUTS,
298
226
  properties: AI_AGENT_PROPERTIES
299
227
  },
300
228
 
@@ -308,38 +236,8 @@ export const specializedAgentNodes: Record<string, INodeTypeDescription> = {
308
236
  subtitle: 'Social Messaging',
309
237
  description: 'AI Agent specialized for social media. Connect skills, memory, and messaging nodes to enable WhatsApp, Telegram, and other social capabilities.',
310
238
  defaults: { name: 'Social Media Agent', color: dracula.green },
311
- inputs: [
312
- {
313
- name: 'main',
314
- displayName: 'Input',
315
- type: 'main' as NodeConnectionType,
316
- description: 'Agent input'
317
- },
318
- {
319
- name: 'skill',
320
- displayName: 'Skill',
321
- type: 'main' as NodeConnectionType,
322
- description: 'Skill nodes that provide context and instructions'
323
- },
324
- {
325
- name: 'memory',
326
- displayName: 'Memory',
327
- type: 'main' as NodeConnectionType,
328
- description: 'Memory node for conversation history'
329
- },
330
- {
331
- name: 'tools',
332
- displayName: 'Tool',
333
- type: 'main' as NodeConnectionType,
334
- description: 'Social media nodes (WhatsApp, Telegram, etc.)'
335
- }
336
- ],
337
- outputs: [{
338
- name: 'main',
339
- displayName: 'Output',
340
- type: 'main' as NodeConnectionType,
341
- description: 'Agent output'
342
- }],
239
+ inputs: AI_AGENT_INPUTS,
240
+ outputs: AI_AGENT_OUTPUTS,
343
241
  properties: AI_AGENT_PROPERTIES
344
242
  },
345
243
 
@@ -353,38 +251,8 @@ export const specializedAgentNodes: Record<string, INodeTypeDescription> = {
353
251
  subtitle: 'Travel Planning',
354
252
  description: 'AI Agent specialized for travel planning. Connect skills, memory, and tool nodes to enable itinerary building, location lookups, and travel recommendations.',
355
253
  defaults: { name: 'Travel Agent', color: dracula.orange },
356
- inputs: [
357
- {
358
- name: 'main',
359
- displayName: 'Input',
360
- type: 'main' as NodeConnectionType,
361
- description: 'Agent input'
362
- },
363
- {
364
- name: 'skill',
365
- displayName: 'Skill',
366
- type: 'main' as NodeConnectionType,
367
- description: 'Skill nodes that provide context and instructions'
368
- },
369
- {
370
- name: 'memory',
371
- displayName: 'Memory',
372
- type: 'main' as NodeConnectionType,
373
- description: 'Memory node for conversation history'
374
- },
375
- {
376
- name: 'tools',
377
- displayName: 'Tool',
378
- type: 'main' as NodeConnectionType,
379
- description: 'Tool nodes for travel planning (maps, HTTP, search, etc.)'
380
- }
381
- ],
382
- outputs: [{
383
- name: 'main',
384
- displayName: 'Output',
385
- type: 'main' as NodeConnectionType,
386
- description: 'Agent output'
387
- }],
254
+ inputs: AI_AGENT_INPUTS,
255
+ outputs: AI_AGENT_OUTPUTS,
388
256
  properties: AI_AGENT_PROPERTIES
389
257
  },
390
258
 
@@ -398,38 +266,8 @@ export const specializedAgentNodes: Record<string, INodeTypeDescription> = {
398
266
  subtitle: 'Tool Orchestration',
399
267
  description: 'AI Agent specialized for tool orchestration. Connect skills, memory, and multiple tool nodes to enable multi-tool workflows and complex task execution.',
400
268
  defaults: { name: 'Tool Agent', color: dracula.yellow },
401
- inputs: [
402
- {
403
- name: 'main',
404
- displayName: 'Input',
405
- type: 'main' as NodeConnectionType,
406
- description: 'Agent input'
407
- },
408
- {
409
- name: 'skill',
410
- displayName: 'Skill',
411
- type: 'main' as NodeConnectionType,
412
- description: 'Skill nodes that provide context and instructions'
413
- },
414
- {
415
- name: 'memory',
416
- displayName: 'Memory',
417
- type: 'main' as NodeConnectionType,
418
- description: 'Memory node for conversation history'
419
- },
420
- {
421
- name: 'tools',
422
- displayName: 'Tool',
423
- type: 'main' as NodeConnectionType,
424
- description: 'Tool nodes to orchestrate (calculators, HTTP, search, code, etc.)'
425
- }
426
- ],
427
- outputs: [{
428
- name: 'main',
429
- displayName: 'Output',
430
- type: 'main' as NodeConnectionType,
431
- description: 'Agent output'
432
- }],
269
+ inputs: AI_AGENT_INPUTS,
270
+ outputs: AI_AGENT_OUTPUTS,
433
271
  properties: AI_AGENT_PROPERTIES
434
272
  },
435
273
 
@@ -443,38 +281,8 @@ export const specializedAgentNodes: Record<string, INodeTypeDescription> = {
443
281
  subtitle: 'Productivity',
444
282
  description: 'AI Agent specialized for productivity. Connect skills, memory, and tool nodes to enable scheduling, reminders, note-taking, and workflow automation.',
445
283
  defaults: { name: 'Productivity Agent', color: dracula.cyan },
446
- inputs: [
447
- {
448
- name: 'main',
449
- displayName: 'Input',
450
- type: 'main' as NodeConnectionType,
451
- description: 'Agent input'
452
- },
453
- {
454
- name: 'skill',
455
- displayName: 'Skill',
456
- type: 'main' as NodeConnectionType,
457
- description: 'Skill nodes that provide context and instructions'
458
- },
459
- {
460
- name: 'memory',
461
- displayName: 'Memory',
462
- type: 'main' as NodeConnectionType,
463
- description: 'Memory node for conversation history'
464
- },
465
- {
466
- name: 'tools',
467
- displayName: 'Tool',
468
- type: 'main' as NodeConnectionType,
469
- description: 'Tool nodes for productivity (scheduler, HTTP, code, etc.)'
470
- }
471
- ],
472
- outputs: [{
473
- name: 'main',
474
- displayName: 'Output',
475
- type: 'main' as NodeConnectionType,
476
- description: 'Agent output'
477
- }],
284
+ inputs: AI_AGENT_INPUTS,
285
+ outputs: AI_AGENT_OUTPUTS,
478
286
  properties: AI_AGENT_PROPERTIES
479
287
  },
480
288
 
@@ -488,38 +296,8 @@ export const specializedAgentNodes: Record<string, INodeTypeDescription> = {
488
296
  subtitle: 'Payment Processing',
489
297
  description: 'AI Agent specialized for payment processing. Connect skills, memory, and tool nodes to enable payment workflows, invoice generation, and financial operations.',
490
298
  defaults: { name: 'Payments Agent', color: dracula.green },
491
- inputs: [
492
- {
493
- name: 'main',
494
- displayName: 'Input',
495
- type: 'main' as NodeConnectionType,
496
- description: 'Agent input'
497
- },
498
- {
499
- name: 'skill',
500
- displayName: 'Skill',
501
- type: 'main' as NodeConnectionType,
502
- description: 'Skill nodes that provide context and instructions'
503
- },
504
- {
505
- name: 'memory',
506
- displayName: 'Memory',
507
- type: 'main' as NodeConnectionType,
508
- description: 'Memory node for conversation history'
509
- },
510
- {
511
- name: 'tools',
512
- displayName: 'Tool',
513
- type: 'main' as NodeConnectionType,
514
- description: 'Tool nodes for payment processing (HTTP, code, etc.)'
515
- }
516
- ],
517
- outputs: [{
518
- name: 'main',
519
- displayName: 'Output',
520
- type: 'main' as NodeConnectionType,
521
- description: 'Agent output'
522
- }],
299
+ inputs: AI_AGENT_INPUTS,
300
+ outputs: AI_AGENT_OUTPUTS,
523
301
  properties: AI_AGENT_PROPERTIES
524
302
  },
525
303
 
@@ -533,38 +311,8 @@ export const specializedAgentNodes: Record<string, INodeTypeDescription> = {
533
311
  subtitle: 'Consumer Support',
534
312
  description: 'AI Agent specialized for consumer interactions. Connect skills, memory, and tool nodes to enable customer support, product recommendations, and order management.',
535
313
  defaults: { name: 'Consumer Agent', color: dracula.purple },
536
- inputs: [
537
- {
538
- name: 'main',
539
- displayName: 'Input',
540
- type: 'main' as NodeConnectionType,
541
- description: 'Agent input'
542
- },
543
- {
544
- name: 'skill',
545
- displayName: 'Skill',
546
- type: 'main' as NodeConnectionType,
547
- description: 'Skill nodes that provide context and instructions'
548
- },
549
- {
550
- name: 'memory',
551
- displayName: 'Memory',
552
- type: 'main' as NodeConnectionType,
553
- description: 'Memory node for conversation history'
554
- },
555
- {
556
- name: 'tools',
557
- displayName: 'Tool',
558
- type: 'main' as NodeConnectionType,
559
- description: 'Tool nodes for consumer operations (HTTP, search, code, etc.)'
560
- }
561
- ],
562
- outputs: [{
563
- name: 'main',
564
- displayName: 'Output',
565
- type: 'main' as NodeConnectionType,
566
- description: 'Agent output'
567
- }],
314
+ inputs: AI_AGENT_INPUTS,
315
+ outputs: AI_AGENT_OUTPUTS,
568
316
  properties: AI_AGENT_PROPERTIES
569
317
  }
570
318
  };
@@ -158,6 +158,92 @@ export const toolNodes: Record<string, INodeTypeDescription> = {
158
158
  description: 'Maximum number of results to return'
159
159
  }
160
160
  ]
161
+ },
162
+
163
+ // Task Manager Tool - allows AI Agent to track and manage delegated tasks
164
+ taskManager: {
165
+ displayName: 'Task Manager',
166
+ name: 'taskManager',
167
+ icon: '📋',
168
+ group: ['tool', 'ai'],
169
+ version: 1,
170
+ subtitle: 'Track Delegated Tasks',
171
+ description: 'Manage and track delegated sub-agent tasks. Works as AI tool OR standalone workflow node.',
172
+ defaults: { name: 'Task Manager', color: '#8B5CF6' },
173
+ inputs: [],
174
+ outputs: [
175
+ {
176
+ name: 'tool',
177
+ displayName: 'Tool',
178
+ type: 'main' as NodeConnectionType,
179
+ description: 'Connect to AI Agent tool handle'
180
+ },
181
+ {
182
+ name: 'main',
183
+ displayName: 'Output',
184
+ type: 'main' as NodeConnectionType,
185
+ description: 'Task list output for workflow use'
186
+ }
187
+ ],
188
+ properties: [
189
+ {
190
+ displayName: 'Tool Name',
191
+ name: 'toolName',
192
+ type: 'string',
193
+ default: 'task_manager',
194
+ description: 'Name visible to the AI agent'
195
+ },
196
+ {
197
+ displayName: 'Tool Description',
198
+ name: 'toolDescription',
199
+ type: 'string',
200
+ default: 'Manage delegated tasks - list active/completed tasks, check task status, mark tasks done',
201
+ typeOptions: { rows: 2 },
202
+ description: 'Description for the AI agent'
203
+ },
204
+ {
205
+ displayName: 'Operation',
206
+ name: 'operation',
207
+ type: 'options',
208
+ options: [
209
+ { name: 'List Tasks', value: 'list_tasks' },
210
+ { name: 'Get Task', value: 'get_task' },
211
+ { name: 'Mark Done', value: 'mark_done' }
212
+ ],
213
+ default: 'list_tasks',
214
+ description: 'Operation to perform when run as workflow node'
215
+ },
216
+ {
217
+ displayName: 'Task ID',
218
+ name: 'task_id',
219
+ type: 'string',
220
+ default: '',
221
+ description: 'Task ID for get_task/mark_done operations',
222
+ displayOptions: {
223
+ show: {
224
+ operation: ['get_task', 'mark_done']
225
+ }
226
+ }
227
+ },
228
+ {
229
+ displayName: 'Status Filter',
230
+ name: 'status_filter',
231
+ type: 'options',
232
+ options: [
233
+ { name: 'All', value: '' },
234
+ { name: 'Running', value: 'running' },
235
+ { name: 'Completed', value: 'completed' },
236
+ { name: 'Error', value: 'error' }
237
+ ],
238
+ default: '',
239
+ description: 'Filter tasks by status',
240
+ displayOptions: {
241
+ show: {
242
+ operation: ['list_tasks']
243
+ }
244
+ }
245
+ }
246
+ ]
161
247
  }
162
248
  };
163
249
 
@@ -166,4 +252,4 @@ export const toolNodes: Record<string, INodeTypeDescription> = {
166
252
  // ============================================================================
167
253
 
168
254
  // List of tool node types for identification
169
- export const TOOL_NODE_TYPES = ['calculatorTool', 'currentTimeTool', 'webSearchTool'];
255
+ export const TOOL_NODE_TYPES = ['calculatorTool', 'currentTimeTool', 'webSearchTool', 'taskManager'];
@@ -35,7 +35,61 @@ export const workflowNodes: Record<string, INodeTypeDescription> = {
35
35
  placeholder: '{\n "message": "Hello World",\n "value": 123\n}'
36
36
  }
37
37
  ]
38
+ },
39
+
40
+ // Task Trigger - Event-driven trigger for child agent completion
41
+ taskTrigger: {
42
+ displayName: 'Task Completed',
43
+ name: 'taskTrigger',
44
+ icon: '📨',
45
+ group: ['trigger', 'workflow'],
46
+ version: 1,
47
+ subtitle: 'Child Agent Completed',
48
+ description: 'Triggers when a delegated child agent completes its task (success or error)',
49
+ defaults: { name: 'Task Completed', color: '#bd93f9' },
50
+ inputs: [],
51
+ outputs: [{
52
+ name: 'main',
53
+ displayName: 'Output',
54
+ type: 'main' as NodeConnectionType,
55
+ description: 'task_id, status, agent_name, result/error, parent_node_id'
56
+ }],
57
+ properties: [
58
+ {
59
+ displayName: 'Task ID Filter',
60
+ name: 'task_id',
61
+ type: 'string',
62
+ default: '',
63
+ description: 'Optional: Only trigger for specific task ID'
64
+ },
65
+ {
66
+ displayName: 'Agent Name Filter',
67
+ name: 'agent_name',
68
+ type: 'string',
69
+ default: '',
70
+ description: 'Optional: Only trigger for agents containing this name'
71
+ },
72
+ {
73
+ displayName: 'Status Filter',
74
+ name: 'status_filter',
75
+ type: 'options',
76
+ default: 'all',
77
+ options: [
78
+ { name: 'All', value: 'all' },
79
+ { name: 'Completed Only', value: 'completed' },
80
+ { name: 'Errors Only', value: 'error' }
81
+ ],
82
+ description: 'Filter by completion status'
83
+ },
84
+ {
85
+ displayName: 'Parent Node ID',
86
+ name: 'parent_node_id',
87
+ type: 'string',
88
+ default: '',
89
+ description: 'Optional: Only trigger for delegations from specific parent agent'
90
+ }
91
+ ]
38
92
  }
39
93
  };
40
94
 
41
- export const WORKFLOW_NODE_TYPES = ['start'];
95
+ export const WORKFLOW_NODE_TYPES = ['start', 'taskTrigger'];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "machinaos",
3
- "version": "0.0.10",
3
+ "version": "0.0.13",
4
4
  "description": "Open source workflow automation platform with AI agents, React Flow, and n8n-inspired architecture",
5
5
  "type": "module",
6
6
  "keywords": [
@@ -60,9 +60,11 @@
60
60
  ],
61
61
  "scripts": {
62
62
  "start": "node scripts/start.js",
63
+ "start:daemon": "node scripts/start.js --daemon",
63
64
  "start:temporal": "cross-env TEMPORAL_ENABLED=true node scripts/start.js",
64
65
  "client:start": "cd client && npm run start",
65
66
  "python:start": "cd server && uv run uvicorn main:app --host 127.0.0.1 --port 3010 --reload --reload-dir . --reload-exclude \"*.pyc\" --reload-exclude \"__pycache__\" --log-level warning",
67
+ "python:daemon": "cd server && uv run gunicorn main:app -c gunicorn.conf.py",
66
68
  "temporal:worker": "cd server && uv run python -m services.temporal.worker",
67
69
  "whatsapp:start": "whatsapp-rpc start",
68
70
  "whatsapp:stop": "whatsapp-rpc stop",
@@ -82,11 +84,18 @@
82
84
  "docker:prod:logs": "docker-compose -f docker-compose.prod.yml logs -f",
83
85
  "deploy": "bash deploy.sh",
84
86
  "deploy:gcp": "bash deploy.sh",
85
- "prepublishOnly": "node -e \"const p=require('./package.json'); if(!p.bin||!p.version){process.exit(1)}\"",
87
+ "daemon:install": "node scripts/daemon.js install",
88
+ "daemon:uninstall": "node scripts/daemon.js uninstall",
89
+ "daemon:status": "node scripts/daemon.js status",
90
+ "daemon:start": "node scripts/daemon.js start",
91
+ "daemon:stop": "node scripts/daemon.js stop",
92
+ "daemon:restart": "node scripts/daemon.js restart",
93
+ "version:sync": "node scripts/sync-version.js",
94
+ "prepublishOnly": "node scripts/sync-version.js && node -e \"const p=require('./package.json'); if(!p.bin||!p.version){process.exit(1)}\"",
86
95
  "postinstall": "node scripts/postinstall.js"
87
96
  },
88
97
  "dependencies": {
89
- "whatsapp-rpc": "^0.0.5",
98
+ "whatsapp-rpc": "^0.0.8",
90
99
  "concurrently": "^9.2.1",
91
100
  "cross-env": "^7.0.3",
92
101
  "rimraf": "^6.0.1"