flujo-ai 3.19.0 → 3.21.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 (496) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-build-manifest.json +218 -183
  3. package/.next/app-path-routes-manifest.json +6 -1
  4. package/.next/build-manifest.json +5 -5
  5. package/.next/prerender-manifest.json +6 -6
  6. package/.next/react-loadable-manifest.json +8 -8
  7. package/.next/routes-manifest.json +16 -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/approvals/[id]/route.js +1 -0
  14. package/.next/server/app/api/approvals/[id]/route.js.nft.json +1 -0
  15. package/.next/server/app/api/approvals/[id]/route_client-reference-manifest.js +1 -0
  16. package/.next/server/app/api/approvals/route.js +2 -0
  17. package/.next/server/app/api/approvals/route.js.nft.json +1 -0
  18. package/.next/server/app/api/approvals/route_client-reference-manifest.js +1 -0
  19. package/.next/server/app/api/backup/route.js +1 -1
  20. package/.next/server/app/api/backup/route.js.nft.json +1 -1
  21. package/.next/server/app/api/backup/route_client-reference-manifest.js +1 -1
  22. package/.next/server/app/api/browse/route.js +1 -1
  23. package/.next/server/app/api/browse/route.js.nft.json +1 -1
  24. package/.next/server/app/api/browse/route_client-reference-manifest.js +1 -1
  25. package/.next/server/app/api/cwd/route.js +1 -1
  26. package/.next/server/app/api/cwd/route.js.nft.json +1 -1
  27. package/.next/server/app/api/cwd/route_client-reference-manifest.js +1 -1
  28. package/.next/server/app/api/encryption/secure/route.js +1 -1
  29. package/.next/server/app/api/encryption/secure/route.js.nft.json +1 -1
  30. package/.next/server/app/api/encryption/secure/route_client-reference-manifest.js +1 -1
  31. package/.next/server/app/api/env/route.js +1 -1
  32. package/.next/server/app/api/env/route.js.nft.json +1 -1
  33. package/.next/server/app/api/env/route_client-reference-manifest.js +1 -1
  34. package/.next/server/app/api/flow/[id]/route.js +1 -1
  35. package/.next/server/app/api/flow/[id]/route.js.nft.json +1 -1
  36. package/.next/server/app/api/flow/[id]/route_client-reference-manifest.js +1 -1
  37. package/.next/server/app/api/flow/compile/route.js +1 -1
  38. package/.next/server/app/api/flow/compile/route.js.nft.json +1 -1
  39. package/.next/server/app/api/flow/compile/route_client-reference-manifest.js +1 -1
  40. package/.next/server/app/api/flow/generate/route.js +1 -1
  41. package/.next/server/app/api/flow/generate/route.js.nft.json +1 -1
  42. package/.next/server/app/api/flow/generate/route_client-reference-manifest.js +1 -1
  43. package/.next/server/app/api/flow/improve/route.js +1 -1
  44. package/.next/server/app/api/flow/improve/route.js.nft.json +1 -1
  45. package/.next/server/app/api/flow/improve/route_client-reference-manifest.js +1 -1
  46. package/.next/server/app/api/flow/prompt-renderer/route.js +2 -2
  47. package/.next/server/app/api/flow/prompt-renderer/route.js.nft.json +1 -1
  48. package/.next/server/app/api/flow/prompt-renderer/route_client-reference-manifest.js +1 -1
  49. package/.next/server/app/api/flow/quick-chat/route.js +1 -1
  50. package/.next/server/app/api/flow/quick-chat/route.js.nft.json +1 -1
  51. package/.next/server/app/api/flow/quick-chat/route_client-reference-manifest.js +1 -1
  52. package/.next/server/app/api/flow/repair/route.js +1 -1
  53. package/.next/server/app/api/flow/repair/route.js.nft.json +1 -1
  54. package/.next/server/app/api/flow/repair/route_client-reference-manifest.js +1 -1
  55. package/.next/server/app/api/flow/route.js +1 -1
  56. package/.next/server/app/api/flow/route.js.nft.json +1 -1
  57. package/.next/server/app/api/flow/route_client-reference-manifest.js +1 -1
  58. package/.next/server/app/api/git/route.js +1 -1
  59. package/.next/server/app/api/git/route.js.nft.json +1 -1
  60. package/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
  61. package/.next/server/app/api/init/route.js +1 -1
  62. package/.next/server/app/api/init/route.js.nft.json +1 -1
  63. package/.next/server/app/api/init/route_client-reference-manifest.js +1 -1
  64. package/.next/server/app/api/local-models/capability/route_client-reference-manifest.js +1 -1
  65. package/.next/server/app/api/local-models/pull/route_client-reference-manifest.js +1 -1
  66. package/.next/server/app/api/local-models/suggest/route_client-reference-manifest.js +1 -1
  67. package/.next/server/app/api/mcp/cancel/route.js +2 -2
  68. package/.next/server/app/api/mcp/cancel/route.js.nft.json +1 -1
  69. package/.next/server/app/api/mcp/cancel/route_client-reference-manifest.js +1 -1
  70. package/.next/server/app/api/mcp/servers/[name]/prompts/get/route.js +1 -1
  71. package/.next/server/app/api/mcp/servers/[name]/prompts/get/route.js.nft.json +1 -1
  72. package/.next/server/app/api/mcp/servers/[name]/prompts/get/route_client-reference-manifest.js +1 -1
  73. package/.next/server/app/api/mcp/servers/[name]/prompts/route.js +1 -1
  74. package/.next/server/app/api/mcp/servers/[name]/prompts/route.js.nft.json +1 -1
  75. package/.next/server/app/api/mcp/servers/[name]/prompts/route_client-reference-manifest.js +1 -1
  76. package/.next/server/app/api/mcp/servers/[name]/resources/read/route.js +1 -1
  77. package/.next/server/app/api/mcp/servers/[name]/resources/read/route.js.nft.json +1 -1
  78. package/.next/server/app/api/mcp/servers/[name]/resources/read/route_client-reference-manifest.js +1 -1
  79. package/.next/server/app/api/mcp/servers/[name]/resources/route.js +1 -1
  80. package/.next/server/app/api/mcp/servers/[name]/resources/route.js.nft.json +1 -1
  81. package/.next/server/app/api/mcp/servers/[name]/resources/route_client-reference-manifest.js +1 -1
  82. package/.next/server/app/api/mcp/servers/[name]/route.js +1 -1
  83. package/.next/server/app/api/mcp/servers/[name]/route.js.nft.json +1 -1
  84. package/.next/server/app/api/mcp/servers/[name]/route_client-reference-manifest.js +1 -1
  85. package/.next/server/app/api/mcp/servers/[name]/status/route.js +1 -1
  86. package/.next/server/app/api/mcp/servers/[name]/status/route.js.nft.json +1 -1
  87. package/.next/server/app/api/mcp/servers/[name]/status/route_client-reference-manifest.js +1 -1
  88. package/.next/server/app/api/mcp/servers/[name]/tools/[toolName]/route.js +1 -1
  89. package/.next/server/app/api/mcp/servers/[name]/tools/[toolName]/route.js.nft.json +1 -1
  90. package/.next/server/app/api/mcp/servers/[name]/tools/[toolName]/route_client-reference-manifest.js +1 -1
  91. package/.next/server/app/api/mcp/servers/[name]/tools/route.js +1 -1
  92. package/.next/server/app/api/mcp/servers/[name]/tools/route.js.nft.json +1 -1
  93. package/.next/server/app/api/mcp/servers/[name]/tools/route_client-reference-manifest.js +1 -1
  94. package/.next/server/app/api/mcp/servers/route.js +1 -1
  95. package/.next/server/app/api/mcp/servers/route.js.nft.json +1 -1
  96. package/.next/server/app/api/mcp/servers/route_client-reference-manifest.js +1 -1
  97. package/.next/server/app/api/mcp/test-connection/route.js +1 -1
  98. package/.next/server/app/api/mcp/test-connection/route.js.nft.json +1 -1
  99. package/.next/server/app/api/mcp/test-connection/route_client-reference-manifest.js +1 -1
  100. package/.next/server/app/api/mcp/test-connection/stream/route.js +1 -1
  101. package/.next/server/app/api/mcp/test-connection/stream/route.js.nft.json +1 -1
  102. package/.next/server/app/api/mcp/test-connection/stream/route_client-reference-manifest.js +1 -1
  103. package/.next/server/app/api/mcp-registry/route.js +1 -1
  104. package/.next/server/app/api/mcp-registry/route.js.nft.json +1 -1
  105. package/.next/server/app/api/mcp-registry/route_client-reference-manifest.js +1 -1
  106. package/.next/server/app/api/mcp-registry/spotlight/route.js +1 -1
  107. package/.next/server/app/api/mcp-registry/spotlight/route.js.nft.json +1 -1
  108. package/.next/server/app/api/mcp-registry/spotlight/route_client-reference-manifest.js +1 -1
  109. package/.next/server/app/api/model/[id]/route.js +1 -1
  110. package/.next/server/app/api/model/[id]/route.js.nft.json +1 -1
  111. package/.next/server/app/api/model/[id]/route_client-reference-manifest.js +1 -1
  112. package/.next/server/app/api/model/provider/route.js +1 -1
  113. package/.next/server/app/api/model/provider/route.js.nft.json +1 -1
  114. package/.next/server/app/api/model/provider/route_client-reference-manifest.js +1 -1
  115. package/.next/server/app/api/model/route.js +1 -1
  116. package/.next/server/app/api/model/route.js.nft.json +1 -1
  117. package/.next/server/app/api/model/route_client-reference-manifest.js +1 -1
  118. package/.next/server/app/api/model/test/route.js +1 -1
  119. package/.next/server/app/api/model/test/route.js.nft.json +1 -1
  120. package/.next/server/app/api/model/test/route_client-reference-manifest.js +1 -1
  121. package/.next/server/app/api/oauth/callback/route.js +2 -2
  122. package/.next/server/app/api/oauth/callback/route.js.nft.json +1 -1
  123. package/.next/server/app/api/oauth/callback/route_client-reference-manifest.js +1 -1
  124. package/.next/server/app/api/oauth/initiate/route.js +2 -2
  125. package/.next/server/app/api/oauth/initiate/route.js.nft.json +1 -1
  126. package/.next/server/app/api/oauth/initiate/route_client-reference-manifest.js +1 -1
  127. package/.next/server/app/api/oauth/reset/route.js +1 -1
  128. package/.next/server/app/api/oauth/reset/route.js.nft.json +1 -1
  129. package/.next/server/app/api/oauth/reset/route_client-reference-manifest.js +1 -1
  130. package/.next/server/app/api/planned-executions/[id]/route.js +1 -1
  131. package/.next/server/app/api/planned-executions/[id]/route.js.nft.json +1 -1
  132. package/.next/server/app/api/planned-executions/[id]/route_client-reference-manifest.js +1 -1
  133. package/.next/server/app/api/planned-executions/[id]/run/route.js +1 -1
  134. package/.next/server/app/api/planned-executions/[id]/run/route.js.nft.json +1 -1
  135. package/.next/server/app/api/planned-executions/[id]/run/route_client-reference-manifest.js +1 -1
  136. package/.next/server/app/api/planned-executions/[id]/runs/route.js +1 -1
  137. package/.next/server/app/api/planned-executions/[id]/runs/route.js.nft.json +1 -1
  138. package/.next/server/app/api/planned-executions/[id]/runs/route_client-reference-manifest.js +1 -1
  139. package/.next/server/app/api/planned-executions/preview-schedule/route.js +1 -1
  140. package/.next/server/app/api/planned-executions/preview-schedule/route.js.nft.json +1 -1
  141. package/.next/server/app/api/planned-executions/preview-schedule/route_client-reference-manifest.js +1 -1
  142. package/.next/server/app/api/planned-executions/reconcile/route.js +1 -0
  143. package/.next/server/app/api/planned-executions/reconcile/route.js.nft.json +1 -0
  144. package/.next/server/app/api/planned-executions/reconcile/route_client-reference-manifest.js +1 -0
  145. package/.next/server/app/api/planned-executions/route.js +1 -1
  146. package/.next/server/app/api/planned-executions/route.js.nft.json +1 -1
  147. package/.next/server/app/api/planned-executions/route_client-reference-manifest.js +1 -1
  148. package/.next/server/app/api/restore/route.js +1 -1
  149. package/.next/server/app/api/restore/route.js.nft.json +1 -1
  150. package/.next/server/app/api/restore/route_client-reference-manifest.js +1 -1
  151. package/.next/server/app/api/runs/active/route.js +2 -0
  152. package/.next/server/app/api/runs/active/route.js.nft.json +1 -0
  153. package/.next/server/app/api/runs/active/route_client-reference-manifest.js +1 -0
  154. package/.next/server/app/api/storage/route.js +1 -1
  155. package/.next/server/app/api/storage/route.js.nft.json +1 -1
  156. package/.next/server/app/api/storage/route_client-reference-manifest.js +1 -1
  157. package/.next/server/app/api/update/route.js +1 -1
  158. package/.next/server/app/api/update/route.js.nft.json +1 -1
  159. package/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
  160. package/.next/server/app/api/webhooks/[id]/route.js +1 -1
  161. package/.next/server/app/api/webhooks/[id]/route.js.nft.json +1 -1
  162. package/.next/server/app/api/webhooks/[id]/route_client-reference-manifest.js +1 -1
  163. package/.next/server/app/chat/page.js +9 -9
  164. package/.next/server/app/chat/page.js.nft.json +1 -1
  165. package/.next/server/app/chat/page_client-reference-manifest.js +1 -1
  166. package/.next/server/app/chat.html +1 -1
  167. package/.next/server/app/chat.rsc +2 -2
  168. package/.next/server/app/docs/page.js +12 -2
  169. package/.next/server/app/docs/page.js.nft.json +1 -1
  170. package/.next/server/app/docs/page_client-reference-manifest.js +1 -1
  171. package/.next/server/app/docs.html +1 -1
  172. package/.next/server/app/docs.rsc +2 -2
  173. package/.next/server/app/executions/page.js +3 -3
  174. package/.next/server/app/executions/page.js.nft.json +1 -1
  175. package/.next/server/app/executions/page_client-reference-manifest.js +1 -1
  176. package/.next/server/app/executions.html +1 -1
  177. package/.next/server/app/executions.rsc +2 -2
  178. package/.next/server/app/flows/page.js +3 -3
  179. package/.next/server/app/flows/page.js.nft.json +1 -1
  180. package/.next/server/app/flows/page_client-reference-manifest.js +1 -1
  181. package/.next/server/app/flows.html +1 -1
  182. package/.next/server/app/flows.rsc +2 -2
  183. package/.next/server/app/index.html +1 -1
  184. package/.next/server/app/index.rsc +2 -2
  185. package/.next/server/app/mcp/page.js +5 -5
  186. package/.next/server/app/mcp/page.js.nft.json +1 -1
  187. package/.next/server/app/mcp/page_client-reference-manifest.js +1 -1
  188. package/.next/server/app/mcp-flows/route.js +1 -1
  189. package/.next/server/app/mcp-flows/route.js.nft.json +1 -1
  190. package/.next/server/app/mcp-flows/route_client-reference-manifest.js +1 -1
  191. package/.next/server/app/mcp-proxy/[server]/route.js +1 -1
  192. package/.next/server/app/mcp-proxy/[server]/route.js.nft.json +1 -1
  193. package/.next/server/app/mcp-proxy/[server]/route_client-reference-manifest.js +1 -1
  194. package/.next/server/app/mcp.html +1 -1
  195. package/.next/server/app/mcp.rsc +2 -2
  196. package/.next/server/app/models/page.js +2 -2
  197. package/.next/server/app/models/page.js.nft.json +1 -1
  198. package/.next/server/app/models/page_client-reference-manifest.js +1 -1
  199. package/.next/server/app/page.js +2 -2
  200. package/.next/server/app/page.js.nft.json +1 -1
  201. package/.next/server/app/page_client-reference-manifest.js +1 -1
  202. package/.next/server/app/settings/page.js +1 -1
  203. package/.next/server/app/settings/page.js.nft.json +1 -1
  204. package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  205. package/.next/server/app/settings.html +1 -1
  206. package/.next/server/app/settings.rsc +2 -2
  207. package/.next/server/app/v1/chat/completions/route.js +1 -1
  208. package/.next/server/app/v1/chat/completions/route.js.nft.json +1 -1
  209. package/.next/server/app/v1/chat/completions/route_client-reference-manifest.js +1 -1
  210. package/.next/server/app/v1/chat/conversations/[conversationId]/breakpoints/route.js +2 -2
  211. package/.next/server/app/v1/chat/conversations/[conversationId]/breakpoints/route.js.nft.json +1 -1
  212. package/.next/server/app/v1/chat/conversations/[conversationId]/breakpoints/route_client-reference-manifest.js +1 -1
  213. package/.next/server/app/v1/chat/conversations/[conversationId]/cancel/route.js +2 -2
  214. package/.next/server/app/v1/chat/conversations/[conversationId]/cancel/route.js.nft.json +1 -1
  215. package/.next/server/app/v1/chat/conversations/[conversationId]/cancel/route_client-reference-manifest.js +1 -1
  216. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/continue/route.js +1 -1
  217. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/continue/route.js.nft.json +1 -1
  218. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/continue/route_client-reference-manifest.js +1 -1
  219. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/step/route.js +1 -1
  220. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/step/route.js.nft.json +1 -1
  221. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/step/route_client-reference-manifest.js +1 -1
  222. package/.next/server/app/v1/chat/conversations/[conversationId]/edit-state/route.js +2 -2
  223. package/.next/server/app/v1/chat/conversations/[conversationId]/edit-state/route.js.nft.json +1 -1
  224. package/.next/server/app/v1/chat/conversations/[conversationId]/edit-state/route_client-reference-manifest.js +1 -1
  225. package/.next/server/app/v1/chat/conversations/[conversationId]/events/route.js +2 -2
  226. package/.next/server/app/v1/chat/conversations/[conversationId]/events/route.js.nft.json +1 -1
  227. package/.next/server/app/v1/chat/conversations/[conversationId]/events/route_client-reference-manifest.js +1 -1
  228. package/.next/server/app/v1/chat/conversations/[conversationId]/resources/route.js +1 -0
  229. package/.next/server/app/v1/chat/conversations/[conversationId]/resources/route.js.nft.json +1 -0
  230. package/.next/server/app/v1/chat/conversations/[conversationId]/resources/route_client-reference-manifest.js +1 -0
  231. package/.next/server/app/v1/chat/conversations/[conversationId]/respond/route.js +1 -1
  232. package/.next/server/app/v1/chat/conversations/[conversationId]/respond/route.js.nft.json +1 -1
  233. package/.next/server/app/v1/chat/conversations/[conversationId]/respond/route_client-reference-manifest.js +1 -1
  234. package/.next/server/app/v1/chat/conversations/[conversationId]/route.js +2 -2
  235. package/.next/server/app/v1/chat/conversations/[conversationId]/route.js.nft.json +1 -1
  236. package/.next/server/app/v1/chat/conversations/[conversationId]/route_client-reference-manifest.js +1 -1
  237. package/.next/server/app/v1/chat/conversations/route.js +2 -2
  238. package/.next/server/app/v1/chat/conversations/route.js.nft.json +1 -1
  239. package/.next/server/app/v1/chat/conversations/route_client-reference-manifest.js +1 -1
  240. package/.next/server/app/v1/models/route.js +1 -1
  241. package/.next/server/app/v1/models/route.js.nft.json +1 -1
  242. package/.next/server/app/v1/models/route_client-reference-manifest.js +1 -1
  243. package/.next/server/app-paths-manifest.json +6 -1
  244. package/.next/server/chunks/1083.js +1 -1
  245. package/.next/server/chunks/1152.js +1 -1
  246. package/.next/server/chunks/1197.js +2 -2
  247. package/.next/server/chunks/1226.js +1 -0
  248. package/.next/server/chunks/1373.js +1 -1
  249. package/.next/server/chunks/1377.js +1 -0
  250. package/.next/server/chunks/1659.js +1 -0
  251. package/.next/server/chunks/1690.js +1 -0
  252. package/.next/server/chunks/1746.js +1 -1
  253. package/.next/server/chunks/2859.js +3 -3
  254. package/.next/server/chunks/289.js +1 -0
  255. package/.next/server/chunks/{1912.js → 3280.js} +3 -3
  256. package/.next/server/chunks/3774.js +6 -0
  257. package/.next/server/chunks/{4028.js → 3802.js} +1 -1
  258. package/.next/server/chunks/3823.js +40 -0
  259. package/.next/server/chunks/{3511.js → 3928.js} +1 -1
  260. package/.next/server/chunks/3984.js +4 -4
  261. package/.next/server/chunks/4043.js +6 -0
  262. package/.next/server/chunks/4045.js +1 -0
  263. package/.next/server/chunks/4265.js +1 -1
  264. package/.next/server/chunks/4322.js +1 -0
  265. package/.next/server/chunks/4436.js +1 -0
  266. package/.next/server/chunks/4456.js +1 -1
  267. package/.next/server/chunks/4561.js +64 -0
  268. package/.next/server/chunks/4637.js +16 -6
  269. package/.next/server/chunks/4671.js +1 -0
  270. package/.next/server/chunks/5662.js +1 -1
  271. package/.next/server/chunks/5708.js +11 -1
  272. package/.next/server/chunks/5734.js +8 -8
  273. package/.next/server/chunks/6537.js +1 -0
  274. package/.next/server/chunks/6772.js +1 -1
  275. package/.next/server/chunks/6793.js +1 -0
  276. package/.next/server/chunks/6901.js +3 -3
  277. package/.next/server/chunks/6908.js +12 -0
  278. package/.next/server/chunks/6996.js +3 -3
  279. package/.next/server/chunks/701.js +1 -1
  280. package/.next/server/chunks/7032.js +1 -0
  281. package/.next/server/chunks/7214.js +4 -4
  282. package/.next/server/chunks/724.js +4 -4
  283. package/.next/server/chunks/7362.js +12 -12
  284. package/.next/server/chunks/7463.js +6 -0
  285. package/.next/server/chunks/7506.js +1 -1
  286. package/.next/server/chunks/7821.js +1 -1
  287. package/.next/server/chunks/7959.js +1 -0
  288. package/.next/server/chunks/8298.js +1 -0
  289. package/.next/server/chunks/8652.js +42 -0
  290. package/.next/server/chunks/8739.js +2 -2
  291. package/.next/server/chunks/9201.js +17 -0
  292. package/.next/server/chunks/9285.js +1 -0
  293. package/.next/server/chunks/9343.js +1 -1
  294. package/.next/server/chunks/{6088.js → 9432.js} +2 -2
  295. package/.next/server/chunks/9509.js +2 -2
  296. package/.next/server/chunks/9957.js +1 -0
  297. package/.next/server/instrumentation.js.nft.json +1 -1
  298. package/.next/server/middleware-build-manifest.js +1 -1
  299. package/.next/server/middleware-react-loadable-manifest.js +1 -1
  300. package/.next/server/pages/404.html +1 -1
  301. package/.next/server/pages/500.html +1 -1
  302. package/.next/server/server-reference-manifest.js +1 -1
  303. package/.next/server/server-reference-manifest.json +1 -1
  304. package/.next/static/PgkIffa5DdoRlsKKJyFOk/_buildManifest.js +1 -0
  305. package/.next/static/chunks/1423-19dafbb953c4992d.js +8 -0
  306. package/.next/static/chunks/{1892-a0f5ec7152540dc3.js → 1892-5c1e38d89e0a5a9c.js} +1 -1
  307. package/.next/static/chunks/{3272-ab88dd195ea61b65.js → 3272-fd8d59523f61da96.js} +1 -1
  308. package/.next/static/chunks/4031-ac736d3645071bb6.js +1 -0
  309. package/.next/static/chunks/4058-0d7bba578ece1784.js +1 -0
  310. package/.next/static/chunks/4480-7fb4d36c17264491.js +1 -0
  311. package/.next/static/chunks/4742-8501334dffd3b129.js +1 -0
  312. package/.next/static/chunks/{5501-7d6e38c7c8cc3c5a.js → 5501-c400aaeaf57e6297.js} +1 -1
  313. package/.next/static/chunks/557-dbc9903702465976.js +1 -0
  314. package/.next/static/chunks/5619-7ed132269b34f9b6.js +1 -0
  315. package/.next/static/chunks/6731-c230e88cf0032609.js +1 -0
  316. package/.next/static/chunks/{7583.5355a64005f2b265.js → 7583.7cb88044a5212b29.js} +1 -1
  317. package/.next/static/chunks/{8187.57929e3f925fe538.js → 8187.204e85fb197ddeb1.js} +1 -1
  318. package/.next/static/chunks/{1634-d4019c4a5cac2ed0.js → 9114-f8e481157e7d8d16.js} +1 -1
  319. package/.next/static/chunks/{9164-14dc5889cb7478c0.js → 9164-3d34bf7eab100ac7.js} +1 -1
  320. package/.next/static/chunks/app/api/approvals/[id]/route-0343078cf7f19a65.js +1 -0
  321. package/.next/static/chunks/app/api/approvals/route-0343078cf7f19a65.js +1 -0
  322. package/.next/static/chunks/app/api/backup/route-0343078cf7f19a65.js +1 -0
  323. package/.next/static/chunks/app/api/browse/route-0343078cf7f19a65.js +1 -0
  324. package/.next/static/chunks/app/api/cwd/route-0343078cf7f19a65.js +1 -0
  325. package/.next/static/chunks/app/api/encryption/secure/route-0343078cf7f19a65.js +1 -0
  326. package/.next/static/chunks/app/api/env/route-0343078cf7f19a65.js +1 -0
  327. package/.next/static/chunks/app/api/flow/[id]/route-0343078cf7f19a65.js +1 -0
  328. package/.next/static/chunks/app/api/flow/compile/route-0343078cf7f19a65.js +1 -0
  329. package/.next/static/chunks/app/api/flow/generate/route-0343078cf7f19a65.js +1 -0
  330. package/.next/static/chunks/app/api/flow/improve/route-0343078cf7f19a65.js +1 -0
  331. package/.next/static/chunks/app/api/flow/prompt-renderer/route-0343078cf7f19a65.js +1 -0
  332. package/.next/static/chunks/app/api/flow/quick-chat/route-0343078cf7f19a65.js +1 -0
  333. package/.next/static/chunks/app/api/flow/repair/route-0343078cf7f19a65.js +1 -0
  334. package/.next/static/chunks/app/api/flow/route-0343078cf7f19a65.js +1 -0
  335. package/.next/static/chunks/app/api/git/route-0343078cf7f19a65.js +1 -0
  336. package/.next/static/chunks/app/api/init/route-0343078cf7f19a65.js +1 -0
  337. package/.next/static/chunks/app/api/local-models/capability/route-0343078cf7f19a65.js +1 -0
  338. package/.next/static/chunks/app/api/local-models/pull/route-0343078cf7f19a65.js +1 -0
  339. package/.next/static/chunks/app/api/local-models/suggest/route-0343078cf7f19a65.js +1 -0
  340. package/.next/static/chunks/app/api/mcp/cancel/route-0343078cf7f19a65.js +1 -0
  341. package/.next/static/chunks/app/api/mcp/servers/[name]/prompts/get/route-0343078cf7f19a65.js +1 -0
  342. package/.next/static/chunks/app/api/mcp/servers/[name]/prompts/route-0343078cf7f19a65.js +1 -0
  343. package/.next/static/chunks/app/api/mcp/servers/[name]/resources/read/route-0343078cf7f19a65.js +1 -0
  344. package/.next/static/chunks/app/api/mcp/servers/[name]/resources/route-0343078cf7f19a65.js +1 -0
  345. package/.next/static/chunks/app/api/mcp/servers/[name]/route-0343078cf7f19a65.js +1 -0
  346. package/.next/static/chunks/app/api/mcp/servers/[name]/status/route-0343078cf7f19a65.js +1 -0
  347. package/.next/static/chunks/app/api/mcp/servers/[name]/tools/[toolName]/route-0343078cf7f19a65.js +1 -0
  348. package/.next/static/chunks/app/api/mcp/servers/[name]/tools/route-0343078cf7f19a65.js +1 -0
  349. package/.next/static/chunks/app/api/mcp/servers/route-0343078cf7f19a65.js +1 -0
  350. package/.next/static/chunks/app/api/mcp/test-connection/route-0343078cf7f19a65.js +1 -0
  351. package/.next/static/chunks/app/api/mcp/test-connection/stream/route-0343078cf7f19a65.js +1 -0
  352. package/.next/static/chunks/app/api/mcp-registry/route-0343078cf7f19a65.js +1 -0
  353. package/.next/static/chunks/app/api/mcp-registry/spotlight/route-0343078cf7f19a65.js +1 -0
  354. package/.next/static/chunks/app/api/model/[id]/route-0343078cf7f19a65.js +1 -0
  355. package/.next/static/chunks/app/api/model/provider/route-0343078cf7f19a65.js +1 -0
  356. package/.next/static/chunks/app/api/model/route-0343078cf7f19a65.js +1 -0
  357. package/.next/static/chunks/app/api/model/test/route-0343078cf7f19a65.js +1 -0
  358. package/.next/static/chunks/app/api/oauth/callback/route-0343078cf7f19a65.js +1 -0
  359. package/.next/static/chunks/app/api/oauth/initiate/route-0343078cf7f19a65.js +1 -0
  360. package/.next/static/chunks/app/api/oauth/reset/route-0343078cf7f19a65.js +1 -0
  361. package/.next/static/chunks/app/api/planned-executions/[id]/route-0343078cf7f19a65.js +1 -0
  362. package/.next/static/chunks/app/api/planned-executions/[id]/run/route-0343078cf7f19a65.js +1 -0
  363. package/.next/static/chunks/app/api/planned-executions/[id]/runs/route-0343078cf7f19a65.js +1 -0
  364. package/.next/static/chunks/app/api/planned-executions/preview-schedule/route-0343078cf7f19a65.js +1 -0
  365. package/.next/static/chunks/app/api/planned-executions/reconcile/route-0343078cf7f19a65.js +1 -0
  366. package/.next/static/chunks/app/api/planned-executions/route-0343078cf7f19a65.js +1 -0
  367. package/.next/static/chunks/app/api/restore/route-0343078cf7f19a65.js +1 -0
  368. package/.next/static/chunks/app/api/runs/active/route-0343078cf7f19a65.js +1 -0
  369. package/.next/static/chunks/app/api/storage/route-0343078cf7f19a65.js +1 -0
  370. package/.next/static/chunks/app/api/update/route-0343078cf7f19a65.js +1 -0
  371. package/.next/static/chunks/app/api/webhooks/[id]/route-0343078cf7f19a65.js +1 -0
  372. package/.next/static/chunks/app/chat/page-1367f696bc0ade9b.js +1 -0
  373. package/.next/static/chunks/app/docs/page-10b73b5b2c608484.js +1 -0
  374. package/.next/static/chunks/app/executions/page-98e51554d7b1df19.js +1 -0
  375. package/.next/static/chunks/app/flows/page-edee8e5c15219bc6.js +1 -0
  376. package/.next/static/chunks/app/mcp/page-3cae88bf0236503e.js +1 -0
  377. package/.next/static/chunks/app/mcp-flows/route-0343078cf7f19a65.js +1 -0
  378. package/.next/static/chunks/app/mcp-proxy/[server]/route-0343078cf7f19a65.js +1 -0
  379. package/.next/static/chunks/app/models/page-d2dc022339075a6a.js +1 -0
  380. package/.next/static/chunks/app/v1/chat/completions/route-0343078cf7f19a65.js +1 -0
  381. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/breakpoints/route-0343078cf7f19a65.js +1 -0
  382. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/cancel/route-0343078cf7f19a65.js +1 -0
  383. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/debug/continue/route-0343078cf7f19a65.js +1 -0
  384. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/debug/step/route-0343078cf7f19a65.js +1 -0
  385. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/edit-state/route-0343078cf7f19a65.js +1 -0
  386. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/events/route-0343078cf7f19a65.js +1 -0
  387. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/resources/route-0343078cf7f19a65.js +1 -0
  388. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/respond/route-0343078cf7f19a65.js +1 -0
  389. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/route-0343078cf7f19a65.js +1 -0
  390. package/.next/static/chunks/app/v1/chat/conversations/route-0343078cf7f19a65.js +1 -0
  391. package/.next/static/chunks/app/v1/models/route-0343078cf7f19a65.js +1 -0
  392. package/.next/static/chunks/{webpack-3e8560996ac8c1e0.js → webpack-fd64460ba6699c85.js} +1 -1
  393. package/.next/trace +8 -7
  394. package/.next/types/app/api/approvals/[id]/route.ts +347 -0
  395. package/.next/types/app/api/approvals/route.ts +347 -0
  396. package/.next/types/app/api/planned-executions/reconcile/route.ts +347 -0
  397. package/.next/types/app/api/runs/active/route.ts +347 -0
  398. package/.next/types/app/v1/chat/conversations/[conversationId]/resources/route.ts +347 -0
  399. package/.next/types/routes.d.ts +6 -1
  400. package/.next/types/validator.ts +45 -0
  401. package/README.md +1 -1
  402. package/package.json +1 -1
  403. package/.next/server/chunks/1991.js +0 -1
  404. package/.next/server/chunks/2194.js +0 -1
  405. package/.next/server/chunks/2350.js +0 -1
  406. package/.next/server/chunks/264.js +0 -17
  407. package/.next/server/chunks/3310.js +0 -42
  408. package/.next/server/chunks/3574.js +0 -6
  409. package/.next/server/chunks/3648.js +0 -1
  410. package/.next/server/chunks/3953.js +0 -1
  411. package/.next/server/chunks/4239.js +0 -1
  412. package/.next/server/chunks/4372.js +0 -1
  413. package/.next/server/chunks/4681.js +0 -1
  414. package/.next/server/chunks/5148.js +0 -1
  415. package/.next/server/chunks/6136.js +0 -12
  416. package/.next/server/chunks/6465.js +0 -1
  417. package/.next/server/chunks/7403.js +0 -38
  418. package/.next/server/chunks/7635.js +0 -6
  419. package/.next/server/chunks/7865.js +0 -9
  420. package/.next/static/chunks/1711-ccf5eba61d618a1a.js +0 -1
  421. package/.next/static/chunks/3625-74c77250d64d1cd3.js +0 -1
  422. package/.next/static/chunks/5134-e21bd33daaf14ecf.js +0 -1
  423. package/.next/static/chunks/5619-82fc5c3133837739.js +0 -1
  424. package/.next/static/chunks/6013-cb423bc438256acb.js +0 -1
  425. package/.next/static/chunks/7829-b843e80f32a83256.js +0 -1
  426. package/.next/static/chunks/924-64f908860caf1a35.js +0 -1
  427. package/.next/static/chunks/9747-ffb8be5e59700c27.js +0 -8
  428. package/.next/static/chunks/app/api/backup/route-ff084c1cc278df77.js +0 -1
  429. package/.next/static/chunks/app/api/browse/route-ff084c1cc278df77.js +0 -1
  430. package/.next/static/chunks/app/api/cwd/route-ff084c1cc278df77.js +0 -1
  431. package/.next/static/chunks/app/api/encryption/secure/route-ff084c1cc278df77.js +0 -1
  432. package/.next/static/chunks/app/api/env/route-ff084c1cc278df77.js +0 -1
  433. package/.next/static/chunks/app/api/flow/[id]/route-ff084c1cc278df77.js +0 -1
  434. package/.next/static/chunks/app/api/flow/compile/route-ff084c1cc278df77.js +0 -1
  435. package/.next/static/chunks/app/api/flow/generate/route-ff084c1cc278df77.js +0 -1
  436. package/.next/static/chunks/app/api/flow/improve/route-ff084c1cc278df77.js +0 -1
  437. package/.next/static/chunks/app/api/flow/prompt-renderer/route-ff084c1cc278df77.js +0 -1
  438. package/.next/static/chunks/app/api/flow/quick-chat/route-ff084c1cc278df77.js +0 -1
  439. package/.next/static/chunks/app/api/flow/repair/route-ff084c1cc278df77.js +0 -1
  440. package/.next/static/chunks/app/api/flow/route-ff084c1cc278df77.js +0 -1
  441. package/.next/static/chunks/app/api/git/route-ff084c1cc278df77.js +0 -1
  442. package/.next/static/chunks/app/api/init/route-ff084c1cc278df77.js +0 -1
  443. package/.next/static/chunks/app/api/local-models/capability/route-ff084c1cc278df77.js +0 -1
  444. package/.next/static/chunks/app/api/local-models/pull/route-ff084c1cc278df77.js +0 -1
  445. package/.next/static/chunks/app/api/local-models/suggest/route-ff084c1cc278df77.js +0 -1
  446. package/.next/static/chunks/app/api/mcp/cancel/route-ff084c1cc278df77.js +0 -1
  447. package/.next/static/chunks/app/api/mcp/servers/[name]/prompts/get/route-ff084c1cc278df77.js +0 -1
  448. package/.next/static/chunks/app/api/mcp/servers/[name]/prompts/route-ff084c1cc278df77.js +0 -1
  449. package/.next/static/chunks/app/api/mcp/servers/[name]/resources/read/route-ff084c1cc278df77.js +0 -1
  450. package/.next/static/chunks/app/api/mcp/servers/[name]/resources/route-ff084c1cc278df77.js +0 -1
  451. package/.next/static/chunks/app/api/mcp/servers/[name]/route-ff084c1cc278df77.js +0 -1
  452. package/.next/static/chunks/app/api/mcp/servers/[name]/status/route-ff084c1cc278df77.js +0 -1
  453. package/.next/static/chunks/app/api/mcp/servers/[name]/tools/[toolName]/route-ff084c1cc278df77.js +0 -1
  454. package/.next/static/chunks/app/api/mcp/servers/[name]/tools/route-ff084c1cc278df77.js +0 -1
  455. package/.next/static/chunks/app/api/mcp/servers/route-ff084c1cc278df77.js +0 -1
  456. package/.next/static/chunks/app/api/mcp/test-connection/route-ff084c1cc278df77.js +0 -1
  457. package/.next/static/chunks/app/api/mcp/test-connection/stream/route-ff084c1cc278df77.js +0 -1
  458. package/.next/static/chunks/app/api/mcp-registry/route-ff084c1cc278df77.js +0 -1
  459. package/.next/static/chunks/app/api/mcp-registry/spotlight/route-ff084c1cc278df77.js +0 -1
  460. package/.next/static/chunks/app/api/model/[id]/route-ff084c1cc278df77.js +0 -1
  461. package/.next/static/chunks/app/api/model/provider/route-ff084c1cc278df77.js +0 -1
  462. package/.next/static/chunks/app/api/model/route-ff084c1cc278df77.js +0 -1
  463. package/.next/static/chunks/app/api/model/test/route-ff084c1cc278df77.js +0 -1
  464. package/.next/static/chunks/app/api/oauth/callback/route-ff084c1cc278df77.js +0 -1
  465. package/.next/static/chunks/app/api/oauth/initiate/route-ff084c1cc278df77.js +0 -1
  466. package/.next/static/chunks/app/api/oauth/reset/route-ff084c1cc278df77.js +0 -1
  467. package/.next/static/chunks/app/api/planned-executions/[id]/route-ff084c1cc278df77.js +0 -1
  468. package/.next/static/chunks/app/api/planned-executions/[id]/run/route-ff084c1cc278df77.js +0 -1
  469. package/.next/static/chunks/app/api/planned-executions/[id]/runs/route-ff084c1cc278df77.js +0 -1
  470. package/.next/static/chunks/app/api/planned-executions/preview-schedule/route-ff084c1cc278df77.js +0 -1
  471. package/.next/static/chunks/app/api/planned-executions/route-ff084c1cc278df77.js +0 -1
  472. package/.next/static/chunks/app/api/restore/route-ff084c1cc278df77.js +0 -1
  473. package/.next/static/chunks/app/api/storage/route-ff084c1cc278df77.js +0 -1
  474. package/.next/static/chunks/app/api/update/route-ff084c1cc278df77.js +0 -1
  475. package/.next/static/chunks/app/api/webhooks/[id]/route-ff084c1cc278df77.js +0 -1
  476. package/.next/static/chunks/app/chat/page-1d764d1de5ad5d2f.js +0 -1
  477. package/.next/static/chunks/app/docs/page-d670c1ec8af5cb54.js +0 -1
  478. package/.next/static/chunks/app/executions/page-109274291811d467.js +0 -1
  479. package/.next/static/chunks/app/flows/page-df8eda0e83934fb2.js +0 -1
  480. package/.next/static/chunks/app/mcp/page-9a612d0be5a3336d.js +0 -1
  481. package/.next/static/chunks/app/mcp-flows/route-ff084c1cc278df77.js +0 -1
  482. package/.next/static/chunks/app/mcp-proxy/[server]/route-ff084c1cc278df77.js +0 -1
  483. package/.next/static/chunks/app/models/page-616950f93a1e0027.js +0 -1
  484. package/.next/static/chunks/app/v1/chat/completions/route-ff084c1cc278df77.js +0 -1
  485. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/breakpoints/route-ff084c1cc278df77.js +0 -1
  486. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/cancel/route-ff084c1cc278df77.js +0 -1
  487. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/debug/continue/route-ff084c1cc278df77.js +0 -1
  488. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/debug/step/route-ff084c1cc278df77.js +0 -1
  489. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/edit-state/route-ff084c1cc278df77.js +0 -1
  490. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/events/route-ff084c1cc278df77.js +0 -1
  491. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/respond/route-ff084c1cc278df77.js +0 -1
  492. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/route-ff084c1cc278df77.js +0 -1
  493. package/.next/static/chunks/app/v1/chat/conversations/route-ff084c1cc278df77.js +0 -1
  494. package/.next/static/chunks/app/v1/models/route-ff084c1cc278df77.js +0 -1
  495. package/.next/static/itJEX_uJ7hJ7oF-igwwK9/_buildManifest.js +0 -1
  496. /package/.next/static/{itJEX_uJ7hJ7oF-igwwK9 → PgkIffa5DdoRlsKKJyFOk}/_ssgManifest.js +0 -0
@@ -0,0 +1,347 @@
1
+ // File: C:\Users\MarioAndreschak\Documents\GitHub\FLUJO\src\app\v1\chat\conversations\[conversationId]\resources\route.ts
2
+ import * as entry from '../../../../../../../../src/app/v1/chat/conversations/[conversationId]/resources/route.js'
3
+ import type { NextRequest } from 'next/server.js'
4
+
5
+ type TEntry = typeof import('../../../../../../../../src/app/v1/chat/conversations/[conversationId]/resources/route.js')
6
+
7
+ type SegmentParams<T extends Object = any> = T extends Record<string, any>
8
+ ? { [K in keyof T]: T[K] extends string ? string | string[] | undefined : never }
9
+ : T
10
+
11
+ // Check that the entry is a valid entry
12
+ checkFields<Diff<{
13
+ GET?: Function
14
+ HEAD?: Function
15
+ OPTIONS?: Function
16
+ POST?: Function
17
+ PUT?: Function
18
+ DELETE?: Function
19
+ PATCH?: Function
20
+ config?: {}
21
+ generateStaticParams?: Function
22
+ revalidate?: RevalidateRange<TEntry> | false
23
+ dynamic?: 'auto' | 'force-dynamic' | 'error' | 'force-static'
24
+ dynamicParams?: boolean
25
+ fetchCache?: 'auto' | 'force-no-store' | 'only-no-store' | 'default-no-store' | 'default-cache' | 'only-cache' | 'force-cache'
26
+ preferredRegion?: 'auto' | 'global' | 'home' | string | string[]
27
+ runtime?: 'nodejs' | 'experimental-edge' | 'edge'
28
+ maxDuration?: number
29
+
30
+ }, TEntry, ''>>()
31
+
32
+ type RouteContext = { params: Promise<SegmentParams> }
33
+ // Check the prop type of the entry function
34
+ if ('GET' in entry) {
35
+ checkFields<
36
+ Diff<
37
+ ParamCheck<Request | NextRequest>,
38
+ {
39
+ __tag__: 'GET'
40
+ __param_position__: 'first'
41
+ __param_type__: FirstArg<MaybeField<TEntry, 'GET'>>
42
+ },
43
+ 'GET'
44
+ >
45
+ >()
46
+ checkFields<
47
+ Diff<
48
+ ParamCheck<RouteContext>,
49
+ {
50
+ __tag__: 'GET'
51
+ __param_position__: 'second'
52
+ __param_type__: SecondArg<MaybeField<TEntry, 'GET'>>
53
+ },
54
+ 'GET'
55
+ >
56
+ >()
57
+
58
+ checkFields<
59
+ Diff<
60
+ {
61
+ __tag__: 'GET',
62
+ __return_type__: Response | void | never | Promise<Response | void | never>
63
+ },
64
+ {
65
+ __tag__: 'GET',
66
+ __return_type__: ReturnType<MaybeField<TEntry, 'GET'>>
67
+ },
68
+ 'GET'
69
+ >
70
+ >()
71
+ }
72
+ // Check the prop type of the entry function
73
+ if ('HEAD' in entry) {
74
+ checkFields<
75
+ Diff<
76
+ ParamCheck<Request | NextRequest>,
77
+ {
78
+ __tag__: 'HEAD'
79
+ __param_position__: 'first'
80
+ __param_type__: FirstArg<MaybeField<TEntry, 'HEAD'>>
81
+ },
82
+ 'HEAD'
83
+ >
84
+ >()
85
+ checkFields<
86
+ Diff<
87
+ ParamCheck<RouteContext>,
88
+ {
89
+ __tag__: 'HEAD'
90
+ __param_position__: 'second'
91
+ __param_type__: SecondArg<MaybeField<TEntry, 'HEAD'>>
92
+ },
93
+ 'HEAD'
94
+ >
95
+ >()
96
+
97
+ checkFields<
98
+ Diff<
99
+ {
100
+ __tag__: 'HEAD',
101
+ __return_type__: Response | void | never | Promise<Response | void | never>
102
+ },
103
+ {
104
+ __tag__: 'HEAD',
105
+ __return_type__: ReturnType<MaybeField<TEntry, 'HEAD'>>
106
+ },
107
+ 'HEAD'
108
+ >
109
+ >()
110
+ }
111
+ // Check the prop type of the entry function
112
+ if ('OPTIONS' in entry) {
113
+ checkFields<
114
+ Diff<
115
+ ParamCheck<Request | NextRequest>,
116
+ {
117
+ __tag__: 'OPTIONS'
118
+ __param_position__: 'first'
119
+ __param_type__: FirstArg<MaybeField<TEntry, 'OPTIONS'>>
120
+ },
121
+ 'OPTIONS'
122
+ >
123
+ >()
124
+ checkFields<
125
+ Diff<
126
+ ParamCheck<RouteContext>,
127
+ {
128
+ __tag__: 'OPTIONS'
129
+ __param_position__: 'second'
130
+ __param_type__: SecondArg<MaybeField<TEntry, 'OPTIONS'>>
131
+ },
132
+ 'OPTIONS'
133
+ >
134
+ >()
135
+
136
+ checkFields<
137
+ Diff<
138
+ {
139
+ __tag__: 'OPTIONS',
140
+ __return_type__: Response | void | never | Promise<Response | void | never>
141
+ },
142
+ {
143
+ __tag__: 'OPTIONS',
144
+ __return_type__: ReturnType<MaybeField<TEntry, 'OPTIONS'>>
145
+ },
146
+ 'OPTIONS'
147
+ >
148
+ >()
149
+ }
150
+ // Check the prop type of the entry function
151
+ if ('POST' in entry) {
152
+ checkFields<
153
+ Diff<
154
+ ParamCheck<Request | NextRequest>,
155
+ {
156
+ __tag__: 'POST'
157
+ __param_position__: 'first'
158
+ __param_type__: FirstArg<MaybeField<TEntry, 'POST'>>
159
+ },
160
+ 'POST'
161
+ >
162
+ >()
163
+ checkFields<
164
+ Diff<
165
+ ParamCheck<RouteContext>,
166
+ {
167
+ __tag__: 'POST'
168
+ __param_position__: 'second'
169
+ __param_type__: SecondArg<MaybeField<TEntry, 'POST'>>
170
+ },
171
+ 'POST'
172
+ >
173
+ >()
174
+
175
+ checkFields<
176
+ Diff<
177
+ {
178
+ __tag__: 'POST',
179
+ __return_type__: Response | void | never | Promise<Response | void | never>
180
+ },
181
+ {
182
+ __tag__: 'POST',
183
+ __return_type__: ReturnType<MaybeField<TEntry, 'POST'>>
184
+ },
185
+ 'POST'
186
+ >
187
+ >()
188
+ }
189
+ // Check the prop type of the entry function
190
+ if ('PUT' in entry) {
191
+ checkFields<
192
+ Diff<
193
+ ParamCheck<Request | NextRequest>,
194
+ {
195
+ __tag__: 'PUT'
196
+ __param_position__: 'first'
197
+ __param_type__: FirstArg<MaybeField<TEntry, 'PUT'>>
198
+ },
199
+ 'PUT'
200
+ >
201
+ >()
202
+ checkFields<
203
+ Diff<
204
+ ParamCheck<RouteContext>,
205
+ {
206
+ __tag__: 'PUT'
207
+ __param_position__: 'second'
208
+ __param_type__: SecondArg<MaybeField<TEntry, 'PUT'>>
209
+ },
210
+ 'PUT'
211
+ >
212
+ >()
213
+
214
+ checkFields<
215
+ Diff<
216
+ {
217
+ __tag__: 'PUT',
218
+ __return_type__: Response | void | never | Promise<Response | void | never>
219
+ },
220
+ {
221
+ __tag__: 'PUT',
222
+ __return_type__: ReturnType<MaybeField<TEntry, 'PUT'>>
223
+ },
224
+ 'PUT'
225
+ >
226
+ >()
227
+ }
228
+ // Check the prop type of the entry function
229
+ if ('DELETE' in entry) {
230
+ checkFields<
231
+ Diff<
232
+ ParamCheck<Request | NextRequest>,
233
+ {
234
+ __tag__: 'DELETE'
235
+ __param_position__: 'first'
236
+ __param_type__: FirstArg<MaybeField<TEntry, 'DELETE'>>
237
+ },
238
+ 'DELETE'
239
+ >
240
+ >()
241
+ checkFields<
242
+ Diff<
243
+ ParamCheck<RouteContext>,
244
+ {
245
+ __tag__: 'DELETE'
246
+ __param_position__: 'second'
247
+ __param_type__: SecondArg<MaybeField<TEntry, 'DELETE'>>
248
+ },
249
+ 'DELETE'
250
+ >
251
+ >()
252
+
253
+ checkFields<
254
+ Diff<
255
+ {
256
+ __tag__: 'DELETE',
257
+ __return_type__: Response | void | never | Promise<Response | void | never>
258
+ },
259
+ {
260
+ __tag__: 'DELETE',
261
+ __return_type__: ReturnType<MaybeField<TEntry, 'DELETE'>>
262
+ },
263
+ 'DELETE'
264
+ >
265
+ >()
266
+ }
267
+ // Check the prop type of the entry function
268
+ if ('PATCH' in entry) {
269
+ checkFields<
270
+ Diff<
271
+ ParamCheck<Request | NextRequest>,
272
+ {
273
+ __tag__: 'PATCH'
274
+ __param_position__: 'first'
275
+ __param_type__: FirstArg<MaybeField<TEntry, 'PATCH'>>
276
+ },
277
+ 'PATCH'
278
+ >
279
+ >()
280
+ checkFields<
281
+ Diff<
282
+ ParamCheck<RouteContext>,
283
+ {
284
+ __tag__: 'PATCH'
285
+ __param_position__: 'second'
286
+ __param_type__: SecondArg<MaybeField<TEntry, 'PATCH'>>
287
+ },
288
+ 'PATCH'
289
+ >
290
+ >()
291
+
292
+ checkFields<
293
+ Diff<
294
+ {
295
+ __tag__: 'PATCH',
296
+ __return_type__: Response | void | never | Promise<Response | void | never>
297
+ },
298
+ {
299
+ __tag__: 'PATCH',
300
+ __return_type__: ReturnType<MaybeField<TEntry, 'PATCH'>>
301
+ },
302
+ 'PATCH'
303
+ >
304
+ >()
305
+ }
306
+
307
+ // Check the arguments and return type of the generateStaticParams function
308
+ if ('generateStaticParams' in entry) {
309
+ checkFields<Diff<{ params: SegmentParams }, FirstArg<MaybeField<TEntry, 'generateStaticParams'>>, 'generateStaticParams'>>()
310
+ checkFields<Diff<{ __tag__: 'generateStaticParams', __return_type__: any[] | Promise<any[]> }, { __tag__: 'generateStaticParams', __return_type__: ReturnType<MaybeField<TEntry, 'generateStaticParams'>> }>>()
311
+ }
312
+
313
+ export interface PageProps {
314
+ params?: Promise<SegmentParams>
315
+ searchParams?: Promise<any>
316
+ }
317
+ export interface LayoutProps {
318
+ children?: React.ReactNode
319
+
320
+ params?: Promise<SegmentParams>
321
+ }
322
+
323
+ // =============
324
+ // Utility types
325
+ type RevalidateRange<T> = T extends { revalidate: any } ? NonNegative<T['revalidate']> : never
326
+
327
+ // If T is unknown or any, it will be an empty {} type. Otherwise, it will be the same as Omit<T, keyof Base>.
328
+ type OmitWithTag<T, K extends keyof any, _M> = Omit<T, K>
329
+ type Diff<Base, T extends Base, Message extends string = ''> = 0 extends (1 & T) ? {} : OmitWithTag<T, keyof Base, Message>
330
+
331
+ type FirstArg<T extends Function> = T extends (...args: [infer T, any]) => any ? unknown extends T ? any : T : never
332
+ type SecondArg<T extends Function> = T extends (...args: [any, infer T]) => any ? unknown extends T ? any : T : never
333
+ type MaybeField<T, K extends string> = T extends { [k in K]: infer G } ? G extends Function ? G : never : never
334
+
335
+ type ParamCheck<T> = {
336
+ __tag__: string
337
+ __param_position__: string
338
+ __param_type__: T
339
+ }
340
+
341
+ function checkFields<_ extends { [k in keyof any]: never }>() {}
342
+
343
+ // https://github.com/sindresorhus/type-fest
344
+ type Numeric = number | bigint
345
+ type Zero = 0 | 0n
346
+ type Negative<T extends Numeric> = T extends Zero ? never : `${T}` extends `-${string}` ? T : never
347
+ type NonNegative<T extends Numeric> = T extends Zero ? T : Negative<T> extends never ? T : '__invalid_negative_number__'
@@ -2,7 +2,7 @@
2
2
  // Do not edit this file manually
3
3
 
4
4
  type AppRoutes = "/" | "/chat" | "/docs" | "/executions" | "/flows" | "/mcp" | "/models" | "/settings"
5
- type AppRouteHandlerRoutes = "/api/backup" | "/api/browse" | "/api/cwd" | "/api/encryption/secure" | "/api/env" | "/api/flow" | "/api/flow/[id]" | "/api/flow/compile" | "/api/flow/generate" | "/api/flow/improve" | "/api/flow/prompt-renderer" | "/api/flow/quick-chat" | "/api/flow/repair" | "/api/git" | "/api/init" | "/api/local-models/capability" | "/api/local-models/pull" | "/api/local-models/suggest" | "/api/mcp-registry" | "/api/mcp-registry/spotlight" | "/api/mcp/cancel" | "/api/mcp/servers" | "/api/mcp/servers/[name]" | "/api/mcp/servers/[name]/prompts" | "/api/mcp/servers/[name]/prompts/get" | "/api/mcp/servers/[name]/resources" | "/api/mcp/servers/[name]/resources/read" | "/api/mcp/servers/[name]/status" | "/api/mcp/servers/[name]/tools" | "/api/mcp/servers/[name]/tools/[toolName]" | "/api/mcp/test-connection" | "/api/mcp/test-connection/stream" | "/api/model" | "/api/model/[id]" | "/api/model/provider" | "/api/model/test" | "/api/oauth/callback" | "/api/oauth/initiate" | "/api/oauth/reset" | "/api/planned-executions" | "/api/planned-executions/[id]" | "/api/planned-executions/[id]/run" | "/api/planned-executions/[id]/runs" | "/api/planned-executions/preview-schedule" | "/api/restore" | "/api/storage" | "/api/update" | "/api/webhooks/[id]" | "/mcp-flows" | "/mcp-proxy/[server]" | "/v1/chat/completions" | "/v1/chat/conversations" | "/v1/chat/conversations/[conversationId]" | "/v1/chat/conversations/[conversationId]/breakpoints" | "/v1/chat/conversations/[conversationId]/cancel" | "/v1/chat/conversations/[conversationId]/debug/continue" | "/v1/chat/conversations/[conversationId]/debug/step" | "/v1/chat/conversations/[conversationId]/edit-state" | "/v1/chat/conversations/[conversationId]/events" | "/v1/chat/conversations/[conversationId]/respond" | "/v1/models"
5
+ type AppRouteHandlerRoutes = "/api/approvals" | "/api/approvals/[id]" | "/api/backup" | "/api/browse" | "/api/cwd" | "/api/encryption/secure" | "/api/env" | "/api/flow" | "/api/flow/[id]" | "/api/flow/compile" | "/api/flow/generate" | "/api/flow/improve" | "/api/flow/prompt-renderer" | "/api/flow/quick-chat" | "/api/flow/repair" | "/api/git" | "/api/init" | "/api/local-models/capability" | "/api/local-models/pull" | "/api/local-models/suggest" | "/api/mcp-registry" | "/api/mcp-registry/spotlight" | "/api/mcp/cancel" | "/api/mcp/servers" | "/api/mcp/servers/[name]" | "/api/mcp/servers/[name]/prompts" | "/api/mcp/servers/[name]/prompts/get" | "/api/mcp/servers/[name]/resources" | "/api/mcp/servers/[name]/resources/read" | "/api/mcp/servers/[name]/status" | "/api/mcp/servers/[name]/tools" | "/api/mcp/servers/[name]/tools/[toolName]" | "/api/mcp/test-connection" | "/api/mcp/test-connection/stream" | "/api/model" | "/api/model/[id]" | "/api/model/provider" | "/api/model/test" | "/api/oauth/callback" | "/api/oauth/initiate" | "/api/oauth/reset" | "/api/planned-executions" | "/api/planned-executions/[id]" | "/api/planned-executions/[id]/run" | "/api/planned-executions/[id]/runs" | "/api/planned-executions/preview-schedule" | "/api/planned-executions/reconcile" | "/api/restore" | "/api/runs/active" | "/api/storage" | "/api/update" | "/api/webhooks/[id]" | "/mcp-flows" | "/mcp-proxy/[server]" | "/v1/chat/completions" | "/v1/chat/conversations" | "/v1/chat/conversations/[conversationId]" | "/v1/chat/conversations/[conversationId]/breakpoints" | "/v1/chat/conversations/[conversationId]/cancel" | "/v1/chat/conversations/[conversationId]/debug/continue" | "/v1/chat/conversations/[conversationId]/debug/step" | "/v1/chat/conversations/[conversationId]/edit-state" | "/v1/chat/conversations/[conversationId]/events" | "/v1/chat/conversations/[conversationId]/resources" | "/v1/chat/conversations/[conversationId]/respond" | "/v1/models"
6
6
  type PageRoutes = never
7
7
  type LayoutRoutes = "/"
8
8
  type RedirectRoutes = never
@@ -12,6 +12,8 @@ type Routes = AppRoutes | PageRoutes | LayoutRoutes | RedirectRoutes | RewriteRo
12
12
 
13
13
  interface ParamMap {
14
14
  "/": {}
15
+ "/api/approvals": {}
16
+ "/api/approvals/[id]": { "id": string; }
15
17
  "/api/backup": {}
16
18
  "/api/browse": {}
17
19
  "/api/cwd": {}
@@ -56,7 +58,9 @@ interface ParamMap {
56
58
  "/api/planned-executions/[id]/run": { "id": string; }
57
59
  "/api/planned-executions/[id]/runs": { "id": string; }
58
60
  "/api/planned-executions/preview-schedule": {}
61
+ "/api/planned-executions/reconcile": {}
59
62
  "/api/restore": {}
63
+ "/api/runs/active": {}
60
64
  "/api/storage": {}
61
65
  "/api/update": {}
62
66
  "/api/webhooks/[id]": { "id": string; }
@@ -78,6 +82,7 @@ interface ParamMap {
78
82
  "/v1/chat/conversations/[conversationId]/debug/step": { "conversationId": string; }
79
83
  "/v1/chat/conversations/[conversationId]/edit-state": { "conversationId": string; }
80
84
  "/v1/chat/conversations/[conversationId]/events": { "conversationId": string; }
85
+ "/v1/chat/conversations/[conversationId]/resources": { "conversationId": string; }
81
86
  "/v1/chat/conversations/[conversationId]/respond": { "conversationId": string; }
82
87
  "/v1/models": {}
83
88
  }
@@ -119,6 +119,24 @@ type RouteHandlerConfig<Route extends AppRouteHandlerRoutes = AppRouteHandlerRou
119
119
  type __Unused = __Check
120
120
  }
121
121
 
122
+ // Validate ../../src/app/api/approvals/[id]/route.ts
123
+ {
124
+ type __IsExpected<Specific extends RouteHandlerConfig<"/api/approvals/[id]">> = Specific
125
+ const handler = {} as typeof import("../../src/app/api/approvals/[id]/route.js")
126
+ type __Check = __IsExpected<typeof handler>
127
+ // @ts-ignore
128
+ type __Unused = __Check
129
+ }
130
+
131
+ // Validate ../../src/app/api/approvals/route.ts
132
+ {
133
+ type __IsExpected<Specific extends RouteHandlerConfig<"/api/approvals">> = Specific
134
+ const handler = {} as typeof import("../../src/app/api/approvals/route.js")
135
+ type __Check = __IsExpected<typeof handler>
136
+ // @ts-ignore
137
+ type __Unused = __Check
138
+ }
139
+
122
140
  // Validate ../../src/app/api/backup/route.ts
123
141
  {
124
142
  type __IsExpected<Specific extends RouteHandlerConfig<"/api/backup">> = Specific
@@ -506,6 +524,15 @@ type RouteHandlerConfig<Route extends AppRouteHandlerRoutes = AppRouteHandlerRou
506
524
  type __Unused = __Check
507
525
  }
508
526
 
527
+ // Validate ../../src/app/api/planned-executions/reconcile/route.ts
528
+ {
529
+ type __IsExpected<Specific extends RouteHandlerConfig<"/api/planned-executions/reconcile">> = Specific
530
+ const handler = {} as typeof import("../../src/app/api/planned-executions/reconcile/route.js")
531
+ type __Check = __IsExpected<typeof handler>
532
+ // @ts-ignore
533
+ type __Unused = __Check
534
+ }
535
+
509
536
  // Validate ../../src/app/api/planned-executions/route.ts
510
537
  {
511
538
  type __IsExpected<Specific extends RouteHandlerConfig<"/api/planned-executions">> = Specific
@@ -524,6 +551,15 @@ type RouteHandlerConfig<Route extends AppRouteHandlerRoutes = AppRouteHandlerRou
524
551
  type __Unused = __Check
525
552
  }
526
553
 
554
+ // Validate ../../src/app/api/runs/active/route.ts
555
+ {
556
+ type __IsExpected<Specific extends RouteHandlerConfig<"/api/runs/active">> = Specific
557
+ const handler = {} as typeof import("../../src/app/api/runs/active/route.js")
558
+ type __Check = __IsExpected<typeof handler>
559
+ // @ts-ignore
560
+ type __Unused = __Check
561
+ }
562
+
527
563
  // Validate ../../src/app/api/storage/route.ts
528
564
  {
529
565
  type __IsExpected<Specific extends RouteHandlerConfig<"/api/storage">> = Specific
@@ -632,6 +668,15 @@ type RouteHandlerConfig<Route extends AppRouteHandlerRoutes = AppRouteHandlerRou
632
668
  type __Unused = __Check
633
669
  }
634
670
 
671
+ // Validate ../../src/app/v1/chat/conversations/[conversationId]/resources/route.ts
672
+ {
673
+ type __IsExpected<Specific extends RouteHandlerConfig<"/v1/chat/conversations/[conversationId]/resources">> = Specific
674
+ const handler = {} as typeof import("../../src/app/v1/chat/conversations/[conversationId]/resources/route.js")
675
+ type __Check = __IsExpected<typeof handler>
676
+ // @ts-ignore
677
+ type __Unused = __Check
678
+ }
679
+
635
680
  // Validate ../../src/app/v1/chat/conversations/[conversationId]/respond/route.ts
636
681
  {
637
682
  type __IsExpected<Specific extends RouteHandlerConfig<"/v1/chat/conversations/[conversationId]/respond">> = Specific
package/README.md CHANGED
@@ -37,7 +37,7 @@ For *anything* that you struggle with (MCP Installation, Application Issues, Usa
37
37
  # FLUJO
38
38
 
39
39
  [![MIT License](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
40
- [![Version](https://img.shields.io/badge/version-3.19.0-green.svg)](package.json)
40
+ [![Version](https://img.shields.io/badge/version-3.21.0-green.svg)](package.json)
41
41
 
42
42
  FLUJO is an open-source, local-first platform for building **MCP-powered AI workflows**. It brings together model management, Model-Context-Protocol (MCP) servers, a visual flow builder, and a chat interface in one app — so you can wire models and tools together, run them headlessly on triggers, and expose the result to other apps, without giving up control of your keys and data.
43
43
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "flujo-ai",
3
- "version": "3.19.0",
3
+ "version": "3.21.0",
4
4
  "bin": {
5
5
  "flujo": "bin/flujo.mjs"
6
6
  },
@@ -1 +0,0 @@
1
- "use strict";exports.id=1991,exports.ids=[1991],exports.modules={28055:(a,b,c)=>{c.d(b,{S:()=>g});var d=c(50648);let e=(0,c(19815).h)("frontend/services/mcp/index");class f{async loadServerConfigs(){try{let a=await fetch("/api/mcp/servers"),b=await a.json();if(!a.ok||b&&b.error){let a=b&&b.error||"Failed to load server configs";return e.warn("Failed to load server configs:",a),{error:a}}return b}catch(a){return e.warn("Failed to load server configs:",a),{error:"Failed to load server configs"}}}async listServerTools(a){try{let b=this.toolsCache.get(a),c=Date.now();if(b&&c-b.timestamp<this.CACHE_TTL)return e.debug(`Using cached tools for server ${a}`),{tools:b.tools};let d=await fetch(`/api/mcp/servers/${encodeURIComponent(a)}/tools`),f=await d.json();if(f.error)return e.warn(`Error listing tools for server ${a}:`,f.error),{tools:[],error:f.error};let g=Array.isArray(f.tools)?f.tools:[];return this.toolsCache.set(a,{tools:g,timestamp:c}),{tools:g}}catch(b){return e.warn(`Failed to list tools for server ${a}:`,b),{tools:[],error:`Failed to list tools: ${b instanceof Error?b.message:"Unknown error"}`}}}clearToolsCache(a){a?(this.toolsCache.delete(a),e.debug(`Cleared tools cache for server ${a}`)):(this.toolsCache.clear(),e.debug("Cleared all tools cache"))}async listServerResources(a){try{let b=this.resourcesCache.get(a),c=Date.now();if(b&&c-b.timestamp<this.CACHE_TTL)return e.debug(`Using cached resources for server ${a}`),b.data;let d=await fetch(`/api/mcp/servers/${encodeURIComponent(a)}/resources`),f=await d.json(),g={resources:Array.isArray(f.resources)?f.resources:[],resourceTemplates:Array.isArray(f.resourceTemplates)?f.resourceTemplates:[],error:f.error};return g.error||this.resourcesCache.set(a,{data:g,timestamp:c}),g}catch(b){return e.warn(`Failed to list resources for server ${a}:`,b),{resources:[],resourceTemplates:[],error:`Failed to list resources: ${b instanceof Error?b.message:"Unknown error"}`}}}async readResource(a,b){try{let c=await fetch(`/api/mcp/servers/${encodeURIComponent(a)}/resources/read?uri=${encodeURIComponent(b)}`);return await c.json()}catch(c){return e.warn(`Failed to read resource ${b} on server ${a}:`,c),{success:!1,error:"Failed to read resource"}}}async listServerPrompts(a){try{let b=this.promptsCache.get(a),c=Date.now();if(b&&c-b.timestamp<this.CACHE_TTL)return e.debug(`Using cached prompts for server ${a}`),{prompts:b.prompts};let d=await fetch(`/api/mcp/servers/${encodeURIComponent(a)}/prompts`),f=await d.json();if(f.error)return e.warn(`Error listing prompts for server ${a}:`,f.error),{prompts:[],error:f.error};let g=Array.isArray(f.prompts)?f.prompts:[];return this.promptsCache.set(a,{prompts:g,timestamp:c}),{prompts:g}}catch(b){return e.warn(`Failed to list prompts for server ${a}:`,b),{prompts:[],error:`Failed to list prompts: ${b instanceof Error?b.message:"Unknown error"}`}}}async getPrompt(a,b,c){try{let d=await fetch(`/api/mcp/servers/${encodeURIComponent(a)}/prompts/get`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:b,arguments:c})});return await d.json()}catch(c){return e.warn(`Failed to get prompt ${b} on server ${a}:`,c),{success:!1,error:"Failed to get prompt"}}}clearCapabilitiesCache(a){a?(this.resourcesCache.delete(a),this.promptsCache.delete(a)):(this.resourcesCache.clear(),this.promptsCache.clear())}async callTool(a,b,c,d){try{let e=await fetch(`/api/mcp/servers/${encodeURIComponent(a)}/tools/${encodeURIComponent(b)}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({args:c,timeout:d})});return await e.json()}catch(c){return e.warn(`Failed to call tool ${b} on server ${a}:`,c),{error:"Failed to call tool"}}}async updateServerConfig(a,b){try{let c=await fetch(`/api/mcp/servers/${encodeURIComponent(a)}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(b)}),d=await c.json();if(c.ok)return e.info(`Successfully updated server config for ${a}`),{success:!0,data:d};if(void 0!==b.disabled)return e.info(`Config update for ${a} treated as success for toggle operation`),{success:!0,data:{...b,name:a},_originalError:d.error};return e.warn(`Failed to update server config for ${a}:`,d.error),{success:!1,error:d.error}}catch(b){return e.warn(`Failed to update server config for ${a}:`,b),{error:"Failed to update server config"}}}async testConnection(a){try{let b=await fetch("/api/mcp/test-connection",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(a)});return await b.json()}catch(b){return e.warn(`Failed to test connection for ${a.name}:`,b),{success:!1,error:`Failed to reach the FLUJO backend to run the connection test: ${b instanceof Error?b.message:"Unknown error"}`}}}async testConnectionStreaming(a,b){try{let c=await fetch("/api/mcp/test-connection/stream",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(a)});if(!c.ok||!c.body)return e.warn(`Streaming test-connection unavailable (status ${c.status}); falling back`),this.testConnection(a);let f=null;if(await (0,d.z)(c,a=>{b(a),"result"===a.type&&(f={success:a.success,error:a.error,requiresAuthentication:a.requiresAuthentication,data:a.data})}),f)return f;return e.warn("Streaming test-connection ended without a result event"),{success:!1,error:"The connection test stream ended unexpectedly without a result."}}catch(b){return e.warn(`Streaming test connection failed for ${a.name}; falling back to non-streaming:`,b),this.testConnection(a)}}async getServerStatus(a){try{let b=await fetch(`/api/mcp/servers/${encodeURIComponent(a)}/status`,{headers:{Accept:"application/json"}}),c=await b.json();if(c.error)return e.warn(`Error getting status for server ${a}:`,c.error),{status:"error",message:c.error};return c}catch(b){return e.warn(`Failed to get status for server ${a}:`,b),{status:"error",message:`Failed to get server status: ${b instanceof Error?b.message:"Unknown error"}`}}}async deleteServerConfig(a){try{let b=await fetch(`/api/mcp/servers/${encodeURIComponent(a)}`,{method:"DELETE"});return await b.json()}catch(b){return e.warn(`Failed to delete server config for ${a}:`,b),{error:"Failed to delete server config"}}}async retryServer(a){return e.debug(`Retrying server status for: ${a}`),this.getServerStatus(a)}async restartServer(a){e.debug(`Restarting server: ${a}`);try{let b=await this.updateServerConfig(a,{disabled:!0});if(b.error)return e.warn(`Failed to disable server ${a} during restart:`,b.error),{error:`Failed to restart server: ${b.error}`};await new Promise(a=>setTimeout(a,1e3));let c=await this.updateServerConfig(a,{disabled:!1});if(c.error)return e.warn(`Failed to enable server ${a} during restart:`,c.error),{error:`Failed to restart server: ${c.error}`};return e.info(`Successfully restarted server ${a}`),{success:!0}}catch(b){return e.warn(`Failed to restart server ${a}:`,b),{error:`Failed to restart server: ${b instanceof Error?b.message:"Unknown error"}`}}}constructor(){this.toolsCache=new Map,this.resourcesCache=new Map,this.promptsCache=new Map,this.CACHE_TTL=6e4}}let g=new f},50648:(a,b,c)=>{c.d(b,{z:()=>d});async function d(a,b){if(!a.body||"function"!=typeof a.body.getReader)throw Error("Response has no readable body to stream");let c=a.body.getReader(),d=new TextDecoder,e=function(){let a="",b=(a,b)=>{let c=a.trim();if(c)try{b.push(JSON.parse(c))}catch{}};return{push(c){let d;a+=c;let e=[];for(;(d=a.indexOf("\n"))>=0;)b(a.slice(0,d),e),a=a.slice(d+1);return e},flush(){let c=[];return b(a,c),a="",c}}}();try{for(;;){let{value:a,done:f}=await c.read();if(f)break;for(let c of e.push(d.decode(a,{stream:!0})))b(c)}let a=d.decode();if(a)for(let c of e.push(a))b(c);for(let a of e.flush())b(a)}finally{try{c.releaseLock()}catch{}}}},59737:(a,b,c)=>{c.d(b,{A:()=>m});var d=c(21124);c(38301);var e=c(60839),f=c(81637),g=c(44079),h=c(79515),i=c(41893),j=c(99561),k=c(17332),l=c(18467);let m=({label:a,count:b,expanded:c,onToggle:m,showFolderIcon:n=!1,children:o})=>{let p=(0,e.A)();return(0,d.jsxs)(f.default,{sx:{mb:1.5},children:[(0,d.jsxs)(f.default,{role:"button",tabIndex:0,"aria-expanded":c,onClick:m,onKeyDown:a=>{("Enter"===a.key||" "===a.key)&&(a.preventDefault(),m())},sx:{display:"flex",alignItems:"center",gap:1,px:1,py:.75,borderRadius:1,cursor:"pointer",userSelect:"none",backgroundColor:p.palette.background.default,border:`1px solid ${p.palette.divider}`,"&:hover":{backgroundColor:p.palette.action.hover}},children:[(0,d.jsx)(g.A,{size:"small","aria-label":c?"Collapse section":"Expand section",onClick:a=>{a.stopPropagation(),m()},sx:{transition:"transform 0.2s",transform:c?"rotate(0deg)":"rotate(-90deg)"},children:(0,d.jsx)(k.A,{fontSize:"small"})}),n&&(0,d.jsx)(l.A,{fontSize:"small",sx:{color:"text.secondary"}}),(0,d.jsx)(h.default,{variant:"subtitle2",sx:{fontWeight:600},children:a}),(0,d.jsx)(i.A,{label:b,size:"small",sx:{height:20,fontSize:"0.7rem"}})]}),(0,d.jsx)(j.A,{in:c,unmountOnExit:!0,children:(0,d.jsx)(f.default,{sx:{pt:1.5},children:o})})]})}},61615:(a,b,c)=>{c.d(b,{default:()=>g});var d=c(21124);c(38301);var e=c(81637),f=c(8521);let g=({size:a="medium",color:b="primary",className:c="",sx:g={}})=>{let h="white"===b?{color:"#fff",...g}:g;return(0,d.jsxs)(e.default,{component:"span",sx:{display:"inline-block",lineHeight:0,...h},className:c,role:"status",children:[(0,d.jsx)(f.default,{size:{small:16,medium:24,large:36}[a],color:"white"===b?"inherit":b,"aria-hidden":"true"}),(0,d.jsx)(e.default,{component:"span",sx:{position:"absolute",width:"1px",height:"1px",padding:0,margin:"-1px",overflow:"hidden",clip:"rect(0, 0, 0, 0)",whiteSpace:"nowrap",borderWidth:0},children:"Loading..."})]})}},78352:(a,b,c)=>{c.d(b,{A:()=>u});var d=c(21124),e=c(38301),f=c(7118),g=c(94367),h=c(50553),i=c(84233),j=c(91059),k=c(40512),l=c(83899),m=c(52327),n=c(37674),o=c(19925),p=c(68730),q=c(36698),r=c(18467),s=c(31973),t=c(354);let u=({anchorEl:a,open:b,currentFolder:c,folders:u,onClose:v,onAssign:w})=>{let[x,y]=(0,e.useState)(!1),[z,A]=(0,e.useState)(""),B=a=>{w(a),v()},C=()=>{let a=z.trim();a&&(y(!1),B(a))};return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)(f.A,{anchorEl:a,open:b,onClose:v,children:[u.length>0&&u.map(a=>(0,d.jsxs)(g.A,{onClick:()=>B(a),selected:a===c,children:[(0,d.jsx)(h.A,{children:a===c?(0,d.jsx)(q.A,{fontSize:"small"}):(0,d.jsx)(r.A,{fontSize:"small"})}),(0,d.jsx)(i.A,{primary:a})]},a)),u.length>0&&(0,d.jsx)(j.A,{}),(0,d.jsxs)(g.A,{onClick:()=>{A(""),y(!0)},children:[(0,d.jsx)(h.A,{children:(0,d.jsx)(s.A,{fontSize:"small"})}),(0,d.jsx)(i.A,{primary:"New folder…"})]}),c&&(0,d.jsxs)(g.A,{onClick:()=>B(void 0),children:[(0,d.jsx)(h.A,{children:(0,d.jsx)(t.A,{fontSize:"small"})}),(0,d.jsx)(i.A,{primary:"Remove from folder"})]})]}),(0,d.jsxs)(k.A,{open:x,onClose:()=>y(!1),maxWidth:"xs",fullWidth:!0,children:[(0,d.jsx)(l.A,{children:"New folder"}),(0,d.jsx)(m.A,{children:(0,d.jsx)(n.A,{autoFocus:!0,margin:"dense",label:"Folder name",fullWidth:!0,value:z,onChange:a=>A(a.target.value),onKeyDown:a=>{"Enter"===a.key&&(a.preventDefault(),C())}})}),(0,d.jsxs)(o.A,{children:[(0,d.jsx)(p.A,{onClick:()=>y(!1),children:"Cancel"}),(0,d.jsx)(p.A,{variant:"contained",disabled:!z.trim(),onClick:C,children:"Create"})]})]})]})}},83434:(a,b,c)=>{c.d(b,{N:()=>e,X:()=>d}),(0,c(19815).h)("frontend/services/model");let d=()=>{throw Error("ModelService can only be used in browser environment")},e=new Proxy({},{get(a,b){let c=d(),e=c[b];return"function"==typeof e?e.bind(c):e}})}};
@@ -1 +0,0 @@
1
- "use strict";exports.id=2194,exports.ids=[2194],exports.modules={8070:(a,b,c)=>{c.d(b,{IK:()=>G,M6:()=>z,Uw:()=>F,lA:()=>I,v2:()=>H,vm:()=>E});var d=c(21124),e=c(38301),f=c(95791),g=c(46973),h=c(18168),i=c(60839),j=c(54573),k=c(81637),l=c(79515),m=c(44079),n=c(99561),o=c(48823),p=c(98540),q=c(83144),r=c(88970),s=c(17332),t=c(63908);let u=(0,h.Ay)(j.A,{shouldForwardProp:a=>!["nodeType","selected"].includes(a)})(({theme:a,nodeType:b,selected:c})=>({padding:a.spacing(1.5),width:"200px",borderRadius:"8px",backgroundColor:a.palette.background.paper,border:`2px solid ${"start"===b?"#795548":"process"===b?a.palette.secondary.main:"finish"===b?a.palette.success.main:"mcp"===b?a.palette.info.main:a.palette.warning.main}`,boxShadow:c?`0 0 0 2px ${a.palette.primary.main}, 0 3px 10px rgba(0,0,0,0.2)`:a.shadows[2],transition:"all 0.2s ease","&:hover":{boxShadow:`0 0 0 1px ${"start"===b?"#795548":"process"===b?a.palette.secondary.main:"finish"===b?a.palette.success.main:"mcp"===b?a.palette.info.main:a.palette.warning.main}, 0 3px 10px rgba(0,0,0,0.1)`}})),v=(0,h.Ay)(k.default,{shouldForwardProp:a=>"nodeType"!==a})(({theme:a,nodeType:b})=>({display:"flex",alignItems:"center",justifyContent:"space-between",borderBottom:`1px solid ${"start"===b?"#A1887F":"process"===b?a.palette.secondary.light:"finish"===b?a.palette.success.light:"mcp"===b?a.palette.info.light:a.palette.warning.light}`,marginBottom:a.spacing(1),paddingBottom:a.spacing(.5)})),w=(0,h.Ay)(k.default)({display:"flex",alignItems:"center",gap:"8px"}),x=(0,h.Ay)(k.default)(({theme:a})=>({marginTop:a.spacing(1),fontSize:"0.8rem"})),y=(0,h.Ay)(k.default)(({theme:a})=>({display:"flex",justifyContent:"space-between",padding:a.spacing(.5,0),borderBottom:`1px dashed ${"dark"===a.palette.mode?"rgba(255,255,255,0.1)":"rgba(0,0,0,0.1)"}`})),z=(a,b)=>{switch(a){case"start":default:return"#795548";case"process":return b.palette.secondary.main;case"finish":return b.palette.success.main;case"mcp":return b.palette.info.main;case"subflow":return b.palette.warning.main}},A=a=>({backgroundColor:a.palette.info.main,borderColor:"dark"===a.palette.mode?a.palette.background.paper:"white",width:16,height:16,borderRadius:8,borderWidth:2}),B=a=>({backgroundColor:a.palette.secondary.main,borderColor:"dark"===a.palette.mode?a.palette.background.paper:"white",width:16,height:16,borderRadius:8,borderWidth:2}),C=a=>({backgroundColor:a.palette.primary.main,borderColor:"dark"===a.palette.mode?a.palette.background.paper:"white",width:16,height:16,borderRadius:8,borderWidth:2}),D=({data:a,nodeType:b,selected:c})=>{let h=(0,i.A)(),[j,k]=(0,e.useState)(!1),z=a||{label:"No Label",properties:{}},D="string"==typeof z.label?z.label:"No Label",E=z.properties||{},F=Object.keys(E).length;return(0,d.jsx)(d.Fragment,{children:(0,d.jsxs)(u,{elevation:2,nodeType:b,selected:c,children:[(()=>{if("mcp"===b)return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(f.h7,{id:"mcp-top",type:"target",position:g.yX.Top,style:A(h)}),(0,d.jsx)(f.h7,{id:"mcp-right",type:"target",position:g.yX.Right,style:A(h)}),(0,d.jsx)(f.h7,{id:"mcp-bottom",type:"source",position:g.yX.Bottom,style:A(h)}),(0,d.jsx)(f.h7,{id:"mcp-left",type:"target",position:g.yX.Left,style:A(h)})]});if("process"===b)return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(f.h7,{id:"process-top",type:"target",position:g.yX.Top,style:B(h)}),(0,d.jsx)(f.h7,{id:"process-bottom",type:"source",position:g.yX.Bottom,style:B(h)}),(0,d.jsx)(f.h7,{id:"process-left-mcp",type:"source",position:g.yX.Left,style:C(h)}),(0,d.jsx)(f.h7,{id:"process-right-mcp",type:"source",position:g.yX.Right,style:C(h)})]});if("start"===b)return(0,d.jsx)(f.h7,{id:"start-bottom",type:"source",position:g.yX.Bottom,style:B(h)});if("finish"===b)return(0,d.jsx)(f.h7,{id:"finish-top",type:"target",position:g.yX.Top,style:B(h)});if("subflow"===b)return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(f.h7,{id:"subflow-top",type:"target",position:g.yX.Top,style:B(h)}),(0,d.jsx)(f.h7,{id:"subflow-bottom",type:"source",position:g.yX.Bottom,style:B(h)})]});return null})(),(0,d.jsxs)(v,{nodeType:b,children:[(0,d.jsxs)(w,{children:[(a=>{switch(a){case"start":default:return(0,d.jsx)(o.A,{sx:{color:"#795548"}});case"process":return(0,d.jsx)(p.A,{color:"secondary"});case"finish":return(0,d.jsx)(q.A,{color:"success"});case"mcp":return(0,d.jsx)(p.A,{color:"info"});case"subflow":return(0,d.jsx)(r.A,{sx:{color:"warning.main"}})}})(b),(0,d.jsx)(l.default,{variant:"subtitle2",fontWeight:"bold",children:D})]}),F>0&&(0,d.jsx)(m.A,{size:"small",onClick:a=>{a.stopPropagation(),k(!j)},sx:{padding:.5},children:j?(0,d.jsx)(t.A,{fontSize:"small"}):(0,d.jsx)(s.A,{fontSize:"small"})})]}),(0,d.jsx)(n.A,{in:j,children:(0,d.jsx)(x,{children:Object.entries(E).map(([a,b])=>(0,d.jsxs)(y,{children:[(0,d.jsxs)(l.default,{variant:"caption",sx:{fontWeight:"bold"},children:[a,":"]}),(0,d.jsxs)(l.default,{variant:"caption",children:[String(b).substring(0,30),String(b).length>30?"...":""]})]},a))})}),F>0&&!j&&(0,d.jsx)(l.default,{variant:"caption",color:"text.secondary",children:`${F} properties configured`})]})})},E=(0,e.memo)(function(a){return(0,d.jsx)(D,{...a,nodeType:"start",selected:a.selected})}),F=(0,e.memo)(function(a){return(0,d.jsx)(D,{...a,nodeType:"process",selected:a.selected})}),G=(0,e.memo)(function(a){return(0,d.jsx)(D,{...a,nodeType:"finish",selected:a.selected})}),H=(0,e.memo)(function(a){return(0,d.jsx)(D,{...a,nodeType:"mcp",selected:a.selected})}),I=(0,e.memo)(function(a){return(0,d.jsx)(D,{...a,nodeType:"subflow",selected:a.selected})})},24856:(a,b,c)=>{c.d(b,{pX:()=>d});function d(a,b,c,d){let e=`${a.type}-bottom`,f=`${b.type}-top`;return{id:`${a.id}:${e}->${b.id}:${f}`,source:a.id,sourceHandle:e,target:b.id,targetHandle:f,type:"custom",data:{edgeType:"standard",...c?{bidirectional:!0}:{},...d?{condition:d}:{}},animated:!0}}},39438:(a,b,c)=>{c.d(b,{A:()=>E,o:()=>D});var d=c(21124),e=c(38301),f=c(18168),g=c(30818),h=c(81637),i=c(37489),j=c(60839),k=c(79515),l=c(43312),m=c(423),n=c(27114),o=c(41893),p=c(98463),q=c(44079),r=c(72197),s=c(91034),t=c(38941),u=c(12033),v=c(1312),w=c(22797),x=c(21358),y=c(8070),z=c(78352);let A=(0,c(19815).h)("components/Flow/FlowDashboard/FlowCard"),B=(0,f.Ay)(g.A,{shouldForwardProp:a=>"selected"!==a})(({theme:a,selected:b})=>({display:"flex",flexDirection:"column",height:"100%",transition:"all 0.3s cubic-bezier(0.4, 0, 0.2, 1)",position:"relative",border:b?`2px solid ${a.palette.primary.main}`:"none",boxShadow:b?a.shadows[4]:a.shadows[1],"&:hover":{boxShadow:a.shadows[6],transform:"translateY(-4px)"},"&::before":b?{content:'""',position:"absolute",top:0,left:0,width:"100%",height:"4px",backgroundColor:a.palette.primary.main}:{}})),C=(0,f.Ay)(h.default)(({theme:a})=>({height:"140px",backgroundColor:(0,i.X4)(a.palette.background.default,.7),borderRadius:a.shape.borderRadius,display:"flex",alignItems:"center",justifyContent:"center",margin:a.spacing(1),overflow:"hidden",position:"relative"})),D=()=>(0,d.jsxs)(g.A,{sx:{height:"100%",display:"flex",flexDirection:"column"},children:[(0,d.jsx)(h.default,{sx:{p:1},children:(0,d.jsx)(r.A,{variant:"rectangular",height:140})}),(0,d.jsxs)(n.A,{sx:{flexGrow:1},children:[(0,d.jsx)(r.A,{variant:"text",width:"80%",height:30}),(0,d.jsxs)(h.default,{sx:{display:"flex",gap:1,mt:1},children:[(0,d.jsx)(r.A,{variant:"rectangular",width:60,height:20}),(0,d.jsx)(r.A,{variant:"rectangular",width:90,height:20})]})]}),(0,d.jsxs)(p.A,{sx:{justifyContent:"flex-end",p:1},children:[(0,d.jsx)(r.A,{variant:"circular",width:28,height:28}),(0,d.jsx)(r.A,{variant:"circular",width:28,height:28}),(0,d.jsx)(r.A,{variant:"circular",width:28,height:28})]})]}),E=({flow:a,selected:b,onSelect:c,onDelete:f,onCopy:g,onEdit:i,onSetFolder:r,folders:D=[],validation:E,pickerMode:F=!1})=>{A.debug("Rendering FlowCard",{flowId:a.id,flowName:a.name});let G=(0,j.A)(),[H,I]=(0,e.useState)(null),J=E?.errorCount??0,K=E?.warningCount??0,L=J>0?"error":K>0?"warning":null,M=E?(0,d.jsxs)(h.default,{children:[(0,d.jsx)(k.default,{variant:"caption",sx:{fontWeight:600,display:"block",mb:.5},children:J>0?`${J} problem${1===J?"":"s"} — won't run`:`${K} warning${1===K?"":"s"}`}),E.issues.slice(0,5).map((a,b)=>(0,d.jsxs)(k.default,{variant:"caption",sx:{display:"block"},children:["• ",a.message]},b)),E.issues.length>5&&(0,d.jsxs)(k.default,{variant:"caption",sx:{display:"block",fontStyle:"italic"},children:["…and ",E.issues.length-5," more"]})]}):null;return(0,d.jsxs)(B,{selected:b,children:[L&&(0,d.jsx)(l.A,{title:M,arrow:!0,placement:"top",children:(0,d.jsxs)(h.default,{sx:{position:"absolute",top:8,right:8,zIndex:2,display:"flex",alignItems:"center",gap:.5,px:.75,py:.25,borderRadius:1,color:"#fff",backgroundColor:"error"===L?G.palette.error.main:G.palette.warning.main,boxShadow:G.shadows[2],pointerEvents:"auto"},children:["error"===L?(0,d.jsx)(w.A,{sx:{fontSize:16}}):(0,d.jsx)(x.A,{sx:{fontSize:16}}),(0,d.jsx)(k.default,{variant:"caption",sx:{fontWeight:700,lineHeight:1},children:"error"===L?J:K})]})}),(0,d.jsxs)(m.A,{onClick:()=>c(a.id),sx:{display:"flex",flexDirection:"column",alignItems:"stretch",height:"100%",position:"relative"},children:[(0,d.jsx)(C,{children:(()=>{if(0===a.nodes.length)return(0,d.jsx)(h.default,{sx:{width:"100%",height:"100%",display:"flex",alignItems:"center",justifyContent:"center"},children:(0,d.jsx)(k.default,{color:"textSecondary",align:"center",children:"Empty Flow"})});let b=a.nodes.map(a=>a.position?.x??0),c=a.nodes.map(a=>a.position?.y??0),e=Math.min(...b),f=Math.min(...c),g=Math.max(...b)+180,i=Math.max(...c)+70,j=`${e-40} ${f-40} ${g-e+80} ${i-f+80}`,l=a=>({cx:(a.position?.x??0)+90,cy:(a.position?.y??0)+35});return(0,d.jsx)(h.default,{sx:{width:"100%",height:"100%",p:1},children:(0,d.jsxs)("svg",{width:"100%",height:"100%",viewBox:j,preserveAspectRatio:"xMidYMid meet",style:{display:"block"},children:[a.edges.map((b,c)=>{let e=a.nodes.find(a=>a.id===b.source),f=a.nodes.find(a=>a.id===b.target);if(!e||!f)return null;let g=l(e),h=l(f);return(0,d.jsx)("line",{x1:g.cx,y1:g.cy,x2:h.cx,y2:h.cy,stroke:G.palette.text.secondary,strokeWidth:2,opacity:.5,vectorEffect:"non-scaling-stroke"},b.id||c)}),a.nodes.map(a=>{let b=a.position?.x??0,c=a.position?.y??0,e=a.data?.type??"process",f=(0,y.M6)(e,G);return(0,d.jsxs)("g",{children:[(0,d.jsx)("rect",{x:b,y:c,width:180,height:70,rx:12,fill:f,opacity:.85,stroke:G.palette.background.paper,strokeWidth:2,vectorEffect:"non-scaling-stroke"}),(0,d.jsx)("text",{x:b+90,y:c+35,textAnchor:"middle",dominantBaseline:"central",fill:"#fff",fontSize:35,fontWeight:"bold",children:e.substring(0,1).toUpperCase()})]},a.id)})]})})})()}),(0,d.jsxs)(n.A,{sx:{flexGrow:1,pb:0},children:[(0,d.jsx)(k.default,{variant:"h6",component:"div",noWrap:!0,children:a.name}),a.description&&(0,d.jsx)(l.A,{title:a.description,placement:"bottom-start",children:(0,d.jsx)(k.default,{variant:"body2",color:"text.secondary",sx:{mt:.5,display:"-webkit-box",WebkitLineClamp:2,WebkitBoxOrient:"vertical",overflow:"hidden"},children:a.description})}),(0,d.jsxs)(h.default,{sx:{display:"flex",gap:.5,mt:1,flexWrap:"wrap"},children:[(0,d.jsx)(o.A,{size:"small",label:`${a.nodes.length} nodes`,color:"primary",variant:"outlined",sx:{fontSize:"0.7rem",height:20}}),(0,d.jsx)(o.A,{size:"small",label:`${a.edges.length} connections`,color:"secondary",variant:"outlined",sx:{fontSize:"0.7rem",height:20}})]})]})]}),!F&&(0,d.jsxs)(p.A,{sx:{justifyContent:"flex-end",p:1,opacity:.7,"&:hover":{opacity:1}},children:[i&&(0,d.jsx)(l.A,{title:"Edit flow metadata",children:(0,d.jsx)(q.A,{size:"small",onClick:b=>{b.stopPropagation(),i&&i(a.id)},children:(0,d.jsx)(u.A,{fontSize:"small"})})}),g&&(0,d.jsx)(l.A,{title:"Copy flow",children:(0,d.jsx)(q.A,{size:"small",onClick:b=>{b.stopPropagation(),g&&g(a.id)},children:(0,d.jsx)(t.A,{fontSize:"small"})})}),r&&(0,d.jsx)(l.A,{title:a.folder?`Folder: ${a.folder}`:"Move to folder",children:(0,d.jsx)(q.A,{size:"small",onClick:a=>{a.stopPropagation(),I(a.currentTarget)},color:a.folder?"primary":"default",children:(0,d.jsx)(v.A,{fontSize:"small"})})}),f&&(0,d.jsx)(l.A,{title:"Delete flow",children:(0,d.jsx)(q.A,{size:"small",onClick:b=>{b.stopPropagation(),f&&f(a.id)},color:"error",children:(0,d.jsx)(s.A,{fontSize:"small"})})})]}),!F&&r&&(0,d.jsx)(z.A,{anchorEl:H,open:!!H,currentFolder:a.folder,folders:D,onClose:()=>I(null),onAssign:b=>r(a.id,b)})]})}},90837:(a,b,c)=>{c.d(b,{jY:()=>f,oY:()=>g});var d=c(21124);c(38301);var e=c(97004);let f=a=>(0,d.jsx)(e.A,{...a,variant:"standard"}),g=a=>(0,d.jsx)(e.A,{...a,variant:"mcp"})},97004:(a,b,c)=>{c.d(b,{R:()=>k,A:()=>o});var d=c(21124),e=c(38301),f=c(95791),g=c(46973),h=c(18168),i=c(60839);function j(a){return a===g.yX.Left||a===g.yX.Right?"h":"v"}let k="flowEdgeWaypoint",l={x:16,y:-16},m=(0,h.Ay)("button")(({theme:a})=>({background:a.palette.background.paper,border:`1px solid ${a.palette.divider}`,cursor:"pointer",borderRadius:"50%",fontSize:"10px",width:"20px",height:"20px",display:"flex",justifyContent:"center",alignItems:"center",color:a.palette.text.secondary,boxShadow:"dark"===a.palette.mode?"0 2px 4px rgba(0,0,0,0.3)":"0 2px 4px rgba(0,0,0,0.1)","&:hover":{background:a.palette.error.main,borderColor:a.palette.error.main,color:a.palette.error.contrastText}})),n=(0,h.Ay)(f.tE)({"&&.animated":{strokeDasharray:5,animation:"flowPathAnimation 500ms infinite linear"},"&&.animated-both":{strokeDasharray:5,animation:"flowPathAnimation 750ms infinite linear alternate"},"@keyframes flowPathAnimation":{"0%":{strokeDashoffset:10},"100%":{strokeDashoffset:0}}}),o=({variant:a,id:b,sourceX:c,sourceY:h,targetX:o,targetY:p,sourcePosition:q,targetPosition:r,style:s={},markerEnd:t,markerStart:u,data:v,selected:w})=>{let x,y,z=(0,i.A)(),{deleteElements:A,screenToFlowPosition:B}=(0,f.VH)(),[C,D]=(0,e.useState)(!1),[E,F]=(0,e.useState)(null),G=(0,e.useRef)(null),H=(0,e.useRef)(!1),I=v?.waypoints??(v?.waypoint?[v.waypoint]:[]),J=E??I,K="standard"===a&&!!v?.bidirectional,L=q||("mcp"===a?g.yX.Left:g.yX.Bottom),M=r||("mcp"===a?g.yX.Right:g.yX.Top),N=null;if(J.length>0)x=(N=function(a,b,c,d,e,f=8){let g=[a,...e,c],h=[a],i=[],j=b,k=(a,b)=>{let c;c=h[h.length-1],.01>Math.abs(c.x-a.x)&&.01>Math.abs(c.y-a.y)||(h.push(a),i.push(b))};for(let a=1;a<g.length;a++){let b=h[h.length-1],c=g[a],e=a-1;if(a===g.length-1){if("v"===d)if("h"===j)k({x:c.x,y:b.y},e);else{let a=(b.y+c.y)/2;k({x:b.x,y:a},e),k({x:c.x,y:a},e)}else if("v"===j)k({x:b.x,y:c.y},e);else{let a=(b.x+c.x)/2;k({x:a,y:b.y},e),k({x:a,y:c.y},e)}k(c,e)}else k("v"===j?{x:b.x,y:c.y}:{x:c.x,y:b.y},e),k(c,e),j="v"===j?"h":"v"}!function(a,b){for(let c=1;c<a.length-1;c++){let d=a[c-1],e=a[c],f=a[c+1],g=.01>Math.abs(d.x-e.x)&&.01>Math.abs(f.x-e.x)&&(e.y-d.y)*(f.y-e.y)<0,h=.01>Math.abs(d.y-e.y)&&.01>Math.abs(f.y-e.y)&&(e.x-d.x)*(f.x-e.x)<0;if(g||h){if(g){let g=(a[c-2]?.x??e.x-1)<=e.x,h=g?e.x-12:e.x+12,i=g?e.x+12:e.x-12,j=b[c-1];a.splice(c-1,3,{x:h,y:d.y},{x:h,y:e.y},{x:i,y:e.y},{x:i,y:f.y}),b.splice(c-1,2,j,j,j)}else{let g=(a[c-2]?.y??e.y-1)<=e.y,h=g?e.y-12:e.y+12,i=g?e.y+12:e.y-12,j=b[c-1];a.splice(c-1,3,{x:d.x,y:h},{x:e.x,y:h},{x:e.x,y:i},{x:f.x,y:i}),b.splice(c-1,2,j,j,j)}c++}}}(h,i);let l=[];for(let a=0;a<h.length-1;a++)l.push({a:h[a],b:h[a+1],gap:i[a]});return{d:function(a,b){if(0===a.length)return"";let c=`M ${a[0].x},${a[0].y}`;for(let d=1;d<a.length-1;d++){let e=a[d-1],f=a[d],g=a[d+1],h=Math.hypot(f.x-e.x,f.y-e.y),i=Math.hypot(g.x-f.x,g.y-f.y),j=Math.min(b,h/2,i/2);if(j<.5){c+=` L ${f.x},${f.y}`;continue}let k={x:f.x-(f.x-e.x)/h*j,y:f.y-(f.y-e.y)/h*j},l={x:f.x+(g.x-f.x)/i*j,y:f.y+(g.y-f.y)/i*j};c+=` L ${k.x},${k.y} Q ${f.x},${f.y} ${l.x},${l.y}`}let d=a[a.length-1];return c+` L ${d.x},${d.y}`}(h,f),points:h,segments:l,midpoint:function(a,b){let c=0;for(let b=0;b<a.length-1;b++)c+=Math.hypot(a[b+1].x-a[b].x,a[b+1].y-a[b].y);if(0===c)return a[0];let d=.5*c;for(let b=0;b<a.length-1;b++){let c=Math.hypot(a[b+1].x-a[b].x,a[b+1].y-a[b].y);if(d<=c){let e=0===c?0:d/c;return{x:a[b].x+(a[b+1].x-a[b].x)*e,y:a[b].y+(a[b+1].y-a[b].y)*e}}d-=c}return a[a.length-1]}(h,.5)}}({x:c,y:h},j(L),{x:o,y:p},j(M),J,16)).d,y=N.midpoint;else{let[a,b,d]=(0,g.oN)({sourceX:c,sourceY:h,sourcePosition:L,targetX:o,targetY:p,targetPosition:M,borderRadius:16});x=a,y={x:b,y:d}}let O="mcp"===a?"":K?"animated-both":v?.animated!==!1?"animated":"",P={...s,strokeWidth:w?3:2,stroke:"mcp"===a?w?z.palette.info.light:z.palette.info.main:w?z.palette.primary.main:z.palette.text.secondary,...O?{animationDuration:`${Math.round((K?750:500)*(a=>{let b=0;for(let c=0;c<a.length;c++)b=31*b+a.charCodeAt(c)|0;return .9+Math.abs(b)%1e3/1e3*.2})(b))}ms`}:{}},Q=a=>{document.dispatchEvent(new CustomEvent(k,{detail:{edgeId:b,waypoints:a&&a.length>0?a:null}}))},R=a=>{if(0!==a.button)return;let b=B({x:a.clientX,y:a.clientY}),c=N?function(a,b){let c=0,d=1/0;for(let e of b){let b=function(a,b,c){let d=c.x-b.x,e=c.y-b.y,f=d*d+e*e,g=0===f?0:Math.max(0,Math.min(1,((a.x-b.x)*d+(a.y-b.y)*e)/f));return Math.hypot(a.x-(b.x+d*g),a.y-(b.y+e*g))}(a,e.a,e.b);b<d&&(d=b,c=e.gap)}return c}(b,N.segments):0,d=[...J];d.splice(c,0,b),G.current={index:c,pointerId:a.pointerId,startClient:{x:a.clientX,y:a.clientY},base:d,active:!1,fromPath:!0},a.target.setPointerCapture(a.pointerId)},S=a=>{let b=G.current;if(!b||a.pointerId!==b.pointerId)return;if(!b.active){if(4>Math.hypot(a.clientX-b.startClient.x,a.clientY-b.startClient.y))return;b.active=!0}let c=[...b.base];c[b.index]=B({x:a.clientX,y:a.clientY}),F(c)},T=a=>{let b=G.current;if(!b||a.pointerId!==b.pointerId||(G.current=null,a.target.releasePointerCapture(a.pointerId),H.current=b.active,!b.active))return;let c=[...b.base];c[b.index]=B({x:a.clientX,y:a.clientY}),Q(c),F(null)},U=null!==E,V=w||C||U;return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(n,{path:x,markerEnd:t,markerStart:u,style:P,id:b,className:O}),(0,d.jsx)("path",{d:x,fill:"none",stroke:"transparent",strokeWidth:20,style:{cursor:U?"grabbing":"grab"},onMouseEnter:()=>D(!0),onMouseLeave:()=>D(!1),onPointerDown:R,onPointerMove:S,onPointerUp:T}),(0,d.jsxs)(f.rV,{children:[V&&J.map((a,b)=>(0,d.jsx)("div",{style:{position:"absolute",transform:`translate(-50%, -50%) translate(${a.x}px,${a.y}px)`,width:12,height:12,borderRadius:"50%",background:z.palette.primary.main,border:`2px solid ${z.palette.background.paper}`,boxShadow:z.shadows[1],cursor:"move",pointerEvents:"all",touchAction:"none",zIndex:1001},className:"nodrag nopan",title:"Drag to move; double-click to remove this bend",onMouseEnter:()=>D(!0),onMouseLeave:()=>D(!1),onPointerDown:a=>{0===a.button&&(a.stopPropagation(),G.current={index:b,pointerId:a.pointerId,startClient:{x:a.clientX,y:a.clientY},base:[...J],active:!1,fromPath:!1},a.target.setPointerCapture(a.pointerId))},onPointerMove:S,onPointerUp:T,onDoubleClick:a=>{a.stopPropagation(),(a=>{let b=J.filter((b,c)=>c!==a);F(null),Q(b)})(b)}},b)),(0,d.jsx)("div",{style:{position:"absolute",transform:`translate(-50%, -50%) translate(${y.x+l.x}px,${y.y+l.y}px)`,pointerEvents:V&&!U?"all":"none",opacity:V&&!U?1:0,transition:"opacity 120ms ease",zIndex:1e3},className:"nodrag nopan",onMouseEnter:()=>D(!0),onMouseLeave:()=>D(!1),children:(0,d.jsx)(m,{title:"Delete connection (drag to re-route)",style:{touchAction:"none"},onPointerDown:R,onPointerMove:S,onPointerUp:T,onClick:a=>{if(a.stopPropagation(),H.current){H.current=!1;return}A({edges:[{id:b}]})},children:"\xd7"})})]})]})}},98502:(a,b,c)=>{c.d(b,{E9:()=>f,RN:()=>e,n9:()=>d});let d="handoff_to_";function e(a,b){let c=(a&&a.trim()||b&&b.trim()||"node").toLowerCase().replace(/[^a-z0-9]+/g,"_").replace(/_+/g,"_").replace(/^_+|_+$/g,"");return c.length>48&&(c=c.slice(0,48).replace(/_+$/g,"")),c||(c=b&&b.trim().toLowerCase().replace(/[^a-z0-9]+/g,"_")||"node"),c||"node"}function f(a){let b=new Set,c=new Map;for(let f of a){if(c.has(f.id))continue;let a=e(f.label,f.type),g=`${d}${a}`;if(b.has(g)){let c=2;for(;b.has(`${d}${a}_${c}`);)c++;g=`${d}${a}_${c}`}b.add(g),c.set(f.id,g)}return c}}};
@@ -1 +0,0 @@
1
- "use strict";exports.id=2350,exports.ids=[2350,7821],exports.modules={81226:(a,b,c)=>{c.d(b,{A_:()=>g,FH:()=>s,Zn:()=>t,dM:()=>r,lk:()=>h,pX:()=>q});var d=c(32524),e=c(49181),f=c(45131);let g=3,h=8;function i(a,b,c,d){return"number"!=typeof a||Number.isNaN(a)?d:Math.max(b,Math.min(c,Math.floor(a)))}let j={type:"arrowclosed",width:20,height:20,color:"#1976d2"},k={stroke:"#1976d2",strokeWidth:2},l=new Set(["full-history","latest-message","isolated"]),m=new Set(["steps","final-only"]),n=new Set(["full-conversation","latest-message"]);function o(a){let b=(0,e.A$)(a);if(0===b.length)return{text:a,stripped:!1};let c="",d=0;for(let e of b)c+=a.slice(d,e.index)+e.name,d=e.index+e.fullMatch.length;return{text:c+=a.slice(d),stripped:!0}}function p(a,b){if(b.some(b=>b.id===a))return a;let c=a.toLowerCase(),d=b.find(a=>a.name.toLowerCase()===c);return d?d.id:null}function q(a,b,c,d){let e=`${a.type}-bottom`,f=`${b.type}-top`;return{id:`${a.id}:${e}->${b.id}:${f}`,source:a.id,sourceHandle:e,target:b.id,targetHandle:f,type:"custom",data:{edgeType:"standard",...c?{bidirectional:!0}:{},...d?{condition:d}:{}},animated:!0}}function r(a,b={},c={}){let e=[],s=(a,b,c)=>e.push({severity:"error",code:a,message:b,nodeKey:c}),t=(a,b,c)=>e.push({severity:"warning",code:a,message:b,nodeKey:c}),u=b.models??[],v=new Set((b.servers??[]).map(a=>a.name)),w=b.serverTools??{},x=i(c.maxDepth,0,g,g),y=i(c.maxFlows,1,h,h),z=[],A=[...(b.flows??[]).map(a=>a.name)],B=[],C=0;var D=function a(e,g,h){let r=Array.isArray(e?.nodes)?e.nodes:[],D=Array.isArray(e?.edges)?e.edges:[],E=function(a,b){let c=(a??"").trim().replace(/[^\w-]+/g,"_").replace(/^_+|_+$/g,"");c||(c="generated_flow");let d=new Set(b.map(a=>a.toLowerCase()));if(!d.has(c.toLowerCase()))return c;for(let a=2;;a++){let b=`${c}_${a}`;if(!d.has(b.toLowerCase()))return b}}(e?.name,A);A.push(E),C++;let F=(0,d.A)(),G=[...h,E],I=new Map,J=[],K=[];for(let c of r){let e=c?.key;if(!e||"string"!=typeof e){s("node-missing-key",'A node is missing its "key" — every node needs a unique key.');continue}if(I.has(e)){s("node-duplicate-key",`Duplicate node key "${e}" — keys must be unique; the later node was dropped.`,e);continue}let f=c.type;if("mcp"===f){s("mcp-node-not-allowed",`Node "${e}": do not emit "mcp" nodes — attach servers to a process node via its "servers" list instead.`,e);continue}if("start"!==f&&"process"!==f&&"finish"!==f&&"subflow"!==f){s("unknown-node-type",`Node "${e}" has unknown type "${String(f)}".`,e);continue}let h={},j="string"==typeof c.prompt?c.prompt:void 0;if("start"===f){let{text:a,stripped:b}=o(j??"");b&&t("pill-stripped",`Node "${e}": binding pills are not supported in generated prompts and were replaced with plain names.`,e),h.promptTemplate=a}else if("process"===f){let{text:a,stripped:b}=o(j??"");if(b&&t("pill-stripped",`Node "${e}": binding pills are not supported in generated prompts and were replaced with plain names.`,e),h.promptTemplate=a,c.model){let a=function(a,b){if(b.some(b=>b.id===a))return a;let c=a.toLowerCase(),d=b.find(a=>a.displayName?.toLowerCase()===c);if(d)return d.id;let e=b.find(a=>a.name?.toLowerCase()===c);return e?e.id:null}(c.model,u);a?h.boundModel=a:(h.boundModel=c.model,t("model-unresolved",`Node "${e}": model "${c.model}" does not match any configured model (by id, display name, or name).`,e))}void 0!==c.inputMode&&(l.has(c.inputMode)?(h.inputMode=c.inputMode,"isolated"===c.inputMode&&"string"==typeof c.isolatedPrompt&&(h.isolatedPrompt=c.isolatedPrompt)):t("invalid-input-mode",`Node "${e}": inputMode "${String(c.inputMode)}" is not valid (full-history | latest-message | isolated); omitted.`,e)),void 0!==c.outputMode&&(n.has(c.outputMode)?h.outputMode=c.outputMode:t("invalid-output-mode",`Node "${e}": outputMode "${String(c.outputMode)}" is not valid on a process node (full-conversation | latest-message); omitted.`,e)),void 0!==c.maxTurns&&("number"!=typeof c.maxTurns||Number.isNaN(c.maxTurns)?t("invalid-max-turns",`Node "${e}": maxTurns "${String(c.maxTurns)}" is not a number; omitted.`,e):h.maxTurns=i(c.maxTurns,1,1e3,1)),"boolean"==typeof c.excludeModelPrompt&&(h.excludeModelPrompt=c.excludeModelPrompt),"boolean"==typeof c.excludeStartNodePrompt&&(h.excludeStartNodePrompt=c.excludeStartNodePrompt),"boolean"==typeof c.excludeSystemPrompt&&(h.excludeSystemPrompt=c.excludeSystemPrompt),Array.isArray(c.allowedTools)&&(h.allowedTools=c.allowedTools.filter(a=>"string"==typeof a&&a)),"string"==typeof c.captureVariable&&c.captureVariable.trim()&&(h.captureVariable=c.captureVariable.trim())}else if("subflow"===f){if(function(c,d,e,f,g){let h=Array.isArray(c.parallelFlows)&&c.parallelFlows.length>0,i=Array.isArray(c.parallelSubflowSpecs)&&c.parallelSubflowSpecs.length>0;if([void 0!==c.flow&&null!==c.flow?"flow":null,void 0!==c.subflowSpec&&null!==c.subflowSpec?"subflowSpec":null,h?"parallelFlows":null,i?"parallelSubflowSpecs":null,void 0!==c.generateSubflow&&null!==c.generateSubflow?"generateSubflow":null].filter(Boolean).length>1&&t("subflow-multiple-sources",`Node "${d}": a subflow node should have only one target source ("flow", "subflowSpec", "parallelFlows", "parallelSubflowSpecs", or "generateSubflow"); applying precedence flow > subflowSpec > parallelFlows > parallelSubflowSpecs > generateSubflow.`,d),!0===c.mapOverList){let a=void 0!==c.flow&&null!==c.flow||void 0!==c.subflowSpec&&null!==c.subflowSpec;(h||i)&&s("subflow-map-and-parallel",`Node "${d}": "mapOverList" runs a SINGLE child once per item and cannot be combined with "parallelFlows"/"parallelSubflowSpecs".`,d),a?(g.mapOverList=!0,void 0!==c.itemSplit&&("json-array"===c.itemSplit||"lines"===c.itemSplit?g.itemSplit=c.itemSplit:t("invalid-item-split",`Node "${d}": itemSplit "${String(c.itemSplit)}" is not valid (json-array | lines); using json-array.`,d)),!0===c.sequential&&(g.sequential=!0),H(c,g)):s("subflow-map-no-child",`Node "${d}": "mapOverList" needs a single child ("flow" or "subflowSpec") to run once per item.`,d)}if(c.flow){if(f.some(a=>a.toLowerCase()===c.flow.toLowerCase()))return s("subflow-cycle",`Node "${d}": flow "${c.flow}" refers to an ancestor flow, which would create a cycle.`,d);let a=p(c.flow,[...b.flows??[],...B]);return a?g.subflowId=a:s("subflow-unresolved",`Node "${d}": flow "${c.flow}" does not match any existing flow (by id or name).`,d)}if(c.subflowSpec){if(e+1>x)return s("subflow-too-deep",`Node "${d}": nested subflows may not go deeper than ${x} level(s); this inline subflow was not compiled.`,d);if(C>=y)return s("subflow-too-many",`Node "${d}": compiling this inline subflow would exceed the maximum of ${y} flows in one bundle; it was not compiled.`,d);let b=a(c.subflowSpec,e+1,f);return b?g.subflowId=b.id:s("subflow-child-empty",`Node "${d}": the inline "subflowSpec" produced no usable flow.`,d)}if(h){let a=[];for(let e of c.parallelFlows){if("string"!=typeof e||!e){s("parallel-flow-invalid",`Node "${d}": a "parallelFlows" entry is missing or not a string.`,d);continue}if(f.some(a=>a.toLowerCase()===e.toLowerCase())){s("subflow-cycle",`Node "${d}": parallel flow "${e}" refers to an ancestor flow, which would create a cycle.`,d);continue}let c=p(e,[...b.flows??[],...B]);c?a.includes(c)||a.push(c):s("parallel-flow-unresolved",`Node "${d}": parallel flow "${e}" does not match any existing flow (by id or name).`,d)}a.length>0?(g.parallelSubflowIds=a,H(c,g)):s("parallel-empty",`Node "${d}": "parallelFlows" resolved to no runnable lanes.`,d);return}if(i){let b=[];for(let g of c.parallelSubflowSpecs){if(!g||"object"!=typeof g){s("parallel-spec-invalid",`Node "${d}": a "parallelSubflowSpecs" entry is not a FlowSpec object.`,d);continue}if(e+1>x){s("subflow-too-deep",`Node "${d}": nested subflows may not go deeper than ${x} level(s); a parallel inline subflow was not compiled.`,d);continue}if(C>=y){s("subflow-too-many",`Node "${d}": compiling a parallel inline subflow would exceed the maximum of ${y} flows in one bundle; it was not compiled.`,d);continue}let c=a(g,e+1,f);c?b.push(c.id):s("subflow-child-empty",`Node "${d}": a "parallelSubflowSpecs" entry produced no usable flow.`,d)}b.length>0?(g.parallelSubflowIds=b,H(c,g)):s("parallel-empty",`Node "${d}": "parallelSubflowSpecs" produced no runnable lanes.`,d);return}if(void 0!==c.generateSubflow&&null!==c.generateSubflow)return s("subflow-generate-unsupported",`Node "${d}": "generateSubflow" is only available through the AI flow generator. Use "subflowSpec" for deterministic nested authoring, or "flow" to reference an existing flow.`,d);s("subflow-missing-flow",`Node "${d}": subflow nodes need a "flow" (existing flow), a "subflowSpec" (inline child), "parallelFlows"/"parallelSubflowSpecs" (concurrent children), or "generateSubflow".`,d)}(c,e,g,G,h),void 0!==c.inputMode&&(l.has(c.inputMode)?h.inputMode=c.inputMode:t("invalid-input-mode",`Node "${e}": inputMode "${String(c.inputMode)}" is not valid (full-history | latest-message | isolated); omitted.`,e)),void 0!==c.outputMode&&(m.has(c.outputMode)?h.outputMode=c.outputMode:t("invalid-output-mode",`Node "${e}": outputMode "${String(c.outputMode)}" is not valid (steps | final-only); omitted.`,e)),void 0!==j){let{text:a,stripped:b}=o(j);b&&t("pill-stripped",`Node "${e}": binding pills are not supported in generated prompts and were replaced with plain names.`,e),h.promptTemplate=a}"boolean"==typeof c.allowCallerPrompt&&(h.allowCallerPrompt=c.allowCallerPrompt),"string"==typeof c.captureVariable&&c.captureVariable.trim()&&(h.captureVariable=c.captureVariable.trim())}let k={id:(0,d.A)(),type:f,position:{x:0,y:0},data:{label:c.label||`${f.charAt(0).toUpperCase()}${f.slice(1)} Node`,type:f,...c.description?{description:c.description}:{},properties:h}};if(I.set(e,k),J.push(k),"process"===f&&Array.isArray(c.servers)){let a=new Set;for(let b of c.servers){let c,f=b?.name;if(!f||"string"!=typeof f){t("server-missing-name",`Node "${e}": a server reference is missing its "name"; skipped.`,e);continue}if(a.has(f))continue;a.add(f),v.has(f)||t("server-unknown",`Node "${e}": MCP server "${f}" is not configured in FLUJO.`,e);let g=w[f];if(Array.isArray(b.tools)){if(c=b.tools.filter(a=>"string"==typeof a&&a),g){let a=c.filter(a=>!g.includes(a));a.length>0&&t("tool-unknown",`Node "${e}": server "${f}" does not report tool(s): ${a.join(", ")}.`,e)}}else c=g?[...g]:[];let h={id:(0,d.A)(),type:"mcp",position:{x:0,y:0},data:{label:f,type:"mcp",properties:{boundServer:f,enabledTools:c}}};J.push(h),K.push({processKey:e,mcpNode:h})}}else"process"!==f&&Array.isArray(c.servers)&&c.servers.length>0&&t("servers-on-non-process",`Node "${e}": only process nodes can have "servers"; ignored.`,e)}if(0===I.size)return s("no-usable-nodes","No usable nodes — the spec must contain at least a start node and one step."),null;let L=[],M=new Set;for(let a of D){let b,c=a?.from,d=a?.to,e=c?I.get(c):void 0,g=d?I.get(d):void 0;if(!e||!g){s("edge-unknown-node",`Edge "${String(c)}" -> "${String(d)}" references a node key that does not exist (or was dropped).`);continue}if(e===g){s("edge-self-loop",`Edge "${c}" -> "${d}": a node cannot connect to itself.`);continue}if("start"===g.type){s("edge-into-start",`Edge "${c}" -> "${d}": nothing may connect INTO a start node.`);continue}if("finish"===e.type){s("edge-out-of-finish",`Edge "${c}" -> "${d}": nothing may connect OUT OF a finish node.`);continue}let h=`${c}->${d}`;if(M.has(h)){t("edge-duplicate",`Edge "${c}" -> "${d}" appears more than once; kept the first.`);continue}M.add(h);let i=!0===a.bidirectional;i&&("start"===e.type||"finish"===g.type)&&(t("bidirectional-illegal",`Edge "${c}" -> "${d}" cannot be bidirectional; downgraded to one-way.`),i=!1);let j=a.condition;j&&"object"==typeof j&&("process"!==e.type?t("edge-condition-non-process",`Edge "${c}" -> "${d}" has a condition but leaves a ${e.type} node; conditions only route from process nodes and were dropped.`):(0,f.C)(j.kind)?"string"!=typeof j.value||0===j.value.length?t("edge-condition-value",`Edge "${c}" -> "${d}" has a condition with no "value"; the condition was dropped.`):("regex"!==j.kind||(0,f.wM)(j.value)||t("edge-condition-regex",`Edge "${c}" -> "${d}" has a regex condition that does not compile; it is kept but will never match at runtime.`),b={kind:j.kind,value:j.value,..."last-message"===j.target?{target:"last-message"}:{},...!0===j.ignoreCase?{ignoreCase:!0}:{},...!0===j.negate?{negate:!0}:{}}):t("edge-condition-kind",`Edge "${c}" -> "${d}" has an unknown condition kind "${String(j.kind)}"; the condition was dropped.`)),L.push(q(e,g,i,b))}for(let{processKey:a,mcpNode:b}of K){let c=I.get(a);L.push(function(a,b){let c="process-right-mcp",d="mcp-left";return{id:`${a.id}:${c}->${b.id}:${d}`,source:a.id,sourceHandle:c,target:b.id,targetHandle:d,type:"mcpEdge",data:{edgeType:"mcp"},animated:!1,markerEnd:{...j},markerStart:{...j},style:{...k}}}(c,b))}!function(a,b,c,d,e){let f=new Map;for(let a of c)a.data?.edgeType!=="mcp"&&(f.has(a.source)||f.set(a.source,[]),f.get(a.source).push(a.target));let g=[...b.values()],h=g.filter(a=>"start"===a.type),i=h.length>0?h:g.slice(0,1),j=new Map,k=i.map(a=>({id:a.id,depth:0}));for(let a of k)j.set(a.id,0);for(;k.length;){let{id:a,depth:b}=k.shift();for(let c of f.get(a)??[])j.has(c)||(j.set(c,b+1),k.push({id:c,depth:b+1}))}let l=0;for(let a of j.values())l=Math.max(l,a);for(let a of g)j.has(a.id)||j.set(a.id,l+1);let m=new Map;for(let[a,c]of b)m.set(c.id,a);let n=new Map;for(let a of g){let b=m.get(a.id),c=e&&b?e[b]:void 0;if(c&&"number"==typeof c.x&&"number"==typeof c.y){a.position={x:c.x,y:c.y};continue}let d=j.get(a.id),f=n.get(d)??0;n.set(d,f+1),a.position={x:250+280*f,y:150+170*d}}let o=new Map;for(let{processKey:a,mcpNode:c}of d){let d=b.get(a),e=o.get(a)??0;o.set(a,e+1),c.position={x:d.position.x+320,y:d.position.y+150*e}}}(0,I,L,K,0===g?c.positions:void 0);let N={id:F,name:E,...e?.description?{description:e.description}:{},nodes:J,edges:L};return z.push(N),B.push({id:N.id,name:N.name}),N}(a,0,[]),E=z,F=e;let G=F.filter(a=>"error"===a.severity).length;return{flow:D,flows:E,issues:F,errorCount:G,warningCount:F.length-G};function H(a,b){void 0!==a.concurrencyLimit&&("number"!=typeof a.concurrencyLimit||Number.isNaN(a.concurrencyLimit)?t("invalid-concurrency-limit",`Node "${a.key}": concurrencyLimit "${String(a.concurrencyLimit)}" is not a number; using the runtime default.`,a.key):b.concurrencyLimit=Math.max(1,Math.floor(a.concurrencyLimit))),"string"==typeof a.joinSeparator&&(b.joinSeparator=a.joinSeparator),void 0!==a.errorStrategy&&("fail-fast"===a.errorStrategy||"collect-all"===a.errorStrategy?b.errorStrategy=a.errorStrategy:t("invalid-error-strategy",`Node "${a.key}": errorStrategy "${String(a.errorStrategy)}" is not valid (fail-fast | collect-all); using collect-all.`,a.key))}}function s(a){let b=Array.isArray(a?.nodes)?a.nodes:[],c=Array.isArray(a?.edges)?a.edges:[],d=new Map;for(let a of b)"mcp"===a.type&&d.set(a.id,a);let e=new Map;for(let a of c){if(a.data?.edgeType!=="mcp")continue;let b=d.get(a.target);if(!b)continue;let c=b.data?.properties??{},f="string"==typeof c.boundServer&&c.boundServer?c.boundServer:b.data?.label;if(!f||"string"!=typeof f)continue;let g=Array.isArray(c.enabledTools)?c.enabledTools.filter(a=>"string"==typeof a&&!!a):void 0,h=e.get(a.source)??[];h.push({name:f,...g?{tools:g}:{}}),e.set(a.source,h)}let f=[];for(let a of b){if("mcp"===a.type)continue;let b=a.type;if("start"!==b&&"process"!==b&&"finish"!==b&&"subflow"!==b)continue;let c=a.data?.properties??{},d={key:a.id,type:b,...a.data?.label?{label:a.data.label}:{},...a.data?.description?{description:a.data.description}:{}};if("start"===b)"string"==typeof c.promptTemplate&&c.promptTemplate&&(d.prompt=c.promptTemplate);else if("process"===b){"string"==typeof c.promptTemplate&&c.promptTemplate&&(d.prompt=c.promptTemplate),"string"==typeof c.boundModel&&c.boundModel&&(d.model=c.boundModel),"string"==typeof c.inputMode&&(d.inputMode=c.inputMode),"string"==typeof c.isolatedPrompt&&c.isolatedPrompt&&(d.isolatedPrompt=c.isolatedPrompt),"string"==typeof c.outputMode&&(d.outputMode=c.outputMode),"number"==typeof c.maxTurns&&c.maxTurns>0&&(d.maxTurns=c.maxTurns),!0===c.excludeModelPrompt&&(d.excludeModelPrompt=!0),!0===c.excludeStartNodePrompt&&(d.excludeStartNodePrompt=!0),!0===c.excludeSystemPrompt&&(d.excludeSystemPrompt=!0),Array.isArray(c.allowedTools)&&c.allowedTools.length>0&&(d.allowedTools=c.allowedTools.filter(a=>"string"==typeof a&&!!a)),"string"==typeof c.captureVariable&&c.captureVariable&&(d.captureVariable=c.captureVariable);let b=e.get(a.id);b&&b.length>0&&(d.servers=b)}else"subflow"===b&&(Array.isArray(c.parallelSubflowIds)&&c.parallelSubflowIds.length>0?(d.parallelFlows=c.parallelSubflowIds.filter(a=>"string"==typeof a&&!!a),"number"==typeof c.concurrencyLimit&&c.concurrencyLimit>0&&(d.concurrencyLimit=c.concurrencyLimit),"string"==typeof c.joinSeparator&&(d.joinSeparator=c.joinSeparator),("fail-fast"===c.errorStrategy||"collect-all"===c.errorStrategy)&&(d.errorStrategy=c.errorStrategy)):"string"==typeof c.subflowId&&c.subflowId&&(d.flow=c.subflowId,!0===c.mapOverList&&(d.mapOverList=!0,("json-array"===c.itemSplit||"lines"===c.itemSplit)&&(d.itemSplit=c.itemSplit),!0===c.sequential&&(d.sequential=!0),"number"==typeof c.concurrencyLimit&&c.concurrencyLimit>0&&(d.concurrencyLimit=c.concurrencyLimit),"string"==typeof c.joinSeparator&&(d.joinSeparator=c.joinSeparator),("fail-fast"===c.errorStrategy||"collect-all"===c.errorStrategy)&&(d.errorStrategy=c.errorStrategy))),"string"==typeof c.inputMode&&(d.inputMode=c.inputMode),"string"==typeof c.outputMode&&(d.outputMode=c.outputMode),"string"==typeof c.promptTemplate&&c.promptTemplate&&(d.prompt=c.promptTemplate),!0===c.allowCallerPrompt&&(d.allowCallerPrompt=!0),"string"==typeof c.captureVariable&&c.captureVariable&&(d.captureVariable=c.captureVariable));f.push(d)}let g=[];for(let a of c){if(a.data?.edgeType==="mcp"||!a.source||!a.target||d.has(a.source)||d.has(a.target))continue;let b=a.data;g.push({from:a.source,to:a.target,...b?.bidirectional?{bidirectional:!0}:{},...b?.condition?{condition:b.condition}:{}})}return{...a?.name?{name:a.name}:{},...a?.description?{description:a.description}:{},nodes:f,edges:g}}function t(a){for(let b of a.nodes){if("process"!==b.type)continue;let a=b.data.properties??{};void 0===a.inputMode&&(a.inputMode="latest-message"),void 0===a.outputMode&&(a.outputMode="latest-message"),b.data.properties=a}}},87821:(a,b,c)=>{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}};