flujo-ai 3.19.0 → 3.20.0

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 (446) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-build-manifest.json +213 -206
  3. package/.next/app-path-routes-manifest.json +9 -8
  4. package/.next/build-manifest.json +5 -5
  5. package/.next/prerender-manifest.json +18 -18
  6. package/.next/react-loadable-manifest.json +8 -8
  7. package/.next/routes-manifest.json +8 -0
  8. package/.next/server/app/_not-found/page.js +2 -2
  9. package/.next/server/app/_not-found/page.js.nft.json +1 -1
  10. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  11. package/.next/server/app/_not-found.html +1 -1
  12. package/.next/server/app/_not-found.rsc +1 -1
  13. package/.next/server/app/api/backup/route.js +1 -1
  14. package/.next/server/app/api/backup/route.js.nft.json +1 -1
  15. package/.next/server/app/api/backup/route_client-reference-manifest.js +1 -1
  16. package/.next/server/app/api/browse/route.js +1 -1
  17. package/.next/server/app/api/browse/route.js.nft.json +1 -1
  18. package/.next/server/app/api/browse/route_client-reference-manifest.js +1 -1
  19. package/.next/server/app/api/cwd/route.js +1 -1
  20. package/.next/server/app/api/cwd/route.js.nft.json +1 -1
  21. package/.next/server/app/api/cwd/route_client-reference-manifest.js +1 -1
  22. package/.next/server/app/api/encryption/secure/route.js +1 -1
  23. package/.next/server/app/api/encryption/secure/route.js.nft.json +1 -1
  24. package/.next/server/app/api/encryption/secure/route_client-reference-manifest.js +1 -1
  25. package/.next/server/app/api/env/route.js +1 -1
  26. package/.next/server/app/api/env/route.js.nft.json +1 -1
  27. package/.next/server/app/api/env/route_client-reference-manifest.js +1 -1
  28. package/.next/server/app/api/flow/[id]/route.js +1 -1
  29. package/.next/server/app/api/flow/[id]/route.js.nft.json +1 -1
  30. package/.next/server/app/api/flow/[id]/route_client-reference-manifest.js +1 -1
  31. package/.next/server/app/api/flow/compile/route.js +1 -1
  32. package/.next/server/app/api/flow/compile/route.js.nft.json +1 -1
  33. package/.next/server/app/api/flow/compile/route_client-reference-manifest.js +1 -1
  34. package/.next/server/app/api/flow/generate/route.js +1 -1
  35. package/.next/server/app/api/flow/generate/route.js.nft.json +1 -1
  36. package/.next/server/app/api/flow/generate/route_client-reference-manifest.js +1 -1
  37. package/.next/server/app/api/flow/improve/route.js +1 -1
  38. package/.next/server/app/api/flow/improve/route.js.nft.json +1 -1
  39. package/.next/server/app/api/flow/improve/route_client-reference-manifest.js +1 -1
  40. package/.next/server/app/api/flow/prompt-renderer/route.js +1 -1
  41. package/.next/server/app/api/flow/prompt-renderer/route.js.nft.json +1 -1
  42. package/.next/server/app/api/flow/prompt-renderer/route_client-reference-manifest.js +1 -1
  43. package/.next/server/app/api/flow/quick-chat/route.js +1 -1
  44. package/.next/server/app/api/flow/quick-chat/route.js.nft.json +1 -1
  45. package/.next/server/app/api/flow/quick-chat/route_client-reference-manifest.js +1 -1
  46. package/.next/server/app/api/flow/repair/route.js +1 -1
  47. package/.next/server/app/api/flow/repair/route.js.nft.json +1 -1
  48. package/.next/server/app/api/flow/repair/route_client-reference-manifest.js +1 -1
  49. package/.next/server/app/api/flow/route.js +1 -1
  50. package/.next/server/app/api/flow/route.js.nft.json +1 -1
  51. package/.next/server/app/api/flow/route_client-reference-manifest.js +1 -1
  52. package/.next/server/app/api/git/route.js +1 -1
  53. package/.next/server/app/api/git/route.js.nft.json +1 -1
  54. package/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
  55. package/.next/server/app/api/init/route.js +1 -1
  56. package/.next/server/app/api/init/route.js.nft.json +1 -1
  57. package/.next/server/app/api/init/route_client-reference-manifest.js +1 -1
  58. package/.next/server/app/api/local-models/capability/route_client-reference-manifest.js +1 -1
  59. package/.next/server/app/api/local-models/pull/route_client-reference-manifest.js +1 -1
  60. package/.next/server/app/api/local-models/suggest/route_client-reference-manifest.js +1 -1
  61. package/.next/server/app/api/mcp/cancel/route.js +1 -1
  62. package/.next/server/app/api/mcp/cancel/route.js.nft.json +1 -1
  63. package/.next/server/app/api/mcp/cancel/route_client-reference-manifest.js +1 -1
  64. package/.next/server/app/api/mcp/servers/[name]/prompts/get/route.js +1 -1
  65. package/.next/server/app/api/mcp/servers/[name]/prompts/get/route.js.nft.json +1 -1
  66. package/.next/server/app/api/mcp/servers/[name]/prompts/get/route_client-reference-manifest.js +1 -1
  67. package/.next/server/app/api/mcp/servers/[name]/prompts/route.js +1 -1
  68. package/.next/server/app/api/mcp/servers/[name]/prompts/route.js.nft.json +1 -1
  69. package/.next/server/app/api/mcp/servers/[name]/prompts/route_client-reference-manifest.js +1 -1
  70. package/.next/server/app/api/mcp/servers/[name]/resources/read/route.js +1 -1
  71. package/.next/server/app/api/mcp/servers/[name]/resources/read/route.js.nft.json +1 -1
  72. package/.next/server/app/api/mcp/servers/[name]/resources/read/route_client-reference-manifest.js +1 -1
  73. package/.next/server/app/api/mcp/servers/[name]/resources/route.js +1 -1
  74. package/.next/server/app/api/mcp/servers/[name]/resources/route.js.nft.json +1 -1
  75. package/.next/server/app/api/mcp/servers/[name]/resources/route_client-reference-manifest.js +1 -1
  76. package/.next/server/app/api/mcp/servers/[name]/route.js +1 -1
  77. package/.next/server/app/api/mcp/servers/[name]/route.js.nft.json +1 -1
  78. package/.next/server/app/api/mcp/servers/[name]/route_client-reference-manifest.js +1 -1
  79. package/.next/server/app/api/mcp/servers/[name]/status/route.js +1 -1
  80. package/.next/server/app/api/mcp/servers/[name]/status/route.js.nft.json +1 -1
  81. package/.next/server/app/api/mcp/servers/[name]/status/route_client-reference-manifest.js +1 -1
  82. package/.next/server/app/api/mcp/servers/[name]/tools/[toolName]/route.js +1 -1
  83. package/.next/server/app/api/mcp/servers/[name]/tools/[toolName]/route.js.nft.json +1 -1
  84. package/.next/server/app/api/mcp/servers/[name]/tools/[toolName]/route_client-reference-manifest.js +1 -1
  85. package/.next/server/app/api/mcp/servers/[name]/tools/route.js +1 -1
  86. package/.next/server/app/api/mcp/servers/[name]/tools/route.js.nft.json +1 -1
  87. package/.next/server/app/api/mcp/servers/[name]/tools/route_client-reference-manifest.js +1 -1
  88. package/.next/server/app/api/mcp/servers/route.js +1 -1
  89. package/.next/server/app/api/mcp/servers/route.js.nft.json +1 -1
  90. package/.next/server/app/api/mcp/servers/route_client-reference-manifest.js +1 -1
  91. package/.next/server/app/api/mcp/test-connection/route.js +1 -1
  92. package/.next/server/app/api/mcp/test-connection/route.js.nft.json +1 -1
  93. package/.next/server/app/api/mcp/test-connection/route_client-reference-manifest.js +1 -1
  94. package/.next/server/app/api/mcp/test-connection/stream/route.js +1 -1
  95. package/.next/server/app/api/mcp/test-connection/stream/route.js.nft.json +1 -1
  96. package/.next/server/app/api/mcp/test-connection/stream/route_client-reference-manifest.js +1 -1
  97. package/.next/server/app/api/mcp-registry/route.js +1 -1
  98. package/.next/server/app/api/mcp-registry/route.js.nft.json +1 -1
  99. package/.next/server/app/api/mcp-registry/route_client-reference-manifest.js +1 -1
  100. package/.next/server/app/api/mcp-registry/spotlight/route.js +1 -1
  101. package/.next/server/app/api/mcp-registry/spotlight/route.js.nft.json +1 -1
  102. package/.next/server/app/api/mcp-registry/spotlight/route_client-reference-manifest.js +1 -1
  103. package/.next/server/app/api/model/[id]/route.js +1 -1
  104. package/.next/server/app/api/model/[id]/route.js.nft.json +1 -1
  105. package/.next/server/app/api/model/[id]/route_client-reference-manifest.js +1 -1
  106. package/.next/server/app/api/model/provider/route.js +1 -1
  107. package/.next/server/app/api/model/provider/route.js.nft.json +1 -1
  108. package/.next/server/app/api/model/provider/route_client-reference-manifest.js +1 -1
  109. package/.next/server/app/api/model/route.js +1 -1
  110. package/.next/server/app/api/model/route.js.nft.json +1 -1
  111. package/.next/server/app/api/model/route_client-reference-manifest.js +1 -1
  112. package/.next/server/app/api/model/test/route.js +1 -1
  113. package/.next/server/app/api/model/test/route.js.nft.json +1 -1
  114. package/.next/server/app/api/model/test/route_client-reference-manifest.js +1 -1
  115. package/.next/server/app/api/oauth/callback/route.js +1 -1
  116. package/.next/server/app/api/oauth/callback/route.js.nft.json +1 -1
  117. package/.next/server/app/api/oauth/callback/route_client-reference-manifest.js +1 -1
  118. package/.next/server/app/api/oauth/initiate/route.js +1 -1
  119. package/.next/server/app/api/oauth/initiate/route.js.nft.json +1 -1
  120. package/.next/server/app/api/oauth/initiate/route_client-reference-manifest.js +1 -1
  121. package/.next/server/app/api/oauth/reset/route.js +1 -1
  122. package/.next/server/app/api/oauth/reset/route.js.nft.json +1 -1
  123. package/.next/server/app/api/oauth/reset/route_client-reference-manifest.js +1 -1
  124. package/.next/server/app/api/planned-executions/[id]/route.js +1 -1
  125. package/.next/server/app/api/planned-executions/[id]/route.js.nft.json +1 -1
  126. package/.next/server/app/api/planned-executions/[id]/route_client-reference-manifest.js +1 -1
  127. package/.next/server/app/api/planned-executions/[id]/run/route.js +1 -1
  128. package/.next/server/app/api/planned-executions/[id]/run/route.js.nft.json +1 -1
  129. package/.next/server/app/api/planned-executions/[id]/run/route_client-reference-manifest.js +1 -1
  130. package/.next/server/app/api/planned-executions/[id]/runs/route.js +1 -1
  131. package/.next/server/app/api/planned-executions/[id]/runs/route.js.nft.json +1 -1
  132. package/.next/server/app/api/planned-executions/[id]/runs/route_client-reference-manifest.js +1 -1
  133. package/.next/server/app/api/planned-executions/preview-schedule/route.js +1 -1
  134. package/.next/server/app/api/planned-executions/preview-schedule/route.js.nft.json +1 -1
  135. package/.next/server/app/api/planned-executions/preview-schedule/route_client-reference-manifest.js +1 -1
  136. package/.next/server/app/api/planned-executions/route.js +1 -1
  137. package/.next/server/app/api/planned-executions/route.js.nft.json +1 -1
  138. package/.next/server/app/api/planned-executions/route_client-reference-manifest.js +1 -1
  139. package/.next/server/app/api/restore/route.js +1 -1
  140. package/.next/server/app/api/restore/route.js.nft.json +1 -1
  141. package/.next/server/app/api/restore/route_client-reference-manifest.js +1 -1
  142. package/.next/server/app/api/storage/route.js +1 -1
  143. package/.next/server/app/api/storage/route.js.nft.json +1 -1
  144. package/.next/server/app/api/storage/route_client-reference-manifest.js +1 -1
  145. package/.next/server/app/api/update/route.js +1 -1
  146. package/.next/server/app/api/update/route.js.nft.json +1 -1
  147. package/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
  148. package/.next/server/app/api/webhooks/[id]/route.js +1 -1
  149. package/.next/server/app/api/webhooks/[id]/route.js.nft.json +1 -1
  150. package/.next/server/app/api/webhooks/[id]/route_client-reference-manifest.js +1 -1
  151. package/.next/server/app/chat/page.js +7 -7
  152. package/.next/server/app/chat/page.js.nft.json +1 -1
  153. package/.next/server/app/chat/page_client-reference-manifest.js +1 -1
  154. package/.next/server/app/chat.html +1 -1
  155. package/.next/server/app/chat.rsc +2 -2
  156. package/.next/server/app/docs/page.js +9 -2
  157. package/.next/server/app/docs/page.js.nft.json +1 -1
  158. package/.next/server/app/docs/page_client-reference-manifest.js +1 -1
  159. package/.next/server/app/docs.html +1 -1
  160. package/.next/server/app/docs.rsc +2 -2
  161. package/.next/server/app/executions/page.js +1 -1
  162. package/.next/server/app/executions/page.js.nft.json +1 -1
  163. package/.next/server/app/executions/page_client-reference-manifest.js +1 -1
  164. package/.next/server/app/executions.html +1 -1
  165. package/.next/server/app/executions.rsc +2 -2
  166. package/.next/server/app/flows/page.js +3 -3
  167. package/.next/server/app/flows/page.js.nft.json +1 -1
  168. package/.next/server/app/flows/page_client-reference-manifest.js +1 -1
  169. package/.next/server/app/flows.html +1 -1
  170. package/.next/server/app/flows.rsc +2 -2
  171. package/.next/server/app/index.html +1 -1
  172. package/.next/server/app/index.rsc +2 -2
  173. package/.next/server/app/mcp/page.js +2 -2
  174. package/.next/server/app/mcp/page.js.nft.json +1 -1
  175. package/.next/server/app/mcp/page_client-reference-manifest.js +1 -1
  176. package/.next/server/app/mcp-flows/route.js +1 -1
  177. package/.next/server/app/mcp-flows/route.js.nft.json +1 -1
  178. package/.next/server/app/mcp-flows/route_client-reference-manifest.js +1 -1
  179. package/.next/server/app/mcp-proxy/[server]/route.js +1 -1
  180. package/.next/server/app/mcp-proxy/[server]/route.js.nft.json +1 -1
  181. package/.next/server/app/mcp-proxy/[server]/route_client-reference-manifest.js +1 -1
  182. package/.next/server/app/mcp.html +1 -1
  183. package/.next/server/app/mcp.rsc +2 -2
  184. package/.next/server/app/models/page.js +1 -1
  185. package/.next/server/app/models/page.js.nft.json +1 -1
  186. package/.next/server/app/models/page_client-reference-manifest.js +1 -1
  187. package/.next/server/app/page.js +2 -2
  188. package/.next/server/app/page.js.nft.json +1 -1
  189. package/.next/server/app/page_client-reference-manifest.js +1 -1
  190. package/.next/server/app/settings/page.js +1 -1
  191. package/.next/server/app/settings/page.js.nft.json +1 -1
  192. package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  193. package/.next/server/app/settings.html +1 -1
  194. package/.next/server/app/settings.rsc +2 -2
  195. package/.next/server/app/v1/chat/completions/route.js +1 -1
  196. package/.next/server/app/v1/chat/completions/route.js.nft.json +1 -1
  197. package/.next/server/app/v1/chat/completions/route_client-reference-manifest.js +1 -1
  198. package/.next/server/app/v1/chat/conversations/[conversationId]/breakpoints/route.js +2 -2
  199. package/.next/server/app/v1/chat/conversations/[conversationId]/breakpoints/route.js.nft.json +1 -1
  200. package/.next/server/app/v1/chat/conversations/[conversationId]/breakpoints/route_client-reference-manifest.js +1 -1
  201. package/.next/server/app/v1/chat/conversations/[conversationId]/cancel/route.js +1 -1
  202. package/.next/server/app/v1/chat/conversations/[conversationId]/cancel/route.js.nft.json +1 -1
  203. package/.next/server/app/v1/chat/conversations/[conversationId]/cancel/route_client-reference-manifest.js +1 -1
  204. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/continue/route.js +1 -1
  205. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/continue/route.js.nft.json +1 -1
  206. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/continue/route_client-reference-manifest.js +1 -1
  207. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/step/route.js +1 -1
  208. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/step/route.js.nft.json +1 -1
  209. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/step/route_client-reference-manifest.js +1 -1
  210. package/.next/server/app/v1/chat/conversations/[conversationId]/edit-state/route.js +2 -2
  211. package/.next/server/app/v1/chat/conversations/[conversationId]/edit-state/route.js.nft.json +1 -1
  212. package/.next/server/app/v1/chat/conversations/[conversationId]/edit-state/route_client-reference-manifest.js +1 -1
  213. package/.next/server/app/v1/chat/conversations/[conversationId]/events/route.js +1 -1
  214. package/.next/server/app/v1/chat/conversations/[conversationId]/events/route.js.nft.json +1 -1
  215. package/.next/server/app/v1/chat/conversations/[conversationId]/events/route_client-reference-manifest.js +1 -1
  216. package/.next/server/app/v1/chat/conversations/[conversationId]/resources/route.js +1 -0
  217. package/.next/server/app/v1/chat/conversations/[conversationId]/resources/route.js.nft.json +1 -0
  218. package/.next/server/app/v1/chat/conversations/[conversationId]/resources/route_client-reference-manifest.js +1 -0
  219. package/.next/server/app/v1/chat/conversations/[conversationId]/respond/route.js +1 -1
  220. package/.next/server/app/v1/chat/conversations/[conversationId]/respond/route.js.nft.json +1 -1
  221. package/.next/server/app/v1/chat/conversations/[conversationId]/respond/route_client-reference-manifest.js +1 -1
  222. package/.next/server/app/v1/chat/conversations/[conversationId]/route.js +1 -1
  223. package/.next/server/app/v1/chat/conversations/[conversationId]/route.js.nft.json +1 -1
  224. package/.next/server/app/v1/chat/conversations/[conversationId]/route_client-reference-manifest.js +1 -1
  225. package/.next/server/app/v1/chat/conversations/route.js +1 -1
  226. package/.next/server/app/v1/chat/conversations/route.js.nft.json +1 -1
  227. package/.next/server/app/v1/chat/conversations/route_client-reference-manifest.js +1 -1
  228. package/.next/server/app/v1/models/route.js +1 -1
  229. package/.next/server/app/v1/models/route.js.nft.json +1 -1
  230. package/.next/server/app/v1/models/route_client-reference-manifest.js +1 -1
  231. package/.next/server/app-paths-manifest.json +9 -8
  232. package/.next/server/chunks/1083.js +1 -1
  233. package/.next/server/chunks/1197.js +2 -2
  234. package/.next/server/chunks/1373.js +1 -1
  235. package/.next/server/chunks/1690.js +1 -0
  236. package/.next/server/chunks/1746.js +1 -1
  237. package/.next/server/chunks/2261.js +1 -0
  238. package/.next/server/chunks/2350.js +1 -1
  239. package/.next/server/chunks/264.js +1 -1
  240. package/.next/server/chunks/2859.js +1 -1
  241. package/.next/server/chunks/289.js +1 -0
  242. package/.next/server/chunks/3574.js +2 -2
  243. package/.next/server/chunks/{3310.js → 3778.js} +2 -2
  244. package/.next/server/chunks/3953.js +1 -1
  245. package/.next/server/chunks/3984.js +4 -4
  246. package/.next/server/chunks/4045.js +1 -0
  247. package/.next/server/chunks/4322.js +1 -0
  248. package/.next/server/chunks/4436.js +1 -0
  249. package/.next/server/chunks/4498.js +40 -0
  250. package/.next/server/chunks/4637.js +13 -6
  251. package/.next/server/chunks/4671.js +1 -0
  252. package/.next/server/chunks/{1912.js → 4690.js} +2 -2
  253. package/.next/server/chunks/5708.js +7 -0
  254. package/.next/server/chunks/5734.js +4 -4
  255. package/.next/server/chunks/{6088.js → 6532.js} +2 -2
  256. package/.next/server/chunks/6772.js +1 -1
  257. package/.next/server/chunks/{6136.js → 6908.js} +2 -2
  258. package/.next/server/chunks/6981.js +1 -0
  259. package/.next/server/chunks/6996.js +3 -3
  260. package/.next/server/chunks/701.js +1 -1
  261. package/.next/server/chunks/7101.js +64 -0
  262. package/.next/server/chunks/7214.js +2 -2
  263. package/.next/server/chunks/724.js +3 -3
  264. package/.next/server/chunks/7362.js +4 -4
  265. package/.next/server/chunks/7463.js +6 -0
  266. package/.next/server/chunks/7506.js +1 -1
  267. package/.next/server/chunks/7635.js +1 -1
  268. package/.next/server/chunks/7821.js +1 -1
  269. package/.next/server/chunks/8298.js +1 -0
  270. package/.next/server/chunks/8739.js +2 -2
  271. package/.next/server/chunks/9509.js +2 -2
  272. package/.next/server/chunks/9957.js +1 -0
  273. package/.next/server/functions-config-manifest.json +3 -3
  274. package/.next/server/instrumentation.js.nft.json +1 -1
  275. package/.next/server/middleware-build-manifest.js +1 -1
  276. package/.next/server/middleware-react-loadable-manifest.js +1 -1
  277. package/.next/server/pages/404.html +1 -1
  278. package/.next/server/pages/500.html +1 -1
  279. package/.next/server/server-reference-manifest.js +1 -1
  280. package/.next/server/server-reference-manifest.json +1 -1
  281. package/.next/static/chunks/{1892-a0f5ec7152540dc3.js → 1892-5c1e38d89e0a5a9c.js} +1 -1
  282. package/.next/static/chunks/{3272-ab88dd195ea61b65.js → 3272-fd8d59523f61da96.js} +1 -1
  283. package/.next/static/chunks/3381-5fd2417957ca0881.js +1 -0
  284. package/.next/static/chunks/{1634-d4019c4a5cac2ed0.js → 3648-733cf7ca4a5d1f19.js} +1 -1
  285. package/.next/static/chunks/422-268783d9ad5897e1.js +1 -0
  286. package/.next/static/chunks/{5501-7d6e38c7c8cc3c5a.js → 5501-c400aaeaf57e6297.js} +1 -1
  287. package/.next/static/chunks/7258-e27017c1b98f43f9.js +1 -0
  288. package/.next/static/chunks/{7583.5355a64005f2b265.js → 7583.26a8c1f6e6823daf.js} +1 -1
  289. package/.next/static/chunks/{8187.57929e3f925fe538.js → 8187.fd653767df53db87.js} +1 -1
  290. package/.next/static/chunks/{7829-b843e80f32a83256.js → 8755-9f375ec8740fecac.js} +1 -1
  291. package/.next/static/chunks/{9164-14dc5889cb7478c0.js → 9164-f54d3531ca1df5f7.js} +1 -1
  292. package/.next/static/chunks/{9747-ffb8be5e59700c27.js → 9587-706bfd1a692c4660.js} +3 -3
  293. package/.next/static/chunks/app/api/backup/route-b296683a5faf800a.js +1 -0
  294. package/.next/static/chunks/app/api/browse/route-b296683a5faf800a.js +1 -0
  295. package/.next/static/chunks/app/api/cwd/route-b296683a5faf800a.js +1 -0
  296. package/.next/static/chunks/app/api/encryption/secure/route-b296683a5faf800a.js +1 -0
  297. package/.next/static/chunks/app/api/env/route-b296683a5faf800a.js +1 -0
  298. package/.next/static/chunks/app/api/flow/[id]/route-b296683a5faf800a.js +1 -0
  299. package/.next/static/chunks/app/api/flow/compile/route-b296683a5faf800a.js +1 -0
  300. package/.next/static/chunks/app/api/flow/generate/route-b296683a5faf800a.js +1 -0
  301. package/.next/static/chunks/app/api/flow/improve/route-b296683a5faf800a.js +1 -0
  302. package/.next/static/chunks/app/api/flow/prompt-renderer/route-b296683a5faf800a.js +1 -0
  303. package/.next/static/chunks/app/api/flow/quick-chat/route-b296683a5faf800a.js +1 -0
  304. package/.next/static/chunks/app/api/flow/repair/route-b296683a5faf800a.js +1 -0
  305. package/.next/static/chunks/app/api/flow/route-b296683a5faf800a.js +1 -0
  306. package/.next/static/chunks/app/api/git/route-b296683a5faf800a.js +1 -0
  307. package/.next/static/chunks/app/api/init/route-b296683a5faf800a.js +1 -0
  308. package/.next/static/chunks/app/api/local-models/capability/route-b296683a5faf800a.js +1 -0
  309. package/.next/static/chunks/app/api/local-models/pull/route-b296683a5faf800a.js +1 -0
  310. package/.next/static/chunks/app/api/local-models/suggest/route-b296683a5faf800a.js +1 -0
  311. package/.next/static/chunks/app/api/mcp/cancel/route-b296683a5faf800a.js +1 -0
  312. package/.next/static/chunks/app/api/mcp/servers/[name]/prompts/get/route-b296683a5faf800a.js +1 -0
  313. package/.next/static/chunks/app/api/mcp/servers/[name]/prompts/route-b296683a5faf800a.js +1 -0
  314. package/.next/static/chunks/app/api/mcp/servers/[name]/resources/read/route-b296683a5faf800a.js +1 -0
  315. package/.next/static/chunks/app/api/mcp/servers/[name]/resources/route-b296683a5faf800a.js +1 -0
  316. package/.next/static/chunks/app/api/mcp/servers/[name]/route-b296683a5faf800a.js +1 -0
  317. package/.next/static/chunks/app/api/mcp/servers/[name]/status/route-b296683a5faf800a.js +1 -0
  318. package/.next/static/chunks/app/api/mcp/servers/[name]/tools/[toolName]/route-b296683a5faf800a.js +1 -0
  319. package/.next/static/chunks/app/api/mcp/servers/[name]/tools/route-b296683a5faf800a.js +1 -0
  320. package/.next/static/chunks/app/api/mcp/servers/route-b296683a5faf800a.js +1 -0
  321. package/.next/static/chunks/app/api/mcp/test-connection/route-b296683a5faf800a.js +1 -0
  322. package/.next/static/chunks/app/api/mcp/test-connection/stream/route-b296683a5faf800a.js +1 -0
  323. package/.next/static/chunks/app/api/mcp-registry/route-b296683a5faf800a.js +1 -0
  324. package/.next/static/chunks/app/api/mcp-registry/spotlight/route-b296683a5faf800a.js +1 -0
  325. package/.next/static/chunks/app/api/model/[id]/route-b296683a5faf800a.js +1 -0
  326. package/.next/static/chunks/app/api/model/provider/route-b296683a5faf800a.js +1 -0
  327. package/.next/static/chunks/app/api/model/route-b296683a5faf800a.js +1 -0
  328. package/.next/static/chunks/app/api/model/test/route-b296683a5faf800a.js +1 -0
  329. package/.next/static/chunks/app/api/oauth/callback/route-b296683a5faf800a.js +1 -0
  330. package/.next/static/chunks/app/api/oauth/initiate/route-b296683a5faf800a.js +1 -0
  331. package/.next/static/chunks/app/api/oauth/reset/route-b296683a5faf800a.js +1 -0
  332. package/.next/static/chunks/app/api/planned-executions/[id]/route-b296683a5faf800a.js +1 -0
  333. package/.next/static/chunks/app/api/planned-executions/[id]/run/route-b296683a5faf800a.js +1 -0
  334. package/.next/static/chunks/app/api/planned-executions/[id]/runs/route-b296683a5faf800a.js +1 -0
  335. package/.next/static/chunks/app/api/planned-executions/preview-schedule/route-b296683a5faf800a.js +1 -0
  336. package/.next/static/chunks/app/api/planned-executions/route-b296683a5faf800a.js +1 -0
  337. package/.next/static/chunks/app/api/restore/route-b296683a5faf800a.js +1 -0
  338. package/.next/static/chunks/app/api/storage/route-b296683a5faf800a.js +1 -0
  339. package/.next/static/chunks/app/api/update/route-b296683a5faf800a.js +1 -0
  340. package/.next/static/chunks/app/api/webhooks/[id]/route-b296683a5faf800a.js +1 -0
  341. package/.next/static/chunks/app/chat/page-a67ad3683443e7ad.js +1 -0
  342. package/.next/static/chunks/app/docs/page-097827ec4dae1d30.js +1 -0
  343. package/.next/static/chunks/app/executions/page-cb0dcc66d84c9bf8.js +1 -0
  344. package/.next/static/chunks/app/flows/page-abdd0642e378c5da.js +1 -0
  345. package/.next/static/chunks/app/mcp/{page-9a612d0be5a3336d.js → page-7d3a269dce68b529.js} +1 -1
  346. package/.next/static/chunks/app/mcp-flows/route-b296683a5faf800a.js +1 -0
  347. package/.next/static/chunks/app/mcp-proxy/[server]/route-b296683a5faf800a.js +1 -0
  348. package/.next/static/chunks/app/v1/chat/completions/route-b296683a5faf800a.js +1 -0
  349. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/breakpoints/route-b296683a5faf800a.js +1 -0
  350. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/cancel/route-b296683a5faf800a.js +1 -0
  351. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/debug/continue/route-b296683a5faf800a.js +1 -0
  352. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/debug/step/route-b296683a5faf800a.js +1 -0
  353. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/edit-state/route-b296683a5faf800a.js +1 -0
  354. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/events/route-b296683a5faf800a.js +1 -0
  355. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/resources/route-b296683a5faf800a.js +1 -0
  356. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/respond/route-b296683a5faf800a.js +1 -0
  357. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/route-b296683a5faf800a.js +1 -0
  358. package/.next/static/chunks/app/v1/chat/conversations/route-b296683a5faf800a.js +1 -0
  359. package/.next/static/chunks/app/v1/models/route-b296683a5faf800a.js +1 -0
  360. package/.next/static/chunks/webpack-ef5b2cef70829f42.js +1 -0
  361. package/.next/trace +9 -7
  362. package/.next/types/app/v1/chat/conversations/[conversationId]/resources/route.ts +347 -0
  363. package/.next/types/routes.d.ts +2 -1
  364. package/.next/types/validator.ts +9 -0
  365. package/README.md +1 -1
  366. package/package.json +1 -1
  367. package/.next/server/chunks/2194.js +0 -1
  368. package/.next/server/chunks/3648.js +0 -1
  369. package/.next/server/chunks/4239.js +0 -1
  370. package/.next/server/chunks/4372.js +0 -1
  371. package/.next/server/chunks/4681.js +0 -1
  372. package/.next/server/chunks/5148.js +0 -1
  373. package/.next/server/chunks/6465.js +0 -1
  374. package/.next/server/chunks/7403.js +0 -38
  375. package/.next/server/chunks/7865.js +0 -9
  376. package/.next/static/chunks/1711-ccf5eba61d618a1a.js +0 -1
  377. package/.next/static/chunks/3625-74c77250d64d1cd3.js +0 -1
  378. package/.next/static/chunks/924-64f908860caf1a35.js +0 -1
  379. package/.next/static/chunks/app/api/backup/route-ff084c1cc278df77.js +0 -1
  380. package/.next/static/chunks/app/api/browse/route-ff084c1cc278df77.js +0 -1
  381. package/.next/static/chunks/app/api/cwd/route-ff084c1cc278df77.js +0 -1
  382. package/.next/static/chunks/app/api/encryption/secure/route-ff084c1cc278df77.js +0 -1
  383. package/.next/static/chunks/app/api/env/route-ff084c1cc278df77.js +0 -1
  384. package/.next/static/chunks/app/api/flow/[id]/route-ff084c1cc278df77.js +0 -1
  385. package/.next/static/chunks/app/api/flow/compile/route-ff084c1cc278df77.js +0 -1
  386. package/.next/static/chunks/app/api/flow/generate/route-ff084c1cc278df77.js +0 -1
  387. package/.next/static/chunks/app/api/flow/improve/route-ff084c1cc278df77.js +0 -1
  388. package/.next/static/chunks/app/api/flow/prompt-renderer/route-ff084c1cc278df77.js +0 -1
  389. package/.next/static/chunks/app/api/flow/quick-chat/route-ff084c1cc278df77.js +0 -1
  390. package/.next/static/chunks/app/api/flow/repair/route-ff084c1cc278df77.js +0 -1
  391. package/.next/static/chunks/app/api/flow/route-ff084c1cc278df77.js +0 -1
  392. package/.next/static/chunks/app/api/git/route-ff084c1cc278df77.js +0 -1
  393. package/.next/static/chunks/app/api/init/route-ff084c1cc278df77.js +0 -1
  394. package/.next/static/chunks/app/api/local-models/capability/route-ff084c1cc278df77.js +0 -1
  395. package/.next/static/chunks/app/api/local-models/pull/route-ff084c1cc278df77.js +0 -1
  396. package/.next/static/chunks/app/api/local-models/suggest/route-ff084c1cc278df77.js +0 -1
  397. package/.next/static/chunks/app/api/mcp/cancel/route-ff084c1cc278df77.js +0 -1
  398. package/.next/static/chunks/app/api/mcp/servers/[name]/prompts/get/route-ff084c1cc278df77.js +0 -1
  399. package/.next/static/chunks/app/api/mcp/servers/[name]/prompts/route-ff084c1cc278df77.js +0 -1
  400. package/.next/static/chunks/app/api/mcp/servers/[name]/resources/read/route-ff084c1cc278df77.js +0 -1
  401. package/.next/static/chunks/app/api/mcp/servers/[name]/resources/route-ff084c1cc278df77.js +0 -1
  402. package/.next/static/chunks/app/api/mcp/servers/[name]/route-ff084c1cc278df77.js +0 -1
  403. package/.next/static/chunks/app/api/mcp/servers/[name]/status/route-ff084c1cc278df77.js +0 -1
  404. package/.next/static/chunks/app/api/mcp/servers/[name]/tools/[toolName]/route-ff084c1cc278df77.js +0 -1
  405. package/.next/static/chunks/app/api/mcp/servers/[name]/tools/route-ff084c1cc278df77.js +0 -1
  406. package/.next/static/chunks/app/api/mcp/servers/route-ff084c1cc278df77.js +0 -1
  407. package/.next/static/chunks/app/api/mcp/test-connection/route-ff084c1cc278df77.js +0 -1
  408. package/.next/static/chunks/app/api/mcp/test-connection/stream/route-ff084c1cc278df77.js +0 -1
  409. package/.next/static/chunks/app/api/mcp-registry/route-ff084c1cc278df77.js +0 -1
  410. package/.next/static/chunks/app/api/mcp-registry/spotlight/route-ff084c1cc278df77.js +0 -1
  411. package/.next/static/chunks/app/api/model/[id]/route-ff084c1cc278df77.js +0 -1
  412. package/.next/static/chunks/app/api/model/provider/route-ff084c1cc278df77.js +0 -1
  413. package/.next/static/chunks/app/api/model/route-ff084c1cc278df77.js +0 -1
  414. package/.next/static/chunks/app/api/model/test/route-ff084c1cc278df77.js +0 -1
  415. package/.next/static/chunks/app/api/oauth/callback/route-ff084c1cc278df77.js +0 -1
  416. package/.next/static/chunks/app/api/oauth/initiate/route-ff084c1cc278df77.js +0 -1
  417. package/.next/static/chunks/app/api/oauth/reset/route-ff084c1cc278df77.js +0 -1
  418. package/.next/static/chunks/app/api/planned-executions/[id]/route-ff084c1cc278df77.js +0 -1
  419. package/.next/static/chunks/app/api/planned-executions/[id]/run/route-ff084c1cc278df77.js +0 -1
  420. package/.next/static/chunks/app/api/planned-executions/[id]/runs/route-ff084c1cc278df77.js +0 -1
  421. package/.next/static/chunks/app/api/planned-executions/preview-schedule/route-ff084c1cc278df77.js +0 -1
  422. package/.next/static/chunks/app/api/planned-executions/route-ff084c1cc278df77.js +0 -1
  423. package/.next/static/chunks/app/api/restore/route-ff084c1cc278df77.js +0 -1
  424. package/.next/static/chunks/app/api/storage/route-ff084c1cc278df77.js +0 -1
  425. package/.next/static/chunks/app/api/update/route-ff084c1cc278df77.js +0 -1
  426. package/.next/static/chunks/app/api/webhooks/[id]/route-ff084c1cc278df77.js +0 -1
  427. package/.next/static/chunks/app/chat/page-1d764d1de5ad5d2f.js +0 -1
  428. package/.next/static/chunks/app/docs/page-d670c1ec8af5cb54.js +0 -1
  429. package/.next/static/chunks/app/executions/page-109274291811d467.js +0 -1
  430. package/.next/static/chunks/app/flows/page-df8eda0e83934fb2.js +0 -1
  431. package/.next/static/chunks/app/mcp-flows/route-ff084c1cc278df77.js +0 -1
  432. package/.next/static/chunks/app/mcp-proxy/[server]/route-ff084c1cc278df77.js +0 -1
  433. package/.next/static/chunks/app/v1/chat/completions/route-ff084c1cc278df77.js +0 -1
  434. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/breakpoints/route-ff084c1cc278df77.js +0 -1
  435. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/cancel/route-ff084c1cc278df77.js +0 -1
  436. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/debug/continue/route-ff084c1cc278df77.js +0 -1
  437. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/debug/step/route-ff084c1cc278df77.js +0 -1
  438. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/edit-state/route-ff084c1cc278df77.js +0 -1
  439. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/events/route-ff084c1cc278df77.js +0 -1
  440. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/respond/route-ff084c1cc278df77.js +0 -1
  441. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/route-ff084c1cc278df77.js +0 -1
  442. package/.next/static/chunks/app/v1/chat/conversations/route-ff084c1cc278df77.js +0 -1
  443. package/.next/static/chunks/app/v1/models/route-ff084c1cc278df77.js +0 -1
  444. package/.next/static/chunks/webpack-3e8560996ac8c1e0.js +0 -1
  445. /package/.next/static/{itJEX_uJ7hJ7oF-igwwK9 → dvSaKx6-EfRNi7Xj-cSv_}/_buildManifest.js +0 -0
  446. /package/.next/static/{itJEX_uJ7hJ7oF-igwwK9 → dvSaKx6-EfRNi7Xj-cSv_}/_ssgManifest.js +0 -0
@@ -0,0 +1 @@
1
+ exports.id=289,exports.ids=[289],exports.modules={3676:(a,b,c)=>{"use strict";c.d(b,{Wj:()=>h,ln:()=>g});var d=c(10641),e=c(58739);let f="encryption_locked";async function g(){return(0,e.isEncryptionLocked)()}async function h(a){return await g()?a?.openai?d.NextResponse.json({error:{message:"Encryption is locked. Unlock FLUJO to continue.",type:f,code:f,param:null}},{status:423}):d.NextResponse.json({error:f},{status:423}):null}},37426:(a,b,c)=>{"use strict";c.r(b),c.d(b,{"40ec842092ea232b6d4aa599a380d422184da5e1ca":()=>d.c,"602ea7ca289a8eaa1000fb321a71e292e6c766b6bb":()=>d.G});var d=c(73456)},42398:(a,b,c)=>{"use strict";c.d(b,{QE:()=>l,_u:()=>n,aZ:()=>k,qf:()=>o,v5:()=>j,xK:()=>m,xV:()=>p});var d=c(50846),e=c(23514),f=c(3676);let g=(0,d.h)("backend/services/mcp/proxyForward"),h="FLUJO encryption is locked (encryption_locked). Unlock FLUJO to continue.",i=new Set(["localhost","127.0.0.1","::1"]);function j(a,b){let c=function(a){if(!a)return null;let b=a.trim();if(b.startsWith("[")){let a=b.indexOf("]");return a>0?b.slice(1,a):null}return b.split(":")[0]||null}(a);if(!c||!i.has(c))return!1;if(b)try{if(!i.has(new URL(b).hostname))return!1}catch{return!1}return!0}async function k(a){let b=await e.mcpService.loadServerConfigs();if(!Array.isArray(b))return g.warn("isServerExposed: failed to load server configs",{error:b.error}),!1;let c=b.find(b=>b.name===a);return!!c&&!c.disabled&&!0===c.exposeAsMcpServer}async function l(a){if(await (0,f.ln)())throw Error(h);let b=await e.mcpService.connectServer(a);if(!b.success)throw Error(`Failed to connect to MCP server '${a}': ${b.error}`);let c=await e.mcpService.listServerTools(a);if(c.error)throw Error(`Failed to list tools for '${a}': ${c.error}`);return{tools:c.tools??[]}}async function m(a,b,c){if(await (0,f.ln)())return{content:[{type:"text",text:h}],isError:!0};let d=await e.mcpService.connectServer(a);if(!d.success)return{content:[{type:"text",text:`Error connecting to '${a}': ${d.error}`}],isError:!0};let g=await e.mcpService.callTool(a,b,c);return g.success?g.data:{content:[{type:"text",text:`Error: ${g.error??"Unknown error"}`}],isError:!0}}async function n(a){if(await (0,f.ln)())throw Error(h);let b=await e.mcpService.connectServer(a);if(!b.success)throw Error(`Failed to connect to MCP server '${a}': ${b.error}`);let c=await e.mcpService.listServerResources(a);if(c.error)throw Error(`Failed to list resources for '${a}': ${c.error}`);return{resources:c.resources??[]}}async function o(a){if(await (0,f.ln)())throw Error(h);let b=await e.mcpService.connectServer(a);if(!b.success)throw Error(`Failed to connect to MCP server '${a}': ${b.error}`);let c=await e.mcpService.listServerResourceTemplates(a);if(c.error)throw Error(`Failed to list resource templates for '${a}': ${c.error}`);return{resourceTemplates:c.resourceTemplates??[]}}async function p(a,b){if(await (0,f.ln)())throw Error(h);let c=await e.mcpService.connectServer(a);if(!c.success)throw Error(`Failed to connect to MCP server '${a}': ${c.error}`);let d=await e.mcpService.readResource(a,b);if(!d.success||!d.data)throw Error(`Failed to read resource '${b}' from '${a}': ${d.error??"unknown error"}`);return d.data}},73456:(a,b,c)=>{"use strict";c.d(b,{G:()=>l,c:()=>k});var d=c(75879);c(68633);var e=c(50846),f=c(92372),g=c(46480),h=c(58739),i=c(51669);let j=(0,e.h)("backend/utils/resolveGlobalVars");async function k(a){j.debug("Entering resolveGlobalVars method");let b=await (0,f.YM)(g.Z.GLOBAL_ENV_VARS,{}),c=function(a){if(!a||"object"!=typeof a)return!1;let b=Object.keys(a);if(0===b.length)return!0;let c=a[b[0]];return c&&"object"==typeof c&&"value"in c&&"metadata"in c&&"object"==typeof c.metadata&&"isSecret"in c.metadata}(b);j.debug(`Loaded ${Object.keys(b).length} global environment variables (${c?"new":"old"} format)`);let d={};if(c)for(let[a,c]of Object.entries(b))d[a]=c.value;else d={...b};let e=async a=>{let b=a.match(/\$\{global:([^}]+)\}/g);if(!b)return a;let c=a;for(let a of b){let b=a.substring(9,a.length-1);if(void 0!==d[b]){let e=d[b];if(e.startsWith("encrypted:")){j.debug(`Decrypting encrypted global variable: ${b}`);try{let a=e.substring(10),c=await (0,h.decryptWithPassword)(a);if(c)e=c,j.debug(`Successfully decrypted global variable: ${b}`);else{j.warn(`Failed to decrypt global variable: ${b}`);continue}}catch(a){j.error(`Error decrypting global variable: ${b}`,a);continue}}else if(e.startsWith("encrypted_failed:")){j.warn(`Skipping failed encrypted global variable: ${b}`);continue}j.debug(`Resolved global variable: ${b}`),c=c.replace(a,e)}else j.warn(`Global variable not found: ${b}`)}return c},i=async a=>{if("string"==typeof a)return await e(a);if(Array.isArray(a))return await Promise.all(a.map(a=>i(a)));if(null!==a&&"object"==typeof a){let b={};for(let[c,d]of Object.entries(a))b[c]=await i(d);return b}return a},k=await i(a);return"object"==typeof a&&null!==a&&j.debug("Resolved global variables result:",JSON.stringify(k,null,2)),j.debug("Completed global variable resolution"),k}async function l(a,b=0){if(j.debug(`Entering resolveAndDecryptApiKey method (depth: ${b})`),!a)return j.warn("Empty value provided"),null;if(b>=10)return j.warn(`Maximum resolution depth reached (10) for value: ${a}`),a;let c=a;if(c.startsWith("encrypted:")){j.debug(`Decrypting encrypted value at depth ${b}`);try{let a=c.substring(10),d=await (0,h.decryptWithPassword)(a);if(!d)return j.warn(`Failed to decrypt value at depth ${b}`),null;j.debug(`Successfully decrypted value at depth ${b}`),j.verbose(d),c=d}catch(a){return j.error(`Error decrypting value at depth ${b}:`,a),null}}else c.startsWith("encrypted_failed:")&&(j.warn(`Skipping failed encrypted value at depth ${b}`),c=c.substring(17));if(c.includes("${global:")){j.debug(`Resolving global variables at depth ${b}`);try{let a=await k(c);if(j.verbose(a),a!==c)return j.debug(`Value changed after resolving globals at depth ${b}, processing recursively`),l(a,b+1);c=a}catch(a){return j.error(`Error resolving global variables at depth ${b}:`,a),null}}return j.debug(`Completed resolveAndDecryptApiKey at depth ${b}`),c}(0,i.D)([k,l]),(0,d.A)(k,"40ec842092ea232b6d4aa599a380d422184da5e1ca",null),(0,d.A)(l,"602ea7ca289a8eaa1000fb321a71e292e6c766b6bb",null)},78335:()=>{},96487:()=>{}};
@@ -1,6 +1,6 @@
1
- exports.id=3574,exports.ids=[3574,3953,7821],exports.modules={3676:(a,b,c)=>{"use strict";c.d(b,{Wj:()=>h,ln:()=>g});var d=c(10641),e=c(58739);let f="encryption_locked";async function g(){return(0,e.isEncryptionLocked)()}async function h(a){return await g()?a?.openai?d.NextResponse.json({error:{message:"Encryption is locked. Unlock FLUJO to continue.",type:f,code:f,param:null}},{status:423}):d.NextResponse.json({error:f},{status:423}):null}},37426:(a,b,c)=>{"use strict";c.r(b),c.d(b,{"40ec842092ea232b6d4aa599a380d422184da5e1ca":()=>d.c,"602ea7ca289a8eaa1000fb321a71e292e6c766b6bb":()=>d.G});var d=c(73456)},48312:(a,b,c)=>{"use strict";c.d(b,{cA:()=>p});var d=c(10641),e=c(50846),f=c(77865),g=c(38291),h=c(99978),i=c(57214),j=c(14214),k=c(20433);let l=(0,e.h)("app/v1/chat/completions/chatCompletionService");function m(a){return Math.ceil((a||"").length/4)}let n=g.n;async function o(a,b,c,e,f,g=!1,j=!1){let k=Date.now();l.info("Processing chat completion request",{model:a.model,messageCount:a.messages?.length||0,stream:a.stream,flujo:b,requireApproval:c,flujodebug:e,conversationId:f});let n=await (0,i.runFlow)({modelName:a.model,messages:a.messages,processNodeId:a.processNodeId,mode:"conversation",conversationId:f,flujo:b,requireApproval:c,debug:e,continueDebug:g,userTurn:j});if(n.flowNotFound)return d.NextResponse.json({error:{message:`Flow not found: ${n.flowNotFound.name}`,type:"invalid_request_error",code:"flow_not_found"}},{status:400});if("paused_debug"===n.status)return l.info(`Returning paused debug state for conv ${n.conversationId}`),d.NextResponse.json({status:"paused_debug",conversation_id:n.conversationId,debugState:n.sharedState});if("error"===n.status){let a=n.error?.message??"Unknown error during execution",b=n.error?.details??{message:a},c=n.error?.statusCode??500;return l.error(`Returning error response for conv ${n.conversationId}`,{errorMessage:a,errorDetails:b,statusCode:c}),d.NextResponse.json({error:{message:a,type:b.type||"api_error",code:b.code||"internal_error",param:b.param,details:b}},{status:c})}let p={role:"assistant",content:n.outputText,tool_calls:n.toolCalls},q="stop";"awaiting_tool_approval"===n.sharedState.status?q="stop":n.finalAction===h.Jp&&p.tool_calls&&p.tool_calls.length>0?q="tool_calls":n.finalAction===h.E5&&(q="length");let r=m(n.messages.map(a=>a.content||"").join("\n")),s=m(n.outputText),t={id:`chatcmpl-${Date.now()}`,object:"chat.completion",created:Math.floor(k/1e3),model:a.model,choices:[{index:0,message:p,finish_reason:q}],usage:{prompt_tokens:r,completion_tokens:s,total_tokens:r+s},messages:n.messages,conversation_id:n.conversationId,status:n.sharedState.status||(n.finalAction===h.g4?"completed":"running"),pendingToolCalls:n.sharedState.pendingToolCalls};return l.info(`Returning success response for conv ${n.conversationId}`,{action:n.finalAction,status:t.status,flujo:b,requireApproval:c,flujodebug:e,finish_reason:q}),l.verbose(`Final response data for conv ${n.conversationId}`,t),d.NextResponse.json(t)}async function p(a,b,c,d,e,g=!1,h=!1){if("string"==typeof a.model&&a.model.startsWith("model-"))return(b||c||d||e)&&l.debug("Ignoring flow-only flags on a direct model completion",{flujo:b,requireApproval:c,flujodebug:d,conversationId:e}),q(a);if(!0!==a.stream)return o(a,b,c,d,e,g,h);{let i=e||crypto.randomUUID();return l.info(`Streaming requested for conversation ${i}. Starting async processing.`),o(a,b,c,d,i,g,h).catch(a=>{l.error(`Error in background processing for conversation ${i}:`,a);let b=f.FlowExecutor.conversationStates.get(i);b&&(b.status="error",b.lastResponse={success:!1,error:a instanceof Error?a.message:String(a)},f.FlowExecutor.conversationStates.set(i,b),n(`conversations/${i}`,b).catch(a=>{l.error(`Failed to save error state for conversation ${i}:`,a)})),j.$.emitterFor(i)({type:"run:done",status:"error"})}),function(a,b){let c=new TextEncoder,d=`chatcmpl-${Date.now()}`,e=Math.floor(Date.now()/1e3);return l.debug("create streaming response (event-bus driven)",{conversationId:b}),new Response(new ReadableStream({start(g){let h=!1,i=null,k=-1,l=a=>{g.enqueue(c.encode(`data: ${JSON.stringify(a)}
1
+ exports.id=3574,exports.ids=[3574,3953,7821],exports.modules={3676:(a,b,c)=>{"use strict";c.d(b,{Wj:()=>h,ln:()=>g});var d=c(10641),e=c(58739);let f="encryption_locked";async function g(){return(0,e.isEncryptionLocked)()}async function h(a){return await g()?a?.openai?d.NextResponse.json({error:{message:"Encryption is locked. Unlock FLUJO to continue.",type:f,code:f,param:null}},{status:423}):d.NextResponse.json({error:f},{status:423}):null}},37426:(a,b,c)=>{"use strict";c.r(b),c.d(b,{"40ec842092ea232b6d4aa599a380d422184da5e1ca":()=>d.c,"602ea7ca289a8eaa1000fb321a71e292e6c766b6bb":()=>d.G});var d=c(73456)},48312:(a,b,c)=>{"use strict";c.d(b,{cA:()=>p});var d=c(10641),e=c(50846),f=c(44498),g=c(38291),h=c(99978),i=c(57214),j=c(14214),k=c(20433);let l=(0,e.h)("app/v1/chat/completions/chatCompletionService");function m(a){return Math.ceil((a||"").length/4)}let n=g.n;async function o(a,b,c,e,f,g=!1,j=!1){let k=Date.now();l.info("Processing chat completion request",{model:a.model,messageCount:a.messages?.length||0,stream:a.stream,flujo:b,requireApproval:c,flujodebug:e,conversationId:f});let n=await (0,i.runFlow)({modelName:a.model,messages:a.messages,processNodeId:a.processNodeId,mode:"conversation",conversationId:f,flujo:b,requireApproval:c,debug:e,continueDebug:g,userTurn:j});if(n.flowNotFound)return d.NextResponse.json({error:{message:`Flow not found: ${n.flowNotFound.name}`,type:"invalid_request_error",code:"flow_not_found"}},{status:400});if("paused_debug"===n.status)return l.info(`Returning paused debug state for conv ${n.conversationId}`),d.NextResponse.json({status:"paused_debug",conversation_id:n.conversationId,debugState:n.sharedState});if("error"===n.status){let a=n.error?.message??"Unknown error during execution",b=n.error?.details??{message:a},c=n.error?.statusCode??500;return l.error(`Returning error response for conv ${n.conversationId}`,{errorMessage:a,errorDetails:b,statusCode:c}),d.NextResponse.json({error:{message:a,type:b.type||"api_error",code:b.code||"internal_error",param:b.param,details:b}},{status:c})}let p={role:"assistant",content:n.outputText,tool_calls:n.toolCalls},q="stop";"awaiting_tool_approval"===n.sharedState.status?q="stop":n.finalAction===h.Jp&&p.tool_calls&&p.tool_calls.length>0?q="tool_calls":n.finalAction===h.E5&&(q="length");let r=m(n.messages.map(a=>a.content||"").join("\n")),s=m(n.outputText),t={id:`chatcmpl-${Date.now()}`,object:"chat.completion",created:Math.floor(k/1e3),model:a.model,choices:[{index:0,message:p,finish_reason:q}],usage:{prompt_tokens:r,completion_tokens:s,total_tokens:r+s},messages:n.messages,conversation_id:n.conversationId,status:n.sharedState.status||(n.finalAction===h.g4?"completed":"running"),pendingToolCalls:n.sharedState.pendingToolCalls};return l.info(`Returning success response for conv ${n.conversationId}`,{action:n.finalAction,status:t.status,flujo:b,requireApproval:c,flujodebug:e,finish_reason:q}),l.verbose(`Final response data for conv ${n.conversationId}`,t),d.NextResponse.json(t)}async function p(a,b,c,d,e,g=!1,h=!1){if("string"==typeof a.model&&a.model.startsWith("model-"))return(b||c||d||e)&&l.debug("Ignoring flow-only flags on a direct model completion",{flujo:b,requireApproval:c,flujodebug:d,conversationId:e}),q(a);if(!0!==a.stream)return o(a,b,c,d,e,g,h);{let i=e||crypto.randomUUID();return l.info(`Streaming requested for conversation ${i}. Starting async processing.`),o(a,b,c,d,i,g,h).catch(a=>{l.error(`Error in background processing for conversation ${i}:`,a);let b=f.FlowExecutor.conversationStates.get(i);b&&(b.status="error",b.lastResponse={success:!1,error:a instanceof Error?a.message:String(a)},f.FlowExecutor.conversationStates.set(i,b),n(`conversations/${i}`,b).catch(a=>{l.error(`Failed to save error state for conversation ${i}:`,a)})),j.$.emitterFor(i)({type:"run:done",status:"error"})}),function(a,b){let c=new TextEncoder,d=`chatcmpl-${Date.now()}`,e=Math.floor(Date.now()/1e3);return l.debug("create streaming response (event-bus driven)",{conversationId:b}),new Response(new ReadableStream({start(g){let h=!1,i=null,k=-1,l=a=>{g.enqueue(c.encode(`data: ${JSON.stringify(a)}
2
2
 
3
3
  `))},m=(b,c)=>({id:d,object:"chat.completion.chunk",created:e,model:a,choices:[{index:0,delta:b,finish_reason:c}]}),n=a=>{if(h)return;h=!0;let d="error"===a?"error":"stop";l(m({content:"",conversation:f.FlowExecutor.conversationStates.get(b)},d)),l(m({},d)),g.enqueue(c.encode("data: [DONE]\n\n")),i&&i();try{g.close()}catch{}},o=a=>{if(!h&&!(a.seq<=k))if(k=a.seq,"message"===a.type){let b=a.message;b&&"assistant"===b.role&&"string"==typeof b.content&&b.content.length>0&&l(m({content:b.content},null))}else"run:done"===a.type?n("error"===a.status?"error":"completed"):("run:awaiting_approval"===a.type||"run:paused"===a.type)&&n("stop")};for(let a of(l(m({role:"assistant",content:""},null)),i=j.$.subscribe(b,o),j.$.getBufferedSince(b,0)))o(a);if(!h){let a=f.FlowExecutor.conversationStates.get(b);a&&("completed"===a.status||"error"===a.status)&&n("error"===a.status?"error":"completed")}}}),{headers:{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive"}})}(a.model,i)}}async function q(a){let b=a.model.slice(6);l.info("Processing direct model completion",{model:a.model,messageCount:a.messages?.length||0,stream:a.stream,hasTools:!!(a.tools&&a.tools.length>0)});let c=await k.modelService.generateChatCompletion({modelIdentifier:b,messages:a.messages,temperature:a.temperature,tools:a.tools});return c.success?!0===a.stream?function(a,b){let c=new TextEncoder,d=b.id||`chatcmpl-${Date.now()}`,e=b.created||Math.floor(Date.now()/1e3),f=b.choices?.[0],g=f?.finish_reason??"stop";return new Response(new ReadableStream({start(b){let h=a=>{b.enqueue(c.encode(`data: ${JSON.stringify(a)}
4
4
 
5
5
  `))},i=(b,c)=>({id:d,object:"chat.completion.chunk",created:e,model:a,choices:[{index:0,delta:b,finish_reason:c}]});h(i({role:"assistant",content:""},null));let j="string"==typeof f?.message?.content?f.message.content:"";j.length>0&&h(i({content:j},null));let k=f?.message?.tool_calls;k&&k.length>0&&h(i({tool_calls:k.map((a,b)=>({index:b,...a}))},null)),h(i({},g)),b.enqueue(c.encode("data: [DONE]\n\n")),b.close()}}),{headers:{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive"}})}(a.model,c.completion):d.NextResponse.json(c.completion):(l.warn("Direct model completion failed",{model:a.model,code:c.error.code,statusCode:c.statusCode}),d.NextResponse.json({error:{message:c.error.message,type:c.error.type,code:c.error.code,param:c.error.param??null}},{status:c.statusCode}))}},51669:(a,b)=>{"use strict";function c(a){for(let b=0;b<a.length;b++){let c=a[b];if("function"!=typeof c)throw Object.defineProperty(Error(`A "use server" file can only export async functions, found ${typeof c}.
6
- Read more: https://nextjs.org/docs/messages/invalid-use-server-value`),"__NEXT_ERROR_CODE",{value:"E352",enumerable:!1,configurable:!0})}}Object.defineProperty(b,"D",{enumerable:!0,get:function(){return c}})},68633:(a,b,c)=>{"use strict";Object.defineProperty(b,"__esModule",{value:!0}),!function(a,b){for(var c in b)Object.defineProperty(a,c,{enumerable:!0,get:b[c]})}(b,{decryptActionBoundArgs:function(){return s},encryptActionBoundArgs:function(){return r}}),c(77925);let d=c(97954),e=c(27825),f=c(47686),g=c(77533),h=c(63033),i=c(26906),j=function(a){return a&&a.__esModule?a:{default:a}}(c(74515)),k=new TextEncoder,l=new TextDecoder,m=void 0,n=void 0;async function o(a,b){let c=await (0,g.getActionEncryptionKey)();if(void 0===c)throw Object.defineProperty(Error("Missing encryption key for Server Action. This is a bug in Next.js"),"__NEXT_ERROR_CODE",{value:"E65",enumerable:!1,configurable:!0});let d=atob(b),e=d.slice(0,16),f=d.slice(16),h=l.decode(await (0,g.decrypt)(c,(0,g.stringToUint8Array)(e),(0,g.stringToUint8Array)(f)));if(!h.startsWith(a))throw Object.defineProperty(Error("Invalid Server Action payload: failed to decrypt."),"__NEXT_ERROR_CODE",{value:"E191",enumerable:!1,configurable:!0});return h.slice(a.length)}async function p(a,b){let c=await (0,g.getActionEncryptionKey)();if(void 0===c)throw Object.defineProperty(Error("Missing encryption key for Server Action. This is a bug in Next.js"),"__NEXT_ERROR_CODE",{value:"E65",enumerable:!1,configurable:!0});let d=new Uint8Array(16);h.workUnitAsyncStorage.exit(()=>crypto.getRandomValues(d));let e=(0,g.arrayBufferToString)(d.buffer),f=await (0,g.encrypt)(c,d,k.encode(a+b));return btoa(e+(0,g.arrayBufferToString)(f))}var q=function(a){return a[a.Ready=0]="Ready",a[a.Pending=1]="Pending",a[a.Complete=2]="Complete",a}(q||{});let r=j.default.cache(async function a(b,...c){let e=h.workUnitAsyncStorage.getStore(),j=e?(0,h.getCacheSignal)(e):void 0,{clientModules:k}=(0,g.getClientReferenceManifestForRsc)(),l=Error();Error.captureStackTrace(l,a);let n=!1,o=e?(0,i.createHangingInputAbortSignal)(e):void 0,q=0;function r(){0===q&&(q=1,null==j||j.beginRead())}function s(){1===q&&(null==j||j.endRead()),q=2}o&&j&&o.addEventListener("abort",r,{once:!0});let t=await (0,f.streamToString)((0,d.renderToReadableStream)(c,k,{filterStackFrame:m,signal:o,onError(a){(null==o||!o.aborted)&&(n||(n=!0,l.message=a instanceof Error?a.message:String(a)))}}),o);if(n)throw s(),l;if(!e)return p(b,t);r();let u=(0,h.getPrerenderResumeDataCache)(e),v=(0,h.getRenderResumeDataCache)(e),w=b+t,x=(null==u?void 0:u.encryptedBoundArgs.get(w))??(null==v?void 0:v.encryptedBoundArgs.get(w));if(x)return x;let y=await p(b,t);return s(),null==u||u.encryptedBoundArgs.set(w,y),y});async function s(a,b){let c,d=await b,f=h.workUnitAsyncStorage.getStore();if(f){let b=(0,h.getCacheSignal)(f),e=(0,h.getPrerenderResumeDataCache)(f),g=(0,h.getRenderResumeDataCache)(f);(c=(null==e?void 0:e.decryptedBoundArgs.get(d))??(null==g?void 0:g.decryptedBoundArgs.get(d)))||(null==b||b.beginRead(),c=await o(a,d),null==b||b.endRead(),null==e||e.decryptedBoundArgs.set(d,c))}else c=await o(a,d);let{edgeRscModuleMapping:i,rscModuleMapping:j}=(0,g.getClientReferenceManifestForRsc)();return await (0,e.createFromReadableStream)(new ReadableStream({start(a){switch(a.enqueue(k.encode(c)),null==f?void 0:f.type){case"prerender":case"prerender-runtime":f.renderSignal.aborted?a.close():f.renderSignal.addEventListener("abort",()=>a.close(),{once:!0});break;case"prerender-client":case"prerender-ppr":case"prerender-legacy":case"request":case"cache":case"private-cache":case"unstable-cache":case void 0:return a.close()}}}),{findSourceMapURL:n,serverConsumerManifest:{moduleLoading:null,moduleMap:j,serverModuleMap:(0,g.getServerModuleMap)()}})}},73456:(a,b,c)=>{"use strict";c.d(b,{G:()=>l,c:()=>k});var d=c(75879);c(68633);var e=c(50846),f=c(92372),g=c(46480),h=c(58739),i=c(51669);let j=(0,e.h)("backend/utils/resolveGlobalVars");async function k(a){j.debug("Entering resolveGlobalVars method");let b=await (0,f.YM)(g.Z.GLOBAL_ENV_VARS,{}),c=function(a){if(!a||"object"!=typeof a)return!1;let b=Object.keys(a);if(0===b.length)return!0;let c=a[b[0]];return c&&"object"==typeof c&&"value"in c&&"metadata"in c&&"object"==typeof c.metadata&&"isSecret"in c.metadata}(b);j.debug(`Loaded ${Object.keys(b).length} global environment variables (${c?"new":"old"} format)`);let d={};if(c)for(let[a,c]of Object.entries(b))d[a]=c.value;else d={...b};let e=async a=>{let b=a.match(/\$\{global:([^}]+)\}/g);if(!b)return a;let c=a;for(let a of b){let b=a.substring(9,a.length-1);if(void 0!==d[b]){let e=d[b];if(e.startsWith("encrypted:")){j.debug(`Decrypting encrypted global variable: ${b}`);try{let a=e.substring(10),c=await (0,h.decryptWithPassword)(a);if(c)e=c,j.debug(`Successfully decrypted global variable: ${b}`);else{j.warn(`Failed to decrypt global variable: ${b}`);continue}}catch(a){j.error(`Error decrypting global variable: ${b}`,a);continue}}else if(e.startsWith("encrypted_failed:")){j.warn(`Skipping failed encrypted global variable: ${b}`);continue}j.debug(`Resolved global variable: ${b}`),c=c.replace(a,e)}else j.warn(`Global variable not found: ${b}`)}return c},i=async a=>{if("string"==typeof a)return await e(a);if(Array.isArray(a))return await Promise.all(a.map(a=>i(a)));if(null!==a&&"object"==typeof a){let b={};for(let[c,d]of Object.entries(a))b[c]=await i(d);return b}return a},k=await i(a);return"object"==typeof a&&null!==a&&j.debug("Resolved global variables result:",JSON.stringify(k,null,2)),j.debug("Completed global variable resolution"),k}async function l(a,b=0){if(j.debug(`Entering resolveAndDecryptApiKey method (depth: ${b})`),!a)return j.warn("Empty value provided"),null;if(b>=10)return j.warn(`Maximum resolution depth reached (10) for value: ${a}`),a;let c=a;if(c.startsWith("encrypted:")){j.debug(`Decrypting encrypted value at depth ${b}`);try{let a=c.substring(10),d=await (0,h.decryptWithPassword)(a);if(!d)return j.warn(`Failed to decrypt value at depth ${b}`),null;j.debug(`Successfully decrypted value at depth ${b}`),j.verbose(d),c=d}catch(a){return j.error(`Error decrypting value at depth ${b}:`,a),null}}else c.startsWith("encrypted_failed:")&&(j.warn(`Skipping failed encrypted value at depth ${b}`),c=c.substring(17));if(c.includes("${global:")){j.debug(`Resolving global variables at depth ${b}`);try{let a=await k(c);if(j.verbose(a),a!==c)return j.debug(`Value changed after resolving globals at depth ${b}, processing recursively`),l(a,b+1);c=a}catch(a){return j.error(`Error resolving global variables at depth ${b}:`,a),null}}return j.debug(`Completed resolveAndDecryptApiKey at depth ${b}`),c}(0,i.D)([k,l]),(0,d.A)(k,"40ec842092ea232b6d4aa599a380d422184da5e1ca",null),(0,d.A)(l,"602ea7ca289a8eaa1000fb321a71e292e6c766b6bb",null)},75879:(a,b,c)=>{"use strict";Object.defineProperty(b,"A",{enumerable:!0,get:function(){return d.registerServerReference}});let d=c(97954)},78335:()=>{},87821:(a,b,c)=>{"use strict";c.d(b,{flowService:()=>w});var d=c(32524),e=c(92372),f=c(46480),g=c(50846),h=c(33873),i=c.n(h),j=c(29021),k=c(43326);let l=(0,g.h)("backend/services/flow/flowVersions");function m(a){return(0,e.ln)(a),`flow-versions/${a}`}async function n(a){try{let b=m(a.id),c=Date.now(),d=`${c}-${Math.random().toString(36).slice(2,6)}`,f={versionId:d,flowId:a.id,savedAt:c,flow:a};return await (0,e.Vt)(b,d,f),await o(a.id),d}catch(b){return l.warn(`Could not archive a version of flow ${a.id}`,b),null}}async function o(a){let b=m(a),c=await (0,e.pL)(b);if(!(c.length<=25))for(let d of c.sort((a,b)=>b.savedAt-a.savedAt).slice(25))try{await (0,e.bB)(b,d.versionId)}catch(b){l.warn(`Could not prune version ${d.versionId} of flow ${a}`,b)}}async function p(a){return(await (0,e.pL)(m(a))).sort((a,b)=>b.savedAt-a.savedAt).map(a=>({versionId:a.versionId,savedAt:a.savedAt,name:a.flow?.name??"unknown",nodeCount:a.flow?.nodes?.length??0,edgeCount:a.flow?.edges?.length??0}))}async function q(a,b){try{return await (0,e.EI)(m(a),b,null)}catch(c){return l.debug(`getFlowVersion: could not load ${a}/${b}`,c),null}}async function r(a){try{(0,e.ln)(a),await j.promises.rm(i().join((0,k.ok)(),"db","flow-versions",a),{recursive:!0,force:!0})}catch(b){l.warn(`Could not remove version history of flow ${a}`,b)}}let s=(0,g.h)("backend/services/flow/index"),t=f.Z.FLOWS;async function u(){return global.__flujo_flowsMigration||(global.__flujo_flowsMigration=(async()=>{try{await (0,e.w5)(f.Z.FLOWS,t,a=>a.id)}catch(a){s.error("Flow storage migration failed",a),global.__flujo_flowsMigration=void 0}})()),global.__flujo_flowsMigration}class v{get flowsCache(){return global.__flujo_flowsCache??null}set flowsCache(a){global.__flujo_flowsCache=a}async loadFlows(){try{if(this.flowsCache)return s.debug("Using cached flows"),this.flowsCache;s.debug("Loading flows from storage"),await u();let a=await (0,e.pL)(t);return this.flowsCache=a,s.info("Loaded flows from storage",{count:a.length}),a}catch(a){return s.error("Failed to load flows",a),[]}}async getFlow(a){try{s.debug(`Getting flow by ID: ${a}`);let b=this.flowsCache?.find(b=>b.id===a)||null;if(b)return s.debug(`Flow ${a} found in cache`),b;await u();let c=null;try{c=await (0,e.EI)(t,a,null)}catch(b){s.debug(`getFlow: could not load flow ${a}`,b),c=null}if(c&&this.flowsCache){let a=this.flowsCache,b=a.findIndex(a=>a.id===c.id);b>=0?a[b]=c:a.push(c),this.flowsCache=a}return s.debug(`Flow ${a} ${c?"found":"not found"}`),c}catch(b){return s.error(`Failed to get flow ${a}`,b),null}}async invalidateExecutionCache(a){try{let{FlowExecutor:b}=await Promise.all([c.e(6996),c.e(1223),c.e(5734),c.e(1373),c.e(264),c.e(724),c.e(7865)]).then(c.bind(c,77865));b.clearFlowCache(a),s.debug("Invalidated execution flow cache",{flowId:a??"all"})}catch(a){s.warn("Failed to invalidate execution flow cache",a)}}async saveFlow(a){try{s.debug(`Saving flow: ${a.id}`,{name:a.name}),(0,e.ln)(a.id),await u();let b=null;try{b=await (0,e.EI)(t,a.id,null)}catch(b){s.debug(`saveFlow: could not read previous definition of ${a.id} for versioning`,b)}b&&JSON.stringify(b)!==JSON.stringify(a)&&await n(b),await (0,e.Vt)(t,a.id,a);let c=this.flowsCache;if(c){let b=c.findIndex(b=>b.id===a.id);b>=0?c[b]=a:c.push(a),this.flowsCache=c}return await this.invalidateExecutionCache(a.id),s.info(`Flow ${a.id} saved successfully`),{success:!0}}catch(a){return s.error("Failed to save flow",a),{success:!1,error:a instanceof Error?a.message:"Failed to save flow"}}}async deleteFlow(a){try{s.debug(`Deleting flow: ${a}`),await u(),await (0,e.bB)(t,a);let b=this.flowsCache;return b&&(this.flowsCache=b.filter(b=>b.id!==a)),await this.invalidateExecutionCache(a),await r(a),s.info(`Flow ${a} deleted successfully`),{success:!0}}catch(b){return s.error(`Failed to delete flow: ${a}`,b),{success:!1,error:b instanceof Error?b.message:"Failed to delete flow"}}}async listFlowVersions(a){return p(a)}async getFlowVersion(a,b){return q(a,b)}async revertFlow(a,b){let c=await q(a,b);return c?this.saveFlow({...c.flow,id:a}):{success:!1,error:`No version "${b}" of flow ${a}`}}createNode(a,b){s.debug(`Creating new node of type: ${a}`,{position:b});let c={id:(0,d.A)(),type:a,position:b,data:{label:`${"mcp"===a?"MCP":a.charAt(0).toUpperCase()+a.slice(1)} Node`,type:a,properties:{}}};return s.debug(`Node created with ID: ${c.id}`),c}createNewFlow(a="NewFlow"){s.debug(`Creating new flow: ${a}`);let b={id:(0,d.A)(),type:"start",position:{x:250,y:150},data:{label:"Start Node",type:"start",properties:{promptTemplate:""}}},c={id:(0,d.A)(),name:a,nodes:[b],edges:[]};return s.info(`New flow created with ID: ${c.id}`,{name:a}),c}createHistoryEntry(a,b){return s.debug("Creating history entry",{nodeCount:a.length,edgeCount:b.length}),{nodes:[...a],edges:[...b]}}generateSampleFlow(a="Sample Flow"){s.debug(`Generating sample flow: ${a}`);let b={id:(0,d.A)(),name:a,nodes:[{id:"1",type:"start",position:{x:250,y:50},data:{label:"Start Node",type:"start",properties:{prompt:"Enter your query here",systemMessage:"You are a helpful assistant",temperature:0}}},{id:"2",type:"process",position:{x:250,y:200},data:{label:"Process Node",type:"process",properties:{operation:"transform",enabled:!0}}},{id:"3",type:"finish",position:{x:250,y:350},data:{label:"Finish Node",type:"finish",properties:{format:"json",template:'{ "result": {{data}} }'}}},{id:"4",type:"mcp",position:{x:450,y:200},data:{label:"MCP Node",type:"mcp",properties:{channels:2,mode:"parallel"}}}],edges:[{id:"e1-2",source:"1",target:"2",type:"custom"},{id:"e2-3",source:"2",target:"3",type:"custom"}]};return s.info(`Sample flow generated with ID: ${b.id}`,{name:a}),b}async listFlows(){s.debug("listFlows: Entering method");try{let a=await this.loadFlows();return{success:!0,flows:a}}catch(a){return s.warn("listFlows: Failed to list flows:",a),{success:!1,error:a instanceof Error?a.message:"Failed to list flows"}}}}let w=new v},96487:()=>{}};
6
+ Read more: https://nextjs.org/docs/messages/invalid-use-server-value`),"__NEXT_ERROR_CODE",{value:"E352",enumerable:!1,configurable:!0})}}Object.defineProperty(b,"D",{enumerable:!0,get:function(){return c}})},68633:(a,b,c)=>{"use strict";Object.defineProperty(b,"__esModule",{value:!0}),!function(a,b){for(var c in b)Object.defineProperty(a,c,{enumerable:!0,get:b[c]})}(b,{decryptActionBoundArgs:function(){return s},encryptActionBoundArgs:function(){return r}}),c(77925);let d=c(97954),e=c(27825),f=c(47686),g=c(77533),h=c(63033),i=c(26906),j=function(a){return a&&a.__esModule?a:{default:a}}(c(74515)),k=new TextEncoder,l=new TextDecoder,m=void 0,n=void 0;async function o(a,b){let c=await (0,g.getActionEncryptionKey)();if(void 0===c)throw Object.defineProperty(Error("Missing encryption key for Server Action. This is a bug in Next.js"),"__NEXT_ERROR_CODE",{value:"E65",enumerable:!1,configurable:!0});let d=atob(b),e=d.slice(0,16),f=d.slice(16),h=l.decode(await (0,g.decrypt)(c,(0,g.stringToUint8Array)(e),(0,g.stringToUint8Array)(f)));if(!h.startsWith(a))throw Object.defineProperty(Error("Invalid Server Action payload: failed to decrypt."),"__NEXT_ERROR_CODE",{value:"E191",enumerable:!1,configurable:!0});return h.slice(a.length)}async function p(a,b){let c=await (0,g.getActionEncryptionKey)();if(void 0===c)throw Object.defineProperty(Error("Missing encryption key for Server Action. This is a bug in Next.js"),"__NEXT_ERROR_CODE",{value:"E65",enumerable:!1,configurable:!0});let d=new Uint8Array(16);h.workUnitAsyncStorage.exit(()=>crypto.getRandomValues(d));let e=(0,g.arrayBufferToString)(d.buffer),f=await (0,g.encrypt)(c,d,k.encode(a+b));return btoa(e+(0,g.arrayBufferToString)(f))}var q=function(a){return a[a.Ready=0]="Ready",a[a.Pending=1]="Pending",a[a.Complete=2]="Complete",a}(q||{});let r=j.default.cache(async function a(b,...c){let e=h.workUnitAsyncStorage.getStore(),j=e?(0,h.getCacheSignal)(e):void 0,{clientModules:k}=(0,g.getClientReferenceManifestForRsc)(),l=Error();Error.captureStackTrace(l,a);let n=!1,o=e?(0,i.createHangingInputAbortSignal)(e):void 0,q=0;function r(){0===q&&(q=1,null==j||j.beginRead())}function s(){1===q&&(null==j||j.endRead()),q=2}o&&j&&o.addEventListener("abort",r,{once:!0});let t=await (0,f.streamToString)((0,d.renderToReadableStream)(c,k,{filterStackFrame:m,signal:o,onError(a){(null==o||!o.aborted)&&(n||(n=!0,l.message=a instanceof Error?a.message:String(a)))}}),o);if(n)throw s(),l;if(!e)return p(b,t);r();let u=(0,h.getPrerenderResumeDataCache)(e),v=(0,h.getRenderResumeDataCache)(e),w=b+t,x=(null==u?void 0:u.encryptedBoundArgs.get(w))??(null==v?void 0:v.encryptedBoundArgs.get(w));if(x)return x;let y=await p(b,t);return s(),null==u||u.encryptedBoundArgs.set(w,y),y});async function s(a,b){let c,d=await b,f=h.workUnitAsyncStorage.getStore();if(f){let b=(0,h.getCacheSignal)(f),e=(0,h.getPrerenderResumeDataCache)(f),g=(0,h.getRenderResumeDataCache)(f);(c=(null==e?void 0:e.decryptedBoundArgs.get(d))??(null==g?void 0:g.decryptedBoundArgs.get(d)))||(null==b||b.beginRead(),c=await o(a,d),null==b||b.endRead(),null==e||e.decryptedBoundArgs.set(d,c))}else c=await o(a,d);let{edgeRscModuleMapping:i,rscModuleMapping:j}=(0,g.getClientReferenceManifestForRsc)();return await (0,e.createFromReadableStream)(new ReadableStream({start(a){switch(a.enqueue(k.encode(c)),null==f?void 0:f.type){case"prerender":case"prerender-runtime":f.renderSignal.aborted?a.close():f.renderSignal.addEventListener("abort",()=>a.close(),{once:!0});break;case"prerender-client":case"prerender-ppr":case"prerender-legacy":case"request":case"cache":case"private-cache":case"unstable-cache":case void 0:return a.close()}}}),{findSourceMapURL:n,serverConsumerManifest:{moduleLoading:null,moduleMap:j,serverModuleMap:(0,g.getServerModuleMap)()}})}},73456:(a,b,c)=>{"use strict";c.d(b,{G:()=>l,c:()=>k});var d=c(75879);c(68633);var e=c(50846),f=c(92372),g=c(46480),h=c(58739),i=c(51669);let j=(0,e.h)("backend/utils/resolveGlobalVars");async function k(a){j.debug("Entering resolveGlobalVars method");let b=await (0,f.YM)(g.Z.GLOBAL_ENV_VARS,{}),c=function(a){if(!a||"object"!=typeof a)return!1;let b=Object.keys(a);if(0===b.length)return!0;let c=a[b[0]];return c&&"object"==typeof c&&"value"in c&&"metadata"in c&&"object"==typeof c.metadata&&"isSecret"in c.metadata}(b);j.debug(`Loaded ${Object.keys(b).length} global environment variables (${c?"new":"old"} format)`);let d={};if(c)for(let[a,c]of Object.entries(b))d[a]=c.value;else d={...b};let e=async a=>{let b=a.match(/\$\{global:([^}]+)\}/g);if(!b)return a;let c=a;for(let a of b){let b=a.substring(9,a.length-1);if(void 0!==d[b]){let e=d[b];if(e.startsWith("encrypted:")){j.debug(`Decrypting encrypted global variable: ${b}`);try{let a=e.substring(10),c=await (0,h.decryptWithPassword)(a);if(c)e=c,j.debug(`Successfully decrypted global variable: ${b}`);else{j.warn(`Failed to decrypt global variable: ${b}`);continue}}catch(a){j.error(`Error decrypting global variable: ${b}`,a);continue}}else if(e.startsWith("encrypted_failed:")){j.warn(`Skipping failed encrypted global variable: ${b}`);continue}j.debug(`Resolved global variable: ${b}`),c=c.replace(a,e)}else j.warn(`Global variable not found: ${b}`)}return c},i=async a=>{if("string"==typeof a)return await e(a);if(Array.isArray(a))return await Promise.all(a.map(a=>i(a)));if(null!==a&&"object"==typeof a){let b={};for(let[c,d]of Object.entries(a))b[c]=await i(d);return b}return a},k=await i(a);return"object"==typeof a&&null!==a&&j.debug("Resolved global variables result:",JSON.stringify(k,null,2)),j.debug("Completed global variable resolution"),k}async function l(a,b=0){if(j.debug(`Entering resolveAndDecryptApiKey method (depth: ${b})`),!a)return j.warn("Empty value provided"),null;if(b>=10)return j.warn(`Maximum resolution depth reached (10) for value: ${a}`),a;let c=a;if(c.startsWith("encrypted:")){j.debug(`Decrypting encrypted value at depth ${b}`);try{let a=c.substring(10),d=await (0,h.decryptWithPassword)(a);if(!d)return j.warn(`Failed to decrypt value at depth ${b}`),null;j.debug(`Successfully decrypted value at depth ${b}`),j.verbose(d),c=d}catch(a){return j.error(`Error decrypting value at depth ${b}:`,a),null}}else c.startsWith("encrypted_failed:")&&(j.warn(`Skipping failed encrypted value at depth ${b}`),c=c.substring(17));if(c.includes("${global:")){j.debug(`Resolving global variables at depth ${b}`);try{let a=await k(c);if(j.verbose(a),a!==c)return j.debug(`Value changed after resolving globals at depth ${b}, processing recursively`),l(a,b+1);c=a}catch(a){return j.error(`Error resolving global variables at depth ${b}:`,a),null}}return j.debug(`Completed resolveAndDecryptApiKey at depth ${b}`),c}(0,i.D)([k,l]),(0,d.A)(k,"40ec842092ea232b6d4aa599a380d422184da5e1ca",null),(0,d.A)(l,"602ea7ca289a8eaa1000fb321a71e292e6c766b6bb",null)},75879:(a,b,c)=>{"use strict";Object.defineProperty(b,"A",{enumerable:!0,get:function(){return d.registerServerReference}});let d=c(97954)},78335:()=>{},87821:(a,b,c)=>{"use strict";c.d(b,{flowService:()=>w});var d=c(32524),e=c(92372),f=c(46480),g=c(50846),h=c(33873),i=c.n(h),j=c(29021),k=c(43326);let l=(0,g.h)("backend/services/flow/flowVersions");function m(a){return(0,e.ln)(a),`flow-versions/${a}`}async function n(a){try{let b=m(a.id),c=Date.now(),d=`${c}-${Math.random().toString(36).slice(2,6)}`,f={versionId:d,flowId:a.id,savedAt:c,flow:a};return await (0,e.Vt)(b,d,f),await o(a.id),d}catch(b){return l.warn(`Could not archive a version of flow ${a.id}`,b),null}}async function o(a){let b=m(a),c=await (0,e.pL)(b);if(!(c.length<=25))for(let d of c.sort((a,b)=>b.savedAt-a.savedAt).slice(25))try{await (0,e.bB)(b,d.versionId)}catch(b){l.warn(`Could not prune version ${d.versionId} of flow ${a}`,b)}}async function p(a){return(await (0,e.pL)(m(a))).sort((a,b)=>b.savedAt-a.savedAt).map(a=>({versionId:a.versionId,savedAt:a.savedAt,name:a.flow?.name??"unknown",nodeCount:a.flow?.nodes?.length??0,edgeCount:a.flow?.edges?.length??0}))}async function q(a,b){try{return await (0,e.EI)(m(a),b,null)}catch(c){return l.debug(`getFlowVersion: could not load ${a}/${b}`,c),null}}async function r(a){try{(0,e.ln)(a),await j.promises.rm(i().join((0,k.ok)(),"db","flow-versions",a),{recursive:!0,force:!0})}catch(b){l.warn(`Could not remove version history of flow ${a}`,b)}}let s=(0,g.h)("backend/services/flow/index"),t=f.Z.FLOWS;async function u(){return global.__flujo_flowsMigration||(global.__flujo_flowsMigration=(async()=>{try{await (0,e.w5)(f.Z.FLOWS,t,a=>a.id)}catch(a){s.error("Flow storage migration failed",a),global.__flujo_flowsMigration=void 0}})()),global.__flujo_flowsMigration}class v{get flowsCache(){return global.__flujo_flowsCache??null}set flowsCache(a){global.__flujo_flowsCache=a}async loadFlows(){try{if(this.flowsCache)return s.debug("Using cached flows"),this.flowsCache;s.debug("Loading flows from storage"),await u();let a=await (0,e.pL)(t);return this.flowsCache=a,s.info("Loaded flows from storage",{count:a.length}),a}catch(a){return s.error("Failed to load flows",a),[]}}async getFlow(a){try{s.debug(`Getting flow by ID: ${a}`);let b=this.flowsCache?.find(b=>b.id===a)||null;if(b)return s.debug(`Flow ${a} found in cache`),b;await u();let c=null;try{c=await (0,e.EI)(t,a,null)}catch(b){s.debug(`getFlow: could not load flow ${a}`,b),c=null}if(c&&this.flowsCache){let a=this.flowsCache,b=a.findIndex(a=>a.id===c.id);b>=0?a[b]=c:a.push(c),this.flowsCache=a}return s.debug(`Flow ${a} ${c?"found":"not found"}`),c}catch(b){return s.error(`Failed to get flow ${a}`,b),null}}async invalidateExecutionCache(a){try{let{FlowExecutor:b}=await Promise.all([c.e(6996),c.e(1223),c.e(5734),c.e(1373),c.e(264),c.e(724),c.e(4498)]).then(c.bind(c,44498));b.clearFlowCache(a),s.debug("Invalidated execution flow cache",{flowId:a??"all"})}catch(a){s.warn("Failed to invalidate execution flow cache",a)}}async saveFlow(a){try{s.debug(`Saving flow: ${a.id}`,{name:a.name}),(0,e.ln)(a.id),await u();let b=null;try{b=await (0,e.EI)(t,a.id,null)}catch(b){s.debug(`saveFlow: could not read previous definition of ${a.id} for versioning`,b)}b&&JSON.stringify(b)!==JSON.stringify(a)&&await n(b),await (0,e.Vt)(t,a.id,a);let c=this.flowsCache;if(c){let b=c.findIndex(b=>b.id===a.id);b>=0?c[b]=a:c.push(a),this.flowsCache=c}return await this.invalidateExecutionCache(a.id),s.info(`Flow ${a.id} saved successfully`),{success:!0}}catch(a){return s.error("Failed to save flow",a),{success:!1,error:a instanceof Error?a.message:"Failed to save flow"}}}async deleteFlow(a){try{s.debug(`Deleting flow: ${a}`),await u(),await (0,e.bB)(t,a);let b=this.flowsCache;return b&&(this.flowsCache=b.filter(b=>b.id!==a)),await this.invalidateExecutionCache(a),await r(a),s.info(`Flow ${a} deleted successfully`),{success:!0}}catch(b){return s.error(`Failed to delete flow: ${a}`,b),{success:!1,error:b instanceof Error?b.message:"Failed to delete flow"}}}async listFlowVersions(a){return p(a)}async getFlowVersion(a,b){return q(a,b)}async revertFlow(a,b){let c=await q(a,b);return c?this.saveFlow({...c.flow,id:a}):{success:!1,error:`No version "${b}" of flow ${a}`}}createNode(a,b){s.debug(`Creating new node of type: ${a}`,{position:b});let c={id:(0,d.A)(),type:a,position:b,data:{label:`${"mcp"===a?"MCP":a.charAt(0).toUpperCase()+a.slice(1)} Node`,type:a,properties:{}}};return s.debug(`Node created with ID: ${c.id}`),c}createNewFlow(a="NewFlow"){s.debug(`Creating new flow: ${a}`);let b={id:(0,d.A)(),type:"start",position:{x:250,y:150},data:{label:"Start Node",type:"start",properties:{promptTemplate:""}}},c={id:(0,d.A)(),name:a,nodes:[b],edges:[]};return s.info(`New flow created with ID: ${c.id}`,{name:a}),c}createHistoryEntry(a,b){return s.debug("Creating history entry",{nodeCount:a.length,edgeCount:b.length}),{nodes:[...a],edges:[...b]}}generateSampleFlow(a="Sample Flow"){s.debug(`Generating sample flow: ${a}`);let b={id:(0,d.A)(),name:a,nodes:[{id:"1",type:"start",position:{x:250,y:50},data:{label:"Start Node",type:"start",properties:{prompt:"Enter your query here",systemMessage:"You are a helpful assistant",temperature:0}}},{id:"2",type:"process",position:{x:250,y:200},data:{label:"Process Node",type:"process",properties:{operation:"transform",enabled:!0}}},{id:"3",type:"finish",position:{x:250,y:350},data:{label:"Finish Node",type:"finish",properties:{format:"json",template:'{ "result": {{data}} }'}}},{id:"4",type:"mcp",position:{x:450,y:200},data:{label:"MCP Node",type:"mcp",properties:{channels:2,mode:"parallel"}}}],edges:[{id:"e1-2",source:"1",target:"2",type:"custom"},{id:"e2-3",source:"2",target:"3",type:"custom"}]};return s.info(`Sample flow generated with ID: ${b.id}`,{name:a}),b}async listFlows(){s.debug("listFlows: Entering method");try{let a=await this.loadFlows();return{success:!0,flows:a}}catch(a){return s.warn("listFlows: Failed to list flows:",a),{success:!1,error:a instanceof Error?a.message:"Failed to list flows"}}}}let w=new v},96487:()=>{}};
@@ -1,4 +1,4 @@
1
- "use strict";exports.id=3310,exports.ids=[3310],exports.modules={5248:(a,b,c)=>{c.d(b,{P:()=>l,p:()=>j});var d=c(32524),e=c(81226);function f(a){return!!a&&a.includes("mcp")}let g=a=>({source:`${a}-bottom`,target:`${a}-top`});function h(a,b){let c=a.filter(a=>"mcp"!==a.type&&"string"==typeof a.id),d=new Map(c.map(a=>[a.id,a])),e=new Map,h=new Map,i=new Set;for(let a of c)e.set(a.id,0),h.set(a.id,0);let j=(a,b)=>{i.add(`${a}->${b}`),h.set(a,(h.get(a)??0)+1),e.set(b,(e.get(b)??0)+1)};for(let a of b)d.has(a.from)&&d.has(a.to)&&a.from!==a.to&&(j(a.from,a.to),a.bidirectional&&j(a.to,a.from));let k=[];for(let a of[...c].sort((a,b)=>a.y-b.y||a.x-b.x)){let b=k[k.length-1];b&&70>=Math.abs(a.y-b[0].y)?b.push(a):k.push([a])}let l=new Map;k.forEach((a,b)=>a.forEach(a=>l.set(a.id,b)));let m=new Map;for(let a=1;a<k.length;a++){let b=k[a],c=b.filter(a=>"subflow"===a.type);if(c.length>=2&&c.length===b.length){let b=k[a-1];if(1===b.length&&"process"===b[0].type)for(let a of c)m.set(a.id,b[0].id)}}let n=[],o=(a,b)=>{if(a===b||i.has(`${a}->${b}`))return!1;let c=d.get(a),e=d.get(b);return!(!c||!e||null!==function(a,b,c,d){if("start"===c)return"Start nodes cannot have incoming connections";if("finish"===a)return"Finish nodes cannot have outgoing connections";if("mcp"===a||"mcp"===c||f(b)||f(d)){if(("mcp"!==a||"process"!==c)&&("process"!==a||"mcp"!==c))return"MCP connections must link an MCP node to a Process node via MCP handles";if("process"===a&&!f(b))return"Connect MCP nodes from the Process node's left/right MCP handles"}return null}(c.type,g(c.type).source,e.type,g(e.type).target)||"subflow"===c.type&&(h.get(a)??0)>=1)},p=(a,b,c,d)=>{n.push({from:a,to:b,bidirectional:c,reason:d}),j(a,b),c&&j(b,a)},q=a=>{let b=l.get(a.id)??0;for(let c=b-1;c>=0;c--){let b=k[c].filter(b=>b.id!==a.id&&"finish"!==b.type&&!m.has(b.id));if(0!==b.length){if(1===b.length)return b[0];return b.reduce((b,c)=>Math.abs(c.x-a.x)<Math.abs(b.x-a.x)?c:b)}}return null};for(let a of k)for(let b of a){if("start"===b.type||(e.get(b.id)??0)>0)continue;let a=m.get(b.id);if(a){o(a,b.id)&&p(a,b.id,!0,"auto-bidirectional-subflow");continue}let c=q(b);c&&o(c.id,b.id)&&p(c.id,b.id,!1,"auto-connected")}let r=c.filter(a=>"start"===a.type),s=()=>c.filter(a=>"start"!==a.type&&"finish"!==a.type&&!m.has(a.id)&&(e.get(a.id)??0)===0),t=null;if(0===r.length){let a=s();if(a.length>0)t={targets:a.map(a=>a.id)};else{let a=c.filter(a=>"finish"!==a.type).sort((a,b)=>a.y-b.y)[0];a&&(t={targets:[a.id]})}}else{let a=r[0];for(let b of s())o(a.id,b.id)&&p(a.id,b.id,!1,"auto-connected")}let u=c.filter(a=>"finish"===a.type),v=()=>c.filter(a=>"start"!==a.type&&"finish"!==a.type&&!m.has(a.id)&&(h.get(a.id)??0)===0),w=null;if(0===u.length){let a=v();a.length>0&&(w={sources:a.map(a=>a.id)})}else{let a=u[0];for(let b of v())o(b.id,a.id)&&p(b.id,a.id,!1,"auto-connected")}return{addEdges:n,addStart:t,addFinish:w}}function i(a,b){if(!b.has(a))return a;for(let c=2;;c++){let d=`${a}_${c}`;if(!b.has(d))return d}}function j(a){let b=[];return{spec:function a(b,c){let d=Array.isArray(b?.nodes)?b.nodes.map(a=>({...a})):[],e=Array.isArray(b?.edges)?b.edges.map(a=>({...a})):[];for(let b of d)b?.type==="subflow"&&b.subflowSpec&&(b.subflowSpec=a(b.subflowSpec,c));let f=d.filter(a=>a&&"string"==typeof a.key&&!!a.key&&"mcp"!==a.type);if(0===f.length)return{...b,nodes:d,edges:e};let g=h(f.map((a,b)=>({id:a.key,type:a.type,x:0,y:1e3*b})),e.filter(a=>a&&"string"==typeof a.from&&"string"==typeof a.to).map(a=>({from:a.from,to:a.to,bidirectional:!0===a.bidirectional})));for(let a of g.addEdges)e.push({from:a.from,to:a.to,...a.bidirectional?{bidirectional:!0}:{}}),c.push({code:a.reason,message:m(a.reason),nodeId:a.to});let j=new Set(d.map(a=>a.key).filter(Boolean));if(g.addStart){let a=i("start",j);for(let b of(j.add(a),d.unshift({key:a,type:"start"}),g.addStart.targets))e.push({from:a,to:b});c.push({code:"auto-added-start",message:`Added a Start node connected to ${g.addStart.targets.length} entry step(s).`})}if(g.addFinish){let a=i("finish",j);for(let b of(j.add(a),d.push({key:a,type:"finish"}),g.addFinish.sources))e.push({from:b,to:a});c.push({code:"auto-added-finish",message:`Added a Finish node connected from ${g.addFinish.sources.length} final step(s).`})}return{...b,nodes:d,edges:e}}(a,b),changes:b}}function k(a){return a.data?.type??a.type??"unknown"}function l(a){var b,c;let f=(a?.nodes??[]).map(a=>({...a,position:{...a.position??{x:0,y:0}},data:{...a.data}})),g=[...a?.edges??[]],i={...a,nodes:f,edges:g},j=[],l=h(f.filter(a=>"mcp"!==k(a)).map(a=>({id:a.id,type:k(a),x:a.position?.x??0,y:a.position?.y??0})),g.filter(a=>a.data?.edgeType!=="mcp").map(a=>({from:a.source,to:a.target,bidirectional:a.data?.bidirectional===!0}))),n=new Map(f.map(a=>[a.id,a])),o=(a,b,c)=>{let d=n.get(a),f=n.get(b);d&&f&&g.push((0,e.pX)(d,f,c))};for(let a of l.addEdges)o(a.from,a.to,a.bidirectional),j.push({code:a.reason,message:m(a.reason),nodeId:a.to});if(l.addStart){let a=l.addStart.targets.map(a=>n.get(a)).filter(Boolean).reduce((a,b)=>!a||b.position.y<a.position.y?b:a,null),c=(b={x:a?.position.x??250,y:(a?.position.y??150)-150},{id:(0,d.A)(),type:"start",position:b,data:{label:"Start Node",type:"start",properties:{promptTemplate:""}}});for(let a of(f.unshift(c),n.set(c.id,c),l.addStart.targets))o(c.id,a,!1);j.push({code:"auto-added-start",message:`Added a Start node connected to ${l.addStart.targets.length} entry step(s).`,nodeId:c.id})}if(l.addFinish){let a=l.addFinish.sources.map(a=>n.get(a)).filter(Boolean).reduce((a,b)=>!a||b.position.y>a.position.y?b:a,null),b=(c={x:a?.position.x??250,y:(a?.position.y??0)+150},{id:(0,d.A)(),type:"finish",position:c,data:{label:"Finish Node",type:"finish",properties:{}}});for(let a of(f.push(b),n.set(b.id,b),l.addFinish.sources))o(a,b.id,!1);j.push({code:"auto-added-finish",message:`Added a Finish node connected from ${l.addFinish.sources.length} final step(s).`,nodeId:b.id})}return{flow:i,changes:j}}function m(a){switch(a){case"auto-connected":return"Connected a disconnected step into the flow.";case"auto-bidirectional-subflow":return"Wired a parallel subflow with a two-way handoff to its orchestrator.";case"auto-added-start":return"Added a Start node.";case"auto-added-finish":return"Added a Finish node."}}},23310:(a,b,c)=>{c.d(b,{GN:()=>v,UC:()=>x,Xg:()=>w});var d=c(50846),e=c(20433),f=c(24423),g=c(81226),h=c(84671),i=c(5248),j=c(88185),k=c(14265),l=c(1905),m=c(33233),n=c(9312);let o=(0,d.h)("backend/services/flow/generateFlow");function p(a,b,c,d){let e=c?`MULTI-LEVEL FLOWS — you MAY design subflows that are themselves brand-new flows:
1
+ "use strict";exports.id=3778,exports.ids=[3778],exports.modules={5248:(a,b,c)=>{c.d(b,{P:()=>m,p:()=>k});var d=c(32524),e=c(81226);function f(a){return!!a&&a.includes("mcp")}function g(a){return!!a&&a.includes("resource")}let h=a=>({source:`${a}-bottom`,target:`${a}-top`});function i(a,b){let c=a.filter(a=>"mcp"!==a.type&&"resource"!==a.type&&"string"==typeof a.id),d=new Map(c.map(a=>[a.id,a])),e=new Map,i=new Map,j=new Set;for(let a of c)e.set(a.id,0),i.set(a.id,0);let k=(a,b)=>{j.add(`${a}->${b}`),i.set(a,(i.get(a)??0)+1),e.set(b,(e.get(b)??0)+1)};for(let a of b)d.has(a.from)&&d.has(a.to)&&a.from!==a.to&&(k(a.from,a.to),a.bidirectional&&k(a.to,a.from));let l=[];for(let a of[...c].sort((a,b)=>a.y-b.y||a.x-b.x)){let b=l[l.length-1];b&&70>=Math.abs(a.y-b[0].y)?b.push(a):l.push([a])}let m=new Map;l.forEach((a,b)=>a.forEach(a=>m.set(a.id,b)));let n=new Map;for(let a=1;a<l.length;a++){let b=l[a],c=b.filter(a=>"subflow"===a.type);if(c.length>=2&&c.length===b.length){let b=l[a-1];if(1===b.length&&"process"===b[0].type)for(let a of c)n.set(a.id,b[0].id)}}let o=[],p=(a,b)=>{if(a===b||j.has(`${a}->${b}`))return!1;let c=d.get(a),e=d.get(b);return!(!c||!e||null!==function(a,b,c,d){if("start"===c)return"Start nodes cannot have incoming connections";if("finish"===a)return"Finish nodes cannot have outgoing connections";if("mcp"===a||"mcp"===c||f(b)||f(d))return("mcp"!==a||"process"!==c)&&("process"!==a||"mcp"!==c)?"MCP connections must link an MCP node to a Process node via MCP handles":"process"!==a||f(b)?null:"Connect MCP nodes from the Process node's left/right MCP handles";if("resource"===a||"resource"===c||g(b)||g(d)){if(("resource"!==a||"process"!==c)&&("process"!==a||"resource"!==c))return"Resource connections must link a Resource node to a Process node via resource handles";if("process"===a&&!g(b))return"Connect Resource nodes from the Process node's left/right resource handles"}return null}(c.type,h(c.type).source,e.type,h(e.type).target)||"subflow"===c.type&&(i.get(a)??0)>=1)},q=(a,b,c,d)=>{o.push({from:a,to:b,bidirectional:c,reason:d}),k(a,b),c&&k(b,a)},r=a=>{let b=m.get(a.id)??0;for(let c=b-1;c>=0;c--){let b=l[c].filter(b=>b.id!==a.id&&"finish"!==b.type&&!n.has(b.id));if(0!==b.length){if(1===b.length)return b[0];return b.reduce((b,c)=>Math.abs(c.x-a.x)<Math.abs(b.x-a.x)?c:b)}}return null};for(let a of l)for(let b of a){if("start"===b.type||(e.get(b.id)??0)>0)continue;let a=n.get(b.id);if(a){p(a,b.id)&&q(a,b.id,!0,"auto-bidirectional-subflow");continue}let c=r(b);c&&p(c.id,b.id)&&q(c.id,b.id,!1,"auto-connected")}let s=c.filter(a=>"start"===a.type),t=()=>c.filter(a=>"start"!==a.type&&"finish"!==a.type&&!n.has(a.id)&&(e.get(a.id)??0)===0),u=null;if(0===s.length){let a=t();if(a.length>0)u={targets:a.map(a=>a.id)};else{let a=c.filter(a=>"finish"!==a.type).sort((a,b)=>a.y-b.y)[0];a&&(u={targets:[a.id]})}}else{let a=s[0];for(let b of t())p(a.id,b.id)&&q(a.id,b.id,!1,"auto-connected")}let v=c.filter(a=>"finish"===a.type),w=()=>c.filter(a=>"start"!==a.type&&"finish"!==a.type&&!n.has(a.id)&&(i.get(a.id)??0)===0),x=null;if(0===v.length){let a=w();a.length>0&&(x={sources:a.map(a=>a.id)})}else{let a=v[0];for(let b of w())p(b.id,a.id)&&q(b.id,a.id,!1,"auto-connected")}return{addEdges:o,addStart:u,addFinish:x}}function j(a,b){if(!b.has(a))return a;for(let c=2;;c++){let d=`${a}_${c}`;if(!b.has(d))return d}}function k(a){let b=[];return{spec:function a(b,c){let d=Array.isArray(b?.nodes)?b.nodes.map(a=>({...a})):[],e=Array.isArray(b?.edges)?b.edges.map(a=>({...a})):[];for(let b of d)b?.type==="subflow"&&b.subflowSpec&&(b.subflowSpec=a(b.subflowSpec,c));let f=d.filter(a=>a&&"string"==typeof a.key&&!!a.key&&"mcp"!==a.type);if(0===f.length)return{...b,nodes:d,edges:e};let g=i(f.map((a,b)=>({id:a.key,type:a.type,x:0,y:1e3*b})),e.filter(a=>a&&"string"==typeof a.from&&"string"==typeof a.to).map(a=>({from:a.from,to:a.to,bidirectional:!0===a.bidirectional})));for(let a of g.addEdges)e.push({from:a.from,to:a.to,...a.bidirectional?{bidirectional:!0}:{}}),c.push({code:a.reason,message:n(a.reason),nodeId:a.to});let h=new Set(d.map(a=>a.key).filter(Boolean));if(g.addStart){let a=j("start",h);for(let b of(h.add(a),d.unshift({key:a,type:"start"}),g.addStart.targets))e.push({from:a,to:b});c.push({code:"auto-added-start",message:`Added a Start node connected to ${g.addStart.targets.length} entry step(s).`})}if(g.addFinish){let a=j("finish",h);for(let b of(h.add(a),d.push({key:a,type:"finish"}),g.addFinish.sources))e.push({from:b,to:a});c.push({code:"auto-added-finish",message:`Added a Finish node connected from ${g.addFinish.sources.length} final step(s).`})}return{...b,nodes:d,edges:e}}(a,b),changes:b}}function l(a){return a.data?.type??a.type??"unknown"}function m(a){var b,c;let f=(a?.nodes??[]).map(a=>({...a,position:{...a.position??{x:0,y:0}},data:{...a.data}})),g=[...a?.edges??[]],h={...a,nodes:f,edges:g},j=[],k=i(f.filter(a=>"mcp"!==l(a)&&"resource"!==l(a)).map(a=>({id:a.id,type:l(a),x:a.position?.x??0,y:a.position?.y??0})),g.filter(a=>!function(a){let b=a.data?.edgeType;return"mcp"===b||"resource"===b}(a)).map(a=>({from:a.source,to:a.target,bidirectional:a.data?.bidirectional===!0}))),m=new Map(f.map(a=>[a.id,a])),o=(a,b,c)=>{let d=m.get(a),f=m.get(b);d&&f&&g.push((0,e.pX)(d,f,c))};for(let a of k.addEdges)o(a.from,a.to,a.bidirectional),j.push({code:a.reason,message:n(a.reason),nodeId:a.to});if(k.addStart){let a=k.addStart.targets.map(a=>m.get(a)).filter(Boolean).reduce((a,b)=>!a||b.position.y<a.position.y?b:a,null),c=(b={x:a?.position.x??250,y:(a?.position.y??150)-150},{id:(0,d.A)(),type:"start",position:b,data:{label:"Start Node",type:"start",properties:{promptTemplate:""}}});for(let a of(f.unshift(c),m.set(c.id,c),k.addStart.targets))o(c.id,a,!1);j.push({code:"auto-added-start",message:`Added a Start node connected to ${k.addStart.targets.length} entry step(s).`,nodeId:c.id})}if(k.addFinish){let a=k.addFinish.sources.map(a=>m.get(a)).filter(Boolean).reduce((a,b)=>!a||b.position.y>a.position.y?b:a,null),b=(c={x:a?.position.x??250,y:(a?.position.y??0)+150},{id:(0,d.A)(),type:"finish",position:c,data:{label:"Finish Node",type:"finish",properties:{}}});for(let a of(f.push(b),m.set(b.id,b),k.addFinish.sources))o(a,b.id,!1);j.push({code:"auto-added-finish",message:`Added a Finish node connected from ${k.addFinish.sources.length} final step(s).`,nodeId:b.id})}return{flow:h,changes:j}}function n(a){switch(a){case"auto-connected":return"Connected a disconnected step into the flow.";case"auto-bidirectional-subflow":return"Wired a parallel subflow with a two-way handoff to its orchestrator.";case"auto-added-start":return"Added a Start node.";case"auto-added-finish":return"Added a Finish node."}}},23310:(a,b,c)=>{c.d(b,{GN:()=>v,UC:()=>x,Xg:()=>w});var d=c(50846),e=c(20433),f=c(24423),g=c(81226),h=c(84671),i=c(5248),j=c(88185),k=c(14265),l=c(1905),m=c(33233),n=c(9312);let o=(0,d.h)("backend/services/flow/generateFlow");function p(a,b,c,d){let e=c?`MULTI-LEVEL FLOWS — you MAY design subflows that are themselves brand-new flows:
2
2
  - A subflow node normally references an EXISTING flow via "flow". To instead create a NEW child flow, use ONE of these on the subflow node (not "flow"):
3
3
  - "subflowSpec": an inline nested FlowSpec (you author the whole child now), or
4
4
  - "generateSubflow": a short natural-language description of the child — FLUJO will generate that child flow for you.
@@ -39,4 +39,4 @@ ${q(c.issues)}`:"";return w({flow:b,description:`Repair this flow's wiring so it
39
39
  - add a Start node if one is missing, connected to the first step;
40
40
  - add a Finish node if one is missing, connected from the last step;
41
41
  - connect any disconnected process/subflow nodes.
42
- Read node placement as intent: nodes stacked top-to-bottom are sequential steps, and nodes on the same horizontal line are parallel branches under a shared parent above them.${d}`,modelId:a.modelId,...void 0!==a.allowInstall?{allowInstall:a.allowInstall}:{},...void 0!==a.maxRepairs?{maxRepairs:a.maxRepairs}:{}})}},41527:(a,b,c)=>{c.d(b,{S$:()=>e,T9:()=>f,qW:()=>h});let d=/\$\{var:([^}]+)\}/g;function e(a,b){if("string"!=typeof a||0===a.length||!d.test(a))return a;let c=b??{};return a.replace(d,(a,b)=>{let d=b.trim(),e=c[d];return"string"==typeof e?e:(console.warn(`[resolveRunVars] unknown variable "${d}"; substituting empty string`),"")})}function f(a){let b;if("string"!=typeof a||0===a.length)return[];let c=new Set;for(d.lastIndex=0;null!==(b=d.exec(a));){let a=b[1].trim();a&&c.add(a)}return[...c]}let g=/^[A-Za-z_][\w-]*$/;function h(a){return"string"==typeof a&&g.test(a)}},45131:(a,b,c)=>{c.d(b,{C:()=>e,F9:()=>i,PP:()=>h,wM:()=>f});let d=["contains","regex","equals"];function e(a){return"string"==typeof a&&d.includes(a)}function f(a){try{return new RegExp(a),!0}catch{return!1}}function g(a){return"string"==typeof a?a:Array.isArray(a)?a.map(a=>"string"==typeof a?a:a&&"object"==typeof a&&"text"in a&&"string"==typeof a.text?a.text:"").join(""):""}function h(a,b="last-assistant"){if(!Array.isArray(a)||0===a.length)return null;if("last-message"===b)return g(a[a.length-1]?.content);for(let b=a.length-1;b>=0;b--)if(a[b]?.role==="assistant")return g(a[b]?.content);return null}function i(a,b){let c;if(!a)return!1;let d="string"==typeof b?b:"",e="string"==typeof a.value?a.value:String(a.value??"");switch(a.kind){case"contains":c=a.ignoreCase?d.toLowerCase().includes(e.toLowerCase()):d.includes(e);break;case"equals":c=a.ignoreCase?d.toLowerCase()===e.toLowerCase():d===e;break;case"regex":{let b;try{b=new RegExp(e,a.ignoreCase?"i":void 0)}catch(a){return console.warn("[edgeConditions] invalid regex predicate; treating as no-match",e,a),!1}c=b.test(d);break}default:return console.warn("[edgeConditions] unknown condition kind; treating as no-match",a.kind),!1}return a.negate?!c:c}},49181:(a,b,c)=>{c.d(b,{A$:()=>g});let d="_-_-_",e=/^(tool|resource):(.+)$/,f=/\$\{((?:tool|resource):[^}]+|_-_-_[^}]+)\}/g;function g(a){let b,c=[];for(f.lastIndex=0;null!==(b=f.exec(a));){let a=function(a){let b=e.exec(a);if(b){let a=b[1],c=function(a){let b=a.indexOf("__");if(b<=0)return null;let c=a.slice(b+2);return c?{server:a.slice(0,b),name:c}:null}(b[2]);return c?{kind:a,server:c.server,name:c.name}:null}if(a.startsWith(d)){let b=a.split(d);if(3===b.length&&b[1]&&b[2])return{kind:"tool",server:b[1],name:b[2]}}return null}(b[1]);a&&c.push({...a,fullMatch:b[0],index:b.index})}return c}},84671:(a,b,c)=>{c.d(b,{nC:()=>j});var d=c(49181),e=c(45131),f=c(41527);function g(a){return a.data?.type??a.type??"unknown"}function h(a){return a.data?.label||a.id}function i(a){return a.data?.edgeType==="mcp"}function j(a,b={}){let c=[],k=Array.isArray(a?.nodes)?a.nodes:[],l=Array.isArray(a?.edges)?a.edges:[],m=(a,b,d,e)=>c.push({severity:a,code:b,message:d,nodeId:e?.id,nodeLabel:e?h(e):void 0}),n=new Map((b.models??[]).map(a=>[a.id,a])),o=new Map((b.servers??[]).map(a=>[a.name,a])),p=!!b.models,q=!!b.servers,r=k.filter(a=>"start"===g(a)),s=k.filter(a=>"finish"===g(a)),t=k.filter(a=>"process"===g(a)),u=k.filter(a=>"mcp"===g(a));if(0===r.length)m("error","no-start-node","The flow has no Start node, so it has no entry point.");else if(r.length>1)for(let a of r.slice(1))m("error","multiple-start-nodes","The flow has more than one Start node; only one is allowed.",a);for(let a of(0===s.length&&m("warning","no-finish-node","The flow has no Finish node; it will run but never reaches a defined end."),t)){let b=a.data?.properties??{},c=b.boundModel;if(c){if(p&&!n.has(c)){let c="string"==typeof b.modelName&&b.modelName?` (was "${b.modelName}")`:"";m("error","process-model-missing",`Process node "${h(a)}" is bound to a model that no longer exists${c}.`,a)}}else m("error","process-missing-model",`Process node "${h(a)}" has no model bound.`,a)}for(let a of u){let b=(a.data?.properties??{}).boundServer;if(b){if(q&&!o.has(b))m("warning","mcp-server-missing",`MCP node "${h(a)}" is bound to server "${b}", which isn't in your current MCP server list. It may be offline (e.g. not connected), renamed, or removed — if it was renamed or removed, rebind this node.`,a);else if(q){let c=o.get(b);if(c.status&&"connected"!==c.status){let d="disabled"===c.status?"disabled":`not connected (${c.status})`;m("warning","mcp-server-disconnected",`MCP node "${h(a)}" is bound to server "${b}", which is currently ${d}. It will provide tools again once it reconnects.`,a)}}}else m("warning","mcp-missing-server",`MCP node "${h(a)}" is not bound to a server.`,a);l.some(b=>i(b)&&(b.source===a.id||b.target===a.id))||m("warning","mcp-node-unconnected",`MCP node "${h(a)}" is not connected to any Process node.`,a)}if(r.length>0){let a=function(a){let b=new Map,c=(a,c)=>{b.has(a)||b.set(a,[]),b.get(a).push(c)};for(let b of a)!i(b)&&(c(b.source,b.target),b.data?.bidirectional&&c(b.target,b.source));return b}(l);for(let b of r)a.get(b.id)?.length||m("error","start-no-outgoing","The Start node is not connected to anything; the flow cannot run.",b);let b=function(a,b){let c=new Set(a),d=[...a];for(;d.length;){let a=d.shift();for(let e of b.get(a)??[])c.has(e)||(c.add(e),d.push(e))}return c}(r.map(a=>a.id),a);for(let a of[...t,...s])b.has(a.id)||m("warning","unreachable-node",`${"finish"===g(a)?"Finish":"Process"} node "${h(a)}" is not reachable from the Start node.`,a)}for(let a of k.filter(a=>"subflow"===g(a))){let b=l.filter(b=>!i(b)&&(b.source===a.id||b.target===a.id&&!!b.data?.bidirectional));b.length>1&&m("error","subflow-multiple-outgoing",`Subflow node "${h(a)}" has ${b.length} outgoing connections; a subflow can only have one (either A > B > C or a bidirectional A <> B).`,a);let c=a.data?.properties??{},d="string"==typeof c.subflowId&&c.subflowId?c.subflowId:void 0,e=Array.isArray(c.parallelSubflowIds)?c.parallelSubflowIds.filter(a=>"string"==typeof a&&!!a):[];d&&e.length>0&&m("error","subflow-both-targets",`Subflow node "${h(a)}" sets both a single "subflowId" and "parallelSubflowIds"; use one or the other.`,a);let f=!0===c.mapOverList;if(f&&e.length>0&&m("error","subflow-map-and-parallel",`Subflow node "${h(a)}" combines "mapOverList" with "parallelSubflowIds"; map-over-list runs a single child once per item and cannot be combined with parallel fan-out.`,a),f&&!d&&0===e.length&&m("error","subflow-map-no-child",`Subflow node "${h(a)}" has "mapOverList" but no child flow ("subflowId"); select a flow to run once per item.`,a),e.length>0){let b=c.concurrencyLimit;"number"==typeof b&&b<1&&m("warning","subflow-concurrency-limit",`Subflow node "${h(a)}" has a concurrencyLimit of ${b}; it must be at least 1 (the runtime default will be used).`,a)}}{let a=new Map(k.map(a=>[a.id,a])),b=new Set;for(let c of l){if(i(c))continue;let d=c.data?.condition;if(!d||"object"!=typeof d)continue;let f=a.get(c.source),j=f?g(f):"unknown";if("process"!==j){m("error","edge-condition-non-process",`An edge leaving ${"unknown"===j?"an unknown":`the ${j}`} node "${f?h(f):c.source}" has a routing condition, but only process nodes can route on a condition.`,f??void 0);continue}b.add(c.source),(0,e.C)(d.kind)?"string"!=typeof d.value||0===d.value.length?m("warning","edge-condition-value",`Process node "${h(f)}" has an outgoing edge condition with no "value"; it will never match.`,f):"regex"!==d.kind||(0,e.wM)(d.value)||m("warning","edge-condition-regex",`Process node "${h(f)}" has an outgoing edge with a regex condition that does not compile; it will never match.`,f):m("warning","edge-condition-kind",`Process node "${h(f)}" has an outgoing edge whose condition kind "${String(d.kind)}" is unknown; it will never match.`,f)}for(let c of b){let b=a.get(c);b&&(l.some(a=>!i(a)&&(a.source===c?!a.data?.condition:!!(a.target===c&&a.data?.bidirectional)))||m("warning","edge-condition-no-fallback",`Process node "${h(b)}" has conditioned outgoing edges but no bare fallback edge; if no condition matches, the flow ends here.`,b))}}{let a=new Set;for(let b of k){let c=b.data?.properties?.captureVariable;if("string"==typeof c&&c.trim()){let d=c.trim();a.add(d),(0,f.qW)(d)||m("warning","capture-var-name",`${"subflow"===g(b)?"Subflow":"Process"} node "${h(b)}" captures into "${d}", which is not a valid variable name (letters, digits, _ and - only, not starting with a digit); it will be awkward to reference with \${var:...}.`,b)}}let b=["promptTemplate","isolatedPrompt"],c=new Set;for(let d of k){let e=d.data?.properties??{};for(let g of b){let b=e[g];if("string"==typeof b&&b)for(let e of(0,f.T9)(b)){if(a.has(e))continue;let b=`${d.id}:${e}`;c.has(b)||(c.add(b),m("warning","var-ref-uncaptured",`${h(d)} references \${var:${e}} but no step in this flow captures "${e}" (via captureVariable). It resolves to empty unless supplied as a run input — check for a typo or a step ordered after this one.`,d))}}}}for(let a of t){let c=a.data?.properties?.promptTemplate;if("string"!=typeof c||!c)continue;let e=function(a,b,c){let d=new Map(b.map(a=>[a.id,a])),e=new Set;for(let b of c){if(!i(b))continue;let c=null;if(b.source===a?c=b.target:b.target===a&&(c=b.source),!c)continue;let f=d.get(c);if(!f||"mcp"!==g(f))continue;let h=f.data?.properties?.boundServer;"string"==typeof h&&h&&e.add(h)}return e}(a.id,k,l),f=new Set;for(let g of(0,d.A$)(c)){if("handoff"===g.server)continue;let c=`${g.kind}:${g.server}:${g.name}`;!f.has(c)&&(f.add(c),e.has(g.server)?"tool"===g.kind&&b.serverTools&&b.serverTools[g.server]&&!b.serverTools[g.server].includes(g.name)&&m("warning","tool-unavailable",`Process node "${h(a)}" references tool "${g.name}" which server "${g.server}" no longer provides.`,a):m("error","tool-pill-disconnected",`Process node "${h(a)}" references ${g.kind} "${g.name}" from server "${g.server}", but it is not connected to that server (the MCP node was removed or the server was renamed).`,a))}}let v=c.filter(a=>"error"===a.severity).length,w=c.length-v;return{issues:c,errorCount:v,warningCount:w,isRunnable:0===v}}}};
42
+ Read node placement as intent: nodes stacked top-to-bottom are sequential steps, and nodes on the same horizontal line are parallel branches under a shared parent above them.${d}`,modelId:a.modelId,...void 0!==a.allowInstall?{allowInstall:a.allowInstall}:{},...void 0!==a.maxRepairs?{maxRepairs:a.maxRepairs}:{}})}},41527:(a,b,c)=>{c.d(b,{S$:()=>e,T9:()=>f,qW:()=>h});let d=/\$\{var:([^}]+)\}/g;function e(a,b){if("string"!=typeof a||0===a.length||!d.test(a))return a;let c=b??{};return a.replace(d,(a,b)=>{let d=b.trim(),e=c[d];return"string"==typeof e?e:(console.warn(`[resolveRunVars] unknown variable "${d}"; substituting empty string`),"")})}function f(a){let b;if("string"!=typeof a||0===a.length)return[];let c=new Set;for(d.lastIndex=0;null!==(b=d.exec(a));){let a=b[1].trim();a&&c.add(a)}return[...c]}let g=/^[A-Za-z_][\w-]*$/;function h(a){return"string"==typeof a&&g.test(a)}},45131:(a,b,c)=>{c.d(b,{C:()=>e,F9:()=>i,PP:()=>h,wM:()=>f});let d=["contains","regex","equals"];function e(a){return"string"==typeof a&&d.includes(a)}function f(a){try{return new RegExp(a),!0}catch{return!1}}function g(a){return"string"==typeof a?a:Array.isArray(a)?a.map(a=>"string"==typeof a?a:a&&"object"==typeof a&&"text"in a&&"string"==typeof a.text?a.text:"").join(""):""}function h(a,b="last-assistant"){if(!Array.isArray(a)||0===a.length)return null;if("last-message"===b)return g(a[a.length-1]?.content);for(let b=a.length-1;b>=0;b--)if(a[b]?.role==="assistant")return g(a[b]?.content);return null}function i(a,b){let c;if(!a)return!1;let d="string"==typeof b?b:"",e="string"==typeof a.value?a.value:String(a.value??"");switch(a.kind){case"contains":c=a.ignoreCase?d.toLowerCase().includes(e.toLowerCase()):d.includes(e);break;case"equals":c=a.ignoreCase?d.toLowerCase()===e.toLowerCase():d===e;break;case"regex":{let b;try{b=new RegExp(e,a.ignoreCase?"i":void 0)}catch(a){return console.warn("[edgeConditions] invalid regex predicate; treating as no-match",e,a),!1}c=b.test(d);break}default:return console.warn("[edgeConditions] unknown condition kind; treating as no-match",a.kind),!1}return a.negate?!c:c}},49181:(a,b,c)=>{c.d(b,{A$:()=>g});let d="_-_-_",e=/^(tool|resource):(.+)$/,f=/\$\{((?:tool|resource):[^}]+|_-_-_[^}]+)\}/g;function g(a){let b,c=[];for(f.lastIndex=0;null!==(b=f.exec(a));){let a=function(a){let b=e.exec(a);if(b){let a=b[1],c=function(a){let b=a.indexOf("__");if(b<=0)return null;let c=a.slice(b+2);return c?{server:a.slice(0,b),name:c}:null}(b[2]);return c?{kind:a,server:c.server,name:c.name}:null}if(a.startsWith(d)){let b=a.split(d);if(3===b.length&&b[1]&&b[2])return{kind:"tool",server:b[1],name:b[2]}}return null}(b[1]);a&&c.push({...a,fullMatch:b[0],index:b.index})}return c}}};
@@ -1 +1 @@
1
- exports.id=3953,exports.ids=[3953,7821],exports.modules={3676:(a,b,c)=>{"use strict";c.d(b,{Wj:()=>h,ln:()=>g});var d=c(10641),e=c(58739);let f="encryption_locked";async function g(){return(0,e.isEncryptionLocked)()}async function h(a){return await g()?a?.openai?d.NextResponse.json({error:{message:"Encryption is locked. Unlock FLUJO to continue.",type:f,code:f,param:null}},{status:423}):d.NextResponse.json({error:f},{status:423}):null}},37426:(a,b,c)=>{"use strict";c.r(b),c.d(b,{"40ec842092ea232b6d4aa599a380d422184da5e1ca":()=>d.c,"602ea7ca289a8eaa1000fb321a71e292e6c766b6bb":()=>d.G});var d=c(73456)},73456:(a,b,c)=>{"use strict";c.d(b,{G:()=>l,c:()=>k});var d=c(75879);c(68633);var e=c(50846),f=c(92372),g=c(46480),h=c(58739),i=c(51669);let j=(0,e.h)("backend/utils/resolveGlobalVars");async function k(a){j.debug("Entering resolveGlobalVars method");let b=await (0,f.YM)(g.Z.GLOBAL_ENV_VARS,{}),c=function(a){if(!a||"object"!=typeof a)return!1;let b=Object.keys(a);if(0===b.length)return!0;let c=a[b[0]];return c&&"object"==typeof c&&"value"in c&&"metadata"in c&&"object"==typeof c.metadata&&"isSecret"in c.metadata}(b);j.debug(`Loaded ${Object.keys(b).length} global environment variables (${c?"new":"old"} format)`);let d={};if(c)for(let[a,c]of Object.entries(b))d[a]=c.value;else d={...b};let e=async a=>{let b=a.match(/\$\{global:([^}]+)\}/g);if(!b)return a;let c=a;for(let a of b){let b=a.substring(9,a.length-1);if(void 0!==d[b]){let e=d[b];if(e.startsWith("encrypted:")){j.debug(`Decrypting encrypted global variable: ${b}`);try{let a=e.substring(10),c=await (0,h.decryptWithPassword)(a);if(c)e=c,j.debug(`Successfully decrypted global variable: ${b}`);else{j.warn(`Failed to decrypt global variable: ${b}`);continue}}catch(a){j.error(`Error decrypting global variable: ${b}`,a);continue}}else if(e.startsWith("encrypted_failed:")){j.warn(`Skipping failed encrypted global variable: ${b}`);continue}j.debug(`Resolved global variable: ${b}`),c=c.replace(a,e)}else j.warn(`Global variable not found: ${b}`)}return c},i=async a=>{if("string"==typeof a)return await e(a);if(Array.isArray(a))return await Promise.all(a.map(a=>i(a)));if(null!==a&&"object"==typeof a){let b={};for(let[c,d]of Object.entries(a))b[c]=await i(d);return b}return a},k=await i(a);return"object"==typeof a&&null!==a&&j.debug("Resolved global variables result:",JSON.stringify(k,null,2)),j.debug("Completed global variable resolution"),k}async function l(a,b=0){if(j.debug(`Entering resolveAndDecryptApiKey method (depth: ${b})`),!a)return j.warn("Empty value provided"),null;if(b>=10)return j.warn(`Maximum resolution depth reached (10) for value: ${a}`),a;let c=a;if(c.startsWith("encrypted:")){j.debug(`Decrypting encrypted value at depth ${b}`);try{let a=c.substring(10),d=await (0,h.decryptWithPassword)(a);if(!d)return j.warn(`Failed to decrypt value at depth ${b}`),null;j.debug(`Successfully decrypted value at depth ${b}`),j.verbose(d),c=d}catch(a){return j.error(`Error decrypting value at depth ${b}:`,a),null}}else c.startsWith("encrypted_failed:")&&(j.warn(`Skipping failed encrypted value at depth ${b}`),c=c.substring(17));if(c.includes("${global:")){j.debug(`Resolving global variables at depth ${b}`);try{let a=await k(c);if(j.verbose(a),a!==c)return j.debug(`Value changed after resolving globals at depth ${b}, processing recursively`),l(a,b+1);c=a}catch(a){return j.error(`Error resolving global variables at depth ${b}:`,a),null}}return j.debug(`Completed resolveAndDecryptApiKey at depth ${b}`),c}(0,i.D)([k,l]),(0,d.A)(k,"40ec842092ea232b6d4aa599a380d422184da5e1ca",null),(0,d.A)(l,"602ea7ca289a8eaa1000fb321a71e292e6c766b6bb",null)},78335:()=>{},87821:(a,b,c)=>{"use strict";c.d(b,{flowService:()=>w});var d=c(32524),e=c(92372),f=c(46480),g=c(50846),h=c(33873),i=c.n(h),j=c(29021),k=c(43326);let l=(0,g.h)("backend/services/flow/flowVersions");function m(a){return(0,e.ln)(a),`flow-versions/${a}`}async function n(a){try{let b=m(a.id),c=Date.now(),d=`${c}-${Math.random().toString(36).slice(2,6)}`,f={versionId:d,flowId:a.id,savedAt:c,flow:a};return await (0,e.Vt)(b,d,f),await o(a.id),d}catch(b){return l.warn(`Could not archive a version of flow ${a.id}`,b),null}}async function o(a){let b=m(a),c=await (0,e.pL)(b);if(!(c.length<=25))for(let d of c.sort((a,b)=>b.savedAt-a.savedAt).slice(25))try{await (0,e.bB)(b,d.versionId)}catch(b){l.warn(`Could not prune version ${d.versionId} of flow ${a}`,b)}}async function p(a){return(await (0,e.pL)(m(a))).sort((a,b)=>b.savedAt-a.savedAt).map(a=>({versionId:a.versionId,savedAt:a.savedAt,name:a.flow?.name??"unknown",nodeCount:a.flow?.nodes?.length??0,edgeCount:a.flow?.edges?.length??0}))}async function q(a,b){try{return await (0,e.EI)(m(a),b,null)}catch(c){return l.debug(`getFlowVersion: could not load ${a}/${b}`,c),null}}async function r(a){try{(0,e.ln)(a),await j.promises.rm(i().join((0,k.ok)(),"db","flow-versions",a),{recursive:!0,force:!0})}catch(b){l.warn(`Could not remove version history of flow ${a}`,b)}}let s=(0,g.h)("backend/services/flow/index"),t=f.Z.FLOWS;async function u(){return global.__flujo_flowsMigration||(global.__flujo_flowsMigration=(async()=>{try{await (0,e.w5)(f.Z.FLOWS,t,a=>a.id)}catch(a){s.error("Flow storage migration failed",a),global.__flujo_flowsMigration=void 0}})()),global.__flujo_flowsMigration}class v{get flowsCache(){return global.__flujo_flowsCache??null}set flowsCache(a){global.__flujo_flowsCache=a}async loadFlows(){try{if(this.flowsCache)return s.debug("Using cached flows"),this.flowsCache;s.debug("Loading flows from storage"),await u();let a=await (0,e.pL)(t);return this.flowsCache=a,s.info("Loaded flows from storage",{count:a.length}),a}catch(a){return s.error("Failed to load flows",a),[]}}async getFlow(a){try{s.debug(`Getting flow by ID: ${a}`);let b=this.flowsCache?.find(b=>b.id===a)||null;if(b)return s.debug(`Flow ${a} found in cache`),b;await u();let c=null;try{c=await (0,e.EI)(t,a,null)}catch(b){s.debug(`getFlow: could not load flow ${a}`,b),c=null}if(c&&this.flowsCache){let a=this.flowsCache,b=a.findIndex(a=>a.id===c.id);b>=0?a[b]=c:a.push(c),this.flowsCache=a}return s.debug(`Flow ${a} ${c?"found":"not found"}`),c}catch(b){return s.error(`Failed to get flow ${a}`,b),null}}async invalidateExecutionCache(a){try{let{FlowExecutor:b}=await Promise.all([c.e(6996),c.e(1223),c.e(5734),c.e(1373),c.e(264),c.e(724),c.e(7865)]).then(c.bind(c,77865));b.clearFlowCache(a),s.debug("Invalidated execution flow cache",{flowId:a??"all"})}catch(a){s.warn("Failed to invalidate execution flow cache",a)}}async saveFlow(a){try{s.debug(`Saving flow: ${a.id}`,{name:a.name}),(0,e.ln)(a.id),await u();let b=null;try{b=await (0,e.EI)(t,a.id,null)}catch(b){s.debug(`saveFlow: could not read previous definition of ${a.id} for versioning`,b)}b&&JSON.stringify(b)!==JSON.stringify(a)&&await n(b),await (0,e.Vt)(t,a.id,a);let c=this.flowsCache;if(c){let b=c.findIndex(b=>b.id===a.id);b>=0?c[b]=a:c.push(a),this.flowsCache=c}return await this.invalidateExecutionCache(a.id),s.info(`Flow ${a.id} saved successfully`),{success:!0}}catch(a){return s.error("Failed to save flow",a),{success:!1,error:a instanceof Error?a.message:"Failed to save flow"}}}async deleteFlow(a){try{s.debug(`Deleting flow: ${a}`),await u(),await (0,e.bB)(t,a);let b=this.flowsCache;return b&&(this.flowsCache=b.filter(b=>b.id!==a)),await this.invalidateExecutionCache(a),await r(a),s.info(`Flow ${a} deleted successfully`),{success:!0}}catch(b){return s.error(`Failed to delete flow: ${a}`,b),{success:!1,error:b instanceof Error?b.message:"Failed to delete flow"}}}async listFlowVersions(a){return p(a)}async getFlowVersion(a,b){return q(a,b)}async revertFlow(a,b){let c=await q(a,b);return c?this.saveFlow({...c.flow,id:a}):{success:!1,error:`No version "${b}" of flow ${a}`}}createNode(a,b){s.debug(`Creating new node of type: ${a}`,{position:b});let c={id:(0,d.A)(),type:a,position:b,data:{label:`${"mcp"===a?"MCP":a.charAt(0).toUpperCase()+a.slice(1)} Node`,type:a,properties:{}}};return s.debug(`Node created with ID: ${c.id}`),c}createNewFlow(a="NewFlow"){s.debug(`Creating new flow: ${a}`);let b={id:(0,d.A)(),type:"start",position:{x:250,y:150},data:{label:"Start Node",type:"start",properties:{promptTemplate:""}}},c={id:(0,d.A)(),name:a,nodes:[b],edges:[]};return s.info(`New flow created with ID: ${c.id}`,{name:a}),c}createHistoryEntry(a,b){return s.debug("Creating history entry",{nodeCount:a.length,edgeCount:b.length}),{nodes:[...a],edges:[...b]}}generateSampleFlow(a="Sample Flow"){s.debug(`Generating sample flow: ${a}`);let b={id:(0,d.A)(),name:a,nodes:[{id:"1",type:"start",position:{x:250,y:50},data:{label:"Start Node",type:"start",properties:{prompt:"Enter your query here",systemMessage:"You are a helpful assistant",temperature:0}}},{id:"2",type:"process",position:{x:250,y:200},data:{label:"Process Node",type:"process",properties:{operation:"transform",enabled:!0}}},{id:"3",type:"finish",position:{x:250,y:350},data:{label:"Finish Node",type:"finish",properties:{format:"json",template:'{ "result": {{data}} }'}}},{id:"4",type:"mcp",position:{x:450,y:200},data:{label:"MCP Node",type:"mcp",properties:{channels:2,mode:"parallel"}}}],edges:[{id:"e1-2",source:"1",target:"2",type:"custom"},{id:"e2-3",source:"2",target:"3",type:"custom"}]};return s.info(`Sample flow generated with ID: ${b.id}`,{name:a}),b}async listFlows(){s.debug("listFlows: Entering method");try{let a=await this.loadFlows();return{success:!0,flows:a}}catch(a){return s.warn("listFlows: Failed to list flows:",a),{success:!1,error:a instanceof Error?a.message:"Failed to list flows"}}}}let w=new v},96487:()=>{}};
1
+ exports.id=3953,exports.ids=[3953,7821],exports.modules={3676:(a,b,c)=>{"use strict";c.d(b,{Wj:()=>h,ln:()=>g});var d=c(10641),e=c(58739);let f="encryption_locked";async function g(){return(0,e.isEncryptionLocked)()}async function h(a){return await g()?a?.openai?d.NextResponse.json({error:{message:"Encryption is locked. Unlock FLUJO to continue.",type:f,code:f,param:null}},{status:423}):d.NextResponse.json({error:f},{status:423}):null}},37426:(a,b,c)=>{"use strict";c.r(b),c.d(b,{"40ec842092ea232b6d4aa599a380d422184da5e1ca":()=>d.c,"602ea7ca289a8eaa1000fb321a71e292e6c766b6bb":()=>d.G});var d=c(73456)},73456:(a,b,c)=>{"use strict";c.d(b,{G:()=>l,c:()=>k});var d=c(75879);c(68633);var e=c(50846),f=c(92372),g=c(46480),h=c(58739),i=c(51669);let j=(0,e.h)("backend/utils/resolveGlobalVars");async function k(a){j.debug("Entering resolveGlobalVars method");let b=await (0,f.YM)(g.Z.GLOBAL_ENV_VARS,{}),c=function(a){if(!a||"object"!=typeof a)return!1;let b=Object.keys(a);if(0===b.length)return!0;let c=a[b[0]];return c&&"object"==typeof c&&"value"in c&&"metadata"in c&&"object"==typeof c.metadata&&"isSecret"in c.metadata}(b);j.debug(`Loaded ${Object.keys(b).length} global environment variables (${c?"new":"old"} format)`);let d={};if(c)for(let[a,c]of Object.entries(b))d[a]=c.value;else d={...b};let e=async a=>{let b=a.match(/\$\{global:([^}]+)\}/g);if(!b)return a;let c=a;for(let a of b){let b=a.substring(9,a.length-1);if(void 0!==d[b]){let e=d[b];if(e.startsWith("encrypted:")){j.debug(`Decrypting encrypted global variable: ${b}`);try{let a=e.substring(10),c=await (0,h.decryptWithPassword)(a);if(c)e=c,j.debug(`Successfully decrypted global variable: ${b}`);else{j.warn(`Failed to decrypt global variable: ${b}`);continue}}catch(a){j.error(`Error decrypting global variable: ${b}`,a);continue}}else if(e.startsWith("encrypted_failed:")){j.warn(`Skipping failed encrypted global variable: ${b}`);continue}j.debug(`Resolved global variable: ${b}`),c=c.replace(a,e)}else j.warn(`Global variable not found: ${b}`)}return c},i=async a=>{if("string"==typeof a)return await e(a);if(Array.isArray(a))return await Promise.all(a.map(a=>i(a)));if(null!==a&&"object"==typeof a){let b={};for(let[c,d]of Object.entries(a))b[c]=await i(d);return b}return a},k=await i(a);return"object"==typeof a&&null!==a&&j.debug("Resolved global variables result:",JSON.stringify(k,null,2)),j.debug("Completed global variable resolution"),k}async function l(a,b=0){if(j.debug(`Entering resolveAndDecryptApiKey method (depth: ${b})`),!a)return j.warn("Empty value provided"),null;if(b>=10)return j.warn(`Maximum resolution depth reached (10) for value: ${a}`),a;let c=a;if(c.startsWith("encrypted:")){j.debug(`Decrypting encrypted value at depth ${b}`);try{let a=c.substring(10),d=await (0,h.decryptWithPassword)(a);if(!d)return j.warn(`Failed to decrypt value at depth ${b}`),null;j.debug(`Successfully decrypted value at depth ${b}`),j.verbose(d),c=d}catch(a){return j.error(`Error decrypting value at depth ${b}:`,a),null}}else c.startsWith("encrypted_failed:")&&(j.warn(`Skipping failed encrypted value at depth ${b}`),c=c.substring(17));if(c.includes("${global:")){j.debug(`Resolving global variables at depth ${b}`);try{let a=await k(c);if(j.verbose(a),a!==c)return j.debug(`Value changed after resolving globals at depth ${b}, processing recursively`),l(a,b+1);c=a}catch(a){return j.error(`Error resolving global variables at depth ${b}:`,a),null}}return j.debug(`Completed resolveAndDecryptApiKey at depth ${b}`),c}(0,i.D)([k,l]),(0,d.A)(k,"40ec842092ea232b6d4aa599a380d422184da5e1ca",null),(0,d.A)(l,"602ea7ca289a8eaa1000fb321a71e292e6c766b6bb",null)},78335:()=>{},87821:(a,b,c)=>{"use strict";c.d(b,{flowService:()=>w});var d=c(32524),e=c(92372),f=c(46480),g=c(50846),h=c(33873),i=c.n(h),j=c(29021),k=c(43326);let l=(0,g.h)("backend/services/flow/flowVersions");function m(a){return(0,e.ln)(a),`flow-versions/${a}`}async function n(a){try{let b=m(a.id),c=Date.now(),d=`${c}-${Math.random().toString(36).slice(2,6)}`,f={versionId:d,flowId:a.id,savedAt:c,flow:a};return await (0,e.Vt)(b,d,f),await o(a.id),d}catch(b){return l.warn(`Could not archive a version of flow ${a.id}`,b),null}}async function o(a){let b=m(a),c=await (0,e.pL)(b);if(!(c.length<=25))for(let d of c.sort((a,b)=>b.savedAt-a.savedAt).slice(25))try{await (0,e.bB)(b,d.versionId)}catch(b){l.warn(`Could not prune version ${d.versionId} of flow ${a}`,b)}}async function p(a){return(await (0,e.pL)(m(a))).sort((a,b)=>b.savedAt-a.savedAt).map(a=>({versionId:a.versionId,savedAt:a.savedAt,name:a.flow?.name??"unknown",nodeCount:a.flow?.nodes?.length??0,edgeCount:a.flow?.edges?.length??0}))}async function q(a,b){try{return await (0,e.EI)(m(a),b,null)}catch(c){return l.debug(`getFlowVersion: could not load ${a}/${b}`,c),null}}async function r(a){try{(0,e.ln)(a),await j.promises.rm(i().join((0,k.ok)(),"db","flow-versions",a),{recursive:!0,force:!0})}catch(b){l.warn(`Could not remove version history of flow ${a}`,b)}}let s=(0,g.h)("backend/services/flow/index"),t=f.Z.FLOWS;async function u(){return global.__flujo_flowsMigration||(global.__flujo_flowsMigration=(async()=>{try{await (0,e.w5)(f.Z.FLOWS,t,a=>a.id)}catch(a){s.error("Flow storage migration failed",a),global.__flujo_flowsMigration=void 0}})()),global.__flujo_flowsMigration}class v{get flowsCache(){return global.__flujo_flowsCache??null}set flowsCache(a){global.__flujo_flowsCache=a}async loadFlows(){try{if(this.flowsCache)return s.debug("Using cached flows"),this.flowsCache;s.debug("Loading flows from storage"),await u();let a=await (0,e.pL)(t);return this.flowsCache=a,s.info("Loaded flows from storage",{count:a.length}),a}catch(a){return s.error("Failed to load flows",a),[]}}async getFlow(a){try{s.debug(`Getting flow by ID: ${a}`);let b=this.flowsCache?.find(b=>b.id===a)||null;if(b)return s.debug(`Flow ${a} found in cache`),b;await u();let c=null;try{c=await (0,e.EI)(t,a,null)}catch(b){s.debug(`getFlow: could not load flow ${a}`,b),c=null}if(c&&this.flowsCache){let a=this.flowsCache,b=a.findIndex(a=>a.id===c.id);b>=0?a[b]=c:a.push(c),this.flowsCache=a}return s.debug(`Flow ${a} ${c?"found":"not found"}`),c}catch(b){return s.error(`Failed to get flow ${a}`,b),null}}async invalidateExecutionCache(a){try{let{FlowExecutor:b}=await Promise.all([c.e(6996),c.e(1223),c.e(5734),c.e(1373),c.e(264),c.e(724),c.e(4498)]).then(c.bind(c,44498));b.clearFlowCache(a),s.debug("Invalidated execution flow cache",{flowId:a??"all"})}catch(a){s.warn("Failed to invalidate execution flow cache",a)}}async saveFlow(a){try{s.debug(`Saving flow: ${a.id}`,{name:a.name}),(0,e.ln)(a.id),await u();let b=null;try{b=await (0,e.EI)(t,a.id,null)}catch(b){s.debug(`saveFlow: could not read previous definition of ${a.id} for versioning`,b)}b&&JSON.stringify(b)!==JSON.stringify(a)&&await n(b),await (0,e.Vt)(t,a.id,a);let c=this.flowsCache;if(c){let b=c.findIndex(b=>b.id===a.id);b>=0?c[b]=a:c.push(a),this.flowsCache=c}return await this.invalidateExecutionCache(a.id),s.info(`Flow ${a.id} saved successfully`),{success:!0}}catch(a){return s.error("Failed to save flow",a),{success:!1,error:a instanceof Error?a.message:"Failed to save flow"}}}async deleteFlow(a){try{s.debug(`Deleting flow: ${a}`),await u(),await (0,e.bB)(t,a);let b=this.flowsCache;return b&&(this.flowsCache=b.filter(b=>b.id!==a)),await this.invalidateExecutionCache(a),await r(a),s.info(`Flow ${a} deleted successfully`),{success:!0}}catch(b){return s.error(`Failed to delete flow: ${a}`,b),{success:!1,error:b instanceof Error?b.message:"Failed to delete flow"}}}async listFlowVersions(a){return p(a)}async getFlowVersion(a,b){return q(a,b)}async revertFlow(a,b){let c=await q(a,b);return c?this.saveFlow({...c.flow,id:a}):{success:!1,error:`No version "${b}" of flow ${a}`}}createNode(a,b){s.debug(`Creating new node of type: ${a}`,{position:b});let c={id:(0,d.A)(),type:a,position:b,data:{label:`${"mcp"===a?"MCP":a.charAt(0).toUpperCase()+a.slice(1)} Node`,type:a,properties:{}}};return s.debug(`Node created with ID: ${c.id}`),c}createNewFlow(a="NewFlow"){s.debug(`Creating new flow: ${a}`);let b={id:(0,d.A)(),type:"start",position:{x:250,y:150},data:{label:"Start Node",type:"start",properties:{promptTemplate:""}}},c={id:(0,d.A)(),name:a,nodes:[b],edges:[]};return s.info(`New flow created with ID: ${c.id}`,{name:a}),c}createHistoryEntry(a,b){return s.debug("Creating history entry",{nodeCount:a.length,edgeCount:b.length}),{nodes:[...a],edges:[...b]}}generateSampleFlow(a="Sample Flow"){s.debug(`Generating sample flow: ${a}`);let b={id:(0,d.A)(),name:a,nodes:[{id:"1",type:"start",position:{x:250,y:50},data:{label:"Start Node",type:"start",properties:{prompt:"Enter your query here",systemMessage:"You are a helpful assistant",temperature:0}}},{id:"2",type:"process",position:{x:250,y:200},data:{label:"Process Node",type:"process",properties:{operation:"transform",enabled:!0}}},{id:"3",type:"finish",position:{x:250,y:350},data:{label:"Finish Node",type:"finish",properties:{format:"json",template:'{ "result": {{data}} }'}}},{id:"4",type:"mcp",position:{x:450,y:200},data:{label:"MCP Node",type:"mcp",properties:{channels:2,mode:"parallel"}}}],edges:[{id:"e1-2",source:"1",target:"2",type:"custom"},{id:"e2-3",source:"2",target:"3",type:"custom"}]};return s.info(`Sample flow generated with ID: ${b.id}`,{name:a}),b}async listFlows(){s.debug("listFlows: Entering method");try{let a=await this.loadFlows();return{success:!0,flows:a}}catch(a){return s.warn("listFlows: Failed to list flows:",a),{success:!1,error:a instanceof Error?a.message:"Failed to list flows"}}}}let w=new v},96487:()=>{}};