machinaos 0.0.1

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 (288) hide show
  1. package/.env.template +71 -0
  2. package/LICENSE +21 -0
  3. package/README.md +87 -0
  4. package/bin/cli.js +159 -0
  5. package/client/.dockerignore +45 -0
  6. package/client/Dockerfile +68 -0
  7. package/client/eslint.config.js +29 -0
  8. package/client/index.html +13 -0
  9. package/client/nginx.conf +66 -0
  10. package/client/package.json +48 -0
  11. package/client/src/App.tsx +27 -0
  12. package/client/src/Dashboard.tsx +1173 -0
  13. package/client/src/ParameterPanel.tsx +301 -0
  14. package/client/src/components/AIAgentNode.tsx +321 -0
  15. package/client/src/components/APIKeyValidator.tsx +118 -0
  16. package/client/src/components/ClaudeChatModelNode.tsx +18 -0
  17. package/client/src/components/ConditionalEdge.tsx +189 -0
  18. package/client/src/components/CredentialsModal.tsx +306 -0
  19. package/client/src/components/EdgeConditionEditor.tsx +443 -0
  20. package/client/src/components/GeminiChatModelNode.tsx +18 -0
  21. package/client/src/components/GenericNode.tsx +357 -0
  22. package/client/src/components/LocationParameterPanel.tsx +154 -0
  23. package/client/src/components/ModelNode.tsx +286 -0
  24. package/client/src/components/OpenAIChatModelNode.tsx +18 -0
  25. package/client/src/components/OutputPanel.tsx +471 -0
  26. package/client/src/components/ParameterRenderer.tsx +1874 -0
  27. package/client/src/components/SkillEditorModal.tsx +417 -0
  28. package/client/src/components/SquareNode.tsx +797 -0
  29. package/client/src/components/StartNode.tsx +250 -0
  30. package/client/src/components/ToolkitNode.tsx +365 -0
  31. package/client/src/components/TriggerNode.tsx +463 -0
  32. package/client/src/components/auth/LoginPage.tsx +247 -0
  33. package/client/src/components/auth/ProtectedRoute.tsx +59 -0
  34. package/client/src/components/base/BaseChatModelNode.tsx +271 -0
  35. package/client/src/components/icons/AIProviderIcons.tsx +50 -0
  36. package/client/src/components/maps/GoogleMapsPicker.tsx +137 -0
  37. package/client/src/components/maps/MapsPreviewPanel.tsx +110 -0
  38. package/client/src/components/maps/index.ts +26 -0
  39. package/client/src/components/parameterPanel/InputSection.tsx +1094 -0
  40. package/client/src/components/parameterPanel/LocationPanelLayout.tsx +65 -0
  41. package/client/src/components/parameterPanel/MapsSection.tsx +92 -0
  42. package/client/src/components/parameterPanel/MiddleSection.tsx +571 -0
  43. package/client/src/components/parameterPanel/OutputSection.tsx +81 -0
  44. package/client/src/components/parameterPanel/ParameterPanelLayout.tsx +82 -0
  45. package/client/src/components/parameterPanel/ToolSchemaEditor.tsx +436 -0
  46. package/client/src/components/parameterPanel/index.ts +42 -0
  47. package/client/src/components/shared/DataPanel.tsx +142 -0
  48. package/client/src/components/shared/JSONTreeRenderer.tsx +106 -0
  49. package/client/src/components/ui/AIResultModal.tsx +204 -0
  50. package/client/src/components/ui/AndroidSettingsPanel.tsx +401 -0
  51. package/client/src/components/ui/CodeEditor.tsx +81 -0
  52. package/client/src/components/ui/CollapsibleSection.tsx +88 -0
  53. package/client/src/components/ui/ComponentItem.tsx +154 -0
  54. package/client/src/components/ui/ComponentPalette.tsx +321 -0
  55. package/client/src/components/ui/ConsolePanel.tsx +1074 -0
  56. package/client/src/components/ui/ErrorBoundary.tsx +196 -0
  57. package/client/src/components/ui/InputNodesPanel.tsx +204 -0
  58. package/client/src/components/ui/MapSelector.tsx +314 -0
  59. package/client/src/components/ui/Modal.tsx +149 -0
  60. package/client/src/components/ui/NodeContextMenu.tsx +192 -0
  61. package/client/src/components/ui/NodeOutputPanel.tsx +1150 -0
  62. package/client/src/components/ui/OutputDisplayPanel.tsx +381 -0
  63. package/client/src/components/ui/SettingsPanel.tsx +243 -0
  64. package/client/src/components/ui/TopToolbar.tsx +736 -0
  65. package/client/src/components/ui/WhatsAppSettingsPanel.tsx +345 -0
  66. package/client/src/components/ui/WorkflowSidebar.tsx +294 -0
  67. package/client/src/config/antdTheme.ts +186 -0
  68. package/client/src/config/api.ts +54 -0
  69. package/client/src/contexts/AuthContext.tsx +221 -0
  70. package/client/src/contexts/ThemeContext.tsx +42 -0
  71. package/client/src/contexts/WebSocketContext.tsx +1971 -0
  72. package/client/src/factories/baseChatModelFactory.ts +256 -0
  73. package/client/src/hooks/useAndroidOperations.ts +164 -0
  74. package/client/src/hooks/useApiKeyValidation.ts +107 -0
  75. package/client/src/hooks/useApiKeys.ts +238 -0
  76. package/client/src/hooks/useAppTheme.ts +17 -0
  77. package/client/src/hooks/useComponentPalette.ts +51 -0
  78. package/client/src/hooks/useCopyPaste.ts +155 -0
  79. package/client/src/hooks/useDragAndDrop.ts +124 -0
  80. package/client/src/hooks/useDragVariable.ts +88 -0
  81. package/client/src/hooks/useExecution.ts +313 -0
  82. package/client/src/hooks/useParameterPanel.ts +176 -0
  83. package/client/src/hooks/useReactFlowNodes.ts +189 -0
  84. package/client/src/hooks/useToolSchema.ts +209 -0
  85. package/client/src/hooks/useWhatsApp.ts +196 -0
  86. package/client/src/hooks/useWorkflowManagement.ts +46 -0
  87. package/client/src/index.css +315 -0
  88. package/client/src/main.tsx +19 -0
  89. package/client/src/nodeDefinitions/aiAgentNodes.ts +336 -0
  90. package/client/src/nodeDefinitions/aiModelNodes.ts +340 -0
  91. package/client/src/nodeDefinitions/androidDeviceNodes.ts +140 -0
  92. package/client/src/nodeDefinitions/androidServiceNodes.ts +383 -0
  93. package/client/src/nodeDefinitions/chatNodes.ts +135 -0
  94. package/client/src/nodeDefinitions/codeNodes.ts +54 -0
  95. package/client/src/nodeDefinitions/documentNodes.ts +379 -0
  96. package/client/src/nodeDefinitions/index.ts +15 -0
  97. package/client/src/nodeDefinitions/locationNodes.ts +463 -0
  98. package/client/src/nodeDefinitions/schedulerNodes.ts +220 -0
  99. package/client/src/nodeDefinitions/skillNodes.ts +211 -0
  100. package/client/src/nodeDefinitions/toolNodes.ts +198 -0
  101. package/client/src/nodeDefinitions/utilityNodes.ts +284 -0
  102. package/client/src/nodeDefinitions/whatsappNodes.ts +865 -0
  103. package/client/src/nodeDefinitions/workflowNodes.ts +41 -0
  104. package/client/src/nodeDefinitions.ts +104 -0
  105. package/client/src/schemas/workflowSchema.ts +264 -0
  106. package/client/src/services/dynamicParameterService.ts +96 -0
  107. package/client/src/services/execution/aiAgentExecutionService.ts +35 -0
  108. package/client/src/services/executionService.ts +232 -0
  109. package/client/src/services/workflowApi.ts +91 -0
  110. package/client/src/store/useAppStore.ts +582 -0
  111. package/client/src/styles/theme.ts +508 -0
  112. package/client/src/styles/zIndex.ts +17 -0
  113. package/client/src/types/ComponentTypes.ts +39 -0
  114. package/client/src/types/EdgeCondition.ts +231 -0
  115. package/client/src/types/INodeProperties.ts +288 -0
  116. package/client/src/types/NodeTypes.ts +28 -0
  117. package/client/src/utils/formatters.ts +33 -0
  118. package/client/src/utils/googleMapsLoader.ts +140 -0
  119. package/client/src/utils/locationUtils.ts +85 -0
  120. package/client/src/utils/nodeUtils.ts +31 -0
  121. package/client/src/utils/workflow.ts +30 -0
  122. package/client/src/utils/workflowExport.ts +120 -0
  123. package/client/src/vite-env.d.ts +12 -0
  124. package/client/tailwind.config.js +60 -0
  125. package/client/tsconfig.json +25 -0
  126. package/client/tsconfig.node.json +11 -0
  127. package/client/vite.config.js +35 -0
  128. package/docker-compose.prod.yml +107 -0
  129. package/docker-compose.yml +104 -0
  130. package/docs-MachinaOs/README.md +85 -0
  131. package/docs-MachinaOs/deployment/docker.mdx +228 -0
  132. package/docs-MachinaOs/deployment/production.mdx +345 -0
  133. package/docs-MachinaOs/docs.json +75 -0
  134. package/docs-MachinaOs/faq.mdx +309 -0
  135. package/docs-MachinaOs/favicon.svg +5 -0
  136. package/docs-MachinaOs/installation.mdx +160 -0
  137. package/docs-MachinaOs/introduction.mdx +114 -0
  138. package/docs-MachinaOs/logo/dark.svg +6 -0
  139. package/docs-MachinaOs/logo/light.svg +6 -0
  140. package/docs-MachinaOs/nodes/ai-agent.mdx +216 -0
  141. package/docs-MachinaOs/nodes/ai-models.mdx +240 -0
  142. package/docs-MachinaOs/nodes/android.mdx +411 -0
  143. package/docs-MachinaOs/nodes/overview.mdx +181 -0
  144. package/docs-MachinaOs/nodes/schedulers.mdx +316 -0
  145. package/docs-MachinaOs/nodes/webhooks.mdx +330 -0
  146. package/docs-MachinaOs/nodes/whatsapp.mdx +305 -0
  147. package/docs-MachinaOs/quickstart.mdx +119 -0
  148. package/docs-MachinaOs/tutorials/ai-agent-workflow.mdx +177 -0
  149. package/docs-MachinaOs/tutorials/android-automation.mdx +242 -0
  150. package/docs-MachinaOs/tutorials/first-workflow.mdx +134 -0
  151. package/docs-MachinaOs/tutorials/whatsapp-automation.mdx +185 -0
  152. package/nul +0 -0
  153. package/package.json +70 -0
  154. package/scripts/build.js +158 -0
  155. package/scripts/check-ports.ps1 +33 -0
  156. package/scripts/clean.js +40 -0
  157. package/scripts/docker.js +93 -0
  158. package/scripts/kill-port.ps1 +154 -0
  159. package/scripts/start.js +210 -0
  160. package/scripts/stop.js +325 -0
  161. package/server/.dockerignore +44 -0
  162. package/server/Dockerfile +45 -0
  163. package/server/constants.py +249 -0
  164. package/server/core/__init__.py +1 -0
  165. package/server/core/cache.py +461 -0
  166. package/server/core/config.py +128 -0
  167. package/server/core/container.py +99 -0
  168. package/server/core/database.py +1211 -0
  169. package/server/core/logging.py +314 -0
  170. package/server/main.py +289 -0
  171. package/server/middleware/__init__.py +5 -0
  172. package/server/middleware/auth.py +89 -0
  173. package/server/models/__init__.py +1 -0
  174. package/server/models/auth.py +52 -0
  175. package/server/models/cache.py +24 -0
  176. package/server/models/database.py +211 -0
  177. package/server/models/nodes.py +455 -0
  178. package/server/package.json +9 -0
  179. package/server/pyproject.toml +72 -0
  180. package/server/requirements.txt +83 -0
  181. package/server/routers/__init__.py +1 -0
  182. package/server/routers/android.py +294 -0
  183. package/server/routers/auth.py +203 -0
  184. package/server/routers/database.py +151 -0
  185. package/server/routers/maps.py +142 -0
  186. package/server/routers/nodejs_compat.py +289 -0
  187. package/server/routers/webhook.py +90 -0
  188. package/server/routers/websocket.py +2127 -0
  189. package/server/routers/whatsapp.py +761 -0
  190. package/server/routers/workflow.py +200 -0
  191. package/server/services/__init__.py +1 -0
  192. package/server/services/ai.py +2415 -0
  193. package/server/services/android/__init__.py +27 -0
  194. package/server/services/android/broadcaster.py +114 -0
  195. package/server/services/android/client.py +608 -0
  196. package/server/services/android/manager.py +78 -0
  197. package/server/services/android/protocol.py +165 -0
  198. package/server/services/android_service.py +588 -0
  199. package/server/services/auth.py +131 -0
  200. package/server/services/chat_client.py +160 -0
  201. package/server/services/deployment/__init__.py +12 -0
  202. package/server/services/deployment/manager.py +706 -0
  203. package/server/services/deployment/state.py +47 -0
  204. package/server/services/deployment/triggers.py +275 -0
  205. package/server/services/event_waiter.py +785 -0
  206. package/server/services/execution/__init__.py +77 -0
  207. package/server/services/execution/cache.py +769 -0
  208. package/server/services/execution/conditions.py +373 -0
  209. package/server/services/execution/dlq.py +132 -0
  210. package/server/services/execution/executor.py +1351 -0
  211. package/server/services/execution/models.py +531 -0
  212. package/server/services/execution/recovery.py +235 -0
  213. package/server/services/handlers/__init__.py +126 -0
  214. package/server/services/handlers/ai.py +355 -0
  215. package/server/services/handlers/android.py +260 -0
  216. package/server/services/handlers/code.py +278 -0
  217. package/server/services/handlers/document.py +598 -0
  218. package/server/services/handlers/http.py +193 -0
  219. package/server/services/handlers/polyglot.py +105 -0
  220. package/server/services/handlers/tools.py +845 -0
  221. package/server/services/handlers/triggers.py +107 -0
  222. package/server/services/handlers/utility.py +822 -0
  223. package/server/services/handlers/whatsapp.py +476 -0
  224. package/server/services/maps.py +289 -0
  225. package/server/services/memory_store.py +103 -0
  226. package/server/services/node_executor.py +375 -0
  227. package/server/services/parameter_resolver.py +218 -0
  228. package/server/services/polyglot_client.py +169 -0
  229. package/server/services/scheduler.py +155 -0
  230. package/server/services/skill_loader.py +417 -0
  231. package/server/services/status_broadcaster.py +826 -0
  232. package/server/services/temporal/__init__.py +23 -0
  233. package/server/services/temporal/activities.py +344 -0
  234. package/server/services/temporal/client.py +76 -0
  235. package/server/services/temporal/executor.py +147 -0
  236. package/server/services/temporal/worker.py +251 -0
  237. package/server/services/temporal/workflow.py +355 -0
  238. package/server/services/temporal/ws_client.py +236 -0
  239. package/server/services/text.py +111 -0
  240. package/server/services/user_auth.py +172 -0
  241. package/server/services/websocket_client.py +29 -0
  242. package/server/services/workflow.py +597 -0
  243. package/server/skills/android-skill/SKILL.md +82 -0
  244. package/server/skills/assistant-personality/SKILL.md +45 -0
  245. package/server/skills/code-skill/SKILL.md +140 -0
  246. package/server/skills/http-skill/SKILL.md +161 -0
  247. package/server/skills/maps-skill/SKILL.md +170 -0
  248. package/server/skills/memory-skill/SKILL.md +154 -0
  249. package/server/skills/scheduler-skill/SKILL.md +84 -0
  250. package/server/skills/whatsapp-skill/SKILL.md +283 -0
  251. package/server/uv.lock +2916 -0
  252. package/server/whatsapp-rpc/.dockerignore +30 -0
  253. package/server/whatsapp-rpc/Dockerfile +44 -0
  254. package/server/whatsapp-rpc/Dockerfile.web +17 -0
  255. package/server/whatsapp-rpc/README.md +139 -0
  256. package/server/whatsapp-rpc/cli.js +95 -0
  257. package/server/whatsapp-rpc/configs/config.yaml +7 -0
  258. package/server/whatsapp-rpc/docker-compose.yml +35 -0
  259. package/server/whatsapp-rpc/docs/API.md +410 -0
  260. package/server/whatsapp-rpc/go.mod +67 -0
  261. package/server/whatsapp-rpc/go.sum +203 -0
  262. package/server/whatsapp-rpc/package.json +30 -0
  263. package/server/whatsapp-rpc/schema.json +1294 -0
  264. package/server/whatsapp-rpc/scripts/clean.cjs +66 -0
  265. package/server/whatsapp-rpc/scripts/cli.js +162 -0
  266. package/server/whatsapp-rpc/src/go/cmd/server/main.go +91 -0
  267. package/server/whatsapp-rpc/src/go/config/config.go +49 -0
  268. package/server/whatsapp-rpc/src/go/rpc/rpc.go +446 -0
  269. package/server/whatsapp-rpc/src/go/rpc/server.go +112 -0
  270. package/server/whatsapp-rpc/src/go/whatsapp/history.go +166 -0
  271. package/server/whatsapp-rpc/src/go/whatsapp/messages.go +390 -0
  272. package/server/whatsapp-rpc/src/go/whatsapp/service.go +2130 -0
  273. package/server/whatsapp-rpc/src/go/whatsapp/types.go +261 -0
  274. package/server/whatsapp-rpc/src/python/pyproject.toml +15 -0
  275. package/server/whatsapp-rpc/src/python/whatsapp_rpc/__init__.py +4 -0
  276. package/server/whatsapp-rpc/src/python/whatsapp_rpc/client.py +427 -0
  277. package/server/whatsapp-rpc/web/app.py +609 -0
  278. package/server/whatsapp-rpc/web/requirements.txt +6 -0
  279. package/server/whatsapp-rpc/web/rpc_client.py +427 -0
  280. package/server/whatsapp-rpc/web/static/openapi.yaml +59 -0
  281. package/server/whatsapp-rpc/web/templates/base.html +150 -0
  282. package/server/whatsapp-rpc/web/templates/contacts.html +240 -0
  283. package/server/whatsapp-rpc/web/templates/dashboard.html +320 -0
  284. package/server/whatsapp-rpc/web/templates/groups.html +328 -0
  285. package/server/whatsapp-rpc/web/templates/messages.html +465 -0
  286. package/server/whatsapp-rpc/web/templates/messaging.html +681 -0
  287. package/server/whatsapp-rpc/web/templates/send.html +259 -0
  288. package/server/whatsapp-rpc/web/templates/settings.html +459 -0
@@ -0,0 +1,211 @@
1
+ // Skill Node Definitions - Skill nodes for Chat Agent capabilities
2
+ import {
3
+ INodeTypeDescription,
4
+ NodeConnectionType
5
+ } from '../types/INodeProperties';
6
+ import { WHATSAPP_CONNECT_ICON } from './whatsappNodes';
7
+
8
+ // ============================================================================
9
+ // SKILL NODES - Connect to Chat Agent's input-skill handle
10
+ // ============================================================================
11
+
12
+ // Factory function for creating skill node definitions
13
+ function createSkillNode(config: {
14
+ name: string;
15
+ displayName: string;
16
+ icon: string;
17
+ color: string;
18
+ skillName: string;
19
+ description: string;
20
+ subtitle: string;
21
+ properties?: any[];
22
+ }): INodeTypeDescription {
23
+ return {
24
+ displayName: config.displayName,
25
+ name: config.name,
26
+ icon: config.icon,
27
+ group: ['skill'],
28
+ version: 1,
29
+ subtitle: config.subtitle,
30
+ description: config.description,
31
+ defaults: { name: config.displayName, color: config.color },
32
+ inputs: [], // No input - skill node is passive
33
+ outputs: [{
34
+ name: 'skill',
35
+ displayName: 'Skill',
36
+ type: 'main' as NodeConnectionType,
37
+ description: 'Connect to Chat Agent skill handle'
38
+ }],
39
+ properties: [
40
+ {
41
+ displayName: 'Skill Name',
42
+ name: 'skillName',
43
+ type: 'string',
44
+ default: config.skillName,
45
+ required: true,
46
+ description: 'Internal skill identifier',
47
+ typeOptions: { readonly: true }
48
+ },
49
+ {
50
+ displayName: 'Instructions',
51
+ name: 'instructions',
52
+ type: 'string',
53
+ default: '',
54
+ description: 'Skill instructions in Markdown format. Loaded from SKILL.md file.',
55
+ typeOptions: {
56
+ rows: 20,
57
+ editor: 'code',
58
+ editorLanguage: 'markdown'
59
+ }
60
+ },
61
+ ...(config.properties || [])
62
+ ]
63
+ };
64
+ }
65
+
66
+ export const skillNodes: Record<string, INodeTypeDescription> = {
67
+ // Assistant Personality Skill - Default assistant personality
68
+ assistantPersonality: createSkillNode({
69
+ name: 'assistantPersonality',
70
+ displayName: 'Assistant Personality',
71
+ icon: '✨',
72
+ color: '#D97706',
73
+ skillName: 'assistant-personality',
74
+ subtitle: 'AI Personality',
75
+ description: 'Default assistant personality with helpful, harmless, and honest responses'
76
+ }),
77
+
78
+ // WhatsApp Skill - Send and receive messages
79
+ whatsappSkill: createSkillNode({
80
+ name: 'whatsappSkill',
81
+ displayName: 'WhatsApp Skill',
82
+ icon: WHATSAPP_CONNECT_ICON,
83
+ color: '#25D366',
84
+ skillName: 'whatsapp-skill',
85
+ subtitle: 'Messaging',
86
+ description: 'Send and receive WhatsApp messages via Chat Agent'
87
+ }),
88
+
89
+ // Memory Skill - Remember and recall information
90
+ memorySkill: createSkillNode({
91
+ name: 'memorySkill',
92
+ displayName: 'Memory Skill',
93
+ icon: '🧠',
94
+ color: '#8B5CF6',
95
+ skillName: 'memory-skill',
96
+ subtitle: 'Long-term Memory',
97
+ description: 'Remember information across conversations with short and long-term memory',
98
+ properties: [
99
+ {
100
+ displayName: 'Default Session',
101
+ name: 'defaultSession',
102
+ type: 'string',
103
+ default: 'default',
104
+ description: 'Default session ID for memory storage'
105
+ }
106
+ ]
107
+ }),
108
+
109
+ // Maps Skill - Location and geocoding services
110
+ mapsSkill: createSkillNode({
111
+ name: 'mapsSkill',
112
+ displayName: 'Maps Skill',
113
+ icon: '🗺️',
114
+ color: '#4285F4',
115
+ skillName: 'maps-skill',
116
+ subtitle: 'Location Services',
117
+ description: 'Geocoding, nearby places, and map creation via Google Maps'
118
+ }),
119
+
120
+ // HTTP Skill - Make API requests
121
+ httpSkill: createSkillNode({
122
+ name: 'httpSkill',
123
+ displayName: 'HTTP Skill',
124
+ icon: '🌐',
125
+ color: '#EF4444',
126
+ skillName: 'http-skill',
127
+ subtitle: 'API Requests',
128
+ description: 'Make HTTP requests to external APIs and web services'
129
+ }),
130
+
131
+ // Scheduler Skill - Timers and cron jobs
132
+ schedulerSkill: createSkillNode({
133
+ name: 'schedulerSkill',
134
+ displayName: 'Scheduler Skill',
135
+ icon: '⏰',
136
+ color: '#10B981',
137
+ skillName: 'scheduler-skill',
138
+ subtitle: 'Task Scheduling',
139
+ description: 'Schedule tasks with timers and cron expressions'
140
+ }),
141
+
142
+ // Android Skill - Device control
143
+ androidSkill: createSkillNode({
144
+ name: 'androidSkill',
145
+ displayName: 'Android Skill',
146
+ icon: '📱',
147
+ color: '#3DDC84',
148
+ skillName: 'android-skill',
149
+ subtitle: 'Device Control',
150
+ description: 'Control Android devices - battery, wifi, bluetooth, apps, location, camera'
151
+ }),
152
+
153
+ // Code Skill - Execute code
154
+ codeSkill: createSkillNode({
155
+ name: 'codeSkill',
156
+ displayName: 'Code Skill',
157
+ icon: '💻',
158
+ color: '#F59E0B',
159
+ skillName: 'code-skill',
160
+ subtitle: 'Code Execution',
161
+ description: 'Execute Python or JavaScript code for calculations and data processing'
162
+ }),
163
+
164
+ // Custom Skill - User-created skill
165
+ customSkill: {
166
+ displayName: 'Custom Skill',
167
+ name: 'customSkill',
168
+ icon: '⭐',
169
+ group: ['skill'],
170
+ version: 1,
171
+ subtitle: 'User-defined',
172
+ description: 'User-created custom skill with configurable capabilities',
173
+ defaults: { name: 'Custom Skill', color: '#6366F1' },
174
+ inputs: [],
175
+ outputs: [{
176
+ name: 'skill',
177
+ displayName: 'Skill',
178
+ type: 'main' as NodeConnectionType,
179
+ description: 'Connect to Chat Agent skill handle'
180
+ }],
181
+ properties: [
182
+ {
183
+ displayName: 'Skill',
184
+ name: 'selectedSkill',
185
+ type: 'options',
186
+ default: '',
187
+ required: true,
188
+ description: 'Select a user-created skill',
189
+ typeOptions: {
190
+ dynamicOptions: true
191
+ }
192
+ }
193
+ ]
194
+ }
195
+ };
196
+
197
+ // List of skill node types for easy identification
198
+ export const SKILL_NODE_TYPES = [
199
+ 'assistantPersonality',
200
+ 'whatsappSkill',
201
+ 'memorySkill',
202
+ 'mapsSkill',
203
+ 'httpSkill',
204
+ 'schedulerSkill',
205
+ 'androidSkill',
206
+ 'codeSkill',
207
+ 'customSkill'
208
+ ];
209
+
210
+ // Export for nodeDefinitions.ts
211
+ export default skillNodes;
@@ -0,0 +1,198 @@
1
+ // Tool Node Definitions - Tool nodes for AI Agent tool calling
2
+ import {
3
+ INodeTypeDescription,
4
+ NodeConnectionType
5
+ } from '../types/INodeProperties';
6
+
7
+ // ============================================================================
8
+ // TOOL NODES - Connect to AI Agent's input-tools handle
9
+ // ============================================================================
10
+
11
+ export const toolNodes: Record<string, INodeTypeDescription> = {
12
+ // Calculator Tool - allows AI Agent to perform mathematical calculations
13
+ calculatorTool: {
14
+ displayName: 'Calculator Tool',
15
+ name: 'calculatorTool',
16
+ icon: '🔢',
17
+ group: ['tool', 'ai'],
18
+ version: 1,
19
+ subtitle: 'Math Operations',
20
+ description: 'Allow AI Agent to perform mathematical calculations',
21
+ defaults: { name: 'Calculator', color: '#50fa7b' },
22
+ inputs: [], // No input - tool node is passive
23
+ outputs: [{
24
+ name: 'tool',
25
+ displayName: 'Tool',
26
+ type: 'main' as NodeConnectionType,
27
+ description: 'Connect to AI Agent tool handle'
28
+ }],
29
+ properties: [
30
+ {
31
+ displayName: 'Tool Name',
32
+ name: 'toolName',
33
+ type: 'string',
34
+ default: 'calculator',
35
+ required: true,
36
+ description: 'Name the AI will use to call this tool'
37
+ },
38
+ {
39
+ displayName: 'Description',
40
+ name: 'toolDescription',
41
+ type: 'string',
42
+ default: 'Perform mathematical calculations. Operations: add, subtract, multiply, divide, power, sqrt, mod, abs',
43
+ typeOptions: { rows: 2 },
44
+ description: 'Describe the tool capabilities for the AI'
45
+ }
46
+ ]
47
+ },
48
+
49
+ // Current Time Tool - allows AI Agent to get current date and time
50
+ currentTimeTool: {
51
+ displayName: 'Current Time Tool',
52
+ name: 'currentTimeTool',
53
+ icon: '🕐',
54
+ group: ['tool', 'ai'],
55
+ version: 1,
56
+ subtitle: 'Date & Time',
57
+ description: 'Allow AI Agent to get current date and time',
58
+ defaults: { name: 'Current Time', color: '#ffb86c' },
59
+ inputs: [],
60
+ outputs: [{
61
+ name: 'tool',
62
+ displayName: 'Tool',
63
+ type: 'main' as NodeConnectionType,
64
+ description: 'Connect to AI Agent tool handle'
65
+ }],
66
+ properties: [
67
+ {
68
+ displayName: 'Tool Name',
69
+ name: 'toolName',
70
+ type: 'string',
71
+ default: 'get_current_time',
72
+ required: true,
73
+ description: 'Name the AI will use to call this tool'
74
+ },
75
+ {
76
+ displayName: 'Description',
77
+ name: 'toolDescription',
78
+ type: 'string',
79
+ default: 'Get the current date and time. Optionally specify timezone.',
80
+ typeOptions: { rows: 2 },
81
+ description: 'Describe the tool capabilities for the AI'
82
+ },
83
+ {
84
+ displayName: 'Default Timezone',
85
+ name: 'timezone',
86
+ type: 'string',
87
+ default: 'UTC',
88
+ placeholder: 'America/New_York',
89
+ description: 'Default timezone (e.g., UTC, America/New_York, Europe/London)'
90
+ }
91
+ ]
92
+ },
93
+
94
+ // Web Search Tool - allows AI Agent to search the web
95
+ webSearchTool: {
96
+ displayName: 'Web Search Tool',
97
+ name: 'webSearchTool',
98
+ icon: '🔍',
99
+ group: ['tool', 'ai'],
100
+ version: 1,
101
+ subtitle: 'Web Search',
102
+ description: 'Allow AI Agent to search the web for information',
103
+ defaults: { name: 'Web Search', color: '#bd93f9' },
104
+ inputs: [],
105
+ outputs: [{
106
+ name: 'tool',
107
+ displayName: 'Tool',
108
+ type: 'main' as NodeConnectionType,
109
+ description: 'Connect to AI Agent tool handle'
110
+ }],
111
+ properties: [
112
+ {
113
+ displayName: 'Tool Name',
114
+ name: 'toolName',
115
+ type: 'string',
116
+ default: 'web_search',
117
+ required: true,
118
+ description: 'Name the AI will use to call this tool'
119
+ },
120
+ {
121
+ displayName: 'Description',
122
+ name: 'toolDescription',
123
+ type: 'string',
124
+ default: 'Search the web for information. Returns relevant search results.',
125
+ typeOptions: { rows: 2 },
126
+ description: 'Describe the tool capabilities for the AI'
127
+ },
128
+ {
129
+ displayName: 'Search Provider',
130
+ name: 'provider',
131
+ type: 'options',
132
+ options: [
133
+ { name: 'DuckDuckGo (Free)', value: 'duckduckgo' },
134
+ { name: 'Serper API', value: 'serper' },
135
+ { name: 'Google Custom Search', value: 'google' }
136
+ ],
137
+ default: 'duckduckgo',
138
+ description: 'Search provider to use'
139
+ },
140
+ {
141
+ displayName: 'API Key',
142
+ name: 'apiKey',
143
+ type: 'string',
144
+ default: '',
145
+ description: 'API key for Serper or Google (not needed for DuckDuckGo)',
146
+ displayOptions: {
147
+ show: {
148
+ provider: ['serper', 'google']
149
+ }
150
+ }
151
+ },
152
+ {
153
+ displayName: 'Max Results',
154
+ name: 'maxResults',
155
+ type: 'number',
156
+ default: 5,
157
+ typeOptions: { minValue: 1, maxValue: 10 },
158
+ description: 'Maximum number of results to return'
159
+ }
160
+ ]
161
+ },
162
+
163
+ // Android Toolkit - aggregates Android service nodes for AI Agent
164
+ // Follows n8n Sub-Node pattern and LangChain Toolkit pattern
165
+ androidTool: {
166
+ displayName: 'Android Toolkit',
167
+ name: 'androidTool',
168
+ icon: '📱',
169
+ group: ['tool', 'ai'],
170
+ version: 1,
171
+ subtitle: 'Device Control',
172
+ description: 'Aggregate Android service nodes into a single AI-callable tool. Connect Android nodes to enable those capabilities.',
173
+ defaults: { name: 'Android Toolkit', color: '#3DDC84' },
174
+ // Input for connecting Android service nodes (uses SquareNode's input-main)
175
+ inputs: [{
176
+ name: 'main',
177
+ displayName: 'Android Services',
178
+ type: 'main' as NodeConnectionType,
179
+ description: 'Connect Android service nodes (battery, wifi, apps, etc.)'
180
+ }],
181
+ // Output connects to AI Agent's input-tools handle (uses SquareNode's output-main)
182
+ outputs: [{
183
+ name: 'main',
184
+ displayName: 'Tool Output',
185
+ type: 'main' as NodeConnectionType,
186
+ description: 'Connect to AI Agent tool handle'
187
+ }],
188
+ // No properties - schema is managed by ToolSchemaEditor component
189
+ properties: []
190
+ }
191
+ };
192
+
193
+ // ============================================================================
194
+ // EXPORTS
195
+ // ============================================================================
196
+
197
+ // List of tool node types for identification
198
+ export const TOOL_NODE_TYPES = ['calculatorTool', 'currentTimeTool', 'webSearchTool', 'androidTool'];
@@ -0,0 +1,284 @@
1
+ // Utility Nodes - HTTP Request, Webhooks
2
+ import {
3
+ INodeTypeDescription,
4
+ NodeConnectionType
5
+ } from '../types/INodeProperties';
6
+
7
+ export const utilityNodes: Record<string, INodeTypeDescription> = {
8
+ httpRequest: {
9
+ displayName: 'HTTP Request',
10
+ name: 'httpRequest',
11
+ icon: '🌐',
12
+ group: ['utility', 'tool'],
13
+ version: 1,
14
+ description: 'Make HTTP requests to external APIs',
15
+ defaults: { name: 'HTTP Request', color: '#6366f1' },
16
+ inputs: [{ name: 'main', displayName: 'Input', type: 'main' as NodeConnectionType, description: 'Trigger input' }],
17
+ outputs: [{
18
+ name: 'main',
19
+ displayName: 'Response',
20
+ type: 'main' as NodeConnectionType,
21
+ description: 'status, data, headers'
22
+ }],
23
+ properties: [
24
+ {
25
+ displayName: 'Method',
26
+ name: 'method',
27
+ type: 'options',
28
+ default: 'GET',
29
+ options: [
30
+ { name: 'GET', value: 'GET' },
31
+ { name: 'POST', value: 'POST' },
32
+ { name: 'PUT', value: 'PUT' },
33
+ { name: 'DELETE', value: 'DELETE' },
34
+ { name: 'PATCH', value: 'PATCH' }
35
+ ]
36
+ },
37
+ {
38
+ displayName: 'URL',
39
+ name: 'url',
40
+ type: 'string',
41
+ default: '',
42
+ required: true,
43
+ placeholder: 'https://api.example.com/endpoint'
44
+ },
45
+ {
46
+ displayName: 'Headers',
47
+ name: 'headers',
48
+ type: 'string',
49
+ default: '{}',
50
+ typeOptions: { rows: 3 },
51
+ placeholder: '{"Authorization": "Bearer token"}'
52
+ },
53
+ {
54
+ displayName: 'Body',
55
+ name: 'body',
56
+ type: 'string',
57
+ default: '',
58
+ typeOptions: { rows: 4 },
59
+ placeholder: '{"key": "value"}',
60
+ displayOptions: { show: { method: ['POST', 'PUT', 'PATCH'] } }
61
+ },
62
+ {
63
+ displayName: 'Timeout (seconds)',
64
+ name: 'timeout',
65
+ type: 'number',
66
+ default: 30
67
+ }
68
+ ]
69
+ },
70
+
71
+ webhookTrigger: {
72
+ displayName: 'Webhook Trigger',
73
+ name: 'webhookTrigger',
74
+ icon: '🪝',
75
+ group: ['trigger'],
76
+ version: 1,
77
+ description: 'Start workflow when HTTP request is received',
78
+ defaults: { name: 'Webhook', color: '#f59e0b' },
79
+ inputs: [],
80
+ outputs: [{
81
+ name: 'main',
82
+ displayName: 'Request',
83
+ type: 'main' as NodeConnectionType,
84
+ description: 'method, path, headers, query, body, json'
85
+ }],
86
+ properties: [
87
+ {
88
+ displayName: 'Path',
89
+ name: 'path',
90
+ type: 'string',
91
+ default: '',
92
+ required: true,
93
+ placeholder: 'my-webhook',
94
+ description: 'URL: http://localhost:3010/webhook/{path}'
95
+ },
96
+ {
97
+ displayName: 'HTTP Method',
98
+ name: 'method',
99
+ type: 'options',
100
+ default: 'POST',
101
+ options: [
102
+ { name: 'GET', value: 'GET' },
103
+ { name: 'POST', value: 'POST' },
104
+ { name: 'PUT', value: 'PUT' },
105
+ { name: 'DELETE', value: 'DELETE' },
106
+ { name: 'Any', value: 'ALL' }
107
+ ]
108
+ },
109
+ {
110
+ displayName: 'Response Mode',
111
+ name: 'responseMode',
112
+ type: 'options',
113
+ default: 'immediate',
114
+ options: [
115
+ { name: 'Immediate (200 OK)', value: 'immediate' },
116
+ { name: 'Wait for Response Node', value: 'responseNode' }
117
+ ]
118
+ },
119
+ {
120
+ displayName: 'Authentication',
121
+ name: 'authentication',
122
+ type: 'options',
123
+ default: 'none',
124
+ options: [
125
+ { name: 'None', value: 'none' },
126
+ { name: 'Header Auth', value: 'header' }
127
+ ]
128
+ },
129
+ {
130
+ displayName: 'Header Name',
131
+ name: 'headerName',
132
+ type: 'string',
133
+ default: 'X-API-Key',
134
+ displayOptions: { show: { authentication: ['header'] } }
135
+ },
136
+ {
137
+ displayName: 'Header Value',
138
+ name: 'headerValue',
139
+ type: 'string',
140
+ default: '',
141
+ displayOptions: { show: { authentication: ['header'] } }
142
+ }
143
+ ]
144
+ },
145
+
146
+ webhookResponse: {
147
+ displayName: 'Webhook Response',
148
+ name: 'webhookResponse',
149
+ icon: '↩️',
150
+ group: ['utility'],
151
+ version: 1,
152
+ description: 'Send response back to webhook caller',
153
+ defaults: { name: 'Response', color: '#10b981' },
154
+ inputs: [{ name: 'main', displayName: 'Input', type: 'main' as NodeConnectionType, description: 'Trigger input' }],
155
+ outputs: [],
156
+ properties: [
157
+ {
158
+ displayName: 'Status Code',
159
+ name: 'statusCode',
160
+ type: 'number',
161
+ default: 200
162
+ },
163
+ {
164
+ displayName: 'Response Body',
165
+ name: 'responseBody',
166
+ type: 'string',
167
+ default: '',
168
+ typeOptions: { rows: 4 },
169
+ placeholder: '{"success": true, "data": ...}'
170
+ },
171
+ {
172
+ displayName: 'Content Type',
173
+ name: 'contentType',
174
+ type: 'options',
175
+ default: 'application/json',
176
+ options: [
177
+ { name: 'JSON', value: 'application/json' },
178
+ { name: 'Text', value: 'text/plain' },
179
+ { name: 'HTML', value: 'text/html' }
180
+ ]
181
+ }
182
+ ]
183
+ },
184
+
185
+ chatTrigger: {
186
+ displayName: 'Chat Trigger',
187
+ name: 'chatTrigger',
188
+ icon: '💬',
189
+ group: ['utility', 'trigger'],
190
+ version: 1,
191
+ description: 'Trigger workflow when user sends a chat message from the console input',
192
+ defaults: { name: 'Chat Trigger', color: '#10b981' },
193
+ inputs: [],
194
+ outputs: [{
195
+ name: 'main',
196
+ displayName: 'Message',
197
+ type: 'main' as NodeConnectionType,
198
+ description: 'message, timestamp, session_id'
199
+ }],
200
+ properties: [
201
+ {
202
+ displayName: 'Session ID',
203
+ name: 'sessionId',
204
+ type: 'string',
205
+ default: 'default',
206
+ description: 'Session identifier for grouping messages'
207
+ },
208
+ {
209
+ displayName: 'Placeholder',
210
+ name: 'placeholder',
211
+ type: 'string',
212
+ default: 'Type a message...',
213
+ description: 'Placeholder text for the chat input'
214
+ }
215
+ ]
216
+ },
217
+
218
+ console: {
219
+ displayName: 'Console',
220
+ name: 'console',
221
+ icon: '🖥️',
222
+ group: ['utility'],
223
+ version: 1,
224
+ description: 'Log data to console panel for debugging during execution',
225
+ defaults: { name: 'Console', color: '#8b5cf6' },
226
+ inputs: [{ name: 'main', displayName: 'Input', type: 'main' as NodeConnectionType, description: 'Data to log' }],
227
+ outputs: [{ name: 'main', displayName: 'Output', type: 'main' as NodeConnectionType, description: 'Passes input through unchanged' }],
228
+ properties: [
229
+ {
230
+ displayName: 'Label',
231
+ name: 'label',
232
+ type: 'string',
233
+ default: '',
234
+ placeholder: 'Debug Point 1',
235
+ description: 'Optional label to identify this log entry'
236
+ },
237
+ {
238
+ displayName: 'Log Mode',
239
+ name: 'logMode',
240
+ type: 'options',
241
+ default: 'all',
242
+ options: [
243
+ { name: 'Log All Input', value: 'all' },
244
+ { name: 'Log Specific Field', value: 'field' },
245
+ { name: 'Log Expression', value: 'expression' }
246
+ ],
247
+ description: 'What to log from the input data'
248
+ },
249
+ {
250
+ displayName: 'Field Path',
251
+ name: 'fieldPath',
252
+ type: 'string',
253
+ default: '',
254
+ placeholder: 'data.items[0].name',
255
+ displayOptions: { show: { logMode: ['field'] } },
256
+ description: 'Path to specific field to log (e.g., data.items[0].name)'
257
+ },
258
+ {
259
+ displayName: 'Expression',
260
+ name: 'expression',
261
+ type: 'string',
262
+ default: '',
263
+ placeholder: '{{input.field}}',
264
+ displayOptions: { show: { logMode: ['expression'] } },
265
+ description: 'Template expression to evaluate and log'
266
+ },
267
+ {
268
+ displayName: 'Format',
269
+ name: 'format',
270
+ type: 'options',
271
+ default: 'json',
272
+ options: [
273
+ { name: 'JSON (Pretty)', value: 'json' },
274
+ { name: 'JSON (Compact)', value: 'json_compact' },
275
+ { name: 'Text', value: 'text' },
276
+ { name: 'Table', value: 'table' }
277
+ ],
278
+ description: 'Output format for the log'
279
+ }
280
+ ]
281
+ }
282
+ };
283
+
284
+ export const UTILITY_NODE_TYPES = ['httpRequest', 'webhookTrigger', 'webhookResponse', 'chatTrigger', 'console'];