machinaos 0.0.79 → 0.0.81

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 (429) hide show
  1. package/.env.template +55 -7
  2. package/.machina/workflows/{AI Assistant_workflow-1779017037684-e2e5da7a.json → AI Assistant_example_workflow-1779017037684-e2e5da7a.json } +75 -75
  3. package/.machina/workflows/{AI Employee_workflow-1779102911870-cbc76c82.json → AI Employee_example_workflow-1779102911870-cbc76c82.json } +303 -302
  4. package/.machina/workflows/{Claude Assistant_workflow-1779095939967-2369cff4.json → Claude Assistant_example_workflow-1779095939967-2369cff4.json } +73 -73
  5. package/bin/cli.js +27 -1
  6. package/cli/__main__.py +93 -21
  7. package/cli/_common.py +122 -0
  8. package/cli/buildenv.py +16 -20
  9. package/cli/cli.py +173 -24
  10. package/cli/colors.py +10 -2
  11. package/cli/commands/_temporal_specs.py +37 -94
  12. package/cli/commands/build.py +34 -43
  13. package/cli/commands/clean.py +68 -42
  14. package/cli/commands/daemon/__init__.py +47 -0
  15. package/cli/commands/daemon/_state.py +97 -0
  16. package/cli/commands/daemon/restart.py +14 -0
  17. package/cli/commands/daemon/start.py +49 -0
  18. package/cli/commands/daemon/status.py +20 -0
  19. package/cli/commands/daemon/stop.py +22 -0
  20. package/cli/commands/dev.py +27 -29
  21. package/cli/commands/docs.py +12 -10
  22. package/cli/commands/start.py +65 -51
  23. package/cli/commands/stop.py +4 -7
  24. package/cli/commands/version.py +9 -3
  25. package/cli/config.py +115 -38
  26. package/cli/platform_.py +135 -3
  27. package/cli/ports.py +42 -3
  28. package/cli/run.py +27 -0
  29. package/cli/supervisor.py +37 -10
  30. package/cli/tcp.py +6 -2
  31. package/cli/tree.py +38 -11
  32. package/client/package.json +1 -1
  33. package/package.json +6 -1
  34. package/scripts/install.js +19 -1
  35. package/scripts/migrate_icons.py +3 -1
  36. package/scripts/migrate_skill_icons.py +6 -7
  37. package/server/config/model_registry.json +416 -611
  38. package/server/constants.py +285 -222
  39. package/server/core/__init__.py +1 -1
  40. package/server/core/cache.py +9 -29
  41. package/server/core/cleanup.py +12 -24
  42. package/server/core/config.py +83 -88
  43. package/server/core/container.py +17 -52
  44. package/server/core/credential_backends.py +5 -13
  45. package/server/core/credentials_database.py +13 -43
  46. package/server/core/database.py +292 -353
  47. package/server/core/health.py +4 -5
  48. package/server/core/logging.py +68 -73
  49. package/server/core/paths.py +80 -22
  50. package/server/core/tracing.py +2 -8
  51. package/server/gunicorn.conf.py +1 -0
  52. package/server/main.py +77 -47
  53. package/server/middleware/auth.py +18 -24
  54. package/server/models/__init__.py +1 -1
  55. package/server/models/auth.py +5 -12
  56. package/server/models/database.py +36 -68
  57. package/server/models/node_metadata.py +24 -17
  58. package/server/nodejs/dist/index.js +107 -0
  59. package/server/nodes/__init__.py +1 -1
  60. package/server/nodes/_visuals.py +21 -5
  61. package/server/nodes/agent/_handles.py +15 -17
  62. package/server/nodes/agent/_inline.py +27 -24
  63. package/server/nodes/agent/_specialized.py +23 -8
  64. package/server/nodes/agent/ai_agent/__init__.py +23 -8
  65. package/server/nodes/agent/ai_employee/__init__.py +3 -1
  66. package/server/nodes/agent/chat_agent/__init__.py +25 -9
  67. package/server/nodes/agent/claude_code_agent/__init__.py +33 -47
  68. package/server/nodes/agent/claude_code_agent/_handlers.py +8 -5
  69. package/server/nodes/agent/claude_code_agent/_pool.py +85 -70
  70. package/server/nodes/agent/claude_code_agent/_provider.py +27 -45
  71. package/server/nodes/agent/claude_code_agent/_skills.py +28 -17
  72. package/server/nodes/agent/codex_agent/__init__.py +25 -34
  73. package/server/nodes/agent/orchestrator_agent/__init__.py +3 -1
  74. package/server/nodes/agent/rlm_agent/__init__.py +13 -13
  75. package/server/nodes/android/_base.py +93 -76
  76. package/server/nodes/android/_dispatcher.py +140 -223
  77. package/server/nodes/android/_events.py +7 -9
  78. package/server/nodes/android/_handlers.py +6 -7
  79. package/server/nodes/android/_option_loaders.py +1 -4
  80. package/server/nodes/android/_refresh.py +3 -9
  81. package/server/nodes/android/_relay/broadcaster.py +7 -20
  82. package/server/nodes/android/_relay/client.py +23 -42
  83. package/server/nodes/android/_relay/manager.py +1 -0
  84. package/server/nodes/android/_relay/protocol.py +6 -0
  85. package/server/nodes/android/_router.py +48 -133
  86. package/server/nodes/browser/_install.py +4 -2
  87. package/server/nodes/browser/_service.py +2 -1
  88. package/server/nodes/browser/browser/__init__.py +52 -22
  89. package/server/nodes/chat/chat_history/__init__.py +2 -4
  90. package/server/nodes/chat/chat_send/__init__.py +2 -4
  91. package/server/nodes/code/javascript_executor/__init__.py +1 -3
  92. package/server/nodes/code/python_executor/__init__.py +29 -13
  93. package/server/nodes/code/typescript_executor/__init__.py +1 -3
  94. package/server/nodes/document/document_parser/__init__.py +26 -15
  95. package/server/nodes/document/embedding_generator/__init__.py +16 -9
  96. package/server/nodes/document/file_downloader/__init__.py +30 -20
  97. package/server/nodes/document/http_scraper/__init__.py +31 -21
  98. package/server/nodes/document/text_chunker/__init__.py +17 -12
  99. package/server/nodes/document/vector_store/__init__.py +88 -72
  100. package/server/nodes/email/_filters.py +3 -3
  101. package/server/nodes/email/_himalaya.py +94 -49
  102. package/server/nodes/email/_service.py +23 -13
  103. package/server/nodes/email/email_read/__init__.py +20 -10
  104. package/server/nodes/email/email_receive/__init__.py +36 -19
  105. package/server/nodes/email/email_send/__init__.py +10 -6
  106. package/server/nodes/filesystem/_backend.py +1 -5
  107. package/server/nodes/filesystem/file_modify/__init__.py +8 -5
  108. package/server/nodes/filesystem/file_read/__init__.py +4 -2
  109. package/server/nodes/filesystem/fs_search/__init__.py +9 -3
  110. package/server/nodes/filesystem/shell/__init__.py +9 -4
  111. package/server/nodes/google/_auth_helper.py +7 -13
  112. package/server/nodes/google/_base.py +14 -11
  113. package/server/nodes/google/_credentials.py +2 -0
  114. package/server/nodes/google/_filters.py +3 -3
  115. package/server/nodes/google/_gmail.py +70 -47
  116. package/server/nodes/google/_handlers.py +3 -1
  117. package/server/nodes/google/_oauth.py +25 -11
  118. package/server/nodes/google/_option_loaders.py +9 -30
  119. package/server/nodes/google/_refresh.py +8 -12
  120. package/server/nodes/google/_router.py +4 -5
  121. package/server/nodes/google/calendar/__init__.py +83 -62
  122. package/server/nodes/google/contacts/__init__.py +80 -70
  123. package/server/nodes/google/drive/__init__.py +83 -70
  124. package/server/nodes/google/gmail/__init__.py +69 -37
  125. package/server/nodes/google/gmail_receive/__init__.py +23 -19
  126. package/server/nodes/google/sheets/__init__.py +50 -40
  127. package/server/nodes/google/tasks/__init__.py +52 -41
  128. package/server/nodes/groups.py +28 -28
  129. package/server/nodes/location/_credentials.py +1 -5
  130. package/server/nodes/location/_service.py +88 -107
  131. package/server/nodes/location/gmaps_create/__init__.py +5 -5
  132. package/server/nodes/location/gmaps_locations/__init__.py +5 -5
  133. package/server/nodes/location/gmaps_nearby_places/__init__.py +5 -5
  134. package/server/nodes/model/_base.py +10 -7
  135. package/server/nodes/model/_local_validator.py +27 -23
  136. package/server/nodes/model/anthropic_chat_model/__init__.py +3 -1
  137. package/server/nodes/model/cerebras_chat_model/__init__.py +3 -1
  138. package/server/nodes/model/deepseek_chat_model/__init__.py +6 -2
  139. package/server/nodes/model/gemini_chat_model/__init__.py +3 -1
  140. package/server/nodes/model/openai_chat_model/__init__.py +6 -2
  141. package/server/nodes/model/openrouter_chat_model/__init__.py +6 -2
  142. package/server/nodes/proxy/_usage.py +13 -14
  143. package/server/nodes/proxy/proxy_config/__init__.py +37 -30
  144. package/server/nodes/proxy/proxy_request/__init__.py +27 -15
  145. package/server/nodes/scheduler/cron_scheduler/__init__.py +72 -26
  146. package/server/nodes/scheduler/cron_scheduler/_workflow.py +10 -11
  147. package/server/nodes/scheduler/timer/__init__.py +4 -5
  148. package/server/nodes/scraper/apify_actor/__init__.py +41 -34
  149. package/server/nodes/scraper/crawlee_scraper/__init__.py +94 -57
  150. package/server/nodes/search/brave_search/__init__.py +4 -4
  151. package/server/nodes/search/duckduckgo_search/__init__.py +5 -5
  152. package/server/nodes/search/perplexity_search/__init__.py +2 -4
  153. package/server/nodes/search/serper_search/__init__.py +30 -24
  154. package/server/nodes/skill/_expander.py +9 -7
  155. package/server/nodes/skill/master_skill/__init__.py +2 -8
  156. package/server/nodes/skill/master_skill/_events.py +6 -4
  157. package/server/nodes/skill/simple_memory/__init__.py +3 -12
  158. package/server/nodes/social/_base.py +208 -228
  159. package/server/nodes/social/social_receive/__init__.py +37 -12
  160. package/server/nodes/social/social_send/__init__.py +70 -28
  161. package/server/nodes/stripe/__init__.py +7 -3
  162. package/server/nodes/stripe/_handlers.py +18 -7
  163. package/server/nodes/stripe/_install.py +8 -10
  164. package/server/nodes/stripe/_source.py +5 -5
  165. package/server/nodes/stripe/stripe_action.py +2 -4
  166. package/server/nodes/stripe/stripe_receive.py +6 -9
  167. package/server/nodes/telegram/_credentials.py +1 -5
  168. package/server/nodes/telegram/_events.py +7 -9
  169. package/server/nodes/telegram/_filters.py +3 -11
  170. package/server/nodes/telegram/_handlers.py +17 -7
  171. package/server/nodes/telegram/_refresh.py +5 -16
  172. package/server/nodes/telegram/_service.py +14 -32
  173. package/server/nodes/telegram/telegram_receive.py +38 -18
  174. package/server/nodes/telegram/telegram_send.py +16 -15
  175. package/server/nodes/text/file_handler/__init__.py +7 -1
  176. package/server/nodes/text/text_generator/__init__.py +2 -1
  177. package/server/nodes/tool/agent_builder/__init__.py +87 -88
  178. package/server/nodes/tool/agent_builder/_events.py +6 -4
  179. package/server/nodes/tool/calculator_tool/__init__.py +17 -7
  180. package/server/nodes/tool/current_time_tool/__init__.py +4 -4
  181. package/server/nodes/tool/task_manager/__init__.py +15 -18
  182. package/server/nodes/tool/write_todos/__init__.py +7 -6
  183. package/server/nodes/trigger/chat_trigger/__init__.py +2 -7
  184. package/server/nodes/trigger/task_trigger/__init__.py +2 -7
  185. package/server/nodes/trigger/webhook_trigger/__init__.py +2 -7
  186. package/server/nodes/twitter/_base.py +85 -60
  187. package/server/nodes/twitter/_credentials.py +7 -3
  188. package/server/nodes/twitter/_events.py +1 -5
  189. package/server/nodes/twitter/_filters.py +9 -9
  190. package/server/nodes/twitter/_handlers.py +3 -1
  191. package/server/nodes/twitter/_oauth.py +1 -2
  192. package/server/nodes/twitter/_refresh.py +8 -12
  193. package/server/nodes/twitter/twitter_receive/__init__.py +6 -6
  194. package/server/nodes/twitter/twitter_search/__init__.py +11 -8
  195. package/server/nodes/twitter/twitter_send/__init__.py +56 -25
  196. package/server/nodes/twitter/twitter_user/__init__.py +30 -17
  197. package/server/nodes/utility/console/__init__.py +17 -22
  198. package/server/nodes/utility/http_request/__init__.py +7 -6
  199. package/server/nodes/utility/process_manager/__init__.py +8 -6
  200. package/server/nodes/utility/webhook_response/__init__.py +12 -7
  201. package/server/nodes/whatsapp/_base.py +283 -338
  202. package/server/nodes/whatsapp/_events.py +32 -30
  203. package/server/nodes/whatsapp/_filters.py +36 -37
  204. package/server/nodes/whatsapp/_handlers.py +2 -0
  205. package/server/nodes/whatsapp/_option_loaders.py +1 -3
  206. package/server/nodes/whatsapp/_refresh.py +1 -3
  207. package/server/nodes/whatsapp/_runtime.py +9 -6
  208. package/server/nodes/whatsapp/_service.py +45 -113
  209. package/server/nodes/whatsapp/whatsapp_db.py +113 -53
  210. package/server/nodes/whatsapp/whatsapp_receive.py +30 -13
  211. package/server/nodes/whatsapp/whatsapp_send.py +58 -36
  212. package/server/nodes/workflow/start/__init__.py +1 -4
  213. package/server/package-lock.json +3 -3
  214. package/server/package.json +3 -0
  215. package/server/pyproject.toml +4 -4
  216. package/server/requirements.txt +0 -1
  217. package/server/routers/__init__.py +1 -1
  218. package/server/routers/auth.py +16 -56
  219. package/server/routers/database.py +27 -50
  220. package/server/routers/nodejs_compat.py +25 -87
  221. package/server/routers/schemas.py +3 -2
  222. package/server/routers/webhook.py +5 -9
  223. package/server/routers/websocket.py +141 -174
  224. package/server/routers/workflow.py +17 -48
  225. package/server/scripts/smoke_test_skills.py +15 -12
  226. package/server/services/__init__.py +1 -1
  227. package/server/services/_supervisor/process.py +9 -3
  228. package/server/services/_supervisor/registry.py +3 -3
  229. package/server/services/agent_team.py +15 -43
  230. package/server/services/ai.py +606 -573
  231. package/server/services/auth.py +10 -34
  232. package/server/services/chat_client.py +5 -34
  233. package/server/services/circuit_breaker.py +2 -6
  234. package/server/services/cli_agent/__init__.py +1 -0
  235. package/server/services/cli_agent/_cli_auth.py +5 -1
  236. package/server/services/cli_agent/_handlers.py +3 -1
  237. package/server/services/cli_agent/config.py +5 -8
  238. package/server/services/cli_agent/factory.py +11 -16
  239. package/server/services/cli_agent/jsonl_watcher.py +27 -16
  240. package/server/services/cli_agent/lockfile.py +9 -2
  241. package/server/services/cli_agent/mcp_server.py +53 -44
  242. package/server/services/cli_agent/protocol.py +30 -15
  243. package/server/services/cli_agent/providers/google_gemini.py +1 -4
  244. package/server/services/cli_agent/providers/openai_codex.py +16 -28
  245. package/server/services/cli_agent/service.py +102 -97
  246. package/server/services/cli_agent/session.py +89 -71
  247. package/server/services/cli_agent/transports/__init__.py +2 -0
  248. package/server/services/cli_agent/transports/posix.py +10 -6
  249. package/server/services/cli_agent/transports/windows.py +11 -9
  250. package/server/services/cli_agent/types.py +38 -27
  251. package/server/services/cli_agent/workflow_tools.py +28 -15
  252. package/server/services/compaction.py +68 -52
  253. package/server/services/credential_registry.py +6 -20
  254. package/server/services/credentials/handlers.py +6 -2
  255. package/server/services/deployment/canary_registry.py +1 -2
  256. package/server/services/deployment/handlers.py +16 -11
  257. package/server/services/deployment/manager.py +166 -196
  258. package/server/services/deployment/poll_registry.py +2 -6
  259. package/server/services/deployment/state.py +2 -0
  260. package/server/services/deployment/triggers.py +87 -93
  261. package/server/services/event_waiter.py +47 -54
  262. package/server/services/events/admin_handlers.py +15 -25
  263. package/server/services/events/daemon.py +3 -1
  264. package/server/services/events/dispatch.py +13 -22
  265. package/server/services/events/oauth_lifecycle.py +98 -42
  266. package/server/services/events/triggers.py +3 -13
  267. package/server/services/events/verifiers/hmac_basic.py +1 -1
  268. package/server/services/events/verifiers/standard_webhooks.py +2 -4
  269. package/server/services/events/webhook.py +2 -3
  270. package/server/services/example_loader.py +9 -4
  271. package/server/services/execution/cache.py +36 -76
  272. package/server/services/execution/conditions.py +7 -20
  273. package/server/services/execution/dlq.py +20 -24
  274. package/server/services/execution/executor.py +234 -265
  275. package/server/services/execution/models.py +40 -46
  276. package/server/services/execution/recovery.py +23 -28
  277. package/server/services/handlers/todo.py +3 -6
  278. package/server/services/handlers/tools.py +107 -161
  279. package/server/services/handlers/triggers.py +24 -23
  280. package/server/services/llm/config.py +10 -1
  281. package/server/services/llm/factory.py +16 -4
  282. package/server/services/llm/messages.py +1 -5
  283. package/server/services/llm/protocol.py +9 -1
  284. package/server/services/llm/providers/anthropic.py +23 -12
  285. package/server/services/llm/providers/gemini.py +43 -22
  286. package/server/services/llm/providers/openai.py +14 -6
  287. package/server/services/llm/providers/openrouter.py +6 -1
  288. package/server/services/markdown_formatter.py +1 -2
  289. package/server/services/memory/jsonl.py +6 -2
  290. package/server/services/memory/markdown.py +4 -4
  291. package/server/services/memory/state.py +6 -5
  292. package/server/services/memory_store.py +8 -12
  293. package/server/services/model_registry.py +21 -19
  294. package/server/services/node_executor.py +85 -77
  295. package/server/services/node_output_schemas.py +4 -6
  296. package/server/services/node_registry.py +3 -4
  297. package/server/services/node_spec.py +3 -7
  298. package/server/services/nodejs_client.py +4 -14
  299. package/server/services/parameter_resolver.py +30 -36
  300. package/server/services/plugin/base.py +43 -22
  301. package/server/services/plugin/connection.py +12 -7
  302. package/server/services/plugin/credential.py +10 -22
  303. package/server/services/plugin/edge_walker.py +68 -77
  304. package/server/services/plugin/identifiers.py +48 -0
  305. package/server/services/plugin/interceptor.py +1 -1
  306. package/server/services/plugin/oauth.py +25 -21
  307. package/server/services/plugin/operation.py +1 -1
  308. package/server/services/plugin/polling.py +29 -27
  309. package/server/services/plugin/registry.py +1 -2
  310. package/server/services/plugin/routing.py +6 -9
  311. package/server/services/plugin/scaling.py +36 -25
  312. package/server/services/plugin/service_factories.py +1 -3
  313. package/server/services/plugin/shutdown_hooks.py +2 -5
  314. package/server/services/plugin/social_provider_registry.py +1 -3
  315. package/server/services/plugin/ws.py +2 -1
  316. package/server/services/pricing.py +26 -40
  317. package/server/services/pricing_handlers.py +6 -3
  318. package/server/services/process_service.py +32 -31
  319. package/server/services/proxy/models.py +15 -9
  320. package/server/services/proxy/service.py +26 -39
  321. package/server/services/rlm/adapters.py +43 -40
  322. package/server/services/rlm/constants.py +9 -9
  323. package/server/services/rlm/service.py +56 -44
  324. package/server/services/scheduler.py +8 -39
  325. package/server/services/settings/handlers.py +20 -15
  326. package/server/services/skill_loader.py +37 -41
  327. package/server/services/skill_prompt.py +8 -6
  328. package/server/services/skills/handlers.py +31 -18
  329. package/server/services/status_broadcaster.py +129 -237
  330. package/server/services/temporal/__init__.py +2 -6
  331. package/server/services/temporal/_handlers.py +20 -24
  332. package/server/services/temporal/_install.py +112 -130
  333. package/server/services/temporal/_refresh.py +19 -22
  334. package/server/services/temporal/_runtime.py +82 -174
  335. package/{cli/commands → server/services/temporal}/_supervised_runtime.py +21 -13
  336. package/server/services/temporal/activities.py +28 -21
  337. package/server/services/temporal/agent_activities.py +39 -31
  338. package/server/services/temporal/agent_workflow.py +101 -107
  339. package/server/services/temporal/client.py +46 -12
  340. package/server/services/temporal/executor.py +2 -3
  341. package/server/services/temporal/plugin_activities.py +6 -2
  342. package/server/services/temporal/plugin_registry.py +1 -3
  343. package/server/services/temporal/polling_trigger_workflow.py +13 -20
  344. package/server/services/temporal/schedules.py +18 -20
  345. package/server/services/temporal/search_attributes.py +3 -7
  346. package/server/services/temporal/trigger_listener_workflow.py +18 -38
  347. package/server/services/temporal/worker.py +1 -4
  348. package/server/services/temporal/workflow.py +35 -55
  349. package/server/services/temporal/ws_client.py +11 -7
  350. package/server/services/text.py +14 -28
  351. package/server/services/tracked_http.py +29 -49
  352. package/server/services/user_auth.py +7 -21
  353. package/server/services/workflow.py +28 -20
  354. package/server/services/workflow_import.py +30 -25
  355. package/server/services/workflow_ops.py +4 -0
  356. package/server/services/workflow_validator.py +52 -42
  357. package/server/services/ws_handler_registry.py +11 -9
  358. package/server/tests/conftest.py +20 -16
  359. package/server/tests/credentials/test_auth_service.py +6 -18
  360. package/server/tests/credentials/test_credential_broadcasts.py +14 -28
  361. package/server/tests/credentials/test_credentials_database.py +12 -38
  362. package/server/tests/credentials/test_encryption.py +3 -9
  363. package/server/tests/credentials/test_google_oauth.py +1 -3
  364. package/server/tests/credentials/test_oauth_utils.py +4 -15
  365. package/server/tests/credentials/test_twitter_oauth.py +1 -3
  366. package/server/tests/credentials/test_websocket_handlers.py +31 -69
  367. package/server/tests/llm/test_factory.py +11 -3
  368. package/server/tests/llm/test_providers.py +24 -31
  369. package/server/tests/llm/test_wiring.py +27 -22
  370. package/server/tests/nodes/_compat.py +4 -5
  371. package/server/tests/nodes/_harness.py +31 -24
  372. package/server/tests/nodes/_mocks.py +2 -6
  373. package/server/tests/nodes/test_agent_builder.py +43 -35
  374. package/server/tests/nodes/test_ai_agents.py +29 -24
  375. package/server/tests/nodes/test_ai_chat_models.py +3 -9
  376. package/server/tests/nodes/test_ai_tools.py +29 -23
  377. package/server/tests/nodes/test_android.py +34 -64
  378. package/server/tests/nodes/test_chat_utility.py +2 -2
  379. package/server/tests/nodes/test_code_fs_process.py +26 -84
  380. package/server/tests/nodes/test_document.py +22 -45
  381. package/server/tests/nodes/test_email.py +80 -48
  382. package/server/tests/nodes/test_google_workspace.py +26 -20
  383. package/server/tests/nodes/test_http_proxy.py +43 -89
  384. package/server/tests/nodes/test_search.py +3 -9
  385. package/server/tests/nodes/test_specialized_agents.py +56 -45
  386. package/server/tests/nodes/test_stripe_plugin.py +25 -5
  387. package/server/tests/nodes/test_telegram_social.py +16 -34
  388. package/server/tests/nodes/test_twitter.py +59 -150
  389. package/server/tests/nodes/test_web_automation.py +21 -51
  390. package/server/tests/nodes/test_whatsapp.py +13 -19
  391. package/server/tests/nodes/test_workflow_triggers.py +16 -45
  392. package/server/tests/services/cli_agent/test_claude_session_events.py +34 -16
  393. package/server/tests/services/cli_agent/test_mcp_server.py +66 -27
  394. package/server/tests/services/cli_agent/test_providers.py +66 -29
  395. package/server/tests/services/cli_agent/test_service.py +9 -6
  396. package/server/tests/services/memory/test_jsonl.py +30 -25
  397. package/server/tests/services/test_events.py +26 -7
  398. package/server/tests/services/test_identifiers.py +122 -0
  399. package/server/tests/services/test_process_lifecycle.py +129 -0
  400. package/server/tests/temporal/test_agent_workflow.py +2 -8
  401. package/server/tests/temporal/test_dispatch.py +8 -9
  402. package/server/tests/test_admin_handlers.py +30 -14
  403. package/server/tests/test_auto_skill.py +4 -2
  404. package/server/tests/test_canary_registry.py +21 -21
  405. package/server/tests/test_chat_trigger_canary_producer.py +8 -7
  406. package/server/tests/test_cloudevents_node_parameters.py +3 -8
  407. package/server/tests/test_credential_icon.py +1 -2
  408. package/server/tests/test_cron_canary.py +27 -14
  409. package/server/tests/test_deployment_canary_listener.py +34 -43
  410. package/server/tests/test_event_framework_phase_a.py +53 -45
  411. package/server/tests/test_no_raw_prints.py +19 -8
  412. package/server/tests/test_node_spec.py +190 -97
  413. package/server/tests/test_parameter_resolver.py +20 -20
  414. package/server/tests/test_plugin_contract.py +16 -51
  415. package/server/tests/test_plugin_self_containment.py +20 -42
  416. package/server/tests/test_polling_trigger_workflow.py +77 -61
  417. package/server/tests/test_retry_policies.py +8 -5
  418. package/server/tests/test_service_factories.py +7 -4
  419. package/server/tests/test_shutdown_hooks.py +8 -7
  420. package/server/tests/test_social_provider_registry.py +7 -3
  421. package/server/tests/test_status_broadcasts.py +52 -61
  422. package/server/tests/test_telegram_trigger_canary_producer.py +8 -6
  423. package/server/tests/test_tool_registry.py +10 -15
  424. package/server/tests/test_workflow_ops.py +1 -3
  425. package/server/tests/test_workflow_validator.py +28 -54
  426. package/server/uv.lock +3539 -0
  427. package/cli/commands/daemon.py +0 -147
  428. package/cli/pyproject.toml +0 -32
  429. package/server/services/temporal/_config.py +0 -258
package/.env.template CHANGED
@@ -30,11 +30,12 @@ JWT_COOKIE_SAMESITE=lax
30
30
  CORS_ORIGINS=["http://localhost:3000","http://localhost:3001","http://localhost:3002","http://localhost:3003","http://localhost:3004","http://localhost:3005","http://localhost:3006","http://127.0.0.1:3000","http://127.0.0.1:3001","http://127.0.0.1:3002","http://127.0.0.1:3003","http://127.0.0.1:3004","http://127.0.0.1:3005","http://127.0.0.1:3006","http://localhost:5173"]
31
31
 
32
32
  # Database Configuration
33
- # SQLite DB file. ``~`` expands cross-platform at Settings load time
34
- # (Path.expanduser → ``$HOME`` on POSIX, ``%USERPROFILE%`` on Windows).
35
- # Keep this in sync with DATA_DIR below — both should live under the
36
- # same root.
37
- DATABASE_URL=sqlite+aiosqlite:///~/.machina/workflow.db
33
+ # SQLite DB filename. Resolved under DATA_DIR by
34
+ # ``Settings._resolve_under_data`` same pattern as ``temporal.db``
35
+ # and ``credentials.db`` so dev mode's DATA_DIR=.machina moves all
36
+ # three together. The SQLAlchemy URL is composed at runtime by
37
+ # ``Settings.database_url`` (sqlite+aiosqlite:///<abspath>).
38
+ WORKFLOW_DB_FILENAME=workflow.db
38
39
  DATABASE_ECHO=false
39
40
  DATABASE_POOL_SIZE=5
40
41
  DATABASE_MAX_OVERFLOW=10
@@ -44,14 +45,61 @@ REDIS_ENABLED=false
44
45
  CACHE_TTL=300
45
46
 
46
47
  # Temporal Configuration
47
- # Enable for durable workflow execution with automatic retries
48
+ # Enable for durable workflow execution with automatic retries.
49
+ # Backed by ``temporal server start-dev`` against a SQLite db at
50
+ # ``TEMPORAL_SQLITE_PATH``. The official ``temporal`` CLI is downloaded
51
+ # by pooch from https://temporal.download/cli/archive/latest on
52
+ # ``machina build`` (or first ``machina start`` if build was skipped).
48
53
  TEMPORAL_ENABLED=true
49
54
  TEMPORAL_SERVER_ADDRESS=localhost:7233
50
55
  TEMPORAL_NAMESPACE=default
51
56
  TEMPORAL_TASK_QUEUE=machina-tasks
52
57
  TEMPORAL_PER_TYPE_DISPATCH=true
53
58
  TEMPORAL_AGENT_WORKFLOW_ENABLED=true
54
- TEMPORAL_BACKEND=postgres
59
+ # gRPC frontend port the CLI dev server binds (``--port``). Default per
60
+ # https://docs.temporal.io/references/configuration.
61
+ TEMPORAL_FRONTEND_GRPC_PORT=7233
62
+ # Web UI port (``--ui-port``). ``temporal server start-dev`` defaults
63
+ # this to ``--port + 1000``; we override to 8080 to match the
64
+ # historical MachinaOS port (kept for muscle memory + bookmarks).
65
+ # Browse to http://<host>:<TEMPORAL_UI_PORT>/.
66
+ TEMPORAL_UI_PORT=8080
67
+ # SQLite db file ``temporal server start-dev --db-filename`` opens.
68
+ # Relative to DATA_DIR (= ~/.machina/) unless absolute. Flat under
69
+ # DATA_DIR like ``credentials.db`` / ``workflow.db``. History is
70
+ # always preserved across restarts (Temporal UI keeps showing every
71
+ # workflow that ever ran); see ``TEMPORAL_TERMINATE_RUNNING_ON_STARTUP``
72
+ # below for the resumption knob.
73
+ TEMPORAL_SQLITE_PATH=temporal.db
74
+ # On server boot, terminate every workflow still in ``Running`` state.
75
+ # History is preserved (workflows show as ``Terminated`` in the UI,
76
+ # NOT deleted) but resumption is disabled, because MachinaOS's
77
+ # ``DeploymentManager`` has no boot-time reconcile against Temporal
78
+ # Visibility yet — resumed workflows would otherwise keep executing
79
+ # but be invisible to the MachinaOS UI. Flip to ``false`` once the
80
+ # reconcile lands to re-enable durable resumption.
81
+ TEMPORAL_TERMINATE_RUNNING_ON_STARTUP=true
82
+ # Graceful shutdown window for the Temporal child process.
83
+ TEMPORAL_GRACEFUL_SHUTDOWN_SECONDS=30
84
+ # Supervisor readiness-probe window. The CLI binary may need to
85
+ # download (~114 MB zip) on first ``machina start`` if ``machina build``
86
+ # didn't pre-cache it.
87
+ TEMPORAL_SERVER_READY_TIMEOUT_SECONDS=120
88
+
89
+ # Wave 12 event framework. ``true`` (default) routes trigger events
90
+ # through TriggerListenerWorkflow + Temporal Signal fan-out for the
91
+ # 8 canary-registered trigger types (webhook, chat, task, telegram,
92
+ # whatsapp, gmail, cron, email). Flip to ``false`` to roll back to
93
+ # the legacy event_waiter path -- see docs-internal/event_framework.md.
94
+ EVENT_FRAMEWORK_ENABLED=true
95
+
96
+ # Memory compaction. ``true`` (default) auto-compacts agent
97
+ # conversation memory when cumulative tokens exceed the model's
98
+ # context-window threshold. Per-session overrides via the UI.
99
+ COMPACTION_ENABLED=true
100
+
101
+ # Dead-letter queue for failed workflow executions. Off by default.
102
+ DLQ_ENABLED=false
55
103
 
56
104
  # Data directory (base for all persistent storage: DBs, workspaces,
57
105
  # workflows, claude state). User-home rooted by default — same
@@ -1,9 +1,9 @@
1
1
  {
2
- "id": "workflow-1779017037684-e2e5da7a",
2
+ "id": "example_workflow-1779017037684-e2e5da7a",
3
3
  "name": "AI Assistant",
4
4
  "nodes": [
5
5
  {
6
- "id": "chatTrigger-17790170376840-6f6546",
6
+ "id": "chatTrigger-17792004760150-ce3047",
7
7
  "type": "chatTrigger",
8
8
  "position": {
9
9
  "x": 940,
@@ -22,7 +22,7 @@
22
22
  "dragging": false
23
23
  },
24
24
  {
25
- "id": "console-17790170376841-6f6546",
25
+ "id": "console-17792004760151-ce3047",
26
26
  "type": "console",
27
27
  "position": {
28
28
  "x": 1720,
@@ -41,7 +41,7 @@
41
41
  "dragging": false
42
42
  },
43
43
  {
44
- "id": "simpleMemory-17790170376842-6f6546",
44
+ "id": "simpleMemory-17792004760152-ce3047",
45
45
  "type": "simpleMemory",
46
46
  "position": {
47
47
  "x": 1120,
@@ -60,7 +60,7 @@
60
60
  "dragging": true
61
61
  },
62
62
  {
63
- "id": "writeTodos-17790170376843-6f6546",
63
+ "id": "writeTodos-17792004760153-ce3047",
64
64
  "type": "writeTodos",
65
65
  "position": {
66
66
  "x": 1440,
@@ -79,7 +79,7 @@
79
79
  "dragging": false
80
80
  },
81
81
  {
82
- "id": "duckduckgoSearch-17790170376844-6f6546",
82
+ "id": "duckduckgoSearch-17792004760154-ce3047",
83
83
  "type": "duckduckgoSearch",
84
84
  "position": {
85
85
  "x": 1560,
@@ -98,7 +98,7 @@
98
98
  "dragging": false
99
99
  },
100
100
  {
101
- "id": "browser-17790170376845-6f6546",
101
+ "id": "browser-17792004760155-ce3047",
102
102
  "type": "browser",
103
103
  "position": {
104
104
  "x": 1680,
@@ -117,7 +117,7 @@
117
117
  "dragging": true
118
118
  },
119
119
  {
120
- "id": "fileRead-17790170376846-6f6546",
120
+ "id": "fileRead-17792004760156-ce3047",
121
121
  "type": "fileRead",
122
122
  "position": {
123
123
  "x": 1980,
@@ -136,7 +136,7 @@
136
136
  "dragging": true
137
137
  },
138
138
  {
139
- "id": "fileModify-17790170376847-6f6546",
139
+ "id": "fileModify-17792004760157-ce3047",
140
140
  "type": "fileModify",
141
141
  "position": {
142
142
  "x": 2080,
@@ -155,7 +155,7 @@
155
155
  "dragging": true
156
156
  },
157
157
  {
158
- "id": "shell-17790170376848-6f6546",
158
+ "id": "shell-17792004760158-ce3047",
159
159
  "type": "shell",
160
160
  "position": {
161
161
  "x": 1900,
@@ -174,7 +174,7 @@
174
174
  "dragging": true
175
175
  },
176
176
  {
177
- "id": "fsSearch-17790170376849-6f6546",
177
+ "id": "fsSearch-17792004760159-ce3047",
178
178
  "type": "fsSearch",
179
179
  "position": {
180
180
  "x": 1780,
@@ -193,7 +193,7 @@
193
193
  "dragging": true
194
194
  },
195
195
  {
196
- "id": "processManager-177901703768410-6f6546",
196
+ "id": "processManager-177920047601510-ce3047",
197
197
  "type": "processManager",
198
198
  "position": {
199
199
  "x": 2180,
@@ -212,7 +212,7 @@
212
212
  "dragging": true
213
213
  },
214
214
  {
215
- "id": "pythonExecutor-177901703768411-6f6546",
215
+ "id": "pythonExecutor-177920047601511-ce3047",
216
216
  "type": "pythonExecutor",
217
217
  "position": {
218
218
  "x": 2280,
@@ -231,7 +231,7 @@
231
231
  "dragging": true
232
232
  },
233
233
  {
234
- "id": "aiAgent-177901703768412-6f6546",
234
+ "id": "aiAgent-177920047601512-ce3047",
235
235
  "type": "aiAgent",
236
236
  "position": {
237
237
  "x": 1220,
@@ -250,7 +250,7 @@
250
250
  }
251
251
  },
252
252
  {
253
- "id": "telegramReceive-177901703768413-6f6546",
253
+ "id": "telegramReceive-177920047601513-ce3047",
254
254
  "type": "telegramReceive",
255
255
  "position": {
256
256
  "x": 940,
@@ -269,7 +269,7 @@
269
269
  "dragging": true
270
270
  },
271
271
  {
272
- "id": "telegramSend-177901703768414-6f6546",
272
+ "id": "telegramSend-177920047601514-ce3047",
273
273
  "type": "telegramSend",
274
274
  "position": {
275
275
  "x": 1700,
@@ -288,7 +288,7 @@
288
288
  "dragging": false
289
289
  },
290
290
  {
291
- "id": "masterSkill-177901703768415-6f6546",
291
+ "id": "masterSkill-177920047601515-ce3047",
292
292
  "type": "masterSkill",
293
293
  "position": {
294
294
  "x": 1240,
@@ -315,11 +315,11 @@
315
315
  "stroke": "#8be9fd",
316
316
  "strokeWidth": 3
317
317
  },
318
- "source": "chatTrigger-17790170376840-6f6546",
318
+ "source": "chatTrigger-17792004760150-ce3047",
319
319
  "sourceHandle": "output-main",
320
- "target": "aiAgent-177901703768412-6f6546",
320
+ "target": "aiAgent-177920047601512-ce3047",
321
321
  "targetHandle": "input-main",
322
- "id": "e-chatTrigger-17790170376840-6f6546-aiAgent-177901703768412-6f6546-1779017037684-6f6546",
322
+ "id": "e-chatTrigger-17792004760150-ce3047-aiAgent-177920047601512-ce3047-1779200476015-ce3047",
323
323
  "selected": false
324
324
  },
325
325
  {
@@ -329,11 +329,11 @@
329
329
  "stroke": "#8be9fd",
330
330
  "strokeWidth": 3
331
331
  },
332
- "source": "simpleMemory-17790170376842-6f6546",
332
+ "source": "simpleMemory-17792004760152-ce3047",
333
333
  "sourceHandle": "output-tool",
334
- "target": "aiAgent-177901703768412-6f6546",
334
+ "target": "aiAgent-177920047601512-ce3047",
335
335
  "targetHandle": "input-memory",
336
- "id": "e-simpleMemory-17790170376842-6f6546-aiAgent-177901703768412-6f6546-1779017037684-6f6546",
336
+ "id": "e-simpleMemory-17792004760152-ce3047-aiAgent-177920047601512-ce3047-1779200476015-ce3047",
337
337
  "selected": false
338
338
  },
339
339
  {
@@ -343,11 +343,11 @@
343
343
  "stroke": "#8be9fd",
344
344
  "strokeWidth": 3
345
345
  },
346
- "source": "aiAgent-177901703768412-6f6546",
346
+ "source": "aiAgent-177920047601512-ce3047",
347
347
  "sourceHandle": "output-main",
348
- "target": "console-17790170376841-6f6546",
348
+ "target": "console-17792004760151-ce3047",
349
349
  "targetHandle": "input-main",
350
- "id": "e-aiAgent-177901703768412-6f6546-console-17790170376841-6f6546-1779017037684-6f6546",
350
+ "id": "e-aiAgent-177920047601512-ce3047-console-17792004760151-ce3047-1779200476015-ce3047",
351
351
  "selected": false
352
352
  },
353
353
  {
@@ -357,11 +357,11 @@
357
357
  "stroke": "#8be9fd",
358
358
  "strokeWidth": 3
359
359
  },
360
- "source": "telegramReceive-177901703768413-6f6546",
360
+ "source": "telegramReceive-177920047601513-ce3047",
361
361
  "sourceHandle": "output-main",
362
- "target": "aiAgent-177901703768412-6f6546",
362
+ "target": "aiAgent-177920047601512-ce3047",
363
363
  "targetHandle": "input-main",
364
- "id": "e-telegramReceive-177901703768413-6f6546-aiAgent-177901703768412-6f6546-1779017037684-6f6546",
364
+ "id": "e-telegramReceive-177920047601513-ce3047-aiAgent-177920047601512-ce3047-1779200476015-ce3047",
365
365
  "selected": false
366
366
  },
367
367
  {
@@ -371,11 +371,11 @@
371
371
  "stroke": "#8be9fd",
372
372
  "strokeWidth": 3
373
373
  },
374
- "source": "aiAgent-177901703768412-6f6546",
374
+ "source": "aiAgent-177920047601512-ce3047",
375
375
  "sourceHandle": "output-main",
376
- "target": "telegramSend-177901703768414-6f6546",
376
+ "target": "telegramSend-177920047601514-ce3047",
377
377
  "targetHandle": "input-main",
378
- "id": "e-aiAgent-177901703768412-6f6546-telegramSend-177901703768414-6f6546-1779017037684-6f6546",
378
+ "id": "e-aiAgent-177920047601512-ce3047-telegramSend-177920047601514-ce3047-1779200476015-ce3047",
379
379
  "selected": false
380
380
  },
381
381
  {
@@ -385,11 +385,11 @@
385
385
  "stroke": "#8be9fd",
386
386
  "strokeWidth": 3
387
387
  },
388
- "source": "masterSkill-177901703768415-6f6546",
388
+ "source": "masterSkill-177920047601515-ce3047",
389
389
  "sourceHandle": "output-tool",
390
- "target": "aiAgent-177901703768412-6f6546",
390
+ "target": "aiAgent-177920047601512-ce3047",
391
391
  "targetHandle": "input-skill",
392
- "id": "e-masterSkill-177901703768415-6f6546-aiAgent-177901703768412-6f6546-1779017037684-6f6546",
392
+ "id": "e-masterSkill-177920047601515-ce3047-aiAgent-177920047601512-ce3047-1779200476015-ce3047",
393
393
  "selected": false
394
394
  },
395
395
  {
@@ -399,11 +399,11 @@
399
399
  "stroke": "#8be9fd",
400
400
  "strokeWidth": 3
401
401
  },
402
- "source": "writeTodos-17790170376843-6f6546",
402
+ "source": "writeTodos-17792004760153-ce3047",
403
403
  "sourceHandle": "output-tool",
404
- "target": "aiAgent-177901703768412-6f6546",
404
+ "target": "aiAgent-177920047601512-ce3047",
405
405
  "targetHandle": "input-tools",
406
- "id": "e-writeTodos-17790170376843-6f6546-aiAgent-177901703768412-6f6546-1779017037684-6f6546",
406
+ "id": "e-writeTodos-17792004760153-ce3047-aiAgent-177920047601512-ce3047-1779200476015-ce3047",
407
407
  "selected": false
408
408
  },
409
409
  {
@@ -413,11 +413,11 @@
413
413
  "stroke": "#8be9fd",
414
414
  "strokeWidth": 3
415
415
  },
416
- "source": "fsSearch-17790170376849-6f6546",
416
+ "source": "fsSearch-17792004760159-ce3047",
417
417
  "sourceHandle": "output-tool",
418
- "target": "aiAgent-177901703768412-6f6546",
418
+ "target": "aiAgent-177920047601512-ce3047",
419
419
  "targetHandle": "input-tools",
420
- "id": "e-fsSearch-17790170376849-6f6546-aiAgent-177901703768412-6f6546-1779017037684-6f6546",
420
+ "id": "e-fsSearch-17792004760159-ce3047-aiAgent-177920047601512-ce3047-1779200476015-ce3047",
421
421
  "selected": false
422
422
  },
423
423
  {
@@ -427,11 +427,11 @@
427
427
  "stroke": "#8be9fd",
428
428
  "strokeWidth": 3
429
429
  },
430
- "source": "shell-17790170376848-6f6546",
430
+ "source": "shell-17792004760158-ce3047",
431
431
  "sourceHandle": "output-tool",
432
- "target": "aiAgent-177901703768412-6f6546",
432
+ "target": "aiAgent-177920047601512-ce3047",
433
433
  "targetHandle": "input-tools",
434
- "id": "e-shell-17790170376848-6f6546-aiAgent-177901703768412-6f6546-1779017037684-6f6546",
434
+ "id": "e-shell-17792004760158-ce3047-aiAgent-177920047601512-ce3047-1779200476015-ce3047",
435
435
  "selected": false
436
436
  },
437
437
  {
@@ -441,11 +441,11 @@
441
441
  "stroke": "#8be9fd",
442
442
  "strokeWidth": 3
443
443
  },
444
- "source": "fileRead-17790170376846-6f6546",
444
+ "source": "fileRead-17792004760156-ce3047",
445
445
  "sourceHandle": "output-tool",
446
- "target": "aiAgent-177901703768412-6f6546",
446
+ "target": "aiAgent-177920047601512-ce3047",
447
447
  "targetHandle": "input-tools",
448
- "id": "e-fileRead-17790170376846-6f6546-aiAgent-177901703768412-6f6546-1779017037684-6f6546",
448
+ "id": "e-fileRead-17792004760156-ce3047-aiAgent-177920047601512-ce3047-1779200476015-ce3047",
449
449
  "selected": false
450
450
  },
451
451
  {
@@ -455,11 +455,11 @@
455
455
  "stroke": "#8be9fd",
456
456
  "strokeWidth": 3
457
457
  },
458
- "source": "fileModify-17790170376847-6f6546",
458
+ "source": "fileModify-17792004760157-ce3047",
459
459
  "sourceHandle": "output-tool",
460
- "target": "aiAgent-177901703768412-6f6546",
460
+ "target": "aiAgent-177920047601512-ce3047",
461
461
  "targetHandle": "input-tools",
462
- "id": "e-fileModify-17790170376847-6f6546-aiAgent-177901703768412-6f6546-1779017037684-6f6546",
462
+ "id": "e-fileModify-17792004760157-ce3047-aiAgent-177920047601512-ce3047-1779200476015-ce3047",
463
463
  "selected": false
464
464
  },
465
465
  {
@@ -469,11 +469,11 @@
469
469
  "stroke": "#8be9fd",
470
470
  "strokeWidth": 3
471
471
  },
472
- "source": "pythonExecutor-177901703768411-6f6546",
472
+ "source": "pythonExecutor-177920047601511-ce3047",
473
473
  "sourceHandle": "output-tool",
474
- "target": "aiAgent-177901703768412-6f6546",
474
+ "target": "aiAgent-177920047601512-ce3047",
475
475
  "targetHandle": "input-tools",
476
- "id": "e-pythonExecutor-177901703768411-6f6546-aiAgent-177901703768412-6f6546-1779017037684-6f6546",
476
+ "id": "e-pythonExecutor-177920047601511-ce3047-aiAgent-177920047601512-ce3047-1779200476015-ce3047",
477
477
  "selected": false
478
478
  },
479
479
  {
@@ -483,11 +483,11 @@
483
483
  "stroke": "#8be9fd",
484
484
  "strokeWidth": 3
485
485
  },
486
- "source": "processManager-177901703768410-6f6546",
486
+ "source": "processManager-177920047601510-ce3047",
487
487
  "sourceHandle": "output-tool",
488
- "target": "aiAgent-177901703768412-6f6546",
488
+ "target": "aiAgent-177920047601512-ce3047",
489
489
  "targetHandle": "input-tools",
490
- "id": "e-processManager-177901703768410-6f6546-aiAgent-177901703768412-6f6546-1779017037684-6f6546",
490
+ "id": "e-processManager-177920047601510-ce3047-aiAgent-177920047601512-ce3047-1779200476015-ce3047",
491
491
  "selected": false
492
492
  },
493
493
  {
@@ -497,19 +497,19 @@
497
497
  "stroke": "#8be9fd",
498
498
  "strokeWidth": 3
499
499
  },
500
- "source": "duckduckgoSearch-17790170376844-6f6546",
500
+ "source": "duckduckgoSearch-17792004760154-ce3047",
501
501
  "sourceHandle": "output-tool",
502
- "target": "aiAgent-177901703768412-6f6546",
502
+ "target": "aiAgent-177920047601512-ce3047",
503
503
  "targetHandle": "input-tools",
504
- "id": "e-duckduckgoSearch-17790170376844-6f6546-aiAgent-177901703768412-6f6546-1779017037684-6f6546",
504
+ "id": "e-duckduckgoSearch-17792004760154-ce3047-aiAgent-177920047601512-ce3047-1779200476015-ce3047",
505
505
  "selected": false
506
506
  }
507
507
  ],
508
- "createdAt": "2026-05-17T05:53:57.686Z",
509
- "lastModified": "2026-05-18T05:47:54.000Z",
508
+ "createdAt": "2026-05-19T08:51:16.024Z",
509
+ "lastModified": "2026-05-19T08:51:16.024Z",
510
510
  "version": "0.0.72",
511
511
  "nodeParameters": {
512
- "console-17790170376841-6f6546": {
512
+ "console-17792004760151-ce3047": {
513
513
  "label": "Console",
514
514
  "log_mode": "field",
515
515
  "field_path": "{{aiagent.response}}",
@@ -517,10 +517,10 @@
517
517
  "format": "json",
518
518
  "fieldPath": ""
519
519
  },
520
- "simpleMemory-17790170376842-6f6546": {
520
+ "simpleMemory-17792004760152-ce3047": {
521
521
  "session_id": "",
522
522
  "window_size": 100,
523
- "memory_content": "# Conversation History\n\n\n### **Human** (2026-05-18 14:19:39)\ncheck delhi bangalore \n\n### **Assistant** (2026-05-18 14:19:39)\nHere is a quick check of the travel and weather details for Delhi and Bangalore:\n\n### ✈️ Flights (Delhi ↔ Bangalore)\n* **Duration:** Approximately **2 hours 45 minutes** to 3 hours for a direct flight.\n* **Airlines:** IndiGo, Air India, Vistara, and Akasa Air operate frequent daily flights.\n* **Typical Price:** Fares usually range from **₹4,500 to ₹7,000** if booked in advance, though last-minute tickets can be higher.\n\n### 🚆 Trains (Delhi ↔ Bangalore)\n* **Duration:** Between **30 to 40 hours** depending on the train.\n* **Key Trains:**\n * **Rajdhani Express (22692):** The fastest option, taking about 33 hours.\n * **Duronto Express (12214):** Approximately 31-32 hours.\n * **Karnataka Express (12628):** A popular daily option, taking around 36 hours.\n* **Stations:** Trains usually depart from New Delhi (NDLS) or Hazrat Nizamuddin (NZM) and arrive at KSR Bengaluru (SBC) or Yesvantpur (YPR).\n\n### ☀️ Weather Comparison (May 18-19)\n| Feature | Delhi | Bangalore (Bengaluru) |\n| :--- | :--- | :--- |\n| **Temperature** | **40°C – 43°C** (Very Hot) | **22°C – 33°C** (Pleasant/Warm) |\n| **Condition** | Mostly Sunny / Heatwave | Partly Cloudy / Possible Rain |\n| **AQI** | Often Poor/Very Poor | Generally Moderate/Satisfactory |\n\n**Summary:**\nIf you are traveling today or tomorrow, be prepared for extreme heat in **Delhi** (stay hydrated!). **Bangalore** remains much cooler but has a higher chance of evening thundershowers. \n\n*Would you like me to look up specific flight prices for a certain date or check seat availability for a particular train?*\n\n### **Human** (2026-05-18 14:21:25)\n Hey\n\n### **Assistant** (2026-05-18 14:21:25)\nHello! How can I help you today?\n\n### **Human** (2026-05-18 14:21:49)\n Check Bangalore weather\n\n### **Assistant** (2026-05-18 14:21:49)\nAs of today, **May 18, 2026**, the weather in **Bangalore** is as follows:\n\n* **Current Temperature:** Approximately **33°C to 35°C** (peaking around this time of afternoon).\n* **Conditions:** Partly cloudy with passing clouds.\n* **Evening Forecast:** Temperatures are expected to dip to a pleasant **22°C – 23°C**.\n* **Precipitation:** There is a slight chance of isolated thundershowers in the late evening or night, which is common for Bangalore this time of year.\n* **Air Quality:** Generally **Moderate to Satisfactory**, much better than the current conditions in Delhi.\n\nIt's a warm day, but significantly more comfortable than the heatwave currently affecting North India!\n\n### **Human** (2026-05-18 14:22:20)\n Indian capital\n\n### **Assistant** (2026-05-18 14:22:20)\nThe capital of India is **New Delhi**.\n\n### **Human** (2026-05-18 14:22:23)\n France Capital\n\n### **Assistant** (2026-05-18 14:22:23)\nThe capital of France is **Paris**.\n",
523
+ "memory_content": "# Conversation History\n\n*No messages yet.*\n",
524
524
  "long_term_enabled": false,
525
525
  "retrieval_count": 3,
526
526
  "last_session_id": null,
@@ -529,7 +529,7 @@
529
529
  "longTermEnabled": false,
530
530
  "retrievalCount": 3
531
531
  },
532
- "browser-17790170376845-6f6546": {
532
+ "browser-17792004760155-ce3047": {
533
533
  "toolName": "browser",
534
534
  "toolDescription": "Control a web browser. Use snapshot to see the page (returns accessibility tree with @eN refs). Then click/type/fill with those refs. Workflow: navigate -> snapshot -> click/fill -> snapshot.",
535
535
  "operation": "navigate",
@@ -558,13 +558,13 @@
558
558
  "timeout": 30,
559
559
  "label": "Browser"
560
560
  },
561
- "fileRead-17790170376846-6f6546": {
561
+ "fileRead-17792004760156-ce3047": {
562
562
  "file_path": "",
563
563
  "offset": 0,
564
564
  "limit": 100,
565
565
  "label": "File Read"
566
566
  },
567
- "fileModify-17790170376847-6f6546": {
567
+ "fileModify-17792004760157-ce3047": {
568
568
  "operation": "write",
569
569
  "file_path": "",
570
570
  "content": "",
@@ -573,19 +573,19 @@
573
573
  "replace_all": false,
574
574
  "label": "File Modify"
575
575
  },
576
- "shell-17790170376848-6f6546": {
576
+ "shell-17792004760158-ce3047": {
577
577
  "command": "",
578
578
  "timeout": 30,
579
579
  "label": "Shell"
580
580
  },
581
- "fsSearch-17790170376849-6f6546": {
581
+ "fsSearch-17792004760159-ce3047": {
582
582
  "mode": "ls",
583
583
  "path": ".",
584
584
  "pattern": "",
585
585
  "file_filter": "",
586
586
  "label": "FS Search"
587
587
  },
588
- "processManager-177901703768410-6f6546": {
588
+ "processManager-177920047601510-ce3047": {
589
589
  "toolName": "process_manager",
590
590
  "toolDescription": "Start, stop, and manage long-running processes. Use for dev servers, watchers, build tools. Output streams to Terminal.",
591
591
  "operation": "start",
@@ -595,19 +595,19 @@
595
595
  "text": "",
596
596
  "label": "Process Manager"
597
597
  },
598
- "pythonExecutor-177901703768411-6f6546": {
598
+ "pythonExecutor-177920047601511-ce3047": {
599
599
  "code": "# Python Executor - Transform and process data\n#\n# Available:\n# input_data - dict with connected node outputs\n# math, json - imported modules\n# print() - for debugging\n#\n# Set the \"output\" variable with your result\n\n# Example: Get data from connected node\ndata = input_data.get(\"start\", {}) or input_data\n\n# Process data\nresult = {\n \"message\": \"from Python!\",\n \"input_received\": data,\n \"processed\": True\n}\n\n# Set output (required)\noutput = result",
600
600
  "timeout": 30,
601
601
  "label": "Python Executor"
602
602
  },
603
- "aiAgent-177901703768412-6f6546": {
603
+ "aiAgent-177920047601512-ce3047": {
604
604
  "prompt": "{{chattrigger.message}} {{telegramreceive.text}}",
605
605
  "provider": "gemini",
606
606
  "model": "gemini-flash-latest",
607
607
  "system_message": "You are a helpful assistant",
608
608
  "label": "AI Agent"
609
609
  },
610
- "telegramReceive-177901703768413-6f6546": {
610
+ "telegramReceive-177920047601513-ce3047": {
611
611
  "content_type_filter": "text",
612
612
  "sender_filter": "self",
613
613
  "chat_id": "",
@@ -616,7 +616,7 @@
616
616
  "ignore_bots": true,
617
617
  "label": "Telegram Receive"
618
618
  },
619
- "telegramSend-177901703768414-6f6546": {
619
+ "telegramSend-177920047601514-ce3047": {
620
620
  "recipient_type": "self",
621
621
  "chat_id": "",
622
622
  "message_type": "text",
@@ -633,7 +633,7 @@
633
633
  "reply_to_message_id": 0,
634
634
  "label": "Telegram Send"
635
635
  },
636
- "masterSkill-177901703768415-6f6546": {
636
+ "masterSkill-177920047601515-ce3047": {
637
637
  "skills_config": {
638
638
  "assistant-personality": {
639
639
  "enabled": true,