flujo-ai 3.9.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 (525) hide show
  1. package/.next/BUILD_ID +1 -0
  2. package/.next/app-build-manifest.json +592 -0
  3. package/.next/app-path-routes-manifest.json +63 -0
  4. package/.next/build-manifest.json +33 -0
  5. package/.next/diagnostics/build-diagnostics.json +6 -0
  6. package/.next/diagnostics/framework.json +1 -0
  7. package/.next/export-marker.json +6 -0
  8. package/.next/images-manifest.json +58 -0
  9. package/.next/next-minimal-server.js.nft.json +1 -0
  10. package/.next/next-server.js.nft.json +1 -0
  11. package/.next/package.json +1 -0
  12. package/.next/prerender-manifest.json +205 -0
  13. package/.next/react-loadable-manifest.json +83 -0
  14. package/.next/required-server-files.json +328 -0
  15. package/.next/routes-manifest.json +305 -0
  16. package/.next/server/app/_not-found/page.js +4 -0
  17. package/.next/server/app/_not-found/page.js.nft.json +1 -0
  18. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -0
  19. package/.next/server/app/_not-found.html +1 -0
  20. package/.next/server/app/_not-found.meta +8 -0
  21. package/.next/server/app/_not-found.rsc +16 -0
  22. package/.next/server/app/api/backup/route.js +2 -0
  23. package/.next/server/app/api/backup/route.js.nft.json +1 -0
  24. package/.next/server/app/api/backup/route_client-reference-manifest.js +1 -0
  25. package/.next/server/app/api/browse/route.js +2 -0
  26. package/.next/server/app/api/browse/route.js.nft.json +1 -0
  27. package/.next/server/app/api/browse/route_client-reference-manifest.js +1 -0
  28. package/.next/server/app/api/cwd/route.js +2 -0
  29. package/.next/server/app/api/cwd/route.js.nft.json +1 -0
  30. package/.next/server/app/api/cwd/route_client-reference-manifest.js +1 -0
  31. package/.next/server/app/api/encryption/secure/route.js +1 -0
  32. package/.next/server/app/api/encryption/secure/route.js.nft.json +1 -0
  33. package/.next/server/app/api/encryption/secure/route_client-reference-manifest.js +1 -0
  34. package/.next/server/app/api/env/route.js +2 -0
  35. package/.next/server/app/api/env/route.js.nft.json +1 -0
  36. package/.next/server/app/api/env/route_client-reference-manifest.js +1 -0
  37. package/.next/server/app/api/flow/[id]/route.js +1 -0
  38. package/.next/server/app/api/flow/[id]/route.js.nft.json +1 -0
  39. package/.next/server/app/api/flow/[id]/route_client-reference-manifest.js +1 -0
  40. package/.next/server/app/api/flow/prompt-renderer/route.js +2 -0
  41. package/.next/server/app/api/flow/prompt-renderer/route.js.nft.json +1 -0
  42. package/.next/server/app/api/flow/prompt-renderer/route_client-reference-manifest.js +1 -0
  43. package/.next/server/app/api/flow/route.js +1 -0
  44. package/.next/server/app/api/flow/route.js.nft.json +1 -0
  45. package/.next/server/app/api/flow/route_client-reference-manifest.js +1 -0
  46. package/.next/server/app/api/git/route.js +3 -0
  47. package/.next/server/app/api/git/route.js.nft.json +1 -0
  48. package/.next/server/app/api/git/route_client-reference-manifest.js +1 -0
  49. package/.next/server/app/api/init/route.js +1 -0
  50. package/.next/server/app/api/init/route.js.nft.json +1 -0
  51. package/.next/server/app/api/init/route_client-reference-manifest.js +1 -0
  52. package/.next/server/app/api/mcp/cancel/route.js +2 -0
  53. package/.next/server/app/api/mcp/cancel/route.js.nft.json +1 -0
  54. package/.next/server/app/api/mcp/cancel/route_client-reference-manifest.js +1 -0
  55. package/.next/server/app/api/mcp/servers/[name]/prompts/get/route.js +1 -0
  56. package/.next/server/app/api/mcp/servers/[name]/prompts/get/route.js.nft.json +1 -0
  57. package/.next/server/app/api/mcp/servers/[name]/prompts/get/route_client-reference-manifest.js +1 -0
  58. package/.next/server/app/api/mcp/servers/[name]/prompts/route.js +1 -0
  59. package/.next/server/app/api/mcp/servers/[name]/prompts/route.js.nft.json +1 -0
  60. package/.next/server/app/api/mcp/servers/[name]/prompts/route_client-reference-manifest.js +1 -0
  61. package/.next/server/app/api/mcp/servers/[name]/resources/read/route.js +1 -0
  62. package/.next/server/app/api/mcp/servers/[name]/resources/read/route.js.nft.json +1 -0
  63. package/.next/server/app/api/mcp/servers/[name]/resources/read/route_client-reference-manifest.js +1 -0
  64. package/.next/server/app/api/mcp/servers/[name]/resources/route.js +1 -0
  65. package/.next/server/app/api/mcp/servers/[name]/resources/route.js.nft.json +1 -0
  66. package/.next/server/app/api/mcp/servers/[name]/resources/route_client-reference-manifest.js +1 -0
  67. package/.next/server/app/api/mcp/servers/[name]/route.js +1 -0
  68. package/.next/server/app/api/mcp/servers/[name]/route.js.nft.json +1 -0
  69. package/.next/server/app/api/mcp/servers/[name]/route_client-reference-manifest.js +1 -0
  70. package/.next/server/app/api/mcp/servers/[name]/status/route.js +1 -0
  71. package/.next/server/app/api/mcp/servers/[name]/status/route.js.nft.json +1 -0
  72. package/.next/server/app/api/mcp/servers/[name]/status/route_client-reference-manifest.js +1 -0
  73. package/.next/server/app/api/mcp/servers/[name]/tools/[toolName]/route.js +1 -0
  74. package/.next/server/app/api/mcp/servers/[name]/tools/[toolName]/route.js.nft.json +1 -0
  75. package/.next/server/app/api/mcp/servers/[name]/tools/[toolName]/route_client-reference-manifest.js +1 -0
  76. package/.next/server/app/api/mcp/servers/[name]/tools/route.js +1 -0
  77. package/.next/server/app/api/mcp/servers/[name]/tools/route.js.nft.json +1 -0
  78. package/.next/server/app/api/mcp/servers/[name]/tools/route_client-reference-manifest.js +1 -0
  79. package/.next/server/app/api/mcp/servers/route.js +1 -0
  80. package/.next/server/app/api/mcp/servers/route.js.nft.json +1 -0
  81. package/.next/server/app/api/mcp/servers/route_client-reference-manifest.js +1 -0
  82. package/.next/server/app/api/mcp/test-connection/route.js +1 -0
  83. package/.next/server/app/api/mcp/test-connection/route.js.nft.json +1 -0
  84. package/.next/server/app/api/mcp/test-connection/route_client-reference-manifest.js +1 -0
  85. package/.next/server/app/api/mcp-registry/route.js +2 -0
  86. package/.next/server/app/api/mcp-registry/route.js.nft.json +1 -0
  87. package/.next/server/app/api/mcp-registry/route_client-reference-manifest.js +1 -0
  88. package/.next/server/app/api/mcp-registry/spotlight/route.js +2 -0
  89. package/.next/server/app/api/mcp-registry/spotlight/route.js.nft.json +1 -0
  90. package/.next/server/app/api/mcp-registry/spotlight/route_client-reference-manifest.js +1 -0
  91. package/.next/server/app/api/model/[id]/route.js +1 -0
  92. package/.next/server/app/api/model/[id]/route.js.nft.json +1 -0
  93. package/.next/server/app/api/model/[id]/route_client-reference-manifest.js +1 -0
  94. package/.next/server/app/api/model/provider/route.js +2 -0
  95. package/.next/server/app/api/model/provider/route.js.nft.json +1 -0
  96. package/.next/server/app/api/model/provider/route_client-reference-manifest.js +1 -0
  97. package/.next/server/app/api/model/route.js +1 -0
  98. package/.next/server/app/api/model/route.js.nft.json +1 -0
  99. package/.next/server/app/api/model/route_client-reference-manifest.js +1 -0
  100. package/.next/server/app/api/model/test/route.js +2 -0
  101. package/.next/server/app/api/model/test/route.js.nft.json +1 -0
  102. package/.next/server/app/api/model/test/route_client-reference-manifest.js +1 -0
  103. package/.next/server/app/api/oauth/callback/route.js +2 -0
  104. package/.next/server/app/api/oauth/callback/route.js.nft.json +1 -0
  105. package/.next/server/app/api/oauth/callback/route_client-reference-manifest.js +1 -0
  106. package/.next/server/app/api/oauth/initiate/route.js +2 -0
  107. package/.next/server/app/api/oauth/initiate/route.js.nft.json +1 -0
  108. package/.next/server/app/api/oauth/initiate/route_client-reference-manifest.js +1 -0
  109. package/.next/server/app/api/oauth/reset/route.js +2 -0
  110. package/.next/server/app/api/oauth/reset/route.js.nft.json +1 -0
  111. package/.next/server/app/api/oauth/reset/route_client-reference-manifest.js +1 -0
  112. package/.next/server/app/api/planned-executions/[id]/route.js +1 -0
  113. package/.next/server/app/api/planned-executions/[id]/route.js.nft.json +1 -0
  114. package/.next/server/app/api/planned-executions/[id]/route_client-reference-manifest.js +1 -0
  115. package/.next/server/app/api/planned-executions/[id]/run/route.js +1 -0
  116. package/.next/server/app/api/planned-executions/[id]/run/route.js.nft.json +1 -0
  117. package/.next/server/app/api/planned-executions/[id]/run/route_client-reference-manifest.js +1 -0
  118. package/.next/server/app/api/planned-executions/[id]/runs/route.js +1 -0
  119. package/.next/server/app/api/planned-executions/[id]/runs/route.js.nft.json +1 -0
  120. package/.next/server/app/api/planned-executions/[id]/runs/route_client-reference-manifest.js +1 -0
  121. package/.next/server/app/api/planned-executions/preview-schedule/route.js +2 -0
  122. package/.next/server/app/api/planned-executions/preview-schedule/route.js.nft.json +1 -0
  123. package/.next/server/app/api/planned-executions/preview-schedule/route_client-reference-manifest.js +1 -0
  124. package/.next/server/app/api/planned-executions/route.js +1 -0
  125. package/.next/server/app/api/planned-executions/route.js.nft.json +1 -0
  126. package/.next/server/app/api/planned-executions/route_client-reference-manifest.js +1 -0
  127. package/.next/server/app/api/restore/route.js +2 -0
  128. package/.next/server/app/api/restore/route.js.nft.json +1 -0
  129. package/.next/server/app/api/restore/route_client-reference-manifest.js +1 -0
  130. package/.next/server/app/api/storage/route.js +2 -0
  131. package/.next/server/app/api/storage/route.js.nft.json +1 -0
  132. package/.next/server/app/api/storage/route_client-reference-manifest.js +1 -0
  133. package/.next/server/app/api/update/route.js +2 -0
  134. package/.next/server/app/api/update/route.js.nft.json +1 -0
  135. package/.next/server/app/api/update/route_client-reference-manifest.js +1 -0
  136. package/.next/server/app/api/webhooks/[id]/route.js +1 -0
  137. package/.next/server/app/api/webhooks/[id]/route.js.nft.json +1 -0
  138. package/.next/server/app/api/webhooks/[id]/route_client-reference-manifest.js +1 -0
  139. package/.next/server/app/chat/page.js +10 -0
  140. package/.next/server/app/chat/page.js.nft.json +1 -0
  141. package/.next/server/app/chat/page_client-reference-manifest.js +1 -0
  142. package/.next/server/app/chat.html +1 -0
  143. package/.next/server/app/chat.meta +7 -0
  144. package/.next/server/app/chat.rsc +20 -0
  145. package/.next/server/app/docs/page.js +2 -0
  146. package/.next/server/app/docs/page.js.nft.json +1 -0
  147. package/.next/server/app/docs/page_client-reference-manifest.js +1 -0
  148. package/.next/server/app/docs.html +1 -0
  149. package/.next/server/app/docs.meta +7 -0
  150. package/.next/server/app/docs.rsc +20 -0
  151. package/.next/server/app/executions/page.js +5 -0
  152. package/.next/server/app/executions/page.js.nft.json +1 -0
  153. package/.next/server/app/executions/page_client-reference-manifest.js +1 -0
  154. package/.next/server/app/executions.html +1 -0
  155. package/.next/server/app/executions.meta +7 -0
  156. package/.next/server/app/executions.rsc +20 -0
  157. package/.next/server/app/flows/page.js +40 -0
  158. package/.next/server/app/flows/page.js.nft.json +1 -0
  159. package/.next/server/app/flows/page_client-reference-manifest.js +1 -0
  160. package/.next/server/app/flows.html +1 -0
  161. package/.next/server/app/flows.meta +7 -0
  162. package/.next/server/app/flows.rsc +21 -0
  163. package/.next/server/app/index.html +1 -0
  164. package/.next/server/app/index.meta +7 -0
  165. package/.next/server/app/index.rsc +20 -0
  166. package/.next/server/app/mcp/page.js +50 -0
  167. package/.next/server/app/mcp/page.js.nft.json +1 -0
  168. package/.next/server/app/mcp/page_client-reference-manifest.js +1 -0
  169. package/.next/server/app/mcp-flows/route.js +1 -0
  170. package/.next/server/app/mcp-flows/route.js.nft.json +1 -0
  171. package/.next/server/app/mcp-flows/route_client-reference-manifest.js +1 -0
  172. package/.next/server/app/mcp-proxy/[server]/route.js +1 -0
  173. package/.next/server/app/mcp-proxy/[server]/route.js.nft.json +1 -0
  174. package/.next/server/app/mcp-proxy/[server]/route_client-reference-manifest.js +1 -0
  175. package/.next/server/app/mcp.html +1 -0
  176. package/.next/server/app/mcp.meta +7 -0
  177. package/.next/server/app/mcp.rsc +20 -0
  178. package/.next/server/app/models/page.js +3 -0
  179. package/.next/server/app/models/page.js.nft.json +1 -0
  180. package/.next/server/app/models/page_client-reference-manifest.js +1 -0
  181. package/.next/server/app/page.js +2 -0
  182. package/.next/server/app/page.js.nft.json +1 -0
  183. package/.next/server/app/page_client-reference-manifest.js +1 -0
  184. package/.next/server/app/settings/page.js +46 -0
  185. package/.next/server/app/settings/page.js.nft.json +1 -0
  186. package/.next/server/app/settings/page_client-reference-manifest.js +1 -0
  187. package/.next/server/app/settings.html +1 -0
  188. package/.next/server/app/settings.meta +7 -0
  189. package/.next/server/app/settings.rsc +20 -0
  190. package/.next/server/app/v1/chat/completions/route.js +2 -0
  191. package/.next/server/app/v1/chat/completions/route.js.nft.json +1 -0
  192. package/.next/server/app/v1/chat/completions/route_client-reference-manifest.js +1 -0
  193. package/.next/server/app/v1/chat/conversations/[conversationId]/breakpoints/route.js +1 -0
  194. package/.next/server/app/v1/chat/conversations/[conversationId]/breakpoints/route.js.nft.json +1 -0
  195. package/.next/server/app/v1/chat/conversations/[conversationId]/breakpoints/route_client-reference-manifest.js +1 -0
  196. package/.next/server/app/v1/chat/conversations/[conversationId]/cancel/route.js +2 -0
  197. package/.next/server/app/v1/chat/conversations/[conversationId]/cancel/route.js.nft.json +1 -0
  198. package/.next/server/app/v1/chat/conversations/[conversationId]/cancel/route_client-reference-manifest.js +1 -0
  199. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/continue/route.js +1 -0
  200. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/continue/route.js.nft.json +1 -0
  201. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/continue/route_client-reference-manifest.js +1 -0
  202. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/step/route.js +1 -0
  203. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/step/route.js.nft.json +1 -0
  204. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/step/route_client-reference-manifest.js +1 -0
  205. package/.next/server/app/v1/chat/conversations/[conversationId]/edit-state/route.js +1 -0
  206. package/.next/server/app/v1/chat/conversations/[conversationId]/edit-state/route.js.nft.json +1 -0
  207. package/.next/server/app/v1/chat/conversations/[conversationId]/edit-state/route_client-reference-manifest.js +1 -0
  208. package/.next/server/app/v1/chat/conversations/[conversationId]/events/route.js +11 -0
  209. package/.next/server/app/v1/chat/conversations/[conversationId]/events/route.js.nft.json +1 -0
  210. package/.next/server/app/v1/chat/conversations/[conversationId]/events/route_client-reference-manifest.js +1 -0
  211. package/.next/server/app/v1/chat/conversations/[conversationId]/respond/route.js +1 -0
  212. package/.next/server/app/v1/chat/conversations/[conversationId]/respond/route.js.nft.json +1 -0
  213. package/.next/server/app/v1/chat/conversations/[conversationId]/respond/route_client-reference-manifest.js +1 -0
  214. package/.next/server/app/v1/chat/conversations/[conversationId]/route.js +2 -0
  215. package/.next/server/app/v1/chat/conversations/[conversationId]/route.js.nft.json +1 -0
  216. package/.next/server/app/v1/chat/conversations/[conversationId]/route_client-reference-manifest.js +1 -0
  217. package/.next/server/app/v1/chat/conversations/route.js +2 -0
  218. package/.next/server/app/v1/chat/conversations/route.js.nft.json +1 -0
  219. package/.next/server/app/v1/chat/conversations/route_client-reference-manifest.js +1 -0
  220. package/.next/server/app/v1/models/route.js +2 -0
  221. package/.next/server/app/v1/models/route.js.nft.json +1 -0
  222. package/.next/server/app/v1/models/route_client-reference-manifest.js +1 -0
  223. package/.next/server/app-paths-manifest.json +63 -0
  224. package/.next/server/chunks/120.js +15 -0
  225. package/.next/server/chunks/1223.js +1 -0
  226. package/.next/server/chunks/1373.js +1 -0
  227. package/.next/server/chunks/1381.js +1 -0
  228. package/.next/server/chunks/1403.js +6 -0
  229. package/.next/server/chunks/1555.js +1 -0
  230. package/.next/server/chunks/1692.js +1 -0
  231. package/.next/server/chunks/1870.js +1 -0
  232. package/.next/server/chunks/1905.js +2 -0
  233. package/.next/server/chunks/1986.js +1 -0
  234. package/.next/server/chunks/2181.js +17 -0
  235. package/.next/server/chunks/22.js +4 -0
  236. package/.next/server/chunks/2253.js +1 -0
  237. package/.next/server/chunks/232.js +1 -0
  238. package/.next/server/chunks/2471.js +1 -0
  239. package/.next/server/chunks/2666.js +1 -0
  240. package/.next/server/chunks/2695.js +95 -0
  241. package/.next/server/chunks/2776.js +3 -0
  242. package/.next/server/chunks/3736.js +1 -0
  243. package/.next/server/chunks/3984.js +9 -0
  244. package/.next/server/chunks/4239.js +1 -0
  245. package/.next/server/chunks/4322.js +1 -0
  246. package/.next/server/chunks/4706.js +1 -0
  247. package/.next/server/chunks/4729.js +6 -0
  248. package/.next/server/chunks/473.js +2 -0
  249. package/.next/server/chunks/4753.js +8 -0
  250. package/.next/server/chunks/4989.js +1 -0
  251. package/.next/server/chunks/5389.js +154 -0
  252. package/.next/server/chunks/5443.js +1 -0
  253. package/.next/server/chunks/5486.js +1 -0
  254. package/.next/server/chunks/5547.js +2 -0
  255. package/.next/server/chunks/558.js +1 -0
  256. package/.next/server/chunks/5611.js +6 -0
  257. package/.next/server/chunks/5734.js +60 -0
  258. package/.next/server/chunks/5838.js +1 -0
  259. package/.next/server/chunks/5873.js +22 -0
  260. package/.next/server/chunks/598.js +1 -0
  261. package/.next/server/chunks/6064.js +1 -0
  262. package/.next/server/chunks/62.js +1 -0
  263. package/.next/server/chunks/6283.js +2 -0
  264. package/.next/server/chunks/6390.js +28 -0
  265. package/.next/server/chunks/6542.js +1 -0
  266. package/.next/server/chunks/6637.js +2 -0
  267. package/.next/server/chunks/6760.js +1 -0
  268. package/.next/server/chunks/6936.js +35 -0
  269. package/.next/server/chunks/6996.js +62 -0
  270. package/.next/server/chunks/701.js +10 -0
  271. package/.next/server/chunks/7214.js +6 -0
  272. package/.next/server/chunks/724.js +27 -0
  273. package/.next/server/chunks/7412.js +5 -0
  274. package/.next/server/chunks/7506.js +10 -0
  275. package/.next/server/chunks/7531.js +52 -0
  276. package/.next/server/chunks/805.js +2 -0
  277. package/.next/server/chunks/812.js +2 -0
  278. package/.next/server/chunks/8298.js +1 -0
  279. package/.next/server/chunks/8312.js +5 -0
  280. package/.next/server/chunks/8445.js +82 -0
  281. package/.next/server/chunks/8460.js +1 -0
  282. package/.next/server/chunks/8693.js +1 -0
  283. package/.next/server/chunks/8739.js +2 -0
  284. package/.next/server/chunks/8938.js +8 -0
  285. package/.next/server/chunks/9042.js +1 -0
  286. package/.next/server/chunks/9188.js +1 -0
  287. package/.next/server/chunks/9273.js +4 -0
  288. package/.next/server/chunks/9314.js +12 -0
  289. package/.next/server/chunks/9343.js +5 -0
  290. package/.next/server/chunks/9406.js +95 -0
  291. package/.next/server/chunks/9938.js +1 -0
  292. package/.next/server/chunks/9989.js +1 -0
  293. package/.next/server/functions-config-manifest.json +10 -0
  294. package/.next/server/instrumentation.js +1 -0
  295. package/.next/server/instrumentation.js.nft.json +1 -0
  296. package/.next/server/interception-route-rewrite-manifest.js +1 -0
  297. package/.next/server/middleware-build-manifest.js +1 -0
  298. package/.next/server/middleware-manifest.json +6 -0
  299. package/.next/server/middleware-react-loadable-manifest.js +1 -0
  300. package/.next/server/next-font-manifest.js +1 -0
  301. package/.next/server/next-font-manifest.json +1 -0
  302. package/.next/server/pages/404.html +1 -0
  303. package/.next/server/pages/500.html +1 -0
  304. package/.next/server/pages/_app.js +1 -0
  305. package/.next/server/pages/_app.js.nft.json +1 -0
  306. package/.next/server/pages/_document.js +1 -0
  307. package/.next/server/pages/_document.js.nft.json +1 -0
  308. package/.next/server/pages/_error.js +19 -0
  309. package/.next/server/pages/_error.js.nft.json +1 -0
  310. package/.next/server/pages-manifest.json +6 -0
  311. package/.next/server/server-reference-manifest.js +1 -0
  312. package/.next/server/server-reference-manifest.json +1 -0
  313. package/.next/server/webpack-runtime.js +1 -0
  314. package/.next/static/GbXXL_8DLT2oVwT-JdpbM/_buildManifest.js +1 -0
  315. package/.next/static/GbXXL_8DLT2oVwT-JdpbM/_ssgManifest.js +1 -0
  316. package/.next/static/chunks/1255-13d973e0759ea6d6.js +1 -0
  317. package/.next/static/chunks/1374-e084b3c40554288a.js +1 -0
  318. package/.next/static/chunks/1424-01898260211a09d0.js +1 -0
  319. package/.next/static/chunks/1646.a93085a0445ba909.js +1 -0
  320. package/.next/static/chunks/1a258343-bcffff1604e3797c.js +1 -0
  321. package/.next/static/chunks/2003-7710c23acaef11c9.js +1 -0
  322. package/.next/static/chunks/2005-f9d38c39f10c321f.js +1 -0
  323. package/.next/static/chunks/2160-4d9f132965bc2a89.js +1 -0
  324. package/.next/static/chunks/2380-2a7acfa037ec8e80.js +1 -0
  325. package/.next/static/chunks/2619-04bc32f026a0d946.js +1 -0
  326. package/.next/static/chunks/2624-b985ab3eac1139c3.js +1 -0
  327. package/.next/static/chunks/2678-c88052addfb0478a.js +1 -0
  328. package/.next/static/chunks/2720-2a926505ec98a6de.js +1 -0
  329. package/.next/static/chunks/3077-565833c67440a7fa.js +1 -0
  330. package/.next/static/chunks/3217.79ca74c918fc772c.js +1 -0
  331. package/.next/static/chunks/3235-dfcb73b8d483f8cd.js +1 -0
  332. package/.next/static/chunks/3272-fd8d59523f61da96.js +1 -0
  333. package/.next/static/chunks/3403-7c5037145e384171.js +1 -0
  334. package/.next/static/chunks/3545.c3fbe14528517a75.js +1 -0
  335. package/.next/static/chunks/3750-38474d67566af4c3.js +1 -0
  336. package/.next/static/chunks/3810-cee95063d5535307.js +1 -0
  337. package/.next/static/chunks/39-1732a0b689c7b641.js +1 -0
  338. package/.next/static/chunks/4754-5c62bb61142f82d1.js +1 -0
  339. package/.next/static/chunks/488-623d07c3fbc21e28.js +1 -0
  340. package/.next/static/chunks/4bd1b696-182b6b13bdad92e3.js +1 -0
  341. package/.next/static/chunks/5139.e4ff9cc3669129ed.js +1 -0
  342. package/.next/static/chunks/5648-2c6caf3d55f95e11.js +1 -0
  343. package/.next/static/chunks/5961-828f4f7efc3e1381.js +1 -0
  344. package/.next/static/chunks/6134-758747aabd77289d.js +8 -0
  345. package/.next/static/chunks/690-391bc0f482a9f67c.js +1 -0
  346. package/.next/static/chunks/7126-2bafddf1b09cacac.js +1 -0
  347. package/.next/static/chunks/7329-78f54f68ea2d37e2.js +1 -0
  348. package/.next/static/chunks/7396-807a034f58b57712.js +1 -0
  349. package/.next/static/chunks/7488-b58bc701d0deda00.js +1 -0
  350. package/.next/static/chunks/7539.41f0448cf9783388.js +1 -0
  351. package/.next/static/chunks/7583.8a518353bd072db9.js +1 -0
  352. package/.next/static/chunks/8187.5d6523f30e705998.js +1 -0
  353. package/.next/static/chunks/8198.cd0d3f8429c02862.js +1 -0
  354. package/.next/static/chunks/8345.76f420453fc0dee7.js +1 -0
  355. package/.next/static/chunks/8548-8e4a95334064e8b2.js +1 -0
  356. package/.next/static/chunks/8598-1b627b3d682b364a.js +1 -0
  357. package/.next/static/chunks/8862-1314a13b011c4817.js +1 -0
  358. package/.next/static/chunks/9164-81ca1a1bccdc5ed2.js +1 -0
  359. package/.next/static/chunks/9195.01a57af6d6cdf1a5.js +1 -0
  360. package/.next/static/chunks/9244-3281f7fd02003a2c.js +1 -0
  361. package/.next/static/chunks/9562-93cc45aef3630781.js +1 -0
  362. package/.next/static/chunks/9718-12d33c1a26bb002d.js +1 -0
  363. package/.next/static/chunks/app/_not-found/page-81dc485d60f94046.js +1 -0
  364. package/.next/static/chunks/app/api/backup/route-acd5b6e731d45f1a.js +1 -0
  365. package/.next/static/chunks/app/api/browse/route-acd5b6e731d45f1a.js +1 -0
  366. package/.next/static/chunks/app/api/cwd/route-acd5b6e731d45f1a.js +1 -0
  367. package/.next/static/chunks/app/api/encryption/secure/route-acd5b6e731d45f1a.js +1 -0
  368. package/.next/static/chunks/app/api/env/route-acd5b6e731d45f1a.js +1 -0
  369. package/.next/static/chunks/app/api/flow/[id]/route-acd5b6e731d45f1a.js +1 -0
  370. package/.next/static/chunks/app/api/flow/prompt-renderer/route-acd5b6e731d45f1a.js +1 -0
  371. package/.next/static/chunks/app/api/flow/route-acd5b6e731d45f1a.js +1 -0
  372. package/.next/static/chunks/app/api/git/route-acd5b6e731d45f1a.js +1 -0
  373. package/.next/static/chunks/app/api/init/route-acd5b6e731d45f1a.js +1 -0
  374. package/.next/static/chunks/app/api/mcp/cancel/route-acd5b6e731d45f1a.js +1 -0
  375. package/.next/static/chunks/app/api/mcp/servers/[name]/prompts/get/route-acd5b6e731d45f1a.js +1 -0
  376. package/.next/static/chunks/app/api/mcp/servers/[name]/prompts/route-acd5b6e731d45f1a.js +1 -0
  377. package/.next/static/chunks/app/api/mcp/servers/[name]/resources/read/route-acd5b6e731d45f1a.js +1 -0
  378. package/.next/static/chunks/app/api/mcp/servers/[name]/resources/route-acd5b6e731d45f1a.js +1 -0
  379. package/.next/static/chunks/app/api/mcp/servers/[name]/route-acd5b6e731d45f1a.js +1 -0
  380. package/.next/static/chunks/app/api/mcp/servers/[name]/status/route-acd5b6e731d45f1a.js +1 -0
  381. package/.next/static/chunks/app/api/mcp/servers/[name]/tools/[toolName]/route-acd5b6e731d45f1a.js +1 -0
  382. package/.next/static/chunks/app/api/mcp/servers/[name]/tools/route-acd5b6e731d45f1a.js +1 -0
  383. package/.next/static/chunks/app/api/mcp/servers/route-acd5b6e731d45f1a.js +1 -0
  384. package/.next/static/chunks/app/api/mcp/test-connection/route-acd5b6e731d45f1a.js +1 -0
  385. package/.next/static/chunks/app/api/mcp-registry/route-acd5b6e731d45f1a.js +1 -0
  386. package/.next/static/chunks/app/api/mcp-registry/spotlight/route-acd5b6e731d45f1a.js +1 -0
  387. package/.next/static/chunks/app/api/model/[id]/route-acd5b6e731d45f1a.js +1 -0
  388. package/.next/static/chunks/app/api/model/provider/route-acd5b6e731d45f1a.js +1 -0
  389. package/.next/static/chunks/app/api/model/route-acd5b6e731d45f1a.js +1 -0
  390. package/.next/static/chunks/app/api/model/test/route-acd5b6e731d45f1a.js +1 -0
  391. package/.next/static/chunks/app/api/oauth/callback/route-acd5b6e731d45f1a.js +1 -0
  392. package/.next/static/chunks/app/api/oauth/initiate/route-acd5b6e731d45f1a.js +1 -0
  393. package/.next/static/chunks/app/api/oauth/reset/route-acd5b6e731d45f1a.js +1 -0
  394. package/.next/static/chunks/app/api/planned-executions/[id]/route-acd5b6e731d45f1a.js +1 -0
  395. package/.next/static/chunks/app/api/planned-executions/[id]/run/route-acd5b6e731d45f1a.js +1 -0
  396. package/.next/static/chunks/app/api/planned-executions/[id]/runs/route-acd5b6e731d45f1a.js +1 -0
  397. package/.next/static/chunks/app/api/planned-executions/preview-schedule/route-acd5b6e731d45f1a.js +1 -0
  398. package/.next/static/chunks/app/api/planned-executions/route-acd5b6e731d45f1a.js +1 -0
  399. package/.next/static/chunks/app/api/restore/route-acd5b6e731d45f1a.js +1 -0
  400. package/.next/static/chunks/app/api/storage/route-acd5b6e731d45f1a.js +1 -0
  401. package/.next/static/chunks/app/api/update/route-acd5b6e731d45f1a.js +1 -0
  402. package/.next/static/chunks/app/api/webhooks/[id]/route-acd5b6e731d45f1a.js +1 -0
  403. package/.next/static/chunks/app/chat/page-019d2b836f34f40d.js +1 -0
  404. package/.next/static/chunks/app/docs/page-2a4cff7c40706a48.js +1 -0
  405. package/.next/static/chunks/app/executions/page-b46744c507a6e810.js +1 -0
  406. package/.next/static/chunks/app/flows/page-7b5c0e06951398ac.js +1 -0
  407. package/.next/static/chunks/app/layout-2878f13d7e253503.js +1 -0
  408. package/.next/static/chunks/app/mcp/page-1ca55f88a3045b5d.js +1 -0
  409. package/.next/static/chunks/app/mcp-flows/route-acd5b6e731d45f1a.js +1 -0
  410. package/.next/static/chunks/app/mcp-proxy/[server]/route-acd5b6e731d45f1a.js +1 -0
  411. package/.next/static/chunks/app/models/error-2b00c98abf1e02cf.js +1 -0
  412. package/.next/static/chunks/app/models/loading-57d1c02d0817fc47.js +1 -0
  413. package/.next/static/chunks/app/models/page-a20e6c4e1a5a0c9a.js +1 -0
  414. package/.next/static/chunks/app/page-471879d3918aeeb6.js +1 -0
  415. package/.next/static/chunks/app/settings/page-88f7e1b65a6681ec.js +1 -0
  416. package/.next/static/chunks/app/v1/chat/completions/route-acd5b6e731d45f1a.js +1 -0
  417. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/breakpoints/route-acd5b6e731d45f1a.js +1 -0
  418. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/cancel/route-acd5b6e731d45f1a.js +1 -0
  419. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/debug/continue/route-acd5b6e731d45f1a.js +1 -0
  420. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/debug/step/route-acd5b6e731d45f1a.js +1 -0
  421. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/edit-state/route-acd5b6e731d45f1a.js +1 -0
  422. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/events/route-acd5b6e731d45f1a.js +1 -0
  423. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/respond/route-acd5b6e731d45f1a.js +1 -0
  424. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/route-acd5b6e731d45f1a.js +1 -0
  425. package/.next/static/chunks/app/v1/chat/conversations/route-acd5b6e731d45f1a.js +1 -0
  426. package/.next/static/chunks/app/v1/models/route-acd5b6e731d45f1a.js +1 -0
  427. package/.next/static/chunks/ccd63cfe-4a75b90fa4cb53ad.js +1 -0
  428. package/.next/static/chunks/framework-1548034a53843b9f.js +1 -0
  429. package/.next/static/chunks/main-app-faff38c77cb00119.js +1 -0
  430. package/.next/static/chunks/main-be8e823624954fab.js +1 -0
  431. package/.next/static/chunks/pages/_app-e8b861c87f6f033c.js +1 -0
  432. package/.next/static/chunks/pages/_error-c8f84f7bd11d43d4.js +1 -0
  433. package/.next/static/chunks/polyfills-42372ed130431b0a.js +1 -0
  434. package/.next/static/chunks/webpack-6f17a022ac16e8bd.js +1 -0
  435. package/.next/static/css/64cb1f185b52a623.css +1 -0
  436. package/.next/static/css/d1484588c616b291.css +31 -0
  437. package/.next/static/media/013b72fa676f92e0-s.woff2 +0 -0
  438. package/.next/static/media/22a5144ee8d83bca-s.p.woff2 +0 -0
  439. package/.next/static/media/2b5b02fc7e511755-s.woff2 +0 -0
  440. package/.next/static/media/65f03d54ccadf4a8-s.woff2 +0 -0
  441. package/.next/static/media/7d4881bb7e1bf84d-s.p.woff2 +0 -0
  442. package/.next/static/media/9766a7e9e2e0ad5a-s.woff2 +0 -0
  443. package/.next/static/media/aa016aab0e6d1295-s.woff2 +0 -0
  444. package/.next/static/media/b66cf8e69499582a-s.woff2 +0 -0
  445. package/.next/static/media/b9408752a0c24fb9-s.woff2 +0 -0
  446. package/.next/static/media/e038a29029a234f2-s.woff2 +0 -0
  447. package/.next/static/media/f639721981034f88-s.woff2 +0 -0
  448. package/.next/trace +7 -0
  449. package/.next/types/app/api/backup/route.ts +347 -0
  450. package/.next/types/app/api/browse/route.ts +347 -0
  451. package/.next/types/app/api/cwd/route.ts +347 -0
  452. package/.next/types/app/api/encryption/secure/route.ts +347 -0
  453. package/.next/types/app/api/env/route.ts +347 -0
  454. package/.next/types/app/api/flow/[id]/route.ts +347 -0
  455. package/.next/types/app/api/flow/prompt-renderer/route.ts +347 -0
  456. package/.next/types/app/api/flow/route.ts +347 -0
  457. package/.next/types/app/api/git/route.ts +347 -0
  458. package/.next/types/app/api/init/route.ts +347 -0
  459. package/.next/types/app/api/mcp/cancel/route.ts +347 -0
  460. package/.next/types/app/api/mcp/servers/[name]/prompts/get/route.ts +347 -0
  461. package/.next/types/app/api/mcp/servers/[name]/prompts/route.ts +347 -0
  462. package/.next/types/app/api/mcp/servers/[name]/resources/read/route.ts +347 -0
  463. package/.next/types/app/api/mcp/servers/[name]/resources/route.ts +347 -0
  464. package/.next/types/app/api/mcp/servers/[name]/route.ts +347 -0
  465. package/.next/types/app/api/mcp/servers/[name]/status/route.ts +347 -0
  466. package/.next/types/app/api/mcp/servers/[name]/tools/[toolName]/route.ts +347 -0
  467. package/.next/types/app/api/mcp/servers/[name]/tools/route.ts +347 -0
  468. package/.next/types/app/api/mcp/servers/route.ts +347 -0
  469. package/.next/types/app/api/mcp/test-connection/route.ts +347 -0
  470. package/.next/types/app/api/mcp-registry/route.ts +347 -0
  471. package/.next/types/app/api/mcp-registry/spotlight/route.ts +347 -0
  472. package/.next/types/app/api/model/[id]/route.ts +347 -0
  473. package/.next/types/app/api/model/provider/route.ts +347 -0
  474. package/.next/types/app/api/model/route.ts +347 -0
  475. package/.next/types/app/api/model/test/route.ts +347 -0
  476. package/.next/types/app/api/oauth/callback/route.ts +347 -0
  477. package/.next/types/app/api/oauth/initiate/route.ts +347 -0
  478. package/.next/types/app/api/oauth/reset/route.ts +347 -0
  479. package/.next/types/app/api/planned-executions/[id]/route.ts +347 -0
  480. package/.next/types/app/api/planned-executions/[id]/run/route.ts +347 -0
  481. package/.next/types/app/api/planned-executions/[id]/runs/route.ts +347 -0
  482. package/.next/types/app/api/planned-executions/preview-schedule/route.ts +347 -0
  483. package/.next/types/app/api/planned-executions/route.ts +347 -0
  484. package/.next/types/app/api/restore/route.ts +347 -0
  485. package/.next/types/app/api/storage/route.ts +347 -0
  486. package/.next/types/app/api/update/route.ts +347 -0
  487. package/.next/types/app/api/webhooks/[id]/route.ts +347 -0
  488. package/.next/types/app/chat/page.ts +84 -0
  489. package/.next/types/app/docs/page.ts +84 -0
  490. package/.next/types/app/executions/page.ts +84 -0
  491. package/.next/types/app/flows/page.ts +84 -0
  492. package/.next/types/app/layout.ts +84 -0
  493. package/.next/types/app/mcp/page.ts +84 -0
  494. package/.next/types/app/mcp-flows/route.ts +347 -0
  495. package/.next/types/app/mcp-proxy/[server]/route.ts +347 -0
  496. package/.next/types/app/models/page.ts +84 -0
  497. package/.next/types/app/page.ts +84 -0
  498. package/.next/types/app/settings/page.ts +84 -0
  499. package/.next/types/app/v1/chat/completions/route.ts +347 -0
  500. package/.next/types/app/v1/chat/conversations/[conversationId]/breakpoints/route.ts +347 -0
  501. package/.next/types/app/v1/chat/conversations/[conversationId]/cancel/route.ts +347 -0
  502. package/.next/types/app/v1/chat/conversations/[conversationId]/debug/continue/route.ts +347 -0
  503. package/.next/types/app/v1/chat/conversations/[conversationId]/debug/step/route.ts +347 -0
  504. package/.next/types/app/v1/chat/conversations/[conversationId]/edit-state/route.ts +347 -0
  505. package/.next/types/app/v1/chat/conversations/[conversationId]/events/route.ts +347 -0
  506. package/.next/types/app/v1/chat/conversations/[conversationId]/respond/route.ts +347 -0
  507. package/.next/types/app/v1/chat/conversations/[conversationId]/route.ts +347 -0
  508. package/.next/types/app/v1/chat/conversations/route.ts +347 -0
  509. package/.next/types/app/v1/models/route.ts +347 -0
  510. package/.next/types/cache-life.d.ts +141 -0
  511. package/.next/types/package.json +1 -0
  512. package/.next/types/routes.d.ts +131 -0
  513. package/.next/types/validator.ts +601 -0
  514. package/LICENSE +21 -0
  515. package/README.md +372 -0
  516. package/bin/flujo.mjs +120 -0
  517. package/next.config.ts +99 -0
  518. package/package.json +91 -0
  519. package/public/favicon.ico +0 -0
  520. package/public/file.svg +1 -0
  521. package/public/globe.svg +1 -0
  522. package/public/next.svg +1 -0
  523. package/public/vercel.svg +1 -0
  524. package/public/window.svg +1 -0
  525. package/scripts/launch-next.mjs +98 -0
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[1488],{17427:(e,t,a)=>{"use strict";a.d(t,{A:()=>p});var l=a(95155),n=a(12115),r=a(25635),o=a(94049),s=a(99944),i=a(9957),d=a(52641),c=a(51221),u=a(55606),h=a(86973),x=a(9562);let p=e=>{var t;let{schema:a,values:p,onChange:f,size:m="small"}=e,[g,y]=(0,n.useState)({}),w=null!=(t=null==a?void 0:a.properties)?t:{},v=Array.isArray(null==a?void 0:a.required)?a.required:[],j=Object.keys(w);if(0===j.length)return(0,l.jsx)(r.default,{variant:"body2",color:"text.secondary",children:"This tool takes no parameters."});let b=(e,t)=>{let a={...p};void 0===t?delete a[e]:a[e]=t,f(a)};return(0,l.jsx)(o.default,{sx:{display:"flex",flexDirection:"column",gap:2},children:j.map(e=>{var t,a;let n=null!=(t=w[e])?t:{},f=v.includes(e)?"".concat(e," *"):e,j="string"==typeof n.description?n.description:"";if("boolean"===n.type)return(0,l.jsx)(s.A,{control:(0,l.jsx)(i.A,{size:m,checked:!0===p[e],onChange:t=>b(e,t.target.checked)}),label:(0,l.jsxs)(o.default,{children:[(0,l.jsx)(r.default,{variant:"body2",children:f}),j&&(0,l.jsx)(r.default,{variant:"caption",color:"text.secondary",children:j})]})},e);if(Array.isArray(n.enum)&&n.enum.length>0){let t=p[e];return(0,l.jsxs)(d.A,{size:m,fullWidth:!0,children:[(0,l.jsx)(c.A,{id:"schema-param-".concat(e),children:f}),(0,l.jsx)(u.A,{labelId:"schema-param-".concat(e),label:f,value:n.enum.includes(t)?t:"",onChange:t=>b(e,t.target.value),children:n.enum.map(e=>(0,l.jsx)(h.A,{value:e,children:String(e)},String(e)))}),j&&(0,l.jsx)(r.default,{variant:"caption",color:"text.secondary",sx:{mt:.5,mx:1.75},children:j})]},e)}if("number"===n.type||"integer"===n.type)return(0,l.jsx)(x.A,{fullWidth:!0,size:m,type:"number",label:f,value:void 0!==p[e]?String(p[e]):"",onChange:t=>{let a=t.target.value;if(""===a)return void b(e,void 0);let l="integer"===n.type?parseInt(a,10):parseFloat(a);b(e,Number.isNaN(l)?void 0:l)},helperText:j},e);if("object"===n.type||"array"===n.type){let t=null!=(a=g[e])?a:void 0!==p[e]?JSON.stringify(p[e],null,2):"",r=null;if(t.trim())try{JSON.parse(t)}catch(e){r="Not valid JSON yet"}return(0,l.jsx)(x.A,{fullWidth:!0,size:m,multiline:!0,minRows:2,label:"".concat(f," (JSON ").concat(n.type,")"),value:t,error:!!r,helperText:null!=r?r:j,onChange:t=>{let a=t.target.value;if(y(t=>({...t,[e]:a})),!a.trim())return void b(e,void 0);try{b(e,JSON.parse(a))}catch(e){}},slotProps:{input:{sx:{fontFamily:"monospace",fontSize:13}}}},e)}return(0,l.jsx)(x.A,{fullWidth:!0,size:m,label:f,value:void 0!==p[e]?String(p[e]):"",onChange:t=>b(e,""===t.target.value?void 0:t.target.value),helperText:j},e)})})}},60187:(e,t,a)=>{Promise.resolve().then(a.bind(a,95271))},62640:(e,t,a)=>{"use strict";a.d(t,{A:()=>N});var l=a(95155),n=a(12115),r=a(2778),o=a(52363),s=a(65036),i=a(94049),d=a(78470),c=a(41983),u=a(9562),h=a(28548),x=a(22003),p=a(4474),f=a(25635),m=a(41602),g=a(73707),y=a(49501),w=a(17681),v=a(75912),j=a(70690),b=a(80007),A=a(74482),k=a(40171),C=a(36944);let S=(0,a(87021).h)("frontend/components/shared/FolderPickerDialog"),N=e=>{let{open:t,title:a="Choose a folder",selectFiles:N=!1,initialPath:T,onClose:E,onSelect:I}=e,[F,W]=(0,n.useState)(null),[P,R]=(0,n.useState)(""),[O,z]=(0,n.useState)(!1),[M,U]=(0,n.useState)(null),D=(0,n.useCallback)(async e=>{z(!0),U(null);try{let t=e?"?path=".concat(encodeURIComponent(e)):"",a=await fetch("/api/browse".concat(t)),l=await a.json();if(!a.ok||l.error)return void U(l.error||"HTTP ".concat(a.status));W(l),R(l.path)}catch(e){S.warn("Browse failed",e),U("Could not reach the backend to browse folders.")}finally{z(!1)}},[]);(0,n.useEffect)(()=>{t?D(T||void 0):(W(null),U(null))},[t,T,D]);let L=e=>{I(e),E()};return(0,l.jsxs)(r.A,{open:t,onClose:E,maxWidth:"sm",fullWidth:!0,children:[(0,l.jsx)(o.A,{children:a}),(0,l.jsxs)(s.A,{dividers:!0,sx:{display:"flex",flexDirection:"column",gap:1.5},children:[(0,l.jsxs)(i.default,{sx:{display:"flex",alignItems:"center",gap:1},children:[(0,l.jsx)(d.A,{title:"Up one folder",children:(0,l.jsx)("span",{children:(0,l.jsx)(c.A,{size:"small",disabled:!(null==F?void 0:F.parent)||O,onClick:()=>(null==F?void 0:F.parent)&&void D(F.parent),children:(0,l.jsx)(k.A,{fontSize:"small"})})})}),(0,l.jsx)(d.A,{title:"Home folder",children:(0,l.jsx)("span",{children:(0,l.jsx)(c.A,{size:"small",disabled:O,onClick:()=>void D(),children:(0,l.jsx)(C.A,{fontSize:"small"})})})}),(0,l.jsx)(u.A,{fullWidth:!0,size:"small",value:P,onChange:e=>R(e.target.value),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),D(P))},placeholder:"Type a path and press Enter"})]}),F&&F.drives.length>0&&(0,l.jsx)(i.default,{sx:{display:"flex",gap:.75,flexWrap:"wrap"},children:F.drives.map(e=>(0,l.jsx)(h.A,{label:e,size:"small",variant:F.path.toLowerCase().startsWith(e.toLowerCase())?"filled":"outlined",onClick:()=>void D(e)},e))}),M&&(0,l.jsx)(x.A,{severity:"error",children:M}),(0,l.jsxs)(i.default,{sx:{minHeight:240,maxHeight:"45vh",overflow:"auto",border:1,borderColor:"divider",borderRadius:1},children:[O&&(0,l.jsx)(i.default,{sx:{display:"flex",justifyContent:"center",py:4},children:(0,l.jsx)(p.default,{size:24})}),!O&&F&&0===F.entries.length&&(0,l.jsx)(f.default,{variant:"body2",color:"text.secondary",sx:{p:2},children:"This folder is empty."}),!O&&(0,l.jsx)(m.A,{dense:!0,disablePadding:!0,children:null==F?void 0:F.entries.map(e=>(0,l.jsxs)(g.A,{disabled:!e.isDirectory&&!N,onClick:()=>e.isDirectory?void D(e.path):L(e.path),children:[(0,l.jsx)(y.A,{sx:{minWidth:34},children:e.isDirectory?(0,l.jsx)(b.A,{fontSize:"small",color:"primary"}):(0,l.jsx)(A.A,{fontSize:"small"})}),(0,l.jsx)(w.A,{primary:e.name,primaryTypographyProps:{noWrap:!0}})]},e.path))})]})]}),(0,l.jsxs)(v.A,{children:[(0,l.jsx)(j.A,{onClick:E,children:"Cancel"}),(0,l.jsx)(j.A,{variant:"contained",disabled:!F||O,onClick:()=>F&&L(F.path),children:"Select this folder"})]})]})}},90057:(e,t,a)=>{"use strict";a.d(t,{g:()=>o});var l=a(74879);let n=(0,a(87021).h)("frontend/services/flow/index");class r{async loadFlows(){n.debug("loadFlows: Entering method");try{if(this.flowsCache)return n.debug("loadFlows: Using cached flows",{count:this.flowsCache.length}),this.flowsCache;let e=await fetch("/api/flow");if(!e.ok){let t=await e.json();throw Error(t.error||"Failed to load flows")}let t=await e.json();return n.debug("loadFlows: Loaded flows from API",{count:t.length}),this.flowsCache=t,t}catch(e){return n.warn("loadFlows: Failed to load flows:",e),[]}}async getFlow(e){n.debug("getFlow: Entering method",{flowId:e});try{if(this.flowsCache){let t=this.flowsCache.find(t=>t.id===e);if(t)return n.debug("getFlow: Using cached flow",{flowId:e}),t}let t=await fetch("/api/flow/".concat(encodeURIComponent(e)));if(!t.ok){if(404===t.status)return n.debug("getFlow: Flow ".concat(e," not found")),null;let a=await t.json();throw Error(a.error||"Failed to get flow: ".concat(e))}let a=await t.json();return n.debug("getFlow: Retrieved flow from API",{flowId:e}),a}catch(t){return n.warn("getFlow: Failed to get flow ".concat(e,":"),t),null}}async addFlow(e){n.debug("addFlow: Entering method",{flowId:e.id,flowName:e.name,nodeCount:e.nodes.length,edgeCount:e.edges.length});try{let t=await fetch("/api/flow",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});if(!t.ok){let e=await t.json();return{success:!1,error:e.error||"Failed to add flow"}}let a=await t.json();return this.flowsCache&&this.flowsCache.push(a),n.debug("addFlow: Flow added successfully",{flowId:e.id}),{success:!0}}catch(e){return n.warn("addFlow: Failed to add flow:",e),{success:!1,error:e instanceof Error?e.message:"Failed to add flow"}}}async updateFlow(e){n.debug("updateFlow: Entering method",{flowId:e.id,flowName:e.name,nodeCount:e.nodes.length,edgeCount:e.edges.length});try{let t=await fetch("/api/flow/".concat(encodeURIComponent(e.id)),{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});if(!t.ok){let e=await t.json();return{success:!1,error:e.error||"Failed to update flow"}}let a=await t.json();if(this.flowsCache){let t=this.flowsCache.findIndex(t=>t.id===e.id);t>=0?this.flowsCache[t]=a:this.flowsCache.push(a)}return n.debug("updateFlow: Flow updated successfully",{flowId:e.id}),{success:!0}}catch(e){return n.warn("updateFlow: Failed to update flow:",e),{success:!1,error:e instanceof Error?e.message:"Failed to update flow"}}}async deleteFlow(e){n.debug("deleteFlow: Entering method",{flowId:e});try{let t=await fetch("/api/flow/".concat(encodeURIComponent(e)),{method:"DELETE"});if(!t.ok){let e=await t.json();return{success:!1,error:e.error||"Failed to delete flow"}}return this.flowsCache&&(this.flowsCache=this.flowsCache.filter(t=>t.id!==e)),n.debug("deleteFlow: Flow deleted successfully",{flowId:e}),{success:!0}}catch(e){return n.warn("deleteFlow: Failed to delete flow:",e),{success:!1,error:e instanceof Error?e.message:"Failed to delete flow"}}}createNode(e,t){return n.debug("createNode: Entering method",{type:e,position:t}),{id:(0,l.A)(),type:e,position:t,data:{label:"".concat("mcp"===e?"MCP":e.charAt(0).toUpperCase()+e.slice(1)," Node"),type:e,properties:{}}}}createStartNode(){return{id:(0,l.A)(),type:"start",position:{x:250,y:150},data:{label:"Start Node",type:"start",properties:{promptTemplate:""}}}}createNewFlow(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"NewFlow";return n.debug("createNewFlow: Entering method",{name:e}),{id:(0,l.A)(),name:e,nodes:[this.createStartNode()],edges:[]}}createHistoryEntry(e,t){return n.debug("createHistoryEntry: Entering method"),{nodes:[...e],edges:[...t]}}generateSampleFlow(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"Sample Flow";return n.debug("generateSampleFlow: Entering method",{name:e}),{id:(0,l.A)(),name:e,nodes:[{id:"1",type:"start",position:{x:250,y:50},data:{label:"Start Node",type:"start",properties:{prompt:"Enter your query here",systemMessage:"You are a helpful assistant",temperature:0}}},{id:"2",type:"process",position:{x:250,y:200},data:{label:"Process Node",type:"process",properties:{operation:"transform",enabled:!0}}},{id:"3",type:"finish",position:{x:250,y:350},data:{label:"Finish Node",type:"finish",properties:{format:"json",template:'{ "result": {{data}} }'}}},{id:"4",type:"mcp",position:{x:450,y:200},data:{label:"MCP Node",type:"mcp",properties:{channels:2,mode:"parallel"}}}],edges:[{id:"e1-2",source:"1",target:"2",type:"custom"},{id:"e2-3",source:"2",target:"3",type:"custom"}]}}constructor(){this.flowsCache=null}}let o=new r},95271:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>eF});var l=a(95155),n=a(94049),r=a(12115),o=a(25635),s=a(99944),i=a(9957),d=a(70690),c=a(2778),u=a(52363),h=a(65036),x=a(75912),p=a(86946),f=a(76530),m=a(78470),g=a(41983),y=a(87021);let w=(0,y.h)("frontend/services/plannedExecutions");class v{async list(){try{let e=await fetch("/api/planned-executions");if(!e.ok)throw Error("HTTP ".concat(e.status));return await e.json()}catch(e){return w.warn("Failed to list planned executions",e),{paused:!1,executions:[]}}}async create(e){try{let t=await fetch("/api/planned-executions",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)}),a=await t.json();if(!t.ok)return{success:!1,error:(null==a?void 0:a.error)||"HTTP ".concat(t.status)};return{success:!0,execution:a.execution}}catch(e){return{success:!1,error:e instanceof Error?e.message:"Request failed"}}}async update(e,t){try{let a=await fetch("/api/planned-executions/".concat(e),{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)}),l=await a.json();if(!a.ok)return{success:!1,error:(null==l?void 0:l.error)||"HTTP ".concat(a.status)};return{success:!0,execution:l.execution}}catch(e){return{success:!1,error:e instanceof Error?e.message:"Request failed"}}}async delete(e){try{let t=await fetch("/api/planned-executions/".concat(e),{method:"DELETE"});if(!t.ok){let e=await t.json().catch(()=>null);return{success:!1,error:(null==e?void 0:e.error)||"HTTP ".concat(t.status)}}return{success:!0}}catch(e){return{success:!1,error:e instanceof Error?e.message:"Request failed"}}}async setPaused(e){try{let t=await fetch("/api/planned-executions",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({paused:e})});if(!t.ok){let e=await t.json().catch(()=>null);return{success:!1,error:(null==e?void 0:e.error)||"HTTP ".concat(t.status)}}return{success:!0}}catch(e){return{success:!1,error:e instanceof Error?e.message:"Request failed"}}}async runNow(e){try{let t=await fetch("/api/planned-executions/".concat(e,"/run"),{method:"POST"}),a=await t.json();if(!t.ok)return{success:!1,error:(null==a?void 0:a.error)||"HTTP ".concat(t.status)};return{success:!0,record:a.record}}catch(e){return{success:!1,error:e instanceof Error?e.message:"Request failed"}}}async loadRuns(e){try{let t=await fetch("/api/planned-executions/".concat(e,"/runs"));if(!t.ok)throw Error("HTTP ".concat(t.status));let a=await t.json();return Array.isArray(null==a?void 0:a.runs)?a.runs:[]}catch(t){return w.warn("Failed to load runs for ".concat(e),t),[]}}async previewSchedule(e,t){try{let a=await fetch("/api/planned-executions/preview-schedule",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({cron:e,timezone:t})});if(!a.ok)throw Error("HTTP ".concat(a.status));return await a.json()}catch(e){return{valid:!1,error:e instanceof Error?e.message:"Preview failed",nextRuns:[]}}}}let j=new v;var b=a(2300),A=a(28548),k=a(4474),C=a(50430),S=a(55406),N=a(14915),T=a(4484),E=a(63186),I=a(62962),F=a(3713);let W=e=>String(e).padStart(2,"0"),P=e=>{switch(e){case"completed":return"success.main";case"error":return"error.main";case"skipped":return"warning.main";default:return"transparent"}},R=e=>e?new Date(e).toLocaleDateString(void 0,{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}):"",O=e=>{if(!e.finishedAt)return"";let t=new Date(e.finishedAt).getTime()-new Date(e.firedAt).getTime();return t<1e3?"<1s":t<6e4?"".concat(Math.round(t/1e3),"s"):"".concat(Math.round(t/6e4),"min")},z=e=>{var t;let{entry:a,onEdit:s,onDelete:p,onToggleEnabled:f,onRanNow:y}=e,{execution:w,status:v,lastRun:z}=a,[M,U]=(0,r.useState)(!1),[D,L]=(0,r.useState)(null),[H,J]=(0,r.useState)(!1),[q,$]=(0,r.useState)(!1),[B,G]=(0,r.useState)(null),_=(0,r.useCallback)(async()=>{J(!0),L([...await j.loadRuns(w.id)].reverse()),J(!1)},[w.id]);(0,r.useEffect)(()=>{M&&_()},[M,_,null==z?void 0:z.runId]);let K=async()=>{$(!0),await j.runNow(w.id),$(!1),M&&_(),y()};return(0,l.jsxs)(b.A,{variant:"outlined",sx:{p:2},children:[(0,l.jsxs)(n.default,{sx:{display:"flex",alignItems:"center",gap:1.5,flexWrap:"wrap"},children:[(0,l.jsxs)(n.default,{sx:{flexGrow:1,minWidth:220},children:[(0,l.jsxs)(n.default,{sx:{display:"flex",alignItems:"center",gap:1,flexWrap:"wrap"},children:[(0,l.jsx)(o.default,{variant:"subtitle1",sx:{fontWeight:600},children:w.name}),(0,l.jsx)(A.A,{size:"small",label:function(e){switch(e.type){case"schedule":{var t;let a,l=(t=e.cron,(a=/^\*\/(\d+) \* \* \* \* \*$/.exec(t))?"Every ".concat(a[1],"s"):(a=/^\*\/(\d+) \* \* \* \*$/.exec(t))?"Every ".concat(a[1]," min"):(a=/^0 \*\/(\d+) \* \* \*$/.exec(t))?1===Number(a[1])?"Every hour":"Every ".concat(a[1]," hours"):(a=/^(\d+) (\d+) \* \* \*$/.exec(t))?"Daily at ".concat(W(Number(a[2])),":").concat(W(Number(a[1]))):(a=/^(\d+) (\d+) \* \* 1-5$/.exec(t))?"Weekdays at ".concat(W(Number(a[2])),":").concat(W(Number(a[1]))):null);return null!=l?l:"Schedule: ".concat(e.cron)}case"webhook":return"Webhook";case"file-watch":return"Watching ".concat(e.path);case"mcp-poll":return"Watching ".concat(e.serverName," › ").concat(e.toolName);case"url-watch":try{return"Watching ".concat(new URL(e.url).hostname)}catch(e){return"Watching a URL"}default:return"Trigger"}}(w.trigger)}),!w.enabled&&(0,l.jsx)(A.A,{size:"small",label:"Off",variant:"outlined"})]}),v.running?(0,l.jsxs)(n.default,{sx:{display:"flex",alignItems:"center",gap:.75,mt:.5},children:[(0,l.jsx)(k.default,{size:12,thickness:6}),(0,l.jsxs)(o.default,{variant:"body2",color:"text.secondary",children:["Running…",v.runningSince?" — started ".concat(R(v.runningSince)):""]})]}):(0,l.jsxs)(o.default,{variant:"body2",color:"text.secondary",sx:{mt:.5},children:[v.nextRun&&w.enabled?"Next run: ".concat(R(v.nextRun)):w.enabled&&!v.armed?"Not armed":"",v.lastTriggerError?" — trigger error: ".concat(v.lastTriggerError):""]}),z&&(0,l.jsxs)(n.default,{sx:{display:"flex",alignItems:"center",gap:.75,mt:.5},children:[(0,l.jsx)(m.A,{title:z.status,children:(0,l.jsx)(n.default,{sx:{width:10,height:10,borderRadius:"50%",bgcolor:P(z.status),flexShrink:0}})}),(0,l.jsxs)(o.default,{variant:"body2",color:"text.secondary",children:["Last run ",R(z.firedAt),"error"===z.status&&z.error?" — ".concat(z.error):""]})]})]}),(0,l.jsx)(m.A,{title:"Run now",children:(0,l.jsx)("span",{children:(0,l.jsx)(g.A,{onClick:K,disabled:q,color:"primary",children:q?(0,l.jsx)(k.default,{size:20}):(0,l.jsx)(S.A,{})})})}),(0,l.jsx)(m.A,{title:w.enabled?"Turn off":"Turn on",children:(0,l.jsx)(i.A,{checked:w.enabled,onChange:e=>f(e.target.checked)})}),(0,l.jsx)(m.A,{title:"Edit",children:(0,l.jsx)(g.A,{onClick:s,children:(0,l.jsx)(N.A,{})})}),(0,l.jsx)(m.A,{title:"Delete",children:(0,l.jsx)(g.A,{onClick:p,children:(0,l.jsx)(T.A,{})})}),(0,l.jsx)(m.A,{title:M?"Hide run history":"Show run history",children:(0,l.jsx)(g.A,{onClick:()=>U(e=>!e),children:M?(0,l.jsx)(I.A,{}):(0,l.jsx)(E.A,{})})})]}),(0,l.jsx)(C.A,{in:M,timeout:"auto",unmountOnExit:!0,children:(0,l.jsxs)(n.default,{sx:{mt:2,borderTop:1,borderColor:"divider",pt:1.5},children:[H&&!D&&(0,l.jsx)(o.default,{variant:"body2",color:"text.secondary",children:"Loading runs…"}),D&&0===D.length&&(0,l.jsx)(o.default,{variant:"body2",color:"text.secondary",children:"No runs yet. Use the play button to try it now."}),null==D?void 0:D.map(e=>{var t;return(0,l.jsxs)(n.default,{sx:{display:"flex",gap:1,py:.75,alignItems:"flex-start","&:hover .run-detail-button":{opacity:1}},children:[(0,l.jsx)(n.default,{sx:{width:10,height:10,borderRadius:"50%",bgcolor:P(e.status),mt:"5px",flexShrink:0}}),(0,l.jsxs)(n.default,{sx:{minWidth:0,flexGrow:1},children:[(0,l.jsxs)(o.default,{variant:"body2",children:[R(e.firedAt),O(e)?" \xb7 ".concat(O(e)):""," \xb7 ",e.triggerSummary,(null==(t=e.usage)?void 0:t.totalTokens)?" \xb7 ".concat(e.usage.totalTokens.toLocaleString()," tokens"):""]}),e.error&&(0,l.jsx)(o.default,{variant:"body2",color:"error",children:e.error}),e.outputText&&(0,l.jsx)(o.default,{variant:"body2",color:"text.secondary",sx:{whiteSpace:"pre-wrap",display:"-webkit-box",WebkitLineClamp:3,WebkitBoxOrient:"vertical",overflow:"hidden"},children:e.outputText})]}),(0,l.jsx)(m.A,{title:"Show full output",children:(0,l.jsx)(g.A,{className:"run-detail-button",size:"small",onClick:()=>G(e),sx:{opacity:{xs:1,md:.35},transition:"opacity 120ms",flexShrink:0},children:(0,l.jsx)(F.A,{fontSize:"inherit"})})})]},e.runId)})]})}),(0,l.jsxs)(c.A,{open:null!==B,onClose:()=>G(null),maxWidth:"md",fullWidth:!0,children:[(0,l.jsx)(u.A,{component:"div",children:(0,l.jsxs)(n.default,{sx:{display:"flex",alignItems:"center",gap:1},children:[(0,l.jsx)(n.default,{sx:{width:10,height:10,borderRadius:"50%",bgcolor:B?P(B.status):"transparent",flexShrink:0}}),(0,l.jsxs)(o.default,{variant:"h6",children:[w.name," — ",B?R(B.firedAt):""]})]})}),(0,l.jsx)(h.A,{dividers:!0,children:B&&(0,l.jsxs)(l.Fragment,{children:[(0,l.jsxs)(o.default,{variant:"body2",color:"text.secondary",sx:{mb:1.5},children:[B.status,O(B)?" \xb7 ".concat(O(B)):""," \xb7 ",B.triggerSummary,(null==(t=B.usage)?void 0:t.totalTokens)?" \xb7 ".concat(B.usage.totalTokens.toLocaleString()," tokens (").concat(B.usage.promptTokens.toLocaleString()," in / ").concat(B.usage.completionTokens.toLocaleString()," out)"):""]}),B.error&&(0,l.jsx)(o.default,{variant:"body2",color:"error",sx:{mb:1.5,whiteSpace:"pre-wrap"},children:B.error}),B.outputText?(0,l.jsx)(n.default,{sx:{whiteSpace:"pre-wrap",wordBreak:"break-word",bgcolor:"action.hover",borderRadius:1,p:2,fontSize:14,maxHeight:"55vh",overflow:"auto"},children:B.outputText}):!B.error&&(0,l.jsx)(o.default,{variant:"body2",color:"text.secondary",children:"This run produced no output text."})]})}),(0,l.jsx)(x.A,{children:(0,l.jsx)(d.A,{onClick:()=>G(null),children:"Close"})})]})]})};var M=a(21067),U=a(9562),D=a(52641),L=a(51221),H=a(55606),J=a(86973),q=a(22003),$=a(77073),B=a(26922),G=a(40520),_=a(79299),K=a(22590),Q=a(53657),X=a(90057),Y=a(36741);let V=e=>{let{selected:t,icon:a,title:r,description:s,onClick:i}=e;return(0,l.jsxs)(n.default,{role:"radio","aria-checked":t,tabIndex:0,onClick:i,onKeyDown:e=>{("Enter"===e.key||" "===e.key)&&(e.preventDefault(),i())},sx:{flex:1,minWidth:200,position:"relative",p:2,borderRadius:2,border:2,borderColor:t?"primary.main":"divider",bgcolor:t?"action.selected":"background.paper",cursor:"pointer",transition:"border-color 120ms, background-color 120ms","&:hover":{borderColor:t?"primary.main":"text.disabled"},outline:"none","&:focus-visible":{boxShadow:e=>"0 0 0 3px ".concat(e.palette.primary.light)}},children:[t&&(0,l.jsx)(Y.A,{color:"primary",fontSize:"small",sx:{position:"absolute",top:8,right:8}}),(0,l.jsxs)(n.default,{sx:{display:"flex",alignItems:"center",gap:1,mb:.5,color:t?"primary.main":"text.secondary"},children:[a,(0,l.jsx)(o.default,{variant:"subtitle1",sx:{fontWeight:600,color:"text.primary"},children:r})]}),(0,l.jsx)(o.default,{variant:"body2",color:"text.secondary",children:s})]})};var Z=a(22822),ee=a(98267),et=a(20537),ea=a(37960);let el=e=>String(e).padStart(2,"0"),en=e=>{let{cron:t,timezone:a,onChange:i,verb:d="Runs",catchUp:c,onCatchUpChange:u}=e,h=(0,r.useMemo)(()=>(function(e){let t=/^\*\/(\d+) \* \* \* \* \*$/.exec(e);return t?{mode:"seconds",n:Number(t[1]),time:"09:00"}:(t=/^\*\/(\d+) \* \* \* \*$/.exec(e))?{mode:"minutes",n:Number(t[1]),time:"09:00"}:(t=/^0 \*\/(\d+) \* \* \*$/.exec(e))?{mode:"hours",n:Number(t[1]),time:"09:00"}:(t=/^(\d+) (\d+) \* \* \*$/.exec(e))?{mode:"daily",n:1,time:"".concat(el(Number(t[2])),":").concat(el(Number(t[1])))}:(t=/^(\d+) (\d+) \* \* 1-5$/.exec(e))?{mode:"weekdays",n:1,time:"".concat(el(Number(t[2])),":").concat(el(Number(t[1])))}:{mode:"custom",n:15,time:"09:00"}})(t),[]),[x,p]=(0,r.useState)(h.mode),[f,m]=(0,r.useState)(h.n),[g,y]=(0,r.useState)(h.time),[w,v]=(0,r.useState)(t),[b,A]=(0,r.useState)(null),k=function(e,t,a,l){let[n,r]=a.split(":").map(Number);switch(e){case"seconds":return"*/".concat(Math.max(1,Math.min(59,Math.floor(t)||1))," * * * * *");case"minutes":return"*/".concat(Math.max(1,Math.min(59,Math.floor(t)||1))," * * * *");case"hours":return"0 */".concat(Math.max(1,Math.min(23,Math.floor(t)||1))," * * *");case"daily":return"".concat(r||0," ").concat(n||0," * * *");case"weekdays":return"".concat(r||0," ").concat(n||0," * * 1-5");default:return l}}(x,f,g,w);return(0,r.useEffect)(()=>{k!==t&&i({cron:k,timezone:a})},[k]),(0,r.useEffect)(()=>{let e=!1,t=setTimeout(()=>{j.previewSchedule(k,a).then(t=>{e||A(t)})},300);return()=>{e=!0,clearTimeout(t)}},[k,a]),(0,l.jsxs)(n.default,{children:[(0,l.jsxs)(n.default,{sx:{display:"flex",gap:2,flexWrap:"wrap",alignItems:"center",mt:1},children:[(0,l.jsxs)(D.A,{sx:{minWidth:180},children:[(0,l.jsx)(L.A,{id:"schedule-preset-label",children:d}),(0,l.jsxs)(H.A,{labelId:"schedule-preset-label",label:d,value:x,onChange:e=>p(e.target.value),children:[(0,l.jsx)(J.A,{value:"seconds",children:"Every N seconds"}),(0,l.jsx)(J.A,{value:"minutes",children:"Every N minutes"}),(0,l.jsx)(J.A,{value:"hours",children:"Every N hours"}),(0,l.jsx)(J.A,{value:"daily",children:"Daily at a time"}),(0,l.jsx)(J.A,{value:"weekdays",children:"Weekdays at a time"}),(0,l.jsx)(J.A,{value:"custom",children:"Custom (cron)"})]})]}),("seconds"===x||"minutes"===x||"hours"===x)&&(0,l.jsx)(U.A,{label:"seconds"===x?"Seconds":"minutes"===x?"Minutes":"Hours",type:"number",value:f,onChange:e=>m(Number(e.target.value)),inputProps:{min:1,max:"hours"===x?23:59},sx:{width:120}}),("daily"===x||"weekdays"===x)&&(0,l.jsx)(U.A,{label:"Time",type:"time",value:g,onChange:e=>y(e.target.value),sx:{width:150},InputLabelProps:{shrink:!0}}),"custom"===x&&(0,l.jsx)(U.A,{label:"Cron pattern",value:w,onChange:e=>v(e.target.value),sx:{minWidth:220},placeholder:"*/15 * * * *"})]}),b&&!b.valid&&(0,l.jsx)(q.A,{severity:"error",sx:{mt:2},children:b.error||"This schedule is not valid."}),b&&b.valid&&b.nextRuns.length>0&&(0,l.jsxs)(o.default,{variant:"body2",color:"text.secondary",sx:{mt:2},children:["Next: ",b.nextRuns.map(e=>new Date(e).toLocaleString()).join(" \xb7 ")]}),u&&(0,l.jsx)(s.A,{sx:{mt:1,display:"flex"},control:(0,l.jsx)(Z.A,{checked:!0===c,onChange:e=>u(e.target.checked)}),label:"If FLUJO was closed at a scheduled time, run once on startup"}),(0,l.jsxs)(ee.A,{disableGutters:!0,elevation:0,sx:{mt:1,"&:before":{display:"none"}},children:[(0,l.jsx)(et.A,{expandIcon:(0,l.jsx)(E.A,{}),sx:{px:0},children:(0,l.jsx)(o.default,{variant:"body2",color:"text.secondary",children:"Advanced"})}),(0,l.jsx)(ea.A,{sx:{px:0},children:(0,l.jsxs)(n.default,{sx:{display:"flex",gap:2,flexWrap:"wrap"},children:[(0,l.jsx)(U.A,{label:"Timezone (optional)",value:a||"",onChange:e=>i({cron:k,timezone:e.target.value||void 0}),placeholder:"e.g. Europe/Berlin",helperText:"IANA timezone name. Empty = this computer's timezone.",sx:{minWidth:260}}),(0,l.jsx)(U.A,{label:"Generated cron pattern",value:k,InputProps:{readOnly:"custom"!==x},onChange:e=>{p("custom"),v(e.target.value)},helperText:"Editing switches to Custom mode.",sx:{minWidth:220}})]})})]})]})};var er=a(52277),eo=a(9693);let es=e=>{let{config:t,onChange:a,executionId:i,saved:c}=e,[u,h]=(0,r.useState)(null),x=window.location.origin,p="".concat(x,"/api/webhooks/").concat(i),f=async(e,t)=>{try{await navigator.clipboard.writeText(t),h(e),setTimeout(()=>h(null),1500)}catch(e){}};return(0,l.jsxs)(n.default,{sx:{mt:1},children:[!c&&(0,l.jsx)(q.A,{severity:"info",sx:{mb:2},children:"This URL and token are ready to copy now — they become active when you save."}),(0,l.jsxs)(n.default,{sx:{display:"flex",alignItems:"center",gap:1},children:[(0,l.jsx)(U.A,{fullWidth:!0,label:"Webhook URL",value:p,InputProps:{readOnly:!0},size:"small"}),(0,l.jsx)(m.A,{title:"Copy URL",children:(0,l.jsx)(g.A,{onClick:()=>f("url",p),children:"url"===u?(0,l.jsx)(eo.A,{color:"success"}):(0,l.jsx)(er.A,{})})})]}),(0,l.jsxs)(n.default,{sx:{display:"flex",alignItems:"center",gap:1,mt:2},children:[(0,l.jsx)(U.A,{fullWidth:!0,label:"Secret token",value:t.token,InputProps:{readOnly:!0},size:"small",type:"password"}),(0,l.jsx)(m.A,{title:"Copy token",children:(0,l.jsx)(g.A,{onClick:()=>f("token",t.token),disabled:!t.token,children:"token"===u?(0,l.jsx)(eo.A,{color:"success"}):(0,l.jsx)(er.A,{})})}),(0,l.jsx)(d.A,{size:"small",onClick:()=>a({...t,token:crypto.randomUUID()}),sx:{whiteSpace:"nowrap"},children:"New token"})]}),(0,l.jsx)(o.default,{variant:"caption",color:"text.secondary",children:c?"A new token takes effect when you save — callers using the old one are cut off.":""}),(0,l.jsxs)(o.default,{variant:"body2",color:"text.secondary",sx:{mt:1.5},children:["Callers send a POST with the token in the ",(0,l.jsx)("code",{children:"X-Flujo-Token"})," ","header (or ",(0,l.jsx)("code",{children:"?token=…"}),"). The request body becomes part of the flow's input — treat it as untrusted data in your prompt."]}),(0,l.jsx)(s.A,{sx:{mt:1,display:"flex"},control:(0,l.jsx)(Z.A,{checked:!0===t.allowExternal,onChange:e=>a({...t,allowExternal:e.target.checked})}),label:"Allow calls from other machines (default: this computer only)"}),t.allowExternal&&(0,l.jsx)(q.A,{severity:"warning",children:"FLUJO assumes a single user on this machine. If you expose it beyond localhost (port forwarding, tunnels), securing that access is your responsibility — anyone with the URL and token can run this flow."})]})};var ei=a(56422),ed=a(17325),ec=a(80007),eu=a(62640);let eh=[{value:"add",label:"A file appears"},{value:"change",label:"A file changes"},{value:"unlink",label:"A file is deleted"}],ex=e=>{var t;let{config:a,onChange:i}=e,[d,c]=(0,r.useState)(!1);return(0,l.jsxs)(n.default,{sx:{mt:1},children:[(0,l.jsx)(U.A,{fullWidth:!0,label:"Folder (or file) to watch",value:a.path,onChange:e=>i({...a,path:e.target.value}),placeholder:"e.g. C:\\Users\\me\\Documents\\inbox",margin:"normal",InputProps:{endAdornment:(0,l.jsx)(ei.A,{position:"end",children:(0,l.jsx)(m.A,{title:"Browse folders (on the FLUJO machine)",children:(0,l.jsx)(g.A,{edge:"end",onClick:()=>c(!0),children:(0,l.jsx)(ec.A,{})})})})}}),(0,l.jsx)(eu.A,{open:d,title:"Choose what to watch",selectFiles:!0,initialPath:a.path||void 0,onClose:()=>c(!1),onSelect:e=>i({...a,path:e})}),(0,l.jsx)(U.A,{fullWidth:!0,label:"Only files matching (optional)",value:a.glob||"",onChange:e=>i({...a,glob:e.target.value||void 0}),placeholder:"e.g. *.pdf or reports/**/*.csv",helperText:"Simple patterns: * matches within a folder, ** across folders, ? one character.",margin:"normal"}),(0,l.jsx)(o.default,{variant:"subtitle2",sx:{mt:1},children:"Run when…"}),(0,l.jsx)(ed.A,{row:!0,children:eh.map(e=>(0,l.jsx)(s.A,{control:(0,l.jsx)(Z.A,{checked:a.events.includes(e.value),onChange:t=>((e,t)=>{let l=t?[...a.events,e]:a.events.filter(t=>t!==e);i({...a,events:l})})(e.value,t.target.checked)}),label:e.label},e.value))}),(0,l.jsx)(q.A,{severity:"info",sx:{mt:1},children:"Bursts are batched: many files changing at once produce one run with all changes listed. If this flow writes into the watched folder, it will trigger itself in a loop — point its output somewhere else."}),(0,l.jsxs)(ee.A,{disableGutters:!0,elevation:0,sx:{mt:1,"&:before":{display:"none"}},children:[(0,l.jsx)(et.A,{expandIcon:(0,l.jsx)(E.A,{}),sx:{px:0},children:(0,l.jsx)(o.default,{variant:"body2",color:"text.secondary",children:"Advanced"})}),(0,l.jsx)(ea.A,{sx:{px:0},children:(0,l.jsx)(U.A,{label:"Quiet window (ms)",type:"number",value:null!=(t=a.debounceMs)?t:2e3,onChange:e=>i({...a,debounceMs:Math.max(0,Number(e.target.value)||0)}),helperText:"How long to wait after the last change before running.",inputProps:{min:0,step:500},sx:{width:220}})})]})]})};var ep=a(41356),ef=a(24610),em=a(17897),eg=a(43076),ey=a(17427);let ew=(0,y.h)("frontend/components/PlannedExecutions/WatchToolPanel"),ev=e=>{var t,a;let{config:s,onChange:i}=e,[c,u]=(0,r.useState)([]),[h,x]=(0,r.useState)([]),[p,f]=(0,r.useState)(!1),[m,g]=(0,r.useState)(Object.keys(s.args||{}).length>0?JSON.stringify(s.args,null,2):""),[y,w]=(0,r.useState)(null),[v,j]=(0,r.useState)(!1),[b,A]=(0,r.useState)(null),[C,S]=(0,r.useState)(null),[N,T]=(0,r.useState)([]),[E,I]=(0,r.useState)([]);(0,r.useEffect)(()=>{let e=!1;return em.S.loadServerConfigs().then(t=>{e||(Array.isArray(t)?u(t.filter(e=>!e.disabled).map(e=>e.name)):(ew.warn("Failed to load MCP servers for watch-tool panel",t),u([])))}),()=>{e=!0}},[]),(0,r.useEffect)(()=>{if(!s.serverName)return void x([]);let e=!1;return f(!0),em.S.listServerTools(s.serverName).then(t=>{let{tools:a}=t;e||x(a||[])}).finally(()=>{e||f(!1)}),()=>{e=!0}},[s.serverName]),(0,r.useEffect)(()=>{let e=!1;return eg.N.loadModels().then(t=>{e||T(Array.isArray(t)?t:[])}).catch(()=>{e||T([])}),X.g.loadFlows().then(t=>{e||I(t||[])}).catch(()=>{e||I([])}),()=>{e=!0}},[]);let F=async()=>{j(!0),A(null),S(null);try{let a=await em.S.callTool(s.serverName,s.toolName,s.args||{});if(null==a?void 0:a.error)S("string"==typeof a.error?a.error:"Tool call failed");else{var e,t;let l=null!=(e=null==a?void 0:a.data)?e:a,n=null!=(t=JSON.stringify(l,null,2))?t:"";A(n.length>6e3?"".concat(n.slice(0,6e3),"\n… (truncated)"):n)}}catch(e){S(e instanceof Error?e.message:"Tool call failed")}finally{j(!1)}},W=s.evaluate,P=h.find(e=>e.name===s.toolName);return(0,l.jsxs)(n.default,{sx:{mt:1},children:[(0,l.jsxs)(n.default,{sx:{display:"flex",gap:2,flexWrap:"wrap"},children:[(0,l.jsxs)(D.A,{sx:{minWidth:220,flex:1},margin:"normal",children:[(0,l.jsx)(L.A,{id:"watch-server-label",children:"Server"}),(0,l.jsxs)(H.A,{labelId:"watch-server-label",label:"Server",value:c.includes(s.serverName)?s.serverName:"",onChange:e=>i({...s,serverName:e.target.value,toolName:""}),children:[0===c.length&&(0,l.jsx)(J.A,{value:"",disabled:!0,children:"No MCP servers configured"}),c.map(e=>(0,l.jsx)(J.A,{value:e,children:e},e))]})]}),(0,l.jsxs)(D.A,{sx:{minWidth:220,flex:1},margin:"normal",disabled:!s.serverName,children:[(0,l.jsx)(L.A,{id:"watch-tool-label",children:"Tool"}),(0,l.jsxs)(H.A,{labelId:"watch-tool-label",label:"Tool",value:h.some(e=>e.name===s.toolName)?s.toolName:"",onChange:e=>i({...s,toolName:e.target.value,args:{}}),children:[0===h.length&&(0,l.jsx)(J.A,{value:"",disabled:!0,children:p?"Loading tools…":"Pick a server first"}),h.map(e=>(0,l.jsx)(J.A,{value:e.name,children:e.name},e.name))]})]})]}),(0,l.jsx)(o.default,{variant:"subtitle2",sx:{mt:1},children:"How often to check"}),(0,l.jsx)(en,{verb:"Check",cron:null!=(t=s.cron)?t:function(e){let t=Math.max(5,Math.round((null!=e?e:6e4)/1e3));if(t<60)return"*/".concat(t," * * * * *");let a=Math.max(1,Math.round(t/60));if(a<60)return"*/".concat(a," * * * *");let l=Math.max(1,Math.min(23,Math.round(a/60)));return"0 */".concat(l," * * *")}(s.intervalMs),timezone:s.timezone,onChange:e=>{let{cron:t,timezone:a}=e;return i({...s,cron:t,timezone:a})}}),P?(0,l.jsxs)(n.default,{sx:{my:1.5},children:[(0,l.jsx)(o.default,{variant:"subtitle2",sx:{mb:1.5},children:"Tool parameters — sent on every check"}),(0,l.jsx)(ey.A,{schema:P.inputSchema,values:s.args||{},onChange:e=>i({...s,args:e})})]}):(0,l.jsx)(U.A,{fullWidth:!0,label:"Tool arguments (JSON, optional)",value:m,onChange:e=>(e=>{if(g(e),!e.trim()){w(null),i({...s,args:{}});return}try{let t=JSON.parse(e);if(null===t||"object"!=typeof t||Array.isArray(t))return void w('Arguments must be a JSON object, e.g. { "query": "…" }');w(null),i({...s,args:t})}catch(e){w("Not valid JSON yet")}})(e.target.value),margin:"normal",multiline:!0,minRows:2,placeholder:'{ "query": "is:unread" }',error:!!y,helperText:null!=y?y:"Sent to the tool on every check.",slotProps:{input:{sx:{fontFamily:"monospace",fontSize:14}}}}),(0,l.jsxs)(n.default,{sx:{display:"flex",alignItems:"center",gap:2,mb:1},children:[(0,l.jsx)(d.A,{variant:"outlined",size:"small",onClick:F,disabled:!s.serverName||!s.toolName||v||!!y,startIcon:v?(0,l.jsx)(k.default,{size:16}):void 0,children:"Test: call the tool now"}),(0,l.jsx)(o.default,{variant:"caption",color:"text.secondary",children:"See what the result looks like — useful for the settings below."})]}),C&&(0,l.jsx)(q.A,{severity:"error",sx:{mb:1},children:C}),b&&(0,l.jsx)(n.default,{component:"pre",sx:{maxHeight:240,overflow:"auto",bgcolor:"action.hover",borderRadius:1,p:1.5,fontSize:12,m:0,mb:1},children:b}),(0,l.jsx)(o.default,{variant:"subtitle2",sx:{mt:2,mb:1},children:"Run the flow when…"}),(0,l.jsxs)(n.default,{role:"radiogroup","aria-label":"Poll condition",sx:{display:"flex",gap:2,flexWrap:"wrap"},children:[(0,l.jsx)(V,{selected:"on-change"===W.mode,onClick:()=>i({...s,evaluate:{mode:"on-change"}}),icon:(0,l.jsx)(ep.A,{}),title:"The result changes",description:"Any difference from the last check runs the flow. Simplest — no setup."}),(0,l.jsx)(V,{selected:"llm-gate"===W.mode||"flow-gate"===W.mode,onClick:()=>{"llm-gate"!==W.mode&&"flow-gate"!==W.mode&&i({...s,evaluate:{mode:"llm-gate",condition:"",modelId:""}})},icon:(0,l.jsx)(ef.A,{}),title:"AI decides",description:"Describe the condition in plain language; a model — or one of your flows — checks the result whenever it changes."})]}),("llm-gate"===W.mode||"flow-gate"===W.mode)&&(0,l.jsxs)(n.default,{sx:{mt:1},children:[(0,l.jsx)(U.A,{fullWidth:!0,label:"Run the flow if…",value:W.condition,onChange:e=>i({...s,evaluate:{...W,condition:e.target.value}}),multiline:!0,minRows:2,margin:"normal",placeholder:"e.g. any email mentions an invoice or a payment reminder"}),(0,l.jsxs)(n.default,{sx:{display:"flex",gap:2,flexWrap:"wrap",alignItems:"flex-start"},children:[(0,l.jsxs)(D.A,{sx:{minWidth:170},children:[(0,l.jsx)(L.A,{id:"gate-checker-label",children:"Checked by"}),(0,l.jsxs)(H.A,{labelId:"gate-checker-label",label:"Checked by",value:W.mode,onChange:e=>{let t=e.target.value;if(t===W.mode)return;let a={condition:W.condition,maxCallsPerDay:W.maxCallsPerDay};i({...s,evaluate:"llm-gate"===t?{mode:t,...a,modelId:""}:{mode:t,...a,flowId:""}})},children:[(0,l.jsx)(J.A,{value:"llm-gate",children:"A model"}),(0,l.jsx)(J.A,{value:"flow-gate",children:"One of my flows"})]})]}),"llm-gate"===W.mode&&(0,l.jsxs)(D.A,{sx:{minWidth:240,flex:1},children:[(0,l.jsx)(L.A,{id:"gate-model-label",children:"Model that checks"}),(0,l.jsxs)(H.A,{labelId:"gate-model-label",label:"Model that checks",value:N.some(e=>e.id===W.modelId)?W.modelId:"",onChange:e=>i({...s,evaluate:{...W,modelId:e.target.value}}),children:[0===N.length&&(0,l.jsx)(J.A,{value:"",disabled:!0,children:"No models configured"}),N.map(e=>(0,l.jsx)(J.A,{value:e.id,children:e.displayName||e.name},e.id))]})]}),"flow-gate"===W.mode&&(0,l.jsxs)(D.A,{sx:{minWidth:240,flex:1},children:[(0,l.jsx)(L.A,{id:"gate-flow-label",children:"Flow that checks"}),(0,l.jsxs)(H.A,{labelId:"gate-flow-label",label:"Flow that checks",value:E.some(e=>e.id===W.flowId)?W.flowId:"",onChange:e=>i({...s,evaluate:{...W,flowId:e.target.value}}),children:[0===E.length&&(0,l.jsx)(J.A,{value:"",disabled:!0,children:"No flows available"}),E.map(e=>(0,l.jsx)(J.A,{value:e.id,children:e.name},e.id))]})]}),(0,l.jsx)(U.A,{label:"Max checks per day",type:"number",value:null!=(a=W.maxCallsPerDay)?a:500,onChange:e=>i({...s,evaluate:{...W,maxCallsPerDay:Math.max(1,Number(e.target.value)||1)}}),inputProps:{min:1},helperText:"Cost guard per check.",sx:{width:180}})]}),(0,l.jsx)(o.default,{variant:"caption",color:"text.secondary",sx:{display:"block",mt:.5},children:"flow-gate"===W.mode?'The checker flow runs invisibly (never in the chat), gets the condition + tool result, and must answer with {"fire": true/false, "reason": "…"} — it can use its own tools to verify before deciding.':"The model is only asked when the result actually changed since the last check — an idle feed costs nothing. Pick a small, cheap model."})]}),(0,l.jsx)(q.A,{severity:"info",sx:{mt:2},children:"The first check only takes a snapshot — the flow runs from the second check onwards, when something actually changed. FLUJO must be running for checks to happen."})]})},ej=e=>{let{config:t,onChange:a}=e;return(0,l.jsxs)(n.default,{sx:{mt:1},children:[(0,l.jsx)(U.A,{fullWidth:!0,label:"URL to watch",value:t.url,onChange:e=>a({...t,url:e.target.value}),placeholder:"https://example.com/status or an API/feed URL",margin:"normal",type:"url"}),(0,l.jsx)(o.default,{variant:"subtitle2",sx:{mt:1},children:"How often to check"}),(0,l.jsx)(en,{verb:"Check",cron:t.cron,timezone:t.timezone,onChange:e=>{let{cron:l,timezone:n}=e;return a({...t,cron:l,timezone:n})}}),(0,l.jsx)(q.A,{severity:"info",sx:{mt:1},children:"The first check only takes a snapshot; the flow runs when a later check finds different content, and the fetched content is handed to the flow. Pages that embed ever-changing bits (timestamps, session tokens) look “changed” on every check — plain APIs, feeds, and raw files work best."})]})},eb=(0,y.h)("frontend/components/PlannedExecutions/ExecutionModal"),eA={type:"schedule",cron:"0 9 * * *"},ek={type:"file-watch",path:"",events:["add","change"]},eC={type:"mcp-poll",serverName:"",toolName:"",args:{},cron:"*/5 * * * *",evaluate:{mode:"on-change"}},eS={type:"url-watch",url:"",cron:"*/15 * * * *"},eN=e=>{var t;let{open:a,execution:p,onClose:f,onSaved:m}=e,[y,w]=(0,r.useState)(""),[v,b]=(0,r.useState)(""),[A,k]=(0,r.useState)(""),[C,S]=(0,r.useState)(!1),[N,T]=(0,r.useState)(eA),[E,I]=(0,r.useState)(""),[F,W]=(0,r.useState)([]),[P,R]=(0,r.useState)(!1),[O,z]=(0,r.useState)(!1),[Y,Z]=(0,r.useState)(null);(0,r.useEffect)(()=>{var e,t,l,n;a&&(Z(null),w(null!=(e=null==p?void 0:p.name)?e:""),b(null!=(t=null==p?void 0:p.flowId)?t:""),k(null!=(l=null==p?void 0:p.prompt)?l:""),S((null==p?void 0:p.saveConversations)===!0),T(null!=(n=null==p?void 0:p.trigger)?n:eA),I(p?"":crypto.randomUUID()))},[a,p]),(0,r.useEffect)(()=>{if(!a)return;let e=!1;return R(!0),X.g.loadFlows().then(t=>{e||W(t||[])}).catch(t=>{eb.warn("Failed to load flows for execution picker",t),e||W([])}).finally(()=>{e||R(!1)}),()=>{e=!0}},[a]);let ee=!!v&&!P&&F.length>0&&!F.some(e=>e.id===v),et=async()=>{var e;z(!0),Z(null);let t={name:y,flowId:v,prompt:A,saveConversations:C,trigger:N,enabled:null==(e=null==p?void 0:p.enabled)||e,...p?{}:{id:E}},a=p?await j.update(p.id,t):await j.create(t);if(z(!1),!a.success)return void Z(a.error||"Failed to save");m(),f()};return(0,l.jsxs)(c.A,{open:a,onClose:f,maxWidth:"md",fullWidth:!0,PaperProps:{sx:{borderTop:5,borderColor:"primary.main",maxWidth:"95vw",maxHeight:"90vh"}},children:[(0,l.jsx)(u.A,{component:"div",children:(0,l.jsxs)(n.default,{display:"flex",alignItems:"center",justifyContent:"space-between",children:[(0,l.jsx)(o.default,{variant:"h6",children:p?"Edit planned execution":"New planned execution"}),(0,l.jsx)(g.A,{edge:"end",color:"inherit",onClick:f,"aria-label":"close",children:(0,l.jsx)($.A,{})})]})}),(0,l.jsx)(M.A,{}),(0,l.jsxs)(h.A,{sx:{p:3},children:[(0,l.jsx)(o.default,{variant:"body2",color:"text.secondary",sx:{mb:2},children:"A planned execution runs one of your flows automatically — on a schedule or when something happens — without anyone sitting in the chat. Results show up in its run history on the Executions page."}),(0,l.jsx)(U.A,{fullWidth:!0,label:"Name",value:y,onChange:e=>w(e.target.value),margin:"normal",placeholder:"e.g. Morning news digest"}),(0,l.jsx)(o.default,{variant:"subtitle1",sx:{mt:3,mb:1,fontWeight:600},children:"1 \xb7 When should it run?"}),(0,l.jsxs)(n.default,{role:"radiogroup","aria-label":"Trigger type",sx:{display:"flex",gap:2,flexWrap:"wrap"},children:[(0,l.jsx)(V,{selected:"schedule"===N.type,onClick:()=>{"schedule"!==N.type&&T((null==p?void 0:p.trigger.type)==="schedule"?p.trigger:eA)},icon:(0,l.jsx)(B.A,{}),title:"On a schedule",description:"Run at fixed times — every few minutes, daily, on weekdays, or a custom rhythm."}),(0,l.jsx)(V,{selected:"webhook"===N.type,onClick:()=>{"webhook"!==N.type&&T((null==p?void 0:p.trigger.type)==="webhook"?p.trigger:{type:"webhook",token:crypto.randomUUID()})},icon:(0,l.jsx)(G.A,{}),title:"When called (webhook)",description:"Other apps run this flow by calling a URL — GitHub, Stripe, Slack and most services can send webhooks."}),(0,l.jsx)(V,{selected:"file-watch"===N.type,onClick:()=>{"file-watch"!==N.type&&T((null==p?void 0:p.trigger.type)==="file-watch"?p.trigger:ek)},icon:(0,l.jsx)(_.A,{}),title:"When files change",description:"Watch a folder on this computer and run when files appear, change, or disappear."}),(0,l.jsx)(V,{selected:"mcp-poll"===N.type,onClick:()=>{"mcp-poll"!==N.type&&T((null==p?void 0:p.trigger.type)==="mcp-poll"?p.trigger:eC)},icon:(0,l.jsx)(K.A,{}),title:"Watch a tool",description:"Check one of your MCP tools regularly — run when its result changes, or let AI decide."}),(0,l.jsx)(V,{selected:"url-watch"===N.type,onClick:()=>{"url-watch"!==N.type&&T((null==p?void 0:p.trigger.type)==="url-watch"?p.trigger:eS)},icon:(0,l.jsx)(Q.A,{}),title:"When a website changes",description:"Check a URL regularly and run when its content is different from the last check."})]}),"schedule"===N.type&&(0,l.jsx)(en,{cron:N.cron,timezone:N.timezone,onChange:e=>{let{cron:t,timezone:a}=e;return T({...N,cron:t,timezone:a})},catchUp:!0===N.catchUp,onCatchUpChange:e=>T({...N,catchUp:e})}),"webhook"===N.type&&(0,l.jsx)(es,{config:N,onChange:T,executionId:null!=(t=null==p?void 0:p.id)?t:E,saved:null!==p}),"file-watch"===N.type&&(0,l.jsx)(ex,{config:N,onChange:T}),"mcp-poll"===N.type&&(0,l.jsx)(ev,{config:N,onChange:T}),"url-watch"===N.type&&(0,l.jsx)(ej,{config:N,onChange:T}),(0,l.jsx)(M.A,{sx:{mt:3}}),(0,l.jsx)(o.default,{variant:"subtitle1",sx:{mt:2,mb:0,fontWeight:600},children:"2 \xb7 What should it run?"}),(0,l.jsxs)(D.A,{fullWidth:!0,margin:"normal",children:[(0,l.jsx)(L.A,{id:"execution-flow-label",children:"Flow to run"}),(0,l.jsxs)(H.A,{labelId:"execution-flow-label",label:"Flow to run",value:ee?"":v,onChange:e=>b(e.target.value),displayEmpty:!0,children:[0===F.length&&(0,l.jsx)(J.A,{value:"",disabled:!0,children:P?"Loading flows…":"No flows available"}),F.map(e=>(0,l.jsx)(J.A,{value:e.id,children:e.name},e.id))]})]}),ee&&(0,l.jsx)(q.A,{severity:"warning",sx:{mt:1},children:"The previously selected flow no longer exists. Please choose another."}),(0,l.jsx)(U.A,{fullWidth:!0,label:"What should the flow do?",value:A,onChange:e=>k(e.target.value),margin:"normal",multiline:!0,rows:3,helperText:"Sent to the flow as the user message each time this runs. Run details are attached automatically: current time, what triggered it, the previous run, the next planned run, and any trigger data."}),(0,l.jsx)(s.A,{sx:{mt:1},control:(0,l.jsx)(i.A,{checked:C,onChange:e=>S(e.target.checked)}),label:"Save full conversations (each run appears in the chat sidebar — useful for debugging)"}),Y&&(0,l.jsx)(q.A,{severity:"error",sx:{mt:2},children:Y})]}),(0,l.jsxs)(x.A,{children:[(0,l.jsx)(d.A,{onClick:f,children:"Cancel"}),(0,l.jsx)(d.A,{onClick:et,variant:"contained",color:"primary",disabled:O||!y.trim()||!v,children:O?"Saving…":"Save"})]})]})},eT=(0,y.h)("frontend/components/PlannedExecutions"),eE=()=>{let[e,t]=(0,r.useState)([]),[a,y]=(0,r.useState)(!1),[w,v]=(0,r.useState)(!1),[b,A]=(0,r.useState)(!1),[k,C]=(0,r.useState)(null),[S,N]=(0,r.useState)(null),T=(0,r.useCallback)(async()=>{let e=await j.list();t(e.executions),y(e.paused),v(!0)},[]);(0,r.useEffect)(()=>{T()},[T]);let E=e.some(e=>e.status.running);(0,r.useEffect)(()=>{let e=setInterval(()=>{document.hidden||T()},E?3e3:1e4);return()=>clearInterval(e)},[T,E]);let I=async e=>{y(e);let t=await j.setPaused(e);t.success||eT.warn("Failed to toggle pause",t.error),T()},F=async(e,t)=>{await j.update(e.id,{enabled:t}),T()},W=async()=>{S&&(await j.delete(S.id),N(null),T())};return(0,l.jsxs)(n.default,{sx:{p:3,maxWidth:1100,mx:"auto",width:"100%"},children:[(0,l.jsxs)(n.default,{sx:{display:"flex",alignItems:"center",justifyContent:"space-between",flexWrap:"wrap",gap:2,mb:1},children:[(0,l.jsx)(o.default,{variant:"h5",children:"Planned Executions"}),(0,l.jsxs)(n.default,{sx:{display:"flex",alignItems:"center",gap:2},children:[(0,l.jsx)(m.A,{title:"Refresh",children:(0,l.jsx)(g.A,{onClick:()=>void T(),children:(0,l.jsx)(f.A,{})})}),(0,l.jsx)(s.A,{control:(0,l.jsx)(i.A,{checked:!a,onChange:e=>I(!e.target.checked)}),label:a?"Paused":"Active"}),(0,l.jsx)(d.A,{variant:"contained",startIcon:(0,l.jsx)(p.A,{}),onClick:()=>{C(null),A(!0)},"data-tour":"add-execution",children:"Add"})]})]}),(0,l.jsx)(o.default,{variant:"body2",color:"text.secondary",sx:{mb:3},children:"Run your flows automatically — on a schedule or when something happens — without opening the chat. FLUJO must be running for triggers to fire."}),w&&0===e.length&&(0,l.jsxs)(n.default,{sx:{border:1,borderColor:"divider",borderRadius:2,borderStyle:"dashed",p:6,textAlign:"center"},children:[(0,l.jsx)(o.default,{variant:"h6",sx:{mb:1},children:"Nothing planned yet"}),(0,l.jsx)(o.default,{variant:"body2",color:"text.secondary",sx:{mb:2},children:"Create your first planned execution to run a flow on a schedule."}),(0,l.jsx)(d.A,{variant:"contained",startIcon:(0,l.jsx)(p.A,{}),onClick:()=>{C(null),A(!0)},children:"New planned execution"})]}),(0,l.jsx)(n.default,{sx:{display:"flex",flexDirection:"column",gap:2},children:e.map(e=>(0,l.jsx)(z,{entry:e,onEdit:()=>{C(e.execution),A(!0)},onDelete:()=>N(e.execution),onToggleEnabled:t=>F(e.execution,t),onRanNow:()=>void T()},e.execution.id))}),(0,l.jsx)(eN,{open:b,execution:k,onClose:()=>A(!1),onSaved:()=>void T()}),(0,l.jsxs)(c.A,{open:null!==S,onClose:()=>N(null),children:[(0,l.jsxs)(u.A,{children:["Delete “",null==S?void 0:S.name,"”?"]}),(0,l.jsx)(h.A,{children:(0,l.jsx)(o.default,{variant:"body2",color:"text.secondary",children:"This removes the planned execution and its run history. The flow itself is not affected."})}),(0,l.jsxs)(x.A,{children:[(0,l.jsx)(d.A,{onClick:()=>N(null),children:"Cancel"}),(0,l.jsx)(d.A,{color:"error",variant:"contained",onClick:W,children:"Delete"})]})]})]})},eI=(0,y.h)("app/executions/page");function eF(){return eI.debug("Rendering ExecutionsPage"),(0,l.jsx)(n.default,{sx:{height:"100%",display:"flex",flexDirection:"column"},children:(0,l.jsx)(eE,{})})}}},e=>{e.O(0,[2678,4754,9244,8548,690,9562,2003,488,3272,5648,7396,7329,3750,3235,2380,8441,1255,7358],()=>e(e.s=60187)),_N_E=e.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[3080],{32098:()=>{},45993:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>ne});var o=n(95155),r=n(12115),l=n(33567),a=n(94049),s=n(25635),i=n(70690),d=n(5421),c=n(41983),u=n(78470),p=n(50430),h=n(22003),f=n(2778),x=n(52363),m=n(65036),g=n(50001),v=n(9562),b=n(75912),y=n(14287),j=n(86946),w=n(48116),C=n(2300),A=n(21067),S=n(87021),k=n(22539),N=n(74879),T=n(90057),I=n(17897),P=n(76122);P.TG.ArrowClosed;let M={type:"mcpEdge",animated:!1,style:{stroke:"#1976d2",strokeWidth:2},markerEnd:{type:P.TG.ArrowClosed,width:20,height:20,color:"#1976d2"},markerStart:{type:P.TG.ArrowClosed,width:20,height:20,color:"#1976d2"}};function F(e){return!!e&&e.includes("mcp")}function E(e,t,n,o){if("start"===n)return"Start nodes cannot have incoming connections";if("finish"===e)return"Finish nodes cannot have outgoing connections";if("mcp"===e||"mcp"===n||F(t)||F(o)){if(("mcp"!==e||"process"!==n)&&("process"!==e||"mcp"!==n))return"MCP connections must link an MCP node to a Process node via MCP handles";if("process"===e&&!F(t))return"Connect MCP nodes from the Process node's left/right MCP handles"}return null}function D(e){return"".concat(e,"-top")}function z(e,t,n){return t.filter(t=>{var o,r;return(null==(r=t.data)?void 0:r.edgeType)!=="mcp"&&(t.source===e?t.target!==n:t.target===e&&null!=(o=t.data)&&!!o.bidirectional&&t.source!==n)})}function R(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[];if(!e.source||!e.target||!e.sourceHandle||!e.targetHandle)return console.error("Invalid connection: Missing source, target, or handles",e),!1;let o=t.find(t=>t.id===e.source),r=t.find(t=>t.id===e.target);if(!o||!r)return console.error("Invalid connection: Source or target node not found",e),!1;let l=E(o.type,e.sourceHandle,r.type,e.targetHandle);return l?(console.error("Invalid connection: ".concat(l)),!1):"subflow"!==o.type||!(z(o.id,n,e.target).length>0)||(console.error("Invalid connection: Subflow nodes can only have one outgoing connection"),!1)}function B(e,t){let n=t.find(t=>t.id===e.source),o=t.find(t=>t.id===e.target),r=e.sourceHandle,l=e.targetHandle,a=(null==n?void 0:n.type)==="mcp"||(null==o?void 0:o.type)==="mcp"||F(r)||F(l),s="".concat(e.source,":").concat(r,"->").concat(e.target,":").concat(l);return a?{id:s,...e,type:"mcpEdge",data:{edgeType:"mcp"},animated:!1,markerEnd:M.markerEnd,markerStart:M.markerStart,style:M.style}:{id:s,...e,type:"custom",data:{edgeType:"standard"},animated:!0}}function L(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],o=t.find(t=>t.id===e.source),r=t.find(t=>t.id===e.target);return!!o&&!!r&&("subflow"!==r.type||!(z(r.id,n,e.source).length>0))&&null===E(r.type,null,o.type,null)}function W(e,t){let n=e=>{var t;return(null==(t=e.data)?void 0:t.edgeType)==="mcp"};return t.filter(t=>t.id===e.id||(n(e)?n(t)&&(t.source===e.source&&t.target===e.target||t.source===e.target&&t.target===e.source):!n(t)&&t.source===e.source&&t.target===e.target)).map(e=>e.id)}var H=n(56682),_=n(33420),O=n(86973),G=n(49501),U=n(17681),Y=n(36314),J=n(4484),$=n(52277),V=n(78095),X=n(14915);let Z=e=>{let{open:t,position:n,onClose:r,onDelete:l,onEditProperties:a,onCopy:s,onPaste:i,canPaste:d,canCopy:c,nodeId:u,selection:p,edgeId:h}=e,f=[];return u&&!p&&f.push((0,o.jsxs)(O.A,{onClick:()=>{a&&a(),r()},children:[(0,o.jsx)(G.A,{children:(0,o.jsx)(X.A,{fontSize:"small"})}),(0,o.jsx)(U.A,{children:"Edit Properties"})]},"edit")),s&&(u||p)&&f.push((0,o.jsxs)(O.A,{onClick:()=>{s&&s(),r()},disabled:!c,children:[(0,o.jsx)(G.A,{children:(0,o.jsx)($.A,{fontSize:"small"})}),(0,o.jsx)(U.A,{children:"Copy"})]},"copy")),i&&f.push((0,o.jsxs)(O.A,{onClick:()=>{i&&i(),r()},disabled:!d,children:[(0,o.jsx)(G.A,{children:(0,o.jsx)(V.A,{fontSize:"small"})}),(0,o.jsx)(U.A,{children:"Paste"})]},"paste")),(u||h||p)&&f.push((0,o.jsx)(A.A,{},"delete-divider"),(0,o.jsxs)(O.A,{onClick:()=>{l(),r()},sx:{color:"error.main"},children:[(0,o.jsx)(G.A,{sx:{color:"error.main"},children:(0,o.jsx)(J.A,{fontSize:"small"})}),(0,o.jsx)(U.A,{children:"Delete"})]},"delete")),(0,o.jsx)(Y.A,{open:t,onClose:r,anchorReference:"anchorPosition",anchorPosition:null!==n.y&&null!==n.x?{top:n.y,left:n.x}:void 0,children:f})};var q=n(80685),K=n(40379);function Q(e,t){return t.find(t=>t.id===e)}let ee=(0,S.h)("components/flow/FlowBuilder/Canvas/hooks/useCanvasEvents.ts");var et=n(39047),en=n(81464),eo=n(12142);let er=(0,w.Ay)(i.A)(e=>{let{theme:t}=e;return{minWidth:"36px",padding:"6px",margin:"0 4px",backgroundColor:"dark"===t.palette.mode?"rgba(255, 255, 255, 0.05)":"rgba(0, 0, 0, 0.02)","&:hover":{backgroundColor:"dark"===t.palette.mode?"rgba(255, 255, 255, 0.1)":"rgba(0, 0, 0, 0.05)"}}}),el=()=>{let{zoomIn:e,zoomOut:t,fitView:n}=(0,k.VH)();return(0,o.jsx)(k.Zk,{position:"top-right",style:{margin:"10px"},children:(0,o.jsxs)("div",{style:{display:"flex",gap:"5px"},children:[(0,o.jsx)(u.A,{title:"Zoom In",children:(0,o.jsx)(er,{variant:"outlined",size:"small",onClick:()=>e(),children:(0,o.jsx)(et.A,{fontSize:"small"})})}),(0,o.jsx)(u.A,{title:"Zoom Out",children:(0,o.jsx)(er,{variant:"outlined",size:"small",onClick:()=>t(),children:(0,o.jsx)(en.A,{fontSize:"small"})})}),(0,o.jsx)(u.A,{title:"Fit View",children:(0,o.jsx)(er,{variant:"outlined",size:"small",onClick:()=>n(),children:(0,o.jsx)(eo.A,{fontSize:"small"})})})]})})},ea=e=>{let{showMiniMap:t=!0,showControls:n=!0,showBackground:r=!0}=e,a=(0,l.A)(),s="dark"===a.palette.mode;return(0,o.jsxs)(o.Fragment,{children:[r&&(0,o.jsx)(k.VS,{color:s?a.palette.text.disabled:a.palette.divider,gap:20,size:1}),n&&(0,o.jsx)(k.H2,{}),t&&(0,o.jsx)(k.of,{nodeColor:s?a.palette.primary.dark:a.palette.primary.light,maskColor:s?"rgba(0, 0, 0, 0.4)":"rgba(255, 255, 255, 0.6)"})]})},es=(0,S.h)("components/flow/FlowBuilder/Canvas/Canvas.tsx"),ei="flujo:flowClipboard",ed=null;function ec(e){ed=e;try{localStorage.setItem(ei,JSON.stringify(e))}catch(e){es.warn("Could not persist flow clipboard to localStorage",e)}}let eu={start:_.vm,process:_.Uw,finish:_.IK,mcp:_.v2,subflow:_.lA},ep={custom:q.jY,mcpEdge:q.oY},eh=e=>{let{open:t,position:n,onClose:r,onSelectNodeType:i,sourceNodeType:d,sourceHandleId:c}=e,u=(0,l.A)(),p=function(e,t){let n=["process","finish","mcp","subflow"];return e&&t?n.filter(n=>null===E(e,t,n,D(n))):n}(d,c);es.debug("NodeSelectionModal: Source node type: ".concat(d,", Source handle ID: ").concat(c)),es.debug("NodeSelectionModal: Valid node types: ".concat(p.join(", ")));let h=[{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(e=>p.includes(e.type));return n?(0,o.jsx)(H.A,{open:t,onClose:r,"aria-labelledby":"node-selection-modal",children:(0,o.jsxs)(a.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,o.jsx)(s.default,{variant:"h6",component:"h2",gutterBottom:!0,children:"Select Node Type"}),(0,o.jsx)(a.default,{display:"flex",flexDirection:"column",gap:2,children:h.map(e=>(0,o.jsxs)(a.default,{sx:{padding:2,borderRadius:1,border:"2px solid ".concat("process"===e.type?u.palette.secondary.main:"finish"===e.type?u.palette.success.main:"subflow"===e.type?u.palette.warning.main:u.palette.info.main),cursor:"pointer","&:hover":{boxShadow:3}},onClick:()=>i(e.type,n),children:[(0,o.jsxs)(a.default,{display:"flex",alignItems:"center",gap:1,mb:1,children:[(e=>{switch(e){case"process":default:return(0,o.jsx)("div",{style:{width:24,height:24,backgroundColor:u.palette.secondary.main,borderRadius:"50%"}});case"finish":return(0,o.jsx)("div",{style:{width:24,height:24,backgroundColor:u.palette.success.main,borderRadius:"50%"}});case"mcp":return(0,o.jsx)("div",{style:{width:24,height:24,backgroundColor:u.palette.info.main,borderRadius:"50%"}});case"subflow":return(0,o.jsx)("div",{style:{width:24,height:24,backgroundColor:u.palette.warning.main,borderRadius:"50%"}})}})(e.type),(0,o.jsx)(s.default,{variant:"subtitle1",fontWeight:"bold",children:e.label})]}),(0,o.jsx)(s.default,{variant:"body2",color:"text.secondary",children:e.description})]},e.type))})]})}):null},ef=(0,w.Ay)("div")(e=>{let{theme:t}=e;return{width:"100%",height:"80vh",border:"1px solid ".concat(t.palette.divider),borderRadius:"4px",background:t.palette.background.paper,position:"relative"}}),ex=(0,r.forwardRef)((e,t)=>{let n=(0,l.A)(),{nodes:a,edges:s,onNodesChange:i,onEdgesChange:d,onDrop:c,onDragOver:u,onInit:p,reactFlowWrapper:h,onEditNode:f}=e,{contextMenu:x,selectedElements:m,closeContextMenu:g,handleDelete:v,onNodeContextMenu:b,onEdgeContextMenu:y,onPaneContextMenu:j,onSelectionContextMenu:w}=function(e){let{deleteElements:t}=(0,k.VH)(),[n,o]=(0,r.useState)({open:!1,position:{x:0,y:0}}),[l,a]=(0,r.useState)({nodes:[],edges:[]});(0,k.p4)({onChange:e=>{let{nodes:t,edges:n}=e,o=t.map(e=>e.id),r=n.map(e=>e.id);ee.debug("Selection changed: ".concat(o.length," nodes, ").concat(r.length," edges selected")),a({nodes:o,edges:r})}});let s=(0,r.useCallback)((e,t,n,r)=>{e.preventDefault(),t?ee.debug("Context menu opened for node: ".concat(t)):n?ee.debug("Context menu opened for edge: ".concat(n)):r?ee.debug("Context menu opened for the current selection"):ee.debug("Context menu opened on canvas at (".concat(e.clientX,", ").concat(e.clientY,")")),o({open:!0,position:{x:e.clientX,y:e.clientY},nodeId:t,edgeId:n,selection:r})},[]),i=(0,r.useCallback)(()=>{ee.debug("Context menu closed"),o(e=>({...e,open:!1}))},[]),d=(0,r.useCallback)(()=>{if(n.selection)ee.debug("handleDelete: Deleting the current selection"),t({nodes:l.nodes.map(e=>({id:e})),edges:l.edges.map(e=>({id:e}))});else if(n.nodeId){if(ee.debug("handleDelete: Attempting to delete node ".concat(n.nodeId)),!function(e,t){let n=Q(e,t);return!!n&&"start"!==n.type}(n.nodeId,e)){ee.warn("Cannot delete Start node: ".concat(n.nodeId)),alert("Start nodes cannot be deleted");return}t({nodes:[{id:n.nodeId}]})}else n.edgeId&&(ee.debug("handleDelete: Deleting edge ".concat(n.edgeId)),t({edges:[{id:n.edgeId}]}))},[n,t,e,l]),c=(0,r.useCallback)((e,t)=>{s(e,t.id)},[s]),u=(0,r.useCallback)((e,t)=>{s(e,void 0,t.id)},[s]),p=(0,r.useCallback)(e=>{s(e)},[s]),h=(0,r.useCallback)(e=>{s(e,void 0,void 0,!0)},[s]);return{contextMenu:n,selectedElements:l,onContextMenu:s,closeContextMenu:i,handleDelete:d,onNodeContextMenu:c,onEdgeContextMenu:u,onPaneContextMenu:p,onSelectionContextMenu:h}}(a),{deleteElements:C}=(0,k.VH)(),A=(0,k.PI)(),S=(0,r.useRef)(null),[I,M]=(0,r.useState)(null),[E,z]=(0,r.useState)({open:!1,position:null}),H=(0,r.useCallback)(e=>[...a.filter(e=>e.selected).map(e=>({type:"select",id:e.id,selected:!1})),{type:"add",item:{...e,selected:!0}}],[a]);(0,r.useEffect)(()=>{if(!f)return;let e=e=>{if(e.detail&&e.detail.nodeId){let t=Q(e.detail.nodeId,a);t&&f(t)}};return document.addEventListener("editNode",e),()=>{document.removeEventListener("editNode",e)}},[a,f]);let _=(0,r.useCallback)(e=>{var t,o;if(!e.sourceHandle||!e.targetHandle)return void es.error("Invalid connection: Missing source or target handle",e);let r=(null==(t=A.getState().connection.fromHandle)?void 0:t.type)==="target";if(!R(e,a,s))return;let l=B(e,a);if((null==(o=l.data)?void 0:o.edgeType)==="standard"){let t=e=>{var t;return(null==(t=e.data)?void 0:t.edgeType)!=="mcp"},o=e=>{var t;return!!(null==(t=e.data)?void 0:t.bidirectional)},l=s.find(n=>t(n)&&n.source===e.source&&n.target===e.target),i=s.find(n=>t(n)&&n.source===e.target&&n.target===e.source),c=e=>{es.info("Merging reverse connection into bidirectional edge ".concat(e.id)),d([{type:"replace",id:e.id,item:{...e,data:{...e.data,bidirectional:!0},markerStart:{type:P.TG.ArrowClosed,width:20,height:20,color:n.palette.text.secondary}}}])};if(r){let e=null!=l?l:i;return e?void(!o(e)&&L(e,a,s)&&c(e)):void es.info("Connection drawn from a top handle is only allowed to convert an existing edge to bidirectional")}if(l&&o(l))return;if(i){!o(i)&&L(i,a,s)&&c(i);return}}d([...W(l,s).map(e=>({type:"remove",id:e})),{type:"add",item:l}])},[a,s,d,A,n.palette.text.secondary]);(0,r.useEffect)(()=>{let e=e=>{var t;let{edgeId:n,waypoints:o}=e.detail,r=s.find(e=>e.id===n);if(!r)return;let{waypoint:l,...a}=null!=(t=r.data)?t:{};d([{type:"replace",id:n,item:{...r,data:{...a,waypoints:null!=o?o:void 0}}}])};return document.addEventListener(K.R,e),()=>document.removeEventListener(K.R,e)},[s,d]);let O=(0,r.useCallback)(async e=>{let{nodes:t,edges:n}=e,o=t.filter(e=>"start"!==e.type),r=new Set(o.map(e=>e.id)),l=new Set(t.map(e=>e.id)),a=n.filter(e=>!!(e.selected||r.has(e.source)||r.has(e.target))||!(l.has(e.source)||l.has(e.target)));return(0!==o.length||0!==a.length)&&{nodes:o,edges:a}},[]),G=(0,r.useCallback)(e=>{M(e),p&&p(e)},[p]);(0,r.useEffect)(()=>{let e=e=>{if(!e.detail||!I)return;let{nodeType:t,position:n}=e.detail,o=T.g.createNode(t,n);i(H(o)),f&&f(o)};return document.addEventListener("addNodeFromPalette",e),()=>{document.removeEventListener("addNodeFromPalette",e)}},[I,i,H,f]);let U=(0,r.useCallback)(()=>{if(x.nodeId&&f){let e=Q(x.nodeId,a);e&&f(e)}},[x.nodeId,a,f]),Y=(0,r.useCallback)((e,t)=>{e.preventDefault(),f&&f(t)},[f]),J=(0,r.useCallback)((e,t)=>{let{fromNode:n,fromHandle:o}=t;if(!n||!(null==o?void 0:o.id)||!I)return void es.debug("onConnectEnd: No valid connection start data");if(es.debug("onConnectEnd: Connection ended from node ".concat(n.id,", handle ").concat(o.id)),"target"===o.type&&!F(o.id))return void es.debug("onConnectEnd: Drag from a target handle cannot create a new node");if("subflow"===n.type&&"source"===o.type&&s.some(e=>{let t=e.data;return(null==t?void 0:t.edgeType)!=="mcp"&&(e.source===n.id||e.target===n.id&&!!(null==t?void 0:t.bidirectional))}))return void es.debug("onConnectEnd: Subflow already has an outgoing connection; not offering a new node");if(!e.target.classList.contains("react-flow__pane"))return;let r=e instanceof MouseEvent?e:e.changedTouches[0],l=I.screenToFlowPosition({x:r.clientX,y:r.clientY});es.debug("onConnectEnd: Connection dropped on pane at position (".concat(l.x,", ").concat(l.y,")")),z({open:!0,position:l,sourceNodeId:n.id,sourceNodeType:n.type,sourceHandleId:o.id})},[I,s]),$=(0,r.useCallback)((e,t)=>{es.debug("handleNodeTypeSelection: Selected node type ".concat(e," at position (").concat(t.x,", ").concat(t.y,")"));let n=T.g.createNode(e,t);i(H(n));let{sourceNodeId:o,sourceHandleId:r}=E,l=o?Q(o,a):void 0;if(l&&r){let t=D(e),o={source:l.id,sourceHandle:r,target:n.id,targetHandle:t};if(es.debug("handleNodeTypeSelection: Creating connection from ".concat(o.source," to ").concat(o.target)),R(o,[...a,n],s)){let e=B(o,[...a,n]);d([...W(e,s).map(e=>({type:"remove",id:e})),{type:"add",item:e}]),es.debug("handleNodeTypeSelection: Edge created with id ".concat(e.id))}}z({open:!1,position:null}),f&&f(n)},[E,a,s,H,i,d,f]),V=(0,r.useCallback)(()=>{es.debug("handleCloseNodeSelectionModal: Closing node selection modal"),z({open:!1,position:null})},[]),X=(0,r.useCallback)(()=>{let e=new Set(m.nodes),t=a.filter(t=>e.has(t.id)&&"start"!==t.type);if(0===t.length)return!1;let n=new Set(t.map(e=>e.id)),o=s.filter(e=>n.has(e.source)&&n.has(e.target));return ec({nodes:JSON.parse(JSON.stringify(t)),edges:JSON.parse(JSON.stringify(o))}),es.debug("Copied ".concat(t.length," node(s) and ").concat(o.length," edge(s)")),!0},[m,a,s]),q=(0,r.useCallback)(()=>{let e=ed;if(!e)try{let t=localStorage.getItem(ei);t&&(e=JSON.parse(t))}catch(e){es.warn("Could not read flow clipboard from localStorage",e)}if(!e||!e.nodes||0===e.nodes.length)return void es.debug("Paste requested but clipboard is empty");let t=new Map;e.nodes.forEach(e=>t.set(e.id,(0,N.A)()));let n=e.nodes.map(e=>{var n,o,r,l;return{...e,id:t.get(e.id),position:{x:(null!=(r=null==(n=e.position)?void 0:n.x)?r:0)+40,y:(null!=(l=null==(o=e.position)?void 0:o.y)?l:0)+40},selected:!0,data:{...e.data}}}),o=(e.edges||[]).filter(e=>t.has(e.source)&&t.has(e.target)).map(e=>({...e,id:(0,N.A)(),source:t.get(e.source),target:t.get(e.target),selected:!1}));i([...a.filter(e=>e.selected).map(e=>({type:"select",id:e.id,selected:!1})),...n.map(e=>({type:"add",item:e}))]),o.length>0&&d(o.map(e=>({type:"add",item:e}))),es.info("Pasted ".concat(n.length," node(s) and ").concat(o.length," edge(s)"))},[a,i,d]),et=(0,r.useCallback)(e=>{let t=e.ctrlKey||e.metaKey,n=e.key.toLowerCase();if(t&&"c"===n){X()&&e.preventDefault();return}if(t&&"x"===n){X()&&(e.preventDefault(),C({nodes:m.nodes.map(e=>({id:e})),edges:m.edges.map(e=>({id:e}))}));return}if(t&&"v"===n){e.preventDefault(),q();return}},[X,q,C,m]),en=(0,r.useCallback)(()=>{if(x.nodeId&&!m.nodes.includes(x.nodeId)){let e=a.find(e=>e.id===x.nodeId);e&&"start"!==e.type&&(ec({nodes:JSON.parse(JSON.stringify([e])),edges:[]}),es.debug("Copied right-clicked node to clipboard"));return}X()},[x.nodeId,m,a,X]),eo=(0,r.useMemo)(()=>{if(ed)return!0;try{return!!localStorage.getItem(ei)}catch(e){return!1}},[x.open]),er=(0,r.useMemo)(()=>{if(x.selection){let e=new Set(m.nodes);return a.some(t=>e.has(t.id)&&"start"!==t.type)}if(x.nodeId){let e=a.find(e=>e.id===x.nodeId);return!!e&&"start"!==e.type}return!1},[x.selection,x.nodeId,m,a]);return(0,o.jsxs)(ef,{ref:e=>{t&&("function"==typeof t?t(e):t.current=e),h&&(h.current=e),S.current=e},children:[(0,o.jsxs)(k.Gc,{nodes:a,edges:s,nodeTypes:eu,edgeTypes:ep,defaultEdgeOptions:(0,r.useMemo)(()=>({type:"custom",animated:!0,style:{stroke:n.palette.text.secondary,strokeWidth:2},markerEnd:{type:P.TG.ArrowClosed,width:20,height:20,color:n.palette.text.secondary}}),[n.palette.text.secondary]),connectionLineType:P.Do.SmoothStep,onNodesChange:i,onEdgesChange:d,onConnect:_,onBeforeDelete:O,deleteKeyCode:["Backspace","Delete"],onDrop:c,onDragOver:u,onInit:G,onNodeContextMenu:b,onEdgeContextMenu:y,onPaneContextMenu:j,onSelectionContextMenu:w,onKeyDown:et,onNodeDoubleClick:Y,onConnectEnd:J,tabIndex:0,fitView:!0,attributionPosition:"bottom-right",minZoom:.1,maxZoom:2,snapToGrid:!0,snapGrid:[15,15],connectOnClick:!1,children:[(0,o.jsx)(el,{}),(0,o.jsx)(ea,{})]}),(0,o.jsx)(Z,{open:x.open,position:x.position,onClose:g,onDelete:v,onEditProperties:U,onCopy:en,onPaste:q,canPaste:eo,canCopy:er,nodeId:x.nodeId,selection:x.selection,edgeId:x.edgeId}),(0,o.jsx)(eh,{open:E.open,position:E.position,onClose:V,onSelectNodeType:$,sourceNodeType:E.sourceNodeType,sourceHandleId:E.sourceHandleId})]})});ex.displayName="Canvas";var em=n(56350),eg=n(77842),ev=n(55930);let eb=(0,S.h)("components/flow/FlowBuilder/NodePalette.tsx"),ey="NodePalette",ej=(0,w.Ay)(C.A)(e=>{let{theme:t}=e;return{padding:t.spacing(2),width:"200px",height:"80vh",display:"flex",flexDirection:"column",gap:t.spacing(2)}}),ew=(0,w.Ay)(C.A,{shouldForwardProp:e=>"nodeType"!==e})(e=>{let{theme:t,nodeType:n}=e;return{padding:t.spacing(1.5),minWidth:"180px",borderRadius:"8px",backgroundColor:t.palette.background.paper,border:"2px solid ".concat("process"===n?t.palette.secondary.main:"finish"===n?t.palette.success.main:"subflow"===n?t.palette.warning.main:t.palette.info.main),boxShadow:t.shadows[2],transition:"all 0.2s ease",cursor:"grab","&:hover":{boxShadow:"0 0 0 1px ".concat("process"===n?t.palette.secondary.main:"finish"===n?t.palette.success.main:"subflow"===n?t.palette.warning.main:t.palette.info.main,", 0 3px 10px rgba(0,0,0,0.1)")},"&:active":{cursor:"grabbing"}}}),eC=(0,w.Ay)(a.default,{shouldForwardProp:e=>"nodeType"!==e})(e=>{let{theme:t,nodeType:n}=e;return{display:"flex",alignItems:"center",justifyContent:"space-between",borderBottom:"1px solid ".concat("process"===n?t.palette.secondary.light:"finish"===n?t.palette.success.light:"subflow"===n?t.palette.warning.light:t.palette.info.light),marginBottom:t.spacing(1),paddingBottom:t.spacing(.5)}}),eA=(0,w.Ay)(a.default)({display:"flex",alignItems:"center",gap:"8px"}),eS=[{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"}],ek=()=>{eb.debug("".concat(ey,": Entering component")),(0,l.A)();let e=(0,r.useCallback)(e=>{eb.debug("".concat(ey,".onNodeDoubleClick: Double-clicked on ").concat(e," node"));let t=new CustomEvent("addNodeFromPalette",{detail:{nodeType:e,position:{x:250,y:150}}});document.dispatchEvent(t),eb.info("".concat(ey,".onNodeDoubleClick: Dispatched addNodeFromPalette event for ").concat(e," node"))},[]);return eb.debug("".concat(ey,": Rendering component")),(0,o.jsxs)(ej,{elevation:2,children:[(0,o.jsx)(s.default,{variant:"h6",gutterBottom:!0,children:"Node Types"}),(0,o.jsx)(a.default,{display:"flex",flexDirection:"column",gap:2,children:eS.map(t=>(0,o.jsxs)(ew,{nodeType:t.type,elevation:1,draggable:!0,onDragStart:e=>((e,t)=>{eb.debug("".concat(ey,".onDragStart: Entering method with nodeType=").concat(t)),e.dataTransfer.setData("application/reactflow",t),e.dataTransfer.effectAllowed="move";let n=document.createElement("div");n.innerHTML='<div style="padding: 10px; background: white; border: 1px solid #ccc; border-radius: 4px;">'.concat(t," Node</div>"),document.body.appendChild(n),eb.debug("".concat(ey,".onDragStart: Created drag preview element"));try{e.dataTransfer.setDragImage(n,75,25),eb.debug("".concat(ey,".onDragStart: Set drag image with offset (75, 25)"))}catch(e){eb.error("".concat(ey,".onDragStart: Error setting drag image:"),e)}setTimeout(()=>{document.body.removeChild(n),eb.debug("".concat(ey,".onDragStart: Removed drag preview element"))},0),eb.debug("".concat(ey,".onDragStart: Drag operation initialized"))})(e,t.type),onDragEnd:e=>{var n;return n=t.type,void eb.debug("".concat(ey,".onDragEnd: Drag operation ended for nodeType=").concat(n))},onDoubleClick:()=>e(t.type),children:[(0,o.jsx)(eC,{nodeType:t.type,children:(0,o.jsxs)(eA,{children:[(e=>{switch(e){case"process":default:return(0,o.jsx)(em.A,{color:"secondary"});case"finish":return(0,o.jsx)(eg.A,{color:"success"});case"mcp":return(0,o.jsx)(em.A,{color:"info"});case"subflow":return(0,o.jsx)(ev.A,{color:"warning"})}})(t.type),(0,o.jsx)(s.default,{variant:"subtitle2",fontWeight:"bold",children:t.label})]})}),(0,o.jsx)(s.default,{variant:"caption",color:"text.secondary",children:t.description})]},t.type))})]})};var eN=n(28548),eT=n(4474),eI=n(41602),eP=n(73707),eM=n(23820),eF=n(5155),eE=n(60691),eD=n(76808),ez=n(36741),eR=n(61033);function eB(e){var t,n,o;return null!=(o=null!=(n=null==(t=e.data)?void 0:t.type)?n:e.type)?o:"unknown"}function eL(e){var t;return(null==(t=e.data)?void 0:t.label)||e.id}function eW(e){var t;return(null==(t=e.data)?void 0:t.edgeType)==="mcp"}function eH(e){var t,n,o,r,l,a,s,i,d;let c=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},u=[],p=Array.isArray(null==e?void 0:e.nodes)?e.nodes:[],h=Array.isArray(null==e?void 0:e.edges)?e.edges:[],f=(e,t,n,o)=>u.push({severity:e,code:t,message:n,nodeId:null==o?void 0:o.id,nodeLabel:o?eL(o):void 0}),x=new Map((null!=(t=c.models)?t:[]).map(e=>[e.id,e])),m=new Map((null!=(n=c.servers)?n:[]).map(e=>[e.name,e])),g=!!c.models,v=!!c.servers,b=p.filter(e=>"start"===eB(e)),y=p.filter(e=>"finish"===eB(e)),j=p.filter(e=>"process"===eB(e)),w=p.filter(e=>"mcp"===eB(e));if(0===b.length)f("error","no-start-node","The flow has no Start node, so it has no entry point.");else if(b.length>1)for(let e of b.slice(1))f("error","multiple-start-nodes","The flow has more than one Start node; only one is allowed.",e);for(let e of(0===y.length&&f("warning","no-finish-node","The flow has no Finish node; it will run but never reaches a defined end."),j)){let t=null!=(r=null==(o=e.data)?void 0:o.properties)?r:{},n=t.boundModel;if(n){if(g&&!x.has(n)){let n="string"==typeof t.modelName&&t.modelName?' (was "'.concat(t.modelName,'")'):"";f("error","process-model-missing",'Process node "'.concat(eL(e),'" is bound to a model that no longer exists').concat(n,"."),e)}}else f("error","process-missing-model",'Process node "'.concat(eL(e),'" has no model bound.'),e)}for(let e of w){let t=(null!=(a=null==(l=e.data)?void 0:l.properties)?a:{}).boundServer;if(t){if(v&&!m.has(t))f("warning","mcp-server-missing",'MCP node "'.concat(eL(e),'" is bound to server "').concat(t,"\", 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."),e);else if(v){let n=m.get(t);if(n.status&&"connected"!==n.status){let o="disabled"===n.status?"disabled":"not connected (".concat(n.status,")");f("warning","mcp-server-disconnected",'MCP node "'.concat(eL(e),'" is bound to server "').concat(t,'", which is currently ').concat(o,". It will provide tools again once it reconnects."),e)}}}else f("warning","mcp-missing-server",'MCP node "'.concat(eL(e),'" is not bound to a server.'),e);h.some(t=>eW(t)&&(t.source===e.id||t.target===e.id))||f("warning","mcp-node-unconnected",'MCP node "'.concat(eL(e),'" is not connected to any Process node.'),e)}if(b.length>0){let e=function(e){let t=new Map,n=(e,n)=>{t.has(e)||t.set(e,[]),t.get(e).push(n)};for(let t of e){var o;!eW(t)&&(n(t.source,t.target),(null==(o=t.data)?void 0:o.bidirectional)&&n(t.target,t.source))}return t}(h);for(let t of b)(null==(s=e.get(t.id))?void 0:s.length)||f("error","start-no-outgoing","The Start node is not connected to anything; the flow cannot run.",t);let t=function(e,t){let n=new Set(e),o=[...e];for(;o.length;){var r;let e=o.shift();for(let l of null!=(r=t.get(e))?r:[])n.has(l)||(n.add(l),o.push(l))}return n}(b.map(e=>e.id),e);for(let e of[...j,...y])t.has(e.id)||f("warning","unreachable-node","".concat("finish"===eB(e)?"Finish":"Process",' node "').concat(eL(e),'" is not reachable from the Start node.'),e)}for(let e of p.filter(e=>"subflow"===eB(e))){let t=h.filter(t=>{var n;return!eW(t)&&(t.source===e.id||t.target===e.id&&!!(null==(n=t.data)?void 0:n.bidirectional))});t.length>1&&f("error","subflow-multiple-outgoing",'Subflow node "'.concat(eL(e),'" has ').concat(t.length," outgoing connections; a subflow can only have one (either A > B > C or a bidirectional A <> B)."),e)}for(let e of j){let t=null==(d=e.data)||null==(i=d.properties)?void 0:i.promptTemplate;if("string"!=typeof t||!t)continue;let n=function(e,t,n){let o=new Map(t.map(e=>[e.id,e])),r=new Set;for(let t of n){var l,a;if(!eW(t))continue;let n=null;if(t.source===e?n=t.target:t.target===e&&(n=t.source),!n)continue;let s=o.get(n);if(!s||"mcp"!==eB(s))continue;let i=null==(a=s.data)||null==(l=a.properties)?void 0:l.boundServer;"string"==typeof i&&i&&r.add(i)}return r}(e.id,p,h),o=new Set;for(let r of(0,eR.A$)(t)){if("handoff"===r.server)continue;let t="".concat(r.kind,":").concat(r.server,":").concat(r.name);!o.has(t)&&(o.add(t),n.has(r.server)?"tool"===r.kind&&c.serverTools&&c.serverTools[r.server]&&!c.serverTools[r.server].includes(r.name)&&f("warning","tool-unavailable",'Process node "'.concat(eL(e),'" references tool "').concat(r.name,'" which server "').concat(r.server,'" no longer provides.'),e):f("error","tool-pill-disconnected",'Process node "'.concat(eL(e),'" references ').concat(r.kind,' "').concat(r.name,'" from server "').concat(r.server,'", but it is not connected to that server (the MCP node was removed or the server was renamed).'),e))}}let C=u.filter(e=>"error"===e.severity).length,A=u.length-C;return{issues:u,errorCount:C,warningCount:A,isRunnable:0===C}}var e_=n(43076);let eO=(0,S.h)("components/flow/FlowBuilder/FlowValidationButton"),eG=e=>{var t,n;let{nodes:l,edges:d}=e,[c,u]=(0,r.useState)(!1),[p,h]=(0,r.useState)(!1),[g,v]=(0,r.useState)(null),y=(0,r.useCallback)(async()=>{h(!0);try{var e;let t=null!=(e=await e_.N.tryLoadModels())?e:void 0,n=await I.S.loadServerConfigs(),o=Array.isArray(n)?n.map(e=>({name:e.name,status:e.disabled?"disabled":void 0})):void 0,r=eH({nodes:l,edges:d},{models:t,servers:o});v(r.issues)}catch(e){eO.warn("Flow validation failed to run",e),v([])}finally{h(!1)}},[l,d]),j=(0,r.useCallback)(()=>{u(!0),v(null),y()},[y]),w=(0,r.useCallback)(e=>{e&&(u(!1),document.dispatchEvent(new CustomEvent("editNode",{detail:{nodeId:e}})))},[]),C=null!=(t=null==g?void 0:g.filter(e=>"error"===e.severity).length)?t:0,A=(null!=(n=null==g?void 0:g.length)?n:0)-C;return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(i.A,{variant:"outlined",color:"primary",onClick:j,startIcon:(0,o.jsx)(eF.A,{}),sx:{textTransform:"none"},children:"Check Flow"}),(0,o.jsxs)(f.A,{open:c,onClose:()=>u(!1),maxWidth:"sm",fullWidth:!0,children:[(0,o.jsxs)(x.A,{component:"div",sx:{display:"flex",alignItems:"center",gap:1},children:[(0,o.jsx)("span",{children:"Flow Check"}),g&&(0,o.jsxs)(a.default,{sx:{display:"flex",gap:1,ml:1},children:[C>0&&(0,o.jsx)(eN.A,{size:"small",color:"error",label:"".concat(C," error").concat(1===C?"":"s")}),A>0&&(0,o.jsx)(eN.A,{size:"small",color:"warning",label:"".concat(A," warning").concat(1===A?"":"s")})]})]}),(0,o.jsx)(m.A,{dividers:!0,children:p?(0,o.jsxs)(a.default,{sx:{display:"flex",alignItems:"center",gap:2,py:3,justifyContent:"center"},children:[(0,o.jsx)(eT.default,{size:22}),(0,o.jsx)(s.default,{color:"text.secondary",children:"Checking flow…"})]}):g&&0===g.length?(0,o.jsxs)(a.default,{sx:{display:"flex",alignItems:"center",gap:1.5,py:3,justifyContent:"center"},children:[(0,o.jsx)(ez.A,{color:"success"}),(0,o.jsx)(s.default,{children:"No problems found — this flow looks runnable."})]}):(0,o.jsx)(eI.A,{dense:!0,disablePadding:!0,children:(null!=g?g:[]).map((e,t)=>{var n;let r=!!e.nodeId,l=(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(G.A,{sx:{minWidth:36},children:"error"===e.severity?(0,o.jsx)(eE.A,{color:"error",fontSize:"small"}):(0,o.jsx)(eD.A,{color:"warning",fontSize:"small"})}),(0,o.jsx)(U.A,{primary:e.message,secondary:r?"Node: ".concat(null!=(n=e.nodeLabel)?n:e.nodeId," — click to open"):void 0})]});return r?(0,o.jsx)(eP.A,{onClick:()=>w(e.nodeId),alignItems:"flex-start",children:l},t):(0,o.jsx)(eM.Ay,{alignItems:"flex-start",children:l},t)})})}),(0,o.jsxs)(b.A,{children:[(0,o.jsx)(i.A,{onClick:y,disabled:p,children:"Re-check"}),(0,o.jsx)(i.A,{onClick:()=>u(!1),variant:"contained",children:"Close"})]})]})]})};var eU=n(33077),eY=n(57813),eJ=n(26466),e$=n(77073);function eV(e){let{currentLabel:t,nameIsCustom:n,defaultLabel:o,previousAutoLabel:r,nextAutoLabel:l}=e;return!0===n?t&&t.length>0?t:l:!t||0===t.length||t===o||void 0!==r&&r.length>0&&t===r?l:t}let eX=(0,S.h)("components/flow/FlowBuilder/Modals/ProcessNodePropertiesModal/hooks/useModelManagement.ts");var eZ=n(9898);let eq=(0,S.h)("frontend/components/flow/FlowBuilder/Modals/ProcessNodePropertiesModal/hooks/useServerConnection"),eK="handoff_to_";function eQ(e,t){let n=e.replace(/\s+/g," ").trim();if(n.length<=t)return n;let o=n.slice(0,t),r=o.lastIndexOf(" ");return"".concat((r>.6*t?o.slice(0,r):o).trimEnd(),"…")}let e0=(0,S.h)("frontend/components/flow/FlowBuilder/Modals/ProcessNodePropertiesModal/hooks/useHandoffTools"),e1=e=>{let{nodeData:t,setNodeData:n}=e;return t?(0,o.jsxs)(a.default,{sx:{display:"flex",flexDirection:"column",height:"100%",pr:2},children:[(0,o.jsx)(s.default,{variant:"h6",gutterBottom:!0,children:"Node Configuration"}),(0,o.jsx)(v.A,{fullWidth:!0,label:"Node Label",value:t.label||"",onChange:e=>n(t=>({...t,label:e.target.value,properties:{...null==t?void 0:t.properties,nameIsCustom:!0}})),margin:"normal"}),(0,o.jsx)(v.A,{fullWidth:!0,label:"Description",value:t.description||"",onChange:e=>n({...t,description:e.target.value}),margin:"normal",multiline:!0,rows:2,helperText:"This description will be displayed on the node"})]}):null};var e2=n(52641),e5=n(43861),e4=n(99944),e6=n(75656),e3=n(18369),e8=n(12857);let e7=e=>{let{isLoadingModels:t,loadError:n,models:r,selectedModelId:l,handleModelSelect:d,isModelBound:c,handleUnbindModel:u}=e;return(0,o.jsxs)(a.default,{sx:{mt:4},children:[(0,o.jsx)(s.default,{variant:"subtitle1",gutterBottom:!0,children:"Bind to Model"}),t?(0,o.jsx)(s.default,{color:"text.secondary",children:"Loading models..."}):n?(0,o.jsx)(s.default,{color:"error",children:n}):0===r.length?(0,o.jsx)(s.default,{color:"text.secondary",children:"No models available. Add some in the Model Manager."}):(0,o.jsxs)(o.Fragment,{children:[(0,o.jsxs)(e2.A,{component:"fieldset",fullWidth:!0,children:[(0,o.jsx)(e5.A,{value:l,onChange:e=>d(e.target.value),children:(0,o.jsx)(eU.Ay,{container:!0,spacing:2,children:r.map(e=>(0,o.jsx)(eU.Ay,{item:!0,xs:12,sm:6,children:(0,o.jsx)(C.A,{elevation:1,sx:{p:2,border:2*(l===e.id),borderColor:"primary.main"},children:(0,o.jsx)(e4.A,{value:e.id,control:(0,o.jsx)(e6.A,{}),label:(0,o.jsxs)(a.default,{children:[(0,o.jsx)(s.default,{variant:"subtitle2",children:e.displayName||e.name}),e.description&&(0,o.jsx)(s.default,{variant:"caption",color:"text.secondary",display:"block",children:e.description}),e.baseUrl&&(0,o.jsx)(s.default,{variant:"caption",color:"text.secondary",children:e.baseUrl})]}),sx:{width:"100%",m:0}})})},e.id))})}),(0,o.jsx)(e3.A,{children:l?"This node will use the selected model for processing.":"Select a model to bind this node to."})]}),c&&(0,o.jsx)(a.default,{sx:{mt:2,display:"flex",justifyContent:"flex-end"},children:(0,o.jsx)(i.A,{startIcon:(0,o.jsx)(e8.A,{}),onClick:u,color:"primary",variant:"outlined",size:"small",children:"Unbind Model"})})]})]})};var e9=n(66177),te=n(56422),tt=n(29767),tn=n(84578),to=n(76530),tr=n(25541),tl=n(51611),ta=n(89218);let ts=(0,S.h)("frontend/components/flow/FlowBuilder/Modals/ProcessNodePropertiesModal/ServerTools"),ti=e=>{var t,n,l;let{isLoadingServers:d,connectedMcpNodes:p,availableServers:h,onConnectMcpServer:f,serverToolsMap:x,serverStatuses:m,isLoadingTools:g,handleSelectToolServer:b,handleInsertToolBinding:y,selectedToolServerNodeId:w,selectedNodeId:A,isLoadingSelectedServerTools:S,promptBuilderRef:k,handleRetryServer:N,handleRestartServer:T}=e,I=null!=(l=null!=w?w:null==(t=p[0])?void 0:t.nodeId)?l:null,[P,M]=(0,r.useState)({}),[F,E]=(0,r.useState)(null),D=(null!=h?h:[]).filter(e=>!p.some(t=>t.serverName===e.name)),z=!!f&&D.length>0,R=(0,o.jsx)(Y.A,{open:!!F,anchorEl:F,onClose:()=>E(null),children:D.map(e=>(0,o.jsxs)(O.A,{onClick:()=>{var t;return t=e.name,void(E(null),null==f||f(t))},children:[(0,o.jsx)(a.default,{sx:{width:8,height:8,borderRadius:"50%",mr:1,bgcolor:"connected"===e.status?"success.main":"text.disabled"}}),e.name]},e.name))}),[B,L]=(0,r.useState)(""),W=e=>{try{let t=p.find(t=>t.nodeId===e);if(!t)return ts.warn("Could not find connected MCP node with ID ".concat(e)),[];let n=t.enabledTools||[];return ts.debug("Enabled tools for node ".concat(e,": ").concat(JSON.stringify(n))),Array.isArray(n)?n:[]}catch(t){return ts.error("Error getting enabled tools for node ".concat(e,":"),t),[]}},H=(e,t,n)=>{try{if(!n||!Array.isArray(n))return ts.warn("Tools array is not available or not an array for server ".concat(t)),[];let o=W(e),r=n;if(o.length>0?r=n.filter(e=>e&&e.name&&o.includes(e.name)):(ts.debug("No tools explicitly enabled for node ".concat(e,", showing none.")),r=[]),B.trim()){let e=B.toLowerCase().trim();r=r.filter(t=>t.name&&t.name.toLowerCase().includes(e)||t.description&&t.description.toLowerCase().includes(e)||t.inputSchema&&JSON.stringify(t.inputSchema).toLowerCase().includes(e))}return r}catch(o){return ts.error("Error filtering tools for node ".concat(e," (server ").concat(t,"):"),o),n||[]}},_=e=>{b(e)},G=async(e,t)=>{t.stopPropagation(),ts.debug("Retry button clicked for server: ".concat(e)),M(t=>({...t,[e]:!0}));try{N&&await N(e)}finally{setTimeout(()=>{M(t=>({...t,[e]:!1}))},500)}},U=async(e,t)=>{t.stopPropagation(),ts.debug("Restart button clicked for server: ".concat(e)),M(t=>({...t,[e]:!0}));try{T&&await T(e)}finally{setTimeout(()=>{M(t=>({...t,[e]:!1}))},500)}};(0,r.useEffect)(()=>{p.length>0&&!w&&b(p[0].nodeId)},[p,w,b]);let J=p.find(e=>e.nodeId===I),$=null==J?void 0:J.serverName;return(0,o.jsxs)(a.default,{sx:{mt:4,display:"flex",flexDirection:"column",height:"100%"},children:[(0,o.jsx)(s.default,{variant:"subtitle1",gutterBottom:!0,children:"Connected MCP Servers and Tools"}),d?(0,o.jsxs)(a.default,{sx:{display:"flex",alignItems:"center",gap:1},children:[(0,o.jsx)(eT.default,{size:20}),(0,o.jsx)(s.default,{color:"text.secondary",children:"Loading connected MCP nodes..."})]}):0===p.length?(0,o.jsxs)(a.default,{sx:{p:2,border:"1px dashed rgba(0, 0, 0, 0.12)",borderRadius:1},children:[(0,o.jsx)(s.default,{color:"text.secondary",align:"center",children:"No MCP nodes connected to this Process node."}),(0,o.jsx)(s.default,{variant:"caption",color:"text.secondary",align:"center",display:"block",sx:{mt:1},children:z?"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."}),z&&(0,o.jsx)(a.default,{sx:{display:"flex",justifyContent:"center",mt:2},children:(0,o.jsx)(i.A,{variant:"contained",size:"small",startIcon:(0,o.jsx)(j.A,{}),onClick:e=>E(e.currentTarget),children:"Connect MCP Server"})}),R]}):(0,o.jsxs)(a.default,{sx:{display:"flex",flexDirection:"column",flexGrow:1,height:"calc(100% - 40px)"},children:[(0,o.jsxs)(a.default,{sx:{display:"flex",alignItems:"center",mb:2,borderBottom:1,borderColor:"divider"},children:[(0,o.jsx)(eY.A,{value:I||(null==(n=p[0])?void 0:n.nodeId)||"",onChange:(e,t)=>_(t),variant:"scrollable",scrollButtons:"auto",sx:{flexGrow:1},children:p.map(e=>{if(!e||!e.nodeId||!e.serverName)return ts.warn("Skipping invalid MCP node in tabs:",e),null;let t=e.serverName,n=e.nodeId,r=e.status;P[t],g[t];let l=x[t]||[],i=W(n);return H(n,t,l).length,(0,o.jsx)(eJ.A,{value:n,label:(0,o.jsxs)(a.default,{sx:{display:"flex",alignItems:"center"},children:[(0,o.jsx)(s.default,{variant:"body2",sx:{color:"connected"===r?"success.main":"error"===r?"error.main":"text.secondary"},children:t}),i.length>0&&(0,o.jsx)(e9.A,{badgeContent:i.length,color:"primary",sx:{ml:1}})]}),sx:{textTransform:"none",minHeight:"48px",opacity:"connected"!==r?.7:1}},n)})}),z&&(0,o.jsx)(u.A,{title:"Connect another MCP server",children:(0,o.jsx)(c.A,{size:"small",onClick:e=>E(e.currentTarget),sx:{ml:1},children:(0,o.jsx)(j.A,{fontSize:"small"})})}),R]}),J&&$&&(0,o.jsxs)(a.default,{sx:{display:"flex",justifyContent:"flex-end",mb:2},children:[(0,o.jsx)(u.A,{title:"Retry connection for ".concat($),children:(0,o.jsx)("span",{children:(0,o.jsx)(c.A,{size:"small",onClick:e=>G($,e),disabled:P[$]||g[$],children:P[$]?(0,o.jsx)(eT.default,{size:16}):(0,o.jsx)(to.A,{fontSize:"small"})})})}),"connected"===J.status&&T&&(0,o.jsx)(u.A,{title:"Restart server ".concat($),children:(0,o.jsx)("span",{children:(0,o.jsx)(c.A,{size:"small",onClick:e=>U($,e),disabled:P[$],sx:{ml:1},children:(0,o.jsx)(tr.A,{fontSize:"small"})})})})]}),(0,o.jsx)(v.A,{placeholder:"Search enabled tools...",variant:"outlined",size:"small",fullWidth:!0,value:B,onChange:e=>L(e.target.value),sx:{mb:2},InputProps:{startAdornment:(0,o.jsx)(te.A,{position:"start",children:(0,o.jsx)(tl.A,{fontSize:"small"})})}}),(0,o.jsx)(C.A,{variant:"outlined",sx:{flexGrow:1,overflow:"auto",p:0,height:"calc(100% - 140px)"},children:J&&$&&(()=>{let e=J.nodeId,t=J.serverName;if("connected"!==J.status)return(0,o.jsx)(a.default,{sx:{p:2,textAlign:"center"},children:(0,o.jsxs)(s.default,{color:"text.secondary",children:["Server '",t,"' is not connected. Connect to view tools."]})},e);if(g[t])return(0,o.jsx)(a.default,{sx:{display:"flex",justifyContent:"center",p:2},children:(0,o.jsx)(eT.default,{size:24})},e);let n=x[t]||[],r=H(e,t,n);if(0===r.length){let t=W(e).length;return(0,o.jsx)(a.default,{sx:{p:2,textAlign:"center"},children:(0,o.jsx)(s.default,{color:"text.secondary",children:B.trim()?'No enabled tools match "'.concat(B,'" for this node.'):0===t?"No tools are enabled for this node instance. Enable tools in the MCP Node properties.":"No tools available or enabled for this node instance."})},e)}return(0,o.jsx)(eI.A,{disablePadding:!0,children:r.map(n=>(0,o.jsxs)(tt.A,{variant:"outlined",onClick:()=>{e!==I?(ts.debug("Node tab not selected, selecting node first",{selectedNodeId:e,serverName:t,toolName:n.name}),_(e)):t&&n.name?(ts.debug("Inserting tool binding",{serverName:t,toolName:n.name}),y(t,n.name)):ts.warn("Cannot insert tool binding, server or tool name is undefined",{serverName:t,toolName:n.name})},sx:{mb:1,mx:1,mt:1,cursor:"pointer",position:"relative","&:hover":{boxShadow:1,bgcolor:"action.hover"}},children:[(0,o.jsx)(tn.A,{sx:{p:2,"&:last-child":{pb:2}},children:(0,o.jsx)(a.default,{sx:{display:"flex",justifyContent:"space-between",alignItems:"flex-start"},children:(0,o.jsxs)(a.default,{sx:{width:"100%"},children:[(0,o.jsxs)(s.default,{variant:"subtitle2",component:"div",sx:{display:"flex",alignItems:"center"},children:[(0,o.jsx)(ta.A,{fontSize:"small",sx:{mr:1,color:"primary.main"}}),n.name]}),(0,o.jsx)(s.default,{variant:"body2",color:"text.secondary",sx:{mt:.5},children:n.description||"No description available"}),n.inputSchema&&(e=>e&&e.properties?(0,o.jsxs)(a.default,{sx:{mt:1},children:[(0,o.jsx)(s.default,{variant:"caption",color:"text.secondary",sx:{fontWeight:"medium"},children:"Parameters:"}),(0,o.jsx)(a.default,{sx:{pl:1,mt:.5},children:Object.entries(e.properties).map(t=>{var n;let[r,l]=t;return(0,o.jsxs)(a.default,{sx:{mb:.5},children:[(0,o.jsxs)(s.default,{variant:"caption",component:"span",sx:{fontWeight:"medium"},children:[r,(null==(n=e.required)?void 0:n.includes(r))&&(0,o.jsx)(s.default,{variant:"caption",component:"span",color:"error.main",children:" *"}),": "]}),(0,o.jsx)(s.default,{variant:"caption",component:"span",color:"text.secondary",children:l.description||l.type||"No description"})]},r)})})]}):null)(n.inputSchema)]})})}),(0,o.jsx)(u.A,{title:"Add ".concat(n.name," from ").concat(t," to prompt"),children:(0,o.jsx)(a.default,{sx:{position:"absolute",top:0,left:0,right:0,bottom:0}})})]},n.name))},e)})()})]})]})};var td=n(59323);let tc=(0,S.h)("frontend/components/flow/FlowBuilder/Modals/ProcessNodePropertiesModal/ServerResources"),tu=e=>{let{primary:t,secondary:n,chip:r,onClick:l}=e;return(0,o.jsx)(tt.A,{variant:"outlined",onClick:l,sx:{mb:1,mx:1,mt:1,cursor:"pointer","&:hover":{boxShadow:1,bgcolor:"action.hover"}},children:(0,o.jsx)(tn.A,{sx:{p:2,"&:last-child":{pb:2}},children:(0,o.jsxs)(a.default,{sx:{display:"flex",justifyContent:"space-between",alignItems:"flex-start"},children:[(0,o.jsxs)(a.default,{sx:{width:"100%"},children:[(0,o.jsxs)(s.default,{variant:"subtitle2",component:"div",sx:{display:"flex",alignItems:"center"},children:[(0,o.jsx)(td.A,{fontSize:"small",sx:{mr:1,color:"primary.main"}}),t]}),(0,o.jsx)(s.default,{variant:"body2",color:"text.secondary",sx:{mt:.5,wordBreak:"break-all"},children:n})]}),r&&(0,o.jsx)(eN.A,{size:"small",label:r,sx:{ml:1,flexShrink:0}})]})})})},tp=e=>{var t;let{connectedMcpNodes:n,handleInsertResourceBinding:l,promptBuilderRef:i}=e,[d,c]=(0,r.useState)(null),[u,p]=(0,r.useState)([]),[f,x]=(0,r.useState)([]),[m,g]=(0,r.useState)(!1),[b,y]=(0,r.useState)(),[j,w]=(0,r.useState)(""),A=n.find(e=>e.nodeId===d),S=null==A?void 0:A.serverName;(0,r.useEffect)(()=>{n.length>0&&!d&&c(n[0].nodeId)},[n,d]);let k=(0,r.useCallback)(async e=>{g(!0),y(void 0);try{let t=await I.S.listServerResources(e);p(t.resources||[]),x(t.resourceTemplates||[]),y(t.error)}catch(t){tc.warn("Failed to load resources for ".concat(e),t),y(t instanceof Error?t.message:"Failed to load resources")}finally{g(!1)}},[]);(0,r.useEffect)(()=>{S?k(S):(p([]),x([]))},[S,k]);let N=e=>e.toLowerCase().includes(j.toLowerCase().trim()),T=j.trim()?u.filter(e=>N(e.name||"")||N(e.uri)||N(e.description||"")):u,P=j.trim()?f.filter(e=>N(e.name||"")||N(e.uriTemplate)||N(e.description||"")):f,M=e=>{S&&e&&l(S,e)};return(0,o.jsxs)(a.default,{sx:{mt:4,display:"flex",flexDirection:"column",height:"100%"},children:[(0,o.jsx)(s.default,{variant:"subtitle1",gutterBottom:!0,children:"Give this step access to…"}),(0,o.jsx)(s.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===n.length?(0,o.jsxs)(a.default,{sx:{p:2,border:"1px dashed rgba(0, 0, 0, 0.12)",borderRadius:1},children:[(0,o.jsx)(s.default,{color:"text.secondary",align:"center",children:"No MCP nodes connected to this Process node."}),(0,o.jsx)(s.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,o.jsxs)(a.default,{sx:{display:"flex",flexDirection:"column",flexGrow:1,height:"calc(100% - 40px)"},children:[(0,o.jsx)(eY.A,{value:d||(null==(t=n[0])?void 0:t.nodeId)||"",onChange:(e,t)=>c(t),variant:"scrollable",scrollButtons:"auto",sx:{mb:2,borderBottom:1,borderColor:"divider"},children:n.map(e=>(0,o.jsx)(eJ.A,{value:e.nodeId,label:(0,o.jsx)(s.default,{variant:"body2",sx:{color:"connected"===e.status?"success.main":"error"===e.status?"error.main":"text.secondary"},children:e.serverName}),sx:{textTransform:"none",minHeight:48,opacity:"connected"!==e.status?.7:1}},e.nodeId))}),(0,o.jsx)(v.A,{placeholder:"Search resources…",variant:"outlined",size:"small",fullWidth:!0,value:j,onChange:e=>w(e.target.value),sx:{mb:2},InputProps:{startAdornment:(0,o.jsx)(te.A,{position:"start",children:(0,o.jsx)(tl.A,{fontSize:"small"})})}}),b&&(0,o.jsx)(h.A,{severity:"warning",sx:{mb:2},children:b}),(0,o.jsx)(C.A,{variant:"outlined",sx:{flexGrow:1,overflow:"auto",p:0,height:"calc(100% - 140px)"},children:A&&"connected"!==A.status?(0,o.jsx)(a.default,{sx:{p:2,textAlign:"center"},children:(0,o.jsxs)(s.default,{color:"text.secondary",children:["Server '",S,"' is not connected. Connect to view resources."]})}):m?(0,o.jsx)(a.default,{sx:{display:"flex",justifyContent:"center",p:2},children:(0,o.jsx)(eT.default,{size:24})}):0===T.length&&0===P.length?(0,o.jsx)(a.default,{sx:{p:2,textAlign:"center"},children:(0,o.jsx)(s.default,{color:"text.secondary",children:j.trim()?'No resources match "'.concat(j,'".'):"This server does not publish any resources."})}):(0,o.jsxs)(eI.A,{disablePadding:!0,children:[T.map(e=>(0,o.jsx)(tu,{primary:e.name||e.uri,secondary:e.description||e.uri,chip:e.mimeType,tooltip:"Add ".concat(e.name||e.uri," to prompt"),onClick:()=>M(e.uri)},e.uri)),P.map(e=>(0,o.jsx)(tu,{primary:e.name||e.uriTemplate,secondary:e.description||e.uriTemplate,chip:"template",tooltip:"Add template ".concat(e.uriTemplate," to prompt (fill in variables, e.g. with ${global:VAR})"),onClick:()=>M(e.uriTemplate)},e.uriTemplate))]})})]})]})},th=(0,S.h)("frontend/components/flow/FlowBuilder/Modals/ProcessNodePropertiesModal/ServerTools/AgentTools"),tf=e=>{let{handoffTools:t,isLoadingHandoffTools:n,handleInsertToolBinding:l,promptBuilderRef:i}=e,[d,c]=(0,r.useState)(""),p=t.filter(e=>{if(!d.trim())return!0;let t=d.toLowerCase().trim();return e.name&&e.name.toLowerCase().includes(t)||e.description&&e.description.toLowerCase().includes(t)});return(0,o.jsxs)(a.default,{sx:{mt:4,display:"flex",flexDirection:"column",height:"100%"},children:[(0,o.jsx)(s.default,{variant:"subtitle1",gutterBottom:!0,children:"Agent Handoff Tools"}),n?(0,o.jsxs)(a.default,{sx:{display:"flex",alignItems:"center",gap:1},children:[(0,o.jsx)(eT.default,{size:20}),(0,o.jsx)(s.default,{color:"text.secondary",children:"Loading handoff tools..."})]}):0===t.length?(0,o.jsxs)(a.default,{sx:{p:2,border:"1px dashed rgba(0, 0, 0, 0.12)",borderRadius:1},children:[(0,o.jsx)(s.default,{color:"text.secondary",align:"center",children:"No handoff tools available for this node."}),(0,o.jsx)(s.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,o.jsxs)(a.default,{sx:{display:"flex",flexDirection:"column",flexGrow:1,height:"calc(100% - 40px)"},children:[(0,o.jsx)(v.A,{placeholder:"Search handoff tools...",variant:"outlined",size:"small",fullWidth:!0,value:d,onChange:e=>c(e.target.value),sx:{mb:2},InputProps:{startAdornment:(0,o.jsx)(te.A,{position:"start",children:(0,o.jsx)(tl.A,{fontSize:"small"})})}}),(0,o.jsx)(C.A,{variant:"outlined",sx:{flexGrow:1,overflow:"auto",p:0,height:"calc(100% - 56px)"},children:0===p.length?(0,o.jsx)(a.default,{sx:{p:2,textAlign:"center"},children:(0,o.jsx)(s.default,{color:"text.secondary",children:d.trim()?'No handoff tools match "'.concat(d,'".'):"No handoff tools available."})}):(0,o.jsx)(eI.A,{disablePadding:!0,children:p.map(e=>(0,o.jsxs)(tt.A,{variant:"outlined",onClick:()=>{e.name?(th.debug("Inserting handoff tool binding",{toolType:"handoff",toolName:e.name}),l("handoff",e.name)):th.warn("Cannot insert handoff tool binding, tool name is undefined",{toolName:e.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,o.jsx)(tn.A,{sx:{p:2,"&:last-child":{pb:2}},children:(0,o.jsx)(a.default,{sx:{display:"flex",justifyContent:"space-between",alignItems:"flex-start"},children:(0,o.jsxs)(a.default,{sx:{width:"100%"},children:[(0,o.jsxs)(s.default,{variant:"subtitle2",component:"div",sx:{display:"flex",alignItems:"center"},children:[(0,o.jsx)(ta.A,{fontSize:"small",sx:{mr:1,color:"text.secondary"}}),e.name]}),(0,o.jsx)(s.default,{variant:"body2",color:"text.secondary",sx:{mt:.5},children:e.description||"No description available"}),e.inputSchema&&(e=>e&&e.properties&&0!==Object.keys(e.properties).length?(0,o.jsxs)(a.default,{sx:{mt:1},children:[(0,o.jsx)(s.default,{variant:"caption",color:"text.secondary",sx:{fontWeight:"medium"},children:"Parameters:"}),(0,o.jsx)(a.default,{sx:{pl:1,mt:.5},children:Object.entries(e.properties).map(t=>{var n;let[r,l]=t;return(0,o.jsxs)(a.default,{sx:{mb:.5},children:[(0,o.jsxs)(s.default,{variant:"caption",component:"span",sx:{fontWeight:"medium"},children:[r,(null==(n=e.required)?void 0:n.includes(r))&&(0,o.jsx)(s.default,{variant:"caption",component:"span",color:"error.main",children:" *"}),": "]}),(0,o.jsx)(s.default,{variant:"caption",component:"span",color:"text.secondary",children:l.description||l.type||"No description"}),l.enum&&(0,o.jsx)(a.default,{sx:{pl:2,mt:.5},children:(0,o.jsxs)(s.default,{variant:"caption",color:"text.secondary",children:["Options: ",l.enum.join(", ")]})})]},r)})})]}):(0,o.jsx)(a.default,{sx:{mt:1},children:(0,o.jsx)(s.default,{variant:"caption",color:"text.secondary",sx:{fontStyle:"italic"},children:"No parameters required."})}))(e.inputSchema)]})})}),(0,o.jsx)(u.A,{title:"Add ".concat(e.name," handoff tool to prompt"),children:(0,o.jsx)(a.default,{sx:{position:"absolute",top:0,left:0,right:0,bottom:0}})})]},e.name))})})]})]})};var tx=n(9957),tm=n(95480);let tg=(0,S.h)("frontend/components/Flow/FlowManager/FlowBuilder/Modals/ProcessNodePropertiesModal/PromptTemplateEditor"),tv=(0,r.forwardRef)((e,t)=>{let{promptTemplate:n,handlePromptChange:l,excludeModelPrompt:d,setExcludeModelPrompt:c,excludeStartNodePrompt:u,setExcludeStartNodePrompt:p,isModelBound:f,models:x,nodeData:m,flowId:g}=e,[v,b]=(0,r.useState)(""),[y,j]=(0,r.useState)(!1),[w,A]=(0,r.useState)(null),S=(0,r.useRef)(null);(0,r.useImperativeHandle)(t,()=>({insertText:e=>{S.current&&S.current.insertText(e)},getMode:()=>S.current?S.current.getMode():"raw"}));let k=async()=>{if(tg.debug("fetchRenderedPrompt called with:",{flowId:g,nodeId:null==m?void 0:m.id}),!g||!m||!m.id)return void A("Flow ID or Node ID is missing");j(!0),A(null);try{var e;let t=await fetch("/api/flow/prompt-renderer",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({flowId:g,nodeId:m.id,options:{renderMode:"rendered",includeConversationHistory:!1,excludeModelPrompt:d,excludeStartNodePrompt:u}})}),n=await t.json();if(!t.ok)throw Error(n.error||"Failed to render prompt");tg.debug("Rendered prompt received",{promptLength:null==(e=n.prompt)?void 0:e.length}),b(n.prompt+"\n\n [Messages sent by User]")}catch(e){tg.error("Error fetching rendered prompt",e),A(e instanceof Error?e.message:"An unknown error occurred")}finally{j(!1)}};return(0,r.useEffect)(()=>{S.current&&"preview"===S.current.getMode()&&k()},[n,d,u,g,null==m?void 0:m.id]),(0,o.jsxs)(a.default,{sx:{display:"flex",flexDirection:"column",height:"100%",pl:2},children:[(0,o.jsxs)(a.default,{sx:{display:"flex",justifyContent:"space-between",alignItems:"center",mb:2},children:[(0,o.jsx)(s.default,{variant:"h6",children:"Prompt Template"}),(0,o.jsxs)(a.default,{sx:{display:"flex",gap:2},children:[(0,o.jsx)(e4.A,{control:(0,o.jsx)(tx.A,{checked:d,onChange:e=>c(e.target.checked),color:"primary",size:"small"}),label:"Exclude Model Prompt"}),(0,o.jsx)(e4.A,{control:(0,o.jsx)(tx.A,{checked:u,onChange:e=>p(e.target.checked),color:"primary",size:"small"}),label:"Exclude Start Node Prompt"})]})]}),(0,o.jsxs)(a.default,{sx:{mb:2,p:2,bgcolor:"rgba(0, 0, 0, 0.03)",borderRadius:1,fontSize:"0.85rem"},children:[(0,o.jsx)(s.default,{variant:"caption",sx:{display:"block",mb:1,fontWeight:"bold"},children:"Prompt Rendering Order:"}),(0,o.jsxs)(a.default,{sx:{display:"flex",flexDirection:"column",gap:.5},children:[!u&&(0,o.jsxs)(a.default,{sx:{display:"flex",alignItems:"center"},children:[(0,o.jsx)(s.default,{variant:"caption",sx:{color:"primary.main",fontWeight:"medium"},children:"1. Start Node Prompt"}),(0,o.jsx)(s.default,{variant:"caption",sx:{ml:1,color:"text.secondary"},children:"(from the Start node in this flow)"})]}),!d&&f&&(0,o.jsxs)(a.default,{sx:{display:"flex",alignItems:"center"},children:[(0,o.jsxs)(s.default,{variant:"caption",sx:{color:"secondary.main",fontWeight:"medium"},children:[u?"1.":"2."," Model Prompt"]}),(0,o.jsxs)(s.default,{variant:"caption",sx:{ml:1,color:"text.secondary"},children:["(from the selected model: ",(()=>{var e,t;let n=null==(e=m.properties)?void 0:e.boundModel;if(!n)return"None";let o=x.find(e=>e.id===n);return o?o.displayName||o.name:(null==(t=m.properties)?void 0:t.modelName)||"None"})(),")"]})]}),(0,o.jsxs)(a.default,{sx:{display:"flex",alignItems:"center"},children:[(0,o.jsxs)(s.default,{variant:"caption",sx:{fontWeight:"medium"},children:[u||d||!f?u&&(d||!f)?"1.":"2.":"3."," This Node's Prompt"]}),(0,o.jsx)(s.default,{variant:"caption",sx:{ml:1,color:"text.secondary"},children:"(defined below)"})]}),(0,o.jsxs)(a.default,{sx:{display:"flex",alignItems:"center"},children:[(0,o.jsxs)(s.default,{variant:"caption",sx:{fontWeight:"medium"},children:[u||d||!f?u&&(d||!f)?"2.":"3.":"4."," Conversation History"]}),(0,o.jsx)(s.default,{variant:"caption",sx:{ml:1,color:"text.secondary"},children:"(coming from ChatCompletion endpoint)"})]})]})]}),(0,o.jsx)(a.default,{sx:{flexGrow:1,display:"flex",flexDirection:"column",height:"calc(100% - 120px)"},children:(0,o.jsx)(tm.A,{ref:S,value:n,onChange:l,label:"",height:"100%",onModeChange:e=>{"preview"===e&&k()},customPreviewRenderer:()=>y?(0,o.jsx)(a.default,{sx:{display:"flex",justifyContent:"center",alignItems:"center",height:"100%"},children:(0,o.jsx)(eT.default,{size:40})}):w?(0,o.jsxs)(a.default,{sx:{display:"flex",flexDirection:"column",p:2},children:[(0,o.jsx)(h.A,{severity:"error",sx:{mb:2},action:(0,o.jsx)(i.A,{color:"inherit",size:"small",onClick:k,children:"Retry"}),children:w}),(0,o.jsx)(s.default,{variant:"body2",color:"text.secondary",sx:{mb:2,textAlign:"center"},children:g?"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,o.jsxs)(a.default,{sx:{p:2},children:[(0,o.jsx)(s.default,{variant:"subtitle1",gutterBottom:!0,sx:{fontWeight:"medium"},children:"Complete Rendered Prompt"}),(0,o.jsx)(C.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,o.jsx)(a.default,{component:"pre",sx:{whiteSpace:"pre-wrap",wordBreak:"break-word",fontFamily:"monospace",fontSize:"0.875rem",m:0},children:v||"No rendered prompt available. Please check your flow configuration."})})]})})})]})});tv.displayName="PromptTemplateEditor";var tb=n(51221),ty=n(55606);let tj=e=>{let{nodeData:t,handlePropertyChange:n,properties:r}=e;return(0,o.jsx)(o.Fragment,{children:r.length>0&&(0,o.jsxs)(a.default,{sx:{mt:3},children:[(0,o.jsx)(s.default,{variant:"subtitle1",gutterBottom:!0,children:"Node Properties"}),r.map(e=>(e=>{var r,l,a;if(!t)return null;let s=null!=(l=null==(r=t.properties)?void 0:r[e.key])?l:"";switch(e.type){case"text":return(0,o.jsx)(v.A,{fullWidth:!0,label:e.label,multiline:e.multiline,rows:e.multiline?4:1,value:s,onChange:t=>n(e.key,t.target.value),margin:"normal",helperText:e.helperText},e.key);case"number":return(0,o.jsx)(v.A,{fullWidth:!0,type:"number",label:e.label,value:s,inputProps:{min:e.min,max:e.max,step:e.step},onChange:t=>{let o=t.target.value;n(e.key,""===o?void 0:Number(o))},margin:"normal",helperText:e.helperText},e.key);case"select":return(0,o.jsxs)(e2.A,{fullWidth:!0,margin:"normal",children:[(0,o.jsx)(tb.A,{children:e.label}),(0,o.jsx)(ty.A,{value:s||"",label:e.label,onChange:t=>n(e.key,t.target.value),children:null==(a=e.options)?void 0:a.map(e=>(0,o.jsx)(O.A,{value:e,children:e},e))})]},e.key);case"boolean":return(0,o.jsx)(e4.A,{control:(0,o.jsx)(tx.A,{checked:s||!1,onChange:t=>n(e.key,t.target.checked)}),label:e.label,sx:{my:1}},e.key);default:return null}})(e))]})})},tw=(0,S.h)("frontend/components/Flow/FlowManager/FlowBuilder/Modals/ProcessNodePropertiesModal"),tC=e=>{var t;let{open:n,node:l,onClose:d,onSave:u,flowEdges:p=[],flowNodes:h=[],flowId:g,onConnectMcpServer:v}=e;tw.debug("ProcessNodePropertiesModal rendered with:",{node:l,flowId:g});let{nodeData:y,setNodeData:j,handlePropertyChange:w}=(e=>{let[t,n]=(0,r.useState)(null);(0,r.useEffect)(()=>{e&&n({id:e.id,...e.data,properties:{...e.data.properties}})},[e]);let o=(0,r.useCallback)((e,t)=>{n(n=>n?{...n,properties:{...n.properties,[e]:t}}:null)},[]);return{nodeData:t,setNodeData:n,handlePropertyChange:o}})(l),[C,S]=(0,r.useState)(""),[k,N]=(0,r.useState)(!1),[T,P]=(0,r.useState)(!1),[M,F]=(0,r.useState)(!1),[E,D]=(0,r.useState)("server"),{models:z,isLoadingModels:R,loadError:B,handleModelSelect:L,handleUnbindModel:W}=((e,t,n,o,l)=>{var a,s;eX.debug("useModelManagement: Entering hook");let[i,d]=(0,r.useState)([]),[c,u]=(0,r.useState)(!1),[p,h]=(0,r.useState)(null);(0,r.useEffect)(()=>{eX.debug("useModelManagement useEffect: Checking if modal is open",{open:e}),e&&f()},[e]),(0,r.useEffect)(()=>{var e,o;if(0===i.length)return;let r=null==t||null==(e=t.properties)?void 0:e.boundModel;if(!r)return;let l=i.find(e=>e.id===r);l&&l.name&&(null==t||null==(o=t.properties)?void 0:o.modelName)!==l.name&&n(e=>{var t;return e&&(null==(t=e.properties)?void 0:t.modelName)!==l.name?{...e,properties:{...e.properties,modelName:l.name}}:e})},[i,null==t||null==(a=t.properties)?void 0:a.boundModel,null==t||null==(s=t.properties)?void 0:s.modelName,n]);let f=async()=>{eX.debug("loadModels: Entering method"),u(!0),h(null);try{let e=await e_.N.loadModels();d(e)}catch(e){eX.warn("loadModels: Failed to load models:",e),h("Failed to load models")}u(!1)},x=(0,r.useCallback)(e=>{eX.debug("handleModelSelect: Entering method",{modelId:e});let t=i.find(t=>t.id===e);t&&(n(n=>{var o;if(!n)return null;let r=i.find(e=>{var t;return e.id===(null==(t=n.properties)?void 0:t.boundModel)}),l=eV({currentLabel:n.label,nameIsCustom:null==(o=n.properties)?void 0:o.nameIsCustom,defaultLabel:"Process Node",previousAutoLabel:r?r.displayName||r.name:void 0,nextAutoLabel:t.displayName||t.name});return{...n,label:l,properties:{...n.properties,boundModel:e,modelName:t.name}}}),l(!0))},[i,n,o,l]);return{models:i,isLoadingModels:c,loadError:p,handleModelSelect:x,handleUnbindModel:(0,r.useCallback)(()=>{eX.debug("handleUnbindModel: Entering method"),n(e=>{if(!e)return null;let{boundModel:t,modelName:n,...o}=e.properties;return{...e,properties:{...o,promptTemplate:o.promptTemplate||""}}}),l(!1)},[n,l])}})(n,y,j,S,N),{connectedMcpNodes:H,allServers:_,isLoadingServers:O,selectedToolServerNodeId:G,serverToolsMap:U,serverStatuses:Y,isLoadingTools:J,handleSelectToolServer:$,isLoadingSelectedServerTools:V,handleRetryServer:X,handleRestartServer:Z}=((e,t,n,o)=>{let l=(0,eZ.v)(),a=l.servers||[],s=l.isLoading||!1,[i,d]=(0,r.useState)({}),[c,u]=(0,r.useState)({}),[p,h]=(0,r.useState)({}),[f,x]=(0,r.useState)(null),[m,g]=(0,r.useState)(!1),v=(0,r.useMemo)(()=>t?((e,t)=>[...new Set(t.filter(t=>{var n,o;return t.source===e&&(null==(n=t.data)?void 0:n.edgeType)==="mcp"||t.target===e&&(null==(o=t.data)?void 0:o.edgeType)==="mcp"}).map(t=>t.source===e?t.target:t.source))])(t.id,n):[],[t,n]),b=(0,r.useMemo)(()=>{if(!t||0===v.length)return[];if(!o||!Array.isArray(o))return eq.warn("flowNodes is not available or not an array when filtering connected servers"),[];try{let e=[],t=new Set;return v.forEach(n=>{if(t.has(n))return;let r=o.find(e=>e&&e.id===n);if(!r||!r.data||!r.data.properties)return void eq.warn("Could not find valid MCP node data for ID ".concat(n));let l=r.data.properties.boundServer;if(!l)return void eq.warn("MCP node ".concat(n," is not bound to any server."));let s=a.find(e=>e.name===l),i=(null==s?void 0:s.status)||"unknown",d=r.data.properties.enabledTools||[];e.push({nodeId:n,serverName:l,status:i,enabledTools:Array.isArray(d)?d:[]}),t.add(n)}),eq.debug("Generated connectedMcpNodes:",JSON.stringify(e)),e}catch(e){return eq.error("Error preparing connected MCP nodes:",e),[]}},[t,v,a,o]);(0,r.useEffect)(()=>{if(b&&b.length>0){let e={};b.forEach(t=>{let n=a.find(e=>e.name===t.serverName);e[t.serverName]=(null==n?void 0:n.status)||t.status||"unknown"}),d(e)}},[b,a]),(0,r.useEffect)(()=>{if(e&&b.length>0){let e=Array.from(new Set(b.map(e=>e.serverName)));(async()=>{let t={},n={...c},o=e.filter(e=>{let t=a.find(t=>t.name===e);return(null==t?void 0:t.status)==="connected"&&!c[e]&&!p[e]});0!==o.length&&(o.forEach(e=>{t[e]=!0}),h(e=>({...e,...t})),await Promise.all(o.map(async e=>{try{eq.debug("Loading tools for server: ".concat(e));let t=await I.S.listServerTools(e);if(t.error)eq.warn("Error loading tools for ".concat(e,":"),t.error),n[e]=[];else{let o=t.tools||[];eq.debug("Loaded ".concat(o.length," tools for ").concat(e)),n[e]=o}}catch(t){eq.warn("Failed to load tools for server ".concat(e,":"),t),n[e]=[]}finally{h(t=>({...t,[e]:!1}))}})),u(n))})()}},[e,b,a]);let y=(0,r.useRef)(c);(0,r.useEffect)(()=>{y.current=c},[c]);let j=(0,r.useCallback)(e=>{eq.debug("Selected MCP Node ID: ".concat(e)),x(e);let t=b.find(t=>t.nodeId===e),n=null==t?void 0:t.serverName;!n||y.current[n]||p[n]?g(p[n||""]||!1):(eq.debug("Tools not loaded for server ".concat(n,", loading now.")),g(!0),h(e=>({...e,[n]:!0})),I.S.listServerTools(n).then(e=>{let t=e.tools||[];e.error?eq.warn("Error loading tools for ".concat(n,":"),e.error):eq.debug("Loaded ".concat(t.length," tools for ").concat(n)),u(e=>({...e,[n]:t}))}).catch(e=>{eq.warn("Failed to load tools for server ".concat(n,":"),e),u(e=>({...e,[n]:[]}))}).finally(()=>{g(!1),h(e=>({...e,[n]:!1}))}))},[b,p]),w=(0,r.useRef)(l);return(0,r.useEffect)(()=>{w.current=l},[l]),{connectedMcpNodes:b,allServers:a,isLoadingServers:s,selectedToolServerNodeId:f,serverToolsMap:c,serverStatuses:i,isLoadingTools:p,handleSelectToolServer:j,isLoadingSelectedServerTools:m,handleRetryServer:(0,r.useCallback)(async e=>{eq.debug("Retrying server: ".concat(e)),h(t=>({...t,[e]:!0}));try{await w.current.retryServer(e);let t=await I.S.listServerTools(e);if(t.error)return eq.warn("Error loading tools for ".concat(e," after retry:"),t.error),!1;{let n=t.tools||[];return eq.debug("Loaded ".concat(n.length," tools for ").concat(e," after retry")),u(t=>({...t,[e]:n})),!0}}catch(t){return eq.warn("Failed to retry or load tools for server ".concat(e,":"),t),!1}finally{h(t=>({...t,[e]:!1}))}},[]),handleRestartServer:(0,r.useCallback)(async e=>{eq.debug("Restarting server: ".concat(e)),h(t=>({...t,[e]:!0}));try{await I.S.restartServer(e),await new Promise(e=>setTimeout(e,1e3));let t=await I.S.listServerTools(e);if(t.error)return eq.warn("Error loading tools for ".concat(e," after restart:"),t.error),!1;{let n=t.tools||[];return eq.debug("Loaded ".concat(n.length," tools for ").concat(e," after restart")),u(t=>({...t,[e]:n})),!0}}catch(t){return eq.warn("Failed to restart or load tools for server ".concat(e,":"),t),!1}finally{h(t=>({...t,[e]:!1}))}},[])}})(n,l,p,h),q=((e,t,n,o)=>{let[l,a]=(0,r.useState)([]),[s,i]=(0,r.useState)(!1),d=(0,r.useMemo)(()=>t?function(e,t){let n=[];for(let l of t){var o,r;!("string"==typeof(null==(o=l.data)?void 0:o.edgeType)&&l.data.edgeType.includes("mcp"))&&(l.source===e?n.push(l.target):l.target===e&&(null==(r=l.data)?void 0:r.bidirectional)&&n.push(l.source))}return[...new Set(n)]}(t.id,n):[],[t,n]);return(0,r.useEffect)(()=>{if(e&&t){i(!0);try{let e=d.map(e=>o.find(t=>t.id===e)).filter(e=>!!e),t=function(e){let t=new Set,n=new Map;for(let o of e){if(n.has(o.id))continue;let e=function(e,t){let n=(e&&e.trim()||t&&t.trim()||"node").toLowerCase().replace(/[^a-z0-9]+/g,"_").replace(/_+/g,"_").replace(/^_+|_+$/g,"");return n.length>48&&(n=n.slice(0,48).replace(/_+$/g,"")),n||(n=t&&t.trim().toLowerCase().replace(/[^a-z0-9]+/g,"_")||"node"),n||"node"}(o.label,o.type),r="".concat(eK).concat(e);if(t.has(r)){let n=2;for(;t.has("".concat(eK).concat(e,"_").concat(n));)n++;r="".concat(eK).concat(e,"_").concat(n)}t.add(r),n.set(o.id,r)}return n}(e.map(e=>({id:e.id,label:e.data.label,type:e.type||e.data.type}))),n=e.map(e=>({name:t.get(e.id)||"handoff_to_".concat(e.id),description:function(e){if(e.userDescription&&e.userDescription.trim())return eQ(e.userDescription,1500);let t="Hand off execution to ".concat(e.label," (").concat(e.type,")."),n=[];!function e(t,n,o){let r=" ".repeat(n);if(t.userDescription&&t.userDescription.trim())return void o.push("".concat(r).concat(eQ(t.userDescription,200)));if("subflow"===t.type){var l,a;if(t.subflowMissing)return void o.push("".concat(r,"Runs a subflow (referenced flow not found)."));if(t.subflowDetailsUnavailable){let e=t.subflowName?' "'.concat(t.subflowName,'"'):"";o.push("".concat(r,"Runs a subflow").concat(e," (contents summarised when the flow runs)."));return}if(o.push("".concat(r,'Runs the subflow "').concat(null!=(l=t.subflowName)?l:"unknown",'", which contains:')),t.depthCapReached)return void o.push("".concat(r," (nested subflows omitted — recursion depth limit reached)"));let s=null!=(a=t.children)?a:[];if(0===s.length)return void o.push("".concat(r," (no process or subflow steps)"));for(let t of s.slice(0,10))o.push("".concat(r," - ").concat(t.label,":")),e(t,n+2,o);return void(s.length>10&&o.push("".concat(r," - …and ").concat(s.length-10," more step(s)")))}if(t.modelName&&o.push("".concat(r,"Model: ").concat(t.modelName)),t.promptSummary&&o.push("".concat(r,"Role: ").concat(eQ(t.promptSummary,200))),t.servers&&t.servers.length>0)for(let e of t.servers)if(e.connected&&e.tools&&e.tools.length>0){let t=e.tools.slice(0,10),n=e.tools.length-t.length,l=n>0?", +".concat(n," more"):"";o.push("".concat(r,"Tools (").concat(e.name,"): ").concat(t.join(", ")).concat(l))}else o.push("".concat(r,"Tools (").concat(e.name,"): server not connected"))}(e,0,n);let o=n.join("\n").trim(),r=o?"".concat(t,"\n").concat(o):t;if(r.length<=1500)return r;let l=1500-t.length-2;return l<=0?t:"".concat(t,"\n").concat(eQ(o,l))}(function(e){let t=e.type||e.data.type||"unknown",n=e.data.label||"Unknown Node",o=e.data.description,r=e.data.properties||{},l={label:n,type:t,userDescription:o};if(o&&o.trim())return l;if("subflow"===t)return l.subflowDetailsUnavailable=!0,l;"string"==typeof r.boundModel&&r.boundModel&&(l.modelName=r.boundModel),"string"==typeof r.promptTemplate&&r.promptTemplate.trim()&&(l.promptSummary=r.promptTemplate);let a=Array.isArray(r.mcpNodes)?r.mcpNodes:[],s=[],i=new Set;for(let e of a){var d,c;let t=null==e||null==(d=e.properties)?void 0:d.boundServer;if(!t||i.has(t))continue;i.add(t);let n=Array.isArray(null==e||null==(c=e.properties)?void 0:c.enabledTools)?e.properties.enabledTools:[];s.push({name:t,connected:!0,tools:n})}return s.length>0&&(l.servers=s),l}(e)),inputSchema:{type:"object",properties:{},required:[]}}));a(n),e0.debug("Generated handoff tools",{toolsCount:n.length})}catch(e){e0.error("Error generating handoff tools",e),a([])}finally{i(!1)}}else a([])},[e,t,d,n,o]),{handoffTools:l,isLoadingHandoffTools:s}})(n,l,p,h),K=(null==q?void 0:q.handoffTools)||[],Q=(null==q?void 0:q.isLoadingHandoffTools)||!1;(0,r.useEffect)(()=>{n&&l&&tw.debug("Handoff tools:",{count:K.length,tools:K.map(e=>e.name)})},[n,l,K]),(0,r.useEffect)(()=>{if(l){var e,t,n,o;S((null==(e=l.data.properties)?void 0:e.promptTemplate)||""),(null==(t=l.data.properties)?void 0:t.boundModel)?N(!0):N(!1),P((null==(n=l.data.properties)?void 0:n.excludeModelPrompt)||!1),F((null==(o=l.data.properties)?void 0:o.excludeStartNodePrompt)||!1)}},[l,n]);let ee=(0,r.useRef)(null),et=function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"server";if(tw.debug("handleInsertToolBinding called with:",JSON.stringify({serverName:e,toolName:t})),!e||!t)return void tw.warn("Invalid parameters for handleInsertToolBinding:",{serverName:e,toolName:t});let o=(U[e]||[]).find(e=>e.name===t);null==o||o.description;let r="handoff"===n?(0,eR.X8)("tool","handoff",t):(0,eR.X8)("tool",e,t),l=(!(C.length>0)||C.endsWith(" ")||C.endsWith("\n")?"":" ")+r;ee.current?(tw.debug("Inserting text into PromptBuilder:",JSON.stringify({textToInsert:l})),ee.current.insertText(l),tw.debug("Tool binding inserted successfully")):tw.warn("promptBuilderRef.current is null, cannot insert text")};if(!l||!y)return null;let en=(null==(t=y.properties)?void 0:t.boundModel)||"";return(0,o.jsxs)(f.A,{open:n,onClose:d,maxWidth:"xl",fullWidth:!0,PaperProps:{sx:{borderTop:5,borderColor:"secondary.main",width:"95vw",height:"90vh",maxWidth:"95vw",maxHeight:"90vh"}},children:[(0,o.jsx)(x.A,{component:"div",children:(0,o.jsxs)(a.default,{display:"flex",alignItems:"center",justifyContent:"space-between",children:[(0,o.jsxs)(s.default,{variant:"h6",children:[y.label||"Process Node"," Properties"]}),(0,o.jsx)(c.A,{edge:"end",color:"inherit",onClick:d,"aria-label":"close",children:(0,o.jsx)(e$.A,{})})]})}),(0,o.jsx)(A.A,{}),(0,o.jsx)(m.A,{sx:{display:"flex",flexDirection:"column",p:3,overflow:"auto",height:"calc(90vh - 130px)"},children:(0,o.jsxs)(eU.Ay,{container:!0,spacing:2,sx:{flexGrow:1,height:"100%"},children:[(0,o.jsxs)(eU.Ay,{item:!0,xs:6,sx:{display:"flex",flexDirection:"column",height:"100%",overflow:"auto"},children:[(0,o.jsx)(a.default,{sx:{mb:3},children:(0,o.jsx)(e1,{nodeData:y,setNodeData:j})}),(0,o.jsx)(a.default,{sx:{mb:3},children:(0,o.jsx)(e7,{isLoadingModels:R,loadError:B,models:z,selectedModelId:en,handleModelSelect:L,isModelBound:k,handleUnbindModel:W})}),(0,o.jsxs)(a.default,{sx:{mb:3},children:[(0,o.jsx)(a.default,{sx:{borderBottom:1,borderColor:"divider",mb:2},children:(0,o.jsxs)(eY.A,{value:E,onChange:(e,t)=>D(t),children:[(0,o.jsx)(eJ.A,{label:"Server Tools",value:"server"}),(0,o.jsx)(eJ.A,{label:"Resources",value:"resources"}),(0,o.jsx)(eJ.A,{label:"Agent Tools",value:"agent"})]})}),"server"===E&&(0,o.jsx)(ti,{isLoadingServers:O,connectedMcpNodes:H,availableServers:_,onConnectMcpServer:v,serverStatuses:Y,serverToolsMap:U,isLoadingTools:J,handleInsertToolBinding:et,selectedToolServerNodeId:G,selectedNodeId:(null==l?void 0:l.id)||null,handleSelectToolServer:$,isLoadingSelectedServerTools:V,promptBuilderRef:ee,handleRetryServer:X,handleRestartServer:Z}),"resources"===E&&(0,o.jsx)(tp,{connectedMcpNodes:H,handleInsertResourceBinding:(e,t)=>{if(!e||!t)return void tw.warn("Invalid parameters for handleInsertResourceBinding:",{serverName:e,uri:t});let n=(0,eR.X8)("resource",e,t),o=C.length>0&&!C.endsWith(" ")&&!C.endsWith("\n");ee.current?ee.current.insertText((o?" ":"")+n):tw.warn("promptBuilderRef.current is null, cannot insert resource binding")},promptBuilderRef:ee}),"agent"===E&&(0,o.jsx)(tf,{handoffTools:K,isLoadingHandoffTools:Q,handleInsertToolBinding:(e,t)=>et(e,t,"handoff"),promptBuilderRef:ee})]}),(0,o.jsx)(a.default,{children:(0,o.jsx)(tj,{nodeData:y,handlePropertyChange:w,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,o.jsx)(eU.Ay,{item:!0,xs:6,sx:{height:"100%",display:"flex",flexDirection:"column"},children:(0,o.jsx)(tv,{ref:ee,promptTemplate:C,handlePromptChange:e=>{S(e),j(t=>t?{...t,properties:{...t.properties,promptTemplate:e}}:null)},excludeModelPrompt:T,setExcludeModelPrompt:P,excludeStartNodePrompt:M,setExcludeStartNodePrompt:F,isModelBound:k,models:z,nodeData:y,flowId:g})})]})}),(0,o.jsxs)(b.A,{children:[(0,o.jsx)(i.A,{onClick:d,children:"Cancel"}),(0,o.jsx)(i.A,{onClick:()=>{if(l&&y){let e={...y,properties:{...y.properties,promptTemplate:C,excludeModelPrompt:T,excludeStartNodePrompt:M}};u(l.id,e),d()}},variant:"contained",color:"primary",children:"Save Changes"})]})]})};var tA=n(71651),tS=n(94035);let tk=(0,S.h)("frontend/components/Flow/FlowManager/FlowBuilder/Modals/MCPNodePropertiesModal"),tN=e=>{var t,n,l,d,p,h,g,y;let{open:j,node:w,onClose:S,onSave:k}=e,[N,T]=(0,r.useState)(null),{servers:I,isLoading:P,loadError:M,retryServer:F}=(0,eZ.v)(),[E,D]=(0,r.useState)({}),{tools:z,isLoading:R,error:B,loadTools:L}=(0,tS.O)((null==N||null==(t=N.properties)?void 0:t.boundServer)||"");(0,r.useEffect)(()=>{w&&T({...w.data,properties:{...w.data.properties}})},[w,j]);let W=(null==N||null==(n=N.properties)?void 0:n.boundServer)||"";(0,r.useEffect)(()=>{z&&z.length>0&&(e=>{N&&0===(N.properties.enabledTools||[]).length&&e.length>0&&(tk.debug("Enabling all tools by default"),T(t=>t?{...t,properties:{...t.properties,enabledTools:e.map(e=>e.name)}}:null))})(z)},[z]);let H=(e,t)=>{T(n=>n?{...n,properties:{...n.properties,[e]:t}}:null)},_=async(e,t)=>{t&&t.stopPropagation(),tk.debug("Retrying server: ".concat(e)),D(t=>({...t,[e]:!0}));try{return await F(e),e===W&&L(!0),!0}catch(t){return tk.warn("Failed to retry server ".concat(e,": ").concat(t)),!1}finally{setTimeout(()=>{D(t=>({...t,[e]:!1}))},500)}};if(!w||!N)return null;let O=(null==(l=N.properties)?void 0:l.boundServer)||"",Y=(null==(d=N.properties)?void 0:d.enabledTools)||[],J=null==(p=N.properties)?void 0:p.toolTimeout,$=-1===J;return(0,o.jsxs)(f.A,{open:j,onClose:S,maxWidth:"md",fullWidth:!0,PaperProps:{sx:{borderTop:5,borderColor:"info.main",height:"80vh",maxHeight:"80vh"}},children:[(0,o.jsx)(x.A,{component:"div",children:(0,o.jsxs)(a.default,{display:"flex",alignItems:"center",justifyContent:"space-between",children:[(0,o.jsxs)(s.default,{variant:"h6",children:[N.label||"MCP Node"," Properties"]}),(0,o.jsx)(c.A,{edge:"end",color:"inherit",onClick:S,"aria-label":"close",children:(0,o.jsx)(e$.A,{})})]})}),(0,o.jsx)(A.A,{}),(0,o.jsxs)(m.A,{sx:{display:"flex",flexDirection:"column",p:3,overflow:"auto"},children:[(0,o.jsx)(v.A,{fullWidth:!0,label:"Node Label",value:N.label||"",onChange:e=>{T(t=>t?{...t,label:e.target.value,properties:{...t.properties,nameIsCustom:!0}}:null)},margin:"normal",helperText:"The display name for this node on the canvas",sx:{mb:2}}),(0,o.jsxs)(a.default,{sx:{mb:4},children:[(0,o.jsx)(s.default,{variant:"subtitle1",gutterBottom:!0,children:"Bind to MCP Server"}),P?(0,o.jsxs)(a.default,{sx:{display:"flex",alignItems:"center",gap:1},children:[(0,o.jsx)(eT.default,{size:20}),(0,o.jsx)(s.default,{color:"text.secondary",children:"Loading MCP servers..."})]}):M?(0,o.jsx)(s.default,{color:"error",children:M}):0===I.length?(0,o.jsx)(s.default,{color:"text.secondary",children:"No MCP servers available. Add some in the MCP Manager."}):(0,o.jsx)(o.Fragment,{children:(0,o.jsxs)(e2.A,{component:"fieldset",fullWidth:!0,children:[(0,o.jsx)(e5.A,{value:O,onChange:e=>(e=>{tk.debug("Server selected: ".concat(e)),tk.debug("Server selected: ".concat(e)),T(t=>{var n,o;if(!t)return null;let r=eV({currentLabel:t.label,nameIsCustom:null==(n=t.properties)?void 0:n.nameIsCustom,defaultLabel:"MCP Node",previousAutoLabel:(null==(o=t.properties)?void 0:o.boundServer)||void 0,nextAutoLabel:e});return{...t,label:r,properties:{...t.properties,boundServer:e}}})})(e.target.value),children:(0,o.jsx)(eU.Ay,{container:!0,spacing:2,children:I.map(e=>(0,o.jsx)(eU.Ay,{item:!0,xs:12,sm:6,children:(0,o.jsx)(C.A,{elevation:1,sx:{p:2,border:2*(O===e.name),borderColor:"primary.main",opacity:"connected"===e.status?1:.6},children:(0,o.jsxs)(a.default,{sx:{display:"flex",width:"100%",alignItems:"flex-start"},children:[(0,o.jsx)(e4.A,{value:e.name,control:(0,o.jsx)(e6.A,{}),label:(0,o.jsxs)(a.default,{children:[(0,o.jsx)(s.default,{variant:"subtitle2",children:e.name}),(0,o.jsx)(s.default,{variant:"caption",color:"text.secondary",display:"block",children:e.path}),(0,o.jsxs)(s.default,{variant:"caption",color:"connected"===e.status?"success.main":"error"===e.status?"error.main":"text.secondary",children:["Status: ",e.status]})]}),sx:{width:"calc(100% - 40px)",m:0}}),(0,o.jsx)(u.A,{title:"Retry connection",children:(0,o.jsx)(c.A,{size:"small",onClick:t=>_(e.name,t),disabled:E[e.name],sx:{mt:1},children:E[e.name]?(0,o.jsx)(eT.default,{size:16}):(0,o.jsx)(to.A,{fontSize:"small"})})})]})})},e.name))})}),(0,o.jsx)(e3.A,{children:O?'This node will use the "'.concat(O,'" MCP server for processing.'):"Select an MCP server to bind this node to."})]})})]}),(0,o.jsx)(v.A,{fullWidth:!0,label:"Description",value:N.description||"",onChange:e=>T({...N,description:e.target.value}),margin:"normal",multiline:!0,rows:2,helperText:"This description will be displayed on the node"}),O&&(0,o.jsxs)(a.default,{sx:{mt:4},children:[(0,o.jsx)(s.default,{variant:"subtitle1",gutterBottom:!0,children:"Tool Call Timeout"}),(0,o.jsx)(s.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,o.jsxs)(a.default,{sx:{display:"flex",alignItems:"center",gap:2},children:[(0,o.jsx)(v.A,{label:"Timeout (seconds)",type:"number",size:"small",sx:{width:200},value:$?"":null!=J?J:"",placeholder:String(300),disabled:$,inputProps:{min:1},onChange:e=>{let t=e.target.value;if(""===t)return void H("toolTimeout",void 0);let n=parseInt(t,10);!isNaN(n)&&n>0&&H("toolTimeout",n)},helperText:$?"No timeout — tool calls run until they finish.":"Empty = default (".concat(300," seconds / 5 minutes).")}),(0,o.jsx)(e4.A,{control:(0,o.jsx)(tx.A,{checked:$,onChange:e=>H("toolTimeout",e.target.checked?-1:void 0)}),label:"No timeout (infinite)"})]})]}),O&&(0,o.jsxs)(a.default,{sx:{mt:4},children:[(0,o.jsx)(s.default,{variant:"subtitle1",gutterBottom:!0,children:"Allowed Tools"}),(null==(h=I.find(e=>e.name===O))?void 0:h.status)!=="connected"&&(0,o.jsxs)(a.default,{sx:{mb:2,p:2,bgcolor:"error.light",borderRadius:1},children:[(0,o.jsx)(s.default,{color:"error.dark",children:"Server is disconnected. Tools cannot be fetched. Please retry the connection."}),(0,o.jsx)(i.A,{variant:"outlined",size:"small",color:"primary",startIcon:E[O]?(0,o.jsx)(eT.default,{size:16}):(0,o.jsx)(to.A,{}),onClick:()=>_(O),disabled:E[O],sx:{mt:1},children:"Retry Connection"})]}),R?(0,o.jsxs)(a.default,{sx:{display:"flex",alignItems:"center",gap:1},children:[(0,o.jsx)(eT.default,{size:20}),(0,o.jsx)(s.default,{color:"text.secondary",children:"Loading tools..."})]}):B?(0,o.jsx)(s.default,{color:"error",children:B}):z&&0!==z.length?(0,o.jsxs)(a.default,{sx:{mt:2},children:[(0,o.jsx)(s.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,o.jsx)(eI.A,{children:z.map(e=>(0,o.jsxs)(eM.Ay,{sx:{py:0},children:[(0,o.jsx)(G.A,{sx:{minWidth:42},children:(0,o.jsx)(tx.A,{edge:"start",checked:Y.includes(e.name),onChange:()=>(e=>{tk.debug("Tool toggled: ".concat(e)),T(t=>{let n;if(!t)return null;let o=t.properties.enabledTools||[];return n=o.includes(e)?o.filter(t=>t!==e):[...o,e],{...t,properties:{...t.properties,enabledTools:n}}})})(e.name)})}),(0,o.jsx)(U.A,{primary:e.name,secondary:e.description,primaryTypographyProps:{fontWeight:"medium"}})]},e.name))})]}):(0,o.jsx)(s.default,{color:"text.secondary",children:(null==(g=I.find(e=>e.name===O))?void 0:g.status)==="connected"?"No tools available for this MCP server.":"Connect to the server to view available tools."})]}),O&&(0,o.jsxs)(a.default,{sx:{mt:4},children:[(0,o.jsx)(tA.A,{roots:(null==(y=N.properties)?void 0:y.roots)||[],onChange:e=>H("roots",e)}),(0,o.jsxs)(s.default,{variant:"caption",color:"text.secondary",sx:{display:"block",mt:1},children:["These folders apply to this node only and are ",(0,o.jsx)("strong",{children:"added to"}),' the workspace folders configured on the "',O,'" server itself. When neither is set, the server sees its own root dir as its workspace folder.']})]})]}),(0,o.jsxs)(b.A,{children:[(0,o.jsx)(i.A,{onClick:S,children:"Cancel"}),(0,o.jsx)(i.A,{onClick:()=>{w&&N&&(k(w.id,N),S())},variant:"contained",color:"primary",children:"Save Changes"})]})]})},tT=e=>{let{open:t,node:n,onClose:l,onSave:d}=e,[u,p]=(0,r.useState)(null),[h,g]=(0,r.useState)("");return((0,r.useEffect)(()=>{if(n){var e;p({...n.data,properties:{...n.data.properties}}),g((null==(e=n.data.properties)?void 0:e.promptTemplate)||"")}},[n,t]),n&&u)?(0,o.jsxs)(f.A,{open:t,onClose:l,maxWidth:"xl",fullWidth:!0,PaperProps:{sx:{borderTop:5,borderColor:"primary.main",width:"95vw",height:"90vh",maxWidth:"95vw",maxHeight:"90vh"}},children:[(0,o.jsx)(x.A,{component:"div",children:(0,o.jsxs)(a.default,{display:"flex",alignItems:"center",justifyContent:"space-between",children:[(0,o.jsxs)(s.default,{variant:"h6",children:[u.label||"Start Node"," Properties"]}),(0,o.jsx)(c.A,{edge:"end",color:"inherit",onClick:l,"aria-label":"close",children:(0,o.jsx)(e$.A,{})})]})}),(0,o.jsx)(A.A,{}),(0,o.jsx)(m.A,{sx:{display:"flex",flexDirection:"column",p:3,overflow:"auto",height:"calc(90vh - 130px)"},children:(0,o.jsxs)(a.default,{sx:{display:"flex",flexDirection:"column",height:"100%"},children:[(0,o.jsx)(s.default,{variant:"h6",gutterBottom:!0,children:"Prompt Template"}),(0,o.jsx)(a.default,{sx:{flexGrow:1,display:"flex",flexDirection:"column",height:"calc(100% - 40px)"},children:(0,o.jsx)(tm.A,{value:h,onChange:e=>{g(e),p(t=>t?{...t,properties:{...t.properties,promptTemplate:e}}:null)},label:"",height:"100%"})})]})}),(0,o.jsxs)(b.A,{children:[(0,o.jsx)(i.A,{onClick:l,children:"Cancel"}),(0,o.jsx)(i.A,{onClick:()=>{if(n&&u){let e={...u,properties:{...u.properties,promptTemplate:h}};d(n.id,e),l()}},variant:"contained",color:"primary",children:"Save Changes"})]})]}):null},tI=e=>{let{open:t,node:n,onClose:l,onSave:d}=e,[u,p]=(0,r.useState)(null);return((0,r.useEffect)(()=>{n&&p({...n.data,properties:{...n.data.properties}})},[n,t]),n&&u)?(0,o.jsxs)(f.A,{open:t,onClose:l,maxWidth:"md",fullWidth:!0,PaperProps:{sx:{borderTop:5,borderColor:"success.main",width:"600px",height:"400px",maxWidth:"95vw",maxHeight:"90vh"}},children:[(0,o.jsx)(x.A,{component:"div",children:(0,o.jsxs)(a.default,{display:"flex",alignItems:"center",justifyContent:"space-between",children:[(0,o.jsxs)(s.default,{variant:"h6",children:[u.label||"Finish Node"," Properties"]}),(0,o.jsx)(c.A,{edge:"end",color:"inherit",onClick:l,"aria-label":"close",children:(0,o.jsx)(e$.A,{})})]})}),(0,o.jsx)(A.A,{}),(0,o.jsx)(m.A,{sx:{display:"flex",flexDirection:"column",p:3,overflow:"auto"},children:(0,o.jsx)(a.default,{sx:{display:"flex",flexDirection:"column",height:"100%",justifyContent:"center",alignItems:"center",py:4},children:(0,o.jsxs)(C.A,{elevation:0,sx:{p:4,textAlign:"center",backgroundColor:"rgba(76, 175, 80, 0.08)",borderRadius:2,width:"100%"},children:[(0,o.jsx)(s.default,{variant:"h6",color:"success.main",gutterBottom:!0,children:"Finish Node"}),(0,o.jsx)(s.default,{variant:"body1",color:"text.secondary",children:"This is the end point of your flow. No additional configuration is needed."}),(0,o.jsx)(s.default,{variant:"body2",color:"text.secondary",sx:{mt:2,fontStyle:"italic"},children:"Future versions will support output formatting options."})]})})}),(0,o.jsxs)(b.A,{children:[(0,o.jsx)(i.A,{onClick:l,children:"Cancel"}),(0,o.jsx)(i.A,{onClick:()=>{n&&u&&(d(n.id,u),l())},variant:"contained",color:"primary",children:"Save"})]})]}):null};var tP=n(54178),tM=n(26811);let tF=(0,S.h)("frontend/components/Flow/FlowManager/FlowBuilder/Modals/SubflowNodePropertiesModal"),tE=e=>{let{selected:t,icon:n,title:r,description:l,onClick:i}=e;return(0,o.jsxs)(a.default,{role:"radio","aria-checked":t,tabIndex:0,onClick:i,onKeyDown:e=>{("Enter"===e.key||" "===e.key)&&(e.preventDefault(),i())},sx:{flex:1,position:"relative",p:2,borderRadius:2,border:2,borderColor:t?"primary.main":"divider",bgcolor:t?"action.selected":"background.paper",cursor:"pointer",transition:"border-color 120ms, background-color 120ms","&:hover":{borderColor:t?"primary.main":"text.disabled"},outline:"none","&:focus-visible":{boxShadow:e=>"0 0 0 3px ".concat(e.palette.primary.light)}},children:[t&&(0,o.jsx)(ez.A,{color:"primary",fontSize:"small",sx:{position:"absolute",top:8,right:8}}),(0,o.jsxs)(a.default,{sx:{display:"flex",alignItems:"center",gap:1,mb:.5,color:t?"primary.main":"text.secondary"},children:[n,(0,o.jsx)(s.default,{variant:"subtitle1",sx:{fontWeight:600,color:"text.primary"},children:r})]}),(0,o.jsx)(s.default,{variant:"body2",color:"text.secondary",children:l})]})},tD=e=>{var t,n,l,d;let{open:u,node:p,onClose:g,onSave:y,flowId:j}=e,[w,C]=(0,r.useState)(null),[S,k]=(0,r.useState)([]),[N,I]=(0,r.useState)(!1);(0,r.useEffect)(()=>{p&&C({...p.data,properties:{...p.data.properties}})},[p,u]),(0,r.useEffect)(()=>{if(!u)return;let e=!1;return I(!0),T.g.loadFlows().then(t=>{e||k(t||[])}).catch(t=>{tF.warn("Failed to load flows for subflow picker",t),e||k([])}).finally(()=>{e||I(!1)}),()=>{e=!0}},[u]);let P=(e,t)=>{C(n=>n?{...n,properties:{...n.properties,[e]:t}}:null)};if(!p||!w)return null;let M=S.filter(e=>e.id!==j),F=(null==(t=w.properties)?void 0:t.subflowId)||"",E=!!F&&!S.some(e=>e.id===F);return(0,o.jsxs)(f.A,{open:u,onClose:g,maxWidth:"md",fullWidth:!0,PaperProps:{sx:{borderTop:5,borderColor:"warning.main",maxWidth:"95vw",maxHeight:"90vh"}},children:[(0,o.jsx)(x.A,{component:"div",children:(0,o.jsxs)(a.default,{display:"flex",alignItems:"center",justifyContent:"space-between",children:[(0,o.jsxs)(s.default,{variant:"h6",children:[w.label||"Subflow Node"," Properties"]}),(0,o.jsx)(c.A,{edge:"end",color:"inherit",onClick:g,"aria-label":"close",children:(0,o.jsx)(e$.A,{})})]})}),(0,o.jsx)(A.A,{}),(0,o.jsxs)(m.A,{sx:{p:3},children:[(0,o.jsx)(s.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,o.jsx)(v.A,{fullWidth:!0,label:"Node Label",value:w.label||"",onChange:e=>C({...w,label:e.target.value}),margin:"normal"}),(0,o.jsxs)(e2.A,{fullWidth:!0,margin:"normal",children:[(0,o.jsx)(tb.A,{id:"subflow-select-label",children:"Flow to run"}),(0,o.jsxs)(ty.A,{labelId:"subflow-select-label",label:"Flow to run",value:E?"":F,onChange:e=>P("subflowId",e.target.value),displayEmpty:!0,children:[0===M.length&&(0,o.jsx)(O.A,{value:"",disabled:!0,children:N?"Loading flows…":"No other flows available"}),M.map(e=>(0,o.jsx)(O.A,{value:e.id,children:e.name},e.id))]})]}),E&&(0,o.jsx)(h.A,{severity:"warning",sx:{mt:1},children:"The previously selected flow no longer exists. Please choose another."}),(0,o.jsx)(v.A,{fullWidth:!0,label:"Input (optional)",value:(null==(n=w.properties)?void 0:n.promptTemplate)||"",onChange:e=>P("promptTemplate",e.target.value),margin:"normal",multiline:!0,rows:3,helperText:"What to send to the subflow. Leave empty to pass this conversation's latest message."}),(0,o.jsx)(s.default,{variant:"subtitle2",sx:{mt:3,mb:1},children:"What do you see in the chat while the subflow runs?"}),(0,o.jsxs)(a.default,{role:"radiogroup","aria-label":"Subflow output",sx:{display:"flex",gap:2,flexWrap:"wrap"},children:[(0,o.jsx)(tE,{selected:"final-only"!==((null==(l=w.properties)?void 0:l.outputMode)||"steps"),onClick:()=>P("outputMode","steps"),icon:(0,o.jsx)(tP.A,{}),title:"Full",description:"You see all of the subflow's messages in the chat, indented under this step — like watching it work."}),(0,o.jsx)(tE,{selected:(null==(d=w.properties)?void 0:d.outputMode)==="final-only",onClick:()=>P("outputMode","final-only"),icon:(0,o.jsx)(tM.A,{}),title:"Condensed",description:"You only see the subflow's final answer as a single message. Its inner steps stay hidden."})]})]}),(0,o.jsxs)(b.A,{children:[(0,o.jsx)(i.A,{onClick:g,children:"Cancel"}),(0,o.jsx)(i.A,{onClick:()=>{p&&w&&(y(p.id,w),g())},variant:"contained",color:"primary",children:"Save"})]})]})};var tz=n(31102),tR=n(18581),tB=n(13179);let tL=(0,S.h)("components/flow/FlowBuilder/index.tsx"),tW=(0,w.Ay)(a.default)(e=>{let{theme:t}=e;return{display:"flex",height:"calc(100vh - 64px)",gap:"16px",padding:"16px",backgroundColor:t.palette.background.default}}),tH=(0,w.Ay)(C.A)(e=>{let{theme:t}=e;return{padding:t.spacing(1),display:"flex",gap:t.spacing(1),borderBottom:"1px solid",borderColor:t.palette.divider,alignItems:"center",marginBottom:t.spacing(1),backgroundColor:t.palette.background.paper,boxShadow:t.shadows[1]}}),t_=(0,w.Ay)(a.default)({flex:1,display:"flex",flexDirection:"column",position:"relative",overflow:"hidden"}),tO=r.forwardRef((e,t)=>{let{initialFlow:n,onSave:l,onDelete:s,allFlows:d}=e;tL.debug("FlowBuilder rendered with initialFlow:",n);let[u,p]=(0,r.useState)((null==n?void 0:n.nodes)||[]),[h,y]=(0,r.useState)((null==n?void 0:n.edges)||[]),[j,w]=(0,r.useState)((null==n?void 0:n.name)||"NewFlow"),[C,S]=(0,r.useState)(null),[P,M]=(0,r.useState)(!1),[F,E]=(0,r.useState)("none"),[D,z]=(0,r.useState)(""),[R,L]=(0,r.useState)(null),[W,H]=(0,r.useState)(!1),[_,O]=(0,r.useState)(!1),[G,U]=(0,r.useState)(!1),[Y,J]=(0,r.useState)(!1),[$,V]=(0,r.useState)(!1),[X,Z]=(0,r.useState)(null),[q,K]=(0,r.useState)([]),[Q,ee]=(0,r.useState)(-1),[et,en]=(0,r.useState)(!1),[eo,er]=(0,r.useState)(!1),el=(0,r.useRef)(null),ea=(0,r.useRef)(!1),es=(0,r.useCallback)(e=>e.filter(e=>e.source&&e.target&&e.sourceHandle&&e.targetHandle),[]);(0,r.useEffect)(()=>{if(n){p(n.nodes||[]);let e=es(n.edges||[]);e.length!==n.edges.length&&console.warn("Filtered out ".concat(n.edges.length-e.length," invalid edges")),y(e),w(n.name),K([{nodes:n.nodes||[],edges:e}]),ee(0)}else{let e=T.g.createStartNode();p([e]),y([]),w("NewFlow"),K([{nodes:[e],edges:[]}]),ee(0)}},[n]);let ei=e=>JSON.stringify(e,(e,t)=>"selected"===e||"dragging"===e||"measured"===e||"width"===e||"height"===e||"positionAbsolute"===e||"resizing"===e?void 0:t);(0,r.useEffect)(()=>{if(et)return void en(!1);if(ea.current)return;let e={nodes:[...u],edges:[...h]},t=q.slice(0,Q+1);(Q<0||ei(e)!==ei(t[Q]))&&(K([...t,e]),ee(Q+1),er(!0))},[u,h]),(0,r.useEffect)(()=>{let e=e=>{if(eo)return e.preventDefault(),e.returnValue="",""};return window.addEventListener("beforeunload",e),()=>{window.removeEventListener("beforeunload",e)}},[eo]);let ed=e=>e.trim()?/^[\w-]+$/.test(e)?(!n||n&&n.name!==e)&&d.some(t=>t.id!==((null==n?void 0:n.id)||"")&&t.name.toLowerCase()===e.toLowerCase())?"A flow with this name already exists":null:"Flow name can only contain letters, numbers, underscores, and dashes":"Flow name cannot be empty",ec=(0,r.useCallback)(()=>{tL.debug('handleSave: Attempting to save flow "'.concat(j,'"'));let e=ed(j);if(e)return tL.warn("handleSave: Invalid flow name - ".concat(e)),S(e),"invalid-name";let t=[...u];if(0===t.length&&(tL.debug("handleSave: No nodes found, adding a default Start node"),p(t=[T.g.createStartNode()])),n&&n.name!==j)return tL.debug('handleSave: Flow name changed from "'.concat(n.name,'" to "').concat(j,'", opening rename dialog')),E("rename"),z(j),M(!0),"rename-dialog";let o={id:(null==n?void 0:n.id)||(0,N.A)(),name:j,nodes:t,edges:h};return tL.info('handleSave: Saving flow "'.concat(j,'" with ').concat(t.length," nodes and ").concat(h.length," edges")),l(o),er(!1),"saved"},[j,u,h,n,l,d]);r.useImperativeHandle(t,()=>({requestNavigation:e=>{eo?(el.current=e,E("unsaved"),M(!0)):e()}}),[eo]);let eu=(0,r.useCallback)(()=>{n?(tL.info('handleDelete: Deleting flow "'.concat(n.name,'" (ID: ').concat(n.id,")")),s(n.id)):tL.warn("handleDelete: Attempted to delete flow but no initialFlow is available")},[n,s]),ep=(0,r.useCallback)((e,t)=>{tL.debug('handleCopyFlow: Copying flow "'.concat(e.name,'" to "').concat(t,'"'));let n={id:(0,N.A)(),name:t,nodes:e.nodes,edges:e.edges};tL.info('handleCopyFlow: Created copy of flow "'.concat(e.name,'" with new name "').concat(t,'" (').concat(e.nodes.length," nodes, ").concat(e.edges.length," edges)")),l(n)},[l]),eh=()=>{let e=el.current;el.current=null,e&&e()},ef=()=>{el.current=null,M(!1),E("none"),z(""),L(null)},em=()=>{let e=ed(D);if(e)return void L(e);"duplicate"===F?n&&ep(n,D):"rename"===F&&(l({id:(null==n?void 0:n.id)||(0,N.A)(),name:D,nodes:u,edges:h}),er(!1),eh()),ef()},eg=Q>0,ev=Q<q.length-1,eb=(0,r.useCallback)(()=>{if(eg){tL.debug("handleUndo: Performing undo operation, moving from history index ".concat(Q," to ").concat(Q-1)),en(!0);let e=Q-1,t=q[e];p(t.nodes),y(t.edges),ee(e),tL.info("handleUndo: Restored flow state to previous version (".concat(t.nodes.length," nodes, ").concat(t.edges.length," edges)"))}},[q,Q,eg]),ey=(0,r.useCallback)(()=>{if(ev){tL.debug("handleRedo: Performing redo operation, moving from history index ".concat(Q," to ").concat(Q+1)),en(!0);let e=Q+1,t=q[e];p(t.nodes),y(t.edges),ee(e),tL.info("handleRedo: Restored flow state to next version (".concat(t.nodes.length," nodes, ").concat(t.edges.length," edges)"))}},[q,Q,ev]),ej=(0,r.useCallback)(e=>{for(let t of e)"position"===t.type&&(ea.current=!0===t.dragging);p(t=>(0,k._0)(e,t))},[]),ew=(0,r.useCallback)(e=>{tL.debug("onEdgesChange: Processing ".concat(e.length," edge changes")),e.forEach(e=>{"remove"===e.type?tL.info("onEdgesChange: Edge ".concat(e.id," removed")):"select"===e.type&&tL.debug("onEdgesChange: Edge ".concat(e.id," selection changed to ").concat(e.selected))}),y(t=>(0,k.zW)(e,t))},[]),eC=(0,r.useRef)(null),[eA,eS]=(0,r.useState)(null),eN=(0,r.useCallback)((e,t)=>{tL.debug("handleNodeUpdate: Updating node ".concat(e," properties")),p(n=>n.map(n=>n.id===e?(tL.info("handleNodeUpdate: Node ".concat(e," properties updated")),{...n,data:t}):n)),H(!1),O(!1),U(!1),J(!1),V(!1),Z(null),tL.debug("handleNodeUpdate: Closed property modals")},[]),eT=(0,r.useCallback)(async(e,t)=>{var n;let o=u.find(t=>t.id===e);if(!o)return void tL.warn("handleConnectMcpServer: process node ".concat(e," not found"));let r=[];try{let e=await I.S.listServerTools(t);!e.error&&Array.isArray(e.tools)&&(r=e.tools.map(e=>e.name))}catch(e){tL.warn("handleConnectMcpServer: could not load tools for ".concat(t),e)}let l=h.filter(t=>{var n;return(null==(n=t.data)?void 0:n.edgeType)==="mcp"&&(t.source===e||t.target===e)}).length,a=T.g.createNode("mcp",{x:o.position.x+350,y:o.position.y+120*l});a.data.label=t,a.data.properties={...null!=(n=a.data.properties)?n:{},boundServer:t,enabledTools:r};let s=B({source:e,sourceHandle:"process-right-mcp",target:a.id,targetHandle:"mcp-left"},[...u,a]);p(e=>[...e,a]),y(e=>[...e,s]),tL.info('Connected MCP server "'.concat(t,'" to process node ').concat(e))},[u,h]),eI=(0,r.useCallback)(e=>{tL.debug("Opening properties for node:",e),Z(e),"mcp"===e.data.type?O(!0):"start"===e.data.type?U(!0):"finish"===e.data.type?J(!0):"subflow"===e.data.type?V(!0):H(!0)},[]),eP=(0,r.useCallback)(e=>{tL.debug("onDrop: Node dropped on canvas"),e.preventDefault();let t=e.dataTransfer.getData("application/reactflow");if(tL.debug("onDrop: Node type from data transfer: ".concat(t)),!t||!eA)return void tL.debug("onDrop: Missing required data - type: ".concat(!!t,", reactFlowInstance: ").concat(!!eA));let n=eA.screenToFlowPosition({x:e.clientX,y:e.clientY});tL.debug("onDrop: Calculated position: (".concat(n.x,", ").concat(n.y,")"));let o=T.g.createNode(t,n);tL.info("onDrop: Created new ".concat(t," node with ID: ").concat(o.id)),p(e=>[...e.map(e=>({...e,selected:!1})),{...o,selected:!0}]),eI(o),tL.debug("onDrop: Opened properties modal for new node: ".concat(o.id))},[eA,eI]),eM=(0,r.useCallback)(e=>{e.preventDefault(),e.dataTransfer.dropEffect="move"},[]),eF=(0,r.useCallback)(e=>{tL.debug("onInit: ReactFlow instance initialized"),eS(e)},[]);return(0,o.jsxs)(tW,{children:[(0,o.jsx)(ek,{}),(0,o.jsx)(k.Ln,{children:(0,o.jsxs)(t_,{children:[(0,o.jsxs)(tH,{elevation:1,children:[(0,o.jsx)(v.A,{size:"small",label:"Flow Name",value:j,onChange:e=>{let t=e.target.value;w(t),S(ed(t))},sx:{minWidth:500},error:!!C,helperText:C}),(0,o.jsx)(i.A,{variant:"contained",color:"primary",onClick:ec,startIcon:(0,o.jsx)(tz.A,{}),disabled:!!C,children:"Save Flow"}),(0,o.jsx)(eG,{nodes:u,edges:h}),n&&(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(i.A,{variant:"outlined",color:"primary",onClick:()=>{E("duplicate"),z("".concat(n.name,"_copy")),M(!0)},children:"Copy Flow"}),(0,o.jsx)(i.A,{variant:"outlined",color:"error",onClick:eu,children:"Delete Flow"})]}),(0,o.jsx)(A.A,{orientation:"vertical",flexItem:!0}),(0,o.jsx)(c.A,{onClick:eb,disabled:!eg,color:"primary",size:"small",children:(0,o.jsx)(tR.A,{})}),(0,o.jsx)(c.A,{onClick:ey,disabled:!ev,color:"primary",size:"small",children:(0,o.jsx)(tB.A,{})}),(0,o.jsx)(a.default,{sx:{flex:1}})]}),(0,o.jsx)(a.default,{sx:{flex:1,position:"relative"},children:(0,o.jsx)(ex,{ref:eC,nodes:u,edges:h,onNodesChange:ej,onEdgesChange:ew,onDrop:eP,onDragOver:eM,onInit:eF,reactFlowWrapper:eC,onEditNode:eI})})]})}),(0,o.jsx)(tC,{open:W,node:X,onClose:()=>H(!1),onSave:eN,flowEdges:h,flowNodes:u,flowId:null==n?void 0:n.id,onConnectMcpServer:e=>{X&&eT(X.id,e)}}),(0,o.jsx)(tN,{open:_,node:X,onClose:()=>O(!1),onSave:eN}),(0,o.jsx)(tT,{open:G,node:X,onClose:()=>U(!1),onSave:eN}),(0,o.jsx)(tI,{open:Y,node:X,onClose:()=>J(!1),onSave:eN}),(0,o.jsx)(tD,{open:$,node:X,onClose:()=>V(!1),onSave:eN,flowId:null==n?void 0:n.id}),(0,o.jsxs)(f.A,{open:P,onClose:ef,children:[(0,o.jsx)(x.A,{children:"duplicate"===F?"Copy Flow":"rename"===F?"Rename Flow":"Unsaved Changes"}),(0,o.jsx)(m.A,{children:"unsaved"===F?(0,o.jsx)(g.A,{children:"You have unsaved changes in the current flow. What would you like to do?"}):(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(g.A,{children:"duplicate"===F?"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,o.jsx)(v.A,{autoFocus:!0,margin:"dense",label:"Flow Name",type:"text",fullWidth:!0,value:D,onChange:e=>{let t=e.target.value;z(t),L(ed(t))},error:!!R,helperText:R,sx:{mt:2}})]})}),(0,o.jsxs)(b.A,{children:[(0,o.jsx)(i.A,{onClick:ef,children:"Cancel"}),"unsaved"===F&&(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(i.A,{onClick:()=>{er(!1),eh(),ef()},color:"error",children:"Discard Changes"}),(0,o.jsx)(i.A,{onClick:()=>{let e=ec();"saved"===e?(eh(),ef()):"invalid-name"===e&&ef()},variant:"contained",color:"primary",children:"Save Changes"})]}),"rename"===F&&(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(i.A,{onClick:()=>{let e=ed(D);if(e)return void L(e);n&&ep(n,D),ef()},children:"Copy"}),(0,o.jsx)(i.A,{onClick:em,variant:"contained",color:"primary",disabled:!!R,children:"Rename"})]}),"duplicate"===F&&(0,o.jsx)(i.A,{onClick:em,variant:"contained",color:"primary",disabled:!!R,children:"Copy"})]})]})]})});tO.displayName="FlowBuilder";var tG=n(60530),tU=n(15712),tY=n(64419),tJ=n(98405),t$=n(7302),tV=n(70822),tX=n(28466),tZ=n(3986),tq=n(8532),tK=n(53062),tQ=n(1702),t0=n(20699);let t1=(0,S.h)("components/Flow/FlowDashboard/FlowCard"),t2=(0,w.Ay)(tt.A,{shouldForwardProp:e=>"selected"!==e})(e=>{let{theme:t,selected:n}=e;return{display:"flex",flexDirection:"column",height:"100%",transition:"all 0.3s cubic-bezier(0.4, 0, 0.2, 1)",position:"relative",border:n?"2px solid ".concat(t.palette.primary.main):"none",boxShadow:n?t.shadows[4]:t.shadows[1],"&:hover":{boxShadow:t.shadows[6],transform:"translateY(-4px)"},"&::before":n?{content:'""',position:"absolute",top:0,left:0,width:"100%",height:"4px",backgroundColor:t.palette.primary.main}:{}}}),t5=(0,w.Ay)(a.default)(e=>{let{theme:t}=e;return{height:"140px",backgroundColor:(0,tq.X4)(t.palette.background.default,.7),borderRadius:t.shape.borderRadius,display:"flex",alignItems:"center",justifyContent:"center",margin:t.spacing(1),overflow:"hidden",position:"relative"}}),t4=()=>(0,o.jsxs)(tt.A,{sx:{height:"100%",display:"flex",flexDirection:"column"},children:[(0,o.jsx)(a.default,{sx:{p:1},children:(0,o.jsx)(t0.A,{variant:"rectangular",height:140})}),(0,o.jsxs)(tn.A,{sx:{flexGrow:1},children:[(0,o.jsx)(t0.A,{variant:"text",width:"80%",height:30}),(0,o.jsxs)(a.default,{sx:{display:"flex",gap:1,mt:1},children:[(0,o.jsx)(t0.A,{variant:"rectangular",width:60,height:20}),(0,o.jsx)(t0.A,{variant:"rectangular",width:90,height:20})]})]}),(0,o.jsxs)(tQ.A,{sx:{justifyContent:"flex-end",p:1},children:[(0,o.jsx)(t0.A,{variant:"circular",width:28,height:28}),(0,o.jsx)(t0.A,{variant:"circular",width:28,height:28}),(0,o.jsx)(t0.A,{variant:"circular",width:28,height:28})]})]}),t6=e=>{var t,n;let{flow:r,selected:i,onSelect:d,onDelete:p,onCopy:h,onEdit:f,validation:x}=e;t1.debug("Rendering FlowCard",{flowId:r.id,flowName:r.name});let m=(0,l.A)(),g=null!=(t=null==x?void 0:x.errorCount)?t:0,v=null!=(n=null==x?void 0:x.warningCount)?n:0,b=g>0?"error":v>0?"warning":null,y=x?(0,o.jsxs)(a.default,{children:[(0,o.jsx)(s.default,{variant:"caption",sx:{fontWeight:600,display:"block",mb:.5},children:g>0?"".concat(g," problem").concat(1===g?"":"s"," — won't run"):"".concat(v," warning").concat(1===v?"":"s")}),x.issues.slice(0,5).map((e,t)=>(0,o.jsxs)(s.default,{variant:"caption",sx:{display:"block"},children:["• ",e.message]},t)),x.issues.length>5&&(0,o.jsxs)(s.default,{variant:"caption",sx:{display:"block",fontStyle:"italic"},children:["…and ",x.issues.length-5," more"]})]}):null;return(0,o.jsxs)(t2,{selected:i,children:[b&&(0,o.jsx)(u.A,{title:y,arrow:!0,placement:"top",children:(0,o.jsxs)(a.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"===b?m.palette.error.main:m.palette.warning.main,boxShadow:m.shadows[2],pointerEvents:"auto"},children:["error"===b?(0,o.jsx)(eE.A,{sx:{fontSize:16}}):(0,o.jsx)(eD.A,{sx:{fontSize:16}}),(0,o.jsx)(s.default,{variant:"caption",sx:{fontWeight:700,lineHeight:1},children:"error"===b?g:v})]})}),(0,o.jsxs)(tK.A,{onClick:()=>d(r.id),sx:{display:"flex",flexDirection:"column",alignItems:"stretch",height:"100%",position:"relative"},children:[(0,o.jsx)(t5,{children:(()=>{if(0===r.nodes.length)return(0,o.jsx)(a.default,{sx:{width:"100%",height:"100%",display:"flex",alignItems:"center",justifyContent:"center"},children:(0,o.jsx)(s.default,{color:"textSecondary",align:"center",children:"Empty Flow"})});let e=r.nodes.map(e=>{var t,n;return null!=(n=null==(t=e.position)?void 0:t.x)?n:0}),t=r.nodes.map(e=>{var t,n;return null!=(n=null==(t=e.position)?void 0:t.y)?n:0}),n=Math.min(...e),l=Math.min(...t),i=Math.max(...e)+180,d=Math.max(...t)+70,c="".concat(n-40," ").concat(l-40," ").concat(i-n+80," ").concat(d-l+80),u=e=>{var t,n,o,r;return{cx:(null!=(o=null==(t=e.position)?void 0:t.x)?o:0)+90,cy:(null!=(r=null==(n=e.position)?void 0:n.y)?r:0)+35}};return(0,o.jsx)(a.default,{sx:{width:"100%",height:"100%",p:1},children:(0,o.jsxs)("svg",{width:"100%",height:"100%",viewBox:c,preserveAspectRatio:"xMidYMid meet",style:{display:"block"},children:[r.edges.map((e,t)=>{let n=r.nodes.find(t=>t.id===e.source),l=r.nodes.find(t=>t.id===e.target);if(!n||!l)return null;let a=u(n),s=u(l);return(0,o.jsx)("line",{x1:a.cx,y1:a.cy,x2:s.cx,y2:s.cy,stroke:m.palette.text.secondary,strokeWidth:2,opacity:.5,vectorEffect:"non-scaling-stroke"},e.id||t)}),r.nodes.map(e=>{var t,n,r,l,a,s;let i=null!=(l=null==(t=e.position)?void 0:t.x)?l:0,d=null!=(a=null==(n=e.position)?void 0:n.y)?a:0,c=null!=(s=null==(r=e.data)?void 0:r.type)?s:"process",u=(0,_.M6)(c,m);return(0,o.jsxs)("g",{children:[(0,o.jsx)("rect",{x:i,y:d,width:180,height:70,rx:12,fill:u,opacity:.85,stroke:m.palette.background.paper,strokeWidth:2,vectorEffect:"non-scaling-stroke"}),(0,o.jsx)("text",{x:i+90,y:d+35,textAnchor:"middle",dominantBaseline:"central",fill:"#fff",fontSize:35,fontWeight:"bold",children:c.substring(0,1).toUpperCase()})]},e.id)})]})})})()}),(0,o.jsxs)(tn.A,{sx:{flexGrow:1,pb:0},children:[(0,o.jsx)(s.default,{variant:"h6",component:"div",noWrap:!0,children:r.name}),(0,o.jsxs)(a.default,{sx:{display:"flex",gap:.5,mt:1,flexWrap:"wrap"},children:[(0,o.jsx)(eN.A,{size:"small",label:"".concat(r.nodes.length," nodes"),color:"primary",variant:"outlined",sx:{fontSize:"0.7rem",height:20}}),(0,o.jsx)(eN.A,{size:"small",label:"".concat(r.edges.length," connections"),color:"secondary",variant:"outlined",sx:{fontSize:"0.7rem",height:20}})]})]})]}),(0,o.jsxs)(tQ.A,{sx:{justifyContent:"flex-end",p:1,opacity:.7,"&:hover":{opacity:1}},children:[f&&(0,o.jsx)(u.A,{title:"Edit flow metadata",children:(0,o.jsx)(c.A,{size:"small",onClick:e=>{e.stopPropagation(),f&&f(r.id)},children:(0,o.jsx)(X.A,{fontSize:"small"})})}),h&&(0,o.jsx)(u.A,{title:"Copy flow",children:(0,o.jsx)(c.A,{size:"small",onClick:e=>{e.stopPropagation(),h&&h(r.id)},children:(0,o.jsx)($.A,{fontSize:"small"})})}),(0,o.jsx)(u.A,{title:"Delete flow",children:(0,o.jsx)(c.A,{size:"small",onClick:e=>{e.stopPropagation(),p(r.id)},color:"error",children:(0,o.jsx)(J.A,{fontSize:"small"})})})]})]})},t3=(0,S.h)("components/Flow/FlowDashboard/FlowDashboard");function t8(e,t){return e+Math.round(255*t).toString(16).padStart(2,"0")}let t7=e=>{let{flows:t,selectedFlow:n,onSelectFlow:d,onDeleteFlow:u,onCopyFlow:p,onEditFlow:h,onCreateFlow:f,isLoading:x=!1}=e,[m,g]=(0,r.useState)(""),[b,y]=(0,r.useState)("name-asc"),[w,S]=(0,r.useState)("grid"),[k,N]=(0,r.useState)(null),[T,I]=(0,r.useState)({});(0,r.useEffect)(()=>{let e=!1;return(async()=>{let t={};try{let e=await fetch("/api/model");if(e.ok){let n=await e.json();Array.isArray(n)&&(t.models=n)}}catch(e){t3.warn("Could not load models for flow badges",e)}try{let e=await fetch("/api/mcp/servers");if(e.ok){let n=await e.json();Array.isArray(n)&&(t.servers=n.map(e=>({name:e.name,status:e.disabled?"disabled":void 0})))}}catch(e){t3.warn("Could not load servers for flow badges",e)}e||I(t)})(),()=>{e=!0}},[]);let P=(0,r.useMemo)(()=>{let e={};for(let n of t)try{e[n.id]=eH(n,T)}catch(e){t3.warn("Failed to validate flow for badge",{flowId:n.id,error:e})}return e},[t,T]),M=(0,l.A)(),F=(0,tU.A)(M.breakpoints.down("sm")),E=(0,tU.A)(M.breakpoints.down("md")),D=()=>{N(null)},z=e=>{y(e),D()},R=(0,r.useMemo)(()=>{t3.debug("Filtering and sorting flows",{searchTerm:m,sortOption:b});let e=t;if(""!==m.trim()){let n=m.toLowerCase();e=t.filter(e=>e.name.toLowerCase().includes(n))}return[...e].sort((e,t)=>{switch(b){case"name-asc":return e.name.localeCompare(t.name);case"name-desc":return t.name.localeCompare(e.name);case"most-nodes":return t.nodes.length-e.nodes.length;case"least-nodes":return e.nodes.length-t.nodes.length;case"newest":return t.id.localeCompare(e.id);case"oldest":return e.id.localeCompare(t.id);default:return 0}})},[t,m,b]);return(0,o.jsxs)(a.default,{sx:{height:"100%",display:"flex",flexDirection:"column",overflow:"hidden"},children:[(0,o.jsx)(C.A,{elevation:1,sx:{mb:2,p:1},children:(0,o.jsxs)(a.default,{sx:{display:"flex",flexDirection:{xs:"column",sm:"row"},gap:1,alignItems:{xs:"stretch",sm:"center"},justifyContent:"space-between"},children:[(0,o.jsx)(v.A,{placeholder:"Search flows...",variant:"outlined",size:"small",fullWidth:!0,value:m,onChange:e=>{g(e.target.value)},InputProps:{startAdornment:(0,o.jsx)(te.A,{position:"start",children:(0,o.jsx)(tl.A,{fontSize:"small"})})},sx:{maxWidth:{sm:300}}}),(0,o.jsxs)(a.default,{sx:{display:"flex",gap:1,alignItems:"center"},children:[(0,o.jsxs)(a.default,{sx:{display:"flex",backgroundColor:M.palette.background.default,borderRadius:1,border:"1px solid ".concat(M.palette.divider),overflow:"hidden"},children:[(0,o.jsx)(c.A,{size:"small",onClick:()=>S("grid"),color:"grid"===w?"primary":"default",sx:{borderRadius:0,backgroundColor:"grid"===w?t8(M.palette.primary.main,.1):"transparent"},children:(0,o.jsx)(tV.A,{fontSize:"small"})}),(0,o.jsx)(c.A,{size:"small",onClick:()=>S("compact"),color:"compact"===w?"primary":"default",sx:{borderRadius:0,backgroundColor:"compact"===w?t8(M.palette.primary.main,.1):"transparent"},children:(0,o.jsx)(t$.A,{fontSize:"small"})})]}),(0,o.jsx)(c.A,{size:"small",onClick:e=>{N(e.currentTarget)},sx:{border:"1px solid ".concat(M.palette.divider),backgroundColor:M.palette.background.default},children:(0,o.jsx)(tY.A,{fontSize:"small"})})]})]})}),(0,o.jsxs)(a.default,{sx:{display:"flex",justifyContent:"space-between",mb:2,px:1},children:[(0,o.jsxs)(s.default,{variant:"body2",color:"textSecondary",children:[R.length," of ",t.length," flows",m&&' matching "'.concat(m,'"')]}),(0,o.jsxs)(s.default,{variant:"body2",color:"textSecondary",children:["Sorted by: ","name-asc"===b?"Name (A-Z)":"name-desc"===b?"Name (Z-A)":"newest"===b?"Newest first":"oldest"===b?"Oldest first":"most-nodes"===b?"Most nodes":"Least nodes"]})]}),(0,o.jsx)(a.default,{sx:{flex:1,overflow:"auto",px:1,pb:2},children:x?(0,o.jsx)(eU.Ay,{container:!0,spacing:2,children:Array(6).fill(0).map((e,t)=>(0,o.jsx)(eU.Ay,{item:!0,xs:12,sm:"compact"===w?12:6,md:"compact"===w?12:4,children:(0,o.jsx)(t4,{})},"skeleton-".concat(t)))}):R.length>0?(0,o.jsx)(eU.Ay,{container:!0,spacing:2,children:R.map(e=>(0,o.jsx)(eU.Ay,{item:!0,xs:12,sm:"compact"===w?12:6,md:"compact"===w?12:3==("compact"===w||F?1:E?2:3)?4:6,children:(0,o.jsx)(t6,{flow:e,selected:n===e.id,onSelect:d,onDelete:u,onCopy:p,onEdit:h,validation:P[e.id]})},e.id))}):(0,o.jsxs)(a.default,{sx:{display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",p:4,backgroundColor:M.palette.background.paper,borderRadius:1,border:"1px dashed ".concat(M.palette.divider),height:"100%",minHeight:200},children:[(0,o.jsx)(s.default,{variant:"h6",gutterBottom:!0,color:"textSecondary",children:"No flows found"}),m?(0,o.jsxs)(s.default,{variant:"body2",color:"textSecondary",align:"center",children:["No flows match your search criteria.",(0,o.jsxs)(a.default,{component:"span",display:"block",mt:1,children:["Try a different search term or ",(0,o.jsx)(i.A,{size:"small",onClick:()=>g(""),children:"clear the search"})]})]}):(0,o.jsxs)(s.default,{variant:"body2",color:"textSecondary",align:"center",children:["Get started by creating your first flow.",f&&(0,o.jsx)(a.default,{component:"span",display:"block",mt:2,children:(0,o.jsx)(i.A,{variant:"contained",color:"primary",startIcon:(0,o.jsx)(j.A,{}),onClick:f,children:"Create New Flow"})})]})]})}),(0,o.jsxs)(Y.A,{anchorEl:k,open:!!k,onClose:D,anchorOrigin:{vertical:"bottom",horizontal:"right"},transformOrigin:{vertical:"top",horizontal:"right"},children:[(0,o.jsxs)(O.A,{onClick:()=>z("name-asc"),children:[(0,o.jsx)(G.A,{children:(0,o.jsx)(tX.A,{fontSize:"small"})}),(0,o.jsx)(U.A,{primary:"Name (A-Z)"})]}),(0,o.jsxs)(O.A,{onClick:()=>z("name-desc"),children:[(0,o.jsx)(G.A,{children:(0,o.jsx)(tX.A,{fontSize:"small",sx:{transform:"scaleX(-1)"}})}),(0,o.jsx)(U.A,{primary:"Name (Z-A)"})]}),(0,o.jsx)(A.A,{}),(0,o.jsxs)(O.A,{onClick:()=>z("newest"),children:[(0,o.jsx)(G.A,{children:(0,o.jsx)(tZ.A,{fontSize:"small"})}),(0,o.jsx)(U.A,{primary:"Newest first"})]}),(0,o.jsxs)(O.A,{onClick:()=>z("oldest"),children:[(0,o.jsx)(G.A,{children:(0,o.jsx)(tZ.A,{fontSize:"small",sx:{transform:"scaleX(-1)"}})}),(0,o.jsx)(U.A,{primary:"Oldest first"})]}),(0,o.jsx)(A.A,{}),(0,o.jsxs)(O.A,{onClick:()=>z("most-nodes"),children:[(0,o.jsx)(G.A,{children:(0,o.jsx)(tJ.A,{fontSize:"small"})}),(0,o.jsx)(U.A,{primary:"Most nodes"})]}),(0,o.jsxs)(O.A,{onClick:()=>z("least-nodes"),children:[(0,o.jsx)(G.A,{children:(0,o.jsx)(tJ.A,{fontSize:"small",sx:{transform:"scaleY(-1)"}})}),(0,o.jsx)(U.A,{primary:"Least nodes"})]})]})]})},t9=(0,S.h)("app/flows/page"),ne=()=>{var e;t9.debug("Rendering FlowsPage"),(0,l.A)();let[t,n]=(0,r.useState)([]),[w,C]=(0,r.useState)(null),[A,S]=(0,r.useState)(!0),[k,I]=(0,r.useState)(!1),P=(0,r.useRef)(null),[M,F]=(0,r.useState)(!1),[E,D]=(0,r.useState)(null),[z,R]=(0,r.useState)(""),[B,L]=(0,r.useState)(null),[W,H]=(0,r.useState)({open:!1,message:"",severity:"info"});(0,r.useEffect)(()=>{t9.info("Loading flows"),(async()=>{S(!0);try{let e=await T.g.loadFlows();t9.debug("Flows loaded successfully",{count:e.length}),n(e),w&&(e.some(e=>e.id===w)||(t9.warn("Previously selected flow no longer exists",{flowId:w}),C(null),I(!1),G("The previously selected flow is no longer available","warning")))}catch(e){t9.error("Error loading flows",e),G("Failed to load flows","error")}finally{S(!1)}})()},[w]);let _=(0,r.useCallback)(e=>{t9.debug("Flow selected",{flowId:e}),C(e),I(!0)},[]);(0,r.useEffect)(()=>{if(!(k&&w))return;let e=e=>{P.current?P.current.requestNavigation(e):e()};return(0,tG.QO)(e),()=>(0,tG.bH)(e)},[k,w]);let O=(0,r.useCallback)(()=>{t9.debug("Returning to dashboard");let e=()=>I(!1);P.current?P.current.requestNavigation(e):e()},[]),G=(0,r.useCallback)(function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"info";t9.debug("Showing snackbar",{message:e,severity:t}),H({open:!0,message:e,severity:t})},[]),U=(0,r.useCallback)(()=>{H(e=>({...e,open:!1}))},[]);(0,r.useEffect)(()=>{if(!W.open||"error"===W.severity)return;let e=setTimeout(()=>{H(e=>({...e,open:!1}))},6e3);return()=>clearTimeout(e)},[W.open,W.message,W.severity]);let Y=(0,r.useCallback)(e=>(t9.debug("Validating flow name",{name:e}),e.trim())?/^[\w-]+$/.test(e)?t.some(t=>t.name.toLowerCase()===e.toLowerCase())?(t9.debug("Flow name validation failed: duplicate name"),"A flow with this name already exists"):(t9.debug("Flow name validation passed"),null):(t9.debug("Flow name validation failed: invalid characters"),"Flow name can only contain letters, numbers, underscores, and dashes"):(t9.debug("Flow name validation failed: empty name"),"Flow name cannot be empty"),[t]),J=async e=>{t9.info("Saving flow",{flowId:e.id,flowName:e.name});try{let o=t.some(t=>t.id===e.id)?await T.g.updateFlow(e):await T.g.addFlow(e);if(!o.success){t9.error("Failed to save flow",{error:o.error}),G(o.error||"Failed to save flow","error");return}t9.debug("Flow saved successfully"),n(t=>{let n=t.findIndex(t=>t.id===e.id);if(!(n>=0))return t9.debug("Adding new flow to state"),[...t,e];{t9.debug("Updating existing flow in state");let o=[...t];return o[n]=e,o}}),C(e.id),G("Flow saved successfully","success")}catch(e){t9.error("Error saving flow",e),G("Failed to save flow","error")}},$=async e=>{t9.info("Deleting flow",{flowId:e});try{await T.g.deleteFlow(e),t9.debug("Flow deleted successfully"),n(t=>t.filter(t=>t.id!==e)),w===e&&(t9.debug("Clearing selected flow as it was deleted"),C(null),I(!1)),G("Flow deleted","success")}catch(e){t9.error("Error deleting flow",e),G("Failed to delete flow","error")}},V=e=>{t9.info("Copying flow",{flowId:e});let n=t.find(t=>t.id===e);n?(t9.debug("Found flow to copy",{flowName:n.name}),D(n),R("".concat(n.name,"_copy")),F(!0)):(t9.warn("Flow to copy not found",{flowId:e}),G("Flow not found","error"))},X=()=>{t9.debug("Closing copy flow dialog"),F(!1),D(null),R(""),L(null)},Z=async()=>{if(t9.info("Confirming flow copy"),!E){t9.warn("No flow to copy"),G("No flow selected to copy","error");return}let e=Y(z);if(e){t9.debug("Flow name validation failed",{error:e}),L(e);return}let t=(0,N.A)();t9.debug("Creating new flow from copy",{newId:t,newName:z});let n={id:t,name:z,nodes:E.nodes,edges:E.edges};await J(n),X(),t9.debug("Selecting newly copied flow"),C(n.id),I(!0),G('Created a copy named "'.concat(z,'"'),"success")},q=async()=>{t9.info("Creating new flow");let e="NewFlow",n=e,o=1;for(;t.some(e=>e.name===n);)n="".concat(e).concat(o),o++;let r=T.g.createNewFlow(n);await J(r),I(!0),G("New flow created","success")};return(0,o.jsxs)(a.default,{sx:{height:"100%",display:"flex",flexDirection:"column"},children:[(0,o.jsxs)(a.default,{sx:{p:2,display:"flex",justifyContent:"space-between",alignItems:"center",borderBottom:1,borderColor:"divider"},children:[(0,o.jsxs)(a.default,{sx:{display:"flex",alignItems:"center"},children:[k&&w&&(0,o.jsx)(c.A,{color:"primary",onClick:O,sx:{mr:1},children:(0,o.jsx)(y.A,{})}),(0,o.jsx)(a.default,{children:(0,o.jsx)(s.default,{variant:"h5",children:k&&w?"Editing: ".concat((null==(e=t.find(e=>e.id===w))?void 0:e.name)||"Flow"):"Flow Dashboard"})})]}),!k&&(0,o.jsx)(a.default,{sx:{display:"flex",gap:1},children:(0,o.jsx)(u.A,{title:"Create a new flow with a starter template",children:(0,o.jsx)(i.A,{variant:"contained",color:"primary",startIcon:(0,o.jsx)(j.A,{}),onClick:q,"data-tour":"new-flow",children:"New Flow"})})})]}),(0,o.jsx)(p.A,{in:W.open,unmountOnExit:!0,children:(0,o.jsx)(h.A,{severity:W.severity,onClose:U,sx:{borderRadius:0},children:W.message})}),(0,o.jsx)(a.default,{sx:{flex:1,overflow:"hidden"},children:(()=>{if(k&&w){let e=t.find(e=>e.id===w);return e?(0,o.jsx)(d.A,{in:!0,timeout:300,children:(0,o.jsx)(a.default,{sx:{height:"100%"},children:(0,o.jsx)(tO,{ref:P,initialFlow:e,onSave:J,onDelete:$,allFlows:t},w)})}):(0,o.jsxs)(a.default,{sx:{p:4,textAlign:"center"},children:[(0,o.jsx)(s.default,{variant:"h6",color:"error",children:"Selected flow not found"}),(0,o.jsx)(i.A,{variant:"contained",onClick:O,sx:{mt:2},children:"Back to Dashboard"})]})}return(0,o.jsx)(d.A,{in:!0,timeout:300,children:(0,o.jsx)(a.default,{sx:{height:"100%"},children:(0,o.jsx)(t7,{flows:t,selectedFlow:w,onSelectFlow:_,onDeleteFlow:$,onCopyFlow:V,onCreateFlow:q,isLoading:A})})})})()}),(0,o.jsxs)(f.A,{open:M,onClose:X,children:[(0,o.jsx)(x.A,{children:"Copy Flow"}),(0,o.jsxs)(m.A,{children:[(0,o.jsx)(g.A,{children:"Enter a name for the copied flow:"}),(0,o.jsx)(v.A,{autoFocus:!0,margin:"dense",label:"Flow Name",type:"text",fullWidth:!0,value:z,onChange:e=>{let t=e.target.value;t9.debug("Flow name changed",{name:t}),R(t),L(Y(t))},error:!!B,helperText:B})]}),(0,o.jsxs)(b.A,{children:[(0,o.jsx)(i.A,{onClick:X,children:"Cancel"}),(0,o.jsx)(i.A,{onClick:Z,variant:"contained",color:"primary",disabled:!!B,children:"Copy"})]})]})]})}},60530:(e,t,n)=>{"use strict";n.d(t,{L_:()=>a,QO:()=>r,bH:()=>l});let o=null;function r(e){o=e}function l(e){o===e&&(o=null)}function a(e){return!!o&&(o(e),!0)}},61033:(e,t,n)=>{"use strict";n.d(t,{A$:()=>c,X8:()=>s,YP:()=>u,js:()=>d});let o="_-_-_",r=/^(tool|resource):(.+)$/,l=/\$\{((?:tool|resource):[^}]+|_-_-_[^}]+)\}/g;function a(e,t){return"".concat(e,"__").concat(t)}function s(e,t,n){return"${".concat(e,":").concat(a(t,n),"}")}function i(e){let t=r.exec(e);if(t){let e=t[1],n=function(e){let t=e.indexOf("__");if(t<=0)return null;let n=e.slice(t+2);return n?{server:e.slice(0,t),name:n}:null}(t[2]);return n?{kind:e,server:n.server,name:n.name}:null}if(e.startsWith(o)){let t=e.split(o);if(3===t.length&&t[1]&&t[2])return{kind:"tool",server:t[1],name:t[2]}}return null}function d(e){return e.startsWith("${")&&e.endsWith("}")?i(e.slice(2,-1)):null}function c(e){let t,n=[];for(l.lastIndex=0;null!==(t=l.exec(e));){let e=i(t[1]);e&&n.push({...e,fullMatch:t[0],index:t.index})}return n}function u(e){return"tool"===e.kind&&"handoff"===e.server?"handoff:".concat(e.name):"".concat(e.kind,":").concat(a(e.server,e.name))}},71075:(e,t,n)=>{Promise.resolve().then(n.bind(n,45993))},95480:(e,t,n)=>{"use strict";n.d(t,{A:()=>T});var o=n(95155),r=n(12115),l=n(87021),a=n(63941),s=n(29985),i=n(80372),d=n(94049),c=n(25635),u=n(3139),p=n(57883),h=n(2300),f=n(89218),x=n(42063),m=n(17897);n(32098);var g=n(61033);let v=(0,l.h)("frontend/components/shared/PromptBuilder"),b=e=>{v.debug("Deserializing markdown to Slate value");let t=e.split("\n").map(e=>({type:"paragraph",children:(e=>{let t=(0,g.A$)(e);if(0===t.length)return[{text:e}];let n=[],o=0;for(let r of t)r.index>o&&n.push({text:e.slice(o,r.index)}),n.push({type:"binding-reference",kind:r.kind,server:r.server,name:r.name,children:[{text:""}]}),o=r.index+r.fullMatch.length;return o<e.length&&n.push({text:e.slice(o)}),n})(e)}));return t.length>0?t:[{type:"paragraph",children:[{text:""}]}]},y=e=>{v.debug("Serializing Slate value to markdown");let t=0,n=e.map(e=>e.children?e.children.map(e=>a.EY.isText(e)?e.text:"binding-reference"===e.type?(t++,(0,g.X8)(e.kind,e.server,e.name)):"").join(""):"").join("\n");return t>0&&v.debug("Serialized ".concat(t," binding references")),n},j=e=>{let{attributes:t,children:n,element:r}=e;return"binding-reference"===r.type?(0,o.jsxs)("span",{...t,className:"tool-reference-wrapper",children:[(0,o.jsx)(()=>{let e=(0,s.Zi)(),t=(e=>"tool"===e.kind&&"handoff"===e.server)(r),n="resource"===r.kind?"resource":t?"handoff":"",l=()=>{let t=s.rL.findPath(e,r);v.debug("Removing binding reference: ".concat(r.kind,":").concat(r.server,":").concat(r.name)),a.gB.removeNodes(e,{at:t})};return(0,o.jsxs)("span",{contentEditable:!1,className:"tool-reference-container ".concat(n),children:[(0,o.jsx)("span",{className:"tool-reference ".concat(n),children:(0,g.YP)(r)}),(0,o.jsx)("span",{className:"tool-reference-delete ".concat(n),role:"button",tabIndex:0,onClick:e=>{e.preventDefault(),e.stopPropagation(),l()},onKeyDown:e=>{("Enter"===e.key||" "===e.key)&&(e.preventDefault(),e.stopPropagation(),l())},children:"\xd7"})]})},{}),n," "]}):(0,o.jsx)("p",{...t,children:n})},w=e=>{let{attributes:t,children:n,leaf:r}=e,l=n;return r.bold&&(l=(0,o.jsx)("strong",{children:l})),r.italic&&(l=(0,o.jsx)("em",{children:l})),r.code&&(l=(0,o.jsx)("code",{children:l})),(0,o.jsx)("span",{...t,children:l})},C=e=>{let{server:t,name:n}=e,l="handoff"===t,[a,s]=(0,r.useState)(null),[i,d]=(0,r.useState)(!0);return((0,r.useEffect)(()=>{let e=!1;return(async()=>{try{var o;d(!0);let r=null==(o=(await m.S.listServerTools(t)).tools)?void 0:o.find(e=>e.name===n);e||s(r||null)}catch(e){v.error("Failed to fetch tool info for ".concat(t,":").concat(n),e)}finally{e||d(!1)}})(),()=>{e=!0}},[t,n]),i)?(0,o.jsx)("span",{className:"tool-reference-preview loading ".concat(l?"handoff":""),children:"tool:".concat(t,"__").concat(n)}):a?(0,o.jsxs)("span",{className:"tool-reference-preview ".concat(l?"handoff":""),children:["[The user is referencing a ",l?"handoff":"tool"," `tool:",t,"__",n,"` (",a.description||"No description",")]"]}):(0,o.jsx)("span",{className:"tool-reference-preview not-found ".concat(l?"handoff":""),children:"tool:".concat(t,"__").concat(n," (Tool not found)")})},A=e=>{let{server:t,name:n}=e,[l,a]=(0,r.useState)(null),[s,i]=(0,r.useState)(!0);return((0,r.useEffect)(()=>{let e=!1;return(async()=>{try{i(!0);let o=await m.S.listServerResources(t),r=[...o.resources||[],...o.resourceTemplates||[]].find(e=>e.uri===n||e.uriTemplate===n);e||a((null==r?void 0:r.description)||(null==r?void 0:r.name)||null)}catch(e){v.error("Failed to fetch resource info for ".concat(t,":").concat(n),e)}finally{e||i(!1)}})(),()=>{e=!0}},[t,n]),s)?(0,o.jsx)("span",{className:"tool-reference-preview loading resource",children:"resource:".concat(t,"__").concat(n)}):(0,o.jsxs)("span",{className:"tool-reference-preview resource",children:["[The contents of resource `",n,"` from `",t,"`",l?" (".concat(l,")"):""," will be inserted here]"]})},S=e=>{let{binding:t}=e;return"resource"===t.kind?(0,o.jsx)(A,{server:t.server,name:t.name}):(0,o.jsx)(C,{server:t.server,name:t.name})},k=e=>{let{value:t}=e;v.debug("Rendering preview");let n=[],r=0;for(let e of(0,g.A$)(t))e.index>r&&n.push({type:"text",value:t.slice(r,e.index)}),n.push({type:"binding",binding:e,key:e.index}),r=e.index+e.fullMatch.length;r<t.length&&n.push({type:"text",value:t.slice(r)});let l=[],a=[],s=()=>{l.push((0,o.jsx)("p",{children:a},"p-".concat(l.length))),a=[]};for(let e of n)if("text"===e.type){let t=e.value.split("\n");for(let e=0;e<t.length;e++)a.push(t[e]),e<t.length-1&&s()}else a.push((0,o.jsx)(S,{binding:e.binding},"binding-".concat(e.key)));return a.length>0&&s(),(0,o.jsx)("div",{className:"preview-content",children:l})},N=(0,r.forwardRef)((e,t)=>{let{value:n,onChange:l,label:m="Prompt Builder",height:C=300,onModeChange:A,customPreviewRenderer:S}=e;v.info("PromptBuilder initialized");let N=(0,r.useMemo)(()=>{let e=(0,i.$k)((0,s.o$)((0,a.ie)())),{isInline:t,isVoid:n}=e;return e.isInline=e=>"binding-reference"===e.type||t(e),e.isVoid=e=>"binding-reference"===e.type||n(e),e},[]),[T,I]=(0,r.useState)("raw"),[P,M]=(0,r.useState)(()=>b(n||"")),F=(0,r.useRef)(!1),[,E]=(0,r.useState)(0);(0,r.useImperativeHandle)(t,()=>({insertText:e=>{v.info("insertText called with text length: ".concat(e.length));let t=(0,g.js)(e);if(t){v.info("Inserting ".concat(t.kind," reference: ").concat(t.server,":").concat(t.name));let e={type:"binding-reference",kind:t.kind,server:t.server,name:t.name,children:[{text:""}]};N.selection||a.gB.select(N,a.KE.end(N,[])),a.gB.insertNodes(N,e),a.gB.move(N),E(e=>e+1),M([...N.children])}else N.selection||a.gB.select(N,a.KE.end(N,[])),a.gB.insertText(N,e);l(y(N.children)),v.info("insertText completed successfully")},getMode:()=>T})),(0,r.useEffect)(()=>{y(P)!==y(b(n||""))&&(v.debug("External value change detected"),F.current=!0,M(b(n||"")))},[n,P]);let D=(0,r.useCallback)(e=>{if(F.current){F.current=!1;return}M(e),l(y(e))},[l]);return(0,o.jsxs)(d.default,{sx:{width:"100%",height:"100%",display:"flex",flexDirection:"column"},children:[m&&(0,o.jsx)(c.default,{variant:"subtitle1",gutterBottom:!0,sx:{fontWeight:"medium",mb:1},children:m}),(0,o.jsx)(d.default,{sx:{mb:1},children:(0,o.jsxs)(u.A,{value:T,exclusive:!0,onChange:(e,t)=>{null!==t&&(v.info("Mode changed from ".concat(T," to ").concat(t)),I(t),A&&A(t))},size:"small",children:[(0,o.jsxs)(p.A,{value:"raw",children:[(0,o.jsx)(f.A,{fontSize:"small",sx:{mr:.5}}),"Raw"]}),(0,o.jsxs)(p.A,{value:"preview",children:[(0,o.jsx)(x.A,{fontSize:"small",sx:{mr:.5}}),"Preview"]})]})}),(0,o.jsx)(h.A,{elevation:0,sx:{border:"1px solid rgba(0, 0, 0, 0.12)",borderRadius:1,overflow:"hidden",flexGrow:1,display:"flex",flexDirection:"column"},children:"raw"===T?(0,o.jsx)(d.default,{className:"slate-editor-container",sx:{height:"number"==typeof C?C:"100%",overflow:"auto",p:2},children:(0,o.jsx)(s.A,{editor:N,initialValue:P,onChange:D,children:(0,o.jsx)(s.Fo,{className:"slate-editor",renderElement:j,renderLeaf:w,placeholder:"Write your prompt here..."})})}):S?(0,o.jsx)(d.default,{className:"custom-preview-container",sx:{height:"number"==typeof C?C:"100%",overflow:"auto"},children:S()}):(0,o.jsx)(d.default,{className:"preview-container",sx:{height:"number"==typeof C?C:"100%",overflow:"auto",p:2},children:(0,o.jsx)(k,{value:n})})})]})});N.displayName="PromptBuilder";let T=N}},e=>{e.O(0,[1137,3862,7926,2678,4754,9244,8548,690,9562,2003,488,3272,5648,7396,3077,3750,1424,2624,5961,7488,39,2380,8862,3810,8441,1255,7358],()=>e(e.s=71075)),_N_E=e.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[7177],{1150:(e,n,r)=>{"use strict";Object.defineProperty(n,"__esModule",{value:!0}),Object.defineProperty(n,"default",{enumerable:!0,get:function(){return s}});let t=r(95155),o=r(12115),a=r(24437);function l(e){return{default:e&&"default"in e?e.default:e}}r(36552);let i={loader:()=>Promise.resolve(l(()=>null)),loading:null,ssr:!0},s=function(e){let n={...i,...e},r=(0,o.lazy)(()=>n.loader().then(l)),s=n.loading;function c(e){let l=s?(0,t.jsx)(s,{isLoading:!0,pastDelay:!0,error:null}):null,i=!n.ssr||!!n.loading,c=i?o.Suspense:o.Fragment,d=n.ssr?(0,t.jsxs)(t.Fragment,{children:[null,(0,t.jsx)(r,{...e})]}):(0,t.jsx)(a.BailoutToCSR,{reason:"next/dynamic",children:(0,t.jsx)(r,{...e})});return(0,t.jsx)(c,{...i?{fallback:l}:{},children:d})}return c.displayName="LoadableComponent",c}},3946:e=>{e.exports={style:{fontFamily:"'Geist Mono', 'Geist Mono Fallback'",fontStyle:"normal"},className:"__className_c29908",variable:"__variable_c29908"}},8567:(e,n,r)=>{"use strict";Object.defineProperty(n,"__esModule",{value:!0}),Object.defineProperty(n,"workAsyncStorage",{enumerable:!0,get:function(){return t.workAsyncStorageInstance}});let t=r(17828)},13673:()=>{},17828:(e,n,r)=>{"use strict";Object.defineProperty(n,"__esModule",{value:!0}),Object.defineProperty(n,"workAsyncStorageInstance",{enumerable:!0,get:function(){return t}});let t=(0,r(64054).createAsyncLocalStorage)()},24437:(e,n,r)=>{"use strict";function t(e){let{reason:n,children:r}=e;return r}Object.defineProperty(n,"__esModule",{value:!0}),Object.defineProperty(n,"BailoutToCSR",{enumerable:!0,get:function(){return t}}),r(24553)},36552:(e,n,r)=>{"use strict";function t(e){let{moduleIds:n}=e;return null}Object.defineProperty(n,"__esModule",{value:!0}),Object.defineProperty(n,"PreloadChunks",{enumerable:!0,get:function(){return t}}),r(95155),r(47650),r(8567),r(77278)},59742:e=>{e.exports={style:{fontFamily:"'Geist', 'Geist Fallback'",fontStyle:"normal"},className:"__className_246ccd",variable:"__variable_246ccd"}},64054:(e,n)=>{"use strict";Object.defineProperty(n,"__esModule",{value:!0}),!function(e,n){for(var r in n)Object.defineProperty(e,r,{enumerable:!0,get:n[r]})}(n,{bindSnapshot:function(){return l},createAsyncLocalStorage:function(){return a},createSnapshot:function(){return i}});let r=Object.defineProperty(Error("Invariant: AsyncLocalStorage accessed in runtime where it is not available"),"__NEXT_ERROR_CODE",{value:"E504",enumerable:!1,configurable:!0});class t{disable(){throw r}getStore(){}run(){throw r}exit(){throw r}enterWith(){throw r}static bind(e){return e}}let o="undefined"!=typeof globalThis&&globalThis.AsyncLocalStorage;function a(){return o?new o:new t}function l(e){return o?o.bind(e):t.bind(e)}function i(){return o?o.snapshot():function(e,...n){return e(...n)}}},68187:(e,n,r)=>{Promise.resolve().then(r.t.bind(r,59742,23)),Promise.resolve().then(r.t.bind(r,3946,23)),Promise.resolve().then(r.t.bind(r,13673,23)),Promise.resolve().then(r.bind(r,72403))},72403:(e,n,r)=>{"use strict";r.d(n,{default:()=>h});var t=r(95155),o=r(12115),a=r(86278),l=r.n(a);let i=(0,r(87021).h)("frontend/components/AppWrapper"),s=l()(()=>Promise.all([r.e(2678),r.e(8598),r.e(7583)]).then(r.bind(r,26796)).then(e=>e.ThemeProvider),{loadableGenerated:{webpack:()=>[26796]},ssr:!1,loading:()=>(0,t.jsx)("div",{children:"Loading theme..."})}),c=l()(()=>r.e(9164).then(r.bind(r,9164)).then(e=>e.StorageProvider),{loadableGenerated:{webpack:()=>[9164]},ssr:!1,loading:()=>(0,t.jsx)("div",{children:"Loading storage..."})}),d=l()(()=>Promise.all([r.e(2678),r.e(4754),r.e(9244),r.e(8548),r.e(8598),r.e(2619),r.e(7539),r.e(8187)]).then(r.bind(r,48187)),{loadableGenerated:{webpack:()=>[48187]},ssr:!1,loading:()=>(0,t.jsx)("div",{children:"Loading navigation..."})}),u=l()(()=>Promise.all([r.e(2678),r.e(4754),r.e(9244),r.e(8548),r.e(690),r.e(9562),r.e(2003),r.e(3272),r.e(9164),r.e(3217)]).then(r.bind(r,23217)),{loadableGenerated:{webpack:()=>[23217]},ssr:!1,loading:()=>null}),f=l()(()=>Promise.all([r.e(9164),r.e(9195)]).then(r.bind(r,69195)).then(e=>e.TourProvider),{loadableGenerated:{webpack:()=>[69195]},ssr:!1,loading:()=>null}),b=l()(()=>Promise.all([r.e(2678),r.e(4754),r.e(9244),r.e(8548),r.e(690),r.e(2005),r.e(8345),r.e(9164),r.e(3545)]).then(r.bind(r,83545)),{loadableGenerated:{webpack:()=>[83545]},ssr:!1,loading:()=>null});class p extends o.Component{static getDerivedStateFromError(){return{hasError:!0}}componentDidCatch(e){i.error("AppWrapper error boundary caught an error:",e)}render(){return this.state.hasError?(0,t.jsxs)("div",{style:{padding:"20px",textAlign:"center"},children:[(0,t.jsx)("h2",{children:"Something went wrong loading the application."}),(0,t.jsx)("p",{children:"Please try refreshing the page."}),(0,t.jsx)("button",{onClick:()=>window.location.reload(),style:{padding:"8px 16px",background:"#3498DB",color:"white",border:"none",borderRadius:"4px",cursor:"pointer",marginTop:"10px"},children:"Refresh"})]}):this.props.children}constructor(e){super(e),this.state={hasError:!1}}}function h(e){let{children:n}=e;return i.debug("Rendering AppWrapper"),(0,t.jsx)(p,{children:(0,t.jsx)(o.Suspense,{fallback:(0,t.jsx)("div",{children:"Loading application..."}),children:(0,t.jsx)(s,{children:(0,t.jsx)(c,{children:(0,t.jsxs)(f,{children:[(0,t.jsxs)(o.Suspense,{fallback:(0,t.jsx)("div",{children:"Loading navigation..."}),children:[(0,t.jsx)(d,{}),(0,t.jsx)(u,{})]}),(0,t.jsx)("main",{children:n}),(0,t.jsx)(b,{})]})})})})})}},86278:(e,n,r)=>{"use strict";Object.defineProperty(n,"__esModule",{value:!0}),Object.defineProperty(n,"default",{enumerable:!0,get:function(){return o}});let t=r(28140)._(r(1150));function o(e,n){var r;let o={};"function"==typeof e&&(o.loader=e);let a={...o,...n};return(0,t.default)({...a,modules:null==(r=a.loadableGenerated)?void 0:r.modules})}("function"==typeof n.default||"object"==typeof n.default&&null!==n.default)&&void 0===n.default.__esModule&&(Object.defineProperty(n.default,"__esModule",{value:!0}),Object.assign(n.default,n),e.exports=n.default)},87021:(e,n,r)=>{"use strict";r.d(n,{h:()=>s});let t={LOG_LEVEL:3},o={VERBOSE:-1,DEBUG:0,INFO:1,WARN:2,ERROR:3},a="number"==typeof t.LOG_LEVEL?t.LOG_LEVEL:o.ERROR;function l(e){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;if(n>6)return String(e);if(!(e instanceof Error))return e;let r={name:e.name,message:e.message};for(let t of Object.getOwnPropertyNames(e)){if("name"===t||"message"===t)continue;let o=e[t];"function"!=typeof o&&("stack"===t?r.stack=o:"cause"===t?r.cause=l(o,n+1):"errors"===t&&Array.isArray(o)?r.errors=o.map(e=>l(e,n+1)):r[t]=o)}return r}function i(e,n,r,t,i){if(e>=("number"==typeof i?i:a)){if("function"==typeof t)try{t=t()}catch(e){t="[lazy log data threw]"}let a=new Date().toISOString(),i="[".concat(a,"] [").concat(n,"]"),s="".concat(i," ").concat(r);if(void 0!==t)if(t instanceof Error||"object"==typeof t)try{let e=t instanceof Error?l(t):t,n=JSON.stringify(e,(e,n)=>n instanceof Error?l(n):n,2);s+=":\n".concat(n)}catch(e){s+=": [Object cannot be stringified]"}else s+=": ".concat(t);switch(e){case o.VERBOSE:console.debug("[VERBOSE] ".concat(s));break;case o.DEBUG:console.debug(s);break;case o.INFO:console.info(s);break;case o.WARN:console.warn(s);break;case o.ERROR:console.error(s);break;default:console.log(s)}}}function s(e,n){let r,t=((r=e.replace(/^src\//,"")).startsWith("/")&&(r=r.substring(1)),r);return{verbose:(e,r)=>{i(o.VERBOSE,t,e,r,n)},debug:(e,r)=>{i(o.DEBUG,t,e,r,n)},info:(e,r)=>{i(o.INFO,t,e,r,n)},warn:(e,r)=>{i(o.WARN,t,e,r,n)},error:(e,r)=>{i(o.ERROR,t,e,r,n)}}}}},e=>{e.O(0,[4193,8441,1255,7358],()=>e(e.s=68187)),_N_E=e.O()}]);