machinaos 0.0.1 → 0.0.6
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.
- package/.env.template +71 -71
- package/LICENSE +21 -21
- package/README.md +145 -87
- package/bin/cli.js +62 -106
- package/client/.dockerignore +45 -45
- package/client/Dockerfile +68 -68
- package/client/dist/assets/index-DFSC53FP.css +1 -0
- package/client/dist/assets/index-fJ-1gTf5.js +613 -0
- package/client/dist/index.html +14 -0
- package/client/eslint.config.js +34 -16
- package/client/nginx.conf +66 -66
- package/client/package.json +61 -48
- package/client/src/App.tsx +27 -27
- package/client/src/Dashboard.tsx +1200 -1172
- package/client/src/ParameterPanel.tsx +302 -300
- package/client/src/components/AIAgentNode.tsx +315 -321
- package/client/src/components/APIKeyValidator.tsx +117 -117
- package/client/src/components/ClaudeChatModelNode.tsx +17 -17
- package/client/src/components/CredentialsModal.tsx +1200 -306
- package/client/src/components/GeminiChatModelNode.tsx +17 -17
- package/client/src/components/GenericNode.tsx +356 -356
- package/client/src/components/LocationParameterPanel.tsx +153 -153
- package/client/src/components/ModelNode.tsx +285 -285
- package/client/src/components/OpenAIChatModelNode.tsx +17 -17
- package/client/src/components/OutputPanel.tsx +470 -470
- package/client/src/components/ParameterRenderer.tsx +1873 -1873
- package/client/src/components/SkillEditorModal.tsx +3 -3
- package/client/src/components/SquareNode.tsx +812 -796
- package/client/src/components/ToolkitNode.tsx +365 -365
- package/client/src/components/auth/LoginPage.tsx +247 -247
- package/client/src/components/auth/ProtectedRoute.tsx +59 -59
- package/client/src/components/base/BaseChatModelNode.tsx +270 -270
- package/client/src/components/icons/AIProviderIcons.tsx +50 -50
- package/client/src/components/maps/GoogleMapsPicker.tsx +136 -136
- package/client/src/components/maps/MapsPreviewPanel.tsx +109 -109
- package/client/src/components/maps/index.ts +25 -25
- package/client/src/components/parameterPanel/InputSection.tsx +1094 -1094
- package/client/src/components/parameterPanel/LocationPanelLayout.tsx +64 -64
- package/client/src/components/parameterPanel/MapsSection.tsx +91 -91
- package/client/src/components/parameterPanel/MiddleSection.tsx +867 -571
- package/client/src/components/parameterPanel/OutputSection.tsx +80 -80
- package/client/src/components/parameterPanel/ParameterPanelLayout.tsx +81 -81
- package/client/src/components/parameterPanel/ToolSchemaEditor.tsx +436 -436
- package/client/src/components/parameterPanel/index.ts +41 -41
- package/client/src/components/shared/DataPanel.tsx +142 -142
- package/client/src/components/shared/JSONTreeRenderer.tsx +105 -105
- package/client/src/components/ui/AIResultModal.tsx +203 -203
- package/client/src/components/ui/ApiKeyInput.tsx +93 -0
- package/client/src/components/ui/CodeEditor.tsx +81 -81
- package/client/src/components/ui/CollapsibleSection.tsx +87 -87
- package/client/src/components/ui/ComponentItem.tsx +153 -153
- package/client/src/components/ui/ComponentPalette.tsx +320 -320
- package/client/src/components/ui/ConsolePanel.tsx +151 -43
- package/client/src/components/ui/ErrorBoundary.tsx +195 -195
- package/client/src/components/ui/InputNodesPanel.tsx +203 -203
- package/client/src/components/ui/MapSelector.tsx +313 -313
- package/client/src/components/ui/Modal.tsx +151 -148
- package/client/src/components/ui/NodeOutputPanel.tsx +1150 -1150
- package/client/src/components/ui/OutputDisplayPanel.tsx +381 -381
- package/client/src/components/ui/QRCodeDisplay.tsx +182 -0
- package/client/src/components/ui/TopToolbar.tsx +736 -736
- package/client/src/components/ui/WorkflowSidebar.tsx +293 -293
- package/client/src/config/antdTheme.ts +186 -186
- package/client/src/contexts/AuthContext.tsx +221 -221
- package/client/src/contexts/ThemeContext.tsx +42 -42
- package/client/src/contexts/WebSocketContext.tsx +2144 -1971
- package/client/src/factories/baseChatModelFactory.ts +255 -255
- package/client/src/hooks/useAndroidOperations.ts +118 -164
- package/client/src/hooks/useApiKeyValidation.ts +106 -106
- package/client/src/hooks/useApiKeys.ts +238 -238
- package/client/src/hooks/useAppTheme.ts +17 -17
- package/client/src/hooks/useComponentPalette.ts +50 -50
- package/client/src/hooks/useDragAndDrop.ts +123 -123
- package/client/src/hooks/useDragVariable.ts +88 -88
- package/client/src/hooks/useExecution.ts +319 -313
- package/client/src/hooks/useParameterPanel.ts +176 -176
- package/client/src/hooks/useReactFlowNodes.ts +188 -188
- package/client/src/hooks/useToolSchema.ts +209 -209
- package/client/src/hooks/useWhatsApp.ts +196 -196
- package/client/src/hooks/useWorkflowManagement.ts +45 -45
- package/client/src/index.css +314 -314
- package/client/src/nodeDefinitions/aiAgentNodes.ts +335 -335
- package/client/src/nodeDefinitions/aiModelNodes.ts +340 -340
- package/client/src/nodeDefinitions/androidServiceNodes.ts +383 -383
- package/client/src/nodeDefinitions/chatNodes.ts +135 -135
- package/client/src/nodeDefinitions/codeNodes.ts +54 -54
- package/client/src/nodeDefinitions/index.ts +14 -14
- package/client/src/nodeDefinitions/locationNodes.ts +462 -462
- package/client/src/nodeDefinitions/schedulerNodes.ts +220 -220
- package/client/src/nodeDefinitions/skillNodes.ts +17 -5
- package/client/src/nodeDefinitions/utilityNodes.ts +284 -284
- package/client/src/nodeDefinitions/whatsappNodes.ts +821 -865
- package/client/src/nodeDefinitions.ts +101 -103
- package/client/src/services/dynamicParameterService.ts +95 -95
- package/client/src/services/execution/aiAgentExecutionService.ts +34 -34
- package/client/src/services/executionService.ts +227 -231
- package/client/src/services/workflowApi.ts +91 -91
- package/client/src/store/useAppStore.ts +578 -581
- package/client/src/styles/theme.ts +513 -508
- package/client/src/styles/zIndex.ts +16 -16
- package/client/src/types/ComponentTypes.ts +38 -38
- package/client/src/types/INodeProperties.ts +287 -287
- package/client/src/types/NodeTypes.ts +27 -27
- package/client/src/utils/formatters.ts +32 -32
- package/client/src/utils/googleMapsLoader.ts +139 -139
- package/client/src/utils/locationUtils.ts +84 -84
- package/client/src/utils/nodeUtils.ts +30 -30
- package/client/src/utils/workflow.ts +29 -29
- package/client/src/vite-env.d.ts +12 -12
- package/client/tailwind.config.js +59 -59
- package/client/tsconfig.json +25 -25
- package/client/vite.config.js +35 -35
- package/package.json +78 -70
- package/scripts/build.js +153 -45
- package/scripts/clean.js +40 -40
- package/scripts/start.js +234 -210
- package/scripts/stop.js +301 -325
- package/server/.dockerignore +44 -44
- package/server/Dockerfile +45 -45
- package/server/constants.py +244 -249
- package/server/core/cache.py +460 -460
- package/server/core/config.py +127 -127
- package/server/core/container.py +98 -98
- package/server/core/database.py +1296 -1210
- package/server/core/logging.py +313 -313
- package/server/main.py +288 -288
- package/server/middleware/__init__.py +5 -5
- package/server/middleware/auth.py +89 -89
- package/server/models/auth.py +52 -52
- package/server/models/cache.py +24 -24
- package/server/models/database.py +235 -210
- package/server/models/nodes.py +435 -455
- package/server/pyproject.toml +75 -72
- package/server/requirements.txt +83 -83
- package/server/routers/android.py +294 -294
- package/server/routers/auth.py +203 -203
- package/server/routers/database.py +150 -150
- package/server/routers/maps.py +141 -141
- package/server/routers/nodejs_compat.py +288 -288
- package/server/routers/webhook.py +90 -90
- package/server/routers/websocket.py +2239 -2127
- package/server/routers/whatsapp.py +761 -761
- package/server/routers/workflow.py +199 -199
- package/server/services/ai.py +2444 -2414
- package/server/services/android_service.py +588 -588
- package/server/services/auth.py +130 -130
- package/server/services/chat_client.py +160 -160
- package/server/services/deployment/manager.py +706 -706
- package/server/services/event_waiter.py +675 -785
- package/server/services/execution/executor.py +1351 -1351
- package/server/services/execution/models.py +1 -1
- package/server/services/handlers/__init__.py +122 -126
- package/server/services/handlers/ai.py +390 -355
- package/server/services/handlers/android.py +69 -260
- package/server/services/handlers/code.py +278 -278
- package/server/services/handlers/http.py +193 -193
- package/server/services/handlers/tools.py +146 -32
- package/server/services/handlers/triggers.py +107 -107
- package/server/services/handlers/utility.py +822 -822
- package/server/services/handlers/whatsapp.py +423 -476
- package/server/services/maps.py +288 -288
- package/server/services/memory_store.py +103 -103
- package/server/services/node_executor.py +372 -375
- package/server/services/scheduler.py +155 -155
- package/server/services/skill_loader.py +1 -1
- package/server/services/status_broadcaster.py +834 -826
- package/server/services/temporal/__init__.py +23 -23
- package/server/services/temporal/activities.py +344 -344
- package/server/services/temporal/client.py +76 -76
- package/server/services/temporal/executor.py +147 -147
- package/server/services/temporal/worker.py +251 -251
- package/server/services/temporal/workflow.py +355 -355
- package/server/services/temporal/ws_client.py +236 -236
- package/server/services/text.py +110 -110
- package/server/services/user_auth.py +172 -172
- package/server/services/websocket_client.py +29 -29
- package/server/services/workflow.py +597 -597
- package/server/skills/android-skill/SKILL.md +4 -4
- package/server/skills/code-skill/SKILL.md +123 -89
- package/server/skills/maps-skill/SKILL.md +3 -3
- package/server/skills/memory-skill/SKILL.md +1 -1
- package/server/skills/web-search-skill/SKILL.md +154 -0
- package/server/skills/whatsapp-skill/SKILL.md +3 -3
- package/server/uv.lock +461 -100
- package/server/whatsapp-rpc/.dockerignore +30 -30
- package/server/whatsapp-rpc/Dockerfile +44 -44
- package/server/whatsapp-rpc/Dockerfile.web +17 -17
- package/server/whatsapp-rpc/README.md +139 -139
- package/server/whatsapp-rpc/bin/whatsapp-rpc-server +0 -0
- package/server/whatsapp-rpc/cli.js +95 -95
- package/server/whatsapp-rpc/configs/config.yaml +6 -6
- package/server/whatsapp-rpc/docker-compose.yml +35 -35
- package/server/whatsapp-rpc/docs/API.md +410 -410
- package/server/whatsapp-rpc/node_modules/.package-lock.json +259 -0
- package/server/whatsapp-rpc/node_modules/chalk/license +9 -0
- package/server/whatsapp-rpc/node_modules/chalk/package.json +83 -0
- package/server/whatsapp-rpc/node_modules/chalk/readme.md +297 -0
- package/server/whatsapp-rpc/node_modules/chalk/source/index.d.ts +325 -0
- package/server/whatsapp-rpc/node_modules/chalk/source/index.js +225 -0
- package/server/whatsapp-rpc/node_modules/chalk/source/utilities.js +33 -0
- package/server/whatsapp-rpc/node_modules/chalk/source/vendor/ansi-styles/index.d.ts +236 -0
- package/server/whatsapp-rpc/node_modules/chalk/source/vendor/ansi-styles/index.js +223 -0
- package/server/whatsapp-rpc/node_modules/chalk/source/vendor/supports-color/browser.d.ts +1 -0
- package/server/whatsapp-rpc/node_modules/chalk/source/vendor/supports-color/browser.js +34 -0
- package/server/whatsapp-rpc/node_modules/chalk/source/vendor/supports-color/index.d.ts +55 -0
- package/server/whatsapp-rpc/node_modules/chalk/source/vendor/supports-color/index.js +190 -0
- package/server/whatsapp-rpc/node_modules/commander/LICENSE +22 -0
- package/server/whatsapp-rpc/node_modules/commander/Readme.md +1148 -0
- package/server/whatsapp-rpc/node_modules/commander/esm.mjs +16 -0
- package/server/whatsapp-rpc/node_modules/commander/index.js +26 -0
- package/server/whatsapp-rpc/node_modules/commander/lib/argument.js +145 -0
- package/server/whatsapp-rpc/node_modules/commander/lib/command.js +2179 -0
- package/server/whatsapp-rpc/node_modules/commander/lib/error.js +43 -0
- package/server/whatsapp-rpc/node_modules/commander/lib/help.js +462 -0
- package/server/whatsapp-rpc/node_modules/commander/lib/option.js +329 -0
- package/server/whatsapp-rpc/node_modules/commander/lib/suggestSimilar.js +100 -0
- package/server/whatsapp-rpc/node_modules/commander/package-support.json +16 -0
- package/server/whatsapp-rpc/node_modules/commander/package.json +80 -0
- package/server/whatsapp-rpc/node_modules/commander/typings/esm.d.mts +3 -0
- package/server/whatsapp-rpc/node_modules/commander/typings/index.d.ts +884 -0
- package/server/whatsapp-rpc/node_modules/cross-spawn/LICENSE +21 -0
- package/server/whatsapp-rpc/node_modules/cross-spawn/README.md +89 -0
- package/server/whatsapp-rpc/node_modules/cross-spawn/index.js +39 -0
- package/server/whatsapp-rpc/node_modules/cross-spawn/lib/enoent.js +59 -0
- package/server/whatsapp-rpc/node_modules/cross-spawn/lib/parse.js +91 -0
- package/server/whatsapp-rpc/node_modules/cross-spawn/lib/util/escape.js +47 -0
- package/server/whatsapp-rpc/node_modules/cross-spawn/lib/util/readShebang.js +23 -0
- package/server/whatsapp-rpc/node_modules/cross-spawn/lib/util/resolveCommand.js +52 -0
- package/server/whatsapp-rpc/node_modules/cross-spawn/package.json +73 -0
- package/server/whatsapp-rpc/node_modules/execa/index.d.ts +955 -0
- package/server/whatsapp-rpc/node_modules/execa/index.js +309 -0
- package/server/whatsapp-rpc/node_modules/execa/lib/command.js +119 -0
- package/server/whatsapp-rpc/node_modules/execa/lib/error.js +87 -0
- package/server/whatsapp-rpc/node_modules/execa/lib/kill.js +102 -0
- package/server/whatsapp-rpc/node_modules/execa/lib/pipe.js +42 -0
- package/server/whatsapp-rpc/node_modules/execa/lib/promise.js +36 -0
- package/server/whatsapp-rpc/node_modules/execa/lib/stdio.js +49 -0
- package/server/whatsapp-rpc/node_modules/execa/lib/stream.js +133 -0
- package/server/whatsapp-rpc/node_modules/execa/lib/verbose.js +19 -0
- package/server/whatsapp-rpc/node_modules/execa/license +9 -0
- package/server/whatsapp-rpc/node_modules/execa/package.json +90 -0
- package/server/whatsapp-rpc/node_modules/execa/readme.md +822 -0
- package/server/whatsapp-rpc/node_modules/get-stream/license +9 -0
- package/server/whatsapp-rpc/node_modules/get-stream/package.json +53 -0
- package/server/whatsapp-rpc/node_modules/get-stream/readme.md +291 -0
- package/server/whatsapp-rpc/node_modules/get-stream/source/array-buffer.js +84 -0
- package/server/whatsapp-rpc/node_modules/get-stream/source/array.js +32 -0
- package/server/whatsapp-rpc/node_modules/get-stream/source/buffer.js +20 -0
- package/server/whatsapp-rpc/node_modules/get-stream/source/contents.js +101 -0
- package/server/whatsapp-rpc/node_modules/get-stream/source/index.d.ts +119 -0
- package/server/whatsapp-rpc/node_modules/get-stream/source/index.js +5 -0
- package/server/whatsapp-rpc/node_modules/get-stream/source/string.js +36 -0
- package/server/whatsapp-rpc/node_modules/get-stream/source/utils.js +11 -0
- package/server/whatsapp-rpc/node_modules/get-them-args/LICENSE +21 -0
- package/server/whatsapp-rpc/node_modules/get-them-args/README.md +95 -0
- package/server/whatsapp-rpc/node_modules/get-them-args/index.js +97 -0
- package/server/whatsapp-rpc/node_modules/get-them-args/package.json +36 -0
- package/server/whatsapp-rpc/node_modules/human-signals/LICENSE +201 -0
- package/server/whatsapp-rpc/node_modules/human-signals/README.md +168 -0
- package/server/whatsapp-rpc/node_modules/human-signals/build/src/core.js +273 -0
- package/server/whatsapp-rpc/node_modules/human-signals/build/src/main.d.ts +73 -0
- package/server/whatsapp-rpc/node_modules/human-signals/build/src/main.js +70 -0
- package/server/whatsapp-rpc/node_modules/human-signals/build/src/realtime.js +16 -0
- package/server/whatsapp-rpc/node_modules/human-signals/build/src/signals.js +34 -0
- package/server/whatsapp-rpc/node_modules/human-signals/package.json +61 -0
- package/server/whatsapp-rpc/node_modules/is-stream/index.d.ts +81 -0
- package/server/whatsapp-rpc/node_modules/is-stream/index.js +29 -0
- package/server/whatsapp-rpc/node_modules/is-stream/license +9 -0
- package/server/whatsapp-rpc/node_modules/is-stream/package.json +44 -0
- package/server/whatsapp-rpc/node_modules/is-stream/readme.md +60 -0
- package/server/whatsapp-rpc/node_modules/isexe/LICENSE +15 -0
- package/server/whatsapp-rpc/node_modules/isexe/README.md +51 -0
- package/server/whatsapp-rpc/node_modules/isexe/index.js +57 -0
- package/server/whatsapp-rpc/node_modules/isexe/mode.js +41 -0
- package/server/whatsapp-rpc/node_modules/isexe/package.json +31 -0
- package/server/whatsapp-rpc/node_modules/isexe/test/basic.js +221 -0
- package/server/whatsapp-rpc/node_modules/isexe/windows.js +42 -0
- package/server/whatsapp-rpc/node_modules/kill-port/.editorconfig +12 -0
- package/server/whatsapp-rpc/node_modules/kill-port/.gitattributes +1 -0
- package/server/whatsapp-rpc/node_modules/kill-port/LICENSE +21 -0
- package/server/whatsapp-rpc/node_modules/kill-port/README.md +140 -0
- package/server/whatsapp-rpc/node_modules/kill-port/cli.js +25 -0
- package/server/whatsapp-rpc/node_modules/kill-port/example.js +21 -0
- package/server/whatsapp-rpc/node_modules/kill-port/index.js +46 -0
- package/server/whatsapp-rpc/node_modules/kill-port/logo.png +0 -0
- package/server/whatsapp-rpc/node_modules/kill-port/package.json +41 -0
- package/server/whatsapp-rpc/node_modules/kill-port/pnpm-lock.yaml +4606 -0
- package/server/whatsapp-rpc/node_modules/kill-port/test.js +16 -0
- package/server/whatsapp-rpc/node_modules/merge-stream/LICENSE +21 -0
- package/server/whatsapp-rpc/node_modules/merge-stream/README.md +78 -0
- package/server/whatsapp-rpc/node_modules/merge-stream/index.js +41 -0
- package/server/whatsapp-rpc/node_modules/merge-stream/package.json +19 -0
- package/server/whatsapp-rpc/node_modules/mimic-fn/index.d.ts +52 -0
- package/server/whatsapp-rpc/node_modules/mimic-fn/index.js +71 -0
- package/server/whatsapp-rpc/node_modules/mimic-fn/license +9 -0
- package/server/whatsapp-rpc/node_modules/mimic-fn/package.json +45 -0
- package/server/whatsapp-rpc/node_modules/mimic-fn/readme.md +90 -0
- package/server/whatsapp-rpc/node_modules/npm-run-path/index.d.ts +90 -0
- package/server/whatsapp-rpc/node_modules/npm-run-path/index.js +52 -0
- package/server/whatsapp-rpc/node_modules/npm-run-path/license +9 -0
- package/server/whatsapp-rpc/node_modules/npm-run-path/node_modules/path-key/index.d.ts +31 -0
- package/server/whatsapp-rpc/node_modules/npm-run-path/node_modules/path-key/index.js +12 -0
- package/server/whatsapp-rpc/node_modules/npm-run-path/node_modules/path-key/license +9 -0
- package/server/whatsapp-rpc/node_modules/npm-run-path/node_modules/path-key/package.json +41 -0
- package/server/whatsapp-rpc/node_modules/npm-run-path/node_modules/path-key/readme.md +57 -0
- package/server/whatsapp-rpc/node_modules/npm-run-path/package.json +49 -0
- package/server/whatsapp-rpc/node_modules/npm-run-path/readme.md +104 -0
- package/server/whatsapp-rpc/node_modules/onetime/index.d.ts +59 -0
- package/server/whatsapp-rpc/node_modules/onetime/index.js +41 -0
- package/server/whatsapp-rpc/node_modules/onetime/license +9 -0
- package/server/whatsapp-rpc/node_modules/onetime/package.json +45 -0
- package/server/whatsapp-rpc/node_modules/onetime/readme.md +94 -0
- package/server/whatsapp-rpc/node_modules/path-key/index.d.ts +40 -0
- package/server/whatsapp-rpc/node_modules/path-key/index.js +16 -0
- package/server/whatsapp-rpc/node_modules/path-key/license +9 -0
- package/server/whatsapp-rpc/node_modules/path-key/package.json +39 -0
- package/server/whatsapp-rpc/node_modules/path-key/readme.md +61 -0
- package/server/whatsapp-rpc/node_modules/shebang-command/index.js +19 -0
- package/server/whatsapp-rpc/node_modules/shebang-command/license +9 -0
- package/server/whatsapp-rpc/node_modules/shebang-command/package.json +34 -0
- package/server/whatsapp-rpc/node_modules/shebang-command/readme.md +34 -0
- package/server/whatsapp-rpc/node_modules/shebang-regex/index.d.ts +22 -0
- package/server/whatsapp-rpc/node_modules/shebang-regex/index.js +2 -0
- package/server/whatsapp-rpc/node_modules/shebang-regex/license +9 -0
- package/server/whatsapp-rpc/node_modules/shebang-regex/package.json +35 -0
- package/server/whatsapp-rpc/node_modules/shebang-regex/readme.md +33 -0
- package/server/whatsapp-rpc/node_modules/shell-exec/LICENSE +21 -0
- package/server/whatsapp-rpc/node_modules/shell-exec/README.md +60 -0
- package/server/whatsapp-rpc/node_modules/shell-exec/index.js +47 -0
- package/server/whatsapp-rpc/node_modules/shell-exec/package.json +29 -0
- package/server/whatsapp-rpc/node_modules/signal-exit/LICENSE.txt +16 -0
- package/server/whatsapp-rpc/node_modules/signal-exit/README.md +74 -0
- package/server/whatsapp-rpc/node_modules/signal-exit/dist/cjs/browser.d.ts +12 -0
- package/server/whatsapp-rpc/node_modules/signal-exit/dist/cjs/browser.d.ts.map +1 -0
- package/server/whatsapp-rpc/node_modules/signal-exit/dist/cjs/browser.js +10 -0
- package/server/whatsapp-rpc/node_modules/signal-exit/dist/cjs/browser.js.map +1 -0
- package/server/whatsapp-rpc/node_modules/signal-exit/dist/cjs/index.d.ts +48 -0
- package/server/whatsapp-rpc/node_modules/signal-exit/dist/cjs/index.d.ts.map +1 -0
- package/server/whatsapp-rpc/node_modules/signal-exit/dist/cjs/index.js +279 -0
- package/server/whatsapp-rpc/node_modules/signal-exit/dist/cjs/index.js.map +1 -0
- package/server/whatsapp-rpc/node_modules/signal-exit/dist/cjs/package.json +3 -0
- package/server/whatsapp-rpc/node_modules/signal-exit/dist/cjs/signals.d.ts +29 -0
- package/server/whatsapp-rpc/node_modules/signal-exit/dist/cjs/signals.d.ts.map +1 -0
- package/server/whatsapp-rpc/node_modules/signal-exit/dist/cjs/signals.js +42 -0
- package/server/whatsapp-rpc/node_modules/signal-exit/dist/cjs/signals.js.map +1 -0
- package/server/whatsapp-rpc/node_modules/signal-exit/dist/mjs/browser.d.ts +12 -0
- package/server/whatsapp-rpc/node_modules/signal-exit/dist/mjs/browser.d.ts.map +1 -0
- package/server/whatsapp-rpc/node_modules/signal-exit/dist/mjs/browser.js +4 -0
- package/server/whatsapp-rpc/node_modules/signal-exit/dist/mjs/browser.js.map +1 -0
- package/server/whatsapp-rpc/node_modules/signal-exit/dist/mjs/index.d.ts +48 -0
- package/server/whatsapp-rpc/node_modules/signal-exit/dist/mjs/index.d.ts.map +1 -0
- package/server/whatsapp-rpc/node_modules/signal-exit/dist/mjs/index.js +275 -0
- package/server/whatsapp-rpc/node_modules/signal-exit/dist/mjs/index.js.map +1 -0
- package/server/whatsapp-rpc/node_modules/signal-exit/dist/mjs/package.json +3 -0
- package/server/whatsapp-rpc/node_modules/signal-exit/dist/mjs/signals.d.ts +29 -0
- package/server/whatsapp-rpc/node_modules/signal-exit/dist/mjs/signals.d.ts.map +1 -0
- package/server/whatsapp-rpc/node_modules/signal-exit/dist/mjs/signals.js +39 -0
- package/server/whatsapp-rpc/node_modules/signal-exit/dist/mjs/signals.js.map +1 -0
- package/server/whatsapp-rpc/node_modules/signal-exit/package.json +106 -0
- package/server/whatsapp-rpc/node_modules/strip-final-newline/index.js +14 -0
- package/server/whatsapp-rpc/node_modules/strip-final-newline/license +9 -0
- package/server/whatsapp-rpc/node_modules/strip-final-newline/package.json +43 -0
- package/server/whatsapp-rpc/node_modules/strip-final-newline/readme.md +35 -0
- package/server/whatsapp-rpc/node_modules/which/CHANGELOG.md +166 -0
- package/server/whatsapp-rpc/node_modules/which/LICENSE +15 -0
- package/server/whatsapp-rpc/node_modules/which/README.md +54 -0
- package/server/whatsapp-rpc/node_modules/which/bin/node-which +52 -0
- package/server/whatsapp-rpc/node_modules/which/package.json +43 -0
- package/server/whatsapp-rpc/node_modules/which/which.js +125 -0
- package/server/whatsapp-rpc/package-lock.json +272 -0
- package/server/whatsapp-rpc/package.json +30 -30
- package/server/whatsapp-rpc/schema.json +1294 -1294
- package/server/whatsapp-rpc/scripts/clean.cjs +66 -66
- package/server/whatsapp-rpc/scripts/cli.js +162 -162
- package/server/whatsapp-rpc/src/go/whatsapp/history.go +166 -166
- package/server/whatsapp-rpc/src/python/pyproject.toml +15 -15
- package/server/whatsapp-rpc/src/python/whatsapp_rpc/__init__.py +4 -4
- package/server/whatsapp-rpc/src/python/whatsapp_rpc/client.py +427 -427
- package/server/whatsapp-rpc/web/app.py +609 -609
- package/server/whatsapp-rpc/web/requirements.txt +6 -6
- package/server/whatsapp-rpc/web/rpc_client.py +427 -427
- package/server/whatsapp-rpc/web/static/openapi.yaml +59 -59
- package/server/whatsapp-rpc/web/templates/base.html +149 -149
- package/server/whatsapp-rpc/web/templates/contacts.html +240 -240
- package/server/whatsapp-rpc/web/templates/dashboard.html +319 -319
- package/server/whatsapp-rpc/web/templates/groups.html +328 -328
- package/server/whatsapp-rpc/web/templates/messages.html +465 -465
- package/server/whatsapp-rpc/web/templates/messaging.html +680 -680
- package/server/whatsapp-rpc/web/templates/send.html +258 -258
- package/server/whatsapp-rpc/web/templates/settings.html +459 -459
- package/client/src/components/ui/AndroidSettingsPanel.tsx +0 -401
- package/client/src/components/ui/WhatsAppSettingsPanel.tsx +0 -345
- package/client/src/nodeDefinitions/androidDeviceNodes.ts +0 -140
- package/docker-compose.prod.yml +0 -107
- package/docker-compose.yml +0 -104
- package/docs-MachinaOs/README.md +0 -85
- package/docs-MachinaOs/deployment/docker.mdx +0 -228
- package/docs-MachinaOs/deployment/production.mdx +0 -345
- package/docs-MachinaOs/docs.json +0 -75
- package/docs-MachinaOs/faq.mdx +0 -309
- package/docs-MachinaOs/favicon.svg +0 -5
- package/docs-MachinaOs/installation.mdx +0 -160
- package/docs-MachinaOs/introduction.mdx +0 -114
- package/docs-MachinaOs/logo/dark.svg +0 -6
- package/docs-MachinaOs/logo/light.svg +0 -6
- package/docs-MachinaOs/nodes/ai-agent.mdx +0 -216
- package/docs-MachinaOs/nodes/ai-models.mdx +0 -240
- package/docs-MachinaOs/nodes/android.mdx +0 -411
- package/docs-MachinaOs/nodes/overview.mdx +0 -181
- package/docs-MachinaOs/nodes/schedulers.mdx +0 -316
- package/docs-MachinaOs/nodes/webhooks.mdx +0 -330
- package/docs-MachinaOs/nodes/whatsapp.mdx +0 -305
- package/docs-MachinaOs/quickstart.mdx +0 -119
- package/docs-MachinaOs/tutorials/ai-agent-workflow.mdx +0 -177
- package/docs-MachinaOs/tutorials/android-automation.mdx +0 -242
- package/docs-MachinaOs/tutorials/first-workflow.mdx +0 -134
- package/docs-MachinaOs/tutorials/whatsapp-automation.mdx +0 -185
- package/nul +0 -0
- package/scripts/check-ports.ps1 +0 -33
- package/scripts/kill-port.ps1 +0 -154
|
@@ -1,189 +1,189 @@
|
|
|
1
|
-
import { useCallback } from 'react';
|
|
2
|
-
import { Node, Edge, addEdge, Connection } from 'reactflow';
|
|
3
|
-
import { useAppStore } from '../store/useAppStore';
|
|
4
|
-
import { nodeDefinitions } from '../nodeDefinitions';
|
|
5
|
-
import { INodeInputDefinition, INodeOutputDefinition, NodeConnectionType } from '../types/INodeProperties';
|
|
6
|
-
|
|
7
|
-
interface UseReactFlowNodesProps {
|
|
8
|
-
setNodes: (nodes: Node[] | ((nodes: Node[]) => Node[])) => void;
|
|
9
|
-
setEdges: (edges: Edge[] | ((edges: Edge[]) => Edge[])) => void;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
export const useReactFlowNodes = ({ setNodes, setEdges }: UseReactFlowNodesProps) => {
|
|
13
|
-
const { selectedNode, setSelectedNode } = useAppStore();
|
|
14
|
-
|
|
15
|
-
// Helper function to get node inputs/outputs for both enhanced and legacy nodes
|
|
16
|
-
const getNodeInputs = (nodeType: string): INodeInputDefinition[] => {
|
|
17
|
-
const definition = nodeDefinitions[nodeType];
|
|
18
|
-
if (!definition?.inputs) return [];
|
|
19
|
-
|
|
20
|
-
// Enhanced nodes: array of input objects
|
|
21
|
-
if (definition.inputs.length > 0 && typeof definition.inputs[0] === 'object') {
|
|
22
|
-
return definition.inputs as INodeInputDefinition[];
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
// Legacy nodes: array of strings - convert to input objects
|
|
26
|
-
return (definition.inputs as string[]).map((input, index) => ({
|
|
27
|
-
name: `input_${index}`,
|
|
28
|
-
displayName: 'Input',
|
|
29
|
-
type: (input as NodeConnectionType) || 'main',
|
|
30
|
-
description: 'Node input connection'
|
|
31
|
-
}));
|
|
32
|
-
};
|
|
33
|
-
|
|
34
|
-
const getNodeOutputs = (nodeType: string): INodeOutputDefinition[] => {
|
|
35
|
-
const definition = nodeDefinitions[nodeType];
|
|
36
|
-
if (!definition?.outputs) return [];
|
|
37
|
-
|
|
38
|
-
// Enhanced nodes: array of output objects
|
|
39
|
-
if (definition.outputs.length > 0 && typeof definition.outputs[0] === 'object') {
|
|
40
|
-
return definition.outputs as INodeOutputDefinition[];
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
// Legacy nodes: array of strings - convert to output objects
|
|
44
|
-
return (definition.outputs as string[]).map((output, index) => ({
|
|
45
|
-
name: `output_${index}`,
|
|
46
|
-
displayName: 'Output',
|
|
47
|
-
type: (output as NodeConnectionType) || 'main',
|
|
48
|
-
description: 'Node output connection'
|
|
49
|
-
}));
|
|
50
|
-
};
|
|
51
|
-
|
|
52
|
-
// Validate connection compatibility
|
|
53
|
-
const isValidConnection = (connection: Connection, nodes: Node[]): boolean => {
|
|
54
|
-
const sourceNode = nodes.find(n => n.id === connection.source);
|
|
55
|
-
const targetNode = nodes.find(n => n.id === connection.target);
|
|
56
|
-
|
|
57
|
-
if (!sourceNode || !targetNode) {
|
|
58
|
-
console.warn('Connection validation: Source or target node not found');
|
|
59
|
-
return false;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
const sourceOutputs = getNodeOutputs(sourceNode.type || '');
|
|
63
|
-
const targetInputs = getNodeInputs(targetNode.type || '');
|
|
64
|
-
|
|
65
|
-
// Find the specific output and input being connected
|
|
66
|
-
const sourceHandle = connection.sourceHandle || 'output_0';
|
|
67
|
-
const targetHandle = connection.targetHandle || 'input_0';
|
|
68
|
-
|
|
69
|
-
const sourceOutput = sourceOutputs.find(output =>
|
|
70
|
-
`output-${output.name}` === sourceHandle || output.name === sourceHandle
|
|
71
|
-
);
|
|
72
|
-
const targetInput = targetInputs.find(input =>
|
|
73
|
-
`input-${input.name}` === targetHandle || input.name === targetHandle
|
|
74
|
-
);
|
|
75
|
-
|
|
76
|
-
if (!sourceOutput || !targetInput) {
|
|
77
|
-
console.log('[Connection Debug]', {
|
|
78
|
-
sourceType: sourceNode.type,
|
|
79
|
-
targetType: targetNode.type,
|
|
80
|
-
sourceHandle,
|
|
81
|
-
targetHandle,
|
|
82
|
-
sourceOutputs: sourceOutputs.map(o => ({ name: o.name, computed: `output-${o.name}` })),
|
|
83
|
-
targetInputs: targetInputs.map(i => ({ name: i.name, computed: `input-${i.name}` })),
|
|
84
|
-
sourceOutput: sourceOutput ? 'found' : 'NOT FOUND',
|
|
85
|
-
targetInput: targetInput ? 'found' : 'NOT FOUND'
|
|
86
|
-
});
|
|
87
|
-
console.warn('Connection validation: Handle not found', { sourceHandle, targetHandle });
|
|
88
|
-
// Allow connection if we can't find handle definitions (fallback for legacy nodes)
|
|
89
|
-
return true;
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
// Check type compatibility
|
|
93
|
-
const isCompatible = areTypesCompatible(sourceOutput.type, targetInput.type);
|
|
94
|
-
|
|
95
|
-
if (!isCompatible) {
|
|
96
|
-
console.warn(`Connection rejected: Incompatible types`, {
|
|
97
|
-
source: `${sourceNode.type}.${sourceOutput.name} (${sourceOutput.type})`,
|
|
98
|
-
target: `${targetNode.type}.${targetInput.name} (${targetInput.type})`
|
|
99
|
-
});
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
return isCompatible;
|
|
103
|
-
};
|
|
104
|
-
|
|
105
|
-
// Check if two connection types are compatible
|
|
106
|
-
const areTypesCompatible = (outputType: NodeConnectionType, inputType: NodeConnectionType): boolean => {
|
|
107
|
-
// Same types are always compatible
|
|
108
|
-
if (outputType === inputType) return true;
|
|
109
|
-
|
|
110
|
-
// 'main' is compatible with most types (universal data format)
|
|
111
|
-
if (outputType === 'main' || inputType === 'main') return true;
|
|
112
|
-
|
|
113
|
-
// Specific compatibility rules
|
|
114
|
-
const compatibilityMatrix: Record<NodeConnectionType, NodeConnectionType[]> = {
|
|
115
|
-
'main': ['main', 'trigger', 'ai', 'file', 'binary', 'webhook'], // Main accepts everything
|
|
116
|
-
'trigger': ['main', 'trigger'], // Triggers only connect to main or other triggers
|
|
117
|
-
'ai': ['main', 'ai'], // AI outputs connect to main or other AI inputs
|
|
118
|
-
'file': ['main', 'file', 'binary'], // Files can connect to binary
|
|
119
|
-
'binary': ['main', 'file', 'binary'], // Binary connects to file/binary
|
|
120
|
-
'webhook': ['main', 'webhook'] // Webhooks connect to main or other webhooks
|
|
121
|
-
};
|
|
122
|
-
|
|
123
|
-
return compatibilityMatrix[outputType]?.includes(inputType) ?? false;
|
|
124
|
-
};
|
|
125
|
-
|
|
126
|
-
const onConnect = useCallback(
|
|
127
|
-
(params: Edge | Connection) => {
|
|
128
|
-
const { currentWorkflow } = useAppStore.getState();
|
|
129
|
-
const nodes = currentWorkflow?.nodes || [];
|
|
130
|
-
|
|
131
|
-
// Convert Edge to Connection format for validation
|
|
132
|
-
const connection: Connection = {
|
|
133
|
-
source: params.source,
|
|
134
|
-
target: params.target,
|
|
135
|
-
sourceHandle: params.sourceHandle ?? null,
|
|
136
|
-
targetHandle: params.targetHandle ?? null
|
|
137
|
-
};
|
|
138
|
-
|
|
139
|
-
// Debug: Log all connection attempts
|
|
140
|
-
console.log('[onConnect] Connection attempt:', {
|
|
141
|
-
source: params.source,
|
|
142
|
-
target: params.target,
|
|
143
|
-
sourceHandle: params.sourceHandle,
|
|
144
|
-
targetHandle: params.targetHandle
|
|
145
|
-
});
|
|
146
|
-
|
|
147
|
-
// Validate connection before adding
|
|
148
|
-
if (!isValidConnection(connection, nodes)) {
|
|
149
|
-
// Show user feedback for rejected connection (non-blocking)
|
|
150
|
-
console.warn('Connection rejected: Incompatible connection types', connection);
|
|
151
|
-
// Could implement a toast notification system here instead of alert
|
|
152
|
-
setTimeout(() => {
|
|
153
|
-
alert('Connection not allowed: Incompatible connection types.\n\nTip: Connect outputs to compatible inputs (e.g., AI → Main, File → Binary).');
|
|
154
|
-
}, 0);
|
|
155
|
-
return;
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
console.log('[onConnect] Connection accepted, adding edge');
|
|
159
|
-
// Add the connection
|
|
160
|
-
setEdges((eds) => addEdge(params, eds));
|
|
161
|
-
},
|
|
162
|
-
[setEdges]
|
|
163
|
-
);
|
|
164
|
-
|
|
165
|
-
const onNodesDelete = useCallback(
|
|
166
|
-
(deleted: Node[]) => {
|
|
167
|
-
setNodes((nds) => nds.filter((node) => !deleted.find((d) => d.id === node.id)));
|
|
168
|
-
|
|
169
|
-
// Clear selected node if it was deleted
|
|
170
|
-
if (selectedNode && deleted.find((d) => d.id === selectedNode.id)) {
|
|
171
|
-
setSelectedNode(null);
|
|
172
|
-
}
|
|
173
|
-
},
|
|
174
|
-
[setNodes, selectedNode, setSelectedNode]
|
|
175
|
-
);
|
|
176
|
-
|
|
177
|
-
const onEdgesDelete = useCallback(
|
|
178
|
-
(deleted: Edge[]) => {
|
|
179
|
-
setEdges((eds) => eds.filter((edge) => !deleted.find((d) => d.id === edge.id)));
|
|
180
|
-
},
|
|
181
|
-
[setEdges]
|
|
182
|
-
);
|
|
183
|
-
|
|
184
|
-
return {
|
|
185
|
-
onConnect,
|
|
186
|
-
onNodesDelete,
|
|
187
|
-
onEdgesDelete,
|
|
188
|
-
};
|
|
1
|
+
import { useCallback } from 'react';
|
|
2
|
+
import { Node, Edge, addEdge, Connection } from 'reactflow';
|
|
3
|
+
import { useAppStore } from '../store/useAppStore';
|
|
4
|
+
import { nodeDefinitions } from '../nodeDefinitions';
|
|
5
|
+
import { INodeInputDefinition, INodeOutputDefinition, NodeConnectionType } from '../types/INodeProperties';
|
|
6
|
+
|
|
7
|
+
interface UseReactFlowNodesProps {
|
|
8
|
+
setNodes: (nodes: Node[] | ((nodes: Node[]) => Node[])) => void;
|
|
9
|
+
setEdges: (edges: Edge[] | ((edges: Edge[]) => Edge[])) => void;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export const useReactFlowNodes = ({ setNodes, setEdges }: UseReactFlowNodesProps) => {
|
|
13
|
+
const { selectedNode, setSelectedNode } = useAppStore();
|
|
14
|
+
|
|
15
|
+
// Helper function to get node inputs/outputs for both enhanced and legacy nodes
|
|
16
|
+
const getNodeInputs = (nodeType: string): INodeInputDefinition[] => {
|
|
17
|
+
const definition = nodeDefinitions[nodeType];
|
|
18
|
+
if (!definition?.inputs) return [];
|
|
19
|
+
|
|
20
|
+
// Enhanced nodes: array of input objects
|
|
21
|
+
if (definition.inputs.length > 0 && typeof definition.inputs[0] === 'object') {
|
|
22
|
+
return definition.inputs as INodeInputDefinition[];
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
// Legacy nodes: array of strings - convert to input objects
|
|
26
|
+
return (definition.inputs as string[]).map((input, index) => ({
|
|
27
|
+
name: `input_${index}`,
|
|
28
|
+
displayName: 'Input',
|
|
29
|
+
type: (input as NodeConnectionType) || 'main',
|
|
30
|
+
description: 'Node input connection'
|
|
31
|
+
}));
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
const getNodeOutputs = (nodeType: string): INodeOutputDefinition[] => {
|
|
35
|
+
const definition = nodeDefinitions[nodeType];
|
|
36
|
+
if (!definition?.outputs) return [];
|
|
37
|
+
|
|
38
|
+
// Enhanced nodes: array of output objects
|
|
39
|
+
if (definition.outputs.length > 0 && typeof definition.outputs[0] === 'object') {
|
|
40
|
+
return definition.outputs as INodeOutputDefinition[];
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
// Legacy nodes: array of strings - convert to output objects
|
|
44
|
+
return (definition.outputs as string[]).map((output, index) => ({
|
|
45
|
+
name: `output_${index}`,
|
|
46
|
+
displayName: 'Output',
|
|
47
|
+
type: (output as NodeConnectionType) || 'main',
|
|
48
|
+
description: 'Node output connection'
|
|
49
|
+
}));
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
// Validate connection compatibility
|
|
53
|
+
const isValidConnection = (connection: Connection, nodes: Node[]): boolean => {
|
|
54
|
+
const sourceNode = nodes.find(n => n.id === connection.source);
|
|
55
|
+
const targetNode = nodes.find(n => n.id === connection.target);
|
|
56
|
+
|
|
57
|
+
if (!sourceNode || !targetNode) {
|
|
58
|
+
console.warn('Connection validation: Source or target node not found');
|
|
59
|
+
return false;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
const sourceOutputs = getNodeOutputs(sourceNode.type || '');
|
|
63
|
+
const targetInputs = getNodeInputs(targetNode.type || '');
|
|
64
|
+
|
|
65
|
+
// Find the specific output and input being connected
|
|
66
|
+
const sourceHandle = connection.sourceHandle || 'output_0';
|
|
67
|
+
const targetHandle = connection.targetHandle || 'input_0';
|
|
68
|
+
|
|
69
|
+
const sourceOutput = sourceOutputs.find(output =>
|
|
70
|
+
`output-${output.name}` === sourceHandle || output.name === sourceHandle
|
|
71
|
+
);
|
|
72
|
+
const targetInput = targetInputs.find(input =>
|
|
73
|
+
`input-${input.name}` === targetHandle || input.name === targetHandle
|
|
74
|
+
);
|
|
75
|
+
|
|
76
|
+
if (!sourceOutput || !targetInput) {
|
|
77
|
+
console.log('[Connection Debug]', {
|
|
78
|
+
sourceType: sourceNode.type,
|
|
79
|
+
targetType: targetNode.type,
|
|
80
|
+
sourceHandle,
|
|
81
|
+
targetHandle,
|
|
82
|
+
sourceOutputs: sourceOutputs.map(o => ({ name: o.name, computed: `output-${o.name}` })),
|
|
83
|
+
targetInputs: targetInputs.map(i => ({ name: i.name, computed: `input-${i.name}` })),
|
|
84
|
+
sourceOutput: sourceOutput ? 'found' : 'NOT FOUND',
|
|
85
|
+
targetInput: targetInput ? 'found' : 'NOT FOUND'
|
|
86
|
+
});
|
|
87
|
+
console.warn('Connection validation: Handle not found', { sourceHandle, targetHandle });
|
|
88
|
+
// Allow connection if we can't find handle definitions (fallback for legacy nodes)
|
|
89
|
+
return true;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
// Check type compatibility
|
|
93
|
+
const isCompatible = areTypesCompatible(sourceOutput.type, targetInput.type);
|
|
94
|
+
|
|
95
|
+
if (!isCompatible) {
|
|
96
|
+
console.warn(`Connection rejected: Incompatible types`, {
|
|
97
|
+
source: `${sourceNode.type}.${sourceOutput.name} (${sourceOutput.type})`,
|
|
98
|
+
target: `${targetNode.type}.${targetInput.name} (${targetInput.type})`
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
return isCompatible;
|
|
103
|
+
};
|
|
104
|
+
|
|
105
|
+
// Check if two connection types are compatible
|
|
106
|
+
const areTypesCompatible = (outputType: NodeConnectionType, inputType: NodeConnectionType): boolean => {
|
|
107
|
+
// Same types are always compatible
|
|
108
|
+
if (outputType === inputType) return true;
|
|
109
|
+
|
|
110
|
+
// 'main' is compatible with most types (universal data format)
|
|
111
|
+
if (outputType === 'main' || inputType === 'main') return true;
|
|
112
|
+
|
|
113
|
+
// Specific compatibility rules
|
|
114
|
+
const compatibilityMatrix: Record<NodeConnectionType, NodeConnectionType[]> = {
|
|
115
|
+
'main': ['main', 'trigger', 'ai', 'file', 'binary', 'webhook'], // Main accepts everything
|
|
116
|
+
'trigger': ['main', 'trigger'], // Triggers only connect to main or other triggers
|
|
117
|
+
'ai': ['main', 'ai'], // AI outputs connect to main or other AI inputs
|
|
118
|
+
'file': ['main', 'file', 'binary'], // Files can connect to binary
|
|
119
|
+
'binary': ['main', 'file', 'binary'], // Binary connects to file/binary
|
|
120
|
+
'webhook': ['main', 'webhook'] // Webhooks connect to main or other webhooks
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
return compatibilityMatrix[outputType]?.includes(inputType) ?? false;
|
|
124
|
+
};
|
|
125
|
+
|
|
126
|
+
const onConnect = useCallback(
|
|
127
|
+
(params: Edge | Connection) => {
|
|
128
|
+
const { currentWorkflow } = useAppStore.getState();
|
|
129
|
+
const nodes = currentWorkflow?.nodes || [];
|
|
130
|
+
|
|
131
|
+
// Convert Edge to Connection format for validation
|
|
132
|
+
const connection: Connection = {
|
|
133
|
+
source: params.source,
|
|
134
|
+
target: params.target,
|
|
135
|
+
sourceHandle: params.sourceHandle ?? null,
|
|
136
|
+
targetHandle: params.targetHandle ?? null
|
|
137
|
+
};
|
|
138
|
+
|
|
139
|
+
// Debug: Log all connection attempts
|
|
140
|
+
console.log('[onConnect] Connection attempt:', {
|
|
141
|
+
source: params.source,
|
|
142
|
+
target: params.target,
|
|
143
|
+
sourceHandle: params.sourceHandle,
|
|
144
|
+
targetHandle: params.targetHandle
|
|
145
|
+
});
|
|
146
|
+
|
|
147
|
+
// Validate connection before adding
|
|
148
|
+
if (!isValidConnection(connection, nodes)) {
|
|
149
|
+
// Show user feedback for rejected connection (non-blocking)
|
|
150
|
+
console.warn('Connection rejected: Incompatible connection types', connection);
|
|
151
|
+
// Could implement a toast notification system here instead of alert
|
|
152
|
+
setTimeout(() => {
|
|
153
|
+
alert('Connection not allowed: Incompatible connection types.\n\nTip: Connect outputs to compatible inputs (e.g., AI → Main, File → Binary).');
|
|
154
|
+
}, 0);
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
console.log('[onConnect] Connection accepted, adding edge');
|
|
159
|
+
// Add the connection
|
|
160
|
+
setEdges((eds) => addEdge(params, eds));
|
|
161
|
+
},
|
|
162
|
+
[setEdges]
|
|
163
|
+
);
|
|
164
|
+
|
|
165
|
+
const onNodesDelete = useCallback(
|
|
166
|
+
(deleted: Node[]) => {
|
|
167
|
+
setNodes((nds) => nds.filter((node) => !deleted.find((d) => d.id === node.id)));
|
|
168
|
+
|
|
169
|
+
// Clear selected node if it was deleted
|
|
170
|
+
if (selectedNode && deleted.find((d) => d.id === selectedNode.id)) {
|
|
171
|
+
setSelectedNode(null);
|
|
172
|
+
}
|
|
173
|
+
},
|
|
174
|
+
[setNodes, selectedNode, setSelectedNode]
|
|
175
|
+
);
|
|
176
|
+
|
|
177
|
+
const onEdgesDelete = useCallback(
|
|
178
|
+
(deleted: Edge[]) => {
|
|
179
|
+
setEdges((eds) => eds.filter((edge) => !deleted.find((d) => d.id === edge.id)));
|
|
180
|
+
},
|
|
181
|
+
[setEdges]
|
|
182
|
+
);
|
|
183
|
+
|
|
184
|
+
return {
|
|
185
|
+
onConnect,
|
|
186
|
+
onNodesDelete,
|
|
187
|
+
onEdgesDelete,
|
|
188
|
+
};
|
|
189
189
|
};
|