flujo-ai 3.12.0 → 3.16.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 (408) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-build-manifest.json +140 -105
  3. package/.next/app-path-routes-manifest.json +19 -14
  4. package/.next/build-manifest.json +2 -2
  5. package/.next/prerender-manifest.json +15 -15
  6. package/.next/routes-manifest.json +20 -1
  7. package/.next/server/app/_not-found/page.js +2 -2
  8. package/.next/server/app/_not-found/page.js.nft.json +1 -1
  9. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  10. package/.next/server/app/_not-found.html +1 -1
  11. package/.next/server/app/_not-found.rsc +1 -1
  12. package/.next/server/app/api/backup/route.js +1 -1
  13. package/.next/server/app/api/backup/route.js.nft.json +1 -1
  14. package/.next/server/app/api/backup/route_client-reference-manifest.js +1 -1
  15. package/.next/server/app/api/browse/route.js +1 -1
  16. package/.next/server/app/api/browse/route.js.nft.json +1 -1
  17. package/.next/server/app/api/browse/route_client-reference-manifest.js +1 -1
  18. package/.next/server/app/api/cwd/route.js +1 -1
  19. package/.next/server/app/api/cwd/route.js.nft.json +1 -1
  20. package/.next/server/app/api/cwd/route_client-reference-manifest.js +1 -1
  21. package/.next/server/app/api/encryption/secure/route.js +1 -1
  22. package/.next/server/app/api/encryption/secure/route.js.nft.json +1 -1
  23. package/.next/server/app/api/encryption/secure/route_client-reference-manifest.js +1 -1
  24. package/.next/server/app/api/env/route.js +1 -1
  25. package/.next/server/app/api/env/route.js.nft.json +1 -1
  26. package/.next/server/app/api/env/route_client-reference-manifest.js +1 -1
  27. package/.next/server/app/api/flow/[id]/route.js +1 -1
  28. package/.next/server/app/api/flow/[id]/route.js.nft.json +1 -1
  29. package/.next/server/app/api/flow/[id]/route_client-reference-manifest.js +1 -1
  30. package/.next/server/app/api/flow/compile/route.js +1 -0
  31. package/.next/server/app/api/flow/compile/route.js.nft.json +1 -0
  32. package/.next/server/app/api/flow/compile/route_client-reference-manifest.js +1 -0
  33. package/.next/server/app/api/flow/generate/route.js +17 -0
  34. package/.next/server/app/api/flow/generate/route.js.nft.json +1 -0
  35. package/.next/server/app/api/flow/generate/route_client-reference-manifest.js +1 -0
  36. package/.next/server/app/api/flow/prompt-renderer/route.js +1 -1
  37. package/.next/server/app/api/flow/prompt-renderer/route.js.nft.json +1 -1
  38. package/.next/server/app/api/flow/prompt-renderer/route_client-reference-manifest.js +1 -1
  39. package/.next/server/app/api/flow/route.js +1 -1
  40. package/.next/server/app/api/flow/route.js.nft.json +1 -1
  41. package/.next/server/app/api/flow/route_client-reference-manifest.js +1 -1
  42. package/.next/server/app/api/git/route.js +2 -2
  43. package/.next/server/app/api/git/route.js.nft.json +1 -1
  44. package/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
  45. package/.next/server/app/api/init/route.js +1 -1
  46. package/.next/server/app/api/init/route.js.nft.json +1 -1
  47. package/.next/server/app/api/init/route_client-reference-manifest.js +1 -1
  48. package/.next/server/app/api/local-models/capability/route.js +1 -0
  49. package/.next/server/app/api/local-models/capability/route.js.nft.json +1 -0
  50. package/.next/server/app/api/local-models/capability/route_client-reference-manifest.js +1 -0
  51. package/.next/server/app/api/local-models/pull/route.js +1 -0
  52. package/.next/server/app/api/local-models/pull/route.js.nft.json +1 -0
  53. package/.next/server/app/api/local-models/pull/route_client-reference-manifest.js +1 -0
  54. package/.next/server/app/api/local-models/suggest/route.js +2 -0
  55. package/.next/server/app/api/local-models/suggest/route.js.nft.json +1 -0
  56. package/.next/server/app/api/local-models/suggest/route_client-reference-manifest.js +1 -0
  57. package/.next/server/app/api/mcp/cancel/route.js +1 -1
  58. package/.next/server/app/api/mcp/cancel/route.js.nft.json +1 -1
  59. package/.next/server/app/api/mcp/cancel/route_client-reference-manifest.js +1 -1
  60. package/.next/server/app/api/mcp/servers/[name]/prompts/get/route.js +1 -1
  61. package/.next/server/app/api/mcp/servers/[name]/prompts/get/route.js.nft.json +1 -1
  62. package/.next/server/app/api/mcp/servers/[name]/prompts/get/route_client-reference-manifest.js +1 -1
  63. package/.next/server/app/api/mcp/servers/[name]/prompts/route.js +1 -1
  64. package/.next/server/app/api/mcp/servers/[name]/prompts/route.js.nft.json +1 -1
  65. package/.next/server/app/api/mcp/servers/[name]/prompts/route_client-reference-manifest.js +1 -1
  66. package/.next/server/app/api/mcp/servers/[name]/resources/read/route.js +1 -1
  67. package/.next/server/app/api/mcp/servers/[name]/resources/read/route.js.nft.json +1 -1
  68. package/.next/server/app/api/mcp/servers/[name]/resources/read/route_client-reference-manifest.js +1 -1
  69. package/.next/server/app/api/mcp/servers/[name]/resources/route.js +1 -1
  70. package/.next/server/app/api/mcp/servers/[name]/resources/route.js.nft.json +1 -1
  71. package/.next/server/app/api/mcp/servers/[name]/resources/route_client-reference-manifest.js +1 -1
  72. package/.next/server/app/api/mcp/servers/[name]/route.js +1 -1
  73. package/.next/server/app/api/mcp/servers/[name]/route.js.nft.json +1 -1
  74. package/.next/server/app/api/mcp/servers/[name]/route_client-reference-manifest.js +1 -1
  75. package/.next/server/app/api/mcp/servers/[name]/status/route.js +1 -1
  76. package/.next/server/app/api/mcp/servers/[name]/status/route.js.nft.json +1 -1
  77. package/.next/server/app/api/mcp/servers/[name]/status/route_client-reference-manifest.js +1 -1
  78. package/.next/server/app/api/mcp/servers/[name]/tools/[toolName]/route.js +1 -1
  79. package/.next/server/app/api/mcp/servers/[name]/tools/[toolName]/route.js.nft.json +1 -1
  80. package/.next/server/app/api/mcp/servers/[name]/tools/[toolName]/route_client-reference-manifest.js +1 -1
  81. package/.next/server/app/api/mcp/servers/[name]/tools/route.js +1 -1
  82. package/.next/server/app/api/mcp/servers/[name]/tools/route.js.nft.json +1 -1
  83. package/.next/server/app/api/mcp/servers/[name]/tools/route_client-reference-manifest.js +1 -1
  84. package/.next/server/app/api/mcp/servers/route.js +1 -1
  85. package/.next/server/app/api/mcp/servers/route.js.nft.json +1 -1
  86. package/.next/server/app/api/mcp/servers/route_client-reference-manifest.js +1 -1
  87. package/.next/server/app/api/mcp/test-connection/route.js +1 -1
  88. package/.next/server/app/api/mcp/test-connection/route.js.nft.json +1 -1
  89. package/.next/server/app/api/mcp/test-connection/route_client-reference-manifest.js +1 -1
  90. package/.next/server/app/api/mcp/test-connection/stream/route.js +1 -1
  91. package/.next/server/app/api/mcp/test-connection/stream/route.js.nft.json +1 -1
  92. package/.next/server/app/api/mcp/test-connection/stream/route_client-reference-manifest.js +1 -1
  93. package/.next/server/app/api/mcp-registry/route.js +1 -1
  94. package/.next/server/app/api/mcp-registry/route.js.nft.json +1 -1
  95. package/.next/server/app/api/mcp-registry/route_client-reference-manifest.js +1 -1
  96. package/.next/server/app/api/mcp-registry/spotlight/route.js +1 -1
  97. package/.next/server/app/api/mcp-registry/spotlight/route.js.nft.json +1 -1
  98. package/.next/server/app/api/mcp-registry/spotlight/route_client-reference-manifest.js +1 -1
  99. package/.next/server/app/api/model/[id]/route.js +1 -1
  100. package/.next/server/app/api/model/[id]/route.js.nft.json +1 -1
  101. package/.next/server/app/api/model/[id]/route_client-reference-manifest.js +1 -1
  102. package/.next/server/app/api/model/provider/route.js +1 -1
  103. package/.next/server/app/api/model/provider/route.js.nft.json +1 -1
  104. package/.next/server/app/api/model/provider/route_client-reference-manifest.js +1 -1
  105. package/.next/server/app/api/model/route.js +1 -1
  106. package/.next/server/app/api/model/route.js.nft.json +1 -1
  107. package/.next/server/app/api/model/route_client-reference-manifest.js +1 -1
  108. package/.next/server/app/api/model/test/route.js +1 -1
  109. package/.next/server/app/api/model/test/route.js.nft.json +1 -1
  110. package/.next/server/app/api/model/test/route_client-reference-manifest.js +1 -1
  111. package/.next/server/app/api/oauth/callback/route.js +1 -1
  112. package/.next/server/app/api/oauth/callback/route.js.nft.json +1 -1
  113. package/.next/server/app/api/oauth/callback/route_client-reference-manifest.js +1 -1
  114. package/.next/server/app/api/oauth/initiate/route.js +1 -1
  115. package/.next/server/app/api/oauth/initiate/route.js.nft.json +1 -1
  116. package/.next/server/app/api/oauth/initiate/route_client-reference-manifest.js +1 -1
  117. package/.next/server/app/api/oauth/reset/route.js +1 -1
  118. package/.next/server/app/api/oauth/reset/route.js.nft.json +1 -1
  119. package/.next/server/app/api/oauth/reset/route_client-reference-manifest.js +1 -1
  120. package/.next/server/app/api/planned-executions/[id]/route.js +2 -1
  121. package/.next/server/app/api/planned-executions/[id]/route.js.nft.json +1 -1
  122. package/.next/server/app/api/planned-executions/[id]/route_client-reference-manifest.js +1 -1
  123. package/.next/server/app/api/planned-executions/[id]/run/route.js +2 -1
  124. package/.next/server/app/api/planned-executions/[id]/run/route.js.nft.json +1 -1
  125. package/.next/server/app/api/planned-executions/[id]/run/route_client-reference-manifest.js +1 -1
  126. package/.next/server/app/api/planned-executions/[id]/runs/route.js +2 -1
  127. package/.next/server/app/api/planned-executions/[id]/runs/route.js.nft.json +1 -1
  128. package/.next/server/app/api/planned-executions/[id]/runs/route_client-reference-manifest.js +1 -1
  129. package/.next/server/app/api/planned-executions/preview-schedule/route.js +1 -1
  130. package/.next/server/app/api/planned-executions/preview-schedule/route.js.nft.json +1 -1
  131. package/.next/server/app/api/planned-executions/preview-schedule/route_client-reference-manifest.js +1 -1
  132. package/.next/server/app/api/planned-executions/route.js +1 -1
  133. package/.next/server/app/api/planned-executions/route.js.nft.json +1 -1
  134. package/.next/server/app/api/planned-executions/route_client-reference-manifest.js +1 -1
  135. package/.next/server/app/api/restore/route.js +1 -1
  136. package/.next/server/app/api/restore/route.js.nft.json +1 -1
  137. package/.next/server/app/api/restore/route_client-reference-manifest.js +1 -1
  138. package/.next/server/app/api/storage/route.js +1 -1
  139. package/.next/server/app/api/storage/route.js.nft.json +1 -1
  140. package/.next/server/app/api/storage/route_client-reference-manifest.js +1 -1
  141. package/.next/server/app/api/update/route.js +1 -1
  142. package/.next/server/app/api/update/route.js.nft.json +1 -1
  143. package/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
  144. package/.next/server/app/api/webhooks/[id]/route.js +1 -1
  145. package/.next/server/app/api/webhooks/[id]/route.js.nft.json +1 -1
  146. package/.next/server/app/api/webhooks/[id]/route_client-reference-manifest.js +1 -1
  147. package/.next/server/app/chat/page.js +1 -1
  148. package/.next/server/app/chat/page.js.nft.json +1 -1
  149. package/.next/server/app/chat/page_client-reference-manifest.js +1 -1
  150. package/.next/server/app/chat.html +1 -1
  151. package/.next/server/app/chat.rsc +2 -2
  152. package/.next/server/app/docs/page.js +32 -2
  153. package/.next/server/app/docs/page.js.nft.json +1 -1
  154. package/.next/server/app/docs/page_client-reference-manifest.js +1 -1
  155. package/.next/server/app/docs.html +1 -1
  156. package/.next/server/app/docs.rsc +2 -2
  157. package/.next/server/app/executions/page.js +3 -3
  158. package/.next/server/app/executions/page.js.nft.json +1 -1
  159. package/.next/server/app/executions/page_client-reference-manifest.js +1 -1
  160. package/.next/server/app/executions.html +1 -1
  161. package/.next/server/app/executions.rsc +2 -2
  162. package/.next/server/app/flows/page.js +10 -10
  163. package/.next/server/app/flows/page.js.nft.json +1 -1
  164. package/.next/server/app/flows/page_client-reference-manifest.js +1 -1
  165. package/.next/server/app/flows.html +1 -1
  166. package/.next/server/app/flows.rsc +2 -2
  167. package/.next/server/app/index.html +1 -1
  168. package/.next/server/app/index.rsc +1 -1
  169. package/.next/server/app/mcp/page.js +6 -6
  170. package/.next/server/app/mcp/page.js.nft.json +1 -1
  171. package/.next/server/app/mcp/page_client-reference-manifest.js +1 -1
  172. package/.next/server/app/mcp-flows/route.js +5 -1
  173. package/.next/server/app/mcp-flows/route.js.nft.json +1 -1
  174. package/.next/server/app/mcp-flows/route_client-reference-manifest.js +1 -1
  175. package/.next/server/app/mcp-proxy/[server]/route.js +1 -1
  176. package/.next/server/app/mcp-proxy/[server]/route.js.nft.json +1 -1
  177. package/.next/server/app/mcp-proxy/[server]/route_client-reference-manifest.js +1 -1
  178. package/.next/server/app/mcp.html +1 -1
  179. package/.next/server/app/mcp.rsc +2 -2
  180. package/.next/server/app/models/page.js +2 -2
  181. package/.next/server/app/models/page.js.nft.json +1 -1
  182. package/.next/server/app/models/page_client-reference-manifest.js +1 -1
  183. package/.next/server/app/page.js +2 -2
  184. package/.next/server/app/page.js.nft.json +1 -1
  185. package/.next/server/app/page_client-reference-manifest.js +1 -1
  186. package/.next/server/app/settings/page.js +1 -1
  187. package/.next/server/app/settings/page.js.nft.json +1 -1
  188. package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  189. package/.next/server/app/settings.html +1 -1
  190. package/.next/server/app/settings.rsc +2 -2
  191. package/.next/server/app/v1/chat/completions/route.js +1 -1
  192. package/.next/server/app/v1/chat/completions/route.js.nft.json +1 -1
  193. package/.next/server/app/v1/chat/completions/route_client-reference-manifest.js +1 -1
  194. package/.next/server/app/v1/chat/conversations/[conversationId]/breakpoints/route.js +1 -1
  195. package/.next/server/app/v1/chat/conversations/[conversationId]/breakpoints/route.js.nft.json +1 -1
  196. package/.next/server/app/v1/chat/conversations/[conversationId]/breakpoints/route_client-reference-manifest.js +1 -1
  197. package/.next/server/app/v1/chat/conversations/[conversationId]/cancel/route.js +1 -1
  198. package/.next/server/app/v1/chat/conversations/[conversationId]/cancel/route.js.nft.json +1 -1
  199. package/.next/server/app/v1/chat/conversations/[conversationId]/cancel/route_client-reference-manifest.js +1 -1
  200. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/continue/route.js +1 -1
  201. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/continue/route.js.nft.json +1 -1
  202. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/continue/route_client-reference-manifest.js +1 -1
  203. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/step/route.js +1 -1
  204. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/step/route.js.nft.json +1 -1
  205. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/step/route_client-reference-manifest.js +1 -1
  206. package/.next/server/app/v1/chat/conversations/[conversationId]/edit-state/route.js +1 -1
  207. package/.next/server/app/v1/chat/conversations/[conversationId]/edit-state/route.js.nft.json +1 -1
  208. package/.next/server/app/v1/chat/conversations/[conversationId]/edit-state/route_client-reference-manifest.js +1 -1
  209. package/.next/server/app/v1/chat/conversations/[conversationId]/events/route.js +1 -1
  210. package/.next/server/app/v1/chat/conversations/[conversationId]/events/route.js.nft.json +1 -1
  211. package/.next/server/app/v1/chat/conversations/[conversationId]/events/route_client-reference-manifest.js +1 -1
  212. package/.next/server/app/v1/chat/conversations/[conversationId]/respond/route.js +1 -1
  213. package/.next/server/app/v1/chat/conversations/[conversationId]/respond/route.js.nft.json +1 -1
  214. package/.next/server/app/v1/chat/conversations/[conversationId]/respond/route_client-reference-manifest.js +1 -1
  215. package/.next/server/app/v1/chat/conversations/[conversationId]/route.js +1 -1
  216. package/.next/server/app/v1/chat/conversations/[conversationId]/route.js.nft.json +1 -1
  217. package/.next/server/app/v1/chat/conversations/[conversationId]/route_client-reference-manifest.js +1 -1
  218. package/.next/server/app/v1/chat/conversations/route.js +1 -1
  219. package/.next/server/app/v1/chat/conversations/route.js.nft.json +1 -1
  220. package/.next/server/app/v1/chat/conversations/route_client-reference-manifest.js +1 -1
  221. package/.next/server/app/v1/models/route.js +1 -1
  222. package/.next/server/app/v1/models/route.js.nft.json +1 -1
  223. package/.next/server/app/v1/models/route_client-reference-manifest.js +1 -1
  224. package/.next/server/app-paths-manifest.json +19 -14
  225. package/.next/server/chunks/1403.js +1 -1
  226. package/.next/server/chunks/1690.js +1 -0
  227. package/.next/server/chunks/1877.js +31 -0
  228. package/.next/server/chunks/2776.js +1 -1
  229. package/.next/server/chunks/2859.js +7 -0
  230. package/.next/server/chunks/3243.js +1 -0
  231. package/.next/server/chunks/3304.js +1 -0
  232. package/.next/server/chunks/3984.js +4 -4
  233. package/.next/server/chunks/4681.js +1 -0
  234. package/.next/server/chunks/5504.js +1 -1
  235. package/.next/server/chunks/{1331.js → 5873.js} +3 -3
  236. package/.next/server/chunks/5935.js +2 -0
  237. package/.next/server/chunks/6195.js +37 -0
  238. package/.next/server/chunks/6523.js +1 -0
  239. package/.next/server/chunks/6936.js +6 -6
  240. package/.next/server/chunks/701.js +1 -1
  241. package/.next/server/chunks/7214.js +2 -2
  242. package/.next/server/chunks/{5389.js → 7362.js} +13 -13
  243. package/.next/server/chunks/7635.js +6 -0
  244. package/.next/server/chunks/{2287.js → 8367.js} +2 -2
  245. package/.next/server/chunks/{2253.js → 8572.js} +1 -1
  246. package/.next/server/chunks/8739.js +1 -1
  247. package/.next/server/chunks/8994.js +2 -0
  248. package/.next/server/chunks/9188.js +1 -1
  249. package/.next/server/chunks/9509.js +2 -2
  250. package/.next/server/chunks/9794.js +1 -0
  251. package/.next/server/chunks/9957.js +1 -0
  252. package/.next/server/functions-config-manifest.json +3 -0
  253. package/.next/server/instrumentation.js +1 -1
  254. package/.next/server/instrumentation.js.nft.json +1 -1
  255. package/.next/server/pages/404.html +1 -1
  256. package/.next/server/pages/500.html +1 -1
  257. package/.next/server/pages-manifest.json +1 -1
  258. package/.next/server/server-reference-manifest.js +1 -1
  259. package/.next/server/server-reference-manifest.json +1 -1
  260. package/.next/static/chunks/2403-5c26e0abd76095b1.js +1 -0
  261. package/.next/static/chunks/510-e39ad4e1fae6dd1f.js +1 -0
  262. package/.next/static/chunks/8862-1170dad1d6f3cd39.js +1 -0
  263. package/.next/static/chunks/9554-cb5bd72cb40e8dbe.js +1 -0
  264. package/.next/static/chunks/app/api/backup/route-7248529e02c31012.js +1 -0
  265. package/.next/static/chunks/app/api/browse/route-7248529e02c31012.js +1 -0
  266. package/.next/static/chunks/app/api/cwd/route-7248529e02c31012.js +1 -0
  267. package/.next/static/chunks/app/api/encryption/secure/route-7248529e02c31012.js +1 -0
  268. package/.next/static/chunks/app/api/env/route-7248529e02c31012.js +1 -0
  269. package/.next/static/chunks/app/api/flow/[id]/route-7248529e02c31012.js +1 -0
  270. package/.next/static/chunks/app/api/flow/compile/route-7248529e02c31012.js +1 -0
  271. package/.next/static/chunks/app/api/flow/generate/route-7248529e02c31012.js +1 -0
  272. package/.next/static/chunks/app/api/flow/prompt-renderer/route-7248529e02c31012.js +1 -0
  273. package/.next/static/chunks/app/api/flow/route-7248529e02c31012.js +1 -0
  274. package/.next/static/chunks/app/api/git/route-7248529e02c31012.js +1 -0
  275. package/.next/static/chunks/app/api/init/route-7248529e02c31012.js +1 -0
  276. package/.next/static/chunks/app/api/local-models/capability/route-7248529e02c31012.js +1 -0
  277. package/.next/static/chunks/app/api/local-models/pull/route-7248529e02c31012.js +1 -0
  278. package/.next/static/chunks/app/api/local-models/suggest/route-7248529e02c31012.js +1 -0
  279. package/.next/static/chunks/app/api/mcp/cancel/route-7248529e02c31012.js +1 -0
  280. package/.next/static/chunks/app/api/mcp/servers/[name]/prompts/get/route-7248529e02c31012.js +1 -0
  281. package/.next/static/chunks/app/api/mcp/servers/[name]/prompts/route-7248529e02c31012.js +1 -0
  282. package/.next/static/chunks/app/api/mcp/servers/[name]/resources/read/route-7248529e02c31012.js +1 -0
  283. package/.next/static/chunks/app/api/mcp/servers/[name]/resources/route-7248529e02c31012.js +1 -0
  284. package/.next/static/chunks/app/api/mcp/servers/[name]/route-7248529e02c31012.js +1 -0
  285. package/.next/static/chunks/app/api/mcp/servers/[name]/status/route-7248529e02c31012.js +1 -0
  286. package/.next/static/chunks/app/api/mcp/servers/[name]/tools/[toolName]/route-7248529e02c31012.js +1 -0
  287. package/.next/static/chunks/app/api/mcp/servers/[name]/tools/route-7248529e02c31012.js +1 -0
  288. package/.next/static/chunks/app/api/mcp/servers/route-7248529e02c31012.js +1 -0
  289. package/.next/static/chunks/app/api/mcp/test-connection/route-7248529e02c31012.js +1 -0
  290. package/.next/static/chunks/app/api/mcp/test-connection/stream/route-7248529e02c31012.js +1 -0
  291. package/.next/static/chunks/app/api/mcp-registry/route-7248529e02c31012.js +1 -0
  292. package/.next/static/chunks/app/api/mcp-registry/spotlight/route-7248529e02c31012.js +1 -0
  293. package/.next/static/chunks/app/api/model/[id]/route-7248529e02c31012.js +1 -0
  294. package/.next/static/chunks/app/api/model/provider/route-7248529e02c31012.js +1 -0
  295. package/.next/static/chunks/app/api/model/route-7248529e02c31012.js +1 -0
  296. package/.next/static/chunks/app/api/model/test/route-7248529e02c31012.js +1 -0
  297. package/.next/static/chunks/app/api/oauth/callback/route-7248529e02c31012.js +1 -0
  298. package/.next/static/chunks/app/api/oauth/initiate/route-7248529e02c31012.js +1 -0
  299. package/.next/static/chunks/app/api/oauth/reset/route-7248529e02c31012.js +1 -0
  300. package/.next/static/chunks/app/api/planned-executions/[id]/route-7248529e02c31012.js +1 -0
  301. package/.next/static/chunks/app/api/planned-executions/[id]/run/route-7248529e02c31012.js +1 -0
  302. package/.next/static/chunks/app/api/planned-executions/[id]/runs/route-7248529e02c31012.js +1 -0
  303. package/.next/static/chunks/app/api/planned-executions/preview-schedule/route-7248529e02c31012.js +1 -0
  304. package/.next/static/chunks/app/api/planned-executions/route-7248529e02c31012.js +1 -0
  305. package/.next/static/chunks/app/api/restore/route-7248529e02c31012.js +1 -0
  306. package/.next/static/chunks/app/api/storage/route-7248529e02c31012.js +1 -0
  307. package/.next/static/chunks/app/api/update/route-7248529e02c31012.js +1 -0
  308. package/.next/static/chunks/app/api/webhooks/[id]/route-7248529e02c31012.js +1 -0
  309. package/.next/static/chunks/app/chat/{page-5c838e3ce9d7a27d.js → page-c759cf382bcabd77.js} +1 -1
  310. package/.next/static/chunks/app/docs/page-1d349e2d82f7b104.js +1 -0
  311. package/.next/static/chunks/app/executions/page-4155f9f682ee6f84.js +1 -0
  312. package/.next/static/chunks/app/flows/page-375150edff9134a3.js +1 -0
  313. package/.next/static/chunks/app/mcp/page-5234695929980171.js +1 -0
  314. package/.next/static/chunks/app/mcp-flows/route-7248529e02c31012.js +1 -0
  315. package/.next/static/chunks/app/mcp-proxy/[server]/route-7248529e02c31012.js +1 -0
  316. package/.next/static/chunks/app/settings/{page-199cff457723ee57.js → page-9a2bfb8d5bdba29e.js} +1 -1
  317. package/.next/static/chunks/app/v1/chat/completions/route-7248529e02c31012.js +1 -0
  318. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/breakpoints/route-7248529e02c31012.js +1 -0
  319. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/cancel/route-7248529e02c31012.js +1 -0
  320. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/debug/continue/route-7248529e02c31012.js +1 -0
  321. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/debug/step/route-7248529e02c31012.js +1 -0
  322. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/edit-state/route-7248529e02c31012.js +1 -0
  323. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/events/route-7248529e02c31012.js +1 -0
  324. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/respond/route-7248529e02c31012.js +1 -0
  325. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/route-7248529e02c31012.js +1 -0
  326. package/.next/static/chunks/app/v1/chat/conversations/route-7248529e02c31012.js +1 -0
  327. package/.next/static/chunks/app/v1/models/route-7248529e02c31012.js +1 -0
  328. package/.next/static/z7fsG7kblb_yxkUhOxn-G/_buildManifest.js +1 -0
  329. package/.next/trace +7 -7
  330. package/.next/types/app/api/flow/compile/route.ts +347 -0
  331. package/.next/types/app/api/flow/generate/route.ts +347 -0
  332. package/.next/types/app/api/local-models/capability/route.ts +347 -0
  333. package/.next/types/app/api/local-models/pull/route.ts +347 -0
  334. package/.next/types/app/api/local-models/suggest/route.ts +347 -0
  335. package/.next/types/routes.d.ts +6 -1
  336. package/.next/types/validator.ts +45 -0
  337. package/README.md +1 -1
  338. package/next.config.mjs +119 -105
  339. package/package.json +90 -90
  340. package/.next/server/chunks/4239.js +0 -1
  341. package/.next/server/chunks/4706.js +0 -1
  342. package/.next/server/chunks/4729.js +0 -6
  343. package/.next/server/chunks/5443.js +0 -1
  344. package/.next/server/chunks/7485.js +0 -1
  345. package/.next/server/chunks/812.js +0 -2
  346. package/.next/static/07vmuF5x2Bs8Xj1OeV0QV/_buildManifest.js +0 -1
  347. package/.next/static/chunks/256-7f4847b6726c866c.js +0 -1
  348. package/.next/static/chunks/7329-78f54f68ea2d37e2.js +0 -1
  349. package/.next/static/chunks/8862-8f17ef601bb1fbd0.js +0 -1
  350. package/.next/static/chunks/8890-a7a8c6f1dc3cd343.js +0 -1
  351. package/.next/static/chunks/app/api/backup/route-3291f6991ce3f52c.js +0 -1
  352. package/.next/static/chunks/app/api/browse/route-3291f6991ce3f52c.js +0 -1
  353. package/.next/static/chunks/app/api/cwd/route-3291f6991ce3f52c.js +0 -1
  354. package/.next/static/chunks/app/api/encryption/secure/route-3291f6991ce3f52c.js +0 -1
  355. package/.next/static/chunks/app/api/env/route-3291f6991ce3f52c.js +0 -1
  356. package/.next/static/chunks/app/api/flow/[id]/route-3291f6991ce3f52c.js +0 -1
  357. package/.next/static/chunks/app/api/flow/prompt-renderer/route-3291f6991ce3f52c.js +0 -1
  358. package/.next/static/chunks/app/api/flow/route-3291f6991ce3f52c.js +0 -1
  359. package/.next/static/chunks/app/api/git/route-3291f6991ce3f52c.js +0 -1
  360. package/.next/static/chunks/app/api/init/route-3291f6991ce3f52c.js +0 -1
  361. package/.next/static/chunks/app/api/mcp/cancel/route-3291f6991ce3f52c.js +0 -1
  362. package/.next/static/chunks/app/api/mcp/servers/[name]/prompts/get/route-3291f6991ce3f52c.js +0 -1
  363. package/.next/static/chunks/app/api/mcp/servers/[name]/prompts/route-3291f6991ce3f52c.js +0 -1
  364. package/.next/static/chunks/app/api/mcp/servers/[name]/resources/read/route-3291f6991ce3f52c.js +0 -1
  365. package/.next/static/chunks/app/api/mcp/servers/[name]/resources/route-3291f6991ce3f52c.js +0 -1
  366. package/.next/static/chunks/app/api/mcp/servers/[name]/route-3291f6991ce3f52c.js +0 -1
  367. package/.next/static/chunks/app/api/mcp/servers/[name]/status/route-3291f6991ce3f52c.js +0 -1
  368. package/.next/static/chunks/app/api/mcp/servers/[name]/tools/[toolName]/route-3291f6991ce3f52c.js +0 -1
  369. package/.next/static/chunks/app/api/mcp/servers/[name]/tools/route-3291f6991ce3f52c.js +0 -1
  370. package/.next/static/chunks/app/api/mcp/servers/route-3291f6991ce3f52c.js +0 -1
  371. package/.next/static/chunks/app/api/mcp/test-connection/route-3291f6991ce3f52c.js +0 -1
  372. package/.next/static/chunks/app/api/mcp/test-connection/stream/route-3291f6991ce3f52c.js +0 -1
  373. package/.next/static/chunks/app/api/mcp-registry/route-3291f6991ce3f52c.js +0 -1
  374. package/.next/static/chunks/app/api/mcp-registry/spotlight/route-3291f6991ce3f52c.js +0 -1
  375. package/.next/static/chunks/app/api/model/[id]/route-3291f6991ce3f52c.js +0 -1
  376. package/.next/static/chunks/app/api/model/provider/route-3291f6991ce3f52c.js +0 -1
  377. package/.next/static/chunks/app/api/model/route-3291f6991ce3f52c.js +0 -1
  378. package/.next/static/chunks/app/api/model/test/route-3291f6991ce3f52c.js +0 -1
  379. package/.next/static/chunks/app/api/oauth/callback/route-3291f6991ce3f52c.js +0 -1
  380. package/.next/static/chunks/app/api/oauth/initiate/route-3291f6991ce3f52c.js +0 -1
  381. package/.next/static/chunks/app/api/oauth/reset/route-3291f6991ce3f52c.js +0 -1
  382. package/.next/static/chunks/app/api/planned-executions/[id]/route-3291f6991ce3f52c.js +0 -1
  383. package/.next/static/chunks/app/api/planned-executions/[id]/run/route-3291f6991ce3f52c.js +0 -1
  384. package/.next/static/chunks/app/api/planned-executions/[id]/runs/route-3291f6991ce3f52c.js +0 -1
  385. package/.next/static/chunks/app/api/planned-executions/preview-schedule/route-3291f6991ce3f52c.js +0 -1
  386. package/.next/static/chunks/app/api/planned-executions/route-3291f6991ce3f52c.js +0 -1
  387. package/.next/static/chunks/app/api/restore/route-3291f6991ce3f52c.js +0 -1
  388. package/.next/static/chunks/app/api/storage/route-3291f6991ce3f52c.js +0 -1
  389. package/.next/static/chunks/app/api/update/route-3291f6991ce3f52c.js +0 -1
  390. package/.next/static/chunks/app/api/webhooks/[id]/route-3291f6991ce3f52c.js +0 -1
  391. package/.next/static/chunks/app/docs/page-d4005b311ead55f2.js +0 -1
  392. package/.next/static/chunks/app/executions/page-870931839b84c8d5.js +0 -1
  393. package/.next/static/chunks/app/flows/page-303dc4d2542567a6.js +0 -1
  394. package/.next/static/chunks/app/mcp/page-5012a7e5b6366207.js +0 -1
  395. package/.next/static/chunks/app/mcp-flows/route-3291f6991ce3f52c.js +0 -1
  396. package/.next/static/chunks/app/mcp-proxy/[server]/route-3291f6991ce3f52c.js +0 -1
  397. package/.next/static/chunks/app/v1/chat/completions/route-3291f6991ce3f52c.js +0 -1
  398. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/breakpoints/route-3291f6991ce3f52c.js +0 -1
  399. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/cancel/route-3291f6991ce3f52c.js +0 -1
  400. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/debug/continue/route-3291f6991ce3f52c.js +0 -1
  401. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/debug/step/route-3291f6991ce3f52c.js +0 -1
  402. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/edit-state/route-3291f6991ce3f52c.js +0 -1
  403. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/events/route-3291f6991ce3f52c.js +0 -1
  404. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/respond/route-3291f6991ce3f52c.js +0 -1
  405. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/route-3291f6991ce3f52c.js +0 -1
  406. package/.next/static/chunks/app/v1/chat/conversations/route-3291f6991ce3f52c.js +0 -1
  407. package/.next/static/chunks/app/v1/models/route-3291f6991ce3f52c.js +0 -1
  408. /package/.next/static/{07vmuF5x2Bs8Xj1OeV0QV → z7fsG7kblb_yxkUhOxn-G}/_ssgManifest.js +0 -0
@@ -1,7 +1,6 @@
1
- (()=>{var a={};a.id=3080,a.ids=[3080],a.modules={261:a=>{"use strict";a.exports=require("next/dist/shared/lib/router/utils/app-paths")},3295:a=>{"use strict";a.exports=require("next/dist/server/app-render/after-task-async-storage.external.js")},10057:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>d});let d=(0,c(97954).registerClientReference)(function(){throw Error("Attempted to call the default export of \"C:\\\\Users\\\\MarioAndreschak\\\\Documents\\\\GitHub\\\\FLUJO\\\\src\\\\app\\\\flows\\\\page.tsx\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"C:\\Users\\MarioAndreschak\\Documents\\GitHub\\FLUJO\\src\\app\\flows\\page.tsx","default")},10846:a=>{"use strict";a.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},19121:a=>{"use strict";a.exports=require("next/dist/server/app-render/action-async-storage.external.js")},25525:(a,b,c)=>{Promise.resolve().then(c.bind(c,78509))},26713:a=>{"use strict";a.exports=require("next/dist/shared/lib/router/utils/is-bot")},28354:a=>{"use strict";a.exports=require("util")},29294:a=>{"use strict";a.exports=require("next/dist/server/app-render/work-async-storage.external.js")},33873:a=>{"use strict";a.exports=require("path")},41025:a=>{"use strict";a.exports=require("next/dist/server/app-render/dynamic-access-async-storage.external.js")},53773:(a,b,c)=>{"use strict";c.d(b,{A:()=>v});var d=c(38301),e=c(43249),f=c(3253),g=c(33105),h=c(2783),i=c(38435),j=c(30583),k=c(69467),l=c(49103),m=c(80751),n=c(49939),o=c(21124);let p=(0,l.A)(),q=(0,i.A)("div",{name:"MuiStack",slot:"Root",overridesResolver:(a,b)=>b.root});function r(a){return(0,j.A)({props:a,name:"MuiStack",defaultTheme:p})}let s=({ownerState:a,theme:b})=>{let c={display:"flex",flexDirection:"column",...(0,m.NI)({theme:b},(0,m.kW)({values:a.direction,breakpoints:b.breakpoints.values}),a=>({flexDirection:a}))};if(a.spacing){let d=(0,n.LX)(b),e=Object.keys(b.breakpoints.values).reduce((b,c)=>(("object"==typeof a.spacing&&null!=a.spacing[c]||"object"==typeof a.direction&&null!=a.direction[c])&&(b[c]=!0),b),{}),g=(0,m.kW)({values:a.direction,base:e}),h=(0,m.kW)({values:a.spacing,base:e});"object"==typeof g&&Object.keys(g).forEach((a,b,c)=>{if(!g[a]){let d=b>0?g[c[b-1]]:"column";g[a]=d}}),c=(0,f.A)(c,(0,m.NI)({theme:b},h,(b,c)=>a.useFlexGap?{gap:(0,n._W)(d,b)}:{"& > :not(style):not(style)":{margin:0},"& > :not(style) ~ :not(style)":{[`margin${({row:"Left","row-reverse":"Right",column:"Top","column-reverse":"Bottom"})[c?g[c]:a.direction]}`]:(0,n._W)(d,b)}}))}return(0,m.iZ)(b.breakpoints,c)};var t=c(18168),u=c(6636);let v=function(a={}){let{createStyledComponent:b=q,useThemeProps:c=r,componentName:f="MuiStack"}=a,i=b(s);return d.forwardRef(function(a,b){let j=c(a),{component:l="div",direction:m="column",spacing:n=0,divider:p,children:q,className:r,useFlexGap:s=!1,...t}=(0,k.A)(j),u=(0,h.A)({root:["root"]},a=>(0,g.Ay)(f,a),{});return(0,o.jsx)(i,{as:l,ownerState:{direction:m,spacing:n,useFlexGap:s},ref:b,className:(0,e.A)(u.root,r),...t,children:p?function(a,b){let c=d.Children.toArray(a).filter(Boolean);return c.reduce((a,e,f)=>(a.push(e),f<c.length-1&&a.push(d.cloneElement(b,{key:`separator-${f}`})),a),[])}(q,p):q})})}({createStyledComponent:(0,t.Ay)("div",{name:"MuiStack",slot:"Root",overridesResolver:(a,b)=>b.root}),useThemeProps:a=>(0,u.b)({props:a,name:"MuiStack"})})},55511:a=>{"use strict";a.exports=require("crypto")},63033:a=>{"use strict";a.exports=require("next/dist/server/app-render/work-unit-async-storage.external.js")},67317:(a,b,c)=>{Promise.resolve().then(c.bind(c,10057))},73520:(a,b,c)=>{"use strict";c.d(b,{A:()=>p});var d=c(38301),e=c(43249),f=c(2783),g=c(18168),h=c(6636),i=c(29565),j=c(33105);function k(a){return(0,j.Ay)("MuiFormGroup",a)}(0,i.A)("MuiFormGroup",["root","row","error"]);var l=c(49628),m=c(83738),n=c(21124);let o=(0,g.Ay)("div",{name:"MuiFormGroup",slot:"Root",overridesResolver:(a,b)=>{let{ownerState:c}=a;return[b.root,c.row&&b.row]}})({display:"flex",flexDirection:"column",flexWrap:"wrap",variants:[{props:{row:!0},style:{flexDirection:"row"}}]}),p=d.forwardRef(function(a,b){let c=(0,h.b)({props:a,name:"MuiFormGroup"}),{className:d,row:g=!1,...i}=c,j=(0,l.A)(),p=(0,m.A)({props:c,muiFormControl:j,states:["error"]}),q={...c,row:g,error:p.error},r=(a=>{let{classes:b,row:c,error:d}=a;return(0,f.A)({root:["root",c&&"row",d&&"error"]},k,b)})(q);return(0,n.jsx)(o,{className:(0,e.A)(r.root,d),ownerState:q,ref:b,...i})})},76052:(a,b,c)=>{"use strict";c.r(b),c.d(b,{GlobalError:()=>E.a,__next_app__:()=>K,handler:()=>M,pages:()=>J,routeModule:()=>L,tree:()=>I});var d=c(49754),e=c(9117),f=c(46595),g=c(32324),h=c(39326),i=c(38928),j=c(20175),k=c(12),l=c(54290),m=c(12696),n=c(52574),o=c(82802),p=c(77533),q=c(45229),r=c(32822),s=c(261),t=c(26453),u=c(52474),v=c(26713),w=c(51356),x=c(62685),y=c(36225),z=c(63446),A=c(2762),B=c(45742),C=c(86439),D=c(81170),E=c.n(D),F=c(62506),G=c(91203),H={};for(let a in F)0>["default","tree","pages","GlobalError","__next_app__","routeModule","handler"].indexOf(a)&&(H[a]=()=>F[a]);c.d(b,H);let I={children:["",{children:["flows",{children:["__PAGE__",{},{page:[()=>Promise.resolve().then(c.bind(c,10057)),"C:\\Users\\MarioAndreschak\\Documents\\GitHub\\FLUJO\\src\\app\\flows\\page.tsx"]}]},{}]},{layout:[()=>Promise.resolve().then(c.bind(c,51472)),"C:\\Users\\MarioAndreschak\\Documents\\GitHub\\FLUJO\\src\\app\\layout.tsx"],"global-error":[()=>Promise.resolve().then(c.t.bind(c,81170,23)),"next/dist/client/components/builtin/global-error.js"],"not-found":[()=>Promise.resolve().then(c.t.bind(c,87028,23)),"next/dist/client/components/builtin/not-found.js"],forbidden:[()=>Promise.resolve().then(c.t.bind(c,90461,23)),"next/dist/client/components/builtin/forbidden.js"],unauthorized:[()=>Promise.resolve().then(c.t.bind(c,32768,23)),"next/dist/client/components/builtin/unauthorized.js"]}]}.children,J=["C:\\Users\\MarioAndreschak\\Documents\\GitHub\\FLUJO\\src\\app\\flows\\page.tsx"],K={require:c,loadChunk:()=>Promise.resolve()},L=new d.AppPageRouteModule({definition:{kind:e.RouteKind.APP_PAGE,page:"/flows/page",pathname:"/flows",bundlePath:"",filename:"",appPaths:[]},userland:{loaderTree:I},distDir:".next",relativeProjectDir:""});async function M(a,b,d){var D;let H="/flows/page";"/index"===H&&(H="/");let N=(0,h.getRequestMeta)(a,"postponed"),O=(0,h.getRequestMeta)(a,"minimalMode"),P=await L.prepare(a,b,{srcPage:H,multiZoneDraftMode:!1});if(!P)return b.statusCode=400,b.end("Bad Request"),null==d.waitUntil||d.waitUntil.call(d,Promise.resolve()),null;let{buildId:Q,query:R,params:S,parsedUrl:T,pageIsDynamic:U,buildManifest:V,nextFontManifest:W,reactLoadableManifest:X,serverActionsManifest:Y,clientReferenceManifest:Z,subresourceIntegrityManifest:$,prerenderManifest:_,isDraftMode:aa,resolvedPathname:ab,revalidateOnlyGenerated:ac,routerServerContext:ad,nextConfig:ae,interceptionRoutePatterns:af}=P,ag=T.pathname||"/",ah=(0,s.normalizeAppPath)(H),{isOnDemandRevalidate:ai}=P,aj=L.match(ag,_),ak=!!_.routes[ab],al=!!(aj||ak||_.routes[ah]),am=a.headers["user-agent"]||"",an=(0,v.getBotType)(am),ao=(0,q.isHtmlBotRequest)(a),ap=(0,h.getRequestMeta)(a,"isPrefetchRSCRequest")??"1"===a.headers[u.NEXT_ROUTER_PREFETCH_HEADER],aq=(0,h.getRequestMeta)(a,"isRSCRequest")??(0,n.f)(a.headers[u.RSC_HEADER]),ar=(0,t.getIsPossibleServerAction)(a),as=(0,m.checkIsAppPPREnabled)(ae.experimental.ppr)&&(null==(D=_.routes[ah]??_.dynamicRoutes[ah])?void 0:D.renderingMode)==="PARTIALLY_STATIC",at=!1,au=!1,av=as?N:void 0,aw=as&&aq&&!ap,ax=(0,h.getRequestMeta)(a,"segmentPrefetchRSCRequest"),ay=!am||(0,q.shouldServeStreamingMetadata)(am,ae.htmlLimitedBots);ao&&as&&(al=!1,ay=!1);let az=!0===L.isDev||!al||"string"==typeof N||aw,aA=ao&&as,aB=null;aa||!al||az||ar||av||aw||(aB=ab);let aC=aB;!aC&&L.isDev&&(aC=ab),L.isDev||aa||!al||!aq||aw||(0,k.d)(a.headers);let aD={...F,tree:I,pages:J,GlobalError:E(),handler:M,routeModule:L,__next_app__:K};Y&&Z&&(0,p.setReferenceManifestsSingleton)({page:H,clientReferenceManifest:Z,serverActionsManifest:Y,serverModuleMap:(0,r.createServerModuleMap)({serverActionsManifest:Y})});let aE=a.method||"GET",aF=(0,g.getTracer)(),aG=aF.getActiveScopeSpan();try{let f=L.getVaryHeader(ab,af);b.setHeader("Vary",f);let k=async(c,d)=>{let e=new l.NodeNextRequest(a),f=new l.NodeNextResponse(b);return L.render(e,f,d).finally(()=>{if(!c)return;c.setAttributes({"http.status_code":b.statusCode,"next.rsc":!1});let d=aF.getRootSpanAttributes();if(!d)return;if(d.get("next.span_type")!==i.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${d.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let e=d.get("next.route");if(e){let a=`${aE} ${e}`;c.setAttributes({"next.route":e,"http.route":e,"next.span_name":a}),c.updateName(a)}else c.updateName(`${aE} ${a.url}`)})},m=async({span:e,postponed:f,fallbackRouteParams:g})=>{let i={query:R,params:S,page:ah,sharedContext:{buildId:Q},serverComponentsHmrCache:(0,h.getRequestMeta)(a,"serverComponentsHmrCache"),fallbackRouteParams:g,renderOpts:{App:()=>null,Document:()=>null,pageConfig:{},ComponentMod:aD,Component:(0,j.T)(aD),params:S,routeModule:L,page:H,postponed:f,shouldWaitOnAllReady:aA,serveStreamingMetadata:ay,supportsDynamicResponse:"string"==typeof f||az,buildManifest:V,nextFontManifest:W,reactLoadableManifest:X,subresourceIntegrityManifest:$,serverActionsManifest:Y,clientReferenceManifest:Z,setIsrStatus:null==ad?void 0:ad.setIsrStatus,dir:c(33873).join(process.cwd(),L.relativeProjectDir),isDraftMode:aa,isRevalidate:al&&!f&&!aw,botType:an,isOnDemandRevalidate:ai,isPossibleServerAction:ar,assetPrefix:ae.assetPrefix,nextConfigOutput:ae.output,crossOrigin:ae.crossOrigin,trailingSlash:ae.trailingSlash,previewProps:_.preview,deploymentId:ae.deploymentId,enableTainting:ae.experimental.taint,htmlLimitedBots:ae.htmlLimitedBots,devtoolSegmentExplorer:ae.experimental.devtoolSegmentExplorer,reactMaxHeadersLength:ae.reactMaxHeadersLength,multiZoneDraftMode:!1,incrementalCache:(0,h.getRequestMeta)(a,"incrementalCache"),cacheLifeProfiles:ae.experimental.cacheLife,basePath:ae.basePath,serverActions:ae.experimental.serverActions,...at?{nextExport:!0,supportsDynamicResponse:!1,isStaticGeneration:!0,isRevalidate:!0,isDebugDynamicAccesses:at}:{},experimental:{isRoutePPREnabled:as,expireTime:ae.expireTime,staleTimes:ae.experimental.staleTimes,cacheComponents:!!ae.experimental.cacheComponents,clientSegmentCache:!!ae.experimental.clientSegmentCache,clientParamParsing:!!ae.experimental.clientParamParsing,dynamicOnHover:!!ae.experimental.dynamicOnHover,inlineCss:!!ae.experimental.inlineCss,authInterrupts:!!ae.experimental.authInterrupts,clientTraceMetadata:ae.experimental.clientTraceMetadata||[]},waitUntil:d.waitUntil,onClose:a=>{b.on("close",a)},onAfterTaskError:()=>{},onInstrumentationRequestError:(b,c,d)=>L.onRequestError(a,b,d,ad),err:(0,h.getRequestMeta)(a,"invokeError"),dev:L.isDev}},l=await k(e,i),{metadata:m}=l,{cacheControl:n,headers:o={},fetchTags:p}=m;if(p&&(o[z.NEXT_CACHE_TAGS_HEADER]=p),a.fetchMetrics=m.fetchMetrics,al&&(null==n?void 0:n.revalidate)===0&&!L.isDev&&!as){let a=m.staticBailoutInfo,b=Object.defineProperty(Error(`Page changed from static to dynamic at runtime ${ab}${(null==a?void 0:a.description)?`, reason: ${a.description}`:""}
2
- see more here https://nextjs.org/docs/messages/app-static-to-dynamic-error`),"__NEXT_ERROR_CODE",{value:"E132",enumerable:!1,configurable:!0});if(null==a?void 0:a.stack){let c=a.stack;b.stack=b.message+c.substring(c.indexOf("\n"))}throw b}return{value:{kind:w.CachedRouteKind.APP_PAGE,html:l,headers:o,rscData:m.flightData,postponed:m.postponed,status:m.statusCode,segmentData:m.segmentData},cacheControl:n}},n=async({hasResolved:c,previousCacheEntry:f,isRevalidating:g,span:i})=>{let j,k=!1===L.isDev,l=c||b.writableEnded;if(ai&&ac&&!f&&!O)return(null==ad?void 0:ad.render404)?await ad.render404(a,b):(b.statusCode=404,b.end("This page could not be found")),null;if(aj&&(j=(0,x.parseFallbackField)(aj.fallback)),j===x.FallbackMode.PRERENDER&&(0,v.isBot)(am)&&(!as||ao)&&(j=x.FallbackMode.BLOCKING_STATIC_RENDER),(null==f?void 0:f.isStale)===-1&&(ai=!0),ai&&(j!==x.FallbackMode.NOT_FOUND||f)&&(j=x.FallbackMode.BLOCKING_STATIC_RENDER),!O&&j!==x.FallbackMode.BLOCKING_STATIC_RENDER&&aC&&!l&&!aa&&U&&(k||!ak)){let b;if((k||aj)&&j===x.FallbackMode.NOT_FOUND)throw new C.NoFallbackError;if(as&&!aq){let c="string"==typeof(null==aj?void 0:aj.fallback)?aj.fallback:k?ah:null;if(b=await L.handleResponse({cacheKey:c,req:a,nextConfig:ae,routeKind:e.RouteKind.APP_PAGE,isFallback:!0,prerenderManifest:_,isRoutePPREnabled:as,responseGenerator:async()=>m({span:i,postponed:void 0,fallbackRouteParams:k||au?(0,o.u)(ah):null}),waitUntil:d.waitUntil}),null===b)return null;if(b)return delete b.cacheControl,b}}let n=ai||g||!av?void 0:av;if(at&&void 0!==n)return{cacheControl:{revalidate:1,expire:void 0},value:{kind:w.CachedRouteKind.PAGES,html:y.default.EMPTY,pageData:{},headers:void 0,status:void 0}};let p=U&&as&&((0,h.getRequestMeta)(a,"renderFallbackShell")||au)?(0,o.u)(ag):null;return m({span:i,postponed:n,fallbackRouteParams:p})},p=async c=>{var f,g,i,j,k;let l,o=await L.handleResponse({cacheKey:aB,responseGenerator:a=>n({span:c,...a}),routeKind:e.RouteKind.APP_PAGE,isOnDemandRevalidate:ai,isRoutePPREnabled:as,req:a,nextConfig:ae,prerenderManifest:_,waitUntil:d.waitUntil});if(aa&&b.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate"),L.isDev&&b.setHeader("Cache-Control","no-store, must-revalidate"),!o){if(aB)throw Object.defineProperty(Error("invariant: cache entry required but not generated"),"__NEXT_ERROR_CODE",{value:"E62",enumerable:!1,configurable:!0});return null}if((null==(f=o.value)?void 0:f.kind)!==w.CachedRouteKind.APP_PAGE)throw Object.defineProperty(Error(`Invariant app-page handler received invalid cache entry ${null==(i=o.value)?void 0:i.kind}`),"__NEXT_ERROR_CODE",{value:"E707",enumerable:!1,configurable:!0});let p="string"==typeof o.value.postponed;al&&!aw&&(!p||ap)&&(O||b.setHeader("x-nextjs-cache",ai?"REVALIDATED":o.isMiss?"MISS":o.isStale?"STALE":"HIT"),b.setHeader(u.NEXT_IS_PRERENDER_HEADER,"1"));let{value:q}=o;if(av)l={revalidate:0,expire:void 0};else if(O&&aq&&!ap&&as)l={revalidate:0,expire:void 0};else if(!L.isDev)if(aa)l={revalidate:0,expire:void 0};else if(al){if(o.cacheControl)if("number"==typeof o.cacheControl.revalidate){if(o.cacheControl.revalidate<1)throw Object.defineProperty(Error(`Invalid revalidate configuration provided: ${o.cacheControl.revalidate} < 1`),"__NEXT_ERROR_CODE",{value:"E22",enumerable:!1,configurable:!0});l={revalidate:o.cacheControl.revalidate,expire:(null==(j=o.cacheControl)?void 0:j.expire)??ae.expireTime}}else l={revalidate:z.CACHE_ONE_YEAR,expire:void 0}}else b.getHeader("Cache-Control")||(l={revalidate:0,expire:void 0});if(o.cacheControl=l,"string"==typeof ax&&(null==q?void 0:q.kind)===w.CachedRouteKind.APP_PAGE&&q.segmentData){b.setHeader(u.NEXT_DID_POSTPONE_HEADER,"2");let c=null==(k=q.headers)?void 0:k[z.NEXT_CACHE_TAGS_HEADER];O&&al&&c&&"string"==typeof c&&b.setHeader(z.NEXT_CACHE_TAGS_HEADER,c);let d=q.segmentData.get(ax);return void 0!==d?(0,B.sendRenderResult)({req:a,res:b,generateEtags:ae.generateEtags,poweredByHeader:ae.poweredByHeader,result:y.default.fromStatic(d,u.RSC_CONTENT_TYPE_HEADER),cacheControl:o.cacheControl}):(b.statusCode=204,(0,B.sendRenderResult)({req:a,res:b,generateEtags:ae.generateEtags,poweredByHeader:ae.poweredByHeader,result:y.default.EMPTY,cacheControl:o.cacheControl}))}let r=(0,h.getRequestMeta)(a,"onCacheEntry");if(r&&await r({...o,value:{...o.value,kind:"PAGE"}},{url:(0,h.getRequestMeta)(a,"initURL")}))return null;if(p&&av)throw Object.defineProperty(Error("Invariant: postponed state should not be present on a resume request"),"__NEXT_ERROR_CODE",{value:"E396",enumerable:!1,configurable:!0});if(q.headers){let a={...q.headers};for(let[c,d]of(O&&al||delete a[z.NEXT_CACHE_TAGS_HEADER],Object.entries(a)))if(void 0!==d)if(Array.isArray(d))for(let a of d)b.appendHeader(c,a);else"number"==typeof d&&(d=d.toString()),b.appendHeader(c,d)}let s=null==(g=q.headers)?void 0:g[z.NEXT_CACHE_TAGS_HEADER];if(O&&al&&s&&"string"==typeof s&&b.setHeader(z.NEXT_CACHE_TAGS_HEADER,s),!q.status||aq&&as||(b.statusCode=q.status),!O&&q.status&&G.RedirectStatusCode[q.status]&&aq&&(b.statusCode=200),p&&b.setHeader(u.NEXT_DID_POSTPONE_HEADER,"1"),aq&&!aa){if(void 0===q.rscData){if(q.postponed)throw Object.defineProperty(Error("Invariant: Expected postponed to be undefined"),"__NEXT_ERROR_CODE",{value:"E372",enumerable:!1,configurable:!0});return(0,B.sendRenderResult)({req:a,res:b,generateEtags:ae.generateEtags,poweredByHeader:ae.poweredByHeader,result:q.html,cacheControl:aw?{revalidate:0,expire:void 0}:o.cacheControl})}return(0,B.sendRenderResult)({req:a,res:b,generateEtags:ae.generateEtags,poweredByHeader:ae.poweredByHeader,result:y.default.fromStatic(q.rscData,u.RSC_CONTENT_TYPE_HEADER),cacheControl:o.cacheControl})}let t=q.html;if(!p||O||aq)return(0,B.sendRenderResult)({req:a,res:b,generateEtags:ae.generateEtags,poweredByHeader:ae.poweredByHeader,result:t,cacheControl:o.cacheControl});if(at)return t.push(new ReadableStream({start(a){a.enqueue(A.ENCODED_TAGS.CLOSED.BODY_AND_HTML),a.close()}})),(0,B.sendRenderResult)({req:a,res:b,generateEtags:ae.generateEtags,poweredByHeader:ae.poweredByHeader,result:t,cacheControl:{revalidate:0,expire:void 0}});let v=new TransformStream;return t.push(v.readable),m({span:c,postponed:q.postponed,fallbackRouteParams:null}).then(async a=>{var b,c;if(!a)throw Object.defineProperty(Error("Invariant: expected a result to be returned"),"__NEXT_ERROR_CODE",{value:"E463",enumerable:!1,configurable:!0});if((null==(b=a.value)?void 0:b.kind)!==w.CachedRouteKind.APP_PAGE)throw Object.defineProperty(Error(`Invariant: expected a page response, got ${null==(c=a.value)?void 0:c.kind}`),"__NEXT_ERROR_CODE",{value:"E305",enumerable:!1,configurable:!0});await a.value.html.pipeTo(v.writable)}).catch(a=>{v.writable.abort(a).catch(a=>{console.error("couldn't abort transformer",a)})}),(0,B.sendRenderResult)({req:a,res:b,generateEtags:ae.generateEtags,poweredByHeader:ae.poweredByHeader,result:t,cacheControl:{revalidate:0,expire:void 0}})};if(!aG)return await aF.withPropagatedContext(a.headers,()=>aF.trace(i.BaseServerSpan.handleRequest,{spanName:`${aE} ${a.url}`,kind:g.SpanKind.SERVER,attributes:{"http.method":aE,"http.target":a.url}},p));await p(aG)}catch(b){throw b instanceof C.NoFallbackError||await L.onRequestError(a,b,{routerKind:"App Router",routePath:H,routeType:"render",revalidateReason:(0,f.c)({isRevalidate:al,isOnDemandRevalidate:ai})},ad),b}}},78509:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>c5});var d=c(21124),e=c(38301),f=c.n(e),g=c(60839),h=c(81637),i=c(79515),j=c(20830),k=c(49565),l=c(44079),m=c(43312),n=c(99561),o=c(88745),p=c(40512),q=c(83899),r=c(52327),s=c(7503),t=c(37674),u=c(19925),v=c(27080);let w=(0,v.A)((0,d.jsx)("path",{d:"M20 11H7.83l5.59-5.59L12 4l-8 8 8 8 1.41-1.41L7.83 13H20z"}),"ArrowBack");var x=c(47902),y=c(18168),z=c(54573),A=c(91059),B=c(19815),C=c(95791),D=c(2117),E=c(63281),F=c(28055),G=c(46973);G.TG.ArrowClosed;let H={type:"mcpEdge",animated:!1,style:{stroke:"#1976d2",strokeWidth:2},markerEnd:{type:G.TG.ArrowClosed,width:20,height:20,color:"#1976d2"},markerStart:{type:G.TG.ArrowClosed,width:20,height:20,color:"#1976d2"}};function I(a){return!!a&&a.includes("mcp")}function J(a,b,c,d){if("start"===c)return"Start nodes cannot have incoming connections";if("finish"===a)return"Finish nodes cannot have outgoing connections";if("mcp"===a||"mcp"===c||I(b)||I(d)){if(("mcp"!==a||"process"!==c)&&("process"!==a||"mcp"!==c))return"MCP connections must link an MCP node to a Process node via MCP handles";if("process"===a&&!I(b))return"Connect MCP nodes from the Process node's left/right MCP handles"}return null}function K(a,b,c){return b.filter(b=>b.data?.edgeType!=="mcp"&&(b.source===a?b.target!==c:!!(b.target===a&&b.data?.bidirectional)&&b.source!==c))}function L(a,b,c=[]){if(!a.source||!a.target||!a.sourceHandle||!a.targetHandle)return console.error("Invalid connection: Missing source, target, or handles",a),!1;let d=b.find(b=>b.id===a.source),e=b.find(b=>b.id===a.target);if(!d||!e)return console.error("Invalid connection: Source or target node not found",a),!1;let f=J(d.type,a.sourceHandle,e.type,a.targetHandle);return f?(console.error(`Invalid connection: ${f}`),!1):"subflow"!==d.type||!(K(d.id,c,a.target).length>0)||(console.error("Invalid connection: Subflow nodes can only have one outgoing connection"),!1)}function M(a,b){let c=b.find(b=>b.id===a.source),d=b.find(b=>b.id===a.target),e=a.sourceHandle,f=a.targetHandle,g=c?.type==="mcp"||d?.type==="mcp"||I(e)||I(f),h=`${a.source}:${e}->${a.target}:${f}`;return g?{id:h,...a,type:"mcpEdge",data:{edgeType:"mcp"},animated:!1,markerEnd:H.markerEnd,markerStart:H.markerStart,style:H.style}:{id:h,...a,type:"custom",data:{edgeType:"standard"},animated:!0}}function N(a,b,c=[]){let d=b.find(b=>b.id===a.source),e=b.find(b=>b.id===a.target);return!!d&&!!e&&("subflow"!==e.type||!(K(e.id,c,a.source).length>0))&&null===J(e.type,null,d.type,null)}function O(a,b){let c=a=>a.data?.edgeType==="mcp";return b.filter(b=>b.id===a.id||(c(a)?c(b)&&(b.source===a.source&&b.target===a.target||b.source===a.target&&b.target===a.source):!c(b)&&b.source===a.source&&b.target===a.target)).map(a=>a.id)}var P=c(6537),Q=c(8070),R=c(94367),S=c(50553),T=c(84233),U=c(7118),V=c(91034),W=c(38941),X=c(95345),Y=c(12033);let Z=({open:a,position:b,onClose:c,onDelete:e,onEditProperties:f,onCopy:g,onPaste:h,canPaste:i,canCopy:j,nodeId:k,selection:l,edgeId:m})=>{let n=[];return k&&!l&&n.push((0,d.jsxs)(R.A,{onClick:()=>{f&&f(),c()},children:[(0,d.jsx)(S.A,{children:(0,d.jsx)(Y.A,{fontSize:"small"})}),(0,d.jsx)(T.A,{children:"Edit Properties"})]},"edit")),g&&(k||l)&&n.push((0,d.jsxs)(R.A,{onClick:()=>{g&&g(),c()},disabled:!j,children:[(0,d.jsx)(S.A,{children:(0,d.jsx)(W.A,{fontSize:"small"})}),(0,d.jsx)(T.A,{children:"Copy"})]},"copy")),h&&n.push((0,d.jsxs)(R.A,{onClick:()=>{h&&h(),c()},disabled:!i,children:[(0,d.jsx)(S.A,{children:(0,d.jsx)(X.A,{fontSize:"small"})}),(0,d.jsx)(T.A,{children:"Paste"})]},"paste")),(k||m||l)&&n.push((0,d.jsx)(A.A,{},"delete-divider"),(0,d.jsxs)(R.A,{onClick:()=>{e(),c()},sx:{color:"error.main"},children:[(0,d.jsx)(S.A,{sx:{color:"error.main"},children:(0,d.jsx)(V.A,{fontSize:"small"})}),(0,d.jsx)(T.A,{children:"Delete"})]},"delete")),(0,d.jsx)(U.A,{open:a,onClose:c,anchorReference:"anchorPosition",anchorPosition:null!==b.y&&null!==b.x?{top:b.y,left:b.x}:void 0,children:n})};var $=c(90837),_=c(97004);function aa(a,b){return b.find(b=>b.id===a)}let ab=(0,B.h)("components/flow/FlowBuilder/Canvas/hooks/useCanvasEvents.ts"),ac=(0,v.A)([(0,d.jsx)("path",{d:"M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14"},"0"),(0,d.jsx)("path",{d:"M12 10h-2v2H9v-2H7V9h2V7h1v2h2z"},"1")],"ZoomIn"),ad=(0,v.A)((0,d.jsx)("path",{d:"M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14M7 9h5v1H7z"}),"ZoomOut"),ae=(0,v.A)((0,d.jsx)("path",{d:"M17 4h3c1.1 0 2 .9 2 2v2h-2V6h-3zM4 8V6h3V4H4c-1.1 0-2 .9-2 2v2zm16 8v2h-3v2h3c1.1 0 2-.9 2-2v-2zM7 18H4v-2H2v2c0 1.1.9 2 2 2h3zM18 8H6v8h12z"}),"FitScreen"),af=(0,y.Ay)(j.A)(({theme:a})=>({minWidth:"36px",padding:"6px",margin:"0 4px",backgroundColor:"dark"===a.palette.mode?"rgba(255, 255, 255, 0.05)":"rgba(0, 0, 0, 0.02)","&:hover":{backgroundColor:"dark"===a.palette.mode?"rgba(255, 255, 255, 0.1)":"rgba(0, 0, 0, 0.05)"}})),ag=()=>{let{zoomIn:a,zoomOut:b,fitView:c}=(0,C.VH)();return(0,d.jsx)(C.Zk,{position:"top-right",style:{margin:"10px"},children:(0,d.jsxs)("div",{style:{display:"flex",gap:"5px"},children:[(0,d.jsx)(m.A,{title:"Zoom In",children:(0,d.jsx)(af,{variant:"outlined",size:"small",onClick:()=>a(),children:(0,d.jsx)(ac,{fontSize:"small"})})}),(0,d.jsx)(m.A,{title:"Zoom Out",children:(0,d.jsx)(af,{variant:"outlined",size:"small",onClick:()=>b(),children:(0,d.jsx)(ad,{fontSize:"small"})})}),(0,d.jsx)(m.A,{title:"Fit View",children:(0,d.jsx)(af,{variant:"outlined",size:"small",onClick:()=>c(),children:(0,d.jsx)(ae,{fontSize:"small"})})})]})})},ah=({showMiniMap:a=!0,showControls:b=!0,showBackground:c=!0})=>{let e=(0,g.A)(),f="dark"===e.palette.mode;return(0,d.jsxs)(d.Fragment,{children:[c&&(0,d.jsx)(C.VS,{color:f?e.palette.text.disabled:e.palette.divider,gap:20,size:1}),b&&(0,d.jsx)(C.H2,{}),a&&(0,d.jsx)(C.of,{nodeColor:f?e.palette.primary.dark:e.palette.primary.light,maskColor:f?"rgba(0, 0, 0, 0.4)":"rgba(255, 255, 255, 0.6)"})]})},ai=(0,B.h)("components/flow/FlowBuilder/Canvas/Canvas.tsx"),aj="flujo:flowClipboard",ak=null;function al(a){ak=a;try{localStorage.setItem(aj,JSON.stringify(a))}catch(a){ai.warn("Could not persist flow clipboard to localStorage",a)}}let am={start:Q.vm,process:Q.Uw,finish:Q.IK,mcp:Q.v2,subflow:Q.lA},an={custom:$.jY,mcpEdge:$.oY},ao=({open:a,position:b,onClose:c,onSelectNodeType:e,sourceNodeType:f,sourceHandleId:j})=>{let k=(0,g.A)(),l=function(a,b){let c=["process","finish","mcp","subflow"];return a&&b?c.filter(c=>null===J(a,b,c,`${c}-top`)):c}(f,j);ai.debug(`NodeSelectionModal: Source node type: ${f}, Source handle ID: ${j}`),ai.debug(`NodeSelectionModal: Valid node types: ${l.join(", ")}`);let m=[{type:"process",label:"Process Node",description:"Let a LLM do your work"},{type:"finish",label:"Finish Node",description:"End your flow here"},{type:"mcp",label:"MCP Node",description:"Add functionality"},{type:"subflow",label:"Subflow Node",description:"Run another flow"}].filter(a=>l.includes(a.type));return b?(0,d.jsx)(P.A,{open:a,onClose:c,"aria-labelledby":"node-selection-modal",children:(0,d.jsxs)(h.default,{sx:{position:"absolute",top:"50%",left:"50%",transform:"translate(-50%, -50%)",width:300,bgcolor:"background.paper",borderRadius:2,boxShadow:24,p:4},children:[(0,d.jsx)(i.default,{variant:"h6",component:"h2",gutterBottom:!0,children:"Select Node Type"}),(0,d.jsx)(h.default,{display:"flex",flexDirection:"column",gap:2,children:m.map(a=>(0,d.jsxs)(h.default,{sx:{padding:2,borderRadius:1,border:`2px solid ${"process"===a.type?k.palette.secondary.main:"finish"===a.type?k.palette.success.main:"subflow"===a.type?k.palette.warning.main:k.palette.info.main}`,cursor:"pointer","&:hover":{boxShadow:3}},onClick:()=>e(a.type,b),children:[(0,d.jsxs)(h.default,{display:"flex",alignItems:"center",gap:1,mb:1,children:[(a=>{switch(a){case"process":default:return(0,d.jsx)("div",{style:{width:24,height:24,backgroundColor:k.palette.secondary.main,borderRadius:"50%"}});case"finish":return(0,d.jsx)("div",{style:{width:24,height:24,backgroundColor:k.palette.success.main,borderRadius:"50%"}});case"mcp":return(0,d.jsx)("div",{style:{width:24,height:24,backgroundColor:k.palette.info.main,borderRadius:"50%"}});case"subflow":return(0,d.jsx)("div",{style:{width:24,height:24,backgroundColor:k.palette.warning.main,borderRadius:"50%"}})}})(a.type),(0,d.jsx)(i.default,{variant:"subtitle1",fontWeight:"bold",children:a.label})]}),(0,d.jsx)(i.default,{variant:"body2",color:"text.secondary",children:a.description})]},a.type))})]})}):null},ap=(0,y.Ay)("div")(({theme:a})=>({width:"100%",height:"80vh",border:`1px solid ${a.palette.divider}`,borderRadius:"4px",background:a.palette.background.paper,position:"relative"})),aq=(0,e.forwardRef)((a,b)=>{let c=(0,g.A)(),{nodes:f,edges:h,onNodesChange:i,onEdgesChange:j,onDrop:k,onDragOver:l,onInit:m,reactFlowWrapper:n,onEditNode:o}=a,{contextMenu:p,selectedElements:q,closeContextMenu:r,handleDelete:s,onNodeContextMenu:t,onEdgeContextMenu:u,onPaneContextMenu:v,onSelectionContextMenu:w}=function(a){let{deleteElements:b}=(0,C.VH)(),[c,d]=(0,e.useState)({open:!1,position:{x:0,y:0}}),[f,g]=(0,e.useState)({nodes:[],edges:[]});(0,C.p4)({onChange:({nodes:a,edges:b})=>{let c=a.map(a=>a.id),d=b.map(a=>a.id);ab.debug(`Selection changed: ${c.length} nodes, ${d.length} edges selected`),g({nodes:c,edges:d})}});let h=(0,e.useCallback)((a,b,c,e)=>{a.preventDefault(),b?ab.debug(`Context menu opened for node: ${b}`):c?ab.debug(`Context menu opened for edge: ${c}`):e?ab.debug("Context menu opened for the current selection"):ab.debug(`Context menu opened on canvas at (${a.clientX}, ${a.clientY})`),d({open:!0,position:{x:a.clientX,y:a.clientY},nodeId:b,edgeId:c,selection:e})},[]),i=(0,e.useCallback)(()=>{ab.debug("Context menu closed"),d(a=>({...a,open:!1}))},[]),j=(0,e.useCallback)(()=>{if(c.selection)ab.debug("handleDelete: Deleting the current selection"),b({nodes:f.nodes.map(a=>({id:a})),edges:f.edges.map(a=>({id:a}))});else if(c.nodeId){if(ab.debug(`handleDelete: Attempting to delete node ${c.nodeId}`),!function(a,b){let c=aa(a,b);return!!c&&"start"!==c.type}(c.nodeId,a)){ab.warn(`Cannot delete Start node: ${c.nodeId}`),alert("Start nodes cannot be deleted");return}b({nodes:[{id:c.nodeId}]})}else c.edgeId&&(ab.debug(`handleDelete: Deleting edge ${c.edgeId}`),b({edges:[{id:c.edgeId}]}))},[c,b,a,f]),k=(0,e.useCallback)((a,b)=>{h(a,b.id)},[h]),l=(0,e.useCallback)((a,b)=>{h(a,void 0,b.id)},[h]),m=(0,e.useCallback)(a=>{h(a)},[h]),n=(0,e.useCallback)(a=>{h(a,void 0,void 0,!0)},[h]);return{contextMenu:c,selectedElements:f,onContextMenu:h,closeContextMenu:i,handleDelete:j,onNodeContextMenu:k,onEdgeContextMenu:l,onPaneContextMenu:m,onSelectionContextMenu:n}}(f),{deleteElements:x}=(0,C.VH)(),y=(0,C.PI)(),z=(0,e.useRef)(null),[A,B]=(0,e.useState)(null),[F,H]=(0,e.useState)({open:!1,position:null}),J=(0,e.useCallback)(a=>[...f.filter(a=>a.selected).map(a=>({type:"select",id:a.id,selected:!1})),{type:"add",item:{...a,selected:!0}}],[f]);(0,e.useEffect)(()=>{if(!o)return;let a=a=>{if(a.detail&&a.detail.nodeId){let b=aa(a.detail.nodeId,f);b&&o(b)}};return document.addEventListener("editNode",a),()=>{document.removeEventListener("editNode",a)}},[f,o]);let K=(0,e.useCallback)(a=>{if(!a.sourceHandle||!a.targetHandle)return void ai.error("Invalid connection: Missing source or target handle",a);let b=y.getState().connection.fromHandle?.type==="target";if(!L(a,f,h))return;let d=M(a,f);if(d.data?.edgeType==="standard"){let d=a=>a.data?.edgeType!=="mcp",e=a=>!!a.data?.bidirectional,g=h.find(b=>d(b)&&b.source===a.source&&b.target===a.target),i=h.find(b=>d(b)&&b.source===a.target&&b.target===a.source),k=a=>{ai.info(`Merging reverse connection into bidirectional edge ${a.id}`),j([{type:"replace",id:a.id,item:{...a,data:{...a.data,bidirectional:!0},markerStart:{type:G.TG.ArrowClosed,width:20,height:20,color:c.palette.text.secondary}}}])};if(b){let a=g??i;return a?void(!e(a)&&N(a,f,h)&&k(a)):void ai.info("Connection drawn from a top handle is only allowed to convert an existing edge to bidirectional")}if(g&&e(g))return;if(i){!e(i)&&N(i,f,h)&&k(i);return}}j([...O(d,h).map(a=>({type:"remove",id:a})),{type:"add",item:d}])},[f,h,j,y,c.palette.text.secondary]);(0,e.useEffect)(()=>{let a=a=>{let{edgeId:b,waypoints:c}=a.detail,d=h.find(a=>a.id===b);if(!d)return;let{waypoint:e,...f}=d.data??{};j([{type:"replace",id:b,item:{...d,data:{...f,waypoints:c??void 0}}}])};return document.addEventListener(_.R,a),()=>document.removeEventListener(_.R,a)},[h,j]);let P=(0,e.useCallback)(async({nodes:a,edges:b})=>{let c=a.filter(a=>"start"!==a.type),d=new Set(c.map(a=>a.id)),e=new Set(a.map(a=>a.id)),f=b.filter(a=>!!(a.selected||d.has(a.source)||d.has(a.target))||!(e.has(a.source)||e.has(a.target)));return(0!==c.length||0!==f.length)&&{nodes:c,edges:f}},[]),Q=(0,e.useCallback)(a=>{B(a),m&&m(a)},[m]);(0,e.useEffect)(()=>{let a=a=>{if(!a.detail||!A)return;let{nodeType:b,position:c}=a.detail,d=E.g.createNode(b,c);i(J(d)),o&&o(d)};return document.addEventListener("addNodeFromPalette",a),()=>{document.removeEventListener("addNodeFromPalette",a)}},[A,i,J,o]);let R=(0,e.useCallback)(()=>{if(p.nodeId&&o){let a=aa(p.nodeId,f);a&&o(a)}},[p.nodeId,f,o]),S=(0,e.useCallback)((a,b)=>{a.preventDefault(),o&&o(b)},[o]),T=(0,e.useCallback)((a,b)=>{let{fromNode:c,fromHandle:d}=b;if(!c||!d?.id||!A)return void ai.debug("onConnectEnd: No valid connection start data");if(ai.debug(`onConnectEnd: Connection ended from node ${c.id}, handle ${d.id}`),"target"===d.type&&!I(d.id))return void ai.debug("onConnectEnd: Drag from a target handle cannot create a new node");if("subflow"===c.type&&"source"===d.type&&h.some(a=>{let b=a.data;return b?.edgeType!=="mcp"&&(a.source===c.id||a.target===c.id&&!!b?.bidirectional)}))return void ai.debug("onConnectEnd: Subflow already has an outgoing connection; not offering a new node");if(!a.target.classList.contains("react-flow__pane"))return;let e=a instanceof MouseEvent?a:a.changedTouches[0],f=A.screenToFlowPosition({x:e.clientX,y:e.clientY});ai.debug(`onConnectEnd: Connection dropped on pane at position (${f.x}, ${f.y})`),H({open:!0,position:f,sourceNodeId:c.id,sourceNodeType:c.type,sourceHandleId:d.id})},[A,h]),U=(0,e.useCallback)((a,b)=>{ai.debug(`handleNodeTypeSelection: Selected node type ${a} at position (${b.x}, ${b.y})`);let c=E.g.createNode(a,b);i(J(c));let{sourceNodeId:d,sourceHandleId:e}=F,g=d?aa(d,f):void 0;if(g&&e){let b=`${a}-top`,d={source:g.id,sourceHandle:e,target:c.id,targetHandle:b};if(ai.debug(`handleNodeTypeSelection: Creating connection from ${d.source} to ${d.target}`),L(d,[...f,c],h)){let a=M(d,[...f,c]);j([...O(a,h).map(a=>({type:"remove",id:a})),{type:"add",item:a}]),ai.debug(`handleNodeTypeSelection: Edge created with id ${a.id}`)}}H({open:!1,position:null}),o&&o(c)},[F,f,h,J,i,j,o]),V=(0,e.useCallback)(()=>{ai.debug("handleCloseNodeSelectionModal: Closing node selection modal"),H({open:!1,position:null})},[]),W=(0,e.useCallback)(()=>{let a=new Set(q.nodes),b=f.filter(b=>a.has(b.id)&&"start"!==b.type);if(0===b.length)return!1;let c=new Set(b.map(a=>a.id)),d=h.filter(a=>c.has(a.source)&&c.has(a.target));return al({nodes:JSON.parse(JSON.stringify(b)),edges:JSON.parse(JSON.stringify(d))}),ai.debug(`Copied ${b.length} node(s) and ${d.length} edge(s)`),!0},[q,f,h]),X=(0,e.useCallback)(()=>{let a=ak;if(!a)try{let b=localStorage.getItem(aj);b&&(a=JSON.parse(b))}catch(a){ai.warn("Could not read flow clipboard from localStorage",a)}if(!a||!a.nodes||0===a.nodes.length)return void ai.debug("Paste requested but clipboard is empty");let b=new Map;a.nodes.forEach(a=>b.set(a.id,(0,D.A)()));let c=a.nodes.map(a=>({...a,id:b.get(a.id),position:{x:(a.position?.x??0)+40,y:(a.position?.y??0)+40},selected:!0,data:{...a.data}})),d=(a.edges||[]).filter(a=>b.has(a.source)&&b.has(a.target)).map(a=>({...a,id:(0,D.A)(),source:b.get(a.source),target:b.get(a.target),selected:!1}));i([...f.filter(a=>a.selected).map(a=>({type:"select",id:a.id,selected:!1})),...c.map(a=>({type:"add",item:a}))]),d.length>0&&j(d.map(a=>({type:"add",item:a}))),ai.info(`Pasted ${c.length} node(s) and ${d.length} edge(s)`)},[f,i,j]),Y=(0,e.useCallback)(a=>{let b=a.ctrlKey||a.metaKey,c=a.key.toLowerCase();if(b&&"c"===c){W()&&a.preventDefault();return}if(b&&"x"===c){W()&&(a.preventDefault(),x({nodes:q.nodes.map(a=>({id:a})),edges:q.edges.map(a=>({id:a}))}));return}if(b&&"v"===c){a.preventDefault(),X();return}},[W,X,x,q]),$=(0,e.useCallback)(()=>{if(p.nodeId&&!q.nodes.includes(p.nodeId)){let a=f.find(a=>a.id===p.nodeId);a&&"start"!==a.type&&(al({nodes:JSON.parse(JSON.stringify([a])),edges:[]}),ai.debug("Copied right-clicked node to clipboard"));return}W()},[p.nodeId,q,f,W]),ac=(0,e.useMemo)(()=>{if(ak)return!0;try{return!!localStorage.getItem(aj)}catch{return!1}},[p.open]),ad=(0,e.useMemo)(()=>{if(p.selection){let a=new Set(q.nodes);return f.some(b=>a.has(b.id)&&"start"!==b.type)}if(p.nodeId){let a=f.find(a=>a.id===p.nodeId);return!!a&&"start"!==a.type}return!1},[p.selection,p.nodeId,q,f]);return(0,d.jsxs)(ap,{ref:a=>{b&&("function"==typeof b?b(a):b.current=a),n&&(n.current=a),z.current=a},children:[(0,d.jsxs)(C.Gc,{nodes:f,edges:h,nodeTypes:am,edgeTypes:an,defaultEdgeOptions:(0,e.useMemo)(()=>({type:"custom",animated:!0,style:{stroke:c.palette.text.secondary,strokeWidth:2},markerEnd:{type:G.TG.ArrowClosed,width:20,height:20,color:c.palette.text.secondary}}),[c.palette.text.secondary]),connectionLineType:G.Do.SmoothStep,onNodesChange:i,onEdgesChange:j,onConnect:K,onBeforeDelete:P,deleteKeyCode:["Backspace","Delete"],onDrop:k,onDragOver:l,onInit:Q,onNodeContextMenu:t,onEdgeContextMenu:u,onPaneContextMenu:v,onSelectionContextMenu:w,onKeyDown:Y,onNodeDoubleClick:S,onConnectEnd:T,tabIndex:0,fitView:!0,attributionPosition:"bottom-right",minZoom:.1,maxZoom:2,snapToGrid:!0,snapGrid:[15,15],connectOnClick:!1,children:[(0,d.jsx)(ag,{}),(0,d.jsx)(ah,{})]}),(0,d.jsx)(Z,{open:p.open,position:p.position,onClose:r,onDelete:s,onEditProperties:R,onCopy:$,onPaste:X,canPaste:ac,canCopy:ad,nodeId:p.nodeId,selection:p.selection,edgeId:p.edgeId}),(0,d.jsx)(ao,{open:F.open,position:F.position,onClose:V,onSelectNodeType:U,sourceNodeType:F.sourceNodeType,sourceHandleId:F.sourceHandleId})]})});aq.displayName="Canvas";var ar=c(98540),as=c(83144),at=c(88970);let au=(0,B.h)("components/flow/FlowBuilder/NodePalette.tsx"),av="NodePalette",aw=(0,y.Ay)(z.A)(({theme:a})=>({padding:a.spacing(2),width:"200px",height:"80vh",display:"flex",flexDirection:"column",gap:a.spacing(2)})),ax=(0,y.Ay)(z.A,{shouldForwardProp:a=>"nodeType"!==a})(({theme:a,nodeType:b})=>({padding:a.spacing(1.5),minWidth:"180px",borderRadius:"8px",backgroundColor:a.palette.background.paper,border:`2px solid ${"process"===b?a.palette.secondary.main:"finish"===b?a.palette.success.main:"subflow"===b?a.palette.warning.main:a.palette.info.main}`,boxShadow:a.shadows[2],transition:"all 0.2s ease",cursor:"grab","&:hover":{boxShadow:`0 0 0 1px ${"process"===b?a.palette.secondary.main:"finish"===b?a.palette.success.main:"subflow"===b?a.palette.warning.main:a.palette.info.main}, 0 3px 10px rgba(0,0,0,0.1)`},"&:active":{cursor:"grabbing"}})),ay=(0,y.Ay)(h.default,{shouldForwardProp:a=>"nodeType"!==a})(({theme:a,nodeType:b})=>({display:"flex",alignItems:"center",justifyContent:"space-between",borderBottom:`1px solid ${"process"===b?a.palette.secondary.light:"finish"===b?a.palette.success.light:"subflow"===b?a.palette.warning.light:a.palette.info.light}`,marginBottom:a.spacing(1),paddingBottom:a.spacing(.5)})),az=(0,y.Ay)(h.default)({display:"flex",alignItems:"center",gap:"8px"}),aA=[{type:"process",label:"Process Node",description:"Let a LLM do your work"},{type:"finish",label:"Finish Node",description:"End your flow here"},{type:"mcp",label:"MCP Node",description:"Add functionality"},{type:"subflow",label:"Subflow Node",description:"Run another flow as a step"}],aB=()=>{au.debug(`${av}: Entering component`),(0,g.A)();let a=(0,e.useCallback)(a=>{au.debug(`${av}.onNodeDoubleClick: Double-clicked on ${a} node`);let b=new CustomEvent("addNodeFromPalette",{detail:{nodeType:a,position:{x:250,y:150}}});document.dispatchEvent(b),au.info(`${av}.onNodeDoubleClick: Dispatched addNodeFromPalette event for ${a} node`)},[]);return au.debug(`${av}: Rendering component`),(0,d.jsxs)(aw,{elevation:2,children:[(0,d.jsx)(i.default,{variant:"h6",gutterBottom:!0,children:"Node Types"}),(0,d.jsx)(h.default,{display:"flex",flexDirection:"column",gap:2,children:aA.map(b=>(0,d.jsxs)(ax,{nodeType:b.type,elevation:1,draggable:!0,onDragStart:a=>((a,b)=>{au.debug(`${av}.onDragStart: Entering method with nodeType=${b}`),a.dataTransfer.setData("application/reactflow",b),a.dataTransfer.effectAllowed="move";let c=document.createElement("div");c.innerHTML=`<div style="padding: 10px; background: white; border: 1px solid #ccc; border-radius: 4px;">${b} Node</div>`,document.body.appendChild(c),au.debug(`${av}.onDragStart: Created drag preview element`);try{a.dataTransfer.setDragImage(c,75,25),au.debug(`${av}.onDragStart: Set drag image with offset (75, 25)`)}catch(a){au.error(`${av}.onDragStart: Error setting drag image:`,a)}setTimeout(()=>{document.body.removeChild(c),au.debug(`${av}.onDragStart: Removed drag preview element`)},0),au.debug(`${av}.onDragStart: Drag operation initialized`)})(a,b.type),onDragEnd:a=>{var c;return c=b.type,void au.debug(`${av}.onDragEnd: Drag operation ended for nodeType=${c}`)},onDoubleClick:()=>a(b.type),children:[(0,d.jsx)(ay,{nodeType:b.type,children:(0,d.jsxs)(az,{children:[(a=>{switch(a){case"process":default:return(0,d.jsx)(ar.A,{color:"secondary"});case"finish":return(0,d.jsx)(as.A,{color:"success"});case"mcp":return(0,d.jsx)(ar.A,{color:"info"});case"subflow":return(0,d.jsx)(at.A,{color:"warning"})}})(b.type),(0,d.jsx)(i.default,{variant:"subtitle2",fontWeight:"bold",children:b.label})]})}),(0,d.jsx)(i.default,{variant:"caption",color:"text.secondary",children:b.description})]},b.type))})]})};var aC=c(41893),aD=c(8521),aE=c(89490),aF=c(75983),aG=c(71439);let aH=(0,v.A)((0,d.jsx)("path",{fillRule:"evenodd",d:"M20 3H4c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2M10 17H5v-2h5zm0-4H5v-2h5zm0-4H5V7h5zm4.82 6L12 12.16l1.41-1.41 1.41 1.42L17.99 9l1.42 1.42z"}),"FactCheck");var aI=c(22797);let aJ=(0,v.A)([(0,d.jsx)("path",{d:"M12 5.99 19.53 19H4.47zM12 2 1 21h22z"},"0"),(0,d.jsx)("path",{d:"M13 16h-2v2h2zm0-6h-2v5h2z"},"1")],"WarningAmber");var aK=c(8165),aL=c(64535);function aM(a){return a.data?.type??a.type??"unknown"}function aN(a){return a.data?.label||a.id}function aO(a){return a.data?.edgeType==="mcp"}function aP(a,b={}){let c=[],d=Array.isArray(a?.nodes)?a.nodes:[],e=Array.isArray(a?.edges)?a.edges:[],f=(a,b,d,e)=>c.push({severity:a,code:b,message:d,nodeId:e?.id,nodeLabel:e?aN(e):void 0}),g=new Map((b.models??[]).map(a=>[a.id,a])),h=new Map((b.servers??[]).map(a=>[a.name,a])),i=!!b.models,j=!!b.servers,k=d.filter(a=>"start"===aM(a)),l=d.filter(a=>"finish"===aM(a)),m=d.filter(a=>"process"===aM(a)),n=d.filter(a=>"mcp"===aM(a));if(0===k.length)f("error","no-start-node","The flow has no Start node, so it has no entry point.");else if(k.length>1)for(let a of k.slice(1))f("error","multiple-start-nodes","The flow has more than one Start node; only one is allowed.",a);for(let a of(0===l.length&&f("warning","no-finish-node","The flow has no Finish node; it will run but never reaches a defined end."),m)){let b=a.data?.properties??{},c=b.boundModel;if(c){if(i&&!g.has(c)){let c="string"==typeof b.modelName&&b.modelName?` (was "${b.modelName}")`:"";f("error","process-model-missing",`Process node "${aN(a)}" is bound to a model that no longer exists${c}.`,a)}}else f("error","process-missing-model",`Process node "${aN(a)}" has no model bound.`,a)}for(let a of n){let b=(a.data?.properties??{}).boundServer;if(b){if(j&&!h.has(b))f("warning","mcp-server-missing",`MCP node "${aN(a)}" is bound to server "${b}", which isn't in your current MCP server list. It may be offline (e.g. not connected), renamed, or removed — if it was renamed or removed, rebind this node.`,a);else if(j){let c=h.get(b);if(c.status&&"connected"!==c.status){let d="disabled"===c.status?"disabled":`not connected (${c.status})`;f("warning","mcp-server-disconnected",`MCP node "${aN(a)}" is bound to server "${b}", which is currently ${d}. It will provide tools again once it reconnects.`,a)}}}else f("warning","mcp-missing-server",`MCP node "${aN(a)}" is not bound to a server.`,a);e.some(b=>aO(b)&&(b.source===a.id||b.target===a.id))||f("warning","mcp-node-unconnected",`MCP node "${aN(a)}" is not connected to any Process node.`,a)}if(k.length>0){let a=function(a){let b=new Map,c=(a,c)=>{b.has(a)||b.set(a,[]),b.get(a).push(c)};for(let b of a)!aO(b)&&(c(b.source,b.target),b.data?.bidirectional&&c(b.target,b.source));return b}(e);for(let b of k)a.get(b.id)?.length||f("error","start-no-outgoing","The Start node is not connected to anything; the flow cannot run.",b);let b=function(a,b){let c=new Set(a),d=[...a];for(;d.length;){let a=d.shift();for(let e of b.get(a)??[])c.has(e)||(c.add(e),d.push(e))}return c}(k.map(a=>a.id),a);for(let a of[...m,...l])b.has(a.id)||f("warning","unreachable-node",`${"finish"===aM(a)?"Finish":"Process"} node "${aN(a)}" is not reachable from the Start node.`,a)}for(let a of d.filter(a=>"subflow"===aM(a))){let b=e.filter(b=>!aO(b)&&(b.source===a.id||b.target===a.id&&!!b.data?.bidirectional));b.length>1&&f("error","subflow-multiple-outgoing",`Subflow node "${aN(a)}" has ${b.length} outgoing connections; a subflow can only have one (either A > B > C or a bidirectional A <> B).`,a)}for(let a of m){let c=a.data?.properties?.promptTemplate;if("string"!=typeof c||!c)continue;let g=function(a,b,c){let d=new Map(b.map(a=>[a.id,a])),e=new Set;for(let b of c){if(!aO(b))continue;let c=null;if(b.source===a?c=b.target:b.target===a&&(c=b.source),!c)continue;let f=d.get(c);if(!f||"mcp"!==aM(f))continue;let g=f.data?.properties?.boundServer;"string"==typeof g&&g&&e.add(g)}return e}(a.id,d,e),h=new Set;for(let d of(0,aL.A$)(c)){if("handoff"===d.server)continue;let c=`${d.kind}:${d.server}:${d.name}`;!h.has(c)&&(h.add(c),g.has(d.server)?"tool"===d.kind&&b.serverTools&&b.serverTools[d.server]&&!b.serverTools[d.server].includes(d.name)&&f("warning","tool-unavailable",`Process node "${aN(a)}" references tool "${d.name}" which server "${d.server}" no longer provides.`,a):f("error","tool-pill-disconnected",`Process node "${aN(a)}" references ${d.kind} "${d.name}" from server "${d.server}", but it is not connected to that server (the MCP node was removed or the server was renamed).`,a))}}let o=c.filter(a=>"error"===a.severity).length,p=c.length-o;return{issues:c,errorCount:o,warningCount:p,isRunnable:0===o}}var aQ=c(83434);let aR=(0,B.h)("components/flow/FlowBuilder/FlowValidationButton"),aS=({nodes:a,edges:b})=>{let[c,f]=(0,e.useState)(!1),[g,k]=(0,e.useState)(!1),[l,m]=(0,e.useState)(null),n=(0,e.useCallback)(async()=>{k(!0);try{let c=await aQ.N.tryLoadModels()??void 0,d=await F.S.loadServerConfigs(),e=Array.isArray(d)?d.map(a=>({name:a.name,status:a.disabled?"disabled":void 0})):void 0,f=aP({nodes:a,edges:b},{models:c,servers:e});m(f.issues)}catch(a){aR.warn("Flow validation failed to run",a),m([])}finally{k(!1)}},[a,b]),o=(0,e.useCallback)(()=>{f(!0),m(null),n()},[n]),s=(0,e.useCallback)(a=>{a&&(f(!1),document.dispatchEvent(new CustomEvent("editNode",{detail:{nodeId:a}})))},[]),t=l?.filter(a=>"error"===a.severity).length??0,v=(l?.length??0)-t;return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(j.A,{variant:"outlined",color:"primary",onClick:o,startIcon:(0,d.jsx)(aH,{}),sx:{textTransform:"none"},children:"Check Flow"}),(0,d.jsxs)(p.A,{open:c,onClose:()=>f(!1),maxWidth:"sm",fullWidth:!0,children:[(0,d.jsxs)(q.A,{component:"div",sx:{display:"flex",alignItems:"center",gap:1},children:[(0,d.jsx)("span",{children:"Flow Check"}),l&&(0,d.jsxs)(h.default,{sx:{display:"flex",gap:1,ml:1},children:[t>0&&(0,d.jsx)(aC.A,{size:"small",color:"error",label:`${t} error${1===t?"":"s"}`}),v>0&&(0,d.jsx)(aC.A,{size:"small",color:"warning",label:`${v} warning${1===v?"":"s"}`})]})]}),(0,d.jsx)(r.A,{dividers:!0,children:g?(0,d.jsxs)(h.default,{sx:{display:"flex",alignItems:"center",gap:2,py:3,justifyContent:"center"},children:[(0,d.jsx)(aD.default,{size:22}),(0,d.jsx)(i.default,{color:"text.secondary",children:"Checking flow…"})]}):l&&0===l.length?(0,d.jsxs)(h.default,{sx:{display:"flex",alignItems:"center",gap:1.5,py:3,justifyContent:"center"},children:[(0,d.jsx)(aK.A,{color:"success"}),(0,d.jsx)(i.default,{children:"No problems found — this flow looks runnable."})]}):(0,d.jsx)(aE.A,{dense:!0,disablePadding:!0,children:(l??[]).map((a,b)=>{let c=!!a.nodeId,e=(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(S.A,{sx:{minWidth:36},children:"error"===a.severity?(0,d.jsx)(aI.A,{color:"error",fontSize:"small"}):(0,d.jsx)(aJ,{color:"warning",fontSize:"small"})}),(0,d.jsx)(T.A,{primary:a.message,secondary:c?`Node: ${a.nodeLabel??a.nodeId} — click to open`:void 0})]});return c?(0,d.jsx)(aF.A,{onClick:()=>s(a.nodeId),alignItems:"flex-start",children:e},b):(0,d.jsx)(aG.Ay,{alignItems:"flex-start",children:e},b)})})}),(0,d.jsxs)(u.A,{children:[(0,d.jsx)(j.A,{onClick:n,disabled:g,children:"Re-check"}),(0,d.jsx)(j.A,{onClick:()=>f(!1),variant:"contained",children:"Close"})]})]})]})};var aT=c(82666),aU=c(22042),aV=c(34304),aW=c(30137);function aX({currentLabel:a,nameIsCustom:b,defaultLabel:c,previousAutoLabel:d,nextAutoLabel:e}){return!0===b?a&&a.length>0?a:e:!a||0===a.length||a===c||void 0!==d&&d.length>0&&a===d?e:a}let aY=(0,B.h)("components/flow/FlowBuilder/Modals/ProcessNodePropertiesModal/hooks/useModelManagement.ts");var aZ=c(63650);let a$=(0,B.h)("frontend/components/flow/FlowBuilder/Modals/ProcessNodePropertiesModal/hooks/useServerConnection"),a_="handoff_to_";function a0(a,b){let c=a.replace(/\s+/g," ").trim();if(c.length<=b)return c;let d=c.slice(0,b),e=d.lastIndexOf(" ");return`${(e>.6*b?d.slice(0,e):d).trimEnd()}…`}let a1=(0,B.h)("frontend/components/flow/FlowBuilder/Modals/ProcessNodePropertiesModal/hooks/useHandoffTools"),a2=({nodeData:a,setNodeData:b})=>a?(0,d.jsxs)(h.default,{sx:{display:"flex",flexDirection:"column",height:"100%",pr:2},children:[(0,d.jsx)(i.default,{variant:"h6",gutterBottom:!0,children:"Node Configuration"}),(0,d.jsx)(t.A,{fullWidth:!0,label:"Node Label",value:a.label||"",onChange:a=>b(b=>({...b,label:a.target.value,properties:{...b?.properties,nameIsCustom:!0}})),margin:"normal"}),(0,d.jsx)(t.A,{fullWidth:!0,label:"Description",value:a.description||"",onChange:c=>b({...a,description:c.target.value}),margin:"normal",multiline:!0,rows:2,helperText:"This description will be displayed on the node"})]}):null;var a3=c(82605),a4=c(43249),a5=c(2783),a6=c(73520),a7=c(29565),a8=c(33105);function a9(a){return(0,a8.Ay)("MuiRadioGroup",a)}(0,a7.A)("MuiRadioGroup",["root","row","error"]);var ba=c(26636),bb=c(65603);let bc=e.createContext(void 0);var bd=c(70300);let be=e.forwardRef(function(a,b){let{actions:c,children:f,className:g,defaultValue:h,name:i,onChange:j,value:k,...l}=a,m=e.useRef(null),n=(a=>{let{classes:b,row:c,error:d}=a;return(0,a5.A)({root:["root",c&&"row",d&&"error"]},a9,b)})(a),[o,p]=(0,bb.A)({controlled:k,default:h,name:"RadioGroup"});e.useImperativeHandle(c,()=>({focus:()=>{let a=m.current.querySelector("input:not(:disabled):checked");a||(a=m.current.querySelector("input:not(:disabled)")),a&&a.focus()}}),[]);let q=(0,ba.A)(b,m),r=(0,bd.A)(i),s=e.useMemo(()=>({name:r,onChange(a){p(a.target.value),j&&j(a,a.target.value)},value:o}),[r,j,p,o]);return(0,d.jsx)(bc.Provider,{value:s,children:(0,d.jsx)(a6.A,{role:"radiogroup",ref:q,className:(0,a4.A)(n.root,g),...l,children:f})})});var bf=c(95587),bg=c(37489),bh=c(99515);let bi=(0,v.A)((0,d.jsx)("path",{d:"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z"}),"RadioButtonUnchecked"),bj=(0,v.A)((0,d.jsx)("path",{d:"M8.465 8.465C9.37 7.56 10.62 7 12 7C14.76 7 17 9.24 17 12C17 13.38 16.44 14.63 15.535 15.535C14.63 16.44 13.38 17 12 17C9.24 17 7 14.76 7 12C7 10.62 7.56 9.37 8.465 8.465Z"}),"RadioButtonChecked");var bk=c(41126),bl=c(68333);let bm=(0,y.Ay)("span",{name:"MuiRadioButtonIcon",shouldForwardProp:bk.A})({position:"relative",display:"flex"}),bn=(0,y.Ay)(bi,{name:"MuiRadioButtonIcon"})({transform:"scale(1)"}),bo=(0,y.Ay)(bj,{name:"MuiRadioButtonIcon"})((0,bl.A)(({theme:a})=>({left:0,position:"absolute",transform:"scale(0)",transition:a.transitions.create("transform",{easing:a.transitions.easing.easeIn,duration:a.transitions.duration.shortest}),variants:[{props:{checked:!0},style:{transform:"scale(1)",transition:a.transitions.create("transform",{easing:a.transitions.easing.easeOut,duration:a.transitions.duration.shortest})}}]}))),bp=function(a){let{checked:b=!1,classes:c={},fontSize:e}=a,f={...a,checked:b};return(0,d.jsxs)(bm,{className:c.root,ownerState:f,children:[(0,d.jsx)(bn,{fontSize:e,className:c.background,ownerState:f}),(0,d.jsx)(bo,{fontSize:e,className:c.dot,ownerState:f})]})};var bq=c(6638);let br=c(2153).A;var bs=c(49628);function bt(a){return(0,a8.Ay)("MuiRadio",a)}let bu=(0,a7.A)("MuiRadio",["root","checked","disabled","colorPrimary","colorSecondary","sizeSmall"]);var bv=c(54716),bw=c(20385),bx=c(6636);let by=(0,y.Ay)(bh.A,{shouldForwardProp:a=>(0,bk.A)(a)||"classes"===a,name:"MuiRadio",slot:"Root",overridesResolver:(a,b)=>{let{ownerState:c}=a;return[b.root,"medium"!==c.size&&b[`size${(0,bq.A)(c.size)}`],b[`color${(0,bq.A)(c.color)}`]]}})((0,bl.A)(({theme:a})=>({color:(a.vars||a).palette.text.secondary,[`&.${bu.disabled}`]:{color:(a.vars||a).palette.action.disabled},variants:[{props:{color:"default",disabled:!1,disableRipple:!1},style:{"&:hover":{backgroundColor:a.vars?`rgba(${a.vars.palette.action.activeChannel} / ${a.vars.palette.action.hoverOpacity})`:(0,bg.X4)(a.palette.action.active,a.palette.action.hoverOpacity)}}},...Object.entries(a.palette).filter((0,bv.A)()).map(([b])=>({props:{color:b,disabled:!1,disableRipple:!1},style:{"&:hover":{backgroundColor:a.vars?`rgba(${a.vars.palette[b].mainChannel} / ${a.vars.palette.action.hoverOpacity})`:(0,bg.X4)(a.palette[b].main,a.palette.action.hoverOpacity)}}})),...Object.entries(a.palette).filter((0,bv.A)()).map(([b])=>({props:{color:b,disabled:!1},style:{[`&.${bu.checked}`]:{color:(a.vars||a).palette[b].main}}})),{props:{disableRipple:!1},style:{"&:hover":{"@media (hover: none)":{backgroundColor:"transparent"}}}}]}))),bz=(0,d.jsx)(bp,{checked:!0}),bA=(0,d.jsx)(bp,{}),bB=e.forwardRef(function(a,b){let c=(0,bx.b)({props:a,name:"MuiRadio"}),{checked:f,checkedIcon:g=bz,color:h="primary",icon:i=bA,name:j,onChange:k,size:l="medium",className:m,disabled:n,disableRipple:o=!1,slots:p={},slotProps:q={},inputProps:r,...s}=c,t=(0,bs.A)(),u=n;t&&void 0===u&&(u=t.disabled),u??=!1;let v={...c,disabled:u,disableRipple:o,color:h,size:l},w=(a=>{let{classes:b,color:c,size:d}=a,e={root:["root",`color${(0,bq.A)(c)}`,"medium"!==d&&`size${(0,bq.A)(d)}`]};return{...b,...(0,a5.A)(e,bt,b)}})(v),x=e.useContext(bc),y=f,z=br(k,x&&x.onChange),A=j;if(x){var B,C;void 0===y&&(B=x.value,y="object"==typeof(C=c.value)&&null!==C?B===C:String(B)===String(C)),void 0===A&&(A=x.name)}let D=q.input??r,[E,F]=(0,bw.A)("root",{ref:b,elementType:by,className:(0,a4.A)(w.root,m),shouldForwardComponentProp:!0,externalForwardedProps:{slots:p,slotProps:q,...s},getSlotProps:a=>({...a,onChange:(b,...c)=>{a.onChange?.(b,...c),z(b,...c)}}),ownerState:v,additionalProps:{type:"radio",icon:e.cloneElement(i,{fontSize:i.props.fontSize??l}),checkedIcon:e.cloneElement(g,{fontSize:g.props.fontSize??l}),disabled:u,name:A,checked:y,slots:p,slotProps:{input:"function"==typeof D?D(v):D}}});return(0,d.jsx)(E,{...F,classes:w})});var bC=c(38233),bD=c(93083);let bE=({isLoadingModels:a,loadError:b,models:c,selectedModelId:e,handleModelSelect:f,isModelBound:g,handleUnbindModel:k})=>(0,d.jsxs)(h.default,{sx:{mt:4},children:[(0,d.jsx)(i.default,{variant:"subtitle1",gutterBottom:!0,children:"Bind to Model"}),a?(0,d.jsx)(i.default,{color:"text.secondary",children:"Loading models..."}):b?(0,d.jsx)(i.default,{color:"error",children:b}):0===c.length?(0,d.jsx)(i.default,{color:"text.secondary",children:"No models available. Add some in the Model Manager."}):(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)(a3.A,{component:"fieldset",fullWidth:!0,children:[(0,d.jsx)(be,{value:e,onChange:a=>f(a.target.value),children:(0,d.jsx)(aT.Ay,{container:!0,spacing:2,children:c.map(a=>(0,d.jsx)(aT.Ay,{item:!0,xs:12,sm:6,children:(0,d.jsx)(z.A,{elevation:1,sx:{p:2,border:2*(e===a.id),borderColor:"primary.main"},children:(0,d.jsx)(bf.A,{value:a.id,control:(0,d.jsx)(bB,{}),label:(0,d.jsxs)(h.default,{children:[(0,d.jsx)(i.default,{variant:"subtitle2",children:a.displayName||a.name}),a.description&&(0,d.jsx)(i.default,{variant:"caption",color:"text.secondary",display:"block",children:a.description}),a.baseUrl&&(0,d.jsx)(i.default,{variant:"caption",color:"text.secondary",children:a.baseUrl})]}),sx:{width:"100%",m:0}})})},a.id))})}),(0,d.jsx)(bC.A,{children:e?"This node will use the selected model for processing.":"Select a model to bind this node to."})]}),g&&(0,d.jsx)(h.default,{sx:{mt:2,display:"flex",justifyContent:"flex-end"},children:(0,d.jsx)(j.A,{startIcon:(0,d.jsx)(bD.A,{}),onClick:k,color:"primary",variant:"outlined",size:"small",children:"Unbind Model"})})]})]});var bF=c(66335);let bG=function(a){let{badgeContent:b,invisible:c=!1,max:d=99,showZero:e=!1}=a,f=(0,bF.A)({badgeContent:b,max:d}),g=c;!1!==c||0!==b||e||(g=!0);let{badgeContent:h,max:i=d}=g?f:a,j=h&&Number(h)>i?`${i}+`:h;return{badgeContent:h,invisible:g,max:i,displayValue:j}};function bH(a){return(0,a8.Ay)("MuiBadge",a)}let bI=(0,a7.A)("MuiBadge",["root","badge","dot","standard","anchorOriginTopRight","anchorOriginBottomRight","anchorOriginTopLeft","anchorOriginBottomLeft","invisible","colorError","colorInfo","colorPrimary","colorSecondary","colorSuccess","colorWarning","overlapRectangular","overlapCircular","anchorOriginTopLeftCircular","anchorOriginTopLeftRectangular","anchorOriginTopRightCircular","anchorOriginTopRightRectangular","anchorOriginBottomLeftCircular","anchorOriginBottomLeftRectangular","anchorOriginBottomRightCircular","anchorOriginBottomRightRectangular"]),bJ=(0,y.Ay)("span",{name:"MuiBadge",slot:"Root",overridesResolver:(a,b)=>b.root})({position:"relative",display:"inline-flex",verticalAlign:"middle",flexShrink:0}),bK=(0,y.Ay)("span",{name:"MuiBadge",slot:"Badge",overridesResolver:(a,b)=>{let{ownerState:c}=a;return[b.badge,b[c.variant],b[`anchorOrigin${(0,bq.A)(c.anchorOrigin.vertical)}${(0,bq.A)(c.anchorOrigin.horizontal)}${(0,bq.A)(c.overlap)}`],"default"!==c.color&&b[`color${(0,bq.A)(c.color)}`],c.invisible&&b.invisible]}})((0,bl.A)(({theme:a})=>({display:"flex",flexDirection:"row",flexWrap:"wrap",justifyContent:"center",alignContent:"center",alignItems:"center",position:"absolute",boxSizing:"border-box",fontFamily:a.typography.fontFamily,fontWeight:a.typography.fontWeightMedium,fontSize:a.typography.pxToRem(12),minWidth:20,lineHeight:1,padding:"0 6px",height:20,borderRadius:10,zIndex:1,transition:a.transitions.create("transform",{easing:a.transitions.easing.easeInOut,duration:a.transitions.duration.enteringScreen}),variants:[...Object.entries(a.palette).filter((0,bv.A)(["contrastText"])).map(([b])=>({props:{color:b},style:{backgroundColor:(a.vars||a).palette[b].main,color:(a.vars||a).palette[b].contrastText}})),{props:{variant:"dot"},style:{borderRadius:4,height:8,minWidth:8,padding:0}},{props:({ownerState:a})=>"top"===a.anchorOrigin.vertical&&"right"===a.anchorOrigin.horizontal&&"rectangular"===a.overlap,style:{top:0,right:0,transform:"scale(1) translate(50%, -50%)",transformOrigin:"100% 0%",[`&.${bI.invisible}`]:{transform:"scale(0) translate(50%, -50%)"}}},{props:({ownerState:a})=>"bottom"===a.anchorOrigin.vertical&&"right"===a.anchorOrigin.horizontal&&"rectangular"===a.overlap,style:{bottom:0,right:0,transform:"scale(1) translate(50%, 50%)",transformOrigin:"100% 100%",[`&.${bI.invisible}`]:{transform:"scale(0) translate(50%, 50%)"}}},{props:({ownerState:a})=>"top"===a.anchorOrigin.vertical&&"left"===a.anchorOrigin.horizontal&&"rectangular"===a.overlap,style:{top:0,left:0,transform:"scale(1) translate(-50%, -50%)",transformOrigin:"0% 0%",[`&.${bI.invisible}`]:{transform:"scale(0) translate(-50%, -50%)"}}},{props:({ownerState:a})=>"bottom"===a.anchorOrigin.vertical&&"left"===a.anchorOrigin.horizontal&&"rectangular"===a.overlap,style:{bottom:0,left:0,transform:"scale(1) translate(-50%, 50%)",transformOrigin:"0% 100%",[`&.${bI.invisible}`]:{transform:"scale(0) translate(-50%, 50%)"}}},{props:({ownerState:a})=>"top"===a.anchorOrigin.vertical&&"right"===a.anchorOrigin.horizontal&&"circular"===a.overlap,style:{top:"14%",right:"14%",transform:"scale(1) translate(50%, -50%)",transformOrigin:"100% 0%",[`&.${bI.invisible}`]:{transform:"scale(0) translate(50%, -50%)"}}},{props:({ownerState:a})=>"bottom"===a.anchorOrigin.vertical&&"right"===a.anchorOrigin.horizontal&&"circular"===a.overlap,style:{bottom:"14%",right:"14%",transform:"scale(1) translate(50%, 50%)",transformOrigin:"100% 100%",[`&.${bI.invisible}`]:{transform:"scale(0) translate(50%, 50%)"}}},{props:({ownerState:a})=>"top"===a.anchorOrigin.vertical&&"left"===a.anchorOrigin.horizontal&&"circular"===a.overlap,style:{top:"14%",left:"14%",transform:"scale(1) translate(-50%, -50%)",transformOrigin:"0% 0%",[`&.${bI.invisible}`]:{transform:"scale(0) translate(-50%, -50%)"}}},{props:({ownerState:a})=>"bottom"===a.anchorOrigin.vertical&&"left"===a.anchorOrigin.horizontal&&"circular"===a.overlap,style:{bottom:"14%",left:"14%",transform:"scale(1) translate(-50%, 50%)",transformOrigin:"0% 100%",[`&.${bI.invisible}`]:{transform:"scale(0) translate(-50%, 50%)"}}},{props:{invisible:!0},style:{transition:a.transitions.create("transform",{easing:a.transitions.easing.easeInOut,duration:a.transitions.duration.leavingScreen})}}]})));function bL(a){return{vertical:a?.vertical??"top",horizontal:a?.horizontal??"right"}}let bM=e.forwardRef(function(a,b){let c=(0,bx.b)({props:a,name:"MuiBadge"}),{anchorOrigin:e,className:f,classes:g,component:h,components:i={},componentsProps:j={},children:k,overlap:l="rectangular",color:m="default",invisible:n=!1,max:o=99,badgeContent:p,slots:q,slotProps:r,showZero:s=!1,variant:t="standard",...u}=c,{badgeContent:v,invisible:w,max:x,displayValue:y}=bG({max:o,invisible:n,badgeContent:p,showZero:s}),z=(0,bF.A)({anchorOrigin:bL(e),color:m,overlap:l,variant:t,badgeContent:p}),A=w||null==v&&"dot"!==t,{color:B=m,overlap:C=l,anchorOrigin:D,variant:E=t}=A?z:c,F=bL(D),G="dot"!==E?y:void 0,H={...c,badgeContent:v,invisible:A,max:x,displayValue:G,showZero:s,anchorOrigin:F,color:B,overlap:C,variant:E},I=(a=>{let{color:b,anchorOrigin:c,invisible:d,overlap:e,variant:f,classes:g={}}=a,h={root:["root"],badge:["badge",f,d&&"invisible",`anchorOrigin${(0,bq.A)(c.vertical)}${(0,bq.A)(c.horizontal)}`,`anchorOrigin${(0,bq.A)(c.vertical)}${(0,bq.A)(c.horizontal)}${(0,bq.A)(e)}`,`overlap${(0,bq.A)(e)}`,"default"!==b&&`color${(0,bq.A)(b)}`]};return(0,a5.A)(h,bH,g)})(H),J={slots:{root:q?.root??i.Root,badge:q?.badge??i.Badge},slotProps:{root:r?.root??j.root,badge:r?.badge??j.badge}},[K,L]=(0,bw.A)("root",{elementType:bJ,externalForwardedProps:{...J,...u},ownerState:H,className:(0,a4.A)(I.root,f),ref:b,additionalProps:{as:h}}),[M,N]=(0,bw.A)("badge",{elementType:bK,externalForwardedProps:J,ownerState:H,className:I.badge});return(0,d.jsxs)(K,{...L,children:[k,(0,d.jsx)(M,{...N,children:G})]})});var bN=c(67101),bO=c(30818),bP=c(27114),bQ=c(53222);let bR=(0,v.A)((0,d.jsx)("path",{d:"M12 5V2L8 6l4 4V7c3.31 0 6 2.69 6 6 0 2.97-2.17 5.43-5 5.91v2.02c3.95-.49 7-3.85 7-7.93 0-4.42-3.58-8-8-8m-6 8c0-1.65.67-3.15 1.76-4.24L6.34 7.34C4.9 8.79 4 10.79 4 13c0 4.08 3.05 7.44 7 7.93v-2.02c-2.83-.48-5-2.94-5-5.91"}),"RestartAlt");var bS=c(40973),bT=c(9604);let bU=(0,B.h)("frontend/components/flow/FlowBuilder/Modals/ProcessNodePropertiesModal/ServerTools"),bV=({isLoadingServers:a,connectedMcpNodes:b,availableServers:c,onConnectMcpServer:f,serverToolsMap:g,serverStatuses:k,isLoadingTools:n,handleSelectToolServer:o,handleInsertToolBinding:p,selectedToolServerNodeId:q,selectedNodeId:r,isLoadingSelectedServerTools:s,promptBuilderRef:u,handleRetryServer:v,handleRestartServer:w})=>{let y=q??b[0]?.nodeId??null,[A,B]=(0,e.useState)({}),[C,D]=(0,e.useState)(null),E=(c??[]).filter(a=>!b.some(b=>b.serverName===a.name)),F=!!f&&E.length>0,G=(0,d.jsx)(U.A,{open:!!C,anchorEl:C,onClose:()=>D(null),children:E.map(a=>(0,d.jsxs)(R.A,{onClick:()=>{var b;return b=a.name,void(D(null),f?.(b))},children:[(0,d.jsx)(h.default,{sx:{width:8,height:8,borderRadius:"50%",mr:1,bgcolor:"connected"===a.status?"success.main":"text.disabled"}}),a.name]},a.name))}),[H,I]=(0,e.useState)(""),J=a=>{try{let c=b.find(b=>b.nodeId===a);if(!c)return bU.warn(`Could not find connected MCP node with ID ${a}`),[];let d=c.enabledTools||[];return bU.debug(`Enabled tools for node ${a}: ${JSON.stringify(d)}`),Array.isArray(d)?d:[]}catch(b){return bU.error(`Error getting enabled tools for node ${a}:`,b),[]}},K=(a,b,c)=>{try{if(!c||!Array.isArray(c))return bU.warn(`Tools array is not available or not an array for server ${b}`),[];let d=J(a),e=c;if(d.length>0?e=c.filter(a=>a&&a.name&&d.includes(a.name)):(bU.debug(`No tools explicitly enabled for node ${a}, showing none.`),e=[]),H.trim()){let a=H.toLowerCase().trim();e=e.filter(b=>b.name&&b.name.toLowerCase().includes(a)||b.description&&b.description.toLowerCase().includes(a)||b.inputSchema&&JSON.stringify(b.inputSchema).toLowerCase().includes(a))}return e}catch(d){return bU.error(`Error filtering tools for node ${a} (server ${b}):`,d),c||[]}},L=a=>{o(a)},M=async(a,b)=>{b.stopPropagation(),bU.debug(`Retry button clicked for server: ${a}`),B(b=>({...b,[a]:!0}));try{v&&await v(a)}finally{setTimeout(()=>{B(b=>({...b,[a]:!1}))},500)}},N=async(a,b)=>{b.stopPropagation(),bU.debug(`Restart button clicked for server: ${a}`),B(b=>({...b,[a]:!0}));try{w&&await w(a)}finally{setTimeout(()=>{B(b=>({...b,[a]:!1}))},500)}};(0,e.useEffect)(()=>{b.length>0&&!q&&o(b[0].nodeId)},[b,q,o]);let O=b.find(a=>a.nodeId===y),P=O?.serverName;return(0,d.jsxs)(h.default,{sx:{mt:4,display:"flex",flexDirection:"column",height:"100%"},children:[(0,d.jsx)(i.default,{variant:"subtitle1",gutterBottom:!0,children:"Connected MCP Servers and Tools"}),a?(0,d.jsxs)(h.default,{sx:{display:"flex",alignItems:"center",gap:1},children:[(0,d.jsx)(aD.default,{size:20}),(0,d.jsx)(i.default,{color:"text.secondary",children:"Loading connected MCP nodes..."})]}):0===b.length?(0,d.jsxs)(h.default,{sx:{p:2,border:"1px dashed rgba(0, 0, 0, 0.12)",borderRadius:1},children:[(0,d.jsx)(i.default,{color:"text.secondary",align:"center",children:"No MCP nodes connected to this Process node."}),(0,d.jsx)(i.default,{variant:"caption",color:"text.secondary",align:"center",display:"block",sx:{mt:1},children:F?"Pick a server below — the MCP node is added to the flow and wired up for you.":"Connect MCP nodes to this Process node using the side handles to access their tools."}),F&&(0,d.jsx)(h.default,{sx:{display:"flex",justifyContent:"center",mt:2},children:(0,d.jsx)(j.A,{variant:"contained",size:"small",startIcon:(0,d.jsx)(x.A,{}),onClick:a=>D(a.currentTarget),children:"Connect MCP Server"})}),G]}):(0,d.jsxs)(h.default,{sx:{display:"flex",flexDirection:"column",flexGrow:1,height:"calc(100% - 40px)"},children:[(0,d.jsxs)(h.default,{sx:{display:"flex",alignItems:"center",mb:2,borderBottom:1,borderColor:"divider"},children:[(0,d.jsx)(aU.A,{value:y||b[0]?.nodeId||"",onChange:(a,b)=>L(b),variant:"scrollable",scrollButtons:"auto",sx:{flexGrow:1},children:b.map(a=>{if(!a||!a.nodeId||!a.serverName)return bU.warn("Skipping invalid MCP node in tabs:",a),null;let b=a.serverName,c=a.nodeId,e=a.status;A[b],n[b];let f=g[b]||[],j=J(c);return K(c,b,f).length,(0,d.jsx)(aV.A,{value:c,label:(0,d.jsxs)(h.default,{sx:{display:"flex",alignItems:"center"},children:[(0,d.jsx)(i.default,{variant:"body2",sx:{color:"connected"===e?"success.main":"error"===e?"error.main":"text.secondary"},children:b}),j.length>0&&(0,d.jsx)(bM,{badgeContent:j.length,color:"primary",sx:{ml:1}})]}),sx:{textTransform:"none",minHeight:"48px",opacity:"connected"!==e?.7:1}},c)})}),F&&(0,d.jsx)(m.A,{title:"Connect another MCP server",children:(0,d.jsx)(l.A,{size:"small",onClick:a=>D(a.currentTarget),sx:{ml:1},children:(0,d.jsx)(x.A,{fontSize:"small"})})}),G]}),O&&P&&(0,d.jsxs)(h.default,{sx:{display:"flex",justifyContent:"flex-end",mb:2},children:[(0,d.jsx)(m.A,{title:`Retry connection for ${P}`,children:(0,d.jsx)("span",{children:(0,d.jsx)(l.A,{size:"small",onClick:a=>M(P,a),disabled:A[P]||n[P],children:A[P]?(0,d.jsx)(aD.default,{size:16}):(0,d.jsx)(bQ.A,{fontSize:"small"})})})}),"connected"===O.status&&w&&(0,d.jsx)(m.A,{title:`Restart server ${P}`,children:(0,d.jsx)("span",{children:(0,d.jsx)(l.A,{size:"small",onClick:a=>N(P,a),disabled:A[P],sx:{ml:1},children:(0,d.jsx)(bR,{fontSize:"small"})})})})]}),(0,d.jsx)(t.A,{placeholder:"Search enabled tools...",variant:"outlined",size:"small",fullWidth:!0,value:H,onChange:a=>I(a.target.value),sx:{mb:2},InputProps:{startAdornment:(0,d.jsx)(bN.A,{position:"start",children:(0,d.jsx)(bS.A,{fontSize:"small"})})}}),(0,d.jsx)(z.A,{variant:"outlined",sx:{flexGrow:1,overflow:"auto",p:0,height:"calc(100% - 140px)"},children:O&&P&&(()=>{let a=O.nodeId,b=O.serverName;if("connected"!==O.status)return(0,d.jsx)(h.default,{sx:{p:2,textAlign:"center"},children:(0,d.jsxs)(i.default,{color:"text.secondary",children:["Server '",b,"' is not connected. Connect to view tools."]})},a);if(n[b])return(0,d.jsx)(h.default,{sx:{display:"flex",justifyContent:"center",p:2},children:(0,d.jsx)(aD.default,{size:24})},a);let c=g[b]||[],e=K(a,b,c);if(0===e.length){let b=J(a).length;return(0,d.jsx)(h.default,{sx:{p:2,textAlign:"center"},children:(0,d.jsx)(i.default,{color:"text.secondary",children:H.trim()?`No enabled tools match "${H}" for this node.`:0===b?"No tools are enabled for this node instance. Enable tools in the MCP Node properties.":"No tools available or enabled for this node instance."})},a)}return(0,d.jsx)(aE.A,{disablePadding:!0,children:e.map(c=>(0,d.jsxs)(bO.A,{variant:"outlined",onClick:()=>{a!==y?(bU.debug("Node tab not selected, selecting node first",{selectedNodeId:a,serverName:b,toolName:c.name}),L(a)):b&&c.name?(bU.debug("Inserting tool binding",{serverName:b,toolName:c.name}),p(b,c.name)):bU.warn("Cannot insert tool binding, server or tool name is undefined",{serverName:b,toolName:c.name})},sx:{mb:1,mx:1,mt:1,cursor:"pointer",position:"relative","&:hover":{boxShadow:1,bgcolor:"action.hover"}},children:[(0,d.jsx)(bP.A,{sx:{p:2,"&:last-child":{pb:2}},children:(0,d.jsx)(h.default,{sx:{display:"flex",justifyContent:"space-between",alignItems:"flex-start"},children:(0,d.jsxs)(h.default,{sx:{width:"100%"},children:[(0,d.jsxs)(i.default,{variant:"subtitle2",component:"div",sx:{display:"flex",alignItems:"center"},children:[(0,d.jsx)(bT.A,{fontSize:"small",sx:{mr:1,color:"primary.main"}}),c.name]}),(0,d.jsx)(i.default,{variant:"body2",color:"text.secondary",sx:{mt:.5},children:c.description||"No description available"}),c.inputSchema&&(a=>a&&a.properties?(0,d.jsxs)(h.default,{sx:{mt:1},children:[(0,d.jsx)(i.default,{variant:"caption",color:"text.secondary",sx:{fontWeight:"medium"},children:"Parameters:"}),(0,d.jsx)(h.default,{sx:{pl:1,mt:.5},children:Object.entries(a.properties).map(([b,c])=>(0,d.jsxs)(h.default,{sx:{mb:.5},children:[(0,d.jsxs)(i.default,{variant:"caption",component:"span",sx:{fontWeight:"medium"},children:[b,a.required?.includes(b)&&(0,d.jsx)(i.default,{variant:"caption",component:"span",color:"error.main",children:" *"}),": "]}),(0,d.jsx)(i.default,{variant:"caption",component:"span",color:"text.secondary",children:c.description||c.type||"No description"})]},b))})]}):null)(c.inputSchema)]})})}),(0,d.jsx)(m.A,{title:`Add ${c.name} from ${b} to prompt`,children:(0,d.jsx)(h.default,{sx:{position:"absolute",top:0,left:0,right:0,bottom:0}})})]},c.name))},a)})()})]})]})},bW=(0,v.A)((0,d.jsx)("path",{d:"M14 2H6c-1.1 0-1.99.9-1.99 2L4 20c0 1.1.89 2 1.99 2H18c1.1 0 2-.9 2-2V8zm2 16H8v-2h8zm0-4H8v-2h8zm-3-5V3.5L18.5 9z"}),"Description"),bX=(0,B.h)("frontend/components/flow/FlowBuilder/Modals/ProcessNodePropertiesModal/ServerResources"),bY=({primary:a,secondary:b,chip:c,onClick:e})=>(0,d.jsx)(bO.A,{variant:"outlined",onClick:e,sx:{mb:1,mx:1,mt:1,cursor:"pointer","&:hover":{boxShadow:1,bgcolor:"action.hover"}},children:(0,d.jsx)(bP.A,{sx:{p:2,"&:last-child":{pb:2}},children:(0,d.jsxs)(h.default,{sx:{display:"flex",justifyContent:"space-between",alignItems:"flex-start"},children:[(0,d.jsxs)(h.default,{sx:{width:"100%"},children:[(0,d.jsxs)(i.default,{variant:"subtitle2",component:"div",sx:{display:"flex",alignItems:"center"},children:[(0,d.jsx)(bW,{fontSize:"small",sx:{mr:1,color:"primary.main"}}),a]}),(0,d.jsx)(i.default,{variant:"body2",color:"text.secondary",sx:{mt:.5,wordBreak:"break-all"},children:b})]}),c&&(0,d.jsx)(aC.A,{size:"small",label:c,sx:{ml:1,flexShrink:0}})]})})}),bZ=({connectedMcpNodes:a,handleInsertResourceBinding:b,promptBuilderRef:c})=>{let[f,g]=(0,e.useState)(null),[j,k]=(0,e.useState)([]),[l,m]=(0,e.useState)([]),[n,p]=(0,e.useState)(!1),[q,r]=(0,e.useState)(),[s,u]=(0,e.useState)(""),v=a.find(a=>a.nodeId===f),w=v?.serverName;(0,e.useEffect)(()=>{a.length>0&&!f&&g(a[0].nodeId)},[a,f]);let x=(0,e.useCallback)(async a=>{p(!0),r(void 0);try{let b=await F.S.listServerResources(a);k(b.resources||[]),m(b.resourceTemplates||[]),r(b.error)}catch(b){bX.warn(`Failed to load resources for ${a}`,b),r(b instanceof Error?b.message:"Failed to load resources")}finally{p(!1)}},[]);(0,e.useEffect)(()=>{w?x(w):(k([]),m([]))},[w,x]);let y=a=>a.toLowerCase().includes(s.toLowerCase().trim()),A=s.trim()?j.filter(a=>y(a.name||"")||y(a.uri)||y(a.description||"")):j,B=s.trim()?l.filter(a=>y(a.name||"")||y(a.uriTemplate)||y(a.description||"")):l,C=a=>{w&&a&&b(w,a)};return(0,d.jsxs)(h.default,{sx:{mt:4,display:"flex",flexDirection:"column",height:"100%"},children:[(0,d.jsx)(i.default,{variant:"subtitle1",gutterBottom:!0,children:"Give this step access to…"}),(0,d.jsx)(i.default,{variant:"caption",color:"text.secondary",sx:{mb:1},children:"Pick a resource to insert. Its contents are read and placed into the prompt each time the step runs."}),0===a.length?(0,d.jsxs)(h.default,{sx:{p:2,border:"1px dashed rgba(0, 0, 0, 0.12)",borderRadius:1},children:[(0,d.jsx)(i.default,{color:"text.secondary",align:"center",children:"No MCP nodes connected to this Process node."}),(0,d.jsx)(i.default,{variant:"caption",color:"text.secondary",align:"center",display:"block",sx:{mt:1},children:"Connect MCP nodes using the side handles to access their resources."})]}):(0,d.jsxs)(h.default,{sx:{display:"flex",flexDirection:"column",flexGrow:1,height:"calc(100% - 40px)"},children:[(0,d.jsx)(aU.A,{value:f||a[0]?.nodeId||"",onChange:(a,b)=>g(b),variant:"scrollable",scrollButtons:"auto",sx:{mb:2,borderBottom:1,borderColor:"divider"},children:a.map(a=>(0,d.jsx)(aV.A,{value:a.nodeId,label:(0,d.jsx)(i.default,{variant:"body2",sx:{color:"connected"===a.status?"success.main":"error"===a.status?"error.main":"text.secondary"},children:a.serverName}),sx:{textTransform:"none",minHeight:48,opacity:"connected"!==a.status?.7:1}},a.nodeId))}),(0,d.jsx)(t.A,{placeholder:"Search resources…",variant:"outlined",size:"small",fullWidth:!0,value:s,onChange:a=>u(a.target.value),sx:{mb:2},InputProps:{startAdornment:(0,d.jsx)(bN.A,{position:"start",children:(0,d.jsx)(bS.A,{fontSize:"small"})})}}),q&&(0,d.jsx)(o.A,{severity:"warning",sx:{mb:2},children:q}),(0,d.jsx)(z.A,{variant:"outlined",sx:{flexGrow:1,overflow:"auto",p:0,height:"calc(100% - 140px)"},children:v&&"connected"!==v.status?(0,d.jsx)(h.default,{sx:{p:2,textAlign:"center"},children:(0,d.jsxs)(i.default,{color:"text.secondary",children:["Server '",w,"' is not connected. Connect to view resources."]})}):n?(0,d.jsx)(h.default,{sx:{display:"flex",justifyContent:"center",p:2},children:(0,d.jsx)(aD.default,{size:24})}):0===A.length&&0===B.length?(0,d.jsx)(h.default,{sx:{p:2,textAlign:"center"},children:(0,d.jsx)(i.default,{color:"text.secondary",children:s.trim()?`No resources match "${s}".`:"This server does not publish any resources."})}):(0,d.jsxs)(aE.A,{disablePadding:!0,children:[A.map(a=>(0,d.jsx)(bY,{primary:a.name||a.uri,secondary:a.description||a.uri,chip:a.mimeType,tooltip:`Add ${a.name||a.uri} to prompt`,onClick:()=>C(a.uri)},a.uri)),B.map(a=>(0,d.jsx)(bY,{primary:a.name||a.uriTemplate,secondary:a.description||a.uriTemplate,chip:"template",tooltip:`Add template ${a.uriTemplate} to prompt (fill in variables, e.g. with \${global:VAR})`,onClick:()=>C(a.uriTemplate)},a.uriTemplate))]})})]})]})},b$=(0,B.h)("frontend/components/flow/FlowBuilder/Modals/ProcessNodePropertiesModal/ServerTools/AgentTools"),b_=({handoffTools:a,isLoadingHandoffTools:b,handleInsertToolBinding:c,promptBuilderRef:f})=>{let[g,j]=(0,e.useState)(""),k=a.filter(a=>{if(!g.trim())return!0;let b=g.toLowerCase().trim();return a.name&&a.name.toLowerCase().includes(b)||a.description&&a.description.toLowerCase().includes(b)});return(0,d.jsxs)(h.default,{sx:{mt:4,display:"flex",flexDirection:"column",height:"100%"},children:[(0,d.jsx)(i.default,{variant:"subtitle1",gutterBottom:!0,children:"Agent Handoff Tools"}),b?(0,d.jsxs)(h.default,{sx:{display:"flex",alignItems:"center",gap:1},children:[(0,d.jsx)(aD.default,{size:20}),(0,d.jsx)(i.default,{color:"text.secondary",children:"Loading handoff tools..."})]}):0===a.length?(0,d.jsxs)(h.default,{sx:{p:2,border:"1px dashed rgba(0, 0, 0, 0.12)",borderRadius:1},children:[(0,d.jsx)(i.default,{color:"text.secondary",align:"center",children:"No handoff tools available for this node."}),(0,d.jsx)(i.default,{variant:"caption",color:"text.secondary",align:"center",display:"block",sx:{mt:1},children:"Connect this Process node to other nodes to enable handoff tools."})]}):(0,d.jsxs)(h.default,{sx:{display:"flex",flexDirection:"column",flexGrow:1,height:"calc(100% - 40px)"},children:[(0,d.jsx)(t.A,{placeholder:"Search handoff tools...",variant:"outlined",size:"small",fullWidth:!0,value:g,onChange:a=>j(a.target.value),sx:{mb:2},InputProps:{startAdornment:(0,d.jsx)(bN.A,{position:"start",children:(0,d.jsx)(bS.A,{fontSize:"small"})})}}),(0,d.jsx)(z.A,{variant:"outlined",sx:{flexGrow:1,overflow:"auto",p:0,height:"calc(100% - 56px)"},children:0===k.length?(0,d.jsx)(h.default,{sx:{p:2,textAlign:"center"},children:(0,d.jsx)(i.default,{color:"text.secondary",children:g.trim()?`No handoff tools match "${g}".`:"No handoff tools available."})}):(0,d.jsx)(aE.A,{disablePadding:!0,children:k.map(a=>(0,d.jsxs)(bO.A,{variant:"outlined",onClick:()=>{a.name?(b$.debug("Inserting handoff tool binding",{toolType:"handoff",toolName:a.name}),c("handoff",a.name)):b$.warn("Cannot insert handoff tool binding, tool name is undefined",{toolName:a.name})},sx:{mb:1,mx:1,mt:1,cursor:"pointer",position:"relative",bgcolor:"rgba(0, 0, 0, 0.04)","&:hover":{boxShadow:1,bgcolor:"rgba(0, 0, 0, 0.08)"}},children:[(0,d.jsx)(bP.A,{sx:{p:2,"&:last-child":{pb:2}},children:(0,d.jsx)(h.default,{sx:{display:"flex",justifyContent:"space-between",alignItems:"flex-start"},children:(0,d.jsxs)(h.default,{sx:{width:"100%"},children:[(0,d.jsxs)(i.default,{variant:"subtitle2",component:"div",sx:{display:"flex",alignItems:"center"},children:[(0,d.jsx)(bT.A,{fontSize:"small",sx:{mr:1,color:"text.secondary"}}),a.name]}),(0,d.jsx)(i.default,{variant:"body2",color:"text.secondary",sx:{mt:.5},children:a.description||"No description available"}),a.inputSchema&&(a=>a&&a.properties&&0!==Object.keys(a.properties).length?(0,d.jsxs)(h.default,{sx:{mt:1},children:[(0,d.jsx)(i.default,{variant:"caption",color:"text.secondary",sx:{fontWeight:"medium"},children:"Parameters:"}),(0,d.jsx)(h.default,{sx:{pl:1,mt:.5},children:Object.entries(a.properties).map(([b,c])=>(0,d.jsxs)(h.default,{sx:{mb:.5},children:[(0,d.jsxs)(i.default,{variant:"caption",component:"span",sx:{fontWeight:"medium"},children:[b,a.required?.includes(b)&&(0,d.jsx)(i.default,{variant:"caption",component:"span",color:"error.main",children:" *"}),": "]}),(0,d.jsx)(i.default,{variant:"caption",component:"span",color:"text.secondary",children:c.description||c.type||"No description"}),c.enum&&(0,d.jsx)(h.default,{sx:{pl:2,mt:.5},children:(0,d.jsxs)(i.default,{variant:"caption",color:"text.secondary",children:["Options: ",c.enum.join(", ")]})})]},b))})]}):(0,d.jsx)(h.default,{sx:{mt:1},children:(0,d.jsx)(i.default,{variant:"caption",color:"text.secondary",sx:{fontStyle:"italic"},children:"No parameters required."})}))(a.inputSchema)]})})}),(0,d.jsx)(m.A,{title:`Add ${a.name} handoff tool to prompt`,children:(0,d.jsx)(h.default,{sx:{position:"absolute",top:0,left:0,right:0,bottom:0}})})]},a.name))})})]})]})};var b0=c(67191),b1=c(85838);let b2=(0,B.h)("frontend/components/Flow/FlowManager/FlowBuilder/Modals/ProcessNodePropertiesModal/PromptTemplateEditor"),b3=(0,e.forwardRef)((a,b)=>{let{promptTemplate:c,handlePromptChange:f,excludeModelPrompt:g,setExcludeModelPrompt:k,excludeStartNodePrompt:l,setExcludeStartNodePrompt:m,excludeSystemPrompt:n,setExcludeSystemPrompt:p,isModelBound:q,models:r,nodeData:s,flowId:t}=a,[u,v]=(0,e.useState)(""),[w,x]=(0,e.useState)(!1),[y,A]=(0,e.useState)(null),B=(0,e.useRef)(null);(0,e.useImperativeHandle)(b,()=>({insertText:a=>{B.current&&B.current.insertText(a)},getMode:()=>B.current?B.current.getMode():"raw"}));let C=async()=>{if(b2.debug("fetchRenderedPrompt called with:",{flowId:t,nodeId:s?.id}),!t||!s||!s.id)return void A("Flow ID or Node ID is missing");x(!0),A(null);try{let a=await fetch("/api/flow/prompt-renderer",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({flowId:t,nodeId:s.id,options:{renderMode:"rendered",includeConversationHistory:!1,excludeModelPrompt:g,excludeStartNodePrompt:l,excludeSystemPrompt:n}})}),b=await a.json();if(!a.ok)throw Error(b.error||"Failed to render prompt");b2.debug("Rendered prompt received",{promptLength:b.prompt?.length}),v(b.prompt+"\n\n [Messages sent by User]")}catch(a){b2.error("Error fetching rendered prompt",a),A(a instanceof Error?a.message:"An unknown error occurred")}finally{x(!1)}};return(0,e.useEffect)(()=>{B.current&&"preview"===B.current.getMode()&&C()},[c,g,l,n,t,s?.id]),(0,d.jsxs)(h.default,{sx:{display:"flex",flexDirection:"column",height:"100%",pl:2},children:[(0,d.jsxs)(h.default,{sx:{display:"flex",justifyContent:"space-between",alignItems:"center",mb:2},children:[(0,d.jsx)(i.default,{variant:"h6",children:"Prompt Template"}),(0,d.jsxs)(h.default,{sx:{display:"flex",gap:2},children:[(0,d.jsx)(bf.A,{control:(0,d.jsx)(b0.A,{checked:g,onChange:a=>k(a.target.checked),color:"primary",size:"small"}),label:"Exclude Model Prompt"}),(0,d.jsx)(bf.A,{control:(0,d.jsx)(b0.A,{checked:l,onChange:a=>m(a.target.checked),color:"primary",size:"small"}),label:"Exclude Start Node Prompt"}),(0,d.jsx)(bf.A,{control:(0,d.jsx)(b0.A,{checked:n,onChange:a=>p(a.target.checked),color:"primary",size:"small"}),label:"Exclude System Prompt"})]})]}),(0,d.jsxs)(h.default,{sx:{mb:2,p:2,bgcolor:"rgba(0, 0, 0, 0.03)",borderRadius:1,fontSize:"0.85rem"},children:[(0,d.jsx)(i.default,{variant:"caption",sx:{display:"block",mb:1,fontWeight:"bold"},children:"Prompt Rendering Order:"}),(0,d.jsxs)(h.default,{sx:{display:"flex",flexDirection:"column",gap:.5},children:[!l&&(0,d.jsxs)(h.default,{sx:{display:"flex",alignItems:"center"},children:[(0,d.jsx)(i.default,{variant:"caption",sx:{color:"primary.main",fontWeight:"medium"},children:"1. Start Node Prompt"}),(0,d.jsx)(i.default,{variant:"caption",sx:{ml:1,color:"text.secondary"},children:"(from the Start node in this flow)"})]}),!g&&q&&(0,d.jsxs)(h.default,{sx:{display:"flex",alignItems:"center"},children:[(0,d.jsxs)(i.default,{variant:"caption",sx:{color:"secondary.main",fontWeight:"medium"},children:[l?"1.":"2."," Model Prompt"]}),(0,d.jsxs)(i.default,{variant:"caption",sx:{ml:1,color:"text.secondary"},children:["(from the selected model: ",(()=>{let a=s.properties?.boundModel;if(!a)return"None";let b=r.find(b=>b.id===a);return b?b.displayName||b.name:s.properties?.modelName||"None"})(),")"]})]}),(0,d.jsxs)(h.default,{sx:{display:"flex",alignItems:"center"},children:[(0,d.jsxs)(i.default,{variant:"caption",sx:{fontWeight:"medium"},children:[l||g||!q?l&&(g||!q)?"1.":"2.":"3."," This Node's Prompt"]}),(0,d.jsx)(i.default,{variant:"caption",sx:{ml:1,color:"text.secondary"},children:"(defined below)"})]}),(0,d.jsxs)(h.default,{sx:{display:"flex",alignItems:"center"},children:[(0,d.jsxs)(i.default,{variant:"caption",sx:{fontWeight:"medium"},children:[l||g||!q?l&&(g||!q)?"2.":"3.":"4."," Conversation History"]}),(0,d.jsx)(i.default,{variant:"caption",sx:{ml:1,color:"text.secondary"},children:"(coming from ChatCompletion endpoint)"})]})]})]}),(0,d.jsx)(h.default,{sx:{flexGrow:1,display:"flex",flexDirection:"column",height:"calc(100% - 120px)"},children:(0,d.jsx)(b1.A,{ref:B,value:c,onChange:f,label:"",height:"100%",onModeChange:a=>{"preview"===a&&C()},customPreviewRenderer:()=>w?(0,d.jsx)(h.default,{sx:{display:"flex",justifyContent:"center",alignItems:"center",height:"100%"},children:(0,d.jsx)(aD.default,{size:40})}):y?(0,d.jsxs)(h.default,{sx:{display:"flex",flexDirection:"column",p:2},children:[(0,d.jsx)(o.A,{severity:"error",sx:{mb:2},action:(0,d.jsx)(j.A,{color:"inherit",size:"small",onClick:C,children:"Retry"}),children:y}),(0,d.jsx)(i.default,{variant:"body2",color:"text.secondary",sx:{mb:2,textAlign:"center"},children:t?"Check that the flow and node IDs are valid and try again.":"This flow hasn't been saved yet. Save the flow first to enable complete preview."})]}):(0,d.jsxs)(h.default,{sx:{p:2},children:[(0,d.jsx)(i.default,{variant:"subtitle1",gutterBottom:!0,sx:{fontWeight:"medium"},children:"Complete Rendered Prompt"}),(0,d.jsx)(z.A,{elevation:0,sx:{p:2,overflow:"auto",bgcolor:"rgba(0, 0, 0, 0.02)",border:"1px solid rgba(0, 0, 0, 0.1)",borderRadius:1},children:(0,d.jsx)(h.default,{component:"pre",sx:{whiteSpace:"pre-wrap",wordBreak:"break-word",fontFamily:"monospace",fontSize:"0.875rem",m:0},children:u||"No rendered prompt available. Please check your flow configuration."})})]})})})]})});b3.displayName="PromptTemplateEditor";var b4=c(98256),b5=c(7675);let b6=({nodeData:a,handlePropertyChange:b,properties:c})=>(0,d.jsx)(d.Fragment,{children:c.length>0&&(0,d.jsxs)(h.default,{sx:{mt:3},children:[(0,d.jsx)(i.default,{variant:"subtitle1",gutterBottom:!0,children:"Node Properties"}),c.map(c=>(c=>{if(!a)return null;let e=a.properties?.[c.key]??"";switch(c.type){case"text":return(0,d.jsx)(t.A,{fullWidth:!0,label:c.label,multiline:c.multiline,rows:c.multiline?4:1,value:e,onChange:a=>b(c.key,a.target.value),margin:"normal",helperText:c.helperText},c.key);case"number":return(0,d.jsx)(t.A,{fullWidth:!0,type:"number",label:c.label,value:e,inputProps:{min:c.min,max:c.max,step:c.step},onChange:a=>{let d=a.target.value;b(c.key,""===d?void 0:Number(d))},margin:"normal",helperText:c.helperText},c.key);case"select":return(0,d.jsxs)(a3.A,{fullWidth:!0,margin:"normal",children:[(0,d.jsx)(b4.A,{children:c.label}),(0,d.jsx)(b5.A,{value:e||"",label:c.label,onChange:a=>b(c.key,a.target.value),children:c.options?.map(a=>(0,d.jsx)(R.A,{value:a,children:a},a))})]},c.key);case"boolean":return(0,d.jsx)(bf.A,{control:(0,d.jsx)(b0.A,{checked:e||!1,onChange:a=>b(c.key,a.target.checked)}),label:c.label,sx:{my:1}},c.key);default:return null}})(c))]})}),b7=(0,B.h)("frontend/components/Flow/FlowManager/FlowBuilder/Modals/ProcessNodePropertiesModal"),b8=({open:a,node:b,onClose:c,onSave:f,flowEdges:g=[],flowNodes:k=[],flowId:m,onConnectMcpServer:n})=>{b7.debug("ProcessNodePropertiesModal rendered with:",{node:b,flowId:m});let{nodeData:o,setNodeData:s,handlePropertyChange:t}=(a=>{let[b,c]=(0,e.useState)(null);(0,e.useEffect)(()=>{a&&c({id:a.id,...a.data,properties:{...a.data.properties}})},[a]);let d=(0,e.useCallback)((a,b)=>{c(c=>c?{...c,properties:{...c.properties,[a]:b}}:null)},[]);return{nodeData:b,setNodeData:c,handlePropertyChange:d}})(b),[v,w]=(0,e.useState)(""),[x,y]=(0,e.useState)(!1),[z,B]=(0,e.useState)(!1),[C,D]=(0,e.useState)(!1),[E,G]=(0,e.useState)(!1),[H,I]=(0,e.useState)("server"),{models:J,isLoadingModels:K,loadError:L,handleModelSelect:M,handleUnbindModel:N}=((a,b,c,d,f)=>{aY.debug("useModelManagement: Entering hook");let[g,h]=(0,e.useState)([]),[i,j]=(0,e.useState)(!1),[k,l]=(0,e.useState)(null);(0,e.useEffect)(()=>{aY.debug("useModelManagement useEffect: Checking if modal is open",{open:a}),a&&m()},[a]),(0,e.useEffect)(()=>{if(0===g.length)return;let a=b?.properties?.boundModel;if(!a)return;let d=g.find(b=>b.id===a);d&&d.name&&b?.properties?.modelName!==d.name&&c(a=>a&&a.properties?.modelName!==d.name?{...a,properties:{...a.properties,modelName:d.name}}:a)},[g,b?.properties?.boundModel,b?.properties?.modelName,c]);let m=async()=>{aY.debug("loadModels: Entering method"),j(!0),l(null);try{let a=await aQ.N.loadModels();h(a)}catch(a){aY.warn("loadModels: Failed to load models:",a),l("Failed to load models")}j(!1)},n=(0,e.useCallback)(a=>{aY.debug("handleModelSelect: Entering method",{modelId:a});let b=g.find(b=>b.id===a);b&&(c(c=>{if(!c)return null;let d=g.find(a=>a.id===c.properties?.boundModel),e=aX({currentLabel:c.label,nameIsCustom:c.properties?.nameIsCustom,defaultLabel:"Process Node",previousAutoLabel:d?d.displayName||d.name:void 0,nextAutoLabel:b.displayName||b.name});return{...c,label:e,properties:{...c.properties,boundModel:a,modelName:b.name}}}),f(!0))},[g,c,d,f]);return{models:g,isLoadingModels:i,loadError:k,handleModelSelect:n,handleUnbindModel:(0,e.useCallback)(()=>{aY.debug("handleUnbindModel: Entering method"),c(a=>{if(!a)return null;let{boundModel:b,modelName:c,...d}=a.properties;return{...a,properties:{...d,promptTemplate:d.promptTemplate||""}}}),f(!1)},[c,f])}})(a,o,s,w,y),{connectedMcpNodes:O,allServers:P,isLoadingServers:Q,selectedToolServerNodeId:R,serverToolsMap:S,serverStatuses:T,isLoadingTools:U,handleSelectToolServer:V,isLoadingSelectedServerTools:W,handleRetryServer:X,handleRestartServer:Y}=((a,b,c,d)=>{let f=(0,aZ.v)(),g=f.servers||[],h=f.isLoading||!1,[i,j]=(0,e.useState)({}),[k,l]=(0,e.useState)({}),[m,n]=(0,e.useState)({}),[o,p]=(0,e.useState)(null),[q,r]=(0,e.useState)(!1),s=(0,e.useMemo)(()=>b?((a,b)=>[...new Set(b.filter(b=>b.source===a&&b.data?.edgeType==="mcp"||b.target===a&&b.data?.edgeType==="mcp").map(b=>b.source===a?b.target:b.source))])(b.id,c):[],[b,c]),t=(0,e.useMemo)(()=>{if(!b||0===s.length)return[];if(!d||!Array.isArray(d))return a$.warn("flowNodes is not available or not an array when filtering connected servers"),[];try{let a=[],b=new Set;return s.forEach(c=>{if(b.has(c))return;let e=d.find(a=>a&&a.id===c);if(!e||!e.data||!e.data.properties)return void a$.warn(`Could not find valid MCP node data for ID ${c}`);let f=e.data.properties.boundServer;if(!f)return void a$.warn(`MCP node ${c} is not bound to any server.`);let h=g.find(a=>a.name===f),i=h?.status||"unknown",j=e.data.properties.enabledTools||[];a.push({nodeId:c,serverName:f,status:i,enabledTools:Array.isArray(j)?j:[]}),b.add(c)}),a$.debug("Generated connectedMcpNodes:",JSON.stringify(a)),a}catch(a){return a$.error("Error preparing connected MCP nodes:",a),[]}},[b,s,g,d]);(0,e.useEffect)(()=>{if(t&&t.length>0){let a={};t.forEach(b=>{let c=g.find(a=>a.name===b.serverName);a[b.serverName]=c?.status||b.status||"unknown"}),j(a)}},[t,g]),(0,e.useEffect)(()=>{if(a&&t.length>0){let a=Array.from(new Set(t.map(a=>a.serverName)));(async()=>{let b={},c={...k},d=a.filter(a=>{let b=g.find(b=>b.name===a);return b?.status==="connected"&&!k[a]&&!m[a]});0!==d.length&&(d.forEach(a=>{b[a]=!0}),n(a=>({...a,...b})),await Promise.all(d.map(async a=>{try{a$.debug(`Loading tools for server: ${a}`);let b=await F.S.listServerTools(a);if(b.error)a$.warn(`Error loading tools for ${a}:`,b.error),c[a]=[];else{let d=b.tools||[];a$.debug(`Loaded ${d.length} tools for ${a}`),c[a]=d}}catch(b){a$.warn(`Failed to load tools for server ${a}:`,b),c[a]=[]}finally{n(b=>({...b,[a]:!1}))}})),l(c))})()}},[a,t,g]);let u=(0,e.useRef)(k);(0,e.useEffect)(()=>{u.current=k},[k]);let v=(0,e.useCallback)(a=>{a$.debug(`Selected MCP Node ID: ${a}`),p(a);let b=t.find(b=>b.nodeId===a),c=b?.serverName;!c||u.current[c]||m[c]?r(m[c||""]||!1):(a$.debug(`Tools not loaded for server ${c}, loading now.`),r(!0),n(a=>({...a,[c]:!0})),F.S.listServerTools(c).then(a=>{let b=a.tools||[];a.error?a$.warn(`Error loading tools for ${c}:`,a.error):a$.debug(`Loaded ${b.length} tools for ${c}`),l(a=>({...a,[c]:b}))}).catch(a=>{a$.warn(`Failed to load tools for server ${c}:`,a),l(a=>({...a,[c]:[]}))}).finally(()=>{r(!1),n(a=>({...a,[c]:!1}))}))},[t,m]),w=(0,e.useRef)(f);return(0,e.useEffect)(()=>{w.current=f},[f]),{connectedMcpNodes:t,allServers:g,isLoadingServers:h,selectedToolServerNodeId:o,serverToolsMap:k,serverStatuses:i,isLoadingTools:m,handleSelectToolServer:v,isLoadingSelectedServerTools:q,handleRetryServer:(0,e.useCallback)(async a=>{a$.debug(`Retrying server: ${a}`),n(b=>({...b,[a]:!0}));try{await w.current.retryServer(a);let b=await F.S.listServerTools(a);if(b.error)return a$.warn(`Error loading tools for ${a} after retry:`,b.error),!1;{let c=b.tools||[];return a$.debug(`Loaded ${c.length} tools for ${a} after retry`),l(b=>({...b,[a]:c})),!0}}catch(b){return a$.warn(`Failed to retry or load tools for server ${a}:`,b),!1}finally{n(b=>({...b,[a]:!1}))}},[]),handleRestartServer:(0,e.useCallback)(async a=>{a$.debug(`Restarting server: ${a}`),n(b=>({...b,[a]:!0}));try{await F.S.restartServer(a),await new Promise(a=>setTimeout(a,1e3));let b=await F.S.listServerTools(a);if(b.error)return a$.warn(`Error loading tools for ${a} after restart:`,b.error),!1;{let c=b.tools||[];return a$.debug(`Loaded ${c.length} tools for ${a} after restart`),l(b=>({...b,[a]:c})),!0}}catch(b){return a$.warn(`Failed to restart or load tools for server ${a}:`,b),!1}finally{n(b=>({...b,[a]:!1}))}},[])}})(a,b,g,k),Z=((a,b,c,d)=>{let[f,g]=(0,e.useState)([]),[h,i]=(0,e.useState)(!1),j=(0,e.useMemo)(()=>b?function(a,b){let c=[];for(let d of b)!("string"==typeof d.data?.edgeType&&d.data.edgeType.includes("mcp"))&&(d.source===a?c.push(d.target):d.target===a&&d.data?.bidirectional&&c.push(d.source));return[...new Set(c)]}(b.id,c):[],[b,c]);return(0,e.useEffect)(()=>{if(a&&b){i(!0);try{let a=j.map(a=>d.find(b=>b.id===a)).filter(a=>!!a),b=function(a){let b=new Set,c=new Map;for(let d of a){if(c.has(d.id))continue;let a=function(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"}(d.label,d.type),e=`${a_}${a}`;if(b.has(e)){let c=2;for(;b.has(`${a_}${a}_${c}`);)c++;e=`${a_}${a}_${c}`}b.add(e),c.set(d.id,e)}return c}(a.map(a=>({id:a.id,label:a.data.label,type:a.type||a.data.type}))),c=a.map(a=>({name:b.get(a.id)||`handoff_to_${a.id}`,description:function(a){if(a.userDescription&&a.userDescription.trim())return a0(a.userDescription,1500);let b=`Hand off execution to ${a.label} (${a.type}).`,c=[];!function a(b,c,d){let e=" ".repeat(c);if(b.userDescription&&b.userDescription.trim())return void d.push(`${e}${a0(b.userDescription,200)}`);if("subflow"===b.type){if(b.subflowMissing)return void d.push(`${e}Runs a subflow (referenced flow not found).`);if(b.subflowDetailsUnavailable){let a=b.subflowName?` "${b.subflowName}"`:"";d.push(`${e}Runs a subflow${a} (contents summarised when the flow runs).`);return}if(d.push(`${e}Runs the subflow "${b.subflowName??"unknown"}", which contains:`),b.depthCapReached)return void d.push(`${e} (nested subflows omitted — recursion depth limit reached)`);let f=b.children??[];if(0===f.length)return void d.push(`${e} (no process or subflow steps)`);for(let b of f.slice(0,10))d.push(`${e} - ${b.label}:`),a(b,c+2,d);return void(f.length>10&&d.push(`${e} - …and ${f.length-10} more step(s)`))}if(b.modelName&&d.push(`${e}Model: ${b.modelName}`),b.promptSummary&&d.push(`${e}Role: ${a0(b.promptSummary,200)}`),b.servers&&b.servers.length>0)for(let a of b.servers)if(a.connected&&a.tools&&a.tools.length>0){let b=a.tools.slice(0,10),c=a.tools.length-b.length,f=c>0?`, +${c} more`:"";d.push(`${e}Tools (${a.name}): ${b.join(", ")}${f}`)}else d.push(`${e}Tools (${a.name}): server not connected`)}(a,0,c);let d=c.join("\n").trim(),e=d?`${b}
1
+ (()=>{var a={};a.id=3080,a.ids=[3080],a.modules={261:a=>{"use strict";a.exports=require("next/dist/shared/lib/router/utils/app-paths")},3295:a=>{"use strict";a.exports=require("next/dist/server/app-render/after-task-async-storage.external.js")},10057:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>d});let d=(0,c(97954).registerClientReference)(function(){throw Error("Attempted to call the default export of \"C:\\\\Users\\\\MarioAndreschak\\\\Documents\\\\GitHub\\\\FLUJO\\\\src\\\\app\\\\flows\\\\page.tsx\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"C:\\Users\\MarioAndreschak\\Documents\\GitHub\\FLUJO\\src\\app\\flows\\page.tsx","default")},10846:a=>{"use strict";a.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},13790:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>da});var d=c(21124),e=c(38301),f=c.n(e),g=c(60839),h=c(81637),i=c(79515),j=c(20830),k=c(49565),l=c(44079),m=c(43312),n=c(99561),o=c(88745),p=c(40512),q=c(83899),r=c(52327),s=c(7503),t=c(37674),u=c(19925),v=c(27080);let w=(0,v.A)((0,d.jsx)("path",{d:"M20 11H7.83l5.59-5.59L12 4l-8 8 8 8 1.41-1.41L7.83 13H20z"}),"ArrowBack");var x=c(47902);let y=(0,v.A)((0,d.jsx)("path",{d:"m19 9 1.25-2.75L23 5l-2.75-1.25L19 1l-1.25 2.75L15 5l2.75 1.25zm-7.5.5L9 4 6.5 9.5 1 12l5.5 2.5L9 20l2.5-5.5L17 12zM19 15l-1.25 2.75L15 19l2.75 1.25L19 23l1.25-2.75L23 19l-2.75-1.25z"}),"AutoAwesome");var z=c(18168),A=c(54573),B=c(91059),C=c(19815),D=c(95791),E=c(2117),F=c(63281),G=c(28055),H=c(46973);H.TG.ArrowClosed;let I={type:"mcpEdge",animated:!1,style:{stroke:"#1976d2",strokeWidth:2},markerEnd:{type:H.TG.ArrowClosed,width:20,height:20,color:"#1976d2"},markerStart:{type:H.TG.ArrowClosed,width:20,height:20,color:"#1976d2"}};function J(a){return!!a&&a.includes("mcp")}function K(a,b,c,d){if("start"===c)return"Start nodes cannot have incoming connections";if("finish"===a)return"Finish nodes cannot have outgoing connections";if("mcp"===a||"mcp"===c||J(b)||J(d)){if(("mcp"!==a||"process"!==c)&&("process"!==a||"mcp"!==c))return"MCP connections must link an MCP node to a Process node via MCP handles";if("process"===a&&!J(b))return"Connect MCP nodes from the Process node's left/right MCP handles"}return null}function L(a,b,c){return b.filter(b=>b.data?.edgeType!=="mcp"&&(b.source===a?b.target!==c:!!(b.target===a&&b.data?.bidirectional)&&b.source!==c))}function M(a,b,c=[]){if(!a.source||!a.target||!a.sourceHandle||!a.targetHandle)return console.error("Invalid connection: Missing source, target, or handles",a),!1;let d=b.find(b=>b.id===a.source),e=b.find(b=>b.id===a.target);if(!d||!e)return console.error("Invalid connection: Source or target node not found",a),!1;let f=K(d.type,a.sourceHandle,e.type,a.targetHandle);return f?(console.error(`Invalid connection: ${f}`),!1):"subflow"!==d.type||!(L(d.id,c,a.target).length>0)||(console.error("Invalid connection: Subflow nodes can only have one outgoing connection"),!1)}function N(a,b){let c=b.find(b=>b.id===a.source),d=b.find(b=>b.id===a.target),e=a.sourceHandle,f=a.targetHandle,g=c?.type==="mcp"||d?.type==="mcp"||J(e)||J(f),h=`${a.source}:${e}->${a.target}:${f}`;return g?{id:h,...a,type:"mcpEdge",data:{edgeType:"mcp"},animated:!1,markerEnd:I.markerEnd,markerStart:I.markerStart,style:I.style}:{id:h,...a,type:"custom",data:{edgeType:"standard"},animated:!0}}function O(a,b,c=[]){let d=b.find(b=>b.id===a.source),e=b.find(b=>b.id===a.target);return!!d&&!!e&&("subflow"!==e.type||!(L(e.id,c,a.source).length>0))&&null===K(e.type,null,d.type,null)}function P(a,b){let c=a=>a.data?.edgeType==="mcp";return b.filter(b=>b.id===a.id||(c(a)?c(b)&&(b.source===a.source&&b.target===a.target||b.source===a.target&&b.target===a.source):!c(b)&&b.source===a.source&&b.target===a.target)).map(a=>a.id)}var Q=c(6537),R=c(8070),S=c(94367),T=c(50553),U=c(84233),V=c(7118),W=c(91034),X=c(38941),Y=c(95345),Z=c(12033);let $=({open:a,position:b,onClose:c,onDelete:e,onEditProperties:f,onCopy:g,onPaste:h,canPaste:i,canCopy:j,nodeId:k,selection:l,edgeId:m})=>{let n=[];return k&&!l&&n.push((0,d.jsxs)(S.A,{onClick:()=>{f&&f(),c()},children:[(0,d.jsx)(T.A,{children:(0,d.jsx)(Z.A,{fontSize:"small"})}),(0,d.jsx)(U.A,{children:"Edit Properties"})]},"edit")),g&&(k||l)&&n.push((0,d.jsxs)(S.A,{onClick:()=>{g&&g(),c()},disabled:!j,children:[(0,d.jsx)(T.A,{children:(0,d.jsx)(X.A,{fontSize:"small"})}),(0,d.jsx)(U.A,{children:"Copy"})]},"copy")),h&&n.push((0,d.jsxs)(S.A,{onClick:()=>{h&&h(),c()},disabled:!i,children:[(0,d.jsx)(T.A,{children:(0,d.jsx)(Y.A,{fontSize:"small"})}),(0,d.jsx)(U.A,{children:"Paste"})]},"paste")),(k||m||l)&&n.push((0,d.jsx)(B.A,{},"delete-divider"),(0,d.jsxs)(S.A,{onClick:()=>{e(),c()},sx:{color:"error.main"},children:[(0,d.jsx)(T.A,{sx:{color:"error.main"},children:(0,d.jsx)(W.A,{fontSize:"small"})}),(0,d.jsx)(U.A,{children:"Delete"})]},"delete")),(0,d.jsx)(V.A,{open:a,onClose:c,anchorReference:"anchorPosition",anchorPosition:null!==b.y&&null!==b.x?{top:b.y,left:b.x}:void 0,children:n})};var _=c(90837),aa=c(97004);function ab(a,b){return b.find(b=>b.id===a)}let ac=(0,C.h)("components/flow/FlowBuilder/Canvas/hooks/useCanvasEvents.ts"),ad=(0,v.A)([(0,d.jsx)("path",{d:"M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14"},"0"),(0,d.jsx)("path",{d:"M12 10h-2v2H9v-2H7V9h2V7h1v2h2z"},"1")],"ZoomIn"),ae=(0,v.A)((0,d.jsx)("path",{d:"M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14M7 9h5v1H7z"}),"ZoomOut"),af=(0,v.A)((0,d.jsx)("path",{d:"M17 4h3c1.1 0 2 .9 2 2v2h-2V6h-3zM4 8V6h3V4H4c-1.1 0-2 .9-2 2v2zm16 8v2h-3v2h3c1.1 0 2-.9 2-2v-2zM7 18H4v-2H2v2c0 1.1.9 2 2 2h3zM18 8H6v8h12z"}),"FitScreen"),ag=(0,z.Ay)(j.A)(({theme:a})=>({minWidth:"36px",padding:"6px",margin:"0 4px",backgroundColor:"dark"===a.palette.mode?"rgba(255, 255, 255, 0.05)":"rgba(0, 0, 0, 0.02)","&:hover":{backgroundColor:"dark"===a.palette.mode?"rgba(255, 255, 255, 0.1)":"rgba(0, 0, 0, 0.05)"}})),ah=()=>{let{zoomIn:a,zoomOut:b,fitView:c}=(0,D.VH)();return(0,d.jsx)(D.Zk,{position:"top-right",style:{margin:"10px"},children:(0,d.jsxs)("div",{style:{display:"flex",gap:"5px"},children:[(0,d.jsx)(m.A,{title:"Zoom In",children:(0,d.jsx)(ag,{variant:"outlined",size:"small",onClick:()=>a(),children:(0,d.jsx)(ad,{fontSize:"small"})})}),(0,d.jsx)(m.A,{title:"Zoom Out",children:(0,d.jsx)(ag,{variant:"outlined",size:"small",onClick:()=>b(),children:(0,d.jsx)(ae,{fontSize:"small"})})}),(0,d.jsx)(m.A,{title:"Fit View",children:(0,d.jsx)(ag,{variant:"outlined",size:"small",onClick:()=>c(),children:(0,d.jsx)(af,{fontSize:"small"})})})]})})},ai=({showMiniMap:a=!0,showControls:b=!0,showBackground:c=!0})=>{let e=(0,g.A)(),f="dark"===e.palette.mode;return(0,d.jsxs)(d.Fragment,{children:[c&&(0,d.jsx)(D.VS,{color:f?e.palette.text.disabled:e.palette.divider,gap:20,size:1}),b&&(0,d.jsx)(D.H2,{}),a&&(0,d.jsx)(D.of,{nodeColor:f?e.palette.primary.dark:e.palette.primary.light,maskColor:f?"rgba(0, 0, 0, 0.4)":"rgba(255, 255, 255, 0.6)"})]})},aj=(0,C.h)("components/flow/FlowBuilder/Canvas/Canvas.tsx"),ak="flujo:flowClipboard",al=null;function am(a){al=a;try{localStorage.setItem(ak,JSON.stringify(a))}catch(a){aj.warn("Could not persist flow clipboard to localStorage",a)}}let an={start:R.vm,process:R.Uw,finish:R.IK,mcp:R.v2,subflow:R.lA},ao={custom:_.jY,mcpEdge:_.oY},ap=({open:a,position:b,onClose:c,onSelectNodeType:e,sourceNodeType:f,sourceHandleId:j})=>{let k=(0,g.A)(),l=function(a,b){let c=["process","finish","mcp","subflow"];return a&&b?c.filter(c=>null===K(a,b,c,`${c}-top`)):c}(f,j);aj.debug(`NodeSelectionModal: Source node type: ${f}, Source handle ID: ${j}`),aj.debug(`NodeSelectionModal: Valid node types: ${l.join(", ")}`);let m=[{type:"process",label:"Process Node",description:"Let a LLM do your work"},{type:"finish",label:"Finish Node",description:"End your flow here"},{type:"mcp",label:"MCP Node",description:"Add functionality"},{type:"subflow",label:"Subflow Node",description:"Run another flow"}].filter(a=>l.includes(a.type));return b?(0,d.jsx)(Q.A,{open:a,onClose:c,"aria-labelledby":"node-selection-modal",children:(0,d.jsxs)(h.default,{sx:{position:"absolute",top:"50%",left:"50%",transform:"translate(-50%, -50%)",width:300,bgcolor:"background.paper",borderRadius:2,boxShadow:24,p:4},children:[(0,d.jsx)(i.default,{variant:"h6",component:"h2",gutterBottom:!0,children:"Select Node Type"}),(0,d.jsx)(h.default,{display:"flex",flexDirection:"column",gap:2,children:m.map(a=>(0,d.jsxs)(h.default,{sx:{padding:2,borderRadius:1,border:`2px solid ${"process"===a.type?k.palette.secondary.main:"finish"===a.type?k.palette.success.main:"subflow"===a.type?k.palette.warning.main:k.palette.info.main}`,cursor:"pointer","&:hover":{boxShadow:3}},onClick:()=>e(a.type,b),children:[(0,d.jsxs)(h.default,{display:"flex",alignItems:"center",gap:1,mb:1,children:[(a=>{switch(a){case"process":default:return(0,d.jsx)("div",{style:{width:24,height:24,backgroundColor:k.palette.secondary.main,borderRadius:"50%"}});case"finish":return(0,d.jsx)("div",{style:{width:24,height:24,backgroundColor:k.palette.success.main,borderRadius:"50%"}});case"mcp":return(0,d.jsx)("div",{style:{width:24,height:24,backgroundColor:k.palette.info.main,borderRadius:"50%"}});case"subflow":return(0,d.jsx)("div",{style:{width:24,height:24,backgroundColor:k.palette.warning.main,borderRadius:"50%"}})}})(a.type),(0,d.jsx)(i.default,{variant:"subtitle1",fontWeight:"bold",children:a.label})]}),(0,d.jsx)(i.default,{variant:"body2",color:"text.secondary",children:a.description})]},a.type))})]})}):null},aq=(0,z.Ay)("div")(({theme:a})=>({width:"100%",height:"80vh",border:`1px solid ${a.palette.divider}`,borderRadius:"4px",background:a.palette.background.paper,position:"relative"})),ar=(0,e.forwardRef)((a,b)=>{let c=(0,g.A)(),{nodes:f,edges:h,onNodesChange:i,onEdgesChange:j,onDrop:k,onDragOver:l,onInit:m,reactFlowWrapper:n,onEditNode:o}=a,{contextMenu:p,selectedElements:q,closeContextMenu:r,handleDelete:s,onNodeContextMenu:t,onEdgeContextMenu:u,onPaneContextMenu:v,onSelectionContextMenu:w}=function(a){let{deleteElements:b}=(0,D.VH)(),[c,d]=(0,e.useState)({open:!1,position:{x:0,y:0}}),[f,g]=(0,e.useState)({nodes:[],edges:[]});(0,D.p4)({onChange:({nodes:a,edges:b})=>{let c=a.map(a=>a.id),d=b.map(a=>a.id);ac.debug(`Selection changed: ${c.length} nodes, ${d.length} edges selected`),g({nodes:c,edges:d})}});let h=(0,e.useCallback)((a,b,c,e)=>{a.preventDefault(),b?ac.debug(`Context menu opened for node: ${b}`):c?ac.debug(`Context menu opened for edge: ${c}`):e?ac.debug("Context menu opened for the current selection"):ac.debug(`Context menu opened on canvas at (${a.clientX}, ${a.clientY})`),d({open:!0,position:{x:a.clientX,y:a.clientY},nodeId:b,edgeId:c,selection:e})},[]),i=(0,e.useCallback)(()=>{ac.debug("Context menu closed"),d(a=>({...a,open:!1}))},[]),j=(0,e.useCallback)(()=>{if(c.selection)ac.debug("handleDelete: Deleting the current selection"),b({nodes:f.nodes.map(a=>({id:a})),edges:f.edges.map(a=>({id:a}))});else if(c.nodeId){if(ac.debug(`handleDelete: Attempting to delete node ${c.nodeId}`),!function(a,b){let c=ab(a,b);return!!c&&"start"!==c.type}(c.nodeId,a)){ac.warn(`Cannot delete Start node: ${c.nodeId}`),alert("Start nodes cannot be deleted");return}b({nodes:[{id:c.nodeId}]})}else c.edgeId&&(ac.debug(`handleDelete: Deleting edge ${c.edgeId}`),b({edges:[{id:c.edgeId}]}))},[c,b,a,f]),k=(0,e.useCallback)((a,b)=>{h(a,b.id)},[h]),l=(0,e.useCallback)((a,b)=>{h(a,void 0,b.id)},[h]),m=(0,e.useCallback)(a=>{h(a)},[h]),n=(0,e.useCallback)(a=>{h(a,void 0,void 0,!0)},[h]);return{contextMenu:c,selectedElements:f,onContextMenu:h,closeContextMenu:i,handleDelete:j,onNodeContextMenu:k,onEdgeContextMenu:l,onPaneContextMenu:m,onSelectionContextMenu:n}}(f),{deleteElements:x}=(0,D.VH)(),y=(0,D.PI)(),z=(0,e.useRef)(null),[A,B]=(0,e.useState)(null),[C,G]=(0,e.useState)({open:!1,position:null}),I=(0,e.useCallback)(a=>[...f.filter(a=>a.selected).map(a=>({type:"select",id:a.id,selected:!1})),{type:"add",item:{...a,selected:!0}}],[f]);(0,e.useEffect)(()=>{if(!o)return;let a=a=>{if(a.detail&&a.detail.nodeId){let b=ab(a.detail.nodeId,f);b&&o(b)}};return document.addEventListener("editNode",a),()=>{document.removeEventListener("editNode",a)}},[f,o]);let K=(0,e.useCallback)(a=>{if(!a.sourceHandle||!a.targetHandle)return void aj.error("Invalid connection: Missing source or target handle",a);let b=y.getState().connection.fromHandle?.type==="target";if(!M(a,f,h))return;let d=N(a,f);if(d.data?.edgeType==="standard"){let d=a=>a.data?.edgeType!=="mcp",e=a=>!!a.data?.bidirectional,g=h.find(b=>d(b)&&b.source===a.source&&b.target===a.target),i=h.find(b=>d(b)&&b.source===a.target&&b.target===a.source),k=a=>{aj.info(`Merging reverse connection into bidirectional edge ${a.id}`),j([{type:"replace",id:a.id,item:{...a,data:{...a.data,bidirectional:!0},markerStart:{type:H.TG.ArrowClosed,width:20,height:20,color:c.palette.text.secondary}}}])};if(b){let a=g??i;return a?void(!e(a)&&O(a,f,h)&&k(a)):void aj.info("Connection drawn from a top handle is only allowed to convert an existing edge to bidirectional")}if(g&&e(g))return;if(i){!e(i)&&O(i,f,h)&&k(i);return}}j([...P(d,h).map(a=>({type:"remove",id:a})),{type:"add",item:d}])},[f,h,j,y,c.palette.text.secondary]);(0,e.useEffect)(()=>{let a=a=>{let{edgeId:b,waypoints:c}=a.detail,d=h.find(a=>a.id===b);if(!d)return;let{waypoint:e,...f}=d.data??{};j([{type:"replace",id:b,item:{...d,data:{...f,waypoints:c??void 0}}}])};return document.addEventListener(aa.R,a),()=>document.removeEventListener(aa.R,a)},[h,j]);let L=(0,e.useCallback)(async({nodes:a,edges:b})=>{let c=a.filter(a=>"start"!==a.type),d=new Set(c.map(a=>a.id)),e=new Set(a.map(a=>a.id)),f=b.filter(a=>!!(a.selected||d.has(a.source)||d.has(a.target))||!(e.has(a.source)||e.has(a.target)));return(0!==c.length||0!==f.length)&&{nodes:c,edges:f}},[]),Q=(0,e.useCallback)(a=>{B(a),m&&m(a)},[m]);(0,e.useEffect)(()=>{let a=a=>{if(!a.detail||!A)return;let{nodeType:b,position:c}=a.detail,d=F.g.createNode(b,c);i(I(d)),o&&o(d)};return document.addEventListener("addNodeFromPalette",a),()=>{document.removeEventListener("addNodeFromPalette",a)}},[A,i,I,o]);let R=(0,e.useCallback)(()=>{if(p.nodeId&&o){let a=ab(p.nodeId,f);a&&o(a)}},[p.nodeId,f,o]),S=(0,e.useCallback)((a,b)=>{a.preventDefault(),o&&o(b)},[o]),T=(0,e.useCallback)((a,b)=>{let{fromNode:c,fromHandle:d}=b;if(!c||!d?.id||!A)return void aj.debug("onConnectEnd: No valid connection start data");if(aj.debug(`onConnectEnd: Connection ended from node ${c.id}, handle ${d.id}`),"target"===d.type&&!J(d.id))return void aj.debug("onConnectEnd: Drag from a target handle cannot create a new node");if("subflow"===c.type&&"source"===d.type&&h.some(a=>{let b=a.data;return b?.edgeType!=="mcp"&&(a.source===c.id||a.target===c.id&&!!b?.bidirectional)}))return void aj.debug("onConnectEnd: Subflow already has an outgoing connection; not offering a new node");if(!a.target.classList.contains("react-flow__pane"))return;let e=a instanceof MouseEvent?a:a.changedTouches[0],f=A.screenToFlowPosition({x:e.clientX,y:e.clientY});aj.debug(`onConnectEnd: Connection dropped on pane at position (${f.x}, ${f.y})`),G({open:!0,position:f,sourceNodeId:c.id,sourceNodeType:c.type,sourceHandleId:d.id})},[A,h]),U=(0,e.useCallback)((a,b)=>{aj.debug(`handleNodeTypeSelection: Selected node type ${a} at position (${b.x}, ${b.y})`);let c=F.g.createNode(a,b);i(I(c));let{sourceNodeId:d,sourceHandleId:e}=C,g=d?ab(d,f):void 0;if(g&&e){let b=`${a}-top`,d={source:g.id,sourceHandle:e,target:c.id,targetHandle:b};if(aj.debug(`handleNodeTypeSelection: Creating connection from ${d.source} to ${d.target}`),M(d,[...f,c],h)){let a=N(d,[...f,c]);j([...P(a,h).map(a=>({type:"remove",id:a})),{type:"add",item:a}]),aj.debug(`handleNodeTypeSelection: Edge created with id ${a.id}`)}}G({open:!1,position:null}),o&&o(c)},[C,f,h,I,i,j,o]),V=(0,e.useCallback)(()=>{aj.debug("handleCloseNodeSelectionModal: Closing node selection modal"),G({open:!1,position:null})},[]),W=(0,e.useCallback)(()=>{let a=new Set(q.nodes),b=f.filter(b=>a.has(b.id)&&"start"!==b.type);if(0===b.length)return!1;let c=new Set(b.map(a=>a.id)),d=h.filter(a=>c.has(a.source)&&c.has(a.target));return am({nodes:JSON.parse(JSON.stringify(b)),edges:JSON.parse(JSON.stringify(d))}),aj.debug(`Copied ${b.length} node(s) and ${d.length} edge(s)`),!0},[q,f,h]),X=(0,e.useCallback)(()=>{let a=al;if(!a)try{let b=localStorage.getItem(ak);b&&(a=JSON.parse(b))}catch(a){aj.warn("Could not read flow clipboard from localStorage",a)}if(!a||!a.nodes||0===a.nodes.length)return void aj.debug("Paste requested but clipboard is empty");let b=new Map;a.nodes.forEach(a=>b.set(a.id,(0,E.A)()));let c=a.nodes.map(a=>({...a,id:b.get(a.id),position:{x:(a.position?.x??0)+40,y:(a.position?.y??0)+40},selected:!0,data:{...a.data}})),d=(a.edges||[]).filter(a=>b.has(a.source)&&b.has(a.target)).map(a=>({...a,id:(0,E.A)(),source:b.get(a.source),target:b.get(a.target),selected:!1}));i([...f.filter(a=>a.selected).map(a=>({type:"select",id:a.id,selected:!1})),...c.map(a=>({type:"add",item:a}))]),d.length>0&&j(d.map(a=>({type:"add",item:a}))),aj.info(`Pasted ${c.length} node(s) and ${d.length} edge(s)`)},[f,i,j]),Y=(0,e.useCallback)(a=>{let b=a.ctrlKey||a.metaKey,c=a.key.toLowerCase();if(b&&"c"===c){W()&&a.preventDefault();return}if(b&&"x"===c){W()&&(a.preventDefault(),x({nodes:q.nodes.map(a=>({id:a})),edges:q.edges.map(a=>({id:a}))}));return}if(b&&"v"===c){a.preventDefault(),X();return}},[W,X,x,q]),Z=(0,e.useCallback)(()=>{if(p.nodeId&&!q.nodes.includes(p.nodeId)){let a=f.find(a=>a.id===p.nodeId);a&&"start"!==a.type&&(am({nodes:JSON.parse(JSON.stringify([a])),edges:[]}),aj.debug("Copied right-clicked node to clipboard"));return}W()},[p.nodeId,q,f,W]),_=(0,e.useMemo)(()=>{if(al)return!0;try{return!!localStorage.getItem(ak)}catch{return!1}},[p.open]),ad=(0,e.useMemo)(()=>{if(p.selection){let a=new Set(q.nodes);return f.some(b=>a.has(b.id)&&"start"!==b.type)}if(p.nodeId){let a=f.find(a=>a.id===p.nodeId);return!!a&&"start"!==a.type}return!1},[p.selection,p.nodeId,q,f]);return(0,d.jsxs)(aq,{ref:a=>{b&&("function"==typeof b?b(a):b.current=a),n&&(n.current=a),z.current=a},children:[(0,d.jsxs)(D.Gc,{nodes:f,edges:h,nodeTypes:an,edgeTypes:ao,defaultEdgeOptions:(0,e.useMemo)(()=>({type:"custom",animated:!0,style:{stroke:c.palette.text.secondary,strokeWidth:2},markerEnd:{type:H.TG.ArrowClosed,width:20,height:20,color:c.palette.text.secondary}}),[c.palette.text.secondary]),connectionLineType:H.Do.SmoothStep,onNodesChange:i,onEdgesChange:j,onConnect:K,onBeforeDelete:L,deleteKeyCode:["Backspace","Delete"],onDrop:k,onDragOver:l,onInit:Q,onNodeContextMenu:t,onEdgeContextMenu:u,onPaneContextMenu:v,onSelectionContextMenu:w,onKeyDown:Y,onNodeDoubleClick:S,onConnectEnd:T,tabIndex:0,fitView:!0,attributionPosition:"bottom-right",minZoom:.1,maxZoom:2,snapToGrid:!0,snapGrid:[15,15],connectOnClick:!1,children:[(0,d.jsx)(ah,{}),(0,d.jsx)(ai,{})]}),(0,d.jsx)($,{open:p.open,position:p.position,onClose:r,onDelete:s,onEditProperties:R,onCopy:Z,onPaste:X,canPaste:_,canCopy:ad,nodeId:p.nodeId,selection:p.selection,edgeId:p.edgeId}),(0,d.jsx)(ap,{open:C.open,position:C.position,onClose:V,onSelectNodeType:U,sourceNodeType:C.sourceNodeType,sourceHandleId:C.sourceHandleId})]})});ar.displayName="Canvas";var as=c(98540),at=c(83144),au=c(88970);let av=(0,C.h)("components/flow/FlowBuilder/NodePalette.tsx"),aw="NodePalette",ax=(0,z.Ay)(A.A)(({theme:a})=>({padding:a.spacing(2),width:"200px",height:"80vh",display:"flex",flexDirection:"column",gap:a.spacing(2)})),ay=(0,z.Ay)(A.A,{shouldForwardProp:a=>"nodeType"!==a})(({theme:a,nodeType:b})=>({padding:a.spacing(1.5),minWidth:"180px",borderRadius:"8px",backgroundColor:a.palette.background.paper,border:`2px solid ${"process"===b?a.palette.secondary.main:"finish"===b?a.palette.success.main:"subflow"===b?a.palette.warning.main:a.palette.info.main}`,boxShadow:a.shadows[2],transition:"all 0.2s ease",cursor:"grab","&:hover":{boxShadow:`0 0 0 1px ${"process"===b?a.palette.secondary.main:"finish"===b?a.palette.success.main:"subflow"===b?a.palette.warning.main:a.palette.info.main}, 0 3px 10px rgba(0,0,0,0.1)`},"&:active":{cursor:"grabbing"}})),az=(0,z.Ay)(h.default,{shouldForwardProp:a=>"nodeType"!==a})(({theme:a,nodeType:b})=>({display:"flex",alignItems:"center",justifyContent:"space-between",borderBottom:`1px solid ${"process"===b?a.palette.secondary.light:"finish"===b?a.palette.success.light:"subflow"===b?a.palette.warning.light:a.palette.info.light}`,marginBottom:a.spacing(1),paddingBottom:a.spacing(.5)})),aA=(0,z.Ay)(h.default)({display:"flex",alignItems:"center",gap:"8px"}),aB=[{type:"process",label:"Process Node",description:"Let a LLM do your work"},{type:"finish",label:"Finish Node",description:"End your flow here"},{type:"mcp",label:"MCP Node",description:"Add functionality"},{type:"subflow",label:"Subflow Node",description:"Run another flow as a step"}],aC=()=>{av.debug(`${aw}: Entering component`),(0,g.A)();let a=(0,e.useCallback)(a=>{av.debug(`${aw}.onNodeDoubleClick: Double-clicked on ${a} node`);let b=new CustomEvent("addNodeFromPalette",{detail:{nodeType:a,position:{x:250,y:150}}});document.dispatchEvent(b),av.info(`${aw}.onNodeDoubleClick: Dispatched addNodeFromPalette event for ${a} node`)},[]);return av.debug(`${aw}: Rendering component`),(0,d.jsxs)(ax,{elevation:2,children:[(0,d.jsx)(i.default,{variant:"h6",gutterBottom:!0,children:"Node Types"}),(0,d.jsx)(h.default,{display:"flex",flexDirection:"column",gap:2,children:aB.map(b=>(0,d.jsxs)(ay,{nodeType:b.type,elevation:1,draggable:!0,onDragStart:a=>((a,b)=>{av.debug(`${aw}.onDragStart: Entering method with nodeType=${b}`),a.dataTransfer.setData("application/reactflow",b),a.dataTransfer.effectAllowed="move";let c=document.createElement("div");c.innerHTML=`<div style="padding: 10px; background: white; border: 1px solid #ccc; border-radius: 4px;">${b} Node</div>`,document.body.appendChild(c),av.debug(`${aw}.onDragStart: Created drag preview element`);try{a.dataTransfer.setDragImage(c,75,25),av.debug(`${aw}.onDragStart: Set drag image with offset (75, 25)`)}catch(a){av.error(`${aw}.onDragStart: Error setting drag image:`,a)}setTimeout(()=>{document.body.removeChild(c),av.debug(`${aw}.onDragStart: Removed drag preview element`)},0),av.debug(`${aw}.onDragStart: Drag operation initialized`)})(a,b.type),onDragEnd:a=>{var c;return c=b.type,void av.debug(`${aw}.onDragEnd: Drag operation ended for nodeType=${c}`)},onDoubleClick:()=>a(b.type),children:[(0,d.jsx)(az,{nodeType:b.type,children:(0,d.jsxs)(aA,{children:[(a=>{switch(a){case"process":default:return(0,d.jsx)(as.A,{color:"secondary"});case"finish":return(0,d.jsx)(at.A,{color:"success"});case"mcp":return(0,d.jsx)(as.A,{color:"info"});case"subflow":return(0,d.jsx)(au.A,{color:"warning"})}})(b.type),(0,d.jsx)(i.default,{variant:"subtitle2",fontWeight:"bold",children:b.label})]})}),(0,d.jsx)(i.default,{variant:"caption",color:"text.secondary",children:b.description})]},b.type))})]})};var aD=c(41893),aE=c(8521),aF=c(89490),aG=c(75983),aH=c(71439);let aI=(0,v.A)((0,d.jsx)("path",{fillRule:"evenodd",d:"M20 3H4c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2M10 17H5v-2h5zm0-4H5v-2h5zm0-4H5V7h5zm4.82 6L12 12.16l1.41-1.41 1.41 1.42L17.99 9l1.42 1.42z"}),"FactCheck");var aJ=c(22797);let aK=(0,v.A)([(0,d.jsx)("path",{d:"M12 5.99 19.53 19H4.47zM12 2 1 21h22z"},"0"),(0,d.jsx)("path",{d:"M13 16h-2v2h2zm0-6h-2v5h2z"},"1")],"WarningAmber");var aL=c(8165),aM=c(64535);function aN(a){return a.data?.type??a.type??"unknown"}function aO(a){return a.data?.label||a.id}function aP(a){return a.data?.edgeType==="mcp"}function aQ(a,b={}){let c=[],d=Array.isArray(a?.nodes)?a.nodes:[],e=Array.isArray(a?.edges)?a.edges:[],f=(a,b,d,e)=>c.push({severity:a,code:b,message:d,nodeId:e?.id,nodeLabel:e?aO(e):void 0}),g=new Map((b.models??[]).map(a=>[a.id,a])),h=new Map((b.servers??[]).map(a=>[a.name,a])),i=!!b.models,j=!!b.servers,k=d.filter(a=>"start"===aN(a)),l=d.filter(a=>"finish"===aN(a)),m=d.filter(a=>"process"===aN(a)),n=d.filter(a=>"mcp"===aN(a));if(0===k.length)f("error","no-start-node","The flow has no Start node, so it has no entry point.");else if(k.length>1)for(let a of k.slice(1))f("error","multiple-start-nodes","The flow has more than one Start node; only one is allowed.",a);for(let a of(0===l.length&&f("warning","no-finish-node","The flow has no Finish node; it will run but never reaches a defined end."),m)){let b=a.data?.properties??{},c=b.boundModel;if(c){if(i&&!g.has(c)){let c="string"==typeof b.modelName&&b.modelName?` (was "${b.modelName}")`:"";f("error","process-model-missing",`Process node "${aO(a)}" is bound to a model that no longer exists${c}.`,a)}}else f("error","process-missing-model",`Process node "${aO(a)}" has no model bound.`,a)}for(let a of n){let b=(a.data?.properties??{}).boundServer;if(b){if(j&&!h.has(b))f("warning","mcp-server-missing",`MCP node "${aO(a)}" is bound to server "${b}", which isn't in your current MCP server list. It may be offline (e.g. not connected), renamed, or removed — if it was renamed or removed, rebind this node.`,a);else if(j){let c=h.get(b);if(c.status&&"connected"!==c.status){let d="disabled"===c.status?"disabled":`not connected (${c.status})`;f("warning","mcp-server-disconnected",`MCP node "${aO(a)}" is bound to server "${b}", which is currently ${d}. It will provide tools again once it reconnects.`,a)}}}else f("warning","mcp-missing-server",`MCP node "${aO(a)}" is not bound to a server.`,a);e.some(b=>aP(b)&&(b.source===a.id||b.target===a.id))||f("warning","mcp-node-unconnected",`MCP node "${aO(a)}" is not connected to any Process node.`,a)}if(k.length>0){let a=function(a){let b=new Map,c=(a,c)=>{b.has(a)||b.set(a,[]),b.get(a).push(c)};for(let b of a)!aP(b)&&(c(b.source,b.target),b.data?.bidirectional&&c(b.target,b.source));return b}(e);for(let b of k)a.get(b.id)?.length||f("error","start-no-outgoing","The Start node is not connected to anything; the flow cannot run.",b);let b=function(a,b){let c=new Set(a),d=[...a];for(;d.length;){let a=d.shift();for(let e of b.get(a)??[])c.has(e)||(c.add(e),d.push(e))}return c}(k.map(a=>a.id),a);for(let a of[...m,...l])b.has(a.id)||f("warning","unreachable-node",`${"finish"===aN(a)?"Finish":"Process"} node "${aO(a)}" is not reachable from the Start node.`,a)}for(let a of d.filter(a=>"subflow"===aN(a))){let b=e.filter(b=>!aP(b)&&(b.source===a.id||b.target===a.id&&!!b.data?.bidirectional));b.length>1&&f("error","subflow-multiple-outgoing",`Subflow node "${aO(a)}" has ${b.length} outgoing connections; a subflow can only have one (either A > B > C or a bidirectional A <> B).`,a)}for(let a of m){let c=a.data?.properties?.promptTemplate;if("string"!=typeof c||!c)continue;let g=function(a,b,c){let d=new Map(b.map(a=>[a.id,a])),e=new Set;for(let b of c){if(!aP(b))continue;let c=null;if(b.source===a?c=b.target:b.target===a&&(c=b.source),!c)continue;let f=d.get(c);if(!f||"mcp"!==aN(f))continue;let g=f.data?.properties?.boundServer;"string"==typeof g&&g&&e.add(g)}return e}(a.id,d,e),h=new Set;for(let d of(0,aM.A$)(c)){if("handoff"===d.server)continue;let c=`${d.kind}:${d.server}:${d.name}`;!h.has(c)&&(h.add(c),g.has(d.server)?"tool"===d.kind&&b.serverTools&&b.serverTools[d.server]&&!b.serverTools[d.server].includes(d.name)&&f("warning","tool-unavailable",`Process node "${aO(a)}" references tool "${d.name}" which server "${d.server}" no longer provides.`,a):f("error","tool-pill-disconnected",`Process node "${aO(a)}" references ${d.kind} "${d.name}" from server "${d.server}", but it is not connected to that server (the MCP node was removed or the server was renamed).`,a))}}let o=c.filter(a=>"error"===a.severity).length,p=c.length-o;return{issues:c,errorCount:o,warningCount:p,isRunnable:0===o}}var aR=c(83434);let aS=(0,C.h)("components/flow/FlowBuilder/FlowValidationButton"),aT=({nodes:a,edges:b})=>{let[c,f]=(0,e.useState)(!1),[g,k]=(0,e.useState)(!1),[l,m]=(0,e.useState)(null),n=(0,e.useCallback)(async()=>{k(!0);try{let c=await aR.N.tryLoadModels()??void 0,d=await G.S.loadServerConfigs(),e=Array.isArray(d)?d.map(a=>({name:a.name,status:a.disabled?"disabled":void 0})):void 0,f=aQ({nodes:a,edges:b},{models:c,servers:e});m(f.issues)}catch(a){aS.warn("Flow validation failed to run",a),m([])}finally{k(!1)}},[a,b]),o=(0,e.useCallback)(()=>{f(!0),m(null),n()},[n]),s=(0,e.useCallback)(a=>{a&&(f(!1),document.dispatchEvent(new CustomEvent("editNode",{detail:{nodeId:a}})))},[]),t=l?.filter(a=>"error"===a.severity).length??0,v=(l?.length??0)-t;return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(j.A,{variant:"outlined",color:"primary",onClick:o,startIcon:(0,d.jsx)(aI,{}),sx:{textTransform:"none"},children:"Check Flow"}),(0,d.jsxs)(p.A,{open:c,onClose:()=>f(!1),maxWidth:"sm",fullWidth:!0,children:[(0,d.jsxs)(q.A,{component:"div",sx:{display:"flex",alignItems:"center",gap:1},children:[(0,d.jsx)("span",{children:"Flow Check"}),l&&(0,d.jsxs)(h.default,{sx:{display:"flex",gap:1,ml:1},children:[t>0&&(0,d.jsx)(aD.A,{size:"small",color:"error",label:`${t} error${1===t?"":"s"}`}),v>0&&(0,d.jsx)(aD.A,{size:"small",color:"warning",label:`${v} warning${1===v?"":"s"}`})]})]}),(0,d.jsx)(r.A,{dividers:!0,children:g?(0,d.jsxs)(h.default,{sx:{display:"flex",alignItems:"center",gap:2,py:3,justifyContent:"center"},children:[(0,d.jsx)(aE.default,{size:22}),(0,d.jsx)(i.default,{color:"text.secondary",children:"Checking flow…"})]}):l&&0===l.length?(0,d.jsxs)(h.default,{sx:{display:"flex",alignItems:"center",gap:1.5,py:3,justifyContent:"center"},children:[(0,d.jsx)(aL.A,{color:"success"}),(0,d.jsx)(i.default,{children:"No problems found — this flow looks runnable."})]}):(0,d.jsx)(aF.A,{dense:!0,disablePadding:!0,children:(l??[]).map((a,b)=>{let c=!!a.nodeId,e=(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(T.A,{sx:{minWidth:36},children:"error"===a.severity?(0,d.jsx)(aJ.A,{color:"error",fontSize:"small"}):(0,d.jsx)(aK,{color:"warning",fontSize:"small"})}),(0,d.jsx)(U.A,{primary:a.message,secondary:c?`Node: ${a.nodeLabel??a.nodeId} — click to open`:void 0})]});return c?(0,d.jsx)(aG.A,{onClick:()=>s(a.nodeId),alignItems:"flex-start",children:e},b):(0,d.jsx)(aH.Ay,{alignItems:"flex-start",children:e},b)})})}),(0,d.jsxs)(u.A,{children:[(0,d.jsx)(j.A,{onClick:n,disabled:g,children:"Re-check"}),(0,d.jsx)(j.A,{onClick:()=>f(!1),variant:"contained",children:"Close"})]})]})]})};var aU=c(82666),aV=c(22042),aW=c(34304),aX=c(30137);function aY({currentLabel:a,nameIsCustom:b,defaultLabel:c,previousAutoLabel:d,nextAutoLabel:e}){return!0===b?a&&a.length>0?a:e:!a||0===a.length||a===c||void 0!==d&&d.length>0&&a===d?e:a}let aZ=(0,C.h)("components/flow/FlowBuilder/Modals/ProcessNodePropertiesModal/hooks/useModelManagement.ts");var a$=c(63650);let a_=(0,C.h)("frontend/components/flow/FlowBuilder/Modals/ProcessNodePropertiesModal/hooks/useServerConnection"),a0="handoff_to_";function a1(a,b){let c=a.replace(/\s+/g," ").trim();if(c.length<=b)return c;let d=c.slice(0,b),e=d.lastIndexOf(" ");return`${(e>.6*b?d.slice(0,e):d).trimEnd()}…`}let a2=(0,C.h)("frontend/components/flow/FlowBuilder/Modals/ProcessNodePropertiesModal/hooks/useHandoffTools"),a3=({nodeData:a,setNodeData:b})=>a?(0,d.jsxs)(h.default,{sx:{display:"flex",flexDirection:"column",height:"100%",pr:2},children:[(0,d.jsx)(i.default,{variant:"h6",gutterBottom:!0,children:"Node Configuration"}),(0,d.jsx)(t.A,{fullWidth:!0,label:"Node Label",value:a.label||"",onChange:a=>b(b=>({...b,label:a.target.value,properties:{...b?.properties,nameIsCustom:!0}})),margin:"normal"}),(0,d.jsx)(t.A,{fullWidth:!0,label:"Description",value:a.description||"",onChange:c=>b({...a,description:c.target.value}),margin:"normal",multiline:!0,rows:2,helperText:"This description will be displayed on the node"})]}):null;var a4=c(82605),a5=c(43249),a6=c(2783),a7=c(73520),a8=c(29565),a9=c(33105);function ba(a){return(0,a9.Ay)("MuiRadioGroup",a)}(0,a8.A)("MuiRadioGroup",["root","row","error"]);var bb=c(26636),bc=c(65603);let bd=e.createContext(void 0);var be=c(70300);let bf=e.forwardRef(function(a,b){let{actions:c,children:f,className:g,defaultValue:h,name:i,onChange:j,value:k,...l}=a,m=e.useRef(null),n=(a=>{let{classes:b,row:c,error:d}=a;return(0,a6.A)({root:["root",c&&"row",d&&"error"]},ba,b)})(a),[o,p]=(0,bc.A)({controlled:k,default:h,name:"RadioGroup"});e.useImperativeHandle(c,()=>({focus:()=>{let a=m.current.querySelector("input:not(:disabled):checked");a||(a=m.current.querySelector("input:not(:disabled)")),a&&a.focus()}}),[]);let q=(0,bb.A)(b,m),r=(0,be.A)(i),s=e.useMemo(()=>({name:r,onChange(a){p(a.target.value),j&&j(a,a.target.value)},value:o}),[r,j,p,o]);return(0,d.jsx)(bd.Provider,{value:s,children:(0,d.jsx)(a7.A,{role:"radiogroup",ref:q,className:(0,a5.A)(n.root,g),...l,children:f})})});var bg=c(95587),bh=c(37489),bi=c(99515);let bj=(0,v.A)((0,d.jsx)("path",{d:"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z"}),"RadioButtonUnchecked"),bk=(0,v.A)((0,d.jsx)("path",{d:"M8.465 8.465C9.37 7.56 10.62 7 12 7C14.76 7 17 9.24 17 12C17 13.38 16.44 14.63 15.535 15.535C14.63 16.44 13.38 17 12 17C9.24 17 7 14.76 7 12C7 10.62 7.56 9.37 8.465 8.465Z"}),"RadioButtonChecked");var bl=c(41126),bm=c(68333);let bn=(0,z.Ay)("span",{name:"MuiRadioButtonIcon",shouldForwardProp:bl.A})({position:"relative",display:"flex"}),bo=(0,z.Ay)(bj,{name:"MuiRadioButtonIcon"})({transform:"scale(1)"}),bp=(0,z.Ay)(bk,{name:"MuiRadioButtonIcon"})((0,bm.A)(({theme:a})=>({left:0,position:"absolute",transform:"scale(0)",transition:a.transitions.create("transform",{easing:a.transitions.easing.easeIn,duration:a.transitions.duration.shortest}),variants:[{props:{checked:!0},style:{transform:"scale(1)",transition:a.transitions.create("transform",{easing:a.transitions.easing.easeOut,duration:a.transitions.duration.shortest})}}]}))),bq=function(a){let{checked:b=!1,classes:c={},fontSize:e}=a,f={...a,checked:b};return(0,d.jsxs)(bn,{className:c.root,ownerState:f,children:[(0,d.jsx)(bo,{fontSize:e,className:c.background,ownerState:f}),(0,d.jsx)(bp,{fontSize:e,className:c.dot,ownerState:f})]})};var br=c(6638);let bs=c(2153).A;var bt=c(49628);function bu(a){return(0,a9.Ay)("MuiRadio",a)}let bv=(0,a8.A)("MuiRadio",["root","checked","disabled","colorPrimary","colorSecondary","sizeSmall"]);var bw=c(54716),bx=c(20385),by=c(6636);let bz=(0,z.Ay)(bi.A,{shouldForwardProp:a=>(0,bl.A)(a)||"classes"===a,name:"MuiRadio",slot:"Root",overridesResolver:(a,b)=>{let{ownerState:c}=a;return[b.root,"medium"!==c.size&&b[`size${(0,br.A)(c.size)}`],b[`color${(0,br.A)(c.color)}`]]}})((0,bm.A)(({theme:a})=>({color:(a.vars||a).palette.text.secondary,[`&.${bv.disabled}`]:{color:(a.vars||a).palette.action.disabled},variants:[{props:{color:"default",disabled:!1,disableRipple:!1},style:{"&:hover":{backgroundColor:a.vars?`rgba(${a.vars.palette.action.activeChannel} / ${a.vars.palette.action.hoverOpacity})`:(0,bh.X4)(a.palette.action.active,a.palette.action.hoverOpacity)}}},...Object.entries(a.palette).filter((0,bw.A)()).map(([b])=>({props:{color:b,disabled:!1,disableRipple:!1},style:{"&:hover":{backgroundColor:a.vars?`rgba(${a.vars.palette[b].mainChannel} / ${a.vars.palette.action.hoverOpacity})`:(0,bh.X4)(a.palette[b].main,a.palette.action.hoverOpacity)}}})),...Object.entries(a.palette).filter((0,bw.A)()).map(([b])=>({props:{color:b,disabled:!1},style:{[`&.${bv.checked}`]:{color:(a.vars||a).palette[b].main}}})),{props:{disableRipple:!1},style:{"&:hover":{"@media (hover: none)":{backgroundColor:"transparent"}}}}]}))),bA=(0,d.jsx)(bq,{checked:!0}),bB=(0,d.jsx)(bq,{}),bC=e.forwardRef(function(a,b){let c=(0,by.b)({props:a,name:"MuiRadio"}),{checked:f,checkedIcon:g=bA,color:h="primary",icon:i=bB,name:j,onChange:k,size:l="medium",className:m,disabled:n,disableRipple:o=!1,slots:p={},slotProps:q={},inputProps:r,...s}=c,t=(0,bt.A)(),u=n;t&&void 0===u&&(u=t.disabled),u??=!1;let v={...c,disabled:u,disableRipple:o,color:h,size:l},w=(a=>{let{classes:b,color:c,size:d}=a,e={root:["root",`color${(0,br.A)(c)}`,"medium"!==d&&`size${(0,br.A)(d)}`]};return{...b,...(0,a6.A)(e,bu,b)}})(v),x=e.useContext(bd),y=f,z=bs(k,x&&x.onChange),A=j;if(x){var B,C;void 0===y&&(B=x.value,y="object"==typeof(C=c.value)&&null!==C?B===C:String(B)===String(C)),void 0===A&&(A=x.name)}let D=q.input??r,[E,F]=(0,bx.A)("root",{ref:b,elementType:bz,className:(0,a5.A)(w.root,m),shouldForwardComponentProp:!0,externalForwardedProps:{slots:p,slotProps:q,...s},getSlotProps:a=>({...a,onChange:(b,...c)=>{a.onChange?.(b,...c),z(b,...c)}}),ownerState:v,additionalProps:{type:"radio",icon:e.cloneElement(i,{fontSize:i.props.fontSize??l}),checkedIcon:e.cloneElement(g,{fontSize:g.props.fontSize??l}),disabled:u,name:A,checked:y,slots:p,slotProps:{input:"function"==typeof D?D(v):D}}});return(0,d.jsx)(E,{...F,classes:w})});var bD=c(38233),bE=c(93083);let bF=({isLoadingModels:a,loadError:b,models:c,selectedModelId:e,handleModelSelect:f,isModelBound:g,handleUnbindModel:k})=>(0,d.jsxs)(h.default,{sx:{mt:4},children:[(0,d.jsx)(i.default,{variant:"subtitle1",gutterBottom:!0,children:"Bind to Model"}),a?(0,d.jsx)(i.default,{color:"text.secondary",children:"Loading models..."}):b?(0,d.jsx)(i.default,{color:"error",children:b}):0===c.length?(0,d.jsx)(i.default,{color:"text.secondary",children:"No models available. Add some in the Model Manager."}):(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)(a4.A,{component:"fieldset",fullWidth:!0,children:[(0,d.jsx)(bf,{value:e,onChange:a=>f(a.target.value),children:(0,d.jsx)(aU.Ay,{container:!0,spacing:2,children:c.map(a=>(0,d.jsx)(aU.Ay,{item:!0,xs:12,sm:6,children:(0,d.jsx)(A.A,{elevation:1,sx:{p:2,border:2*(e===a.id),borderColor:"primary.main"},children:(0,d.jsx)(bg.A,{value:a.id,control:(0,d.jsx)(bC,{}),label:(0,d.jsxs)(h.default,{children:[(0,d.jsx)(i.default,{variant:"subtitle2",children:a.displayName||a.name}),a.description&&(0,d.jsx)(i.default,{variant:"caption",color:"text.secondary",display:"block",children:a.description}),a.baseUrl&&(0,d.jsx)(i.default,{variant:"caption",color:"text.secondary",children:a.baseUrl})]}),sx:{width:"100%",m:0}})})},a.id))})}),(0,d.jsx)(bD.A,{children:e?"This node will use the selected model for processing.":"Select a model to bind this node to."})]}),g&&(0,d.jsx)(h.default,{sx:{mt:2,display:"flex",justifyContent:"flex-end"},children:(0,d.jsx)(j.A,{startIcon:(0,d.jsx)(bE.A,{}),onClick:k,color:"primary",variant:"outlined",size:"small",children:"Unbind Model"})})]})]});var bG=c(66335);let bH=function(a){let{badgeContent:b,invisible:c=!1,max:d=99,showZero:e=!1}=a,f=(0,bG.A)({badgeContent:b,max:d}),g=c;!1!==c||0!==b||e||(g=!0);let{badgeContent:h,max:i=d}=g?f:a,j=h&&Number(h)>i?`${i}+`:h;return{badgeContent:h,invisible:g,max:i,displayValue:j}};function bI(a){return(0,a9.Ay)("MuiBadge",a)}let bJ=(0,a8.A)("MuiBadge",["root","badge","dot","standard","anchorOriginTopRight","anchorOriginBottomRight","anchorOriginTopLeft","anchorOriginBottomLeft","invisible","colorError","colorInfo","colorPrimary","colorSecondary","colorSuccess","colorWarning","overlapRectangular","overlapCircular","anchorOriginTopLeftCircular","anchorOriginTopLeftRectangular","anchorOriginTopRightCircular","anchorOriginTopRightRectangular","anchorOriginBottomLeftCircular","anchorOriginBottomLeftRectangular","anchorOriginBottomRightCircular","anchorOriginBottomRightRectangular"]),bK=(0,z.Ay)("span",{name:"MuiBadge",slot:"Root",overridesResolver:(a,b)=>b.root})({position:"relative",display:"inline-flex",verticalAlign:"middle",flexShrink:0}),bL=(0,z.Ay)("span",{name:"MuiBadge",slot:"Badge",overridesResolver:(a,b)=>{let{ownerState:c}=a;return[b.badge,b[c.variant],b[`anchorOrigin${(0,br.A)(c.anchorOrigin.vertical)}${(0,br.A)(c.anchorOrigin.horizontal)}${(0,br.A)(c.overlap)}`],"default"!==c.color&&b[`color${(0,br.A)(c.color)}`],c.invisible&&b.invisible]}})((0,bm.A)(({theme:a})=>({display:"flex",flexDirection:"row",flexWrap:"wrap",justifyContent:"center",alignContent:"center",alignItems:"center",position:"absolute",boxSizing:"border-box",fontFamily:a.typography.fontFamily,fontWeight:a.typography.fontWeightMedium,fontSize:a.typography.pxToRem(12),minWidth:20,lineHeight:1,padding:"0 6px",height:20,borderRadius:10,zIndex:1,transition:a.transitions.create("transform",{easing:a.transitions.easing.easeInOut,duration:a.transitions.duration.enteringScreen}),variants:[...Object.entries(a.palette).filter((0,bw.A)(["contrastText"])).map(([b])=>({props:{color:b},style:{backgroundColor:(a.vars||a).palette[b].main,color:(a.vars||a).palette[b].contrastText}})),{props:{variant:"dot"},style:{borderRadius:4,height:8,minWidth:8,padding:0}},{props:({ownerState:a})=>"top"===a.anchorOrigin.vertical&&"right"===a.anchorOrigin.horizontal&&"rectangular"===a.overlap,style:{top:0,right:0,transform:"scale(1) translate(50%, -50%)",transformOrigin:"100% 0%",[`&.${bJ.invisible}`]:{transform:"scale(0) translate(50%, -50%)"}}},{props:({ownerState:a})=>"bottom"===a.anchorOrigin.vertical&&"right"===a.anchorOrigin.horizontal&&"rectangular"===a.overlap,style:{bottom:0,right:0,transform:"scale(1) translate(50%, 50%)",transformOrigin:"100% 100%",[`&.${bJ.invisible}`]:{transform:"scale(0) translate(50%, 50%)"}}},{props:({ownerState:a})=>"top"===a.anchorOrigin.vertical&&"left"===a.anchorOrigin.horizontal&&"rectangular"===a.overlap,style:{top:0,left:0,transform:"scale(1) translate(-50%, -50%)",transformOrigin:"0% 0%",[`&.${bJ.invisible}`]:{transform:"scale(0) translate(-50%, -50%)"}}},{props:({ownerState:a})=>"bottom"===a.anchorOrigin.vertical&&"left"===a.anchorOrigin.horizontal&&"rectangular"===a.overlap,style:{bottom:0,left:0,transform:"scale(1) translate(-50%, 50%)",transformOrigin:"0% 100%",[`&.${bJ.invisible}`]:{transform:"scale(0) translate(-50%, 50%)"}}},{props:({ownerState:a})=>"top"===a.anchorOrigin.vertical&&"right"===a.anchorOrigin.horizontal&&"circular"===a.overlap,style:{top:"14%",right:"14%",transform:"scale(1) translate(50%, -50%)",transformOrigin:"100% 0%",[`&.${bJ.invisible}`]:{transform:"scale(0) translate(50%, -50%)"}}},{props:({ownerState:a})=>"bottom"===a.anchorOrigin.vertical&&"right"===a.anchorOrigin.horizontal&&"circular"===a.overlap,style:{bottom:"14%",right:"14%",transform:"scale(1) translate(50%, 50%)",transformOrigin:"100% 100%",[`&.${bJ.invisible}`]:{transform:"scale(0) translate(50%, 50%)"}}},{props:({ownerState:a})=>"top"===a.anchorOrigin.vertical&&"left"===a.anchorOrigin.horizontal&&"circular"===a.overlap,style:{top:"14%",left:"14%",transform:"scale(1) translate(-50%, -50%)",transformOrigin:"0% 0%",[`&.${bJ.invisible}`]:{transform:"scale(0) translate(-50%, -50%)"}}},{props:({ownerState:a})=>"bottom"===a.anchorOrigin.vertical&&"left"===a.anchorOrigin.horizontal&&"circular"===a.overlap,style:{bottom:"14%",left:"14%",transform:"scale(1) translate(-50%, 50%)",transformOrigin:"0% 100%",[`&.${bJ.invisible}`]:{transform:"scale(0) translate(-50%, 50%)"}}},{props:{invisible:!0},style:{transition:a.transitions.create("transform",{easing:a.transitions.easing.easeInOut,duration:a.transitions.duration.leavingScreen})}}]})));function bM(a){return{vertical:a?.vertical??"top",horizontal:a?.horizontal??"right"}}let bN=e.forwardRef(function(a,b){let c=(0,by.b)({props:a,name:"MuiBadge"}),{anchorOrigin:e,className:f,classes:g,component:h,components:i={},componentsProps:j={},children:k,overlap:l="rectangular",color:m="default",invisible:n=!1,max:o=99,badgeContent:p,slots:q,slotProps:r,showZero:s=!1,variant:t="standard",...u}=c,{badgeContent:v,invisible:w,max:x,displayValue:y}=bH({max:o,invisible:n,badgeContent:p,showZero:s}),z=(0,bG.A)({anchorOrigin:bM(e),color:m,overlap:l,variant:t,badgeContent:p}),A=w||null==v&&"dot"!==t,{color:B=m,overlap:C=l,anchorOrigin:D,variant:E=t}=A?z:c,F=bM(D),G="dot"!==E?y:void 0,H={...c,badgeContent:v,invisible:A,max:x,displayValue:G,showZero:s,anchorOrigin:F,color:B,overlap:C,variant:E},I=(a=>{let{color:b,anchorOrigin:c,invisible:d,overlap:e,variant:f,classes:g={}}=a,h={root:["root"],badge:["badge",f,d&&"invisible",`anchorOrigin${(0,br.A)(c.vertical)}${(0,br.A)(c.horizontal)}`,`anchorOrigin${(0,br.A)(c.vertical)}${(0,br.A)(c.horizontal)}${(0,br.A)(e)}`,`overlap${(0,br.A)(e)}`,"default"!==b&&`color${(0,br.A)(b)}`]};return(0,a6.A)(h,bI,g)})(H),J={slots:{root:q?.root??i.Root,badge:q?.badge??i.Badge},slotProps:{root:r?.root??j.root,badge:r?.badge??j.badge}},[K,L]=(0,bx.A)("root",{elementType:bK,externalForwardedProps:{...J,...u},ownerState:H,className:(0,a5.A)(I.root,f),ref:b,additionalProps:{as:h}}),[M,N]=(0,bx.A)("badge",{elementType:bL,externalForwardedProps:J,ownerState:H,className:I.badge});return(0,d.jsxs)(K,{...L,children:[k,(0,d.jsx)(M,{...N,children:G})]})});var bO=c(67101),bP=c(30818),bQ=c(27114),bR=c(53222);let bS=(0,v.A)((0,d.jsx)("path",{d:"M12 5V2L8 6l4 4V7c3.31 0 6 2.69 6 6 0 2.97-2.17 5.43-5 5.91v2.02c3.95-.49 7-3.85 7-7.93 0-4.42-3.58-8-8-8m-6 8c0-1.65.67-3.15 1.76-4.24L6.34 7.34C4.9 8.79 4 10.79 4 13c0 4.08 3.05 7.44 7 7.93v-2.02c-2.83-.48-5-2.94-5-5.91"}),"RestartAlt");var bT=c(40973),bU=c(9604);let bV=(0,C.h)("frontend/components/flow/FlowBuilder/Modals/ProcessNodePropertiesModal/ServerTools"),bW=({isLoadingServers:a,connectedMcpNodes:b,availableServers:c,onConnectMcpServer:f,serverToolsMap:g,serverStatuses:k,isLoadingTools:n,handleSelectToolServer:o,handleInsertToolBinding:p,selectedToolServerNodeId:q,selectedNodeId:r,isLoadingSelectedServerTools:s,promptBuilderRef:u,handleRetryServer:v,handleRestartServer:w})=>{let y=q??b[0]?.nodeId??null,[z,B]=(0,e.useState)({}),[C,D]=(0,e.useState)(null),E=(c??[]).filter(a=>!b.some(b=>b.serverName===a.name)),F=!!f&&E.length>0,G=(0,d.jsx)(V.A,{open:!!C,anchorEl:C,onClose:()=>D(null),children:E.map(a=>(0,d.jsxs)(S.A,{onClick:()=>{var b;return b=a.name,void(D(null),f?.(b))},children:[(0,d.jsx)(h.default,{sx:{width:8,height:8,borderRadius:"50%",mr:1,bgcolor:"connected"===a.status?"success.main":"text.disabled"}}),a.name]},a.name))}),[H,I]=(0,e.useState)(""),J=a=>{try{let c=b.find(b=>b.nodeId===a);if(!c)return bV.warn(`Could not find connected MCP node with ID ${a}`),[];let d=c.enabledTools||[];return bV.debug(`Enabled tools for node ${a}: ${JSON.stringify(d)}`),Array.isArray(d)?d:[]}catch(b){return bV.error(`Error getting enabled tools for node ${a}:`,b),[]}},K=(a,b,c)=>{try{if(!c||!Array.isArray(c))return bV.warn(`Tools array is not available or not an array for server ${b}`),[];let d=J(a),e=c;if(d.length>0?e=c.filter(a=>a&&a.name&&d.includes(a.name)):(bV.debug(`No tools explicitly enabled for node ${a}, showing none.`),e=[]),H.trim()){let a=H.toLowerCase().trim();e=e.filter(b=>b.name&&b.name.toLowerCase().includes(a)||b.description&&b.description.toLowerCase().includes(a)||b.inputSchema&&JSON.stringify(b.inputSchema).toLowerCase().includes(a))}return e}catch(d){return bV.error(`Error filtering tools for node ${a} (server ${b}):`,d),c||[]}},L=a=>{o(a)},M=async(a,b)=>{b.stopPropagation(),bV.debug(`Retry button clicked for server: ${a}`),B(b=>({...b,[a]:!0}));try{v&&await v(a)}finally{setTimeout(()=>{B(b=>({...b,[a]:!1}))},500)}},N=async(a,b)=>{b.stopPropagation(),bV.debug(`Restart button clicked for server: ${a}`),B(b=>({...b,[a]:!0}));try{w&&await w(a)}finally{setTimeout(()=>{B(b=>({...b,[a]:!1}))},500)}};(0,e.useEffect)(()=>{b.length>0&&!q&&o(b[0].nodeId)},[b,q,o]);let O=b.find(a=>a.nodeId===y),P=O?.serverName;return(0,d.jsxs)(h.default,{sx:{mt:4,display:"flex",flexDirection:"column",height:"100%"},children:[(0,d.jsx)(i.default,{variant:"subtitle1",gutterBottom:!0,children:"Connected MCP Servers and Tools"}),a?(0,d.jsxs)(h.default,{sx:{display:"flex",alignItems:"center",gap:1},children:[(0,d.jsx)(aE.default,{size:20}),(0,d.jsx)(i.default,{color:"text.secondary",children:"Loading connected MCP nodes..."})]}):0===b.length?(0,d.jsxs)(h.default,{sx:{p:2,border:"1px dashed rgba(0, 0, 0, 0.12)",borderRadius:1},children:[(0,d.jsx)(i.default,{color:"text.secondary",align:"center",children:"No MCP nodes connected to this Process node."}),(0,d.jsx)(i.default,{variant:"caption",color:"text.secondary",align:"center",display:"block",sx:{mt:1},children:F?"Pick a server below — the MCP node is added to the flow and wired up for you.":"Connect MCP nodes to this Process node using the side handles to access their tools."}),F&&(0,d.jsx)(h.default,{sx:{display:"flex",justifyContent:"center",mt:2},children:(0,d.jsx)(j.A,{variant:"contained",size:"small",startIcon:(0,d.jsx)(x.A,{}),onClick:a=>D(a.currentTarget),children:"Connect MCP Server"})}),G]}):(0,d.jsxs)(h.default,{sx:{display:"flex",flexDirection:"column",flexGrow:1,height:"calc(100% - 40px)"},children:[(0,d.jsxs)(h.default,{sx:{display:"flex",alignItems:"center",mb:2,borderBottom:1,borderColor:"divider"},children:[(0,d.jsx)(aV.A,{value:y||b[0]?.nodeId||"",onChange:(a,b)=>L(b),variant:"scrollable",scrollButtons:"auto",sx:{flexGrow:1},children:b.map(a=>{if(!a||!a.nodeId||!a.serverName)return bV.warn("Skipping invalid MCP node in tabs:",a),null;let b=a.serverName,c=a.nodeId,e=a.status;z[b],n[b];let f=g[b]||[],j=J(c);return K(c,b,f).length,(0,d.jsx)(aW.A,{value:c,label:(0,d.jsxs)(h.default,{sx:{display:"flex",alignItems:"center"},children:[(0,d.jsx)(i.default,{variant:"body2",sx:{color:"connected"===e?"success.main":"error"===e?"error.main":"text.secondary"},children:b}),j.length>0&&(0,d.jsx)(bN,{badgeContent:j.length,color:"primary",sx:{ml:1}})]}),sx:{textTransform:"none",minHeight:"48px",opacity:"connected"!==e?.7:1}},c)})}),F&&(0,d.jsx)(m.A,{title:"Connect another MCP server",children:(0,d.jsx)(l.A,{size:"small",onClick:a=>D(a.currentTarget),sx:{ml:1},children:(0,d.jsx)(x.A,{fontSize:"small"})})}),G]}),O&&P&&(0,d.jsxs)(h.default,{sx:{display:"flex",justifyContent:"flex-end",mb:2},children:[(0,d.jsx)(m.A,{title:`Retry connection for ${P}`,children:(0,d.jsx)("span",{children:(0,d.jsx)(l.A,{size:"small",onClick:a=>M(P,a),disabled:z[P]||n[P],children:z[P]?(0,d.jsx)(aE.default,{size:16}):(0,d.jsx)(bR.A,{fontSize:"small"})})})}),"connected"===O.status&&w&&(0,d.jsx)(m.A,{title:`Restart server ${P}`,children:(0,d.jsx)("span",{children:(0,d.jsx)(l.A,{size:"small",onClick:a=>N(P,a),disabled:z[P],sx:{ml:1},children:(0,d.jsx)(bS,{fontSize:"small"})})})})]}),(0,d.jsx)(t.A,{placeholder:"Search enabled tools...",variant:"outlined",size:"small",fullWidth:!0,value:H,onChange:a=>I(a.target.value),sx:{mb:2},InputProps:{startAdornment:(0,d.jsx)(bO.A,{position:"start",children:(0,d.jsx)(bT.A,{fontSize:"small"})})}}),(0,d.jsx)(A.A,{variant:"outlined",sx:{flexGrow:1,overflow:"auto",p:0,height:"calc(100% - 140px)"},children:O&&P&&(()=>{let a=O.nodeId,b=O.serverName;if("connected"!==O.status)return(0,d.jsx)(h.default,{sx:{p:2,textAlign:"center"},children:(0,d.jsxs)(i.default,{color:"text.secondary",children:["Server '",b,"' is not connected. Connect to view tools."]})},a);if(n[b])return(0,d.jsx)(h.default,{sx:{display:"flex",justifyContent:"center",p:2},children:(0,d.jsx)(aE.default,{size:24})},a);let c=g[b]||[],e=K(a,b,c);if(0===e.length){let b=J(a).length;return(0,d.jsx)(h.default,{sx:{p:2,textAlign:"center"},children:(0,d.jsx)(i.default,{color:"text.secondary",children:H.trim()?`No enabled tools match "${H}" for this node.`:0===b?"No tools are enabled for this node instance. Enable tools in the MCP Node properties.":"No tools available or enabled for this node instance."})},a)}return(0,d.jsx)(aF.A,{disablePadding:!0,children:e.map(c=>(0,d.jsxs)(bP.A,{variant:"outlined",onClick:()=>{a!==y?(bV.debug("Node tab not selected, selecting node first",{selectedNodeId:a,serverName:b,toolName:c.name}),L(a)):b&&c.name?(bV.debug("Inserting tool binding",{serverName:b,toolName:c.name}),p(b,c.name)):bV.warn("Cannot insert tool binding, server or tool name is undefined",{serverName:b,toolName:c.name})},sx:{mb:1,mx:1,mt:1,cursor:"pointer",position:"relative","&:hover":{boxShadow:1,bgcolor:"action.hover"}},children:[(0,d.jsx)(bQ.A,{sx:{p:2,"&:last-child":{pb:2}},children:(0,d.jsx)(h.default,{sx:{display:"flex",justifyContent:"space-between",alignItems:"flex-start"},children:(0,d.jsxs)(h.default,{sx:{width:"100%"},children:[(0,d.jsxs)(i.default,{variant:"subtitle2",component:"div",sx:{display:"flex",alignItems:"center"},children:[(0,d.jsx)(bU.A,{fontSize:"small",sx:{mr:1,color:"primary.main"}}),c.name]}),(0,d.jsx)(i.default,{variant:"body2",color:"text.secondary",sx:{mt:.5},children:c.description||"No description available"}),c.inputSchema&&(a=>a&&a.properties?(0,d.jsxs)(h.default,{sx:{mt:1},children:[(0,d.jsx)(i.default,{variant:"caption",color:"text.secondary",sx:{fontWeight:"medium"},children:"Parameters:"}),(0,d.jsx)(h.default,{sx:{pl:1,mt:.5},children:Object.entries(a.properties).map(([b,c])=>(0,d.jsxs)(h.default,{sx:{mb:.5},children:[(0,d.jsxs)(i.default,{variant:"caption",component:"span",sx:{fontWeight:"medium"},children:[b,a.required?.includes(b)&&(0,d.jsx)(i.default,{variant:"caption",component:"span",color:"error.main",children:" *"}),": "]}),(0,d.jsx)(i.default,{variant:"caption",component:"span",color:"text.secondary",children:c.description||c.type||"No description"})]},b))})]}):null)(c.inputSchema)]})})}),(0,d.jsx)(m.A,{title:`Add ${c.name} from ${b} to prompt`,children:(0,d.jsx)(h.default,{sx:{position:"absolute",top:0,left:0,right:0,bottom:0}})})]},c.name))},a)})()})]})]})},bX=(0,v.A)((0,d.jsx)("path",{d:"M14 2H6c-1.1 0-1.99.9-1.99 2L4 20c0 1.1.89 2 1.99 2H18c1.1 0 2-.9 2-2V8zm2 16H8v-2h8zm0-4H8v-2h8zm-3-5V3.5L18.5 9z"}),"Description"),bY=(0,C.h)("frontend/components/flow/FlowBuilder/Modals/ProcessNodePropertiesModal/ServerResources"),bZ=({primary:a,secondary:b,chip:c,onClick:e})=>(0,d.jsx)(bP.A,{variant:"outlined",onClick:e,sx:{mb:1,mx:1,mt:1,cursor:"pointer","&:hover":{boxShadow:1,bgcolor:"action.hover"}},children:(0,d.jsx)(bQ.A,{sx:{p:2,"&:last-child":{pb:2}},children:(0,d.jsxs)(h.default,{sx:{display:"flex",justifyContent:"space-between",alignItems:"flex-start"},children:[(0,d.jsxs)(h.default,{sx:{width:"100%"},children:[(0,d.jsxs)(i.default,{variant:"subtitle2",component:"div",sx:{display:"flex",alignItems:"center"},children:[(0,d.jsx)(bX,{fontSize:"small",sx:{mr:1,color:"primary.main"}}),a]}),(0,d.jsx)(i.default,{variant:"body2",color:"text.secondary",sx:{mt:.5,wordBreak:"break-all"},children:b})]}),c&&(0,d.jsx)(aD.A,{size:"small",label:c,sx:{ml:1,flexShrink:0}})]})})}),b$=({connectedMcpNodes:a,handleInsertResourceBinding:b,promptBuilderRef:c})=>{let[f,g]=(0,e.useState)(null),[j,k]=(0,e.useState)([]),[l,m]=(0,e.useState)([]),[n,p]=(0,e.useState)(!1),[q,r]=(0,e.useState)(),[s,u]=(0,e.useState)(""),v=a.find(a=>a.nodeId===f),w=v?.serverName;(0,e.useEffect)(()=>{a.length>0&&!f&&g(a[0].nodeId)},[a,f]);let x=(0,e.useCallback)(async a=>{p(!0),r(void 0);try{let b=await G.S.listServerResources(a);k(b.resources||[]),m(b.resourceTemplates||[]),r(b.error)}catch(b){bY.warn(`Failed to load resources for ${a}`,b),r(b instanceof Error?b.message:"Failed to load resources")}finally{p(!1)}},[]);(0,e.useEffect)(()=>{w?x(w):(k([]),m([]))},[w,x]);let y=a=>a.toLowerCase().includes(s.toLowerCase().trim()),z=s.trim()?j.filter(a=>y(a.name||"")||y(a.uri)||y(a.description||"")):j,B=s.trim()?l.filter(a=>y(a.name||"")||y(a.uriTemplate)||y(a.description||"")):l,C=a=>{w&&a&&b(w,a)};return(0,d.jsxs)(h.default,{sx:{mt:4,display:"flex",flexDirection:"column",height:"100%"},children:[(0,d.jsx)(i.default,{variant:"subtitle1",gutterBottom:!0,children:"Give this step access to…"}),(0,d.jsx)(i.default,{variant:"caption",color:"text.secondary",sx:{mb:1},children:"Pick a resource to insert. Its contents are read and placed into the prompt each time the step runs."}),0===a.length?(0,d.jsxs)(h.default,{sx:{p:2,border:"1px dashed rgba(0, 0, 0, 0.12)",borderRadius:1},children:[(0,d.jsx)(i.default,{color:"text.secondary",align:"center",children:"No MCP nodes connected to this Process node."}),(0,d.jsx)(i.default,{variant:"caption",color:"text.secondary",align:"center",display:"block",sx:{mt:1},children:"Connect MCP nodes using the side handles to access their resources."})]}):(0,d.jsxs)(h.default,{sx:{display:"flex",flexDirection:"column",flexGrow:1,height:"calc(100% - 40px)"},children:[(0,d.jsx)(aV.A,{value:f||a[0]?.nodeId||"",onChange:(a,b)=>g(b),variant:"scrollable",scrollButtons:"auto",sx:{mb:2,borderBottom:1,borderColor:"divider"},children:a.map(a=>(0,d.jsx)(aW.A,{value:a.nodeId,label:(0,d.jsx)(i.default,{variant:"body2",sx:{color:"connected"===a.status?"success.main":"error"===a.status?"error.main":"text.secondary"},children:a.serverName}),sx:{textTransform:"none",minHeight:48,opacity:"connected"!==a.status?.7:1}},a.nodeId))}),(0,d.jsx)(t.A,{placeholder:"Search resources…",variant:"outlined",size:"small",fullWidth:!0,value:s,onChange:a=>u(a.target.value),sx:{mb:2},InputProps:{startAdornment:(0,d.jsx)(bO.A,{position:"start",children:(0,d.jsx)(bT.A,{fontSize:"small"})})}}),q&&(0,d.jsx)(o.A,{severity:"warning",sx:{mb:2},children:q}),(0,d.jsx)(A.A,{variant:"outlined",sx:{flexGrow:1,overflow:"auto",p:0,height:"calc(100% - 140px)"},children:v&&"connected"!==v.status?(0,d.jsx)(h.default,{sx:{p:2,textAlign:"center"},children:(0,d.jsxs)(i.default,{color:"text.secondary",children:["Server '",w,"' is not connected. Connect to view resources."]})}):n?(0,d.jsx)(h.default,{sx:{display:"flex",justifyContent:"center",p:2},children:(0,d.jsx)(aE.default,{size:24})}):0===z.length&&0===B.length?(0,d.jsx)(h.default,{sx:{p:2,textAlign:"center"},children:(0,d.jsx)(i.default,{color:"text.secondary",children:s.trim()?`No resources match "${s}".`:"This server does not publish any resources."})}):(0,d.jsxs)(aF.A,{disablePadding:!0,children:[z.map(a=>(0,d.jsx)(bZ,{primary:a.name||a.uri,secondary:a.description||a.uri,chip:a.mimeType,tooltip:`Add ${a.name||a.uri} to prompt`,onClick:()=>C(a.uri)},a.uri)),B.map(a=>(0,d.jsx)(bZ,{primary:a.name||a.uriTemplate,secondary:a.description||a.uriTemplate,chip:"template",tooltip:`Add template ${a.uriTemplate} to prompt (fill in variables, e.g. with \${global:VAR})`,onClick:()=>C(a.uriTemplate)},a.uriTemplate))]})})]})]})},b_=(0,C.h)("frontend/components/flow/FlowBuilder/Modals/ProcessNodePropertiesModal/ServerTools/AgentTools"),b0=({handoffTools:a,isLoadingHandoffTools:b,handleInsertToolBinding:c,promptBuilderRef:f})=>{let[g,j]=(0,e.useState)(""),k=a.filter(a=>{if(!g.trim())return!0;let b=g.toLowerCase().trim();return a.name&&a.name.toLowerCase().includes(b)||a.description&&a.description.toLowerCase().includes(b)});return(0,d.jsxs)(h.default,{sx:{mt:4,display:"flex",flexDirection:"column",height:"100%"},children:[(0,d.jsx)(i.default,{variant:"subtitle1",gutterBottom:!0,children:"Agent Handoff Tools"}),b?(0,d.jsxs)(h.default,{sx:{display:"flex",alignItems:"center",gap:1},children:[(0,d.jsx)(aE.default,{size:20}),(0,d.jsx)(i.default,{color:"text.secondary",children:"Loading handoff tools..."})]}):0===a.length?(0,d.jsxs)(h.default,{sx:{p:2,border:"1px dashed rgba(0, 0, 0, 0.12)",borderRadius:1},children:[(0,d.jsx)(i.default,{color:"text.secondary",align:"center",children:"No handoff tools available for this node."}),(0,d.jsx)(i.default,{variant:"caption",color:"text.secondary",align:"center",display:"block",sx:{mt:1},children:"Connect this Process node to other nodes to enable handoff tools."})]}):(0,d.jsxs)(h.default,{sx:{display:"flex",flexDirection:"column",flexGrow:1,height:"calc(100% - 40px)"},children:[(0,d.jsx)(t.A,{placeholder:"Search handoff tools...",variant:"outlined",size:"small",fullWidth:!0,value:g,onChange:a=>j(a.target.value),sx:{mb:2},InputProps:{startAdornment:(0,d.jsx)(bO.A,{position:"start",children:(0,d.jsx)(bT.A,{fontSize:"small"})})}}),(0,d.jsx)(A.A,{variant:"outlined",sx:{flexGrow:1,overflow:"auto",p:0,height:"calc(100% - 56px)"},children:0===k.length?(0,d.jsx)(h.default,{sx:{p:2,textAlign:"center"},children:(0,d.jsx)(i.default,{color:"text.secondary",children:g.trim()?`No handoff tools match "${g}".`:"No handoff tools available."})}):(0,d.jsx)(aF.A,{disablePadding:!0,children:k.map(a=>(0,d.jsxs)(bP.A,{variant:"outlined",onClick:()=>{a.name?(b_.debug("Inserting handoff tool binding",{toolType:"handoff",toolName:a.name}),c("handoff",a.name)):b_.warn("Cannot insert handoff tool binding, tool name is undefined",{toolName:a.name})},sx:{mb:1,mx:1,mt:1,cursor:"pointer",position:"relative",bgcolor:"rgba(0, 0, 0, 0.04)","&:hover":{boxShadow:1,bgcolor:"rgba(0, 0, 0, 0.08)"}},children:[(0,d.jsx)(bQ.A,{sx:{p:2,"&:last-child":{pb:2}},children:(0,d.jsx)(h.default,{sx:{display:"flex",justifyContent:"space-between",alignItems:"flex-start"},children:(0,d.jsxs)(h.default,{sx:{width:"100%"},children:[(0,d.jsxs)(i.default,{variant:"subtitle2",component:"div",sx:{display:"flex",alignItems:"center"},children:[(0,d.jsx)(bU.A,{fontSize:"small",sx:{mr:1,color:"text.secondary"}}),a.name]}),(0,d.jsx)(i.default,{variant:"body2",color:"text.secondary",sx:{mt:.5},children:a.description||"No description available"}),a.inputSchema&&(a=>a&&a.properties&&0!==Object.keys(a.properties).length?(0,d.jsxs)(h.default,{sx:{mt:1},children:[(0,d.jsx)(i.default,{variant:"caption",color:"text.secondary",sx:{fontWeight:"medium"},children:"Parameters:"}),(0,d.jsx)(h.default,{sx:{pl:1,mt:.5},children:Object.entries(a.properties).map(([b,c])=>(0,d.jsxs)(h.default,{sx:{mb:.5},children:[(0,d.jsxs)(i.default,{variant:"caption",component:"span",sx:{fontWeight:"medium"},children:[b,a.required?.includes(b)&&(0,d.jsx)(i.default,{variant:"caption",component:"span",color:"error.main",children:" *"}),": "]}),(0,d.jsx)(i.default,{variant:"caption",component:"span",color:"text.secondary",children:c.description||c.type||"No description"}),c.enum&&(0,d.jsx)(h.default,{sx:{pl:2,mt:.5},children:(0,d.jsxs)(i.default,{variant:"caption",color:"text.secondary",children:["Options: ",c.enum.join(", ")]})})]},b))})]}):(0,d.jsx)(h.default,{sx:{mt:1},children:(0,d.jsx)(i.default,{variant:"caption",color:"text.secondary",sx:{fontStyle:"italic"},children:"No parameters required."})}))(a.inputSchema)]})})}),(0,d.jsx)(m.A,{title:`Add ${a.name} handoff tool to prompt`,children:(0,d.jsx)(h.default,{sx:{position:"absolute",top:0,left:0,right:0,bottom:0}})})]},a.name))})})]})]})};var b1=c(67191);let b2=(0,v.A)((0,d.jsx)("path",{d:"M13 3c-4.97 0-9 4.03-9 9H1l3.89 3.89.07.14L9 12H6c0-3.87 3.13-7 7-7s7 3.13 7 7-3.13 7-7 7c-1.93 0-3.68-.79-4.94-2.06l-1.42 1.42C8.27 19.99 10.51 21 13 21c4.97 0 9-4.03 9-9s-4.03-9-9-9m-1 5v5l4.28 2.54.72-1.21-3.5-2.08V8z"}),"History"),b3=(0,v.A)((0,d.jsx)("path",{d:"M4 9h16v2H4zm0 4h10v2H4z"}),"ShortText"),b4=(0,v.A)((0,d.jsx)("path",{d:"M3 10h11v2H3zm0-2h11V6H3zm0 8h7v-2H3zm15.01-3.13.71-.71c.39-.39 1.02-.39 1.41 0l.71.71c.39.39.39 1.02 0 1.41l-.71.71zm-.71.71-5.3 5.3V21h2.12l5.3-5.3z"}),"EditNote");var b5=c(85838);let b6=({selected:a,icon:b,title:c,description:e,onClick:f})=>(0,d.jsxs)(h.default,{role:"radio","aria-checked":a,tabIndex:0,onClick:f,onKeyDown:a=>{("Enter"===a.key||" "===a.key)&&(a.preventDefault(),f())},sx:{flex:1,minWidth:180,position:"relative",p:2,borderRadius:2,border:2,borderColor:a?"primary.main":"divider",bgcolor:a?"action.selected":"background.paper",cursor:"pointer",transition:"border-color 120ms, background-color 120ms","&:hover":{borderColor:a?"primary.main":"text.disabled"},outline:"none","&:focus-visible":{boxShadow:a=>`0 0 0 3px ${a.palette.primary.light}`}},children:[a&&(0,d.jsx)(aL.A,{color:"primary",fontSize:"small",sx:{position:"absolute",top:8,right:8}}),(0,d.jsxs)(h.default,{sx:{display:"flex",alignItems:"center",gap:1,mb:.5,color:a?"primary.main":"text.secondary"},children:[b,(0,d.jsx)(i.default,{variant:"subtitle1",sx:{fontWeight:600,color:"text.primary"},children:c})]}),(0,d.jsx)(i.default,{variant:"body2",color:"text.secondary",children:e})]}),b7=(0,C.h)("frontend/components/Flow/FlowManager/FlowBuilder/Modals/ProcessNodePropertiesModal/PromptTemplateEditor"),b8=(0,e.forwardRef)((a,b)=>{let{promptTemplate:c,handlePromptChange:f,excludeModelPrompt:g,setExcludeModelPrompt:k,excludeStartNodePrompt:l,setExcludeStartNodePrompt:m,excludeSystemPrompt:n,setExcludeSystemPrompt:p,inputMode:q,setInputMode:r,isolatedPrompt:s,setIsolatedPrompt:u,isModelBound:v,models:w,nodeData:x,flowId:y}=a,[z,B]=(0,e.useState)(""),[C,D]=(0,e.useState)(!1),[E,F]=(0,e.useState)(null),G=(0,e.useRef)(null);(0,e.useImperativeHandle)(b,()=>({insertText:a=>{G.current&&G.current.insertText(a)},getMode:()=>G.current?G.current.getMode():"raw"}));let H=async()=>{if(b7.debug("fetchRenderedPrompt called with:",{flowId:y,nodeId:x?.id}),!y||!x||!x.id)return void F("Flow ID or Node ID is missing");D(!0),F(null);try{let a=await fetch("/api/flow/prompt-renderer",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({flowId:y,nodeId:x.id,options:{renderMode:"rendered",includeConversationHistory:!1,excludeModelPrompt:g,excludeStartNodePrompt:l,excludeSystemPrompt:n}})}),b=await a.json();if(!a.ok)throw Error(b.error||"Failed to render prompt");b7.debug("Rendered prompt received",{promptLength:b.prompt?.length}),B(b.prompt+"\n\n [Messages sent by User]")}catch(a){b7.error("Error fetching rendered prompt",a),F(a instanceof Error?a.message:"An unknown error occurred")}finally{D(!1)}};return(0,e.useEffect)(()=>{G.current&&"preview"===G.current.getMode()&&H()},[c,g,l,n,y,x?.id]),(0,d.jsxs)(h.default,{sx:{display:"flex",flexDirection:"column",height:"100%",pl:2},children:[(0,d.jsxs)(h.default,{sx:{display:"flex",justifyContent:"space-between",alignItems:"center",mb:2},children:[(0,d.jsx)(i.default,{variant:"h6",children:"Prompt Template"}),(0,d.jsxs)(h.default,{sx:{display:"flex",gap:2},children:[(0,d.jsx)(bg.A,{control:(0,d.jsx)(b1.A,{checked:g,onChange:a=>k(a.target.checked),color:"primary",size:"small"}),label:"Exclude Model Prompt"}),(0,d.jsx)(bg.A,{control:(0,d.jsx)(b1.A,{checked:l,onChange:a=>m(a.target.checked),color:"primary",size:"small"}),label:"Exclude Start Node Prompt"}),(0,d.jsx)(bg.A,{control:(0,d.jsx)(b1.A,{checked:n,onChange:a=>p(a.target.checked),color:"primary",size:"small"}),label:"Exclude System Prompt"})]})]}),(0,d.jsxs)(h.default,{sx:{mb:2,p:2,bgcolor:"rgba(0, 0, 0, 0.03)",borderRadius:1,fontSize:"0.85rem"},children:[(0,d.jsx)(i.default,{variant:"caption",sx:{display:"block",mb:1,fontWeight:"bold"},children:"Prompt Rendering Order:"}),(0,d.jsxs)(h.default,{sx:{display:"flex",flexDirection:"column",gap:.5},children:[!l&&(0,d.jsxs)(h.default,{sx:{display:"flex",alignItems:"center"},children:[(0,d.jsx)(i.default,{variant:"caption",sx:{color:"primary.main",fontWeight:"medium"},children:"1. Start Node Prompt"}),(0,d.jsx)(i.default,{variant:"caption",sx:{ml:1,color:"text.secondary"},children:"(from the Start node in this flow)"})]}),!g&&v&&(0,d.jsxs)(h.default,{sx:{display:"flex",alignItems:"center"},children:[(0,d.jsxs)(i.default,{variant:"caption",sx:{color:"secondary.main",fontWeight:"medium"},children:[l?"1.":"2."," Model Prompt"]}),(0,d.jsxs)(i.default,{variant:"caption",sx:{ml:1,color:"text.secondary"},children:["(from the selected model: ",(()=>{let a=x.properties?.boundModel;if(!a)return"None";let b=w.find(b=>b.id===a);return b?b.displayName||b.name:x.properties?.modelName||"None"})(),")"]})]}),(0,d.jsxs)(h.default,{sx:{display:"flex",alignItems:"center"},children:[(0,d.jsxs)(i.default,{variant:"caption",sx:{fontWeight:"medium"},children:[l||g||!v?l&&(g||!v)?"1.":"2.":"3."," This Node's Prompt"]}),(0,d.jsx)(i.default,{variant:"caption",sx:{ml:1,color:"text.secondary"},children:"(defined below)"})]}),(0,d.jsxs)(h.default,{sx:{display:"flex",alignItems:"center"},children:[(0,d.jsxs)(i.default,{variant:"caption",sx:{fontWeight:"medium"},children:[l||g||!v?l&&(g||!v)?"2.":"3.":"4."," ","isolated"===q?"Isolated prompt":"latest-message"===q?"Latest message only":"Conversation History"]}),(0,d.jsx)(i.default,{variant:"caption",sx:{ml:1,color:"text.secondary"},children:"isolated"===q?"(the prompt below, as the user message)":"latest-message"===q?"(only the most recent user message)":"(coming from ChatCompletion endpoint)"})]})]})]}),(0,d.jsxs)(h.default,{sx:{mb:2},children:[(0,d.jsx)(i.default,{variant:"subtitle2",sx:{mb:1},children:"What does the model receive?"}),(0,d.jsxs)(h.default,{role:"radiogroup","aria-label":"Model input",sx:{display:"flex",gap:1.5,flexWrap:"wrap"},children:[(0,d.jsx)(b6,{selected:"full-history"===q,onClick:()=>r("full-history"),icon:(0,d.jsx)(b2,{fontSize:"small"}),title:"Full conversation",description:"The model sees this node's prompt plus the whole conversation so far. The default."}),(0,d.jsx)(b6,{selected:"latest-message"===q,onClick:()=>r("latest-message"),icon:(0,d.jsx)(b3,{fontSize:"small"}),title:"Latest message only",description:"The model sees this node's prompt plus only the most recent user message."}),(0,d.jsx)(b6,{selected:"isolated"===q,onClick:()=>r("isolated"),icon:(0,d.jsx)(b4,{fontSize:"small"}),title:"Isolated",description:"The conversation is ignored. The model sees this node's prompt plus the prompt below, sent as the user message."})]}),"isolated"===q&&(0,d.jsx)(t.A,{fullWidth:!0,label:"Isolated prompt",value:s,onChange:a=>u(a.target.value),margin:"normal",multiline:!0,rows:2,helperText:"Sent to the model as the user message. The prior conversation is not shown to the model (it is still kept in the transcript for later nodes)."})]}),(0,d.jsx)(h.default,{sx:{flexGrow:1,display:"flex",flexDirection:"column",height:"calc(100% - 120px)"},children:(0,d.jsx)(b5.A,{ref:G,value:c,onChange:f,label:"",height:"100%",onModeChange:a=>{"preview"===a&&H()},customPreviewRenderer:()=>C?(0,d.jsx)(h.default,{sx:{display:"flex",justifyContent:"center",alignItems:"center",height:"100%"},children:(0,d.jsx)(aE.default,{size:40})}):E?(0,d.jsxs)(h.default,{sx:{display:"flex",flexDirection:"column",p:2},children:[(0,d.jsx)(o.A,{severity:"error",sx:{mb:2},action:(0,d.jsx)(j.A,{color:"inherit",size:"small",onClick:H,children:"Retry"}),children:E}),(0,d.jsx)(i.default,{variant:"body2",color:"text.secondary",sx:{mb:2,textAlign:"center"},children:y?"Check that the flow and node IDs are valid and try again.":"This flow hasn't been saved yet. Save the flow first to enable complete preview."})]}):(0,d.jsxs)(h.default,{sx:{p:2},children:[(0,d.jsx)(i.default,{variant:"subtitle1",gutterBottom:!0,sx:{fontWeight:"medium"},children:"Complete Rendered Prompt"}),(0,d.jsx)(A.A,{elevation:0,sx:{p:2,overflow:"auto",bgcolor:"rgba(0, 0, 0, 0.02)",border:"1px solid rgba(0, 0, 0, 0.1)",borderRadius:1},children:(0,d.jsx)(h.default,{component:"pre",sx:{whiteSpace:"pre-wrap",wordBreak:"break-word",fontFamily:"monospace",fontSize:"0.875rem",m:0},children:z||"No rendered prompt available. Please check your flow configuration."})})]})})})]})});b8.displayName="PromptTemplateEditor";var b9=c(98256),ca=c(7675);let cb=({nodeData:a,handlePropertyChange:b,properties:c})=>(0,d.jsx)(d.Fragment,{children:c.length>0&&(0,d.jsxs)(h.default,{sx:{mt:3},children:[(0,d.jsx)(i.default,{variant:"subtitle1",gutterBottom:!0,children:"Node Properties"}),c.map(c=>(c=>{if(!a)return null;let e=a.properties?.[c.key]??"";switch(c.type){case"text":return(0,d.jsx)(t.A,{fullWidth:!0,label:c.label,multiline:c.multiline,rows:c.multiline?4:1,value:e,onChange:a=>b(c.key,a.target.value),margin:"normal",helperText:c.helperText},c.key);case"number":return(0,d.jsx)(t.A,{fullWidth:!0,type:"number",label:c.label,value:e,inputProps:{min:c.min,max:c.max,step:c.step},onChange:a=>{let d=a.target.value;b(c.key,""===d?void 0:Number(d))},margin:"normal",helperText:c.helperText},c.key);case"select":return(0,d.jsxs)(a4.A,{fullWidth:!0,margin:"normal",children:[(0,d.jsx)(b9.A,{children:c.label}),(0,d.jsx)(ca.A,{value:e||"",label:c.label,onChange:a=>b(c.key,a.target.value),children:c.options?.map(a=>(0,d.jsx)(S.A,{value:a,children:a},a))})]},c.key);case"boolean":return(0,d.jsx)(bg.A,{control:(0,d.jsx)(b1.A,{checked:e||!1,onChange:a=>b(c.key,a.target.checked)}),label:c.label,sx:{my:1}},c.key);default:return null}})(c))]})}),cc=(0,C.h)("frontend/components/Flow/FlowManager/FlowBuilder/Modals/ProcessNodePropertiesModal"),cd=({open:a,node:b,onClose:c,onSave:f,flowEdges:g=[],flowNodes:k=[],flowId:m,onConnectMcpServer:n})=>{cc.debug("ProcessNodePropertiesModal rendered with:",{node:b,flowId:m});let{nodeData:o,setNodeData:s,handlePropertyChange:t}=(a=>{let[b,c]=(0,e.useState)(null);(0,e.useEffect)(()=>{a&&c({id:a.id,...a.data,properties:{...a.data.properties}})},[a]);let d=(0,e.useCallback)((a,b)=>{c(c=>c?{...c,properties:{...c.properties,[a]:b}}:null)},[]);return{nodeData:b,setNodeData:c,handlePropertyChange:d}})(b),[v,w]=(0,e.useState)(""),[x,y]=(0,e.useState)(!1),[z,A]=(0,e.useState)(!1),[C,D]=(0,e.useState)(!1),[E,F]=(0,e.useState)(!1),[H,I]=(0,e.useState)("full-history"),[J,K]=(0,e.useState)(""),[L,M]=(0,e.useState)("server"),{models:N,isLoadingModels:O,loadError:P,handleModelSelect:Q,handleUnbindModel:R}=((a,b,c,d,f)=>{aZ.debug("useModelManagement: Entering hook");let[g,h]=(0,e.useState)([]),[i,j]=(0,e.useState)(!1),[k,l]=(0,e.useState)(null);(0,e.useEffect)(()=>{aZ.debug("useModelManagement useEffect: Checking if modal is open",{open:a}),a&&m()},[a]),(0,e.useEffect)(()=>{if(0===g.length)return;let a=b?.properties?.boundModel;if(!a)return;let d=g.find(b=>b.id===a);d&&d.name&&b?.properties?.modelName!==d.name&&c(a=>a&&a.properties?.modelName!==d.name?{...a,properties:{...a.properties,modelName:d.name}}:a)},[g,b?.properties?.boundModel,b?.properties?.modelName,c]);let m=async()=>{aZ.debug("loadModels: Entering method"),j(!0),l(null);try{let a=await aR.N.loadModels();h(a)}catch(a){aZ.warn("loadModels: Failed to load models:",a),l("Failed to load models")}j(!1)},n=(0,e.useCallback)(a=>{aZ.debug("handleModelSelect: Entering method",{modelId:a});let b=g.find(b=>b.id===a);b&&(c(c=>{if(!c)return null;let d=g.find(a=>a.id===c.properties?.boundModel),e=aY({currentLabel:c.label,nameIsCustom:c.properties?.nameIsCustom,defaultLabel:"Process Node",previousAutoLabel:d?d.displayName||d.name:void 0,nextAutoLabel:b.displayName||b.name});return{...c,label:e,properties:{...c.properties,boundModel:a,modelName:b.name}}}),f(!0))},[g,c,d,f]);return{models:g,isLoadingModels:i,loadError:k,handleModelSelect:n,handleUnbindModel:(0,e.useCallback)(()=>{aZ.debug("handleUnbindModel: Entering method"),c(a=>{if(!a)return null;let{boundModel:b,modelName:c,...d}=a.properties;return{...a,properties:{...d,promptTemplate:d.promptTemplate||""}}}),f(!1)},[c,f])}})(a,o,s,w,y),{connectedMcpNodes:S,allServers:T,isLoadingServers:U,selectedToolServerNodeId:V,serverToolsMap:W,serverStatuses:X,isLoadingTools:Y,handleSelectToolServer:Z,isLoadingSelectedServerTools:$,handleRetryServer:_,handleRestartServer:aa}=((a,b,c,d)=>{let f=(0,a$.v)(),g=f.servers||[],h=f.isLoading||!1,[i,j]=(0,e.useState)({}),[k,l]=(0,e.useState)({}),[m,n]=(0,e.useState)({}),[o,p]=(0,e.useState)(null),[q,r]=(0,e.useState)(!1),s=(0,e.useMemo)(()=>b?((a,b)=>[...new Set(b.filter(b=>b.source===a&&b.data?.edgeType==="mcp"||b.target===a&&b.data?.edgeType==="mcp").map(b=>b.source===a?b.target:b.source))])(b.id,c):[],[b,c]),t=(0,e.useMemo)(()=>{if(!b||0===s.length)return[];if(!d||!Array.isArray(d))return a_.warn("flowNodes is not available or not an array when filtering connected servers"),[];try{let a=[],b=new Set;return s.forEach(c=>{if(b.has(c))return;let e=d.find(a=>a&&a.id===c);if(!e||!e.data||!e.data.properties)return void a_.warn(`Could not find valid MCP node data for ID ${c}`);let f=e.data.properties.boundServer;if(!f)return void a_.warn(`MCP node ${c} is not bound to any server.`);let h=g.find(a=>a.name===f),i=h?.status||"unknown",j=e.data.properties.enabledTools||[];a.push({nodeId:c,serverName:f,status:i,enabledTools:Array.isArray(j)?j:[]}),b.add(c)}),a_.debug("Generated connectedMcpNodes:",JSON.stringify(a)),a}catch(a){return a_.error("Error preparing connected MCP nodes:",a),[]}},[b,s,g,d]);(0,e.useEffect)(()=>{if(t&&t.length>0){let a={};t.forEach(b=>{let c=g.find(a=>a.name===b.serverName);a[b.serverName]=c?.status||b.status||"unknown"}),j(a)}},[t,g]),(0,e.useEffect)(()=>{if(a&&t.length>0){let a=Array.from(new Set(t.map(a=>a.serverName)));(async()=>{let b={},c={...k},d=a.filter(a=>{let b=g.find(b=>b.name===a);return b?.status==="connected"&&!k[a]&&!m[a]});0!==d.length&&(d.forEach(a=>{b[a]=!0}),n(a=>({...a,...b})),await Promise.all(d.map(async a=>{try{a_.debug(`Loading tools for server: ${a}`);let b=await G.S.listServerTools(a);if(b.error)a_.warn(`Error loading tools for ${a}:`,b.error),c[a]=[];else{let d=b.tools||[];a_.debug(`Loaded ${d.length} tools for ${a}`),c[a]=d}}catch(b){a_.warn(`Failed to load tools for server ${a}:`,b),c[a]=[]}finally{n(b=>({...b,[a]:!1}))}})),l(c))})()}},[a,t,g]);let u=(0,e.useRef)(k);(0,e.useEffect)(()=>{u.current=k},[k]);let v=(0,e.useCallback)(a=>{a_.debug(`Selected MCP Node ID: ${a}`),p(a);let b=t.find(b=>b.nodeId===a),c=b?.serverName;!c||u.current[c]||m[c]?r(m[c||""]||!1):(a_.debug(`Tools not loaded for server ${c}, loading now.`),r(!0),n(a=>({...a,[c]:!0})),G.S.listServerTools(c).then(a=>{let b=a.tools||[];a.error?a_.warn(`Error loading tools for ${c}:`,a.error):a_.debug(`Loaded ${b.length} tools for ${c}`),l(a=>({...a,[c]:b}))}).catch(a=>{a_.warn(`Failed to load tools for server ${c}:`,a),l(a=>({...a,[c]:[]}))}).finally(()=>{r(!1),n(a=>({...a,[c]:!1}))}))},[t,m]),w=(0,e.useRef)(f);return(0,e.useEffect)(()=>{w.current=f},[f]),{connectedMcpNodes:t,allServers:g,isLoadingServers:h,selectedToolServerNodeId:o,serverToolsMap:k,serverStatuses:i,isLoadingTools:m,handleSelectToolServer:v,isLoadingSelectedServerTools:q,handleRetryServer:(0,e.useCallback)(async a=>{a_.debug(`Retrying server: ${a}`),n(b=>({...b,[a]:!0}));try{await w.current.retryServer(a);let b=await G.S.listServerTools(a);if(b.error)return a_.warn(`Error loading tools for ${a} after retry:`,b.error),!1;{let c=b.tools||[];return a_.debug(`Loaded ${c.length} tools for ${a} after retry`),l(b=>({...b,[a]:c})),!0}}catch(b){return a_.warn(`Failed to retry or load tools for server ${a}:`,b),!1}finally{n(b=>({...b,[a]:!1}))}},[]),handleRestartServer:(0,e.useCallback)(async a=>{a_.debug(`Restarting server: ${a}`),n(b=>({...b,[a]:!0}));try{await G.S.restartServer(a),await new Promise(a=>setTimeout(a,1e3));let b=await G.S.listServerTools(a);if(b.error)return a_.warn(`Error loading tools for ${a} after restart:`,b.error),!1;{let c=b.tools||[];return a_.debug(`Loaded ${c.length} tools for ${a} after restart`),l(b=>({...b,[a]:c})),!0}}catch(b){return a_.warn(`Failed to restart or load tools for server ${a}:`,b),!1}finally{n(b=>({...b,[a]:!1}))}},[])}})(a,b,g,k),ab=((a,b,c,d)=>{let[f,g]=(0,e.useState)([]),[h,i]=(0,e.useState)(!1),j=(0,e.useMemo)(()=>b?function(a,b){let c=[];for(let d of b)!("string"==typeof d.data?.edgeType&&d.data.edgeType.includes("mcp"))&&(d.source===a?c.push(d.target):d.target===a&&d.data?.bidirectional&&c.push(d.source));return[...new Set(c)]}(b.id,c):[],[b,c]);return(0,e.useEffect)(()=>{if(a&&b){i(!0);try{let a=j.map(a=>d.find(b=>b.id===a)).filter(a=>!!a),b=function(a){let b=new Set,c=new Map;for(let d of a){if(c.has(d.id))continue;let a=function(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"}(d.label,d.type),e=`${a0}${a}`;if(b.has(e)){let c=2;for(;b.has(`${a0}${a}_${c}`);)c++;e=`${a0}${a}_${c}`}b.add(e),c.set(d.id,e)}return c}(a.map(a=>({id:a.id,label:a.data.label,type:a.type||a.data.type}))),c=a.map(a=>({name:b.get(a.id)||`handoff_to_${a.id}`,description:function(a){if(a.userDescription&&a.userDescription.trim())return a1(a.userDescription,1500);let b=`Hand off execution to ${a.label} (${a.type}).`,c=[];!function a(b,c,d){let e=" ".repeat(c);if(b.userDescription&&b.userDescription.trim())return void d.push(`${e}${a1(b.userDescription,200)}`);if("subflow"===b.type){if(b.subflowMissing)return void d.push(`${e}Runs a subflow (referenced flow not found).`);if(b.subflowDetailsUnavailable){let a=b.subflowName?` "${b.subflowName}"`:"";d.push(`${e}Runs a subflow${a} (contents summarised when the flow runs).`);return}if(d.push(`${e}Runs the subflow "${b.subflowName??"unknown"}", which contains:`),b.depthCapReached)return void d.push(`${e} (nested subflows omitted — recursion depth limit reached)`);let f=b.children??[];if(0===f.length)return void d.push(`${e} (no process or subflow steps)`);for(let b of f.slice(0,10))d.push(`${e} - ${b.label}:`),a(b,c+2,d);return void(f.length>10&&d.push(`${e} - …and ${f.length-10} more step(s)`))}if(b.modelName&&d.push(`${e}Model: ${b.modelName}`),b.promptSummary&&d.push(`${e}Role: ${a1(b.promptSummary,200)}`),b.servers&&b.servers.length>0)for(let a of b.servers)if(a.connected&&a.tools&&a.tools.length>0){let b=a.tools.slice(0,10),c=a.tools.length-b.length,f=c>0?`, +${c} more`:"";d.push(`${e}Tools (${a.name}): ${b.join(", ")}${f}`)}else d.push(`${e}Tools (${a.name}): server not connected`)}(a,0,c);let d=c.join("\n").trim(),e=d?`${b}
3
2
  ${d}`:b;if(e.length<=1500)return e;let f=1500-b.length-2;return f<=0?b:`${b}
4
- ${a0(d,f)}`}(function(a){let b=a.type||a.data.type||"unknown",c=a.data.label||"Unknown Node",d=a.data.description,e=a.data.properties||{},f={label:c,type:b,userDescription:d};if(d&&d.trim())return f;if("subflow"===b)return f.subflowDetailsUnavailable=!0,f;"string"==typeof e.boundModel&&e.boundModel&&(f.modelName=e.boundModel),"string"==typeof e.promptTemplate&&e.promptTemplate.trim()&&(f.promptSummary=e.promptTemplate);let g=Array.isArray(e.mcpNodes)?e.mcpNodes:[],h=[],i=new Set;for(let a of g){let b=a?.properties?.boundServer;if(!b||i.has(b))continue;i.add(b);let c=Array.isArray(a?.properties?.enabledTools)?a.properties.enabledTools:[];h.push({name:b,connected:!0,tools:c})}return h.length>0&&(f.servers=h),f}(a)),inputSchema:{type:"object",properties:{},required:[]}}));g(c),a1.debug("Generated handoff tools",{toolsCount:c.length})}catch(a){a1.error("Error generating handoff tools",a),g([])}finally{i(!1)}}else g([])},[a,b,j,c,d]),{handoffTools:f,isLoadingHandoffTools:h}})(a,b,g,k),$=Z?.handoffTools||[],_=Z?.isLoadingHandoffTools||!1;(0,e.useEffect)(()=>{a&&b&&b7.debug("Handoff tools:",{count:$.length,tools:$.map(a=>a.name)})},[a,b,$]),(0,e.useEffect)(()=>{b&&(w(b.data.properties?.promptTemplate||""),b.data.properties?.boundModel?y(!0):y(!1),B(b.data.properties?.excludeModelPrompt||!1),D(b.data.properties?.excludeStartNodePrompt||!1),G(b.data.properties?.excludeSystemPrompt||!1))},[b,a]);let aa=(0,e.useRef)(null),ab=(a,b,c="server")=>{if(b7.debug("handleInsertToolBinding called with:",JSON.stringify({serverName:a,toolName:b})),!a||!b)return void b7.warn("Invalid parameters for handleInsertToolBinding:",{serverName:a,toolName:b});let d=(S[a]||[]).find(a=>a.name===b);d?.description;let e="handoff"===c?(0,aL.X8)("tool","handoff",b):(0,aL.X8)("tool",a,b),f=(!(v.length>0)||v.endsWith(" ")||v.endsWith("\n")?"":" ")+e;aa.current?(b7.debug("Inserting text into PromptBuilder:",JSON.stringify({textToInsert:f})),aa.current.insertText(f),b7.debug("Tool binding inserted successfully")):b7.warn("promptBuilderRef.current is null, cannot insert text")};if(!b||!o)return null;let ac=o.properties?.boundModel||"";return(0,d.jsxs)(p.A,{open:a,onClose:c,maxWidth:"xl",fullWidth:!0,PaperProps:{sx:{borderTop:5,borderColor:"secondary.main",width:"95vw",height:"90vh",maxWidth:"95vw",maxHeight:"90vh"}},children:[(0,d.jsx)(q.A,{component:"div",children:(0,d.jsxs)(h.default,{display:"flex",alignItems:"center",justifyContent:"space-between",children:[(0,d.jsxs)(i.default,{variant:"h6",children:[o.label||"Process Node"," Properties"]}),(0,d.jsx)(l.A,{edge:"end",color:"inherit",onClick:c,"aria-label":"close",children:(0,d.jsx)(aW.A,{})})]})}),(0,d.jsx)(A.A,{}),(0,d.jsx)(r.A,{sx:{display:"flex",flexDirection:"column",p:3,overflow:"auto",height:"calc(90vh - 130px)"},children:(0,d.jsxs)(aT.Ay,{container:!0,spacing:2,sx:{flexGrow:1,height:"100%"},children:[(0,d.jsxs)(aT.Ay,{item:!0,xs:6,sx:{display:"flex",flexDirection:"column",height:"100%",overflow:"auto"},children:[(0,d.jsx)(h.default,{sx:{mb:3},children:(0,d.jsx)(a2,{nodeData:o,setNodeData:s})}),(0,d.jsx)(h.default,{sx:{mb:3},children:(0,d.jsx)(bE,{isLoadingModels:K,loadError:L,models:J,selectedModelId:ac,handleModelSelect:M,isModelBound:x,handleUnbindModel:N})}),(0,d.jsxs)(h.default,{sx:{mb:3},children:[(0,d.jsx)(h.default,{sx:{borderBottom:1,borderColor:"divider",mb:2},children:(0,d.jsxs)(aU.A,{value:H,onChange:(a,b)=>I(b),children:[(0,d.jsx)(aV.A,{label:"Server Tools",value:"server"}),(0,d.jsx)(aV.A,{label:"Resources",value:"resources"}),(0,d.jsx)(aV.A,{label:"Agent Tools",value:"agent"})]})}),"server"===H&&(0,d.jsx)(bV,{isLoadingServers:Q,connectedMcpNodes:O,availableServers:P,onConnectMcpServer:n,serverStatuses:T,serverToolsMap:S,isLoadingTools:U,handleInsertToolBinding:ab,selectedToolServerNodeId:R,selectedNodeId:b?.id||null,handleSelectToolServer:V,isLoadingSelectedServerTools:W,promptBuilderRef:aa,handleRetryServer:X,handleRestartServer:Y}),"resources"===H&&(0,d.jsx)(bZ,{connectedMcpNodes:O,handleInsertResourceBinding:(a,b)=>{if(!a||!b)return void b7.warn("Invalid parameters for handleInsertResourceBinding:",{serverName:a,uri:b});let c=(0,aL.X8)("resource",a,b),d=v.length>0&&!v.endsWith(" ")&&!v.endsWith("\n");aa.current?aa.current.insertText((d?" ":"")+c):b7.warn("promptBuilderRef.current is null, cannot insert resource binding")},promptBuilderRef:aa}),"agent"===H&&(0,d.jsx)(b_,{handoffTools:$,isLoadingHandoffTools:_,handleInsertToolBinding:(a,b)=>ab(a,b,"handoff"),promptBuilderRef:aa})]}),(0,d.jsx)(h.default,{children:(0,d.jsx)(b6,{nodeData:o,handlePropertyChange:t,properties:[{key:"maxTurns",label:"Max Turns (override)",type:"number",min:1,helperText:"Optional. Overrides the bound model's Max Turns for this node. Leave empty to inherit the model setting (default 50)."}]})})]}),(0,d.jsx)(aT.Ay,{item:!0,xs:6,sx:{height:"100%",display:"flex",flexDirection:"column"},children:(0,d.jsx)(b3,{ref:aa,promptTemplate:v,handlePromptChange:a=>{w(a),s(b=>b?{...b,properties:{...b.properties,promptTemplate:a}}:null)},excludeModelPrompt:z,setExcludeModelPrompt:B,excludeStartNodePrompt:C,setExcludeStartNodePrompt:D,excludeSystemPrompt:E,setExcludeSystemPrompt:G,isModelBound:x,models:J,nodeData:o,flowId:m})})]})}),(0,d.jsxs)(u.A,{children:[(0,d.jsx)(j.A,{onClick:c,children:"Cancel"}),(0,d.jsx)(j.A,{onClick:()=>{if(b&&o){let a={...o,properties:{...o.properties,promptTemplate:v,excludeModelPrompt:z,excludeStartNodePrompt:C,excludeSystemPrompt:E}};f(b.id,a),c()}},variant:"contained",color:"primary",children:"Save Changes"})]})]})};var b9=c(2173),ca=c(88117);let cb=(0,B.h)("frontend/components/Flow/FlowManager/FlowBuilder/Modals/MCPNodePropertiesModal"),cc=({open:a,node:b,onClose:c,onSave:f})=>{let[g,k]=(0,e.useState)(null),{servers:n,isLoading:o,loadError:s,retryServer:v}=(0,aZ.v)(),[w,x]=(0,e.useState)({}),{tools:y,isLoading:B,error:C,loadTools:D}=(0,ca.O)(g?.properties?.boundServer||"");(0,e.useEffect)(()=>{b&&k({...b.data,properties:{...b.data.properties}})},[b,a]);let E=g?.properties?.boundServer||"";(0,e.useEffect)(()=>{y&&y.length>0&&(a=>{g&&0===(g.properties.enabledTools||[]).length&&a.length>0&&(cb.debug("Enabling all tools by default"),k(b=>b?{...b,properties:{...b.properties,enabledTools:a.map(a=>a.name)}}:null))})(y)},[y]);let F=(a,b)=>{k(c=>c?{...c,properties:{...c.properties,[a]:b}}:null)},G=async(a,b)=>{b&&b.stopPropagation(),cb.debug(`Retrying server: ${a}`),x(b=>({...b,[a]:!0}));try{return await v(a),a===E&&D(!0),!0}catch(b){return cb.warn(`Failed to retry server ${a}: ${b}`),!1}finally{setTimeout(()=>{x(b=>({...b,[a]:!1}))},500)}};if(!b||!g)return null;let H=g.properties?.boundServer||"",I=g.properties?.enabledTools||[],J=g.properties?.toolTimeout,K=-1===J;return(0,d.jsxs)(p.A,{open:a,onClose:c,maxWidth:"md",fullWidth:!0,PaperProps:{sx:{borderTop:5,borderColor:"info.main",height:"80vh",maxHeight:"80vh"}},children:[(0,d.jsx)(q.A,{component:"div",children:(0,d.jsxs)(h.default,{display:"flex",alignItems:"center",justifyContent:"space-between",children:[(0,d.jsxs)(i.default,{variant:"h6",children:[g.label||"MCP Node"," Properties"]}),(0,d.jsx)(l.A,{edge:"end",color:"inherit",onClick:c,"aria-label":"close",children:(0,d.jsx)(aW.A,{})})]})}),(0,d.jsx)(A.A,{}),(0,d.jsxs)(r.A,{sx:{display:"flex",flexDirection:"column",p:3,overflow:"auto"},children:[(0,d.jsx)(t.A,{fullWidth:!0,label:"Node Label",value:g.label||"",onChange:a=>{k(b=>b?{...b,label:a.target.value,properties:{...b.properties,nameIsCustom:!0}}:null)},margin:"normal",helperText:"The display name for this node on the canvas",sx:{mb:2}}),(0,d.jsxs)(h.default,{sx:{mb:4},children:[(0,d.jsx)(i.default,{variant:"subtitle1",gutterBottom:!0,children:"Bind to MCP Server"}),o?(0,d.jsxs)(h.default,{sx:{display:"flex",alignItems:"center",gap:1},children:[(0,d.jsx)(aD.default,{size:20}),(0,d.jsx)(i.default,{color:"text.secondary",children:"Loading MCP servers..."})]}):s?(0,d.jsx)(i.default,{color:"error",children:s}):0===n.length?(0,d.jsx)(i.default,{color:"text.secondary",children:"No MCP servers available. Add some in the MCP Manager."}):(0,d.jsx)(d.Fragment,{children:(0,d.jsxs)(a3.A,{component:"fieldset",fullWidth:!0,children:[(0,d.jsx)(be,{value:H,onChange:a=>(a=>{cb.debug(`Server selected: ${a}`),cb.debug(`Server selected: ${a}`),k(b=>{if(!b)return null;let c=aX({currentLabel:b.label,nameIsCustom:b.properties?.nameIsCustom,defaultLabel:"MCP Node",previousAutoLabel:b.properties?.boundServer||void 0,nextAutoLabel:a});return{...b,label:c,properties:{...b.properties,boundServer:a}}})})(a.target.value),children:(0,d.jsx)(aT.Ay,{container:!0,spacing:2,children:n.map(a=>(0,d.jsx)(aT.Ay,{item:!0,xs:12,sm:6,children:(0,d.jsx)(z.A,{elevation:1,sx:{p:2,border:2*(H===a.name),borderColor:"primary.main",opacity:"connected"===a.status?1:.6},children:(0,d.jsxs)(h.default,{sx:{display:"flex",width:"100%",alignItems:"flex-start"},children:[(0,d.jsx)(bf.A,{value:a.name,control:(0,d.jsx)(bB,{}),label:(0,d.jsxs)(h.default,{children:[(0,d.jsx)(i.default,{variant:"subtitle2",children:a.name}),(0,d.jsx)(i.default,{variant:"caption",color:"text.secondary",display:"block",children:a.path}),(0,d.jsxs)(i.default,{variant:"caption",color:"connected"===a.status?"success.main":"error"===a.status?"error.main":"text.secondary",children:["Status: ",a.status]})]}),sx:{width:"calc(100% - 40px)",m:0}}),(0,d.jsx)(m.A,{title:"Retry connection",children:(0,d.jsx)(l.A,{size:"small",onClick:b=>G(a.name,b),disabled:w[a.name],sx:{mt:1},children:w[a.name]?(0,d.jsx)(aD.default,{size:16}):(0,d.jsx)(bQ.A,{fontSize:"small"})})})]})})},a.name))})}),(0,d.jsx)(bC.A,{children:H?`This node will use the "${H}" MCP server for processing.`:"Select an MCP server to bind this node to."})]})})]}),(0,d.jsx)(t.A,{fullWidth:!0,label:"Description",value:g.description||"",onChange:a=>k({...g,description:a.target.value}),margin:"normal",multiline:!0,rows:2,helperText:"This description will be displayed on the node"}),H&&(0,d.jsxs)(h.default,{sx:{mt:4},children:[(0,d.jsx)(i.default,{variant:"subtitle1",gutterBottom:!0,children:"Tool Call Timeout"}),(0,d.jsx)(i.default,{variant:"body2",color:"text.secondary",sx:{mb:1},children:"How long a single tool call on this server may run before it is aborted. Tools that report progress keep the timeout alive while they work."}),(0,d.jsxs)(h.default,{sx:{display:"flex",alignItems:"center",gap:2},children:[(0,d.jsx)(t.A,{label:"Timeout (seconds)",type:"number",size:"small",sx:{width:200},value:K?"":J??"",placeholder:String(300),disabled:K,inputProps:{min:1},onChange:a=>{let b=a.target.value;if(""===b)return void F("toolTimeout",void 0);let c=parseInt(b,10);!isNaN(c)&&c>0&&F("toolTimeout",c)},helperText:K?"No timeout — tool calls run until they finish.":"Empty = default (300 seconds / 5 minutes)."}),(0,d.jsx)(bf.A,{control:(0,d.jsx)(b0.A,{checked:K,onChange:a=>F("toolTimeout",a.target.checked?-1:void 0)}),label:"No timeout (infinite)"})]})]}),H&&(0,d.jsxs)(h.default,{sx:{mt:4},children:[(0,d.jsx)(i.default,{variant:"subtitle1",gutterBottom:!0,children:"Allowed Tools"}),n.find(a=>a.name===H)?.status!=="connected"&&(0,d.jsxs)(h.default,{sx:{mb:2,p:2,bgcolor:"error.light",borderRadius:1},children:[(0,d.jsx)(i.default,{color:"error.dark",children:"Server is disconnected. Tools cannot be fetched. Please retry the connection."}),(0,d.jsx)(j.A,{variant:"outlined",size:"small",color:"primary",startIcon:w[H]?(0,d.jsx)(aD.default,{size:16}):(0,d.jsx)(bQ.A,{}),onClick:()=>G(H),disabled:w[H],sx:{mt:1},children:"Retry Connection"})]}),B?(0,d.jsxs)(h.default,{sx:{display:"flex",alignItems:"center",gap:1},children:[(0,d.jsx)(aD.default,{size:20}),(0,d.jsx)(i.default,{color:"text.secondary",children:"Loading tools..."})]}):C?(0,d.jsx)(i.default,{color:"error",children:C}):y&&0!==y.length?(0,d.jsxs)(h.default,{sx:{mt:2},children:[(0,d.jsx)(i.default,{variant:"body2",color:"text.secondary",sx:{mb:2},children:"Select which tools this node will have access to. This helps limit the tools available to connected process nodes."}),(0,d.jsx)(aE.A,{children:y.map(a=>(0,d.jsxs)(aG.Ay,{sx:{py:0},children:[(0,d.jsx)(S.A,{sx:{minWidth:42},children:(0,d.jsx)(b0.A,{edge:"start",checked:I.includes(a.name),onChange:()=>(a=>{cb.debug(`Tool toggled: ${a}`),k(b=>{let c;if(!b)return null;let d=b.properties.enabledTools||[];return c=d.includes(a)?d.filter(b=>b!==a):[...d,a],{...b,properties:{...b.properties,enabledTools:c}}})})(a.name)})}),(0,d.jsx)(T.A,{primary:a.name,secondary:a.description,primaryTypographyProps:{fontWeight:"medium"}})]},a.name))})]}):(0,d.jsx)(i.default,{color:"text.secondary",children:n.find(a=>a.name===H)?.status==="connected"?"No tools available for this MCP server.":"Connect to the server to view available tools."})]}),H&&(0,d.jsxs)(h.default,{sx:{mt:4},children:[(0,d.jsx)(b9.A,{roots:g.properties?.roots||[],onChange:a=>F("roots",a)}),(0,d.jsxs)(i.default,{variant:"caption",color:"text.secondary",sx:{display:"block",mt:1},children:["These folders apply to this node only and are ",(0,d.jsx)("strong",{children:"added to"}),' the workspace folders configured on the "',H,'" server itself. When neither is set, the server sees its own root dir as its workspace folder.']})]})]}),(0,d.jsxs)(u.A,{children:[(0,d.jsx)(j.A,{onClick:c,children:"Cancel"}),(0,d.jsx)(j.A,{onClick:()=>{b&&g&&(f(b.id,g),c())},variant:"contained",color:"primary",children:"Save Changes"})]})]})},cd=({open:a,node:b,onClose:c,onSave:f})=>{let[g,k]=(0,e.useState)(null),[m,n]=(0,e.useState)("");return((0,e.useEffect)(()=>{b&&(k({...b.data,properties:{...b.data.properties}}),n(b.data.properties?.promptTemplate||""))},[b,a]),b&&g)?(0,d.jsxs)(p.A,{open:a,onClose:c,maxWidth:"xl",fullWidth:!0,PaperProps:{sx:{borderTop:5,borderColor:"primary.main",width:"95vw",height:"90vh",maxWidth:"95vw",maxHeight:"90vh"}},children:[(0,d.jsx)(q.A,{component:"div",children:(0,d.jsxs)(h.default,{display:"flex",alignItems:"center",justifyContent:"space-between",children:[(0,d.jsxs)(i.default,{variant:"h6",children:[g.label||"Start Node"," Properties"]}),(0,d.jsx)(l.A,{edge:"end",color:"inherit",onClick:c,"aria-label":"close",children:(0,d.jsx)(aW.A,{})})]})}),(0,d.jsx)(A.A,{}),(0,d.jsx)(r.A,{sx:{display:"flex",flexDirection:"column",p:3,overflow:"auto",height:"calc(90vh - 130px)"},children:(0,d.jsxs)(h.default,{sx:{display:"flex",flexDirection:"column",height:"100%"},children:[(0,d.jsx)(i.default,{variant:"h6",gutterBottom:!0,children:"Prompt Template"}),(0,d.jsx)(h.default,{sx:{flexGrow:1,display:"flex",flexDirection:"column",height:"calc(100% - 40px)"},children:(0,d.jsx)(b1.A,{value:m,onChange:a=>{n(a),k(b=>b?{...b,properties:{...b.properties,promptTemplate:a}}:null)},label:"",height:"100%"})})]})}),(0,d.jsxs)(u.A,{children:[(0,d.jsx)(j.A,{onClick:c,children:"Cancel"}),(0,d.jsx)(j.A,{onClick:()=>{if(b&&g){let a={...g,properties:{...g.properties,promptTemplate:m}};f(b.id,a),c()}},variant:"contained",color:"primary",children:"Save Changes"})]})]}):null},ce=({open:a,node:b,onClose:c,onSave:f})=>{let[g,k]=(0,e.useState)(null);return((0,e.useEffect)(()=>{b&&k({...b.data,properties:{...b.data.properties}})},[b,a]),b&&g)?(0,d.jsxs)(p.A,{open:a,onClose:c,maxWidth:"md",fullWidth:!0,PaperProps:{sx:{borderTop:5,borderColor:"success.main",width:"600px",height:"400px",maxWidth:"95vw",maxHeight:"90vh"}},children:[(0,d.jsx)(q.A,{component:"div",children:(0,d.jsxs)(h.default,{display:"flex",alignItems:"center",justifyContent:"space-between",children:[(0,d.jsxs)(i.default,{variant:"h6",children:[g.label||"Finish Node"," Properties"]}),(0,d.jsx)(l.A,{edge:"end",color:"inherit",onClick:c,"aria-label":"close",children:(0,d.jsx)(aW.A,{})})]})}),(0,d.jsx)(A.A,{}),(0,d.jsx)(r.A,{sx:{display:"flex",flexDirection:"column",p:3,overflow:"auto"},children:(0,d.jsx)(h.default,{sx:{display:"flex",flexDirection:"column",height:"100%",justifyContent:"center",alignItems:"center",py:4},children:(0,d.jsxs)(z.A,{elevation:0,sx:{p:4,textAlign:"center",backgroundColor:"rgba(76, 175, 80, 0.08)",borderRadius:2,width:"100%"},children:[(0,d.jsx)(i.default,{variant:"h6",color:"success.main",gutterBottom:!0,children:"Finish Node"}),(0,d.jsx)(i.default,{variant:"body1",color:"text.secondary",children:"This is the end point of your flow. No additional configuration is needed."}),(0,d.jsx)(i.default,{variant:"body2",color:"text.secondary",sx:{mt:2,fontStyle:"italic"},children:"Future versions will support output formatting options."})]})})}),(0,d.jsxs)(u.A,{children:[(0,d.jsx)(j.A,{onClick:c,children:"Cancel"}),(0,d.jsx)(j.A,{onClick:()=>{b&&g&&(f(b.id,g),c())},variant:"contained",color:"primary",children:"Save"})]})]}):null},cf=(0,v.A)((0,d.jsx)("path",{d:"M15 4v7H5.17L4 12.17V4zm1-2H3c-.55 0-1 .45-1 1v14l4-4h10c.55 0 1-.45 1-1V3c0-.55-.45-1-1-1m5 4h-2v9H6v2c0 .55.45 1 1 1h11l4 4V7c0-.55-.45-1-1-1"}),"ForumOutlined"),cg=(0,v.A)((0,d.jsx)("path",{d:"M20 2H4c-1.1 0-2 .9-2 2v18l4-4h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2m0 14H6l-2 2V4h16z"}),"ChatBubbleOutline"),ch=(0,v.A)((0,d.jsx)("path",{d:"M13 3c-4.97 0-9 4.03-9 9H1l3.89 3.89.07.14L9 12H6c0-3.87 3.13-7 7-7s7 3.13 7 7-3.13 7-7 7c-1.93 0-3.68-.79-4.94-2.06l-1.42 1.42C8.27 19.99 10.51 21 13 21c4.97 0 9-4.03 9-9s-4.03-9-9-9m-1 5v5l4.28 2.54.72-1.21-3.5-2.08V8z"}),"History"),ci=(0,v.A)((0,d.jsx)("path",{d:"M4 9h16v2H4zm0 4h10v2H4z"}),"ShortText"),cj=(0,B.h)("frontend/components/Flow/FlowManager/FlowBuilder/Modals/SubflowNodePropertiesModal"),ck=({selected:a,icon:b,title:c,description:e,onClick:f})=>(0,d.jsxs)(h.default,{role:"radio","aria-checked":a,tabIndex:0,onClick:f,onKeyDown:a=>{("Enter"===a.key||" "===a.key)&&(a.preventDefault(),f())},sx:{flex:1,position:"relative",p:2,borderRadius:2,border:2,borderColor:a?"primary.main":"divider",bgcolor:a?"action.selected":"background.paper",cursor:"pointer",transition:"border-color 120ms, background-color 120ms","&:hover":{borderColor:a?"primary.main":"text.disabled"},outline:"none","&:focus-visible":{boxShadow:a=>`0 0 0 3px ${a.palette.primary.light}`}},children:[a&&(0,d.jsx)(aK.A,{color:"primary",fontSize:"small",sx:{position:"absolute",top:8,right:8}}),(0,d.jsxs)(h.default,{sx:{display:"flex",alignItems:"center",gap:1,mb:.5,color:a?"primary.main":"text.secondary"},children:[b,(0,d.jsx)(i.default,{variant:"subtitle1",sx:{fontWeight:600,color:"text.primary"},children:c})]}),(0,d.jsx)(i.default,{variant:"body2",color:"text.secondary",children:e})]}),cl=({open:a,node:b,onClose:c,onSave:f,flowId:g})=>{let[k,m]=(0,e.useState)(null),[n,s]=(0,e.useState)([]),[v,w]=(0,e.useState)(!1);(0,e.useEffect)(()=>{b&&m({...b.data,properties:{...b.data.properties}})},[b,a]),(0,e.useEffect)(()=>{if(!a)return;let b=!1;return w(!0),E.g.loadFlows().then(a=>{b||s(a||[])}).catch(a=>{cj.warn("Failed to load flows for subflow picker",a),b||s([])}).finally(()=>{b||w(!1)}),()=>{b=!0}},[a]);let x=(a,b)=>{m(c=>c?{...c,properties:{...c.properties,[a]:b}}:null)};if(!b||!k)return null;let y=n.filter(a=>a.id!==g),z=k.properties?.subflowId||"",B=!!z&&!n.some(a=>a.id===z);return(0,d.jsxs)(p.A,{open:a,onClose:c,maxWidth:"md",fullWidth:!0,PaperProps:{sx:{borderTop:5,borderColor:"warning.main",maxWidth:"95vw",maxHeight:"90vh"}},children:[(0,d.jsx)(q.A,{component:"div",children:(0,d.jsxs)(h.default,{display:"flex",alignItems:"center",justifyContent:"space-between",children:[(0,d.jsxs)(i.default,{variant:"h6",children:[k.label||"Subflow Node"," Properties"]}),(0,d.jsx)(l.A,{edge:"end",color:"inherit",onClick:c,"aria-label":"close",children:(0,d.jsx)(aW.A,{})})]})}),(0,d.jsx)(A.A,{}),(0,d.jsxs)(r.A,{sx:{p:3},children:[(0,d.jsx)(i.default,{variant:"body2",color:"text.secondary",sx:{mb:2},children:"This step runs another flow inside this one — like calling a helper. When it finishes, its answer becomes part of this conversation and the flow continues to the next node."}),(0,d.jsx)(t.A,{fullWidth:!0,label:"Node Label",value:k.label||"",onChange:a=>m({...k,label:a.target.value}),margin:"normal"}),(0,d.jsxs)(a3.A,{fullWidth:!0,margin:"normal",children:[(0,d.jsx)(b4.A,{id:"subflow-select-label",children:"Flow to run"}),(0,d.jsxs)(b5.A,{labelId:"subflow-select-label",label:"Flow to run",value:B?"":z,onChange:a=>x("subflowId",a.target.value),displayEmpty:!0,children:[0===y.length&&(0,d.jsx)(R.A,{value:"",disabled:!0,children:v?"Loading flows…":"No other flows available"}),y.map(a=>(0,d.jsx)(R.A,{value:a.id,children:a.name},a.id))]})]}),B&&(0,d.jsx)(o.A,{severity:"warning",sx:{mt:1},children:"The previously selected flow no longer exists. Please choose another."}),(0,d.jsx)(t.A,{fullWidth:!0,label:"Input (optional)",value:k.properties?.promptTemplate||"",onChange:a=>x("promptTemplate",a.target.value),margin:"normal",multiline:!0,rows:3,helperText:"What to send to the subflow. Leave empty to pass this conversation (see below)."}),(0,d.jsx)(i.default,{variant:"subtitle2",sx:{mt:3,mb:1},children:"Which messages does the subflow receive?"}),(0,d.jsx)(i.default,{variant:"body2",color:"text.secondary",sx:{mb:1},children:"Only applies when the input above is left empty."}),(0,d.jsxs)(h.default,{role:"radiogroup","aria-label":"Subflow input",sx:{display:"flex",gap:2,flexWrap:"wrap"},children:[(0,d.jsx)(ck,{selected:"latest-message"!==(k.properties?.inputMode||"full-history"),onClick:()=>x("inputMode","full-history"),icon:(0,d.jsx)(ch,{}),title:"Full conversation",description:"The subflow sees the whole conversation so far. Best for a helper that should continue with all the context."}),(0,d.jsx)(ck,{selected:k.properties?.inputMode==="latest-message",onClick:()=>x("inputMode","latest-message"),icon:(0,d.jsx)(ci,{}),title:"Latest message only",description:"The subflow sees only the most recent message. Best for an orchestrator that hands off one task at a time, so old tasks don't leak in."})]}),(0,d.jsx)(i.default,{variant:"subtitle2",sx:{mt:3,mb:1},children:"What do you see in the chat while the subflow runs?"}),(0,d.jsxs)(h.default,{role:"radiogroup","aria-label":"Subflow output",sx:{display:"flex",gap:2,flexWrap:"wrap"},children:[(0,d.jsx)(ck,{selected:"final-only"!==(k.properties?.outputMode||"steps"),onClick:()=>x("outputMode","steps"),icon:(0,d.jsx)(cf,{}),title:"Full",description:"You see all of the subflow's messages in the chat, indented under this step — like watching it work."}),(0,d.jsx)(ck,{selected:k.properties?.outputMode==="final-only",onClick:()=>x("outputMode","final-only"),icon:(0,d.jsx)(cg,{}),title:"Condensed",description:"You only see the subflow's final answer as a single message. Its inner steps stay hidden."})]})]}),(0,d.jsxs)(u.A,{children:[(0,d.jsx)(j.A,{onClick:c,children:"Cancel"}),(0,d.jsx)(j.A,{onClick:()=>{b&&k&&(f(b.id,k),c())},variant:"contained",color:"primary",children:"Save"})]})]})},cm=(0,v.A)((0,d.jsx)("path",{d:"M17 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V7zm-5 16c-1.66 0-3-1.34-3-3s1.34-3 3-3 3 1.34 3 3-1.34 3-3 3m3-10H5V5h10z"}),"Save"),cn=(0,v.A)((0,d.jsx)("path",{d:"M12.5 8c-2.65 0-5.05.99-6.9 2.6L2 7v9h9l-3.62-3.62c1.39-1.16 3.16-1.88 5.12-1.88 3.54 0 6.55 2.31 7.6 5.5l2.37-.78C21.08 11.03 17.15 8 12.5 8"}),"Undo"),co=(0,v.A)((0,d.jsx)("path",{d:"M18.4 10.6C16.55 8.99 14.15 8 11.5 8c-4.65 0-8.58 3.03-9.96 7.22L3.9 16c1.05-3.19 4.05-5.5 7.6-5.5 1.95 0 3.73.72 5.12 1.88L13 16h9V7z"}),"Redo"),cp=(0,B.h)("components/flow/FlowBuilder/index.tsx"),cq=(0,y.Ay)(h.default)(({theme:a})=>({display:"flex",height:"calc(100vh - 64px)",gap:"16px",padding:"16px",backgroundColor:a.palette.background.default})),cr=(0,y.Ay)(z.A)(({theme:a})=>({padding:a.spacing(1),display:"flex",gap:a.spacing(1),borderBottom:"1px solid",borderColor:a.palette.divider,alignItems:"center",marginBottom:a.spacing(1),backgroundColor:a.palette.background.paper,boxShadow:a.shadows[1]})),cs=(0,y.Ay)(h.default)({flex:1,display:"flex",flexDirection:"column",position:"relative",overflow:"hidden"}),ct=f().forwardRef(({initialFlow:a,onSave:b,onDelete:c,allFlows:g},i)=>{cp.debug("FlowBuilder rendered with initialFlow:",a);let[k,m]=(0,e.useState)(a?.nodes||[]),[n,o]=(0,e.useState)((a?.edges||[]).filter(a=>a.source&&a.target&&a.sourceHandle&&a.targetHandle)),[v,w]=(0,e.useState)(a?.name||"NewFlow"),[x,y]=(0,e.useState)(null),[z,B]=(0,e.useState)(a?.description||""),[G,H]=(0,e.useState)(!1),[I,J]=(0,e.useState)("none"),[K,L]=(0,e.useState)(""),[N,O]=(0,e.useState)(null),[P,Q]=(0,e.useState)(!1),[R,S]=(0,e.useState)(!1),[T,U]=(0,e.useState)(!1),[V,W]=(0,e.useState)(!1),[X,Y]=(0,e.useState)(!1),[Z,$]=(0,e.useState)(null),[_,aa]=(0,e.useState)([]),[ab,ac]=(0,e.useState)(-1),[ad,ae]=(0,e.useState)(!1),[af,ag]=(0,e.useState)(!1),ah=(0,e.useRef)(null),ai=(0,e.useRef)(!1),aj=(0,e.useRef)(!0),ak=(0,e.useCallback)(a=>a.filter(a=>a.source&&a.target&&a.sourceHandle&&a.targetHandle),[]);(0,e.useEffect)(()=>{if(aj.current=!0,a){m(a.nodes||[]);let b=ak(a.edges||[]);b.length!==a.edges.length&&console.warn(`Filtered out ${a.edges.length-b.length} invalid edges`),o(b),w(a.name),B(a.description||""),aa([{nodes:a.nodes||[],edges:b}]),ac(0)}else{let a=E.g.createStartNode();m([a]),o([]),w("NewFlow"),B(""),aa([{nodes:[a],edges:[]}]),ac(0)}},[a]);let al=a=>JSON.stringify(a,(a,b)=>"selected"===a||"dragging"===a||"measured"===a||"width"===a||"height"===a||"positionAbsolute"===a||"resizing"===a?void 0:b);(0,e.useEffect)(()=>{if(ad)return void ae(!1);if(aj.current){aj.current=!1;return}if(ai.current)return;let a={nodes:[...k],edges:[...n]},b=_.slice(0,ab+1);(ab<0||al(a)!==al(b[ab]))&&(aa([...b,a]),ac(ab+1),ag(!0))},[k,n]),(0,e.useEffect)(()=>{let a=a=>{if(af)return a.preventDefault(),a.returnValue="",""};return window.addEventListener("beforeunload",a),()=>{window.removeEventListener("beforeunload",a)}},[af]);let am=b=>b.trim()?/^[\w-]+$/.test(b)?(!a||a&&a.name!==b)&&g.some(c=>c.id!==(a?.id||"")&&c.name.toLowerCase()===b.toLowerCase())?"A flow with this name already exists":null:"Flow name can only contain letters, numbers, underscores, and dashes":"Flow name cannot be empty",an=(0,e.useCallback)(()=>{cp.debug(`handleSave: Attempting to save flow "${v}"`);let c=am(v);if(c)return cp.warn(`handleSave: Invalid flow name - ${c}`),y(c),"invalid-name";let d=[...k];if(0===d.length&&(cp.debug("handleSave: No nodes found, adding a default Start node"),m(d=[E.g.createStartNode()])),a&&a.name!==v)return cp.debug(`handleSave: Flow name changed from "${a.name}" to "${v}", opening rename dialog`),J("rename"),L(v),H(!0),"rename-dialog";let e={id:a?.id||(0,D.A)(),name:v,description:z,nodes:d,edges:n};return cp.info(`handleSave: Saving flow "${v}" with ${d.length} nodes and ${n.length} edges`),b(e),ag(!1),"saved"},[v,z,k,n,a,b,g]);f().useImperativeHandle(i,()=>({requestNavigation:a=>{af?(ah.current=a,J("unsaved"),H(!0)):a()}}),[af]);let ao=(0,e.useCallback)(()=>{a?(cp.info(`handleDelete: Deleting flow "${a.name}" (ID: ${a.id})`),c(a.id)):cp.warn("handleDelete: Attempted to delete flow but no initialFlow is available")},[a,c]),ap=(0,e.useCallback)((a,c)=>{cp.debug(`handleCopyFlow: Copying flow "${a.name}" to "${c}"`);let d={id:(0,D.A)(),name:c,description:a.description,nodes:a.nodes,edges:a.edges};cp.info(`handleCopyFlow: Created copy of flow "${a.name}" with new name "${c}" (${a.nodes.length} nodes, ${a.edges.length} edges)`),b(d)},[b]),ar=()=>{let a=ah.current;ah.current=null,a&&a()},as=()=>{ah.current=null,H(!1),J("none"),L(""),O(null)},at=()=>{let c=am(K);if(c)return void O(c);"duplicate"===I?a&&ap(a,K):"rename"===I&&(b({id:a?.id||(0,D.A)(),name:K,description:z,nodes:k,edges:n}),ag(!1),ar()),as()},au=ab>0,av=ab<_.length-1,aw=(0,e.useCallback)(()=>{if(au){cp.debug(`handleUndo: Performing undo operation, moving from history index ${ab} to ${ab-1}`),ae(!0);let a=ab-1,b=_[a];m(b.nodes),o(b.edges),ac(a),cp.info(`handleUndo: Restored flow state to previous version (${b.nodes.length} nodes, ${b.edges.length} edges)`)}},[_,ab,au]),ax=(0,e.useCallback)(()=>{if(av){cp.debug(`handleRedo: Performing redo operation, moving from history index ${ab} to ${ab+1}`),ae(!0);let a=ab+1,b=_[a];m(b.nodes),o(b.edges),ac(a),cp.info(`handleRedo: Restored flow state to next version (${b.nodes.length} nodes, ${b.edges.length} edges)`)}},[_,ab,av]),ay=(0,e.useCallback)(a=>{for(let b of a)"position"===b.type&&(ai.current=!0===b.dragging);m(b=>(0,C._0)(a,b))},[]),az=(0,e.useCallback)(a=>{cp.debug(`onEdgesChange: Processing ${a.length} edge changes`),a.forEach(a=>{"remove"===a.type?cp.info(`onEdgesChange: Edge ${a.id} removed`):"select"===a.type&&cp.debug(`onEdgesChange: Edge ${a.id} selection changed to ${a.selected}`)}),o(b=>(0,C.zW)(a,b))},[]),aA=(0,e.useRef)(null),[aC,aD]=(0,e.useState)(null),aE=(0,e.useCallback)((a,b)=>{cp.debug(`handleNodeUpdate: Updating node ${a} properties`),m(c=>c.map(c=>c.id===a?(cp.info(`handleNodeUpdate: Node ${a} properties updated`),{...c,data:b}):c)),Q(!1),S(!1),U(!1),W(!1),Y(!1),$(null),cp.debug("handleNodeUpdate: Closed property modals")},[]),aF=(0,e.useCallback)(async(a,b)=>{let c=k.find(b=>b.id===a);if(!c)return void cp.warn(`handleConnectMcpServer: process node ${a} not found`);let d=[];try{let a=await F.S.listServerTools(b);!a.error&&Array.isArray(a.tools)&&(d=a.tools.map(a=>a.name))}catch(a){cp.warn(`handleConnectMcpServer: could not load tools for ${b}`,a)}let e=n.filter(b=>b.data?.edgeType==="mcp"&&(b.source===a||b.target===a)).length,f=E.g.createNode("mcp",{x:c.position.x+350,y:c.position.y+120*e});f.data.label=b,f.data.properties={...f.data.properties??{},boundServer:b,enabledTools:d};let g=M({source:a,sourceHandle:"process-right-mcp",target:f.id,targetHandle:"mcp-left"},[...k,f]);m(a=>[...a,f]),o(a=>[...a,g]),cp.info(`Connected MCP server "${b}" to process node ${a}`)},[k,n]),aG=(0,e.useCallback)(a=>{cp.debug("Opening properties for node:",a),$(a),"mcp"===a.data.type?S(!0):"start"===a.data.type?U(!0):"finish"===a.data.type?W(!0):"subflow"===a.data.type?Y(!0):Q(!0)},[]),aH=(0,e.useCallback)(a=>{cp.debug("onDrop: Node dropped on canvas"),a.preventDefault();let b=a.dataTransfer.getData("application/reactflow");if(cp.debug(`onDrop: Node type from data transfer: ${b}`),!b||!aC)return void cp.debug(`onDrop: Missing required data - type: ${!!b}, reactFlowInstance: ${!!aC}`);let c=aC.screenToFlowPosition({x:a.clientX,y:a.clientY});cp.debug(`onDrop: Calculated position: (${c.x}, ${c.y})`);let d=E.g.createNode(b,c);cp.info(`onDrop: Created new ${b} node with ID: ${d.id}`),m(a=>[...a.map(a=>({...a,selected:!1})),{...d,selected:!0}]),aG(d),cp.debug(`onDrop: Opened properties modal for new node: ${d.id}`)},[aC,aG]),aI=(0,e.useCallback)(a=>{a.preventDefault(),a.dataTransfer.dropEffect="move"},[]),aJ=(0,e.useCallback)(a=>{cp.debug("onInit: ReactFlow instance initialized"),aD(a)},[]);return(0,d.jsxs)(cq,{children:[(0,d.jsx)(aB,{}),(0,d.jsx)(C.Ln,{children:(0,d.jsxs)(cs,{children:[(0,d.jsxs)(cr,{elevation:1,children:[(0,d.jsx)(t.A,{size:"small",label:"Flow Name",value:v,onChange:a=>{let b=a.target.value;w(b),y(am(b))},sx:{minWidth:300},error:!!x,helperText:x}),(0,d.jsx)(t.A,{size:"small",label:"Description",value:z,onChange:a=>{B(a.target.value),ag(!0)},multiline:!0,maxRows:3,sx:{minWidth:300,flex:1},placeholder:"Optional — shown on the flow card"}),(0,d.jsx)(j.A,{variant:"contained",color:"primary",onClick:an,startIcon:(0,d.jsx)(cm,{}),disabled:!!x,children:"Save Flow"}),(0,d.jsx)(aS,{nodes:k,edges:n}),a&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(j.A,{variant:"outlined",color:"primary",onClick:()=>{J("duplicate"),L(`${a.name}_copy`),H(!0)},children:"Copy Flow"}),(0,d.jsx)(j.A,{variant:"outlined",color:"error",onClick:ao,children:"Delete Flow"})]}),(0,d.jsx)(A.A,{orientation:"vertical",flexItem:!0}),(0,d.jsx)(l.A,{onClick:aw,disabled:!au,color:"primary",size:"small",children:(0,d.jsx)(cn,{})}),(0,d.jsx)(l.A,{onClick:ax,disabled:!av,color:"primary",size:"small",children:(0,d.jsx)(co,{})}),(0,d.jsx)(h.default,{sx:{flex:1}})]}),(0,d.jsx)(h.default,{sx:{flex:1,position:"relative"},children:(0,d.jsx)(aq,{ref:aA,nodes:k,edges:n,onNodesChange:ay,onEdgesChange:az,onDrop:aH,onDragOver:aI,onInit:aJ,reactFlowWrapper:aA,onEditNode:aG})})]})}),(0,d.jsx)(b8,{open:P,node:Z,onClose:()=>Q(!1),onSave:aE,flowEdges:n,flowNodes:k,flowId:a?.id,onConnectMcpServer:a=>{Z&&aF(Z.id,a)}}),(0,d.jsx)(cc,{open:R,node:Z,onClose:()=>S(!1),onSave:aE}),(0,d.jsx)(cd,{open:T,node:Z,onClose:()=>U(!1),onSave:aE}),(0,d.jsx)(ce,{open:V,node:Z,onClose:()=>W(!1),onSave:aE}),(0,d.jsx)(cl,{open:X,node:Z,onClose:()=>Y(!1),onSave:aE,flowId:a?.id}),(0,d.jsxs)(p.A,{open:G,onClose:as,children:[(0,d.jsx)(q.A,{children:"duplicate"===I?"Copy Flow":"rename"===I?"Rename Flow":"Unsaved Changes"}),(0,d.jsx)(r.A,{children:"unsaved"===I?(0,d.jsx)(s.A,{children:"You have unsaved changes in the current flow. What would you like to do?"}):(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(s.A,{children:"duplicate"===I?"Enter a name for the copied flow:":"You are changing the name of this flow. Do you want to rename it or create a copy with the new name?"}),(0,d.jsx)(t.A,{autoFocus:!0,margin:"dense",label:"Flow Name",type:"text",fullWidth:!0,value:K,onChange:a=>{let b=a.target.value;L(b),O(am(b))},error:!!N,helperText:N,sx:{mt:2}})]})}),(0,d.jsxs)(u.A,{children:[(0,d.jsx)(j.A,{onClick:as,children:"Cancel"}),"unsaved"===I&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(j.A,{onClick:()=>{ag(!1),ar(),as()},color:"error",children:"Discard Changes"}),(0,d.jsx)(j.A,{onClick:()=>{let a=an();"saved"===a?(ar(),as()):"invalid-name"===a&&as()},variant:"contained",color:"primary",children:"Save Changes"})]}),"rename"===I&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(j.A,{onClick:()=>{let b=am(K);if(b)return void O(b);a&&ap(a,K),as()},children:"Copy"}),(0,d.jsx)(j.A,{onClick:at,variant:"contained",color:"primary",disabled:!!N,children:"Rename"})]}),"duplicate"===I&&(0,d.jsx)(j.A,{onClick:at,variant:"contained",color:"primary",disabled:!!N,children:"Copy"})]})]})]})});ct.displayName="FlowBuilder";let cu=null;var cv=c(75249),cw=c(44548),cx=c(33427);let cy={...e}.useSyncExternalStore;function cz(a={}){let{themeId:b}=a;return function(a,c={}){let d=(0,cx.A)();d&&b&&(d=d[b]||d);let{defaultMatches:f=!1,matchMedia:g=null,ssrMatchMedia:h=null,noSsr:i=!1}=(0,cw.A)({name:"MuiUseMediaQuery",props:c,theme:d}),j="function"==typeof a?a(d):a;return(j=j.replace(/^@media( ?)/m,"")).includes("print")&&console.warn("MUI: You have provided a `print` query to the `useMediaQuery` hook.\nUsing the print media query to modify print styles can lead to unexpected results.\nConsider using the `displayPrint` field in the `sx` prop instead.\nMore information about `displayPrint` on our docs: https://mui.com/system/display/#display-in-print."),(void 0!==cy?function(a,b,c,d,f){let g=e.useCallback(()=>b,[b]),h=e.useMemo(()=>{if(f&&c)return()=>c(a).matches;if(null!==d){let{matches:b}=d(a);return()=>b}return g},[g,a,d,f,c]),[i,j]=e.useMemo(()=>{if(null===c)return[g,()=>()=>{}];let b=c(a);return[()=>b.matches,a=>(b.addEventListener("change",a),()=>{b.removeEventListener("change",a)})]},[g,c,a]);return cy(j,i,h)}:function(a,b,c,d,f){let[g,h]=e.useState(()=>f&&c?c(a).matches:d?d(a).matches:b);return(0,cv.A)(()=>{if(!c)return;let b=c(a),d=()=>{h(b.matches)};return d(),b.addEventListener("change",d),()=>{b.removeEventListener("change",d)}},[a,c]),g})(j,f,g,h,i)}}cz();let cA=cz({themeId:c(35864).A});var cB=c(63757);let cC=(0,v.A)((0,d.jsx)("path",{d:"M10 18h4v-2h-4zM3 6v2h18V6zm3 7h12v-2H6z"}),"FilterList"),cD=(0,v.A)((0,d.jsx)("path",{d:"M3 14h4v-4H3zm0 5h4v-4H3zM3 9h4V5H3zm5 5h13v-4H8zm0 5h13v-4H8zM8 5v4h13V5z"}),"ViewList"),cE=(0,v.A)((0,d.jsx)("path",{d:"M14.67 5v6.5H9.33V5zm1 6.5H21V5h-5.33zm-1 7.5v-6.5H9.33V19zm1-6.5V19H21v-6.5zm-7.34 0H3V19h5.33zm0-1V5H3v6.5z"}),"ViewModule");var cF=c(11402);let cG=(0,v.A)((0,d.jsx)("path",{d:"M21 10.12h-6.78l2.74-2.82c-2.73-2.7-7.15-2.8-9.88-.1-2.73 2.71-2.73 7.08 0 9.79s7.15 2.71 9.88 0C18.32 15.65 19 14.08 19 12.1h2c0 1.98-.88 4.55-2.64 6.29-3.51 3.48-9.21 3.48-12.72 0-3.5-3.47-3.53-9.11-.02-12.58s9.14-3.47 12.65 0L21 3zM12.5 8v4.25l3.5 2.08-.72 1.21L11 13V8z"}),"Update");var cH=c(9863),cI=c(81310),cJ=c(18467),cK=c(423),cL=c(98463),cM=c(78871);function cN(a){return(0,a8.Ay)("MuiSkeleton",a)}(0,a7.A)("MuiSkeleton",["root","text","rectangular","rounded","circular","pulse","wave","withChildren","fitContent","heightAuto"]);let cO=(0,cM.i7)`
3
+ ${a1(d,f)}`}(function(a){let b=a.type||a.data.type||"unknown",c=a.data.label||"Unknown Node",d=a.data.description,e=a.data.properties||{},f={label:c,type:b,userDescription:d};if(d&&d.trim())return f;if("subflow"===b)return f.subflowDetailsUnavailable=!0,f;"string"==typeof e.boundModel&&e.boundModel&&(f.modelName=e.boundModel),"string"==typeof e.promptTemplate&&e.promptTemplate.trim()&&(f.promptSummary=e.promptTemplate);let g=Array.isArray(e.mcpNodes)?e.mcpNodes:[],h=[],i=new Set;for(let a of g){let b=a?.properties?.boundServer;if(!b||i.has(b))continue;i.add(b);let c=Array.isArray(a?.properties?.enabledTools)?a.properties.enabledTools:[];h.push({name:b,connected:!0,tools:c})}return h.length>0&&(f.servers=h),f}(a)),inputSchema:{type:"object",properties:{},required:[]}}));g(c),a2.debug("Generated handoff tools",{toolsCount:c.length})}catch(a){a2.error("Error generating handoff tools",a),g([])}finally{i(!1)}}else g([])},[a,b,j,c,d]),{handoffTools:f,isLoadingHandoffTools:h}})(a,b,g,k),ac=ab?.handoffTools||[],ad=ab?.isLoadingHandoffTools||!1;(0,e.useEffect)(()=>{a&&b&&cc.debug("Handoff tools:",{count:ac.length,tools:ac.map(a=>a.name)})},[a,b,ac]),(0,e.useEffect)(()=>{b&&(w(b.data.properties?.promptTemplate||""),b.data.properties?.boundModel?y(!0):y(!1),A(b.data.properties?.excludeModelPrompt||!1),D(b.data.properties?.excludeStartNodePrompt||!1),F(b.data.properties?.excludeSystemPrompt||!1),I(b.data.properties?.inputMode||"full-history"),K(b.data.properties?.isolatedPrompt||""))},[b,a]);let ae=(0,e.useRef)(null),af=(a,b,c="server")=>{if(cc.debug("handleInsertToolBinding called with:",JSON.stringify({serverName:a,toolName:b})),!a||!b)return void cc.warn("Invalid parameters for handleInsertToolBinding:",{serverName:a,toolName:b});let d=(W[a]||[]).find(a=>a.name===b);d?.description;let e="handoff"===c?(0,aM.X8)("tool","handoff",b):(0,aM.X8)("tool",a,b),f=(!(v.length>0)||v.endsWith(" ")||v.endsWith("\n")?"":" ")+e;ae.current?(cc.debug("Inserting text into PromptBuilder:",JSON.stringify({textToInsert:f})),ae.current.insertText(f),cc.debug("Tool binding inserted successfully")):cc.warn("promptBuilderRef.current is null, cannot insert text")};if(!b||!o)return null;let ag=o.properties?.boundModel||"";return(0,d.jsxs)(p.A,{open:a,onClose:c,maxWidth:"xl",fullWidth:!0,PaperProps:{sx:{borderTop:5,borderColor:"secondary.main",width:"95vw",height:"90vh",maxWidth:"95vw",maxHeight:"90vh"}},children:[(0,d.jsx)(q.A,{component:"div",children:(0,d.jsxs)(h.default,{display:"flex",alignItems:"center",justifyContent:"space-between",children:[(0,d.jsxs)(i.default,{variant:"h6",children:[o.label||"Process Node"," Properties"]}),(0,d.jsx)(l.A,{edge:"end",color:"inherit",onClick:c,"aria-label":"close",children:(0,d.jsx)(aX.A,{})})]})}),(0,d.jsx)(B.A,{}),(0,d.jsx)(r.A,{sx:{display:"flex",flexDirection:"column",p:3,overflow:"auto",height:"calc(90vh - 130px)"},children:(0,d.jsxs)(aU.Ay,{container:!0,spacing:2,sx:{flexGrow:1,height:"100%"},children:[(0,d.jsxs)(aU.Ay,{item:!0,xs:6,sx:{display:"flex",flexDirection:"column",height:"100%",overflow:"auto"},children:[(0,d.jsx)(h.default,{sx:{mb:3},children:(0,d.jsx)(a3,{nodeData:o,setNodeData:s})}),(0,d.jsx)(h.default,{sx:{mb:3},children:(0,d.jsx)(bF,{isLoadingModels:O,loadError:P,models:N,selectedModelId:ag,handleModelSelect:Q,isModelBound:x,handleUnbindModel:R})}),(0,d.jsxs)(h.default,{sx:{mb:3},children:[(0,d.jsx)(h.default,{sx:{borderBottom:1,borderColor:"divider",mb:2},children:(0,d.jsxs)(aV.A,{value:L,onChange:(a,b)=>M(b),children:[(0,d.jsx)(aW.A,{label:"Server Tools",value:"server"}),(0,d.jsx)(aW.A,{label:"Resources",value:"resources"}),(0,d.jsx)(aW.A,{label:"Agent Tools",value:"agent"})]})}),"server"===L&&(0,d.jsx)(bW,{isLoadingServers:U,connectedMcpNodes:S,availableServers:T,onConnectMcpServer:n,serverStatuses:X,serverToolsMap:W,isLoadingTools:Y,handleInsertToolBinding:af,selectedToolServerNodeId:V,selectedNodeId:b?.id||null,handleSelectToolServer:Z,isLoadingSelectedServerTools:$,promptBuilderRef:ae,handleRetryServer:_,handleRestartServer:aa}),"resources"===L&&(0,d.jsx)(b$,{connectedMcpNodes:S,handleInsertResourceBinding:(a,b)=>{if(!a||!b)return void cc.warn("Invalid parameters for handleInsertResourceBinding:",{serverName:a,uri:b});let c=(0,aM.X8)("resource",a,b),d=v.length>0&&!v.endsWith(" ")&&!v.endsWith("\n");ae.current?ae.current.insertText((d?" ":"")+c):cc.warn("promptBuilderRef.current is null, cannot insert resource binding")},promptBuilderRef:ae}),"agent"===L&&(0,d.jsx)(b0,{handoffTools:ac,isLoadingHandoffTools:ad,handleInsertToolBinding:(a,b)=>af(a,b,"handoff"),promptBuilderRef:ae})]}),(0,d.jsx)(h.default,{children:(0,d.jsx)(cb,{nodeData:o,handlePropertyChange:t,properties:[{key:"maxTurns",label:"Max Turns (override)",type:"number",min:1,helperText:"Optional. Overrides the bound model's Max Turns for this node. Leave empty to inherit the model setting (default 50)."}]})})]}),(0,d.jsx)(aU.Ay,{item:!0,xs:6,sx:{height:"100%",display:"flex",flexDirection:"column"},children:(0,d.jsx)(b8,{ref:ae,promptTemplate:v,handlePromptChange:a=>{w(a),s(b=>b?{...b,properties:{...b.properties,promptTemplate:a}}:null)},excludeModelPrompt:z,setExcludeModelPrompt:A,excludeStartNodePrompt:C,setExcludeStartNodePrompt:D,excludeSystemPrompt:E,setExcludeSystemPrompt:F,inputMode:H,setInputMode:I,isolatedPrompt:J,setIsolatedPrompt:K,isModelBound:x,models:N,nodeData:o,flowId:m})})]})}),(0,d.jsxs)(u.A,{children:[(0,d.jsx)(j.A,{onClick:c,children:"Cancel"}),(0,d.jsx)(j.A,{onClick:()=>{if(b&&o){let a={...o,properties:{...o.properties,promptTemplate:v,excludeModelPrompt:z,excludeStartNodePrompt:C,excludeSystemPrompt:E,inputMode:H,isolatedPrompt:J}};f(b.id,a),c()}},variant:"contained",color:"primary",children:"Save Changes"})]})]})};var ce=c(2173),cf=c(88117);let cg=(0,C.h)("frontend/components/Flow/FlowManager/FlowBuilder/Modals/MCPNodePropertiesModal"),ch=({open:a,node:b,onClose:c,onSave:f})=>{let[g,k]=(0,e.useState)(null),{servers:n,isLoading:o,loadError:s,retryServer:v}=(0,a$.v)(),[w,x]=(0,e.useState)({}),{tools:y,isLoading:z,error:C,loadTools:D}=(0,cf.O)(g?.properties?.boundServer||"");(0,e.useEffect)(()=>{b&&k({...b.data,properties:{...b.data.properties}})},[b,a]);let E=g?.properties?.boundServer||"";(0,e.useEffect)(()=>{y&&y.length>0&&(a=>{g&&0===(g.properties.enabledTools||[]).length&&a.length>0&&(cg.debug("Enabling all tools by default"),k(b=>b?{...b,properties:{...b.properties,enabledTools:a.map(a=>a.name)}}:null))})(y)},[y]);let F=(a,b)=>{k(c=>c?{...c,properties:{...c.properties,[a]:b}}:null)},G=async(a,b)=>{b&&b.stopPropagation(),cg.debug(`Retrying server: ${a}`),x(b=>({...b,[a]:!0}));try{return await v(a),a===E&&D(!0),!0}catch(b){return cg.warn(`Failed to retry server ${a}: ${b}`),!1}finally{setTimeout(()=>{x(b=>({...b,[a]:!1}))},500)}};if(!b||!g)return null;let H=g.properties?.boundServer||"",I=g.properties?.enabledTools||[],J=g.properties?.toolTimeout,K=-1===J;return(0,d.jsxs)(p.A,{open:a,onClose:c,maxWidth:"md",fullWidth:!0,PaperProps:{sx:{borderTop:5,borderColor:"info.main",height:"80vh",maxHeight:"80vh"}},children:[(0,d.jsx)(q.A,{component:"div",children:(0,d.jsxs)(h.default,{display:"flex",alignItems:"center",justifyContent:"space-between",children:[(0,d.jsxs)(i.default,{variant:"h6",children:[g.label||"MCP Node"," Properties"]}),(0,d.jsx)(l.A,{edge:"end",color:"inherit",onClick:c,"aria-label":"close",children:(0,d.jsx)(aX.A,{})})]})}),(0,d.jsx)(B.A,{}),(0,d.jsxs)(r.A,{sx:{display:"flex",flexDirection:"column",p:3,overflow:"auto"},children:[(0,d.jsx)(t.A,{fullWidth:!0,label:"Node Label",value:g.label||"",onChange:a=>{k(b=>b?{...b,label:a.target.value,properties:{...b.properties,nameIsCustom:!0}}:null)},margin:"normal",helperText:"The display name for this node on the canvas",sx:{mb:2}}),(0,d.jsxs)(h.default,{sx:{mb:4},children:[(0,d.jsx)(i.default,{variant:"subtitle1",gutterBottom:!0,children:"Bind to MCP Server"}),o?(0,d.jsxs)(h.default,{sx:{display:"flex",alignItems:"center",gap:1},children:[(0,d.jsx)(aE.default,{size:20}),(0,d.jsx)(i.default,{color:"text.secondary",children:"Loading MCP servers..."})]}):s?(0,d.jsx)(i.default,{color:"error",children:s}):0===n.length?(0,d.jsx)(i.default,{color:"text.secondary",children:"No MCP servers available. Add some in the MCP Manager."}):(0,d.jsx)(d.Fragment,{children:(0,d.jsxs)(a4.A,{component:"fieldset",fullWidth:!0,children:[(0,d.jsx)(bf,{value:H,onChange:a=>(a=>{cg.debug(`Server selected: ${a}`),cg.debug(`Server selected: ${a}`),k(b=>{if(!b)return null;let c=aY({currentLabel:b.label,nameIsCustom:b.properties?.nameIsCustom,defaultLabel:"MCP Node",previousAutoLabel:b.properties?.boundServer||void 0,nextAutoLabel:a});return{...b,label:c,properties:{...b.properties,boundServer:a}}})})(a.target.value),children:(0,d.jsx)(aU.Ay,{container:!0,spacing:2,children:n.map(a=>(0,d.jsx)(aU.Ay,{item:!0,xs:12,sm:6,children:(0,d.jsx)(A.A,{elevation:1,sx:{p:2,border:2*(H===a.name),borderColor:"primary.main",opacity:"connected"===a.status?1:.6},children:(0,d.jsxs)(h.default,{sx:{display:"flex",width:"100%",alignItems:"flex-start"},children:[(0,d.jsx)(bg.A,{value:a.name,control:(0,d.jsx)(bC,{}),label:(0,d.jsxs)(h.default,{children:[(0,d.jsx)(i.default,{variant:"subtitle2",children:a.name}),(0,d.jsx)(i.default,{variant:"caption",color:"text.secondary",display:"block",children:a.path}),(0,d.jsxs)(i.default,{variant:"caption",color:"connected"===a.status?"success.main":"error"===a.status?"error.main":"text.secondary",children:["Status: ",a.status]})]}),sx:{width:"calc(100% - 40px)",m:0}}),(0,d.jsx)(m.A,{title:"Retry connection",children:(0,d.jsx)(l.A,{size:"small",onClick:b=>G(a.name,b),disabled:w[a.name],sx:{mt:1},children:w[a.name]?(0,d.jsx)(aE.default,{size:16}):(0,d.jsx)(bR.A,{fontSize:"small"})})})]})})},a.name))})}),(0,d.jsx)(bD.A,{children:H?`This node will use the "${H}" MCP server for processing.`:"Select an MCP server to bind this node to."})]})})]}),(0,d.jsx)(t.A,{fullWidth:!0,label:"Description",value:g.description||"",onChange:a=>k({...g,description:a.target.value}),margin:"normal",multiline:!0,rows:2,helperText:"This description will be displayed on the node"}),H&&(0,d.jsxs)(h.default,{sx:{mt:4},children:[(0,d.jsx)(i.default,{variant:"subtitle1",gutterBottom:!0,children:"Tool Call Timeout"}),(0,d.jsx)(i.default,{variant:"body2",color:"text.secondary",sx:{mb:1},children:"How long a single tool call on this server may run before it is aborted. Tools that report progress keep the timeout alive while they work."}),(0,d.jsxs)(h.default,{sx:{display:"flex",alignItems:"center",gap:2},children:[(0,d.jsx)(t.A,{label:"Timeout (seconds)",type:"number",size:"small",sx:{width:200},value:K?"":J??"",placeholder:String(300),disabled:K,inputProps:{min:1},onChange:a=>{let b=a.target.value;if(""===b)return void F("toolTimeout",void 0);let c=parseInt(b,10);!isNaN(c)&&c>0&&F("toolTimeout",c)},helperText:K?"No timeout — tool calls run until they finish.":"Empty = default (300 seconds / 5 minutes)."}),(0,d.jsx)(bg.A,{control:(0,d.jsx)(b1.A,{checked:K,onChange:a=>F("toolTimeout",a.target.checked?-1:void 0)}),label:"No timeout (infinite)"})]})]}),H&&(0,d.jsxs)(h.default,{sx:{mt:4},children:[(0,d.jsx)(i.default,{variant:"subtitle1",gutterBottom:!0,children:"Allowed Tools"}),n.find(a=>a.name===H)?.status!=="connected"&&(0,d.jsxs)(h.default,{sx:{mb:2,p:2,bgcolor:"error.light",borderRadius:1},children:[(0,d.jsx)(i.default,{color:"error.dark",children:"Server is disconnected. Tools cannot be fetched. Please retry the connection."}),(0,d.jsx)(j.A,{variant:"outlined",size:"small",color:"primary",startIcon:w[H]?(0,d.jsx)(aE.default,{size:16}):(0,d.jsx)(bR.A,{}),onClick:()=>G(H),disabled:w[H],sx:{mt:1},children:"Retry Connection"})]}),z?(0,d.jsxs)(h.default,{sx:{display:"flex",alignItems:"center",gap:1},children:[(0,d.jsx)(aE.default,{size:20}),(0,d.jsx)(i.default,{color:"text.secondary",children:"Loading tools..."})]}):C?(0,d.jsx)(i.default,{color:"error",children:C}):y&&0!==y.length?(0,d.jsxs)(h.default,{sx:{mt:2},children:[(0,d.jsx)(i.default,{variant:"body2",color:"text.secondary",sx:{mb:2},children:"Select which tools this node will have access to. This helps limit the tools available to connected process nodes."}),(0,d.jsx)(aF.A,{children:y.map(a=>(0,d.jsxs)(aH.Ay,{sx:{py:0},children:[(0,d.jsx)(T.A,{sx:{minWidth:42},children:(0,d.jsx)(b1.A,{edge:"start",checked:I.includes(a.name),onChange:()=>(a=>{cg.debug(`Tool toggled: ${a}`),k(b=>{let c;if(!b)return null;let d=b.properties.enabledTools||[];return c=d.includes(a)?d.filter(b=>b!==a):[...d,a],{...b,properties:{...b.properties,enabledTools:c}}})})(a.name)})}),(0,d.jsx)(U.A,{primary:a.name,secondary:a.description,primaryTypographyProps:{fontWeight:"medium"}})]},a.name))})]}):(0,d.jsx)(i.default,{color:"text.secondary",children:n.find(a=>a.name===H)?.status==="connected"?"No tools available for this MCP server.":"Connect to the server to view available tools."})]}),H&&(0,d.jsxs)(h.default,{sx:{mt:4},children:[(0,d.jsx)(ce.A,{roots:g.properties?.roots||[],onChange:a=>F("roots",a)}),(0,d.jsxs)(i.default,{variant:"caption",color:"text.secondary",sx:{display:"block",mt:1},children:["These folders apply to this node only and are ",(0,d.jsx)("strong",{children:"added to"}),' the workspace folders configured on the "',H,'" server itself. When neither is set, the server sees its own root dir as its workspace folder.']})]})]}),(0,d.jsxs)(u.A,{children:[(0,d.jsx)(j.A,{onClick:c,children:"Cancel"}),(0,d.jsx)(j.A,{onClick:()=>{b&&g&&(f(b.id,g),c())},variant:"contained",color:"primary",children:"Save Changes"})]})]})},ci=({open:a,node:b,onClose:c,onSave:f})=>{let[g,k]=(0,e.useState)(null),[m,n]=(0,e.useState)("");return((0,e.useEffect)(()=>{b&&(k({...b.data,properties:{...b.data.properties}}),n(b.data.properties?.promptTemplate||""))},[b,a]),b&&g)?(0,d.jsxs)(p.A,{open:a,onClose:c,maxWidth:"xl",fullWidth:!0,PaperProps:{sx:{borderTop:5,borderColor:"primary.main",width:"95vw",height:"90vh",maxWidth:"95vw",maxHeight:"90vh"}},children:[(0,d.jsx)(q.A,{component:"div",children:(0,d.jsxs)(h.default,{display:"flex",alignItems:"center",justifyContent:"space-between",children:[(0,d.jsxs)(i.default,{variant:"h6",children:[g.label||"Start Node"," Properties"]}),(0,d.jsx)(l.A,{edge:"end",color:"inherit",onClick:c,"aria-label":"close",children:(0,d.jsx)(aX.A,{})})]})}),(0,d.jsx)(B.A,{}),(0,d.jsx)(r.A,{sx:{display:"flex",flexDirection:"column",p:3,overflow:"auto",height:"calc(90vh - 130px)"},children:(0,d.jsxs)(h.default,{sx:{display:"flex",flexDirection:"column",height:"100%"},children:[(0,d.jsx)(i.default,{variant:"h6",gutterBottom:!0,children:"Prompt Template"}),(0,d.jsx)(h.default,{sx:{flexGrow:1,display:"flex",flexDirection:"column",height:"calc(100% - 40px)"},children:(0,d.jsx)(b5.A,{value:m,onChange:a=>{n(a),k(b=>b?{...b,properties:{...b.properties,promptTemplate:a}}:null)},label:"",height:"100%"})})]})}),(0,d.jsxs)(u.A,{children:[(0,d.jsx)(j.A,{onClick:c,children:"Cancel"}),(0,d.jsx)(j.A,{onClick:()=>{if(b&&g){let a={...g,properties:{...g.properties,promptTemplate:m}};f(b.id,a),c()}},variant:"contained",color:"primary",children:"Save Changes"})]})]}):null},cj=({open:a,node:b,onClose:c,onSave:f})=>{let[g,k]=(0,e.useState)(null);return((0,e.useEffect)(()=>{b&&k({...b.data,properties:{...b.data.properties}})},[b,a]),b&&g)?(0,d.jsxs)(p.A,{open:a,onClose:c,maxWidth:"md",fullWidth:!0,PaperProps:{sx:{borderTop:5,borderColor:"success.main",width:"600px",height:"400px",maxWidth:"95vw",maxHeight:"90vh"}},children:[(0,d.jsx)(q.A,{component:"div",children:(0,d.jsxs)(h.default,{display:"flex",alignItems:"center",justifyContent:"space-between",children:[(0,d.jsxs)(i.default,{variant:"h6",children:[g.label||"Finish Node"," Properties"]}),(0,d.jsx)(l.A,{edge:"end",color:"inherit",onClick:c,"aria-label":"close",children:(0,d.jsx)(aX.A,{})})]})}),(0,d.jsx)(B.A,{}),(0,d.jsx)(r.A,{sx:{display:"flex",flexDirection:"column",p:3,overflow:"auto"},children:(0,d.jsx)(h.default,{sx:{display:"flex",flexDirection:"column",height:"100%",justifyContent:"center",alignItems:"center",py:4},children:(0,d.jsxs)(A.A,{elevation:0,sx:{p:4,textAlign:"center",backgroundColor:"rgba(76, 175, 80, 0.08)",borderRadius:2,width:"100%"},children:[(0,d.jsx)(i.default,{variant:"h6",color:"success.main",gutterBottom:!0,children:"Finish Node"}),(0,d.jsx)(i.default,{variant:"body1",color:"text.secondary",children:"This is the end point of your flow. No additional configuration is needed."}),(0,d.jsx)(i.default,{variant:"body2",color:"text.secondary",sx:{mt:2,fontStyle:"italic"},children:"Future versions will support output formatting options."})]})})}),(0,d.jsxs)(u.A,{children:[(0,d.jsx)(j.A,{onClick:c,children:"Cancel"}),(0,d.jsx)(j.A,{onClick:()=>{b&&g&&(f(b.id,g),c())},variant:"contained",color:"primary",children:"Save"})]})]}):null},ck=(0,v.A)((0,d.jsx)("path",{d:"M15 4v7H5.17L4 12.17V4zm1-2H3c-.55 0-1 .45-1 1v14l4-4h10c.55 0 1-.45 1-1V3c0-.55-.45-1-1-1m5 4h-2v9H6v2c0 .55.45 1 1 1h11l4 4V7c0-.55-.45-1-1-1"}),"ForumOutlined"),cl=(0,v.A)((0,d.jsx)("path",{d:"M20 2H4c-1.1 0-2 .9-2 2v18l4-4h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2m0 14H6l-2 2V4h16z"}),"ChatBubbleOutline"),cm=(0,C.h)("frontend/components/Flow/FlowManager/FlowBuilder/Modals/SubflowNodePropertiesModal"),cn=({open:a,node:b,onClose:c,onSave:f,flowId:g})=>{let[k,m]=(0,e.useState)(null),[n,s]=(0,e.useState)([]),[v,w]=(0,e.useState)(!1);(0,e.useEffect)(()=>{b&&m({...b.data,properties:{...b.data.properties}})},[b,a]),(0,e.useEffect)(()=>{if(!a)return;let b=!1;return w(!0),F.g.loadFlows().then(a=>{b||s(a||[])}).catch(a=>{cm.warn("Failed to load flows for subflow picker",a),b||s([])}).finally(()=>{b||w(!1)}),()=>{b=!0}},[a]);let x=(a,b)=>{m(c=>c?{...c,properties:{...c.properties,[a]:b}}:null)};if(!b||!k)return null;let y=n.filter(a=>a.id!==g),z=k.properties?.subflowId||"",A=!!z&&!n.some(a=>a.id===z),C=k.properties?.promptTemplate||"",D=k.properties?.inputMode||(C.trim()?"isolated":"full-history");return(0,d.jsxs)(p.A,{open:a,onClose:c,maxWidth:"md",fullWidth:!0,PaperProps:{sx:{borderTop:5,borderColor:"warning.main",maxWidth:"95vw",maxHeight:"90vh"}},children:[(0,d.jsx)(q.A,{component:"div",children:(0,d.jsxs)(h.default,{display:"flex",alignItems:"center",justifyContent:"space-between",children:[(0,d.jsxs)(i.default,{variant:"h6",children:[k.label||"Subflow Node"," Properties"]}),(0,d.jsx)(l.A,{edge:"end",color:"inherit",onClick:c,"aria-label":"close",children:(0,d.jsx)(aX.A,{})})]})}),(0,d.jsx)(B.A,{}),(0,d.jsxs)(r.A,{sx:{p:3},children:[(0,d.jsx)(i.default,{variant:"body2",color:"text.secondary",sx:{mb:2},children:"This step runs another flow inside this one — like calling a helper. When it finishes, its answer becomes part of this conversation and the flow continues to the next node."}),(0,d.jsx)(t.A,{fullWidth:!0,label:"Node Label",value:k.label||"",onChange:a=>m({...k,label:a.target.value}),margin:"normal"}),(0,d.jsxs)(a4.A,{fullWidth:!0,margin:"normal",children:[(0,d.jsx)(b9.A,{id:"subflow-select-label",children:"Flow to run"}),(0,d.jsxs)(ca.A,{labelId:"subflow-select-label",label:"Flow to run",value:A?"":z,onChange:a=>x("subflowId",a.target.value),displayEmpty:!0,children:[0===y.length&&(0,d.jsx)(S.A,{value:"",disabled:!0,children:v?"Loading flows…":"No other flows available"}),y.map(a=>(0,d.jsx)(S.A,{value:a.id,children:a.name},a.id))]})]}),A&&(0,d.jsx)(o.A,{severity:"warning",sx:{mt:1},children:"The previously selected flow no longer exists. Please choose another."}),(0,d.jsx)(i.default,{variant:"subtitle2",sx:{mt:3,mb:1},children:"What does the subflow receive?"}),(0,d.jsxs)(h.default,{role:"radiogroup","aria-label":"Subflow input",sx:{display:"flex",gap:2,flexWrap:"wrap"},children:[(0,d.jsx)(b6,{selected:"full-history"===D,onClick:()=>x("inputMode","full-history"),icon:(0,d.jsx)(b2,{}),title:"Full conversation",description:"The subflow sees the whole conversation so far. Best for a helper that should continue with all the context."}),(0,d.jsx)(b6,{selected:"latest-message"===D,onClick:()=>x("inputMode","latest-message"),icon:(0,d.jsx)(b3,{}),title:"Latest message only",description:"The subflow sees only the most recent message. Best for an orchestrator that hands off one task at a time, so old tasks don't leak in."}),(0,d.jsx)(b6,{selected:"isolated"===D,onClick:()=>x("inputMode","isolated"),icon:(0,d.jsx)(b4,{}),title:"Isolated",description:"The conversation is ignored. The subflow receives only the prompt you write below, as its first message."})]}),"isolated"===D&&(0,d.jsx)(t.A,{fullWidth:!0,label:"Isolated prompt",value:C,onChange:a=>x("promptTemplate",a.target.value),margin:"normal",multiline:!0,rows:3,helperText:"Sent to the subflow as its single user message. The parent conversation is not passed."}),(0,d.jsx)(i.default,{variant:"subtitle2",sx:{mt:3,mb:1},children:"What do you see in the chat while the subflow runs?"}),(0,d.jsxs)(h.default,{role:"radiogroup","aria-label":"Subflow output",sx:{display:"flex",gap:2,flexWrap:"wrap"},children:[(0,d.jsx)(b6,{selected:"final-only"!==(k.properties?.outputMode||"steps"),onClick:()=>x("outputMode","steps"),icon:(0,d.jsx)(ck,{}),title:"Full",description:"You see all of the subflow's messages in the chat, indented under this step — like watching it work."}),(0,d.jsx)(b6,{selected:k.properties?.outputMode==="final-only",onClick:()=>x("outputMode","final-only"),icon:(0,d.jsx)(cl,{}),title:"Condensed",description:"You only see the subflow's final answer as a single message. Its inner steps stay hidden."})]})]}),(0,d.jsxs)(u.A,{children:[(0,d.jsx)(j.A,{onClick:c,children:"Cancel"}),(0,d.jsx)(j.A,{onClick:()=>{b&&k&&(f(b.id,k),c())},variant:"contained",color:"primary",children:"Save"})]})]})},co=(0,v.A)((0,d.jsx)("path",{d:"M17 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V7zm-5 16c-1.66 0-3-1.34-3-3s1.34-3 3-3 3 1.34 3 3-1.34 3-3 3m3-10H5V5h10z"}),"Save"),cp=(0,v.A)((0,d.jsx)("path",{d:"M12.5 8c-2.65 0-5.05.99-6.9 2.6L2 7v9h9l-3.62-3.62c1.39-1.16 3.16-1.88 5.12-1.88 3.54 0 6.55 2.31 7.6 5.5l2.37-.78C21.08 11.03 17.15 8 12.5 8"}),"Undo"),cq=(0,v.A)((0,d.jsx)("path",{d:"M18.4 10.6C16.55 8.99 14.15 8 11.5 8c-4.65 0-8.58 3.03-9.96 7.22L3.9 16c1.05-3.19 4.05-5.5 7.6-5.5 1.95 0 3.73.72 5.12 1.88L13 16h9V7z"}),"Redo"),cr=(0,C.h)("components/flow/FlowBuilder/index.tsx"),cs=(0,z.Ay)(h.default)(({theme:a})=>({display:"flex",height:"calc(100vh - 64px)",gap:"16px",padding:"16px",backgroundColor:a.palette.background.default})),ct=(0,z.Ay)(A.A)(({theme:a})=>({padding:a.spacing(1),display:"flex",gap:a.spacing(1),borderBottom:"1px solid",borderColor:a.palette.divider,alignItems:"center",marginBottom:a.spacing(1),backgroundColor:a.palette.background.paper,boxShadow:a.shadows[1]})),cu=(0,z.Ay)(h.default)({flex:1,display:"flex",flexDirection:"column",position:"relative",overflow:"hidden"}),cv=f().forwardRef(({initialFlow:a,onSave:b,onDelete:c,allFlows:g},i)=>{cr.debug("FlowBuilder rendered with initialFlow:",a);let[k,m]=(0,e.useState)(a?.nodes||[]),[n,o]=(0,e.useState)((a?.edges||[]).filter(a=>a.source&&a.target&&a.sourceHandle&&a.targetHandle)),[v,w]=(0,e.useState)(a?.name||"NewFlow"),[x,y]=(0,e.useState)(null),[z,A]=(0,e.useState)(a?.description||""),[C,H]=(0,e.useState)(!1),[I,J]=(0,e.useState)("none"),[K,L]=(0,e.useState)(""),[M,O]=(0,e.useState)(null),[P,Q]=(0,e.useState)(!1),[R,S]=(0,e.useState)(!1),[T,U]=(0,e.useState)(!1),[V,W]=(0,e.useState)(!1),[X,Y]=(0,e.useState)(!1),[Z,$]=(0,e.useState)(null),[_,aa]=(0,e.useState)([]),[ab,ac]=(0,e.useState)(-1),[ad,ae]=(0,e.useState)(!1),[af,ag]=(0,e.useState)(!1),ah=(0,e.useRef)(null),ai=(0,e.useRef)(!1),aj=(0,e.useRef)(!0),ak=(0,e.useCallback)(a=>a.filter(a=>a.source&&a.target&&a.sourceHandle&&a.targetHandle),[]);(0,e.useEffect)(()=>{if(aj.current=!0,a){m(a.nodes||[]);let b=ak(a.edges||[]);b.length!==a.edges.length&&console.warn(`Filtered out ${a.edges.length-b.length} invalid edges`),o(b),w(a.name),A(a.description||""),aa([{nodes:a.nodes||[],edges:b}]),ac(0)}else{let a=F.g.createStartNode();m([a]),o([]),w("NewFlow"),A(""),aa([{nodes:[a],edges:[]}]),ac(0)}},[a]);let al=a=>JSON.stringify(a,(a,b)=>"selected"===a||"dragging"===a||"measured"===a||"width"===a||"height"===a||"positionAbsolute"===a||"resizing"===a?void 0:b);(0,e.useEffect)(()=>{if(ad)return void ae(!1);if(aj.current){aj.current=!1;return}if(ai.current)return;let a={nodes:[...k],edges:[...n]},b=_.slice(0,ab+1);(ab<0||al(a)!==al(b[ab]))&&(aa([...b,a]),ac(ab+1),ag(!0))},[k,n]),(0,e.useEffect)(()=>{let a=a=>{if(af)return a.preventDefault(),a.returnValue="",""};return window.addEventListener("beforeunload",a),()=>{window.removeEventListener("beforeunload",a)}},[af]);let am=b=>b.trim()?/^[\w-]+$/.test(b)?(!a||a&&a.name!==b)&&g.some(c=>c.id!==(a?.id||"")&&c.name.toLowerCase()===b.toLowerCase())?"A flow with this name already exists":null:"Flow name can only contain letters, numbers, underscores, and dashes":"Flow name cannot be empty",an=(0,e.useCallback)(()=>{cr.debug(`handleSave: Attempting to save flow "${v}"`);let c=am(v);if(c)return cr.warn(`handleSave: Invalid flow name - ${c}`),y(c),"invalid-name";let d=[...k];if(0===d.length&&(cr.debug("handleSave: No nodes found, adding a default Start node"),m(d=[F.g.createStartNode()])),a&&a.name!==v)return cr.debug(`handleSave: Flow name changed from "${a.name}" to "${v}", opening rename dialog`),J("rename"),L(v),H(!0),"rename-dialog";let e={id:a?.id||(0,E.A)(),name:v,description:z,nodes:d,edges:n};return cr.info(`handleSave: Saving flow "${v}" with ${d.length} nodes and ${n.length} edges`),b(e),ag(!1),"saved"},[v,z,k,n,a,b,g]);f().useImperativeHandle(i,()=>({requestNavigation:a=>{af?(ah.current=a,J("unsaved"),H(!0)):a()}}),[af]);let ao=(0,e.useCallback)(()=>{a?(cr.info(`handleDelete: Deleting flow "${a.name}" (ID: ${a.id})`),c(a.id)):cr.warn("handleDelete: Attempted to delete flow but no initialFlow is available")},[a,c]),ap=(0,e.useCallback)((a,c)=>{cr.debug(`handleCopyFlow: Copying flow "${a.name}" to "${c}"`);let d={id:(0,E.A)(),name:c,description:a.description,nodes:a.nodes,edges:a.edges};cr.info(`handleCopyFlow: Created copy of flow "${a.name}" with new name "${c}" (${a.nodes.length} nodes, ${a.edges.length} edges)`),b(d)},[b]),aq=()=>{let a=ah.current;ah.current=null,a&&a()},as=()=>{ah.current=null,H(!1),J("none"),L(""),O(null)},at=()=>{let c=am(K);if(c)return void O(c);"duplicate"===I?a&&ap(a,K):"rename"===I&&(b({id:a?.id||(0,E.A)(),name:K,description:z,nodes:k,edges:n}),ag(!1),aq()),as()},au=ab>0,av=ab<_.length-1,aw=(0,e.useCallback)(()=>{if(au){cr.debug(`handleUndo: Performing undo operation, moving from history index ${ab} to ${ab-1}`),ae(!0);let a=ab-1,b=_[a];m(b.nodes),o(b.edges),ac(a),cr.info(`handleUndo: Restored flow state to previous version (${b.nodes.length} nodes, ${b.edges.length} edges)`)}},[_,ab,au]),ax=(0,e.useCallback)(()=>{if(av){cr.debug(`handleRedo: Performing redo operation, moving from history index ${ab} to ${ab+1}`),ae(!0);let a=ab+1,b=_[a];m(b.nodes),o(b.edges),ac(a),cr.info(`handleRedo: Restored flow state to next version (${b.nodes.length} nodes, ${b.edges.length} edges)`)}},[_,ab,av]),ay=(0,e.useCallback)(a=>{for(let b of a)"position"===b.type&&(ai.current=!0===b.dragging);m(b=>(0,D._0)(a,b))},[]),az=(0,e.useCallback)(a=>{cr.debug(`onEdgesChange: Processing ${a.length} edge changes`),a.forEach(a=>{"remove"===a.type?cr.info(`onEdgesChange: Edge ${a.id} removed`):"select"===a.type&&cr.debug(`onEdgesChange: Edge ${a.id} selection changed to ${a.selected}`)}),o(b=>(0,D.zW)(a,b))},[]),aA=(0,e.useRef)(null),[aB,aD]=(0,e.useState)(null),aE=(0,e.useCallback)((a,b)=>{cr.debug(`handleNodeUpdate: Updating node ${a} properties`),m(c=>c.map(c=>c.id===a?(cr.info(`handleNodeUpdate: Node ${a} properties updated`),{...c,data:b}):c)),Q(!1),S(!1),U(!1),W(!1),Y(!1),$(null),cr.debug("handleNodeUpdate: Closed property modals")},[]),aF=(0,e.useCallback)(async(a,b)=>{let c=k.find(b=>b.id===a);if(!c)return void cr.warn(`handleConnectMcpServer: process node ${a} not found`);let d=[];try{let a=await G.S.listServerTools(b);!a.error&&Array.isArray(a.tools)&&(d=a.tools.map(a=>a.name))}catch(a){cr.warn(`handleConnectMcpServer: could not load tools for ${b}`,a)}let e=n.filter(b=>b.data?.edgeType==="mcp"&&(b.source===a||b.target===a)).length,f=F.g.createNode("mcp",{x:c.position.x+350,y:c.position.y+120*e});f.data.label=b,f.data.properties={...f.data.properties??{},boundServer:b,enabledTools:d};let g=N({source:a,sourceHandle:"process-right-mcp",target:f.id,targetHandle:"mcp-left"},[...k,f]);m(a=>[...a,f]),o(a=>[...a,g]),cr.info(`Connected MCP server "${b}" to process node ${a}`)},[k,n]),aG=(0,e.useCallback)(a=>{cr.debug("Opening properties for node:",a),$(a),"mcp"===a.data.type?S(!0):"start"===a.data.type?U(!0):"finish"===a.data.type?W(!0):"subflow"===a.data.type?Y(!0):Q(!0)},[]),aH=(0,e.useCallback)(a=>{cr.debug("onDrop: Node dropped on canvas"),a.preventDefault();let b=a.dataTransfer.getData("application/reactflow");if(cr.debug(`onDrop: Node type from data transfer: ${b}`),!b||!aB)return void cr.debug(`onDrop: Missing required data - type: ${!!b}, reactFlowInstance: ${!!aB}`);let c=aB.screenToFlowPosition({x:a.clientX,y:a.clientY});cr.debug(`onDrop: Calculated position: (${c.x}, ${c.y})`);let d=F.g.createNode(b,c);cr.info(`onDrop: Created new ${b} node with ID: ${d.id}`),m(a=>[...a.map(a=>({...a,selected:!1})),{...d,selected:!0}]),aG(d),cr.debug(`onDrop: Opened properties modal for new node: ${d.id}`)},[aB,aG]),aI=(0,e.useCallback)(a=>{a.preventDefault(),a.dataTransfer.dropEffect="move"},[]),aJ=(0,e.useCallback)(a=>{cr.debug("onInit: ReactFlow instance initialized"),aD(a)},[]);return(0,d.jsxs)(cs,{children:[(0,d.jsx)(aC,{}),(0,d.jsx)(D.Ln,{children:(0,d.jsxs)(cu,{children:[(0,d.jsxs)(ct,{elevation:1,children:[(0,d.jsx)(t.A,{size:"small",label:"Flow Name",value:v,onChange:a=>{let b=a.target.value;w(b),y(am(b))},sx:{minWidth:300},error:!!x,helperText:x}),(0,d.jsx)(t.A,{size:"small",label:"Description",value:z,onChange:a=>{A(a.target.value),ag(!0)},multiline:!0,maxRows:3,sx:{minWidth:300,flex:1},placeholder:"Optional — shown on the flow card"}),(0,d.jsx)(j.A,{variant:"contained",color:"primary",onClick:an,startIcon:(0,d.jsx)(co,{}),disabled:!!x,children:"Save Flow"}),(0,d.jsx)(aT,{nodes:k,edges:n}),a&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(j.A,{variant:"outlined",color:"primary",onClick:()=>{J("duplicate"),L(`${a.name}_copy`),H(!0)},children:"Copy Flow"}),(0,d.jsx)(j.A,{variant:"outlined",color:"error",onClick:ao,children:"Delete Flow"})]}),(0,d.jsx)(B.A,{orientation:"vertical",flexItem:!0}),(0,d.jsx)(l.A,{onClick:aw,disabled:!au,color:"primary",size:"small",children:(0,d.jsx)(cp,{})}),(0,d.jsx)(l.A,{onClick:ax,disabled:!av,color:"primary",size:"small",children:(0,d.jsx)(cq,{})}),(0,d.jsx)(h.default,{sx:{flex:1}})]}),(0,d.jsx)(h.default,{sx:{flex:1,position:"relative"},children:(0,d.jsx)(ar,{ref:aA,nodes:k,edges:n,onNodesChange:ay,onEdgesChange:az,onDrop:aH,onDragOver:aI,onInit:aJ,reactFlowWrapper:aA,onEditNode:aG})})]})}),(0,d.jsx)(cd,{open:P,node:Z,onClose:()=>Q(!1),onSave:aE,flowEdges:n,flowNodes:k,flowId:a?.id,onConnectMcpServer:a=>{Z&&aF(Z.id,a)}}),(0,d.jsx)(ch,{open:R,node:Z,onClose:()=>S(!1),onSave:aE}),(0,d.jsx)(ci,{open:T,node:Z,onClose:()=>U(!1),onSave:aE}),(0,d.jsx)(cj,{open:V,node:Z,onClose:()=>W(!1),onSave:aE}),(0,d.jsx)(cn,{open:X,node:Z,onClose:()=>Y(!1),onSave:aE,flowId:a?.id}),(0,d.jsxs)(p.A,{open:C,onClose:as,children:[(0,d.jsx)(q.A,{children:"duplicate"===I?"Copy Flow":"rename"===I?"Rename Flow":"Unsaved Changes"}),(0,d.jsx)(r.A,{children:"unsaved"===I?(0,d.jsx)(s.A,{children:"You have unsaved changes in the current flow. What would you like to do?"}):(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(s.A,{children:"duplicate"===I?"Enter a name for the copied flow:":"You are changing the name of this flow. Do you want to rename it or create a copy with the new name?"}),(0,d.jsx)(t.A,{autoFocus:!0,margin:"dense",label:"Flow Name",type:"text",fullWidth:!0,value:K,onChange:a=>{let b=a.target.value;L(b),O(am(b))},error:!!M,helperText:M,sx:{mt:2}})]})}),(0,d.jsxs)(u.A,{children:[(0,d.jsx)(j.A,{onClick:as,children:"Cancel"}),"unsaved"===I&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(j.A,{onClick:()=>{ag(!1),aq(),as()},color:"error",children:"Discard Changes"}),(0,d.jsx)(j.A,{onClick:()=>{let a=an();"saved"===a?(aq(),as()):"invalid-name"===a&&as()},variant:"contained",color:"primary",children:"Save Changes"})]}),"rename"===I&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(j.A,{onClick:()=>{let b=am(K);if(b)return void O(b);a&&ap(a,K),as()},children:"Copy"}),(0,d.jsx)(j.A,{onClick:at,variant:"contained",color:"primary",disabled:!!M,children:"Rename"})]}),"duplicate"===I&&(0,d.jsx)(j.A,{onClick:at,variant:"contained",color:"primary",disabled:!!M,children:"Copy"})]})]})]})});cv.displayName="FlowBuilder";var cw=c(77028);let cx=(0,C.h)("frontend/components/Flow/FlowManager/GenerateFlowDialog"),cy=({open:a,onClose:b,onGenerated:c})=>{let[f,g]=(0,e.useState)(""),[i,k]=(0,e.useState)([]),[l,m]=(0,e.useState)(""),[n,v]=(0,e.useState)(!1),[w,x]=(0,e.useState)(!1),[z,A]=(0,e.useState)(null);(0,e.useEffect)(()=>{if(!a)return;let b=!1;return aR.N.loadModels().then(a=>{b||(k(a),m(b=>a.some(a=>a.id===b)?b:a[0]?.id??""))}).catch(a=>{cx.warn("Failed to load models for the generate dialog",a),b||A("Could not load your models. Configure a model first.")}),()=>{b=!0}},[a]);let B=(0,e.useCallback)(()=>{w||(A(null),b())},[w,b]),C=(0,e.useCallback)(async()=>{A(null),x(!0);try{let a=await F.g.generateFlow(f.trim(),l,{allowInstall:n});if(!a.success)return void A(a.error);cx.info("Draft flow generated",{flowId:a.flow.id,attempts:a.attempts,errors:a.validation.errorCount,warnings:a.validation.warningCount,installedServers:a.installedServers.length}),g(""),c({flow:a.flow,errorCount:a.validation.errorCount,warningCount:a.validation.warningCount,attempts:a.attempts,installedServers:a.installedServers})}finally{x(!1)}},[f,l,n,c]),D=!w&&f.trim().length>0&&!!l;return(0,d.jsxs)(p.A,{open:a,onClose:B,maxWidth:"sm",fullWidth:!0,children:[(0,d.jsx)(q.A,{children:"Generate a flow"}),(0,d.jsxs)(r.A,{children:[(0,d.jsx)(s.A,{sx:{mb:2},children:"Describe what the flow should do — which steps, which tools, what the result is. The generated flow opens in the builder as a draft for you to review before saving."}),z&&(0,d.jsx)(o.A,{severity:"error",sx:{mb:2},onClose:()=>A(null),children:z}),(0,d.jsx)(t.A,{autoFocus:!0,fullWidth:!0,multiline:!0,minRows:4,label:"What should this flow do?",placeholder:"e.g. Research a topic on the web, then summarize the findings as bullet points",value:f,onChange:a=>g(a.target.value),disabled:w,sx:{mb:2}}),(0,d.jsxs)(a4.A,{fullWidth:!0,disabled:w||0===i.length,children:[(0,d.jsx)(b9.A,{id:"generate-flow-model-label",children:"Generator model"}),(0,d.jsx)(ca.A,{labelId:"generate-flow-model-label",label:"Generator model",value:l,onChange:a=>m(a.target.value),children:i.map(a=>(0,d.jsx)(S.A,{value:a.id,children:a.displayName?.trim()||a.name},a.id))})]}),(0,d.jsx)(bg.A,{sx:{mt:2},control:(0,d.jsx)(cw.A,{checked:n,onChange:a=>v(a.target.checked),disabled:w}),label:"Let the generator install MCP servers it needs (self-improve)"}),n&&(0,d.jsxs)(o.A,{severity:"warning",sx:{mt:1},children:["The generator may ",(0,d.jsx)("strong",{children:"download, install, and run third-party MCP servers"})," from the public registry on this machine — without asking again. It prefers servers that need no API keys, but anything it installs executes real code with your user's permissions. Installed servers stay configured afterwards (remove them on the MCP page)."]}),w&&(0,d.jsxs)(h.default,{sx:{display:"flex",alignItems:"center",gap:1.5,mt:2},children:[(0,d.jsx)(aE.default,{size:20}),(0,d.jsx)(s.A,{children:n?"Generating… the model may search the marketplace and install servers (this can take a few minutes).":"Generating… the model designs the flow and FLUJO checks it (this can take up to a minute)."})]})]}),(0,d.jsxs)(u.A,{children:[(0,d.jsx)(j.A,{onClick:B,disabled:w,children:"Cancel"}),(0,d.jsx)(j.A,{onClick:C,variant:"contained",color:"primary",startIcon:(0,d.jsx)(y,{}),disabled:!D,children:"Generate"})]})]})},cz=null;var cA=c(75249),cB=c(44548),cC=c(33427);let cD={...e}.useSyncExternalStore;function cE(a={}){let{themeId:b}=a;return function(a,c={}){let d=(0,cC.A)();d&&b&&(d=d[b]||d);let{defaultMatches:f=!1,matchMedia:g=null,ssrMatchMedia:h=null,noSsr:i=!1}=(0,cB.A)({name:"MuiUseMediaQuery",props:c,theme:d}),j="function"==typeof a?a(d):a;return(j=j.replace(/^@media( ?)/m,"")).includes("print")&&console.warn("MUI: You have provided a `print` query to the `useMediaQuery` hook.\nUsing the print media query to modify print styles can lead to unexpected results.\nConsider using the `displayPrint` field in the `sx` prop instead.\nMore information about `displayPrint` on our docs: https://mui.com/system/display/#display-in-print."),(void 0!==cD?function(a,b,c,d,f){let g=e.useCallback(()=>b,[b]),h=e.useMemo(()=>{if(f&&c)return()=>c(a).matches;if(null!==d){let{matches:b}=d(a);return()=>b}return g},[g,a,d,f,c]),[i,j]=e.useMemo(()=>{if(null===c)return[g,()=>()=>{}];let b=c(a);return[()=>b.matches,a=>(b.addEventListener("change",a),()=>{b.removeEventListener("change",a)})]},[g,c,a]);return cD(j,i,h)}:function(a,b,c,d,f){let[g,h]=e.useState(()=>f&&c?c(a).matches:d?d(a).matches:b);return(0,cA.A)(()=>{if(!c)return;let b=c(a),d=()=>{h(b.matches)};return d(),b.addEventListener("change",d),()=>{b.removeEventListener("change",d)}},[a,c]),g})(j,f,g,h,i)}}cE();let cF=cE({themeId:c(35864).A});var cG=c(63757);let cH=(0,v.A)((0,d.jsx)("path",{d:"M10 18h4v-2h-4zM3 6v2h18V6zm3 7h12v-2H6z"}),"FilterList"),cI=(0,v.A)((0,d.jsx)("path",{d:"M3 14h4v-4H3zm0 5h4v-4H3zM3 9h4V5H3zm5 5h13v-4H8zm0 5h13v-4H8zM8 5v4h13V5z"}),"ViewList"),cJ=(0,v.A)((0,d.jsx)("path",{d:"M14.67 5v6.5H9.33V5zm1 6.5H21V5h-5.33zm-1 7.5v-6.5H9.33V19zm1-6.5V19H21v-6.5zm-7.34 0H3V19h5.33zm0-1V5H3v6.5z"}),"ViewModule");var cK=c(11402);let cL=(0,v.A)((0,d.jsx)("path",{d:"M21 10.12h-6.78l2.74-2.82c-2.73-2.7-7.15-2.8-9.88-.1-2.73 2.71-2.73 7.08 0 9.79s7.15 2.71 9.88 0C18.32 15.65 19 14.08 19 12.1h2c0 1.98-.88 4.55-2.64 6.29-3.51 3.48-9.21 3.48-12.72 0-3.5-3.47-3.53-9.11-.02-12.58s9.14-3.47 12.65 0L21 3zM12.5 8v4.25l3.5 2.08-.72 1.21L11 13V8z"}),"Update");var cM=c(9863),cN=c(81310),cO=c(18467),cP=c(423),cQ=c(98463),cR=c(78871);function cS(a){return(0,a9.Ay)("MuiSkeleton",a)}(0,a8.A)("MuiSkeleton",["root","text","rectangular","rounded","circular","pulse","wave","withChildren","fitContent","heightAuto"]);let cT=(0,cR.i7)`
5
4
  0% {
6
5
  opacity: 1;
7
6
  }
@@ -13,7 +12,7 @@ ${a0(d,f)}`}(function(a){let b=a.type||a.data.type||"unknown",c=a.data.label||"U
13
12
  100% {
14
13
  opacity: 1;
15
14
  }
16
- `,cP=(0,cM.i7)`
15
+ `,cU=(0,cR.i7)`
17
16
  0% {
18
17
  transform: translateX(-100%);
19
18
  }
@@ -26,15 +25,16 @@ ${a0(d,f)}`}(function(a){let b=a.type||a.data.type||"unknown",c=a.data.label||"U
26
25
  100% {
27
26
  transform: translateX(100%);
28
27
  }
29
- `,cQ="string"!=typeof cO?(0,cM.AH)`
30
- animation: ${cO} 2s ease-in-out 0.5s infinite;
31
- `:null,cR="string"!=typeof cP?(0,cM.AH)`
28
+ `,cV="string"!=typeof cT?(0,cR.AH)`
29
+ animation: ${cT} 2s ease-in-out 0.5s infinite;
30
+ `:null,cW="string"!=typeof cU?(0,cR.AH)`
32
31
  &::after {
33
- animation: ${cP} 2s linear 0.5s infinite;
32
+ animation: ${cU} 2s linear 0.5s infinite;
34
33
  }
35
- `:null,cS=(0,y.Ay)("span",{name:"MuiSkeleton",slot:"Root",overridesResolver:(a,b)=>{let{ownerState:c}=a;return[b.root,b[c.variant],!1!==c.animation&&b[c.animation],c.hasChildren&&b.withChildren,c.hasChildren&&!c.width&&b.fitContent,c.hasChildren&&!c.height&&b.heightAuto]}})((0,bl.A)(({theme:a})=>{let b=String(a.shape.borderRadius).match(/[\d.\-+]*\s*(.*)/)[1]||"px",c=parseFloat(a.shape.borderRadius);return{display:"block",backgroundColor:a.vars?a.vars.palette.Skeleton.bg:(0,bg.X4)(a.palette.text.primary,"light"===a.palette.mode?.11:.13),height:"1.2em",variants:[{props:{variant:"text"},style:{marginTop:0,marginBottom:0,height:"auto",transformOrigin:"0 55%",transform:"scale(1, 0.60)",borderRadius:`${c}${b}/${Math.round(c/.6*10)/10}${b}`,"&:empty:before":{content:'"\\00a0"'}}},{props:{variant:"circular"},style:{borderRadius:"50%"}},{props:{variant:"rounded"},style:{borderRadius:(a.vars||a).shape.borderRadius}},{props:({ownerState:a})=>a.hasChildren,style:{"& > *":{visibility:"hidden"}}},{props:({ownerState:a})=>a.hasChildren&&!a.width,style:{maxWidth:"fit-content"}},{props:({ownerState:a})=>a.hasChildren&&!a.height,style:{height:"auto"}},{props:{animation:"pulse"},style:cQ||{animation:`${cO} 2s ease-in-out 0.5s infinite`}},{props:{animation:"wave"},style:{position:"relative",overflow:"hidden",WebkitMaskImage:"-webkit-radial-gradient(white, black)","&::after":{background:`linear-gradient(
34
+ `:null,cX=(0,z.Ay)("span",{name:"MuiSkeleton",slot:"Root",overridesResolver:(a,b)=>{let{ownerState:c}=a;return[b.root,b[c.variant],!1!==c.animation&&b[c.animation],c.hasChildren&&b.withChildren,c.hasChildren&&!c.width&&b.fitContent,c.hasChildren&&!c.height&&b.heightAuto]}})((0,bm.A)(({theme:a})=>{let b=String(a.shape.borderRadius).match(/[\d.\-+]*\s*(.*)/)[1]||"px",c=parseFloat(a.shape.borderRadius);return{display:"block",backgroundColor:a.vars?a.vars.palette.Skeleton.bg:(0,bh.X4)(a.palette.text.primary,"light"===a.palette.mode?.11:.13),height:"1.2em",variants:[{props:{variant:"text"},style:{marginTop:0,marginBottom:0,height:"auto",transformOrigin:"0 55%",transform:"scale(1, 0.60)",borderRadius:`${c}${b}/${Math.round(c/.6*10)/10}${b}`,"&:empty:before":{content:'"\\00a0"'}}},{props:{variant:"circular"},style:{borderRadius:"50%"}},{props:{variant:"rounded"},style:{borderRadius:(a.vars||a).shape.borderRadius}},{props:({ownerState:a})=>a.hasChildren,style:{"& > *":{visibility:"hidden"}}},{props:({ownerState:a})=>a.hasChildren&&!a.width,style:{maxWidth:"fit-content"}},{props:({ownerState:a})=>a.hasChildren&&!a.height,style:{height:"auto"}},{props:{animation:"pulse"},style:cV||{animation:`${cT} 2s ease-in-out 0.5s infinite`}},{props:{animation:"wave"},style:{position:"relative",overflow:"hidden",WebkitMaskImage:"-webkit-radial-gradient(white, black)","&::after":{background:`linear-gradient(
36
35
  90deg,
37
36
  transparent,
38
37
  ${(a.vars||a).palette.action.hover},
39
38
  transparent
40
- )`,content:'""',position:"absolute",transform:"translateX(-100%)",bottom:0,left:0,right:0,top:0}}},{props:{animation:"wave"},style:cR||{"&::after":{animation:`${cP} 2s linear 0.5s infinite`}}}]}})),cT=e.forwardRef(function(a,b){let c=(0,bx.b)({props:a,name:"MuiSkeleton"}),{animation:e="pulse",className:f,component:g="span",height:h,style:i,variant:j="text",width:k,...l}=c,m={...c,animation:e,component:g,variant:j,hasChildren:!!l.children},n=(a=>{let{classes:b,variant:c,animation:d,hasChildren:e,width:f,height:g}=a;return(0,a5.A)({root:["root",c,d,e&&"withChildren",e&&!f&&"fitContent",e&&!g&&"heightAuto"]},cN,b)})(m);return(0,d.jsx)(cS,{as:g,ref:b,className:(0,a4.A)(n.root,f),ownerState:m,...l,style:{width:k,height:h,...i}})});var cU=c(1312),cV=c(78352);let cW=(0,B.h)("components/Flow/FlowDashboard/FlowCard"),cX=(0,y.Ay)(bO.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}:{}})),cY=(0,y.Ay)(h.default)(({theme:a})=>({height:"140px",backgroundColor:(0,bg.X4)(a.palette.background.default,.7),borderRadius:a.shape.borderRadius,display:"flex",alignItems:"center",justifyContent:"center",margin:a.spacing(1),overflow:"hidden",position:"relative"})),cZ=()=>(0,d.jsxs)(bO.A,{sx:{height:"100%",display:"flex",flexDirection:"column"},children:[(0,d.jsx)(h.default,{sx:{p:1},children:(0,d.jsx)(cT,{variant:"rectangular",height:140})}),(0,d.jsxs)(bP.A,{sx:{flexGrow:1},children:[(0,d.jsx)(cT,{variant:"text",width:"80%",height:30}),(0,d.jsxs)(h.default,{sx:{display:"flex",gap:1,mt:1},children:[(0,d.jsx)(cT,{variant:"rectangular",width:60,height:20}),(0,d.jsx)(cT,{variant:"rectangular",width:90,height:20})]})]}),(0,d.jsxs)(cL.A,{sx:{justifyContent:"flex-end",p:1},children:[(0,d.jsx)(cT,{variant:"circular",width:28,height:28}),(0,d.jsx)(cT,{variant:"circular",width:28,height:28}),(0,d.jsx)(cT,{variant:"circular",width:28,height:28})]})]}),c$=({flow:a,selected:b,onSelect:c,onDelete:f,onCopy:j,onEdit:k,onSetFolder:n,folders:o=[],validation:p})=>{cW.debug("Rendering FlowCard",{flowId:a.id,flowName:a.name});let q=(0,g.A)(),[r,s]=(0,e.useState)(null),t=p?.errorCount??0,u=p?.warningCount??0,v=t>0?"error":u>0?"warning":null,w=p?(0,d.jsxs)(h.default,{children:[(0,d.jsx)(i.default,{variant:"caption",sx:{fontWeight:600,display:"block",mb:.5},children:t>0?`${t} problem${1===t?"":"s"} — won't run`:`${u} warning${1===u?"":"s"}`}),p.issues.slice(0,5).map((a,b)=>(0,d.jsxs)(i.default,{variant:"caption",sx:{display:"block"},children:["• ",a.message]},b)),p.issues.length>5&&(0,d.jsxs)(i.default,{variant:"caption",sx:{display:"block",fontStyle:"italic"},children:["…and ",p.issues.length-5," more"]})]}):null;return(0,d.jsxs)(cX,{selected:b,children:[v&&(0,d.jsx)(m.A,{title:w,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"===v?q.palette.error.main:q.palette.warning.main,boxShadow:q.shadows[2],pointerEvents:"auto"},children:["error"===v?(0,d.jsx)(aI.A,{sx:{fontSize:16}}):(0,d.jsx)(aJ,{sx:{fontSize:16}}),(0,d.jsx)(i.default,{variant:"caption",sx:{fontWeight:700,lineHeight:1},children:"error"===v?t:u})]})}),(0,d.jsxs)(cK.A,{onClick:()=>c(a.id),sx:{display:"flex",flexDirection:"column",alignItems:"stretch",height:"100%",position:"relative"},children:[(0,d.jsx)(cY,{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)(i.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,j=Math.max(...c)+70,k=`${e-40} ${f-40} ${g-e+80} ${j-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:k,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:q.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,Q.M6)(e,q);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:q.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)(bP.A,{sx:{flexGrow:1,pb:0},children:[(0,d.jsx)(i.default,{variant:"h6",component:"div",noWrap:!0,children:a.name}),a.description&&(0,d.jsx)(m.A,{title:a.description,placement:"bottom-start",children:(0,d.jsx)(i.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)(aC.A,{size:"small",label:`${a.nodes.length} nodes`,color:"primary",variant:"outlined",sx:{fontSize:"0.7rem",height:20}}),(0,d.jsx)(aC.A,{size:"small",label:`${a.edges.length} connections`,color:"secondary",variant:"outlined",sx:{fontSize:"0.7rem",height:20}})]})]})]}),(0,d.jsxs)(cL.A,{sx:{justifyContent:"flex-end",p:1,opacity:.7,"&:hover":{opacity:1}},children:[k&&(0,d.jsx)(m.A,{title:"Edit flow metadata",children:(0,d.jsx)(l.A,{size:"small",onClick:b=>{b.stopPropagation(),k&&k(a.id)},children:(0,d.jsx)(Y.A,{fontSize:"small"})})}),j&&(0,d.jsx)(m.A,{title:"Copy flow",children:(0,d.jsx)(l.A,{size:"small",onClick:b=>{b.stopPropagation(),j&&j(a.id)},children:(0,d.jsx)(W.A,{fontSize:"small"})})}),n&&(0,d.jsx)(m.A,{title:a.folder?`Folder: ${a.folder}`:"Move to folder",children:(0,d.jsx)(l.A,{size:"small",onClick:a=>{a.stopPropagation(),s(a.currentTarget)},color:a.folder?"primary":"default",children:(0,d.jsx)(cU.A,{fontSize:"small"})})}),(0,d.jsx)(m.A,{title:"Delete flow",children:(0,d.jsx)(l.A,{size:"small",onClick:b=>{b.stopPropagation(),f(a.id)},color:"error",children:(0,d.jsx)(V.A,{fontSize:"small"})})})]}),n&&(0,d.jsx)(cV.A,{anchorEl:r,open:!!r,currentFolder:a.folder,folders:o,onClose:()=>s(null),onAssign:b=>n(a.id,b)})]})};var c_=c(59737),c0=c(7329);let c1=(0,B.h)("components/Flow/FlowDashboard/FlowDashboard");function c2(a,b){return a+Math.round(255*b).toString(16).padStart(2,"0")}let c3=({flows:a,selectedFlow:b,onSelectFlow:c,onDeleteFlow:f,onCopyFlow:k,onEditFlow:m,onCreateFlow:n,onSetFolder:o,isLoading:p=!1})=>{let[q,r]=(0,e.useState)(""),[s,u]=(0,e.useState)("name-asc"),[v,w]=(0,e.useState)("grid"),[y,B]=(0,e.useState)(null),[C,D]=(0,e.useState)("none"),[E,F]=(0,e.useState)(null),[G,H]=(0,e.useState)(new Set),[I,J]=(0,e.useState)({});(0,e.useEffect)(()=>{let a=!1;return(async()=>{let b={};try{let a=await fetch("/api/model");if(a.ok){let c=await a.json();Array.isArray(c)&&(b.models=c)}}catch(a){c1.warn("Could not load models for flow badges",a)}try{let a=await fetch("/api/mcp/servers");if(a.ok){let c=await a.json();Array.isArray(c)&&(b.servers=c.map(a=>({name:a.name,status:a.disabled?"disabled":void 0})))}}catch(a){c1.warn("Could not load servers for flow badges",a)}a||J(b)})(),()=>{a=!0}},[]);let K=(0,e.useMemo)(()=>{let b={};for(let c of a)try{b[c.id]=aP(c,I)}catch(a){c1.warn("Failed to validate flow for badge",{flowId:c.id,error:a})}return b},[a,I]),L=(0,g.A)(),M=cA(L.breakpoints.down("sm")),N=cA(L.breakpoints.down("md")),O=()=>{B(null)},P=a=>{u(a),O()},Q=a=>{D(a),F(null)},V=(0,e.useMemo)(()=>{c1.debug("Filtering and sorting flows",{searchTerm:q,sortOption:s});let b=a;if(""!==q.trim()){let c=q.toLowerCase();b=a.filter(a=>a.name.toLowerCase().includes(c))}return[...b].sort((a,b)=>{switch(s){case"name-asc":return a.name.localeCompare(b.name);case"name-desc":return b.name.localeCompare(a.name);case"most-nodes":return b.nodes.length-a.nodes.length;case"least-nodes":return a.nodes.length-b.nodes.length;case"newest":return b.id.localeCompare(a.id);case"oldest":return a.id.localeCompare(b.id);default:return 0}})},[a,q,s]),W=(0,e.useMemo)(()=>(0,c0.yF)(a,a=>a.folder),[a]),X=(0,e.useMemo)(()=>"folder"===C?(0,c0.Je)(V,a=>a.folder):"sort"===C?(0,c0.Az)(V,a=>(function(a,b){switch(b){case"name-asc":case"name-desc":return(0,c0.po)(a.name);case"most-nodes":case"least-nodes":var c;return 0===(c=a.nodes.length)?{key:"nodes:0",label:"0 nodes"}:c<=2?{key:"nodes:1-2",label:"1–2 nodes"}:c<=5?{key:"nodes:3-5",label:"3–5 nodes"}:c<=10?{key:"nodes:6-10",label:"6–10 nodes"}:{key:"nodes:11+",label:"11+ nodes"};default:return{key:"all",label:"All flows"}}})(a,s)):[],[C,V,s]),Y=a=>(0,d.jsx)(aT.Ay,{container:!0,spacing:2,children:a.map(a=>(0,d.jsx)(aT.Ay,{item:!0,xs:12,sm:"compact"===v?12:6,md:"compact"===v?12:3==("compact"===v||M?1:N?2:3)?4:6,children:(0,d.jsx)(c$,{flow:a,selected:b===a.id,onSelect:c,onDelete:f,onCopy:k,onEdit:m,onSetFolder:o,folders:W,validation:K[a.id]})},a.id))});return(0,d.jsxs)(h.default,{sx:{height:"100%",display:"flex",flexDirection:"column",overflow:"hidden"},children:[(0,d.jsx)(z.A,{elevation:1,sx:{mb:2,p:1},children:(0,d.jsxs)(h.default,{sx:{display:"flex",flexDirection:{xs:"column",sm:"row"},gap:1,alignItems:{xs:"stretch",sm:"center"},justifyContent:"space-between"},children:[(0,d.jsx)(t.A,{placeholder:"Search flows...",variant:"outlined",size:"small",fullWidth:!0,value:q,onChange:a=>{r(a.target.value)},InputProps:{startAdornment:(0,d.jsx)(bN.A,{position:"start",children:(0,d.jsx)(bS.A,{fontSize:"small"})})},sx:{maxWidth:{sm:300}}}),(0,d.jsxs)(h.default,{sx:{display:"flex",gap:1,alignItems:"center"},children:[(0,d.jsxs)(h.default,{sx:{display:"flex",backgroundColor:L.palette.background.default,borderRadius:1,border:`1px solid ${L.palette.divider}`,overflow:"hidden"},children:[(0,d.jsx)(l.A,{size:"small",onClick:()=>w("grid"),color:"grid"===v?"primary":"default",sx:{borderRadius:0,backgroundColor:"grid"===v?c2(L.palette.primary.main,.1):"transparent"},children:(0,d.jsx)(cE,{fontSize:"small"})}),(0,d.jsx)(l.A,{size:"small",onClick:()=>w("compact"),color:"compact"===v?"primary":"default",sx:{borderRadius:0,backgroundColor:"compact"===v?c2(L.palette.primary.main,.1):"transparent"},children:(0,d.jsx)(cD,{fontSize:"small"})})]}),(0,d.jsx)(l.A,{size:"small",onClick:a=>F(a.currentTarget),color:"none"!==C?"primary":"default",sx:{border:`1px solid ${L.palette.divider}`,backgroundColor:L.palette.background.default},title:"Group cards",children:(0,d.jsx)(cH.A,{fontSize:"small"})}),(0,d.jsx)(l.A,{size:"small",onClick:a=>{B(a.currentTarget)},sx:{border:`1px solid ${L.palette.divider}`,backgroundColor:L.palette.background.default},children:(0,d.jsx)(cB.A,{fontSize:"small"})})]})]})}),(0,d.jsxs)(h.default,{sx:{display:"flex",justifyContent:"space-between",mb:2,px:1},children:[(0,d.jsxs)(i.default,{variant:"body2",color:"textSecondary",children:[V.length," of ",a.length," flows",q&&` matching "${q}"`]}),(0,d.jsxs)(i.default,{variant:"body2",color:"textSecondary",children:["Sorted by: ","name-asc"===s?"Name (A-Z)":"name-desc"===s?"Name (Z-A)":"newest"===s?"Newest first":"oldest"===s?"Oldest first":"most-nodes"===s?"Most nodes":"Least nodes"]})]}),(0,d.jsx)(h.default,{sx:{flex:1,overflow:"auto",px:1,pb:2},children:p?(0,d.jsx)(aT.Ay,{container:!0,spacing:2,children:Array(6).fill(0).map((a,b)=>(0,d.jsx)(aT.Ay,{item:!0,xs:12,sm:"compact"===v?12:6,md:"compact"===v?12:4,children:(0,d.jsx)(cZ,{})},`skeleton-${b}`))}):V.length>0?"none"===C?Y(V):X.map(a=>(0,d.jsx)(c_.A,{label:a.label,count:a.items.length,expanded:!G.has(a.key),onToggle:()=>(a=>{H(b=>{let c=new Set(b);return c.has(a)?c.delete(a):c.add(a),c})})(a.key),showFolderIcon:"folder"===C,children:Y(a.items)},a.key)):(0,d.jsxs)(h.default,{sx:{display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",p:4,backgroundColor:L.palette.background.paper,borderRadius:1,border:`1px dashed ${L.palette.divider}`,height:"100%",minHeight:200},children:[(0,d.jsx)(i.default,{variant:"h6",gutterBottom:!0,color:"textSecondary",children:"No flows found"}),q?(0,d.jsxs)(i.default,{variant:"body2",color:"textSecondary",align:"center",children:["No flows match your search criteria.",(0,d.jsxs)(h.default,{component:"span",display:"block",mt:1,children:["Try a different search term or ",(0,d.jsx)(j.A,{size:"small",onClick:()=>r(""),children:"clear the search"})]})]}):(0,d.jsxs)(i.default,{variant:"body2",color:"textSecondary",align:"center",children:["Get started by creating your first flow.",n&&(0,d.jsx)(h.default,{component:"span",display:"block",mt:2,children:(0,d.jsx)(j.A,{variant:"contained",color:"primary",startIcon:(0,d.jsx)(x.A,{}),onClick:n,children:"Create New Flow"})})]})]})}),(0,d.jsxs)(U.A,{anchorEl:E,open:!!E,onClose:()=>F(null),anchorOrigin:{vertical:"bottom",horizontal:"right"},transformOrigin:{vertical:"top",horizontal:"right"},children:[(0,d.jsxs)(R.A,{selected:"none"===C,onClick:()=>Q("none"),children:[(0,d.jsx)(S.A,{children:(0,d.jsx)(cI.A,{fontSize:"small"})}),(0,d.jsx)(T.A,{primary:"No grouping"})]}),(0,d.jsxs)(R.A,{selected:"folder"===C,onClick:()=>Q("folder"),children:[(0,d.jsx)(S.A,{children:(0,d.jsx)(cJ.A,{fontSize:"small"})}),(0,d.jsx)(T.A,{primary:"By folder"})]}),(0,d.jsxs)(R.A,{selected:"sort"===C,onClick:()=>Q("sort"),children:[(0,d.jsx)(S.A,{children:(0,d.jsx)(cH.A,{fontSize:"small"})}),(0,d.jsx)(T.A,{primary:"By sort setting"})]})]}),(0,d.jsxs)(U.A,{anchorEl:y,open:!!y,onClose:O,anchorOrigin:{vertical:"bottom",horizontal:"right"},transformOrigin:{vertical:"top",horizontal:"right"},children:[(0,d.jsxs)(R.A,{onClick:()=>P("name-asc"),children:[(0,d.jsx)(S.A,{children:(0,d.jsx)(cF.A,{fontSize:"small"})}),(0,d.jsx)(T.A,{primary:"Name (A-Z)"})]}),(0,d.jsxs)(R.A,{onClick:()=>P("name-desc"),children:[(0,d.jsx)(S.A,{children:(0,d.jsx)(cF.A,{fontSize:"small",sx:{transform:"scaleX(-1)"}})}),(0,d.jsx)(T.A,{primary:"Name (Z-A)"})]}),(0,d.jsx)(A.A,{}),(0,d.jsxs)(R.A,{onClick:()=>P("newest"),children:[(0,d.jsx)(S.A,{children:(0,d.jsx)(cG,{fontSize:"small"})}),(0,d.jsx)(T.A,{primary:"Newest first"})]}),(0,d.jsxs)(R.A,{onClick:()=>P("oldest"),children:[(0,d.jsx)(S.A,{children:(0,d.jsx)(cG,{fontSize:"small",sx:{transform:"scaleX(-1)"}})}),(0,d.jsx)(T.A,{primary:"Oldest first"})]}),(0,d.jsx)(A.A,{}),(0,d.jsxs)(R.A,{onClick:()=>P("most-nodes"),children:[(0,d.jsx)(S.A,{children:(0,d.jsx)(cC,{fontSize:"small"})}),(0,d.jsx)(T.A,{primary:"Most nodes"})]}),(0,d.jsxs)(R.A,{onClick:()=>P("least-nodes"),children:[(0,d.jsx)(S.A,{children:(0,d.jsx)(cC,{fontSize:"small",sx:{transform:"scaleY(-1)"}})}),(0,d.jsx)(T.A,{primary:"Least nodes"})]})]})]})},c4=(0,B.h)("app/flows/page"),c5=()=>{c4.debug("Rendering FlowsPage"),(0,g.A)();let[a,b]=(0,e.useState)([]),[c,f]=(0,e.useState)(null),[v,y]=(0,e.useState)(!0),[z,A]=(0,e.useState)(!1),B=(0,e.useRef)(null),[C,F]=(0,e.useState)(!1),[G,H]=(0,e.useState)(null),[I,J]=(0,e.useState)(""),[K,L]=(0,e.useState)(null),[M,N]=(0,e.useState)({open:!1,message:"",severity:"info"});(0,e.useEffect)(()=>{c4.info("Loading flows"),(async()=>{y(!0);try{let a=await E.g.loadFlows();c4.debug("Flows loaded successfully",{count:a.length}),b(a),c&&(a.some(a=>a.id===c)||(c4.warn("Previously selected flow no longer exists",{flowId:c}),f(null),A(!1),Q("The previously selected flow is no longer available","warning")))}catch(a){c4.error("Error loading flows",a),Q("Failed to load flows","error")}finally{y(!1)}})()},[c]);let O=(0,e.useCallback)(a=>{c4.debug("Flow selected",{flowId:a}),f(a),A(!0)},[]);(0,e.useEffect)(()=>{if(!(z&&c))return;let a=a=>{B.current?B.current.requestNavigation(a):a()};return cu=a,()=>{cu===a&&(cu=null)}},[z,c]);let P=(0,e.useCallback)(()=>{c4.debug("Returning to dashboard");let a=()=>A(!1);B.current?B.current.requestNavigation(a):a()},[]),Q=(0,e.useCallback)((a,b="info")=>{c4.debug("Showing snackbar",{message:a,severity:b}),N({open:!0,message:a,severity:b})},[]),R=(0,e.useCallback)(()=>{N(a=>({...a,open:!1}))},[]);(0,e.useEffect)(()=>{if(!M.open||"error"===M.severity)return;let a=setTimeout(()=>{N(a=>({...a,open:!1}))},6e3);return()=>clearTimeout(a)},[M.open,M.message,M.severity]);let S=(0,e.useCallback)(b=>(c4.debug("Validating flow name",{name:b}),b.trim())?/^[\w-]+$/.test(b)?a.some(a=>a.name.toLowerCase()===b.toLowerCase())?(c4.debug("Flow name validation failed: duplicate name"),"A flow with this name already exists"):(c4.debug("Flow name validation passed"),null):(c4.debug("Flow name validation failed: invalid characters"),"Flow name can only contain letters, numbers, underscores, and dashes"):(c4.debug("Flow name validation failed: empty name"),"Flow name cannot be empty"),[a]),T=async c=>{c4.info("Saving flow",{flowId:c.id,flowName:c.name});try{let d=a.some(a=>a.id===c.id)?await E.g.updateFlow(c):await E.g.addFlow(c);if(!d.success){c4.error("Failed to save flow",{error:d.error}),Q(d.error||"Failed to save flow","error");return}c4.debug("Flow saved successfully"),b(a=>{let b=a.findIndex(a=>a.id===c.id);if(!(b>=0))return c4.debug("Adding new flow to state"),[...a,c];{c4.debug("Updating existing flow in state");let d=[...a];return d[b]=c,d}}),f(c.id),Q("Flow saved successfully","success")}catch(a){c4.error("Error saving flow",a),Q("Failed to save flow","error")}},U=async a=>{c4.info("Deleting flow",{flowId:a});try{await E.g.deleteFlow(a),c4.debug("Flow deleted successfully"),b(b=>b.filter(b=>b.id!==a)),c===a&&(c4.debug("Clearing selected flow as it was deleted"),f(null),A(!1)),Q("Flow deleted","success")}catch(a){c4.error("Error deleting flow",a),Q("Failed to delete flow","error")}},V=(0,e.useCallback)(async(c,d)=>{c4.info("Setting flow folder",{flowId:c,folder:d});let e=a.find(a=>a.id===c);if(!e)return void c4.warn("Flow to move not found",{flowId:c});let f={...e,folder:d&&d.trim()?d.trim():void 0};try{let a=await E.g.updateFlow(f);if(!a.success)return void Q(a.error||"Failed to move flow to folder","error");b(a=>a.map(a=>a.id===c?f:a)),Q(f.folder?`Moved to "${f.folder}"`:"Removed from folder","success")}catch(a){c4.error("Error setting flow folder",a),Q("Failed to move flow to folder","error")}},[a,Q]),W=b=>{c4.info("Copying flow",{flowId:b});let c=a.find(a=>a.id===b);c?(c4.debug("Found flow to copy",{flowName:c.name}),H(c),J(`${c.name}_copy`),F(!0)):(c4.warn("Flow to copy not found",{flowId:b}),Q("Flow not found","error"))},X=()=>{c4.debug("Closing copy flow dialog"),F(!1),H(null),J(""),L(null)},Y=async()=>{if(c4.info("Confirming flow copy"),!G){c4.warn("No flow to copy"),Q("No flow selected to copy","error");return}let a=S(I);if(a){c4.debug("Flow name validation failed",{error:a}),L(a);return}let b=(0,D.A)();c4.debug("Creating new flow from copy",{newId:b,newName:I});let c={id:b,name:I,description:G.description,nodes:G.nodes,edges:G.edges};await T(c),X(),c4.debug("Selecting newly copied flow"),f(c.id),A(!0),Q(`Created a copy named "${I}"`,"success")},Z=async()=>{c4.info("Creating new flow");let b="NewFlow",c=b,d=1;for(;a.some(a=>a.name===c);)c=`${b}${d}`,d++;let e=E.g.createNewFlow(c);await T(e),A(!0),Q("New flow created","success")};return(0,d.jsxs)(h.default,{sx:{height:"100%",display:"flex",flexDirection:"column"},children:[(0,d.jsxs)(h.default,{sx:{p:2,display:"flex",justifyContent:"space-between",alignItems:"center",borderBottom:1,borderColor:"divider"},children:[(0,d.jsxs)(h.default,{sx:{display:"flex",alignItems:"center"},children:[z&&c&&(0,d.jsx)(l.A,{color:"primary",onClick:P,sx:{mr:1},children:(0,d.jsx)(w,{})}),(0,d.jsx)(h.default,{children:(0,d.jsx)(i.default,{variant:"h5",children:z&&c?`Editing: ${a.find(a=>a.id===c)?.name||"Flow"}`:"Flow Dashboard"})})]}),!z&&(0,d.jsx)(h.default,{sx:{display:"flex",gap:1},children:(0,d.jsx)(m.A,{title:"Create a new flow with a starter template",children:(0,d.jsx)(j.A,{variant:"contained",color:"primary",startIcon:(0,d.jsx)(x.A,{}),onClick:Z,"data-tour":"new-flow",children:"New Flow"})})})]}),(0,d.jsx)(n.A,{in:M.open,unmountOnExit:!0,children:(0,d.jsx)(o.A,{severity:M.severity,onClose:R,sx:{borderRadius:0},children:M.message})}),(0,d.jsx)(h.default,{sx:{flex:1,overflow:"hidden"},children:(()=>{if(z&&c){let b=a.find(a=>a.id===c);return b?(0,d.jsx)(k.A,{in:!0,timeout:300,children:(0,d.jsx)(h.default,{sx:{height:"100%"},children:(0,d.jsx)(ct,{ref:B,initialFlow:b,onSave:T,onDelete:U,allFlows:a},c)})}):(0,d.jsxs)(h.default,{sx:{p:4,textAlign:"center"},children:[(0,d.jsx)(i.default,{variant:"h6",color:"error",children:"Selected flow not found"}),(0,d.jsx)(j.A,{variant:"contained",onClick:P,sx:{mt:2},children:"Back to Dashboard"})]})}return(0,d.jsx)(k.A,{in:!0,timeout:300,children:(0,d.jsx)(h.default,{sx:{height:"100%"},children:(0,d.jsx)(c3,{flows:a,selectedFlow:c,onSelectFlow:O,onDeleteFlow:U,onCopyFlow:W,onCreateFlow:Z,onSetFolder:V,isLoading:v})})})})()}),(0,d.jsxs)(p.A,{open:C,onClose:X,children:[(0,d.jsx)(q.A,{children:"Copy Flow"}),(0,d.jsxs)(r.A,{children:[(0,d.jsx)(s.A,{children:"Enter a name for the copied flow:"}),(0,d.jsx)(t.A,{autoFocus:!0,margin:"dense",label:"Flow Name",type:"text",fullWidth:!0,value:I,onChange:a=>{let b=a.target.value;c4.debug("Flow name changed",{name:b}),J(b),L(S(b))},error:!!K,helperText:K})]}),(0,d.jsxs)(u.A,{children:[(0,d.jsx)(j.A,{onClick:X,children:"Cancel"}),(0,d.jsx)(j.A,{onClick:Y,variant:"contained",color:"primary",disabled:!!K,children:"Copy"})]})]})]})}},86439:a=>{"use strict";a.exports=require("next/dist/shared/lib/no-fallback-error.external")}};var b=require("../../webpack-runtime.js");b.C(a);var c=b.X(0,[1331,8298,3984,8445,6760,6390,1746,1050,7485,2666,5558,7328,5587,6283,8434,2776,8460,117,9188,5838],()=>b(b.s=76052));module.exports=c})();
39
+ )`,content:'""',position:"absolute",transform:"translateX(-100%)",bottom:0,left:0,right:0,top:0}}},{props:{animation:"wave"},style:cW||{"&::after":{animation:`${cU} 2s linear 0.5s infinite`}}}]}})),cY=e.forwardRef(function(a,b){let c=(0,by.b)({props:a,name:"MuiSkeleton"}),{animation:e="pulse",className:f,component:g="span",height:h,style:i,variant:j="text",width:k,...l}=c,m={...c,animation:e,component:g,variant:j,hasChildren:!!l.children},n=(a=>{let{classes:b,variant:c,animation:d,hasChildren:e,width:f,height:g}=a;return(0,a6.A)({root:["root",c,d,e&&"withChildren",e&&!f&&"fitContent",e&&!g&&"heightAuto"]},cS,b)})(m);return(0,d.jsx)(cX,{as:g,ref:b,className:(0,a5.A)(n.root,f),ownerState:m,...l,style:{width:k,height:h,...i}})});var cZ=c(1312),c$=c(78352);let c_=(0,C.h)("components/Flow/FlowDashboard/FlowCard"),c0=(0,z.Ay)(bP.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}:{}})),c1=(0,z.Ay)(h.default)(({theme:a})=>({height:"140px",backgroundColor:(0,bh.X4)(a.palette.background.default,.7),borderRadius:a.shape.borderRadius,display:"flex",alignItems:"center",justifyContent:"center",margin:a.spacing(1),overflow:"hidden",position:"relative"})),c2=()=>(0,d.jsxs)(bP.A,{sx:{height:"100%",display:"flex",flexDirection:"column"},children:[(0,d.jsx)(h.default,{sx:{p:1},children:(0,d.jsx)(cY,{variant:"rectangular",height:140})}),(0,d.jsxs)(bQ.A,{sx:{flexGrow:1},children:[(0,d.jsx)(cY,{variant:"text",width:"80%",height:30}),(0,d.jsxs)(h.default,{sx:{display:"flex",gap:1,mt:1},children:[(0,d.jsx)(cY,{variant:"rectangular",width:60,height:20}),(0,d.jsx)(cY,{variant:"rectangular",width:90,height:20})]})]}),(0,d.jsxs)(cQ.A,{sx:{justifyContent:"flex-end",p:1},children:[(0,d.jsx)(cY,{variant:"circular",width:28,height:28}),(0,d.jsx)(cY,{variant:"circular",width:28,height:28}),(0,d.jsx)(cY,{variant:"circular",width:28,height:28})]})]}),c3=({flow:a,selected:b,onSelect:c,onDelete:f,onCopy:j,onEdit:k,onSetFolder:n,folders:o=[],validation:p})=>{c_.debug("Rendering FlowCard",{flowId:a.id,flowName:a.name});let q=(0,g.A)(),[r,s]=(0,e.useState)(null),t=p?.errorCount??0,u=p?.warningCount??0,v=t>0?"error":u>0?"warning":null,w=p?(0,d.jsxs)(h.default,{children:[(0,d.jsx)(i.default,{variant:"caption",sx:{fontWeight:600,display:"block",mb:.5},children:t>0?`${t} problem${1===t?"":"s"} — won't run`:`${u} warning${1===u?"":"s"}`}),p.issues.slice(0,5).map((a,b)=>(0,d.jsxs)(i.default,{variant:"caption",sx:{display:"block"},children:["• ",a.message]},b)),p.issues.length>5&&(0,d.jsxs)(i.default,{variant:"caption",sx:{display:"block",fontStyle:"italic"},children:["…and ",p.issues.length-5," more"]})]}):null;return(0,d.jsxs)(c0,{selected:b,children:[v&&(0,d.jsx)(m.A,{title:w,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"===v?q.palette.error.main:q.palette.warning.main,boxShadow:q.shadows[2],pointerEvents:"auto"},children:["error"===v?(0,d.jsx)(aJ.A,{sx:{fontSize:16}}):(0,d.jsx)(aK,{sx:{fontSize:16}}),(0,d.jsx)(i.default,{variant:"caption",sx:{fontWeight:700,lineHeight:1},children:"error"===v?t:u})]})}),(0,d.jsxs)(cP.A,{onClick:()=>c(a.id),sx:{display:"flex",flexDirection:"column",alignItems:"stretch",height:"100%",position:"relative"},children:[(0,d.jsx)(c1,{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)(i.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,j=Math.max(...c)+70,k=`${e-40} ${f-40} ${g-e+80} ${j-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:k,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:q.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,R.M6)(e,q);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:q.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)(bQ.A,{sx:{flexGrow:1,pb:0},children:[(0,d.jsx)(i.default,{variant:"h6",component:"div",noWrap:!0,children:a.name}),a.description&&(0,d.jsx)(m.A,{title:a.description,placement:"bottom-start",children:(0,d.jsx)(i.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)(aD.A,{size:"small",label:`${a.nodes.length} nodes`,color:"primary",variant:"outlined",sx:{fontSize:"0.7rem",height:20}}),(0,d.jsx)(aD.A,{size:"small",label:`${a.edges.length} connections`,color:"secondary",variant:"outlined",sx:{fontSize:"0.7rem",height:20}})]})]})]}),(0,d.jsxs)(cQ.A,{sx:{justifyContent:"flex-end",p:1,opacity:.7,"&:hover":{opacity:1}},children:[k&&(0,d.jsx)(m.A,{title:"Edit flow metadata",children:(0,d.jsx)(l.A,{size:"small",onClick:b=>{b.stopPropagation(),k&&k(a.id)},children:(0,d.jsx)(Z.A,{fontSize:"small"})})}),j&&(0,d.jsx)(m.A,{title:"Copy flow",children:(0,d.jsx)(l.A,{size:"small",onClick:b=>{b.stopPropagation(),j&&j(a.id)},children:(0,d.jsx)(X.A,{fontSize:"small"})})}),n&&(0,d.jsx)(m.A,{title:a.folder?`Folder: ${a.folder}`:"Move to folder",children:(0,d.jsx)(l.A,{size:"small",onClick:a=>{a.stopPropagation(),s(a.currentTarget)},color:a.folder?"primary":"default",children:(0,d.jsx)(cZ.A,{fontSize:"small"})})}),(0,d.jsx)(m.A,{title:"Delete flow",children:(0,d.jsx)(l.A,{size:"small",onClick:b=>{b.stopPropagation(),f(a.id)},color:"error",children:(0,d.jsx)(W.A,{fontSize:"small"})})})]}),n&&(0,d.jsx)(c$.A,{anchorEl:r,open:!!r,currentFolder:a.folder,folders:o,onClose:()=>s(null),onAssign:b=>n(a.id,b)})]})};var c4=c(59737),c5=c(7329);let c6=(0,C.h)("components/Flow/FlowDashboard/FlowDashboard");function c7(a,b){return a+Math.round(255*b).toString(16).padStart(2,"0")}let c8=({flows:a,selectedFlow:b,onSelectFlow:c,onDeleteFlow:f,onCopyFlow:k,onEditFlow:m,onCreateFlow:n,onSetFolder:o,isLoading:p=!1})=>{let[q,r]=(0,e.useState)(""),[s,u]=(0,e.useState)("name-asc"),[v,w]=(0,e.useState)("grid"),[y,z]=(0,e.useState)(null),[C,D]=(0,e.useState)("none"),[E,F]=(0,e.useState)(null),[G,H]=(0,e.useState)(new Set),[I,J]=(0,e.useState)({});(0,e.useEffect)(()=>{let a=!1;return(async()=>{let b={};try{let a=await fetch("/api/model");if(a.ok){let c=await a.json();Array.isArray(c)&&(b.models=c)}}catch(a){c6.warn("Could not load models for flow badges",a)}try{let a=await fetch("/api/mcp/servers");if(a.ok){let c=await a.json();Array.isArray(c)&&(b.servers=c.map(a=>({name:a.name,status:a.disabled?"disabled":void 0})))}}catch(a){c6.warn("Could not load servers for flow badges",a)}a||J(b)})(),()=>{a=!0}},[]);let K=(0,e.useMemo)(()=>{let b={};for(let c of a)try{b[c.id]=aQ(c,I)}catch(a){c6.warn("Failed to validate flow for badge",{flowId:c.id,error:a})}return b},[a,I]),L=(0,g.A)(),M=cF(L.breakpoints.down("sm")),N=cF(L.breakpoints.down("md")),O=()=>{z(null)},P=a=>{u(a),O()},Q=a=>{D(a),F(null)},R=(0,e.useMemo)(()=>{c6.debug("Filtering and sorting flows",{searchTerm:q,sortOption:s});let b=a;if(""!==q.trim()){let c=q.toLowerCase();b=a.filter(a=>a.name.toLowerCase().includes(c))}return[...b].sort((a,b)=>{switch(s){case"name-asc":return a.name.localeCompare(b.name);case"name-desc":return b.name.localeCompare(a.name);case"most-nodes":return b.nodes.length-a.nodes.length;case"least-nodes":return a.nodes.length-b.nodes.length;case"newest":return b.id.localeCompare(a.id);case"oldest":return a.id.localeCompare(b.id);default:return 0}})},[a,q,s]),W=(0,e.useMemo)(()=>(0,c5.yF)(a,a=>a.folder),[a]),X=(0,e.useMemo)(()=>"folder"===C?(0,c5.Je)(R,a=>a.folder):"sort"===C?(0,c5.Az)(R,a=>(function(a,b){switch(b){case"name-asc":case"name-desc":return(0,c5.po)(a.name);case"most-nodes":case"least-nodes":var c;return 0===(c=a.nodes.length)?{key:"nodes:0",label:"0 nodes"}:c<=2?{key:"nodes:1-2",label:"1–2 nodes"}:c<=5?{key:"nodes:3-5",label:"3–5 nodes"}:c<=10?{key:"nodes:6-10",label:"6–10 nodes"}:{key:"nodes:11+",label:"11+ nodes"};default:return{key:"all",label:"All flows"}}})(a,s)):[],[C,R,s]),Y=a=>(0,d.jsx)(aU.Ay,{container:!0,spacing:2,children:a.map(a=>(0,d.jsx)(aU.Ay,{item:!0,xs:12,sm:"compact"===v?12:6,md:"compact"===v?12:3==("compact"===v||M?1:N?2:3)?4:6,children:(0,d.jsx)(c3,{flow:a,selected:b===a.id,onSelect:c,onDelete:f,onCopy:k,onEdit:m,onSetFolder:o,folders:W,validation:K[a.id]})},a.id))});return(0,d.jsxs)(h.default,{sx:{height:"100%",display:"flex",flexDirection:"column",overflow:"hidden"},children:[(0,d.jsx)(A.A,{elevation:1,sx:{mb:2,p:1},children:(0,d.jsxs)(h.default,{sx:{display:"flex",flexDirection:{xs:"column",sm:"row"},gap:1,alignItems:{xs:"stretch",sm:"center"},justifyContent:"space-between"},children:[(0,d.jsx)(t.A,{placeholder:"Search flows...",variant:"outlined",size:"small",fullWidth:!0,value:q,onChange:a=>{r(a.target.value)},InputProps:{startAdornment:(0,d.jsx)(bO.A,{position:"start",children:(0,d.jsx)(bT.A,{fontSize:"small"})})},sx:{maxWidth:{sm:300}}}),(0,d.jsxs)(h.default,{sx:{display:"flex",gap:1,alignItems:"center"},children:[(0,d.jsxs)(h.default,{sx:{display:"flex",backgroundColor:L.palette.background.default,borderRadius:1,border:`1px solid ${L.palette.divider}`,overflow:"hidden"},children:[(0,d.jsx)(l.A,{size:"small",onClick:()=>w("grid"),color:"grid"===v?"primary":"default",sx:{borderRadius:0,backgroundColor:"grid"===v?c7(L.palette.primary.main,.1):"transparent"},children:(0,d.jsx)(cJ,{fontSize:"small"})}),(0,d.jsx)(l.A,{size:"small",onClick:()=>w("compact"),color:"compact"===v?"primary":"default",sx:{borderRadius:0,backgroundColor:"compact"===v?c7(L.palette.primary.main,.1):"transparent"},children:(0,d.jsx)(cI,{fontSize:"small"})})]}),(0,d.jsx)(l.A,{size:"small",onClick:a=>F(a.currentTarget),color:"none"!==C?"primary":"default",sx:{border:`1px solid ${L.palette.divider}`,backgroundColor:L.palette.background.default},title:"Group cards",children:(0,d.jsx)(cM.A,{fontSize:"small"})}),(0,d.jsx)(l.A,{size:"small",onClick:a=>{z(a.currentTarget)},sx:{border:`1px solid ${L.palette.divider}`,backgroundColor:L.palette.background.default},children:(0,d.jsx)(cG.A,{fontSize:"small"})})]})]})}),(0,d.jsxs)(h.default,{sx:{display:"flex",justifyContent:"space-between",mb:2,px:1},children:[(0,d.jsxs)(i.default,{variant:"body2",color:"textSecondary",children:[R.length," of ",a.length," flows",q&&` matching "${q}"`]}),(0,d.jsxs)(i.default,{variant:"body2",color:"textSecondary",children:["Sorted by: ","name-asc"===s?"Name (A-Z)":"name-desc"===s?"Name (Z-A)":"newest"===s?"Newest first":"oldest"===s?"Oldest first":"most-nodes"===s?"Most nodes":"Least nodes"]})]}),(0,d.jsx)(h.default,{sx:{flex:1,overflow:"auto",px:1,pb:2},children:p?(0,d.jsx)(aU.Ay,{container:!0,spacing:2,children:Array(6).fill(0).map((a,b)=>(0,d.jsx)(aU.Ay,{item:!0,xs:12,sm:"compact"===v?12:6,md:"compact"===v?12:4,children:(0,d.jsx)(c2,{})},`skeleton-${b}`))}):R.length>0?"none"===C?Y(R):X.map(a=>(0,d.jsx)(c4.A,{label:a.label,count:a.items.length,expanded:!G.has(a.key),onToggle:()=>(a=>{H(b=>{let c=new Set(b);return c.has(a)?c.delete(a):c.add(a),c})})(a.key),showFolderIcon:"folder"===C,children:Y(a.items)},a.key)):(0,d.jsxs)(h.default,{sx:{display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",p:4,backgroundColor:L.palette.background.paper,borderRadius:1,border:`1px dashed ${L.palette.divider}`,height:"100%",minHeight:200},children:[(0,d.jsx)(i.default,{variant:"h6",gutterBottom:!0,color:"textSecondary",children:"No flows found"}),q?(0,d.jsxs)(i.default,{variant:"body2",color:"textSecondary",align:"center",children:["No flows match your search criteria.",(0,d.jsxs)(h.default,{component:"span",display:"block",mt:1,children:["Try a different search term or ",(0,d.jsx)(j.A,{size:"small",onClick:()=>r(""),children:"clear the search"})]})]}):(0,d.jsxs)(i.default,{variant:"body2",color:"textSecondary",align:"center",children:["Get started by creating your first flow.",n&&(0,d.jsx)(h.default,{component:"span",display:"block",mt:2,children:(0,d.jsx)(j.A,{variant:"contained",color:"primary",startIcon:(0,d.jsx)(x.A,{}),onClick:n,children:"Create New Flow"})})]})]})}),(0,d.jsxs)(V.A,{anchorEl:E,open:!!E,onClose:()=>F(null),anchorOrigin:{vertical:"bottom",horizontal:"right"},transformOrigin:{vertical:"top",horizontal:"right"},children:[(0,d.jsxs)(S.A,{selected:"none"===C,onClick:()=>Q("none"),children:[(0,d.jsx)(T.A,{children:(0,d.jsx)(cN.A,{fontSize:"small"})}),(0,d.jsx)(U.A,{primary:"No grouping"})]}),(0,d.jsxs)(S.A,{selected:"folder"===C,onClick:()=>Q("folder"),children:[(0,d.jsx)(T.A,{children:(0,d.jsx)(cO.A,{fontSize:"small"})}),(0,d.jsx)(U.A,{primary:"By folder"})]}),(0,d.jsxs)(S.A,{selected:"sort"===C,onClick:()=>Q("sort"),children:[(0,d.jsx)(T.A,{children:(0,d.jsx)(cM.A,{fontSize:"small"})}),(0,d.jsx)(U.A,{primary:"By sort setting"})]})]}),(0,d.jsxs)(V.A,{anchorEl:y,open:!!y,onClose:O,anchorOrigin:{vertical:"bottom",horizontal:"right"},transformOrigin:{vertical:"top",horizontal:"right"},children:[(0,d.jsxs)(S.A,{onClick:()=>P("name-asc"),children:[(0,d.jsx)(T.A,{children:(0,d.jsx)(cK.A,{fontSize:"small"})}),(0,d.jsx)(U.A,{primary:"Name (A-Z)"})]}),(0,d.jsxs)(S.A,{onClick:()=>P("name-desc"),children:[(0,d.jsx)(T.A,{children:(0,d.jsx)(cK.A,{fontSize:"small",sx:{transform:"scaleX(-1)"}})}),(0,d.jsx)(U.A,{primary:"Name (Z-A)"})]}),(0,d.jsx)(B.A,{}),(0,d.jsxs)(S.A,{onClick:()=>P("newest"),children:[(0,d.jsx)(T.A,{children:(0,d.jsx)(cL,{fontSize:"small"})}),(0,d.jsx)(U.A,{primary:"Newest first"})]}),(0,d.jsxs)(S.A,{onClick:()=>P("oldest"),children:[(0,d.jsx)(T.A,{children:(0,d.jsx)(cL,{fontSize:"small",sx:{transform:"scaleX(-1)"}})}),(0,d.jsx)(U.A,{primary:"Oldest first"})]}),(0,d.jsx)(B.A,{}),(0,d.jsxs)(S.A,{onClick:()=>P("most-nodes"),children:[(0,d.jsx)(T.A,{children:(0,d.jsx)(cH,{fontSize:"small"})}),(0,d.jsx)(U.A,{primary:"Most nodes"})]}),(0,d.jsxs)(S.A,{onClick:()=>P("least-nodes"),children:[(0,d.jsx)(T.A,{children:(0,d.jsx)(cH,{fontSize:"small",sx:{transform:"scaleY(-1)"}})}),(0,d.jsx)(U.A,{primary:"Least nodes"})]})]})]})},c9=(0,C.h)("app/flows/page"),da=()=>{c9.debug("Rendering FlowsPage"),(0,g.A)();let[a,b]=(0,e.useState)([]),[c,f]=(0,e.useState)(null),[v,z]=(0,e.useState)(!0),[A,B]=(0,e.useState)(!1),C=(0,e.useRef)(null),[D,G]=(0,e.useState)(null),[H,I]=(0,e.useState)(!1),[J,K]=(0,e.useState)(!1),[L,M]=(0,e.useState)(null),[N,O]=(0,e.useState)(""),[P,Q]=(0,e.useState)(null),[R,S]=(0,e.useState)({open:!1,message:"",severity:"info"});(0,e.useEffect)(()=>{c9.info("Loading flows"),(async()=>{z(!0);try{let a=await F.g.loadFlows();c9.debug("Flows loaded successfully",{count:a.length}),b(a),c&&(a.some(a=>a.id===c)||D?.id===c||(c9.warn("Previously selected flow no longer exists",{flowId:c}),f(null),B(!1),U("The previously selected flow is no longer available","warning")))}catch(a){c9.error("Error loading flows",a),U("Failed to load flows","error")}finally{z(!1)}})()},[c,D]);let T=(0,e.useCallback)(a=>{c9.debug("Flow selected",{flowId:a}),f(a),B(!0)},[]);(0,e.useEffect)(()=>{if(!(A&&c))return;let a=a=>{C.current?C.current.requestNavigation(a):a()};return cz=a,()=>{cz===a&&(cz=null)}},[A,c]);let U=(0,e.useCallback)((a,b="info")=>{c9.debug("Showing snackbar",{message:a,severity:b}),S({open:!0,message:a,severity:b})},[]),V=(0,e.useCallback)(()=>{c9.debug("Returning to dashboard");let a=()=>{B(!1),D&&D.id===c&&(G(null),f(null),U("Generated draft discarded","info"))};C.current?C.current.requestNavigation(a):a()},[D,c,U]),W=(0,e.useCallback)(()=>{S(a=>({...a,open:!1}))},[]);(0,e.useEffect)(()=>{if(!R.open||"error"===R.severity)return;let a=setTimeout(()=>{S(a=>({...a,open:!1}))},6e3);return()=>clearTimeout(a)},[R.open,R.message,R.severity]);let X=(0,e.useCallback)(b=>(c9.debug("Validating flow name",{name:b}),b.trim())?/^[\w-]+$/.test(b)?a.some(a=>a.name.toLowerCase()===b.toLowerCase())?(c9.debug("Flow name validation failed: duplicate name"),"A flow with this name already exists"):(c9.debug("Flow name validation passed"),null):(c9.debug("Flow name validation failed: invalid characters"),"Flow name can only contain letters, numbers, underscores, and dashes"):(c9.debug("Flow name validation failed: empty name"),"Flow name cannot be empty"),[a]),Y=async c=>{c9.info("Saving flow",{flowId:c.id,flowName:c.name});try{let d=a.some(a=>a.id===c.id)?await F.g.updateFlow(c):await F.g.addFlow(c);if(!d.success){c9.error("Failed to save flow",{error:d.error}),U(d.error||"Failed to save flow","error");return}c9.debug("Flow saved successfully"),b(a=>{let b=a.findIndex(a=>a.id===c.id);if(!(b>=0))return c9.debug("Adding new flow to state"),[...a,c];{c9.debug("Updating existing flow in state");let d=[...a];return d[b]=c,d}}),D?.id===c.id&&G(null),f(c.id),U("Flow saved successfully","success")}catch(a){c9.error("Error saving flow",a),U("Failed to save flow","error")}},Z=async a=>{c9.info("Deleting flow",{flowId:a});try{await F.g.deleteFlow(a),c9.debug("Flow deleted successfully"),b(b=>b.filter(b=>b.id!==a)),c===a&&(c9.debug("Clearing selected flow as it was deleted"),f(null),B(!1)),U("Flow deleted","success")}catch(a){c9.error("Error deleting flow",a),U("Failed to delete flow","error")}},$=(0,e.useCallback)(async(c,d)=>{c9.info("Setting flow folder",{flowId:c,folder:d});let e=a.find(a=>a.id===c);if(!e)return void c9.warn("Flow to move not found",{flowId:c});let f={...e,folder:d&&d.trim()?d.trim():void 0};try{let a=await F.g.updateFlow(f);if(!a.success)return void U(a.error||"Failed to move flow to folder","error");b(a=>a.map(a=>a.id===c?f:a)),U(f.folder?`Moved to "${f.folder}"`:"Removed from folder","success")}catch(a){c9.error("Error setting flow folder",a),U("Failed to move flow to folder","error")}},[a,U]),_=b=>{c9.info("Copying flow",{flowId:b});let c=a.find(a=>a.id===b);c?(c9.debug("Found flow to copy",{flowName:c.name}),M(c),O(`${c.name}_copy`),K(!0)):(c9.warn("Flow to copy not found",{flowId:b}),U("Flow not found","error"))},aa=()=>{c9.debug("Closing copy flow dialog"),K(!1),M(null),O(""),Q(null)},ab=async()=>{if(c9.info("Confirming flow copy"),!L){c9.warn("No flow to copy"),U("No flow selected to copy","error");return}let a=X(N);if(a){c9.debug("Flow name validation failed",{error:a}),Q(a);return}let b=(0,E.A)();c9.debug("Creating new flow from copy",{newId:b,newName:N});let c={id:b,name:N,description:L.description,nodes:L.nodes,edges:L.edges};await Y(c),aa(),c9.debug("Selecting newly copied flow"),f(c.id),B(!0),U(`Created a copy named "${N}"`,"success")},ac=(0,e.useCallback)(a=>{c9.info("Opening generated draft flow",{flowId:a.flow.id,attempts:a.attempts,errors:a.errorCount,warnings:a.warningCount}),I(!1),G(a.flow),f(a.flow.id),B(!0);let b=a.installedServers?.filter(a=>!a.alreadyExisted)??[],c=b.length>0?` Installed MCP server(s): ${b.map(a=>a.name).join(", ")}.`:"";a.errorCount>0?U(`Draft generated with ${a.errorCount} error(s) and ${a.warningCount} warning(s) — use the Check button, fix, then save.${c}`,"warning"):a.warningCount>0?U(`Draft generated with ${a.warningCount} warning(s) — review, then save to keep it.${c}`,"info"):U(`Flow drafted — review it and save to keep it.${c}`,"success")},[U]),ad=async()=>{c9.info("Creating new flow");let b="NewFlow",c=b,d=1;for(;a.some(a=>a.name===c);)c=`${b}${d}`,d++;let e=F.g.createNewFlow(c);await Y(e),B(!0),U("New flow created","success")};return(0,d.jsxs)(h.default,{sx:{height:"100%",display:"flex",flexDirection:"column"},children:[(0,d.jsxs)(h.default,{sx:{p:2,display:"flex",justifyContent:"space-between",alignItems:"center",borderBottom:1,borderColor:"divider"},children:[(0,d.jsxs)(h.default,{sx:{display:"flex",alignItems:"center"},children:[A&&c&&(0,d.jsx)(l.A,{color:"primary",onClick:V,sx:{mr:1},children:(0,d.jsx)(w,{})}),(0,d.jsx)(h.default,{children:(0,d.jsx)(i.default,{variant:"h5",children:A&&c?D?.id===c?`Editing: ${D.name} (unsaved draft)`:`Editing: ${a.find(a=>a.id===c)?.name||"Flow"}`:"Flow Dashboard"})})]}),!A&&(0,d.jsxs)(h.default,{sx:{display:"flex",gap:1},children:[(0,d.jsx)(m.A,{title:"Describe a flow in plain language and let a model draft it",children:(0,d.jsx)(j.A,{variant:"outlined",color:"primary",startIcon:(0,d.jsx)(y,{}),onClick:()=>I(!0),"data-tour":"generate-flow",children:"Generate Flow"})}),(0,d.jsx)(m.A,{title:"Create a new flow with a starter template",children:(0,d.jsx)(j.A,{variant:"contained",color:"primary",startIcon:(0,d.jsx)(x.A,{}),onClick:ad,"data-tour":"new-flow",children:"New Flow"})})]})]}),(0,d.jsx)(n.A,{in:R.open,unmountOnExit:!0,children:(0,d.jsx)(o.A,{severity:R.severity,onClose:W,sx:{borderRadius:0},children:R.message})}),(0,d.jsx)(h.default,{sx:{flex:1,overflow:"hidden"},children:(()=>{if(A&&c){let b=a.find(a=>a.id===c)??(D?.id===c?D:void 0);return b?(0,d.jsx)(k.A,{in:!0,timeout:300,children:(0,d.jsx)(h.default,{sx:{height:"100%"},children:(0,d.jsx)(cv,{ref:C,initialFlow:b,onSave:Y,onDelete:Z,allFlows:a},c)})}):(0,d.jsxs)(h.default,{sx:{p:4,textAlign:"center"},children:[(0,d.jsx)(i.default,{variant:"h6",color:"error",children:"Selected flow not found"}),(0,d.jsx)(j.A,{variant:"contained",onClick:V,sx:{mt:2},children:"Back to Dashboard"})]})}return(0,d.jsx)(k.A,{in:!0,timeout:300,children:(0,d.jsx)(h.default,{sx:{height:"100%"},children:(0,d.jsx)(c8,{flows:a,selectedFlow:c,onSelectFlow:T,onDeleteFlow:Z,onCopyFlow:_,onCreateFlow:ad,onSetFolder:$,isLoading:v})})})})()}),(0,d.jsxs)(p.A,{open:J,onClose:aa,children:[(0,d.jsx)(q.A,{children:"Copy Flow"}),(0,d.jsxs)(r.A,{children:[(0,d.jsx)(s.A,{children:"Enter a name for the copied flow:"}),(0,d.jsx)(t.A,{autoFocus:!0,margin:"dense",label:"Flow Name",type:"text",fullWidth:!0,value:N,onChange:a=>{let b=a.target.value;c9.debug("Flow name changed",{name:b}),O(b),Q(X(b))},error:!!P,helperText:P})]}),(0,d.jsxs)(u.A,{children:[(0,d.jsx)(j.A,{onClick:aa,children:"Cancel"}),(0,d.jsx)(j.A,{onClick:ab,variant:"contained",color:"primary",disabled:!!P,children:"Copy"})]})]}),(0,d.jsx)(cy,{open:H,onClose:()=>I(!1),onGenerated:ac})]})}},19121:a=>{"use strict";a.exports=require("next/dist/server/app-render/action-async-storage.external.js")},25525:(a,b,c)=>{Promise.resolve().then(c.bind(c,13790))},26713:a=>{"use strict";a.exports=require("next/dist/shared/lib/router/utils/is-bot")},28354:a=>{"use strict";a.exports=require("util")},29294:a=>{"use strict";a.exports=require("next/dist/server/app-render/work-async-storage.external.js")},33873:a=>{"use strict";a.exports=require("path")},41025:a=>{"use strict";a.exports=require("next/dist/server/app-render/dynamic-access-async-storage.external.js")},53773:(a,b,c)=>{"use strict";c.d(b,{A:()=>v});var d=c(38301),e=c(43249),f=c(3253),g=c(33105),h=c(2783),i=c(38435),j=c(30583),k=c(69467),l=c(49103),m=c(80751),n=c(49939),o=c(21124);let p=(0,l.A)(),q=(0,i.A)("div",{name:"MuiStack",slot:"Root",overridesResolver:(a,b)=>b.root});function r(a){return(0,j.A)({props:a,name:"MuiStack",defaultTheme:p})}let s=({ownerState:a,theme:b})=>{let c={display:"flex",flexDirection:"column",...(0,m.NI)({theme:b},(0,m.kW)({values:a.direction,breakpoints:b.breakpoints.values}),a=>({flexDirection:a}))};if(a.spacing){let d=(0,n.LX)(b),e=Object.keys(b.breakpoints.values).reduce((b,c)=>(("object"==typeof a.spacing&&null!=a.spacing[c]||"object"==typeof a.direction&&null!=a.direction[c])&&(b[c]=!0),b),{}),g=(0,m.kW)({values:a.direction,base:e}),h=(0,m.kW)({values:a.spacing,base:e});"object"==typeof g&&Object.keys(g).forEach((a,b,c)=>{if(!g[a]){let d=b>0?g[c[b-1]]:"column";g[a]=d}}),c=(0,f.A)(c,(0,m.NI)({theme:b},h,(b,c)=>a.useFlexGap?{gap:(0,n._W)(d,b)}:{"& > :not(style):not(style)":{margin:0},"& > :not(style) ~ :not(style)":{[`margin${({row:"Left","row-reverse":"Right",column:"Top","column-reverse":"Bottom"})[c?g[c]:a.direction]}`]:(0,n._W)(d,b)}}))}return(0,m.iZ)(b.breakpoints,c)};var t=c(18168),u=c(6636);let v=function(a={}){let{createStyledComponent:b=q,useThemeProps:c=r,componentName:f="MuiStack"}=a,i=b(s);return d.forwardRef(function(a,b){let j=c(a),{component:l="div",direction:m="column",spacing:n=0,divider:p,children:q,className:r,useFlexGap:s=!1,...t}=(0,k.A)(j),u=(0,h.A)({root:["root"]},a=>(0,g.Ay)(f,a),{});return(0,o.jsx)(i,{as:l,ownerState:{direction:m,spacing:n,useFlexGap:s},ref:b,className:(0,e.A)(u.root,r),...t,children:p?function(a,b){let c=d.Children.toArray(a).filter(Boolean);return c.reduce((a,e,f)=>(a.push(e),f<c.length-1&&a.push(d.cloneElement(b,{key:`separator-${f}`})),a),[])}(q,p):q})})}({createStyledComponent:(0,t.Ay)("div",{name:"MuiStack",slot:"Root",overridesResolver:(a,b)=>b.root}),useThemeProps:a=>(0,u.b)({props:a,name:"MuiStack"})})},55511:a=>{"use strict";a.exports=require("crypto")},63033:a=>{"use strict";a.exports=require("next/dist/server/app-render/work-unit-async-storage.external.js")},67317:(a,b,c)=>{Promise.resolve().then(c.bind(c,10057))},73520:(a,b,c)=>{"use strict";c.d(b,{A:()=>p});var d=c(38301),e=c(43249),f=c(2783),g=c(18168),h=c(6636),i=c(29565),j=c(33105);function k(a){return(0,j.Ay)("MuiFormGroup",a)}(0,i.A)("MuiFormGroup",["root","row","error"]);var l=c(49628),m=c(83738),n=c(21124);let o=(0,g.Ay)("div",{name:"MuiFormGroup",slot:"Root",overridesResolver:(a,b)=>{let{ownerState:c}=a;return[b.root,c.row&&b.row]}})({display:"flex",flexDirection:"column",flexWrap:"wrap",variants:[{props:{row:!0},style:{flexDirection:"row"}}]}),p=d.forwardRef(function(a,b){let c=(0,h.b)({props:a,name:"MuiFormGroup"}),{className:d,row:g=!1,...i}=c,j=(0,l.A)(),p=(0,m.A)({props:c,muiFormControl:j,states:["error"]}),q={...c,row:g,error:p.error},r=(a=>{let{classes:b,row:c,error:d}=a;return(0,f.A)({root:["root",c&&"row",d&&"error"]},k,b)})(q);return(0,n.jsx)(o,{className:(0,e.A)(r.root,d),ownerState:q,ref:b,...i})})},76052:(a,b,c)=>{"use strict";c.r(b),c.d(b,{GlobalError:()=>E.a,__next_app__:()=>K,handler:()=>M,pages:()=>J,routeModule:()=>L,tree:()=>I});var d=c(49754),e=c(9117),f=c(46595),g=c(32324),h=c(39326),i=c(38928),j=c(20175),k=c(12),l=c(54290),m=c(12696),n=c(52574),o=c(82802),p=c(77533),q=c(45229),r=c(32822),s=c(261),t=c(26453),u=c(52474),v=c(26713),w=c(51356),x=c(62685),y=c(36225),z=c(63446),A=c(2762),B=c(45742),C=c(86439),D=c(81170),E=c.n(D),F=c(62506),G=c(91203),H={};for(let a in F)0>["default","tree","pages","GlobalError","__next_app__","routeModule","handler"].indexOf(a)&&(H[a]=()=>F[a]);c.d(b,H);let I={children:["",{children:["flows",{children:["__PAGE__",{},{page:[()=>Promise.resolve().then(c.bind(c,10057)),"C:\\Users\\MarioAndreschak\\Documents\\GitHub\\FLUJO\\src\\app\\flows\\page.tsx"]}]},{}]},{layout:[()=>Promise.resolve().then(c.bind(c,51472)),"C:\\Users\\MarioAndreschak\\Documents\\GitHub\\FLUJO\\src\\app\\layout.tsx"],"global-error":[()=>Promise.resolve().then(c.t.bind(c,81170,23)),"next/dist/client/components/builtin/global-error.js"],"not-found":[()=>Promise.resolve().then(c.t.bind(c,87028,23)),"next/dist/client/components/builtin/not-found.js"],forbidden:[()=>Promise.resolve().then(c.t.bind(c,90461,23)),"next/dist/client/components/builtin/forbidden.js"],unauthorized:[()=>Promise.resolve().then(c.t.bind(c,32768,23)),"next/dist/client/components/builtin/unauthorized.js"]}]}.children,J=["C:\\Users\\MarioAndreschak\\Documents\\GitHub\\FLUJO\\src\\app\\flows\\page.tsx"],K={require:c,loadChunk:()=>Promise.resolve()},L=new d.AppPageRouteModule({definition:{kind:e.RouteKind.APP_PAGE,page:"/flows/page",pathname:"/flows",bundlePath:"",filename:"",appPaths:[]},userland:{loaderTree:I},distDir:".next",relativeProjectDir:""});async function M(a,b,d){var D;let H="/flows/page";"/index"===H&&(H="/");let N=(0,h.getRequestMeta)(a,"postponed"),O=(0,h.getRequestMeta)(a,"minimalMode"),P=await L.prepare(a,b,{srcPage:H,multiZoneDraftMode:!1});if(!P)return b.statusCode=400,b.end("Bad Request"),null==d.waitUntil||d.waitUntil.call(d,Promise.resolve()),null;let{buildId:Q,query:R,params:S,parsedUrl:T,pageIsDynamic:U,buildManifest:V,nextFontManifest:W,reactLoadableManifest:X,serverActionsManifest:Y,clientReferenceManifest:Z,subresourceIntegrityManifest:$,prerenderManifest:_,isDraftMode:aa,resolvedPathname:ab,revalidateOnlyGenerated:ac,routerServerContext:ad,nextConfig:ae,interceptionRoutePatterns:af}=P,ag=T.pathname||"/",ah=(0,s.normalizeAppPath)(H),{isOnDemandRevalidate:ai}=P,aj=L.match(ag,_),ak=!!_.routes[ab],al=!!(aj||ak||_.routes[ah]),am=a.headers["user-agent"]||"",an=(0,v.getBotType)(am),ao=(0,q.isHtmlBotRequest)(a),ap=(0,h.getRequestMeta)(a,"isPrefetchRSCRequest")??"1"===a.headers[u.NEXT_ROUTER_PREFETCH_HEADER],aq=(0,h.getRequestMeta)(a,"isRSCRequest")??(0,n.f)(a.headers[u.RSC_HEADER]),ar=(0,t.getIsPossibleServerAction)(a),as=(0,m.checkIsAppPPREnabled)(ae.experimental.ppr)&&(null==(D=_.routes[ah]??_.dynamicRoutes[ah])?void 0:D.renderingMode)==="PARTIALLY_STATIC",at=!1,au=!1,av=as?N:void 0,aw=as&&aq&&!ap,ax=(0,h.getRequestMeta)(a,"segmentPrefetchRSCRequest"),ay=!am||(0,q.shouldServeStreamingMetadata)(am,ae.htmlLimitedBots);ao&&as&&(al=!1,ay=!1);let az=!0===L.isDev||!al||"string"==typeof N||aw,aA=ao&&as,aB=null;aa||!al||az||ar||av||aw||(aB=ab);let aC=aB;!aC&&L.isDev&&(aC=ab),L.isDev||aa||!al||!aq||aw||(0,k.d)(a.headers);let aD={...F,tree:I,pages:J,GlobalError:E(),handler:M,routeModule:L,__next_app__:K};Y&&Z&&(0,p.setReferenceManifestsSingleton)({page:H,clientReferenceManifest:Z,serverActionsManifest:Y,serverModuleMap:(0,r.createServerModuleMap)({serverActionsManifest:Y})});let aE=a.method||"GET",aF=(0,g.getTracer)(),aG=aF.getActiveScopeSpan();try{let f=L.getVaryHeader(ab,af);b.setHeader("Vary",f);let k=async(c,d)=>{let e=new l.NodeNextRequest(a),f=new l.NodeNextResponse(b);return L.render(e,f,d).finally(()=>{if(!c)return;c.setAttributes({"http.status_code":b.statusCode,"next.rsc":!1});let d=aF.getRootSpanAttributes();if(!d)return;if(d.get("next.span_type")!==i.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${d.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let e=d.get("next.route");if(e){let a=`${aE} ${e}`;c.setAttributes({"next.route":e,"http.route":e,"next.span_name":a}),c.updateName(a)}else c.updateName(`${aE} ${a.url}`)})},m=async({span:e,postponed:f,fallbackRouteParams:g})=>{let i={query:R,params:S,page:ah,sharedContext:{buildId:Q},serverComponentsHmrCache:(0,h.getRequestMeta)(a,"serverComponentsHmrCache"),fallbackRouteParams:g,renderOpts:{App:()=>null,Document:()=>null,pageConfig:{},ComponentMod:aD,Component:(0,j.T)(aD),params:S,routeModule:L,page:H,postponed:f,shouldWaitOnAllReady:aA,serveStreamingMetadata:ay,supportsDynamicResponse:"string"==typeof f||az,buildManifest:V,nextFontManifest:W,reactLoadableManifest:X,subresourceIntegrityManifest:$,serverActionsManifest:Y,clientReferenceManifest:Z,setIsrStatus:null==ad?void 0:ad.setIsrStatus,dir:c(33873).join(process.cwd(),L.relativeProjectDir),isDraftMode:aa,isRevalidate:al&&!f&&!aw,botType:an,isOnDemandRevalidate:ai,isPossibleServerAction:ar,assetPrefix:ae.assetPrefix,nextConfigOutput:ae.output,crossOrigin:ae.crossOrigin,trailingSlash:ae.trailingSlash,previewProps:_.preview,deploymentId:ae.deploymentId,enableTainting:ae.experimental.taint,htmlLimitedBots:ae.htmlLimitedBots,devtoolSegmentExplorer:ae.experimental.devtoolSegmentExplorer,reactMaxHeadersLength:ae.reactMaxHeadersLength,multiZoneDraftMode:!1,incrementalCache:(0,h.getRequestMeta)(a,"incrementalCache"),cacheLifeProfiles:ae.experimental.cacheLife,basePath:ae.basePath,serverActions:ae.experimental.serverActions,...at?{nextExport:!0,supportsDynamicResponse:!1,isStaticGeneration:!0,isRevalidate:!0,isDebugDynamicAccesses:at}:{},experimental:{isRoutePPREnabled:as,expireTime:ae.expireTime,staleTimes:ae.experimental.staleTimes,cacheComponents:!!ae.experimental.cacheComponents,clientSegmentCache:!!ae.experimental.clientSegmentCache,clientParamParsing:!!ae.experimental.clientParamParsing,dynamicOnHover:!!ae.experimental.dynamicOnHover,inlineCss:!!ae.experimental.inlineCss,authInterrupts:!!ae.experimental.authInterrupts,clientTraceMetadata:ae.experimental.clientTraceMetadata||[]},waitUntil:d.waitUntil,onClose:a=>{b.on("close",a)},onAfterTaskError:()=>{},onInstrumentationRequestError:(b,c,d)=>L.onRequestError(a,b,d,ad),err:(0,h.getRequestMeta)(a,"invokeError"),dev:L.isDev}},l=await k(e,i),{metadata:m}=l,{cacheControl:n,headers:o={},fetchTags:p}=m;if(p&&(o[z.NEXT_CACHE_TAGS_HEADER]=p),a.fetchMetrics=m.fetchMetrics,al&&(null==n?void 0:n.revalidate)===0&&!L.isDev&&!as){let a=m.staticBailoutInfo,b=Object.defineProperty(Error(`Page changed from static to dynamic at runtime ${ab}${(null==a?void 0:a.description)?`, reason: ${a.description}`:""}
40
+ see more here https://nextjs.org/docs/messages/app-static-to-dynamic-error`),"__NEXT_ERROR_CODE",{value:"E132",enumerable:!1,configurable:!0});if(null==a?void 0:a.stack){let c=a.stack;b.stack=b.message+c.substring(c.indexOf("\n"))}throw b}return{value:{kind:w.CachedRouteKind.APP_PAGE,html:l,headers:o,rscData:m.flightData,postponed:m.postponed,status:m.statusCode,segmentData:m.segmentData},cacheControl:n}},n=async({hasResolved:c,previousCacheEntry:f,isRevalidating:g,span:i})=>{let j,k=!1===L.isDev,l=c||b.writableEnded;if(ai&&ac&&!f&&!O)return(null==ad?void 0:ad.render404)?await ad.render404(a,b):(b.statusCode=404,b.end("This page could not be found")),null;if(aj&&(j=(0,x.parseFallbackField)(aj.fallback)),j===x.FallbackMode.PRERENDER&&(0,v.isBot)(am)&&(!as||ao)&&(j=x.FallbackMode.BLOCKING_STATIC_RENDER),(null==f?void 0:f.isStale)===-1&&(ai=!0),ai&&(j!==x.FallbackMode.NOT_FOUND||f)&&(j=x.FallbackMode.BLOCKING_STATIC_RENDER),!O&&j!==x.FallbackMode.BLOCKING_STATIC_RENDER&&aC&&!l&&!aa&&U&&(k||!ak)){let b;if((k||aj)&&j===x.FallbackMode.NOT_FOUND)throw new C.NoFallbackError;if(as&&!aq){let c="string"==typeof(null==aj?void 0:aj.fallback)?aj.fallback:k?ah:null;if(b=await L.handleResponse({cacheKey:c,req:a,nextConfig:ae,routeKind:e.RouteKind.APP_PAGE,isFallback:!0,prerenderManifest:_,isRoutePPREnabled:as,responseGenerator:async()=>m({span:i,postponed:void 0,fallbackRouteParams:k||au?(0,o.u)(ah):null}),waitUntil:d.waitUntil}),null===b)return null;if(b)return delete b.cacheControl,b}}let n=ai||g||!av?void 0:av;if(at&&void 0!==n)return{cacheControl:{revalidate:1,expire:void 0},value:{kind:w.CachedRouteKind.PAGES,html:y.default.EMPTY,pageData:{},headers:void 0,status:void 0}};let p=U&&as&&((0,h.getRequestMeta)(a,"renderFallbackShell")||au)?(0,o.u)(ag):null;return m({span:i,postponed:n,fallbackRouteParams:p})},p=async c=>{var f,g,i,j,k;let l,o=await L.handleResponse({cacheKey:aB,responseGenerator:a=>n({span:c,...a}),routeKind:e.RouteKind.APP_PAGE,isOnDemandRevalidate:ai,isRoutePPREnabled:as,req:a,nextConfig:ae,prerenderManifest:_,waitUntil:d.waitUntil});if(aa&&b.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate"),L.isDev&&b.setHeader("Cache-Control","no-store, must-revalidate"),!o){if(aB)throw Object.defineProperty(Error("invariant: cache entry required but not generated"),"__NEXT_ERROR_CODE",{value:"E62",enumerable:!1,configurable:!0});return null}if((null==(f=o.value)?void 0:f.kind)!==w.CachedRouteKind.APP_PAGE)throw Object.defineProperty(Error(`Invariant app-page handler received invalid cache entry ${null==(i=o.value)?void 0:i.kind}`),"__NEXT_ERROR_CODE",{value:"E707",enumerable:!1,configurable:!0});let p="string"==typeof o.value.postponed;al&&!aw&&(!p||ap)&&(O||b.setHeader("x-nextjs-cache",ai?"REVALIDATED":o.isMiss?"MISS":o.isStale?"STALE":"HIT"),b.setHeader(u.NEXT_IS_PRERENDER_HEADER,"1"));let{value:q}=o;if(av)l={revalidate:0,expire:void 0};else if(O&&aq&&!ap&&as)l={revalidate:0,expire:void 0};else if(!L.isDev)if(aa)l={revalidate:0,expire:void 0};else if(al){if(o.cacheControl)if("number"==typeof o.cacheControl.revalidate){if(o.cacheControl.revalidate<1)throw Object.defineProperty(Error(`Invalid revalidate configuration provided: ${o.cacheControl.revalidate} < 1`),"__NEXT_ERROR_CODE",{value:"E22",enumerable:!1,configurable:!0});l={revalidate:o.cacheControl.revalidate,expire:(null==(j=o.cacheControl)?void 0:j.expire)??ae.expireTime}}else l={revalidate:z.CACHE_ONE_YEAR,expire:void 0}}else b.getHeader("Cache-Control")||(l={revalidate:0,expire:void 0});if(o.cacheControl=l,"string"==typeof ax&&(null==q?void 0:q.kind)===w.CachedRouteKind.APP_PAGE&&q.segmentData){b.setHeader(u.NEXT_DID_POSTPONE_HEADER,"2");let c=null==(k=q.headers)?void 0:k[z.NEXT_CACHE_TAGS_HEADER];O&&al&&c&&"string"==typeof c&&b.setHeader(z.NEXT_CACHE_TAGS_HEADER,c);let d=q.segmentData.get(ax);return void 0!==d?(0,B.sendRenderResult)({req:a,res:b,generateEtags:ae.generateEtags,poweredByHeader:ae.poweredByHeader,result:y.default.fromStatic(d,u.RSC_CONTENT_TYPE_HEADER),cacheControl:o.cacheControl}):(b.statusCode=204,(0,B.sendRenderResult)({req:a,res:b,generateEtags:ae.generateEtags,poweredByHeader:ae.poweredByHeader,result:y.default.EMPTY,cacheControl:o.cacheControl}))}let r=(0,h.getRequestMeta)(a,"onCacheEntry");if(r&&await r({...o,value:{...o.value,kind:"PAGE"}},{url:(0,h.getRequestMeta)(a,"initURL")}))return null;if(p&&av)throw Object.defineProperty(Error("Invariant: postponed state should not be present on a resume request"),"__NEXT_ERROR_CODE",{value:"E396",enumerable:!1,configurable:!0});if(q.headers){let a={...q.headers};for(let[c,d]of(O&&al||delete a[z.NEXT_CACHE_TAGS_HEADER],Object.entries(a)))if(void 0!==d)if(Array.isArray(d))for(let a of d)b.appendHeader(c,a);else"number"==typeof d&&(d=d.toString()),b.appendHeader(c,d)}let s=null==(g=q.headers)?void 0:g[z.NEXT_CACHE_TAGS_HEADER];if(O&&al&&s&&"string"==typeof s&&b.setHeader(z.NEXT_CACHE_TAGS_HEADER,s),!q.status||aq&&as||(b.statusCode=q.status),!O&&q.status&&G.RedirectStatusCode[q.status]&&aq&&(b.statusCode=200),p&&b.setHeader(u.NEXT_DID_POSTPONE_HEADER,"1"),aq&&!aa){if(void 0===q.rscData){if(q.postponed)throw Object.defineProperty(Error("Invariant: Expected postponed to be undefined"),"__NEXT_ERROR_CODE",{value:"E372",enumerable:!1,configurable:!0});return(0,B.sendRenderResult)({req:a,res:b,generateEtags:ae.generateEtags,poweredByHeader:ae.poweredByHeader,result:q.html,cacheControl:aw?{revalidate:0,expire:void 0}:o.cacheControl})}return(0,B.sendRenderResult)({req:a,res:b,generateEtags:ae.generateEtags,poweredByHeader:ae.poweredByHeader,result:y.default.fromStatic(q.rscData,u.RSC_CONTENT_TYPE_HEADER),cacheControl:o.cacheControl})}let t=q.html;if(!p||O||aq)return(0,B.sendRenderResult)({req:a,res:b,generateEtags:ae.generateEtags,poweredByHeader:ae.poweredByHeader,result:t,cacheControl:o.cacheControl});if(at)return t.push(new ReadableStream({start(a){a.enqueue(A.ENCODED_TAGS.CLOSED.BODY_AND_HTML),a.close()}})),(0,B.sendRenderResult)({req:a,res:b,generateEtags:ae.generateEtags,poweredByHeader:ae.poweredByHeader,result:t,cacheControl:{revalidate:0,expire:void 0}});let v=new TransformStream;return t.push(v.readable),m({span:c,postponed:q.postponed,fallbackRouteParams:null}).then(async a=>{var b,c;if(!a)throw Object.defineProperty(Error("Invariant: expected a result to be returned"),"__NEXT_ERROR_CODE",{value:"E463",enumerable:!1,configurable:!0});if((null==(b=a.value)?void 0:b.kind)!==w.CachedRouteKind.APP_PAGE)throw Object.defineProperty(Error(`Invariant: expected a page response, got ${null==(c=a.value)?void 0:c.kind}`),"__NEXT_ERROR_CODE",{value:"E305",enumerable:!1,configurable:!0});await a.value.html.pipeTo(v.writable)}).catch(a=>{v.writable.abort(a).catch(a=>{console.error("couldn't abort transformer",a)})}),(0,B.sendRenderResult)({req:a,res:b,generateEtags:ae.generateEtags,poweredByHeader:ae.poweredByHeader,result:t,cacheControl:{revalidate:0,expire:void 0}})};if(!aG)return await aF.withPropagatedContext(a.headers,()=>aF.trace(i.BaseServerSpan.handleRequest,{spanName:`${aE} ${a.url}`,kind:g.SpanKind.SERVER,attributes:{"http.method":aE,"http.target":a.url}},p));await p(aG)}catch(b){throw b instanceof C.NoFallbackError||await L.onRequestError(a,b,{routerKind:"App Router",routePath:H,routeType:"render",revalidateReason:(0,f.c)({isRevalidate:al,isOnDemandRevalidate:ai})},ad),b}}},86439:a=>{"use strict";a.exports=require("next/dist/shared/lib/no-fallback-error.external")}};var b=require("../../webpack-runtime.js");b.C(a);var c=b.X(0,[5873,8298,3984,8445,6760,6390,1746,1050,1690,2666,5558,7328,5587,6283,8434,2776,8460,117,9188,5838],()=>b(b.s=76052));module.exports=c})();