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,315 @@
1
+ @tailwind base;
2
+ @tailwind components;
3
+ @tailwind utilities;
4
+
5
+ @layer base {
6
+ :root {
7
+ --background: 0 0% 100%;
8
+ --foreground: 222.2 84% 4.9%;
9
+ --card: 0 0% 100%;
10
+ --card-foreground: 222.2 84% 4.9%;
11
+ --popover: 0 0% 100%;
12
+ --popover-foreground: 222.2 84% 4.9%;
13
+ --primary: 221.2 83.2% 53.3%;
14
+ --primary-foreground: 210 40% 98%;
15
+ --secondary: 210 40% 96%;
16
+ --secondary-foreground: 222.2 84% 4.9%;
17
+ --muted: 210 40% 96%;
18
+ --muted-foreground: 215.4 16.3% 46.9%;
19
+ --accent: 210 40% 96%;
20
+ --accent-foreground: 222.2 84% 4.9%;
21
+ --destructive: 0 84.2% 60.2%;
22
+ --destructive-foreground: 210 40% 98%;
23
+ --border: 214.3 31.8% 91.4%;
24
+ --input: 214.3 31.8% 91.4%;
25
+ --ring: 221.2 83.2% 53.3%;
26
+ --radius: 0.5rem;
27
+ }
28
+
29
+ .dark {
30
+ --background: 222.2 84% 4.9%;
31
+ --foreground: 210 40% 98%;
32
+ --card: 222.2 84% 4.9%;
33
+ --card-foreground: 210 40% 98%;
34
+ --popover: 222.2 84% 4.9%;
35
+ --popover-foreground: 210 40% 98%;
36
+ --primary: 217.2 91.2% 59.8%;
37
+ --primary-foreground: 222.2 84% 4.9%;
38
+ --secondary: 217.2 32.6% 17.5%;
39
+ --secondary-foreground: 210 40% 98%;
40
+ --muted: 217.2 32.6% 17.5%;
41
+ --muted-foreground: 215 20.2% 65.1%;
42
+ --accent: 217.2 32.6% 17.5%;
43
+ --accent-foreground: 210 40% 98%;
44
+ --destructive: 0 62.8% 30.6%;
45
+ --destructive-foreground: 210 40% 98%;
46
+ --border: 217.2 32.6% 17.5%;
47
+ --input: 217.2 32.6% 17.5%;
48
+ --ring: 224.3 76.3% 94.1%;
49
+ }
50
+ }
51
+
52
+ @layer base {
53
+ * {
54
+ @apply border-border;
55
+ box-sizing: border-box;
56
+ }
57
+
58
+ html,
59
+ body {
60
+ height: 100vh;
61
+ width: 100vw;
62
+ margin: 0;
63
+ padding: 0;
64
+ @apply bg-background text-foreground;
65
+ font-feature-settings: "rlig" 1, "calt" 1;
66
+ font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
67
+ }
68
+
69
+ #root {
70
+ height: 100vh;
71
+ width: 100vw;
72
+ margin: 0;
73
+ padding: 0;
74
+ display: flex;
75
+ flex-direction: column;
76
+ }
77
+ }
78
+
79
+ /* ============================================================================
80
+ LIGHT MODE STYLES - Modern, clean design with proper contrast
81
+ ============================================================================ */
82
+
83
+ /* Light mode React Flow canvas - cooler gray for better node contrast */
84
+ .react-flow {
85
+ background-color: #e8ecf1 !important;
86
+ }
87
+
88
+ /* Light mode dot pattern for canvas - more visible */
89
+ .react-flow__background pattern circle {
90
+ fill: #9ca3af !important;
91
+ }
92
+
93
+ /* Light mode controls - elevated card style */
94
+ .react-flow__controls {
95
+ background: #ffffff;
96
+ border: 1px solid #e2e8f0;
97
+ border-radius: 8px;
98
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06), 0 1px 2px rgba(0, 0, 0, 0.04);
99
+ }
100
+
101
+ .react-flow__controls button,
102
+ .react-flow__controls-button {
103
+ background: #ffffff;
104
+ border: none;
105
+ border-bottom: 1px solid #f1f5f9;
106
+ color: #475569;
107
+ }
108
+
109
+ .react-flow__controls button:last-child,
110
+ .react-flow__controls-button:last-child {
111
+ border-bottom: none;
112
+ }
113
+
114
+ .react-flow__controls button:hover,
115
+ .react-flow__controls-button:hover {
116
+ background: #f8fafc;
117
+ }
118
+
119
+ .react-flow__controls button svg,
120
+ .react-flow__controls-button svg {
121
+ fill: #475569 !important;
122
+ }
123
+
124
+ .react-flow__controls button svg path,
125
+ .react-flow__controls-button svg path {
126
+ fill: #475569 !important;
127
+ }
128
+
129
+ /* Light mode minimap */
130
+ .react-flow__minimap {
131
+ background: #ffffff;
132
+ border: 1px solid #e2e8f0;
133
+ border-radius: 8px;
134
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);
135
+ }
136
+
137
+ /* Light mode attribution */
138
+ .react-flow__attribution {
139
+ background: rgba(255, 255, 255, 0.9);
140
+ color: #94a3b8;
141
+ }
142
+
143
+ /* Light mode scrollbar */
144
+ ::-webkit-scrollbar {
145
+ width: 8px;
146
+ height: 8px;
147
+ }
148
+
149
+ ::-webkit-scrollbar-track {
150
+ background: #f1f5f9;
151
+ border-radius: 4px;
152
+ }
153
+
154
+ ::-webkit-scrollbar-thumb {
155
+ background: #cbd5e1;
156
+ border-radius: 4px;
157
+ }
158
+
159
+ ::-webkit-scrollbar-thumb:hover {
160
+ background: #94a3b8;
161
+ }
162
+
163
+ ::-webkit-scrollbar-corner {
164
+ background: #f1f5f9;
165
+ }
166
+
167
+ /* Firefox scrollbar - light mode */
168
+ html {
169
+ scrollbar-width: thin;
170
+ scrollbar-color: #cbd5e1 #f1f5f9;
171
+ }
172
+
173
+ /* Light mode selection box */
174
+ .react-flow__selection {
175
+ background: rgba(59, 130, 246, 0.08);
176
+ border: 1px solid rgba(59, 130, 246, 0.4);
177
+ }
178
+
179
+ /* Light mode connection line */
180
+ .react-flow__connection-line {
181
+ stroke: #94a3b8;
182
+ stroke-width: 2;
183
+ }
184
+
185
+ /* ============================================================================
186
+ DARK MODE STYLES - Solarized/Dracula inspired
187
+ ============================================================================ */
188
+
189
+ .dark .react-flow {
190
+ background-color: hsl(var(--background)) !important;
191
+ }
192
+
193
+ .dark .react-flow__node {
194
+ color: hsl(var(--foreground));
195
+ }
196
+
197
+ .dark .react-flow__edge {
198
+ stroke: hsl(var(--border));
199
+ }
200
+
201
+ .dark .react-flow__controls {
202
+ background: #1f2937;
203
+ border: 1px solid #374151;
204
+ border-radius: 8px;
205
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
206
+ }
207
+
208
+ .dark .react-flow__controls button,
209
+ .dark .react-flow__controls-button {
210
+ background: #1f2937;
211
+ border: none;
212
+ border-bottom: 1px solid #374151;
213
+ color: #e5e7eb;
214
+ }
215
+
216
+ .dark .react-flow__controls button:last-child,
217
+ .dark .react-flow__controls-button:last-child {
218
+ border-bottom: none;
219
+ }
220
+
221
+ .dark .react-flow__controls button:hover,
222
+ .dark .react-flow__controls-button:hover {
223
+ background: #374151;
224
+ }
225
+
226
+ .dark .react-flow__controls button svg,
227
+ .dark .react-flow__controls-button svg {
228
+ fill: #e5e7eb !important;
229
+ }
230
+
231
+ .dark .react-flow__controls button svg path,
232
+ .dark .react-flow__controls-button svg path {
233
+ fill: #e5e7eb !important;
234
+ }
235
+
236
+ .dark .react-flow__minimap {
237
+ background: #1f2937;
238
+ border: 1px solid #374151;
239
+ border-radius: 8px;
240
+ }
241
+
242
+ .dark .react-flow__background {
243
+ background-color: hsl(var(--background));
244
+ }
245
+
246
+ .dark .react-flow__attribution {
247
+ background: hsl(var(--card));
248
+ color: hsl(var(--muted-foreground));
249
+ }
250
+
251
+ /* Node execution status animations - enhanced for visibility */
252
+ @keyframes pulse {
253
+ 0%, 100% {
254
+ opacity: 1;
255
+ transform: scale(1);
256
+ }
257
+ 50% {
258
+ opacity: 0.9;
259
+ transform: scale(1.03);
260
+ }
261
+ }
262
+
263
+ /* Light mode specific pulse with stronger effect */
264
+ @keyframes pulseLight {
265
+ 0%, 100% {
266
+ opacity: 1;
267
+ transform: scale(1);
268
+ filter: brightness(1);
269
+ }
270
+ 50% {
271
+ opacity: 0.95;
272
+ transform: scale(1.04);
273
+ filter: brightness(1.05);
274
+ }
275
+ }
276
+
277
+ @keyframes spin {
278
+ from {
279
+ transform: rotate(0deg);
280
+ }
281
+ to {
282
+ transform: rotate(360deg);
283
+ }
284
+ }
285
+
286
+ /* Custom Scrollbar - Solarized Dark Theme */
287
+ .dark ::-webkit-scrollbar {
288
+ width: 8px;
289
+ height: 8px;
290
+ }
291
+
292
+ .dark ::-webkit-scrollbar-track {
293
+ background: #073642;
294
+ border-radius: 4px;
295
+ }
296
+
297
+ .dark ::-webkit-scrollbar-thumb {
298
+ background: #586e75;
299
+ border-radius: 4px;
300
+ border: 1px solid #073642;
301
+ }
302
+
303
+ .dark ::-webkit-scrollbar-thumb:hover {
304
+ background: #657b83;
305
+ }
306
+
307
+ .dark ::-webkit-scrollbar-corner {
308
+ background: #073642;
309
+ }
310
+
311
+ /* Firefox scrollbar - dark mode */
312
+ .dark {
313
+ scrollbar-width: thin;
314
+ scrollbar-color: #586e75 #073642;
315
+ }
@@ -0,0 +1,19 @@
1
+ import { StrictMode } from 'react'
2
+ import { createRoot } from 'react-dom/client'
3
+ import './index.css'
4
+ import App from './App'
5
+ import { ThemeProvider } from './contexts/ThemeContext'
6
+ import { AuthProvider } from './contexts/AuthContext'
7
+ import { WebSocketProvider } from './contexts/WebSocketContext'
8
+
9
+ createRoot(document.getElementById('root')!).render(
10
+ <StrictMode>
11
+ <ThemeProvider>
12
+ <AuthProvider>
13
+ <WebSocketProvider>
14
+ <App />
15
+ </WebSocketProvider>
16
+ </AuthProvider>
17
+ </ThemeProvider>
18
+ </StrictMode>,
19
+ )
@@ -0,0 +1,336 @@
1
+ // AI Agent Node Definitions - AI agents and AI processing components
2
+ import {
3
+ INodeTypeDescription,
4
+ NodeConnectionType
5
+ } from '../types/INodeProperties';
6
+
7
+ // ============================================================================
8
+ // AI AGENT AND CHAT NODES
9
+ // ============================================================================
10
+
11
+ export const aiAgentNodes: Record<string, INodeTypeDescription> = {
12
+ // AI Agent Node - n8n official style implementation (first for top position in Agents category)
13
+ aiAgent: {
14
+ displayName: 'AI Agent',
15
+ name: 'aiAgent',
16
+ icon: '🤖',
17
+ group: ['agent'],
18
+ version: 1,
19
+ subtitle: 'Tools Agent',
20
+ description: 'Advanced AI agent with tool calling capabilities, memory, and iterative reasoning',
21
+ defaults: { name: 'AI Agent', color: '#9333EA' },
22
+ inputs: [
23
+ {
24
+ name: 'main',
25
+ displayName: 'Input',
26
+ type: 'main' as NodeConnectionType,
27
+ description: 'Agent input'
28
+ },
29
+ {
30
+ name: 'memory',
31
+ displayName: 'Memory',
32
+ type: 'main' as NodeConnectionType,
33
+ description: 'Memory node connection for conversation history'
34
+ }
35
+ ],
36
+ outputs: [{
37
+ name: 'main',
38
+ displayName: 'Output',
39
+ type: 'main' as NodeConnectionType,
40
+ description: 'Agent output'
41
+ }],
42
+ properties: [
43
+ {
44
+ displayName: 'AI Provider',
45
+ name: 'provider',
46
+ type: 'options',
47
+ options: [
48
+ {
49
+ name: 'OpenAI',
50
+ value: 'openai'
51
+ },
52
+ {
53
+ name: 'Anthropic (Claude)',
54
+ value: 'anthropic'
55
+ },
56
+ {
57
+ name: 'Google (Gemini)',
58
+ value: 'gemini'
59
+ }
60
+ ],
61
+ default: 'openai',
62
+ description: 'The AI provider to use (configure API keys in Credentials)'
63
+ },
64
+ {
65
+ displayName: 'Model',
66
+ name: 'model',
67
+ type: 'string',
68
+ default: '',
69
+ required: true,
70
+ placeholder: 'Select a model...',
71
+ description: 'AI model to use for the agent',
72
+ typeOptions: {
73
+ dynamicOptions: true,
74
+ dependsOn: ['provider']
75
+ }
76
+ },
77
+ {
78
+ displayName: 'Prompt',
79
+ name: 'prompt',
80
+ type: 'string',
81
+ default: '{{ $json.chatInput }}',
82
+ required: true,
83
+ typeOptions: {
84
+ rows: 4
85
+ },
86
+ description: 'The prompt template for the AI agent',
87
+ placeholder: 'Enter your prompt or use template variables...'
88
+ },
89
+ {
90
+ displayName: 'System Message',
91
+ name: 'systemMessage',
92
+ type: 'string',
93
+ default: 'You are a helpful assistant',
94
+ typeOptions: {
95
+ rows: 3
96
+ },
97
+ description: 'Define the behavior and personality of the AI agent'
98
+ },
99
+ {
100
+ displayName: 'Options',
101
+ name: 'options',
102
+ type: 'collection',
103
+ placeholder: 'Add Option',
104
+ default: {},
105
+ options: [
106
+ {
107
+ displayName: 'Temperature',
108
+ name: 'temperature',
109
+ type: 'number',
110
+ default: 0.7,
111
+ typeOptions: { minValue: 0, maxValue: 2, numberStepSize: 0.1 },
112
+ description: 'Controls randomness in responses'
113
+ },
114
+ {
115
+ displayName: 'Maximum Tokens',
116
+ name: 'maxTokens',
117
+ type: 'number',
118
+ default: 1000,
119
+ typeOptions: { minValue: 1, maxValue: 8192 },
120
+ description: 'Maximum number of tokens to generate'
121
+ },
122
+ {
123
+ displayName: 'Thinking/Reasoning',
124
+ name: 'thinkingEnabled',
125
+ type: 'boolean',
126
+ default: false,
127
+ description: 'Enable extended thinking for supported providers (Anthropic, OpenAI o-series, Gemini, Groq, Cerebras)'
128
+ },
129
+ {
130
+ displayName: 'Thinking Budget',
131
+ name: 'thinkingBudget',
132
+ type: 'number',
133
+ default: 2048,
134
+ typeOptions: { minValue: 1024, maxValue: 16000 },
135
+ description: 'Token budget for thinking (Claude, Gemini, Cerebras)',
136
+ displayOptions: { show: { thinkingEnabled: [true] } }
137
+ },
138
+ {
139
+ displayName: 'Reasoning Effort',
140
+ name: 'reasoningEffort',
141
+ type: 'options',
142
+ options: [
143
+ { name: 'Low', value: 'low' },
144
+ { name: 'Medium', value: 'medium' },
145
+ { name: 'High', value: 'high' }
146
+ ],
147
+ default: 'medium',
148
+ description: 'Reasoning effort level (OpenAI o-series, Groq)',
149
+ displayOptions: { show: { thinkingEnabled: [true] } }
150
+ }
151
+ ] as any
152
+ }
153
+ ]
154
+ },
155
+
156
+ // Chat Agent Node - Conversational AI agent with skill-based tool calling
157
+ chatAgent: {
158
+ displayName: 'Chat Agent',
159
+ name: 'chatAgent',
160
+ icon: '💬',
161
+ group: ['agent'],
162
+ version: 1,
163
+ subtitle: 'Conversational Agent',
164
+ description: 'Conversational AI agent with skill-based tool calling for multi-turn chat interactions',
165
+ defaults: { name: 'Chat Agent', color: '#3B82F6' },
166
+ inputs: [
167
+ {
168
+ name: 'main',
169
+ displayName: 'Input',
170
+ type: 'main' as NodeConnectionType,
171
+ description: 'Chat input'
172
+ },
173
+ {
174
+ name: 'memory',
175
+ displayName: 'Memory',
176
+ type: 'main' as NodeConnectionType,
177
+ description: 'Memory node for conversation history'
178
+ },
179
+ {
180
+ name: 'skill',
181
+ displayName: 'Skill',
182
+ type: 'main' as NodeConnectionType,
183
+ description: 'Skill nodes that provide context and instructions via SKILL.md'
184
+ },
185
+ {
186
+ name: 'tools',
187
+ displayName: 'Tool',
188
+ type: 'main' as NodeConnectionType,
189
+ description: 'Tool nodes (httpRequest, etc.) for LangGraph tool calling'
190
+ }
191
+ ],
192
+ outputs: [{
193
+ name: 'main',
194
+ displayName: 'Output',
195
+ type: 'main' as NodeConnectionType,
196
+ description: 'response, model, provider, timestamp'
197
+ }],
198
+ properties: [
199
+ {
200
+ displayName: 'AI Provider',
201
+ name: 'provider',
202
+ type: 'options',
203
+ options: [
204
+ {
205
+ name: 'OpenAI',
206
+ value: 'openai'
207
+ },
208
+ {
209
+ name: 'Anthropic (Claude)',
210
+ value: 'anthropic'
211
+ },
212
+ {
213
+ name: 'Google (Gemini)',
214
+ value: 'gemini'
215
+ },
216
+ {
217
+ name: 'Groq',
218
+ value: 'groq'
219
+ },
220
+ {
221
+ name: 'OpenRouter',
222
+ value: 'openrouter'
223
+ }
224
+ ],
225
+ default: 'openai',
226
+ description: 'The AI provider to use (configure API keys in Credentials)'
227
+ },
228
+ {
229
+ displayName: 'Model',
230
+ name: 'model',
231
+ type: 'string',
232
+ default: '',
233
+ required: true,
234
+ placeholder: 'Select a model...',
235
+ description: 'AI model to use for the chat',
236
+ typeOptions: {
237
+ dynamicOptions: true,
238
+ dependsOn: ['provider']
239
+ }
240
+ },
241
+ {
242
+ displayName: 'Prompt',
243
+ name: 'prompt',
244
+ type: 'string',
245
+ default: '',
246
+ typeOptions: { rows: 4 },
247
+ description: 'The message to send to the AI. Use {{chatTrigger.message}} or leave empty to auto-use connected node output.',
248
+ placeholder: '{{chatTrigger.message}}'
249
+ },
250
+ {
251
+ displayName: 'System Message',
252
+ name: 'systemMessage',
253
+ type: 'string',
254
+ default: 'You are a helpful assistant.',
255
+ typeOptions: { rows: 3 },
256
+ description: 'Define the behavior and personality of the AI agent'
257
+ }
258
+ ]
259
+ },
260
+
261
+ // Simple Memory Node - conversation history storage for AI agents
262
+ // Markdown-based memory visible and editable in UI
263
+ simpleMemory: {
264
+ displayName: 'Simple Memory',
265
+ name: 'simpleMemory',
266
+ icon: '🧠',
267
+ group: ['skill', 'memory'], // 'skill' = appears in AI Skills category
268
+ version: 1,
269
+ description: 'Markdown-based conversation memory with optional vector DB for long-term retrieval',
270
+ defaults: { name: 'Memory', color: '#8b5cf6' },
271
+ inputs: [], // No input - memory node is passive
272
+ outputs: [{
273
+ name: 'memory',
274
+ displayName: 'Memory',
275
+ type: 'main' as NodeConnectionType,
276
+ description: 'session_id, messages, message_count'
277
+ }],
278
+ properties: [
279
+ {
280
+ displayName: 'Session ID',
281
+ name: 'sessionId',
282
+ type: 'string',
283
+ default: 'default',
284
+ required: true,
285
+ description: 'Unique identifier for conversation session'
286
+ },
287
+ {
288
+ displayName: 'Window Size',
289
+ name: 'windowSize',
290
+ type: 'number',
291
+ default: 10,
292
+ typeOptions: { minValue: 1, maxValue: 100 },
293
+ description: 'Number of message pairs to keep in short-term memory'
294
+ },
295
+ {
296
+ displayName: 'Conversation History',
297
+ name: 'memoryContent',
298
+ type: 'string',
299
+ default: '# Conversation History\n\n*No messages yet.*\n',
300
+ typeOptions: {
301
+ rows: 15,
302
+ editor: 'code',
303
+ editorLanguage: 'markdown'
304
+ },
305
+ description: 'Recent conversation history (editable)'
306
+ },
307
+ {
308
+ displayName: 'Enable Long-Term Memory',
309
+ name: 'longTermEnabled',
310
+ type: 'boolean',
311
+ default: false,
312
+ description: 'Archive old messages to vector DB for semantic retrieval'
313
+ },
314
+ {
315
+ displayName: 'Retrieval Count',
316
+ name: 'retrievalCount',
317
+ type: 'number',
318
+ default: 3,
319
+ typeOptions: { minValue: 1, maxValue: 10 },
320
+ description: 'Number of relevant memories to retrieve from long-term storage',
321
+ displayOptions: {
322
+ show: {
323
+ longTermEnabled: [true]
324
+ }
325
+ }
326
+ }
327
+ ]
328
+ }
329
+ };
330
+
331
+ // ============================================================================
332
+ // EXPORTS
333
+ // ============================================================================
334
+
335
+ // List of AI-related node types for easy identification (chat models removed - now in aiModelNodes.ts)
336
+ export const AI_NODE_TYPES = ['aiAgent', 'chatAgent', 'simpleMemory'];