machinaos 0.0.9 → 0.0.12

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 (313) hide show
  1. package/.env.template +20 -0
  2. package/README.md +86 -36
  3. package/bin/cli.js +23 -12
  4. package/client/Dockerfile +8 -6
  5. package/client/package.json +1 -1
  6. package/client/src/Dashboard.tsx +60 -14
  7. package/client/src/components/AIAgentNode.tsx +426 -90
  8. package/client/src/components/CredentialsModal.tsx +122 -5
  9. package/client/src/components/GenericNode.tsx +39 -2
  10. package/client/src/components/LocationParameterPanel.tsx +3 -3
  11. package/client/src/components/ModelNode.tsx +5 -10
  12. package/client/src/components/SquareNode.tsx +5 -5
  13. package/client/src/components/ToolkitNode.tsx +22 -17
  14. package/client/src/components/parameterPanel/InputSection.tsx +164 -18
  15. package/client/src/components/parameterPanel/MasterSkillEditor.tsx +581 -0
  16. package/client/src/components/parameterPanel/MiddleSection.tsx +131 -26
  17. package/client/src/components/ui/CodeEditor.tsx +3 -3
  18. package/client/src/components/ui/ComponentPalette.tsx +23 -14
  19. package/client/src/components/ui/SettingsPanel.tsx +289 -131
  20. package/client/src/hooks/useDragAndDrop.ts +6 -6
  21. package/client/src/hooks/useParameterPanel.ts +14 -34
  22. package/client/src/nodeDefinitions/aiAgentNodes.ts +32 -8
  23. package/client/src/nodeDefinitions/locationNodes.ts +16 -16
  24. package/client/src/nodeDefinitions/schedulerNodes.ts +38 -22
  25. package/client/src/nodeDefinitions/skillNodes.ts +37 -1
  26. package/client/src/nodeDefinitions/socialNodes.ts +750 -0
  27. package/client/src/nodeDefinitions/specializedAgentNodes.ts +325 -0
  28. package/client/src/nodeDefinitions/toolNodes.ts +84 -27
  29. package/client/src/nodeDefinitions/workflowNodes.ts +55 -1
  30. package/client/src/nodeDefinitions.ts +13 -1
  31. package/client/src/schemas/workflowSchema.ts +3 -3
  32. package/client/src/services/executionService.ts +6 -3
  33. package/client/src/store/useAppStore.ts +64 -5
  34. package/client/src/styles/theme.ts +2 -0
  35. package/client/src/utils/locationUtils.ts +2 -2
  36. package/client/src/utils/nodeUtils.ts +3 -3
  37. package/client/src/utils/workflowExport.ts +26 -2
  38. package/client/vite.config.js +13 -0
  39. package/package.json +31 -9
  40. package/scripts/build.js +61 -95
  41. package/scripts/clean.js +1 -3
  42. package/scripts/daemon.js +427 -0
  43. package/scripts/install.js +235 -0
  44. package/scripts/postinstall.js +29 -57
  45. package/scripts/serve-client.js +67 -0
  46. package/scripts/start.js +40 -6
  47. package/scripts/sync-version.js +108 -0
  48. package/server/Dockerfile +6 -7
  49. package/server/constants.py +29 -3
  50. package/server/core/cleanup.py +123 -0
  51. package/server/core/config.py +19 -0
  52. package/server/core/database.py +184 -2
  53. package/server/core/health.py +121 -0
  54. package/server/examples/__init__.py +1 -0
  55. package/server/gunicorn.conf.py +46 -0
  56. package/server/main.py +40 -5
  57. package/server/models/database.py +27 -0
  58. package/server/models/nodes.py +39 -22
  59. package/server/requirements-docker.txt +86 -0
  60. package/server/routers/database.py +16 -0
  61. package/server/routers/websocket.py +164 -1
  62. package/server/services/ai.py +393 -50
  63. package/server/services/android/client.py +20 -21
  64. package/server/services/android_service.py +12 -14
  65. package/server/services/auth.py +6 -1
  66. package/server/services/claude_oauth.py +139 -0
  67. package/server/services/event_waiter.py +55 -0
  68. package/server/services/example_loader.py +60 -0
  69. package/server/services/handlers/__init__.py +12 -0
  70. package/server/services/handlers/ai.py +342 -224
  71. package/server/services/handlers/android.py +22 -2
  72. package/server/services/handlers/document.py +13 -4
  73. package/server/services/handlers/social.py +525 -0
  74. package/server/services/handlers/tools.py +690 -15
  75. package/server/services/handlers/utility.py +17 -17
  76. package/server/services/maps.py +8 -8
  77. package/server/services/node_executor.py +76 -10
  78. package/server/services/skill_loader.py +10 -13
  79. package/server/services/temporal/activities.py +3 -0
  80. package/server/services/workflow.py +6 -0
  81. package/server/skills/GUIDE.md +137 -0
  82. package/server/skills/android/personality/SKILL.md +57 -0
  83. package/server/skills/{android-skill → android/skill}/SKILL.md +2 -0
  84. package/server/skills/{assistant-personality → assistant/assistant-personality}/SKILL.md +2 -0
  85. package/server/skills/{code-skill → assistant/code-skill}/SKILL.md +2 -0
  86. package/server/skills/{http-skill → assistant/http-skill}/SKILL.md +2 -0
  87. package/server/skills/{maps-skill → assistant/maps-skill}/SKILL.md +2 -0
  88. package/server/skills/{memory-skill → assistant/memory-skill}/SKILL.md +2 -0
  89. package/server/skills/{scheduler-skill → assistant/scheduler-skill}/SKILL.md +2 -0
  90. package/server/skills/assistant/subagent-skill/SKILL.md +173 -0
  91. package/server/skills/{web-search-skill → assistant/web-search-skill}/SKILL.md +2 -0
  92. package/server/skills/{whatsapp-skill → assistant/whatsapp-skill}/SKILL.md +2 -0
  93. package/client/.dockerignore +0 -45
  94. package/client/dist/assets/index-DFSC53FP.css +0 -1
  95. package/client/dist/assets/index-fJ-1gTf5.js +0 -613
  96. package/client/dist/index.html +0 -14
  97. package/scripts/download-binaries.js +0 -178
  98. package/server/uv.lock +0 -3277
  99. package/server/whatsapp-rpc/.dockerignore +0 -30
  100. package/server/whatsapp-rpc/Dockerfile +0 -44
  101. package/server/whatsapp-rpc/Dockerfile.web +0 -17
  102. package/server/whatsapp-rpc/README.md +0 -139
  103. package/server/whatsapp-rpc/bin/whatsapp-rpc-server +0 -0
  104. package/server/whatsapp-rpc/cli.js +0 -95
  105. package/server/whatsapp-rpc/configs/config.yaml +0 -7
  106. package/server/whatsapp-rpc/docker-compose.yml +0 -35
  107. package/server/whatsapp-rpc/docs/API.md +0 -410
  108. package/server/whatsapp-rpc/go.mod +0 -67
  109. package/server/whatsapp-rpc/go.sum +0 -203
  110. package/server/whatsapp-rpc/node_modules/.package-lock.json +0 -259
  111. package/server/whatsapp-rpc/node_modules/chalk/license +0 -9
  112. package/server/whatsapp-rpc/node_modules/chalk/package.json +0 -83
  113. package/server/whatsapp-rpc/node_modules/chalk/readme.md +0 -297
  114. package/server/whatsapp-rpc/node_modules/chalk/source/index.d.ts +0 -325
  115. package/server/whatsapp-rpc/node_modules/chalk/source/index.js +0 -225
  116. package/server/whatsapp-rpc/node_modules/chalk/source/utilities.js +0 -33
  117. package/server/whatsapp-rpc/node_modules/chalk/source/vendor/ansi-styles/index.d.ts +0 -236
  118. package/server/whatsapp-rpc/node_modules/chalk/source/vendor/ansi-styles/index.js +0 -223
  119. package/server/whatsapp-rpc/node_modules/chalk/source/vendor/supports-color/browser.d.ts +0 -1
  120. package/server/whatsapp-rpc/node_modules/chalk/source/vendor/supports-color/browser.js +0 -34
  121. package/server/whatsapp-rpc/node_modules/chalk/source/vendor/supports-color/index.d.ts +0 -55
  122. package/server/whatsapp-rpc/node_modules/chalk/source/vendor/supports-color/index.js +0 -190
  123. package/server/whatsapp-rpc/node_modules/commander/LICENSE +0 -22
  124. package/server/whatsapp-rpc/node_modules/commander/Readme.md +0 -1148
  125. package/server/whatsapp-rpc/node_modules/commander/esm.mjs +0 -16
  126. package/server/whatsapp-rpc/node_modules/commander/index.js +0 -26
  127. package/server/whatsapp-rpc/node_modules/commander/lib/argument.js +0 -145
  128. package/server/whatsapp-rpc/node_modules/commander/lib/command.js +0 -2179
  129. package/server/whatsapp-rpc/node_modules/commander/lib/error.js +0 -43
  130. package/server/whatsapp-rpc/node_modules/commander/lib/help.js +0 -462
  131. package/server/whatsapp-rpc/node_modules/commander/lib/option.js +0 -329
  132. package/server/whatsapp-rpc/node_modules/commander/lib/suggestSimilar.js +0 -100
  133. package/server/whatsapp-rpc/node_modules/commander/package-support.json +0 -16
  134. package/server/whatsapp-rpc/node_modules/commander/package.json +0 -80
  135. package/server/whatsapp-rpc/node_modules/commander/typings/esm.d.mts +0 -3
  136. package/server/whatsapp-rpc/node_modules/commander/typings/index.d.ts +0 -884
  137. package/server/whatsapp-rpc/node_modules/cross-spawn/LICENSE +0 -21
  138. package/server/whatsapp-rpc/node_modules/cross-spawn/README.md +0 -89
  139. package/server/whatsapp-rpc/node_modules/cross-spawn/index.js +0 -39
  140. package/server/whatsapp-rpc/node_modules/cross-spawn/lib/enoent.js +0 -59
  141. package/server/whatsapp-rpc/node_modules/cross-spawn/lib/parse.js +0 -91
  142. package/server/whatsapp-rpc/node_modules/cross-spawn/lib/util/escape.js +0 -47
  143. package/server/whatsapp-rpc/node_modules/cross-spawn/lib/util/readShebang.js +0 -23
  144. package/server/whatsapp-rpc/node_modules/cross-spawn/lib/util/resolveCommand.js +0 -52
  145. package/server/whatsapp-rpc/node_modules/cross-spawn/package.json +0 -73
  146. package/server/whatsapp-rpc/node_modules/execa/index.d.ts +0 -955
  147. package/server/whatsapp-rpc/node_modules/execa/index.js +0 -309
  148. package/server/whatsapp-rpc/node_modules/execa/lib/command.js +0 -119
  149. package/server/whatsapp-rpc/node_modules/execa/lib/error.js +0 -87
  150. package/server/whatsapp-rpc/node_modules/execa/lib/kill.js +0 -102
  151. package/server/whatsapp-rpc/node_modules/execa/lib/pipe.js +0 -42
  152. package/server/whatsapp-rpc/node_modules/execa/lib/promise.js +0 -36
  153. package/server/whatsapp-rpc/node_modules/execa/lib/stdio.js +0 -49
  154. package/server/whatsapp-rpc/node_modules/execa/lib/stream.js +0 -133
  155. package/server/whatsapp-rpc/node_modules/execa/lib/verbose.js +0 -19
  156. package/server/whatsapp-rpc/node_modules/execa/license +0 -9
  157. package/server/whatsapp-rpc/node_modules/execa/package.json +0 -90
  158. package/server/whatsapp-rpc/node_modules/execa/readme.md +0 -822
  159. package/server/whatsapp-rpc/node_modules/get-stream/license +0 -9
  160. package/server/whatsapp-rpc/node_modules/get-stream/package.json +0 -53
  161. package/server/whatsapp-rpc/node_modules/get-stream/readme.md +0 -291
  162. package/server/whatsapp-rpc/node_modules/get-stream/source/array-buffer.js +0 -84
  163. package/server/whatsapp-rpc/node_modules/get-stream/source/array.js +0 -32
  164. package/server/whatsapp-rpc/node_modules/get-stream/source/buffer.js +0 -20
  165. package/server/whatsapp-rpc/node_modules/get-stream/source/contents.js +0 -101
  166. package/server/whatsapp-rpc/node_modules/get-stream/source/index.d.ts +0 -119
  167. package/server/whatsapp-rpc/node_modules/get-stream/source/index.js +0 -5
  168. package/server/whatsapp-rpc/node_modules/get-stream/source/string.js +0 -36
  169. package/server/whatsapp-rpc/node_modules/get-stream/source/utils.js +0 -11
  170. package/server/whatsapp-rpc/node_modules/get-them-args/LICENSE +0 -21
  171. package/server/whatsapp-rpc/node_modules/get-them-args/README.md +0 -95
  172. package/server/whatsapp-rpc/node_modules/get-them-args/index.js +0 -97
  173. package/server/whatsapp-rpc/node_modules/get-them-args/package.json +0 -36
  174. package/server/whatsapp-rpc/node_modules/human-signals/LICENSE +0 -201
  175. package/server/whatsapp-rpc/node_modules/human-signals/README.md +0 -168
  176. package/server/whatsapp-rpc/node_modules/human-signals/build/src/core.js +0 -273
  177. package/server/whatsapp-rpc/node_modules/human-signals/build/src/main.d.ts +0 -73
  178. package/server/whatsapp-rpc/node_modules/human-signals/build/src/main.js +0 -70
  179. package/server/whatsapp-rpc/node_modules/human-signals/build/src/realtime.js +0 -16
  180. package/server/whatsapp-rpc/node_modules/human-signals/build/src/signals.js +0 -34
  181. package/server/whatsapp-rpc/node_modules/human-signals/package.json +0 -61
  182. package/server/whatsapp-rpc/node_modules/is-stream/index.d.ts +0 -81
  183. package/server/whatsapp-rpc/node_modules/is-stream/index.js +0 -29
  184. package/server/whatsapp-rpc/node_modules/is-stream/license +0 -9
  185. package/server/whatsapp-rpc/node_modules/is-stream/package.json +0 -44
  186. package/server/whatsapp-rpc/node_modules/is-stream/readme.md +0 -60
  187. package/server/whatsapp-rpc/node_modules/isexe/LICENSE +0 -15
  188. package/server/whatsapp-rpc/node_modules/isexe/README.md +0 -51
  189. package/server/whatsapp-rpc/node_modules/isexe/index.js +0 -57
  190. package/server/whatsapp-rpc/node_modules/isexe/mode.js +0 -41
  191. package/server/whatsapp-rpc/node_modules/isexe/package.json +0 -31
  192. package/server/whatsapp-rpc/node_modules/isexe/test/basic.js +0 -221
  193. package/server/whatsapp-rpc/node_modules/isexe/windows.js +0 -42
  194. package/server/whatsapp-rpc/node_modules/kill-port/.editorconfig +0 -12
  195. package/server/whatsapp-rpc/node_modules/kill-port/.gitattributes +0 -1
  196. package/server/whatsapp-rpc/node_modules/kill-port/LICENSE +0 -21
  197. package/server/whatsapp-rpc/node_modules/kill-port/README.md +0 -140
  198. package/server/whatsapp-rpc/node_modules/kill-port/cli.js +0 -25
  199. package/server/whatsapp-rpc/node_modules/kill-port/example.js +0 -21
  200. package/server/whatsapp-rpc/node_modules/kill-port/index.js +0 -46
  201. package/server/whatsapp-rpc/node_modules/kill-port/logo.png +0 -0
  202. package/server/whatsapp-rpc/node_modules/kill-port/package.json +0 -41
  203. package/server/whatsapp-rpc/node_modules/kill-port/pnpm-lock.yaml +0 -4606
  204. package/server/whatsapp-rpc/node_modules/kill-port/test.js +0 -16
  205. package/server/whatsapp-rpc/node_modules/merge-stream/LICENSE +0 -21
  206. package/server/whatsapp-rpc/node_modules/merge-stream/README.md +0 -78
  207. package/server/whatsapp-rpc/node_modules/merge-stream/index.js +0 -41
  208. package/server/whatsapp-rpc/node_modules/merge-stream/package.json +0 -19
  209. package/server/whatsapp-rpc/node_modules/mimic-fn/index.d.ts +0 -52
  210. package/server/whatsapp-rpc/node_modules/mimic-fn/index.js +0 -71
  211. package/server/whatsapp-rpc/node_modules/mimic-fn/license +0 -9
  212. package/server/whatsapp-rpc/node_modules/mimic-fn/package.json +0 -45
  213. package/server/whatsapp-rpc/node_modules/mimic-fn/readme.md +0 -90
  214. package/server/whatsapp-rpc/node_modules/npm-run-path/index.d.ts +0 -90
  215. package/server/whatsapp-rpc/node_modules/npm-run-path/index.js +0 -52
  216. package/server/whatsapp-rpc/node_modules/npm-run-path/license +0 -9
  217. package/server/whatsapp-rpc/node_modules/npm-run-path/node_modules/path-key/index.d.ts +0 -31
  218. package/server/whatsapp-rpc/node_modules/npm-run-path/node_modules/path-key/index.js +0 -12
  219. package/server/whatsapp-rpc/node_modules/npm-run-path/node_modules/path-key/license +0 -9
  220. package/server/whatsapp-rpc/node_modules/npm-run-path/node_modules/path-key/package.json +0 -41
  221. package/server/whatsapp-rpc/node_modules/npm-run-path/node_modules/path-key/readme.md +0 -57
  222. package/server/whatsapp-rpc/node_modules/npm-run-path/package.json +0 -49
  223. package/server/whatsapp-rpc/node_modules/npm-run-path/readme.md +0 -104
  224. package/server/whatsapp-rpc/node_modules/onetime/index.d.ts +0 -59
  225. package/server/whatsapp-rpc/node_modules/onetime/index.js +0 -41
  226. package/server/whatsapp-rpc/node_modules/onetime/license +0 -9
  227. package/server/whatsapp-rpc/node_modules/onetime/package.json +0 -45
  228. package/server/whatsapp-rpc/node_modules/onetime/readme.md +0 -94
  229. package/server/whatsapp-rpc/node_modules/path-key/index.d.ts +0 -40
  230. package/server/whatsapp-rpc/node_modules/path-key/index.js +0 -16
  231. package/server/whatsapp-rpc/node_modules/path-key/license +0 -9
  232. package/server/whatsapp-rpc/node_modules/path-key/package.json +0 -39
  233. package/server/whatsapp-rpc/node_modules/path-key/readme.md +0 -61
  234. package/server/whatsapp-rpc/node_modules/shebang-command/index.js +0 -19
  235. package/server/whatsapp-rpc/node_modules/shebang-command/license +0 -9
  236. package/server/whatsapp-rpc/node_modules/shebang-command/package.json +0 -34
  237. package/server/whatsapp-rpc/node_modules/shebang-command/readme.md +0 -34
  238. package/server/whatsapp-rpc/node_modules/shebang-regex/index.d.ts +0 -22
  239. package/server/whatsapp-rpc/node_modules/shebang-regex/index.js +0 -2
  240. package/server/whatsapp-rpc/node_modules/shebang-regex/license +0 -9
  241. package/server/whatsapp-rpc/node_modules/shebang-regex/package.json +0 -35
  242. package/server/whatsapp-rpc/node_modules/shebang-regex/readme.md +0 -33
  243. package/server/whatsapp-rpc/node_modules/shell-exec/LICENSE +0 -21
  244. package/server/whatsapp-rpc/node_modules/shell-exec/README.md +0 -60
  245. package/server/whatsapp-rpc/node_modules/shell-exec/index.js +0 -47
  246. package/server/whatsapp-rpc/node_modules/shell-exec/package.json +0 -29
  247. package/server/whatsapp-rpc/node_modules/signal-exit/LICENSE.txt +0 -16
  248. package/server/whatsapp-rpc/node_modules/signal-exit/README.md +0 -74
  249. package/server/whatsapp-rpc/node_modules/signal-exit/dist/cjs/browser.d.ts +0 -12
  250. package/server/whatsapp-rpc/node_modules/signal-exit/dist/cjs/browser.d.ts.map +0 -1
  251. package/server/whatsapp-rpc/node_modules/signal-exit/dist/cjs/browser.js +0 -10
  252. package/server/whatsapp-rpc/node_modules/signal-exit/dist/cjs/browser.js.map +0 -1
  253. package/server/whatsapp-rpc/node_modules/signal-exit/dist/cjs/index.d.ts +0 -48
  254. package/server/whatsapp-rpc/node_modules/signal-exit/dist/cjs/index.d.ts.map +0 -1
  255. package/server/whatsapp-rpc/node_modules/signal-exit/dist/cjs/index.js +0 -279
  256. package/server/whatsapp-rpc/node_modules/signal-exit/dist/cjs/index.js.map +0 -1
  257. package/server/whatsapp-rpc/node_modules/signal-exit/dist/cjs/package.json +0 -3
  258. package/server/whatsapp-rpc/node_modules/signal-exit/dist/cjs/signals.d.ts +0 -29
  259. package/server/whatsapp-rpc/node_modules/signal-exit/dist/cjs/signals.d.ts.map +0 -1
  260. package/server/whatsapp-rpc/node_modules/signal-exit/dist/cjs/signals.js +0 -42
  261. package/server/whatsapp-rpc/node_modules/signal-exit/dist/cjs/signals.js.map +0 -1
  262. package/server/whatsapp-rpc/node_modules/signal-exit/dist/mjs/browser.d.ts +0 -12
  263. package/server/whatsapp-rpc/node_modules/signal-exit/dist/mjs/browser.d.ts.map +0 -1
  264. package/server/whatsapp-rpc/node_modules/signal-exit/dist/mjs/browser.js +0 -4
  265. package/server/whatsapp-rpc/node_modules/signal-exit/dist/mjs/browser.js.map +0 -1
  266. package/server/whatsapp-rpc/node_modules/signal-exit/dist/mjs/index.d.ts +0 -48
  267. package/server/whatsapp-rpc/node_modules/signal-exit/dist/mjs/index.d.ts.map +0 -1
  268. package/server/whatsapp-rpc/node_modules/signal-exit/dist/mjs/index.js +0 -275
  269. package/server/whatsapp-rpc/node_modules/signal-exit/dist/mjs/index.js.map +0 -1
  270. package/server/whatsapp-rpc/node_modules/signal-exit/dist/mjs/package.json +0 -3
  271. package/server/whatsapp-rpc/node_modules/signal-exit/dist/mjs/signals.d.ts +0 -29
  272. package/server/whatsapp-rpc/node_modules/signal-exit/dist/mjs/signals.d.ts.map +0 -1
  273. package/server/whatsapp-rpc/node_modules/signal-exit/dist/mjs/signals.js +0 -39
  274. package/server/whatsapp-rpc/node_modules/signal-exit/dist/mjs/signals.js.map +0 -1
  275. package/server/whatsapp-rpc/node_modules/signal-exit/package.json +0 -106
  276. package/server/whatsapp-rpc/node_modules/strip-final-newline/index.js +0 -14
  277. package/server/whatsapp-rpc/node_modules/strip-final-newline/license +0 -9
  278. package/server/whatsapp-rpc/node_modules/strip-final-newline/package.json +0 -43
  279. package/server/whatsapp-rpc/node_modules/strip-final-newline/readme.md +0 -35
  280. package/server/whatsapp-rpc/node_modules/which/CHANGELOG.md +0 -166
  281. package/server/whatsapp-rpc/node_modules/which/LICENSE +0 -15
  282. package/server/whatsapp-rpc/node_modules/which/README.md +0 -54
  283. package/server/whatsapp-rpc/node_modules/which/bin/node-which +0 -52
  284. package/server/whatsapp-rpc/node_modules/which/package.json +0 -43
  285. package/server/whatsapp-rpc/node_modules/which/which.js +0 -125
  286. package/server/whatsapp-rpc/package-lock.json +0 -272
  287. package/server/whatsapp-rpc/package.json +0 -30
  288. package/server/whatsapp-rpc/schema.json +0 -1294
  289. package/server/whatsapp-rpc/scripts/clean.cjs +0 -66
  290. package/server/whatsapp-rpc/scripts/cli.js +0 -171
  291. package/server/whatsapp-rpc/src/go/cmd/server/main.go +0 -91
  292. package/server/whatsapp-rpc/src/go/config/config.go +0 -49
  293. package/server/whatsapp-rpc/src/go/rpc/rpc.go +0 -446
  294. package/server/whatsapp-rpc/src/go/rpc/server.go +0 -112
  295. package/server/whatsapp-rpc/src/go/whatsapp/history.go +0 -166
  296. package/server/whatsapp-rpc/src/go/whatsapp/messages.go +0 -390
  297. package/server/whatsapp-rpc/src/go/whatsapp/service.go +0 -2130
  298. package/server/whatsapp-rpc/src/go/whatsapp/types.go +0 -261
  299. package/server/whatsapp-rpc/src/python/pyproject.toml +0 -15
  300. package/server/whatsapp-rpc/src/python/whatsapp_rpc/__init__.py +0 -4
  301. package/server/whatsapp-rpc/src/python/whatsapp_rpc/client.py +0 -427
  302. package/server/whatsapp-rpc/web/app.py +0 -609
  303. package/server/whatsapp-rpc/web/requirements.txt +0 -6
  304. package/server/whatsapp-rpc/web/rpc_client.py +0 -427
  305. package/server/whatsapp-rpc/web/static/openapi.yaml +0 -59
  306. package/server/whatsapp-rpc/web/templates/base.html +0 -150
  307. package/server/whatsapp-rpc/web/templates/contacts.html +0 -240
  308. package/server/whatsapp-rpc/web/templates/dashboard.html +0 -320
  309. package/server/whatsapp-rpc/web/templates/groups.html +0 -328
  310. package/server/whatsapp-rpc/web/templates/messages.html +0 -465
  311. package/server/whatsapp-rpc/web/templates/messaging.html +0 -681
  312. package/server/whatsapp-rpc/web/templates/send.html +0 -259
  313. package/server/whatsapp-rpc/web/templates/settings.html +0 -459
package/.env.template CHANGED
@@ -57,6 +57,22 @@ MAPS_TIMEOUT=30
57
57
  # Health Check
58
58
  HEALTH_CHECK_INTERVAL=60
59
59
 
60
+ # Cleanup Configuration (for long-running daemon)
61
+ CLEANUP_ENABLED=true
62
+ CLEANUP_INTERVAL=3600
63
+ CLEANUP_LOGS_MAX_COUNT=1000
64
+ CLEANUP_CACHE_MAX_AGE_HOURS=24
65
+
66
+ # Feature Toggles
67
+ WS_LOGGING_ENABLED=true
68
+
69
+ # Gunicorn Configuration (for production deployment)
70
+ # GUNICORN_TIMEOUT=120
71
+ # GUNICORN_GRACEFUL_TIMEOUT=30
72
+ # GUNICORN_KEEPALIVE=5
73
+ # GUNICORN_MAX_REQUESTS=10000
74
+ # GUNICORN_MAX_REQUESTS_JITTER=1000
75
+
60
76
  # WebSocket Configuration (For remote Android device connections)
61
77
  WEBSOCKET_URL=
62
78
  WEBSOCKET_API_KEY=
@@ -64,6 +80,10 @@ WEBSOCKET_API_KEY=
64
80
  # WhatsApp Service URL
65
81
  WHATSAPP_SERVICE_URL=http://localhost:5000
66
82
 
83
+ # AI Proxy Configuration (Ollama-style proxy for Claude Code CLI)
84
+ # Default port for AI proxy servers (e.g., Ollama, Claude Code CLI proxy)
85
+ AI_PROXY_DEFAULT_PORT=11434
86
+
67
87
  # External API Keys (managed through UI, these are optional defaults)
68
88
  OPENAI_API_KEY=
69
89
  GOOGLE_MAPS_API_KEY=
package/README.md CHANGED
@@ -1,10 +1,26 @@
1
1
  # MachinaOS
2
2
 
3
- Open-source workflow automation platform with AI agents, React Flow, and n8n-inspired architecture.
3
+ Open-source Platform to Build Your Own Personal AI Assistant, mashup of clawdbot and n8n, but More Powerful.
4
+
5
+ # Full Capabilities.
6
+
7
+ <img width="1280" height="671" alt="func_img" src="https://github.com/user-attachments/assets/2f14b6c8-3995-4ccc-b076-e40749a83df2" />
8
+
9
+ **60 nodes** | **6 AI providers** | **WebSocket-first** | **Self-hosted**
4
10
 
5
11
  ## Quick Start
6
12
 
7
- ### Option 1: One-Line Install (Recommended)
13
+ ```bash
14
+ npm install -g machinaos
15
+ machinaos start
16
+ ```
17
+
18
+ Open http://localhost:3000
19
+
20
+ <details>
21
+ <summary><b>Other Install Options</b></summary>
22
+
23
+ ### One-Line Install (installs all dependencies automatically)
8
24
 
9
25
  **Linux/macOS:**
10
26
  ```bash
@@ -16,9 +32,7 @@ curl -fsSL https://raw.githubusercontent.com/trohitg/MachinaOS/main/install.sh |
16
32
  iwr -useb https://raw.githubusercontent.com/trohitg/MachinaOS/main/install.ps1 | iex
17
33
  ```
18
34
 
19
- This automatically installs all dependencies (Node.js, Python, uv, Go) and MachinaOS.
20
-
21
- ### Option 2: Clone & Run
35
+ ### Clone & Run
22
36
 
23
37
  ```bash
24
38
  git clone https://github.com/trohitg/MachinaOS.git
@@ -27,16 +41,7 @@ npm run build
27
41
  npm run start
28
42
  ```
29
43
 
30
- ### Option 3: npm Global Install
31
-
32
- ```bash
33
- npm install -g machinaos
34
- machinaos start
35
- ```
36
-
37
- Requires Node.js 18+, Python 3.11+, uv, and Go 1.21+ to be pre-installed.
38
-
39
- ### Option 4: Docker
44
+ ### Docker
40
45
 
41
46
  ```bash
42
47
  git clone https://github.com/trohitg/MachinaOS.git
@@ -44,7 +49,62 @@ cd MachinaOS
44
49
  npm run docker:up
45
50
  ```
46
51
 
47
- Open http://localhost:3000
52
+ </details>
53
+
54
+ ## Features
55
+
56
+ ### AI Integration (6 Providers)
57
+
58
+ | Provider | Models | Features |
59
+ |----------|--------|----------|
60
+ | **OpenAI** | GPT-4o, GPT-4 Turbo, o1, o3, o4-mini | JSON mode, reasoning effort |
61
+ | **Anthropic** | Claude 3.5 Sonnet, Claude 3 Opus, Claude 3 Haiku | Extended thinking |
62
+ | **Google** | Gemini 2.5 Pro, Gemini 2.5 Flash, Gemini 2.0 Flash Thinking | Multimodal, 1M context |
63
+ | **OpenRouter** | 200+ models | Unified API for all providers |
64
+ | **Groq** | Llama, Mixtral, Qwen | Ultra-fast inference |
65
+ | **Cerebras** | Llama, Qwen | Ultra-fast on custom hardware |
66
+
67
+ ### AI Agents & Skills
68
+
69
+ - **AI Agent** - LangGraph-powered with tool calling and iterative reasoning
70
+ - **Chat Agent** - Conversational agent with skill support for multi-turn chat
71
+ - **10 Skills** - WhatsApp, Maps, HTTP, Scheduler, Android, Code, Memory, Web Search, Custom
72
+ - **4 Tools** - Calculator, Current Time, Web Search, Android Toolkit
73
+ - **Simple Memory** - Markdown-based conversation history with vector storage
74
+
75
+ ### Platform Integrations
76
+
77
+ - **WhatsApp** - Send/receive messages with QR pairing, filters, group support
78
+ - **Android** - 17 service nodes for device control (battery, WiFi, Bluetooth, apps, camera, sensors)
79
+ - **HTTP/Webhooks** - REST API integration with event-driven triggers
80
+ - **Google Maps** - Geocoding, nearby places, directions
81
+
82
+ ### Document Processing (RAG Pipeline)
83
+
84
+ - **HTTP Scraper** - Scrape URLs with pagination and date ranges
85
+ - **File Downloader** - Parallel downloads with semaphore concurrency
86
+ - **Document Parser** - PyPDF, Marker (OCR), Unstructured, BeautifulSoup
87
+ - **Text Chunker** - Recursive, markdown, or token-based splitting
88
+ - **Embedding Generator** - HuggingFace, OpenAI, Ollama embeddings
89
+ - **Vector Store** - ChromaDB, Qdrant, Pinecone backends
90
+
91
+ ## Node Categories
92
+
93
+ | Category | Count | Description |
94
+ |----------|-------|-------------|
95
+ | AI Models | 6 | OpenAI, Anthropic, Google, OpenRouter, Groq, Cerebras |
96
+ | AI Agents | 3 | AI Agent, Chat Agent, Simple Memory |
97
+ | AI Skills | 10 | WhatsApp, Maps, HTTP, Scheduler, Android, Code, etc. |
98
+ | AI Tools | 4 | Calculator, Time, Search, Android Toolkit |
99
+ | WhatsApp | 3 | Send, Receive, Database |
100
+ | Android | 17 | Device control and monitoring |
101
+ | Documents | 6 | RAG pipeline nodes |
102
+ | Utilities | 5 | HTTP, Webhooks, Chat Trigger, Console |
103
+ | Location | 3 | Google Maps integration |
104
+ | Code | 2 | Python and JavaScript executors |
105
+ | Workflow | 1 | Start node |
106
+
107
+ **Total: 60 nodes**
48
108
 
49
109
  ## Prerequisites
50
110
 
@@ -67,26 +127,6 @@ The install script handles these automatically, but for manual installation:
67
127
  | `machinaos docker:down` | Stop Docker containers |
68
128
  | `machinaos help` | Show all available commands |
69
129
 
70
- ## Local Development
71
-
72
- ```bash
73
- git clone https://github.com/trohitg/MachinaOS.git
74
- cd MachinaOS
75
- npm run build
76
- npm run start
77
- ```
78
-
79
- ---
80
-
81
- ## Features
82
-
83
- - **AI Workflows** - OpenAI, Claude, Gemini, Groq, OpenRouter models with tool calling
84
- - **AI Agents** - LangGraph-powered agents with memory and skills
85
- - **Android Automation** - Control your phone via 17 service nodes
86
- - **WhatsApp Bots** - Send/receive messages with filters and triggers
87
- - **HTTP/Webhooks** - API integrations with event-driven triggers
88
- - **Document Processing** - RAG pipeline with vector storage
89
-
90
130
  ## Configuration
91
131
 
92
132
  **API Keys:** Click **Credentials** button in toolbar to add API keys for OpenAI, Claude, Google Maps, etc.
@@ -131,6 +171,16 @@ MachinaOS/
131
171
  - **Services:** WhatsApp (Go + whatsmeow), WebSocket relay
132
172
  - **Package Manager:** uv (Python), npm (Node.js)
133
173
 
174
+ ## Documentation
175
+
176
+ Full documentation available at: https://docs.machinaos.dev
177
+
178
+ - [Installation Guide](https://docs.machinaos.dev/installation)
179
+ - [Quick Start](https://docs.machinaos.dev/quickstart)
180
+ - [Node Catalog](https://docs.machinaos.dev/nodes/overview)
181
+ - [AI Models](https://docs.machinaos.dev/nodes/ai-models)
182
+ - [AI Agents](https://docs.machinaos.dev/nodes/ai-agent)
183
+
134
184
  ## Troubleshooting
135
185
 
136
186
  **Port already in use:**
package/bin/cli.js CHANGED
@@ -44,14 +44,31 @@ function getVersion(cmd) {
44
44
  }
45
45
  }
46
46
 
47
+ // Add common binary paths to PATH (Linux installs uv to ~/.local/bin)
48
+ function expandPath() {
49
+ const home = process.env.HOME || process.env.USERPROFILE;
50
+ if (home) {
51
+ const additionalPaths = [
52
+ `${home}/.local/bin`, // uv, cargo installs
53
+ `${home}/.cargo/bin`, // Rust tools
54
+ '/usr/local/bin', // Homebrew on macOS
55
+ ];
56
+ const currentPath = process.env.PATH || '';
57
+ const sep = process.platform === 'win32' ? ';' : ':';
58
+ const newPaths = additionalPaths.filter(p => !currentPath.includes(p));
59
+ if (newPaths.length > 0) {
60
+ process.env.PATH = newPaths.join(sep) + sep + currentPath;
61
+ }
62
+ }
63
+ }
64
+
47
65
  function checkDeps() {
48
66
  const errors = [];
49
- const warnings = [];
50
67
 
51
68
  // Node.js version check
52
69
  const nodeVersion = parseInt(process.version.slice(1));
53
- if (nodeVersion < 18) {
54
- errors.push(`Node.js 18+ required (found ${process.version})`);
70
+ if (nodeVersion < 20) {
71
+ errors.push(`Node.js 20+ required (found ${process.version})`);
55
72
  }
56
73
 
57
74
  // Python version check
@@ -73,15 +90,6 @@ function checkDeps() {
73
90
  errors.push('uv (Python package manager) - https://docs.astral.sh/uv/');
74
91
  }
75
92
 
76
- // Go check (warning only - needed for WhatsApp service)
77
- if (!getVersion('go version')) {
78
- warnings.push('Go 1.21+ (optional, for WhatsApp service) - https://go.dev/dl/');
79
- }
80
-
81
- if (warnings.length > 0) {
82
- console.warn('Warnings:\n' + warnings.map(w => ` - ${w}`).join('\n') + '\n');
83
- }
84
-
85
93
  if (errors.length > 0) {
86
94
  console.error('Missing required dependencies:\n' + errors.map(e => ` - ${e}`).join('\n'));
87
95
  console.error('\nInstall the missing dependencies and try again.');
@@ -99,6 +107,9 @@ function run(script) {
99
107
  child.on('close', (code) => process.exit(code || 0));
100
108
  }
101
109
 
110
+ // Expand PATH to find tools like uv installed in user directories
111
+ expandPath();
112
+
102
113
  const cmd = process.argv[2] || 'help';
103
114
 
104
115
  if (cmd === 'help' || cmd === '--help' || cmd === '-h') {
package/client/Dockerfile CHANGED
@@ -5,10 +5,10 @@ FROM node:22-alpine AS development
5
5
  WORKDIR /app
6
6
 
7
7
  # Copy package files
8
- COPY package.json package-lock.json* ./
8
+ COPY package.json ./
9
9
 
10
- # Install dependencies (npm ci for faster, deterministic installs)
11
- RUN npm ci
10
+ # Install dependencies
11
+ RUN npm install
12
12
 
13
13
  # Copy application code
14
14
  COPY . .
@@ -28,10 +28,10 @@ FROM node:22-alpine AS builder
28
28
  WORKDIR /app
29
29
 
30
30
  # Copy package files
31
- COPY package.json package-lock.json* ./
31
+ COPY package.json ./
32
32
 
33
- # Install dependencies (npm ci for faster, deterministic installs)
34
- RUN npm ci
33
+ # Install dependencies
34
+ RUN npm install
35
35
 
36
36
  # Copy application code
37
37
  COPY . .
@@ -41,12 +41,14 @@ ARG VITE_AUTH_ENABLED=true
41
41
  ARG VITE_PYTHON_SERVICE_URL=
42
42
  ARG VITE_WHATSAPP_SERVICE_URL=
43
43
  ARG VITE_ANDROID_RELAY_URL=
44
+ ARG VITE_APP_VERSION=0.0.0
44
45
 
45
46
  # Expose build args as environment variables for Vite build
46
47
  ENV VITE_AUTH_ENABLED=$VITE_AUTH_ENABLED
47
48
  ENV VITE_PYTHON_SERVICE_URL=$VITE_PYTHON_SERVICE_URL
48
49
  ENV VITE_WHATSAPP_SERVICE_URL=$VITE_WHATSAPP_SERVICE_URL
49
50
  ENV VITE_ANDROID_RELAY_URL=$VITE_ANDROID_RELAY_URL
51
+ ENV VITE_APP_VERSION=$VITE_APP_VERSION
50
52
 
51
53
  # Increase Node.js memory limit for large builds (GCP e2-micro has limited RAM)
52
54
  ENV NODE_OPTIONS="--max-old-space-size=2048"
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "react-flow-client",
3
3
  "private": true,
4
- "version": "0.0.0",
4
+ "version": "0.0.12",
5
5
  "type": "module",
6
6
  "scripts": {
7
7
  "start": "vite --host 0.0.0.0",
@@ -27,8 +27,10 @@ import { CHAT_NODE_TYPES } from './nodeDefinitions/chatNodes';
27
27
  import { CODE_NODE_TYPES } from './nodeDefinitions/codeNodes';
28
28
  import { UTILITY_NODE_TYPES } from './nodeDefinitions/utilityNodes';
29
29
  import { TOOL_NODE_TYPES } from './nodeDefinitions/toolNodes';
30
+ import { SPECIALIZED_AGENT_TYPES } from './nodeDefinitions/specializedAgentNodes';
30
31
  import { SKILL_NODE_TYPES } from './nodeDefinitions/skillNodes';
31
32
  import { DOCUMENT_NODE_TYPES } from './nodeDefinitions/documentNodes';
33
+ import { SOCIAL_NODE_TYPES } from './nodeDefinitions/socialNodes';
32
34
  import ParameterPanel from './ParameterPanel';
33
35
  import LocationParameterPanel from './components/LocationParameterPanel';
34
36
  import { useAppStore } from './store/useAppStore';
@@ -63,7 +65,13 @@ const createNodeTypes = (): Record<string, React.ComponentType<any>> => {
63
65
  const types: Record<string, React.ComponentType<any>> = {};
64
66
 
65
67
  // Trigger nodes (no input handles) - check by group or specific types
66
- const TRIGGER_NODE_TYPES = ['start', 'cronScheduler', 'webhookTrigger', 'whatsappReceive', 'chatTrigger'];
68
+ const TRIGGER_NODE_TYPES = ['start', 'cronScheduler', 'webhookTrigger', 'whatsappReceive', 'chatTrigger', 'taskTrigger'];
69
+
70
+ // Pre-register specialized agent nodes explicitly to ensure they're always available
71
+ // This handles cases where nodeDefinitions iteration order might miss them
72
+ SPECIALIZED_AGENT_TYPES.forEach(type => {
73
+ types[type] = AIAgentNode;
74
+ });
67
75
 
68
76
  Object.keys(nodeDefinitions).forEach(type => {
69
77
  const definition = nodeDefinitions[type];
@@ -98,20 +106,20 @@ const createNodeTypes = (): Record<string, React.ComponentType<any>> => {
98
106
  // Utility nodes (HTTP, Webhooks) use SquareNode component
99
107
  // Note: webhookTrigger is already handled as trigger above
100
108
  types[type] = SquareNode;
109
+ } else if (SPECIALIZED_AGENT_TYPES.includes(type)) {
110
+ // Specialized agent nodes use AIAgentNode (rectangular card with bottom handles)
111
+ types[type] = AIAgentNode;
101
112
  } else if (TOOL_NODE_TYPES.includes(type)) {
102
- // Most tool nodes use circular ModelNode
103
- // Exception: androidTool uses ToolkitNode with top/bottom handles
104
- if (type === 'androidTool') {
105
- types[type] = ToolkitNode;
106
- } else {
107
- types[type] = ModelNode;
108
- }
113
+ types[type] = SquareNode;
109
114
  } else if (SKILL_NODE_TYPES.includes(type)) {
110
115
  // Skill nodes use ToolkitNode (vertical handle layout like Android Toolkit)
111
116
  types[type] = ToolkitNode;
112
117
  } else if (DOCUMENT_NODE_TYPES.includes(type)) {
113
118
  // Document processing nodes use SquareNode component
114
119
  types[type] = SquareNode;
120
+ } else if (SOCIAL_NODE_TYPES.includes(type)) {
121
+ // Social nodes use AIAgentNode for multiple output handles support
122
+ types[type] = AIAgentNode;
115
123
  } else if (definition?.group?.includes('model')) {
116
124
  // Fallback for other model nodes
117
125
  types[type] = ModelNode;
@@ -293,7 +301,8 @@ const DashboardContent: React.FC = () => {
293
301
  } = useWorkflowManagement();
294
302
 
295
303
  const { collapsedSections, searchQuery, setSearchQuery, toggleSection } = useComponentPalette();
296
- const { saveNodeParameters, executeWorkflow, deployWorkflow, cancelDeployment, nodeStatuses, deploymentStatus, workflowLock } = useWebSocket();
304
+ const { saveNodeParameters, executeWorkflow, deployWorkflow, cancelDeployment, nodeStatuses, deploymentStatus, workflowLock, isConnected, sendRequest } = useWebSocket();
305
+ const applyUIDefaults = useAppStore((state) => state.applyUIDefaults);
297
306
 
298
307
  // Scope deployment and lock to current workflow (n8n pattern)
299
308
  // Only show as "running" or "locked" if it applies to the currently viewed workflow
@@ -334,7 +343,10 @@ const DashboardContent: React.FC = () => {
334
343
  });
335
344
  const [settingsOpen, setSettingsOpen] = React.useState(false);
336
345
  const [credentialsOpen, setCredentialsOpen] = React.useState(false);
337
- const [consolePanelOpen, setConsolePanelOpen] = React.useState(false);
346
+
347
+ // Console panel visibility from store (database-backed)
348
+ const consolePanelVisible = useAppStore((state) => state.consolePanelVisible);
349
+ const toggleConsolePanelVisible = useAppStore((state) => state.toggleConsolePanelVisible);
338
350
 
339
351
  // Context menu state for node right-click
340
352
  const [contextMenu, setContextMenu] = React.useState<{
@@ -348,6 +360,40 @@ const DashboardContent: React.FC = () => {
348
360
  localStorage.setItem('workflow_settings', JSON.stringify(settings));
349
361
  }, [settings]);
350
362
 
363
+ // Load UI defaults from database on initial WebSocket connection
364
+ const hasLoadedUIDefaults = React.useRef(false);
365
+ React.useEffect(() => {
366
+ if (!isConnected || hasLoadedUIDefaults.current) return;
367
+ hasLoadedUIDefaults.current = true;
368
+
369
+ const loadUIDefaults = async () => {
370
+ try {
371
+ const response = await sendRequest<{ settings: any }>('get_user_settings', {});
372
+ if (response?.settings) {
373
+ applyUIDefaults({
374
+ sidebarDefaultOpen: response.settings.sidebar_default_open,
375
+ componentPaletteDefaultOpen: response.settings.component_palette_default_open,
376
+ consolePanelDefaultOpen: response.settings.console_panel_default_open,
377
+ });
378
+ // Also update local settings state for auto-save preferences
379
+ setSettings(prev => ({
380
+ ...prev,
381
+ autoSave: response.settings.auto_save ?? prev.autoSave,
382
+ autoSaveInterval: response.settings.auto_save_interval ?? prev.autoSaveInterval,
383
+ sidebarDefaultOpen: response.settings.sidebar_default_open ?? prev.sidebarDefaultOpen,
384
+ componentPaletteDefaultOpen: response.settings.component_palette_default_open ?? prev.componentPaletteDefaultOpen,
385
+ consolePanelDefaultOpen: response.settings.console_panel_default_open ?? prev.consolePanelDefaultOpen,
386
+ }));
387
+ console.log('[Dashboard] UI defaults loaded from database');
388
+ }
389
+ } catch (error) {
390
+ console.error('[Dashboard] Failed to load UI defaults:', error);
391
+ }
392
+ };
393
+
394
+ loadUIDefaults();
395
+ }, [isConnected, sendRequest, applyUIDefaults]);
396
+
351
397
  // Update nodes with execution status classes
352
398
  const styledNodes = React.useMemo(() => {
353
399
  return nodes.map(node => {
@@ -605,8 +651,8 @@ const DashboardContent: React.FC = () => {
605
651
  if (!currentWorkflow) return;
606
652
 
607
653
  // Check if there's at least one trigger node (workflow entry points)
608
- // Trigger types: start, cronScheduler, webhookTrigger, whatsappReceive, workflowTrigger, chatTrigger
609
- const triggerTypes = ['start', 'cronScheduler', 'webhookTrigger', 'whatsappReceive', 'workflowTrigger', 'chatTrigger'];
654
+ // Trigger types: start, cronScheduler, webhookTrigger, whatsappReceive, workflowTrigger, chatTrigger, taskTrigger
655
+ const triggerTypes = ['start', 'cronScheduler', 'webhookTrigger', 'whatsappReceive', 'workflowTrigger', 'chatTrigger', 'taskTrigger'];
610
656
  const hasTriggerNode = nodes.some(node => triggerTypes.includes(node.type || ''));
611
657
  if (!hasTriggerNode) {
612
658
  alert('No trigger node found in workflow.\n\nAdd a trigger node (Cron Scheduler, WhatsApp Receive, Webhook, Chat Trigger, etc.) to begin deployment.');
@@ -1140,8 +1186,8 @@ const DashboardContent: React.FC = () => {
1140
1186
 
1141
1187
  {/* Console Panel - n8n-style debug output at bottom */}
1142
1188
  <ConsolePanel
1143
- isOpen={consolePanelOpen}
1144
- onToggle={() => setConsolePanelOpen(prev => !prev)}
1189
+ isOpen={consolePanelVisible}
1190
+ onToggle={toggleConsolePanelVisible}
1145
1191
  nodes={nodes}
1146
1192
  />
1147
1193