flujo-ai 3.33.0 → 3.35.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 (549) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-build-manifest.json +292 -285
  3. package/.next/app-path-routes-manifest.json +20 -19
  4. package/.next/build-manifest.json +5 -5
  5. package/.next/prerender-manifest.json +21 -21
  6. package/.next/react-loadable-manifest.json +3 -3
  7. package/.next/routes-manifest.json +9 -0
  8. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  9. package/.next/server/app/_not-found.html +1 -1
  10. package/.next/server/app/_not-found.rsc +2 -2
  11. package/.next/server/app/api/approvals/[id]/route.js +1 -1
  12. package/.next/server/app/api/approvals/[id]/route.js.nft.json +1 -1
  13. package/.next/server/app/api/approvals/[id]/route_client-reference-manifest.js +1 -1
  14. package/.next/server/app/api/approvals/route.js +2 -2
  15. package/.next/server/app/api/approvals/route.js.nft.json +1 -1
  16. package/.next/server/app/api/approvals/route_client-reference-manifest.js +1 -1
  17. package/.next/server/app/api/backup/route.js +1 -1
  18. package/.next/server/app/api/backup/route.js.nft.json +1 -1
  19. package/.next/server/app/api/backup/route_client-reference-manifest.js +1 -1
  20. package/.next/server/app/api/browse/route_client-reference-manifest.js +1 -1
  21. package/.next/server/app/api/bugs/enhance/route.js +1 -1
  22. package/.next/server/app/api/bugs/enhance/route.js.nft.json +1 -1
  23. package/.next/server/app/api/bugs/enhance/route_client-reference-manifest.js +1 -1
  24. package/.next/server/app/api/cwd/route_client-reference-manifest.js +1 -1
  25. package/.next/server/app/api/encryption/secure/route.js +1 -1
  26. package/.next/server/app/api/encryption/secure/route.js.nft.json +1 -1
  27. package/.next/server/app/api/encryption/secure/route_client-reference-manifest.js +1 -1
  28. package/.next/server/app/api/env/route.js +2 -2
  29. package/.next/server/app/api/env/route_client-reference-manifest.js +1 -1
  30. package/.next/server/app/api/flow/[id]/route.js.nft.json +1 -1
  31. package/.next/server/app/api/flow/[id]/route_client-reference-manifest.js +1 -1
  32. package/.next/server/app/api/flow/[id]/versions/[versionId]/route.js.nft.json +1 -1
  33. package/.next/server/app/api/flow/[id]/versions/[versionId]/route_client-reference-manifest.js +1 -1
  34. package/.next/server/app/api/flow/[id]/versions/route.js.nft.json +1 -1
  35. package/.next/server/app/api/flow/[id]/versions/route_client-reference-manifest.js +1 -1
  36. package/.next/server/app/api/flow/compile/route.js +1 -1
  37. package/.next/server/app/api/flow/compile/route.js.nft.json +1 -1
  38. package/.next/server/app/api/flow/compile/route_client-reference-manifest.js +1 -1
  39. package/.next/server/app/api/flow/generate/route.js +1 -1
  40. package/.next/server/app/api/flow/generate/route.js.nft.json +1 -1
  41. package/.next/server/app/api/flow/generate/route_client-reference-manifest.js +1 -1
  42. package/.next/server/app/api/flow/generator/route.js +25 -4
  43. package/.next/server/app/api/flow/generator/route.js.nft.json +1 -1
  44. package/.next/server/app/api/flow/generator/route_client-reference-manifest.js +1 -1
  45. package/.next/server/app/api/flow/improve/route.js +1 -1
  46. package/.next/server/app/api/flow/improve/route.js.nft.json +1 -1
  47. package/.next/server/app/api/flow/improve/route_client-reference-manifest.js +1 -1
  48. package/.next/server/app/api/flow/prompt-renderer/route.js +1 -1
  49. package/.next/server/app/api/flow/prompt-renderer/route.js.nft.json +1 -1
  50. package/.next/server/app/api/flow/prompt-renderer/route_client-reference-manifest.js +1 -1
  51. package/.next/server/app/api/flow/quick-chat/route.js.nft.json +1 -1
  52. package/.next/server/app/api/flow/quick-chat/route_client-reference-manifest.js +1 -1
  53. package/.next/server/app/api/flow/repair/route.js +1 -1
  54. package/.next/server/app/api/flow/repair/route.js.nft.json +1 -1
  55. package/.next/server/app/api/flow/repair/route_client-reference-manifest.js +1 -1
  56. package/.next/server/app/api/flow/route.js.nft.json +1 -1
  57. package/.next/server/app/api/flow/route_client-reference-manifest.js +1 -1
  58. package/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
  59. package/.next/server/app/api/init/route.js +1 -1
  60. package/.next/server/app/api/init/route.js.nft.json +1 -1
  61. package/.next/server/app/api/init/route_client-reference-manifest.js +1 -1
  62. package/.next/server/app/api/local-models/capability/route_client-reference-manifest.js +1 -1
  63. package/.next/server/app/api/local-models/pull/route_client-reference-manifest.js +1 -1
  64. package/.next/server/app/api/local-models/suggest/route_client-reference-manifest.js +1 -1
  65. package/.next/server/app/api/mcp/app-sandbox/route_client-reference-manifest.js +1 -1
  66. package/.next/server/app/api/mcp/cancel/route.js +1 -1
  67. package/.next/server/app/api/mcp/cancel/route.js.nft.json +1 -1
  68. package/.next/server/app/api/mcp/cancel/route_client-reference-manifest.js +1 -1
  69. package/.next/server/app/api/mcp/oauth-capability/route.js.nft.json +1 -1
  70. package/.next/server/app/api/mcp/oauth-capability/route_client-reference-manifest.js +1 -1
  71. package/.next/server/app/api/mcp/servers/[name]/prompts/get/route.js.nft.json +1 -1
  72. package/.next/server/app/api/mcp/servers/[name]/prompts/get/route_client-reference-manifest.js +1 -1
  73. package/.next/server/app/api/mcp/servers/[name]/prompts/route.js.nft.json +1 -1
  74. package/.next/server/app/api/mcp/servers/[name]/prompts/route_client-reference-manifest.js +1 -1
  75. package/.next/server/app/api/mcp/servers/[name]/resources/read/route.js.nft.json +1 -1
  76. package/.next/server/app/api/mcp/servers/[name]/resources/read/route_client-reference-manifest.js +1 -1
  77. package/.next/server/app/api/mcp/servers/[name]/resources/route.js.nft.json +1 -1
  78. package/.next/server/app/api/mcp/servers/[name]/resources/route_client-reference-manifest.js +1 -1
  79. package/.next/server/app/api/mcp/servers/[name]/route.js.nft.json +1 -1
  80. package/.next/server/app/api/mcp/servers/[name]/route_client-reference-manifest.js +1 -1
  81. package/.next/server/app/api/mcp/servers/[name]/status/route.js.nft.json +1 -1
  82. package/.next/server/app/api/mcp/servers/[name]/status/route_client-reference-manifest.js +1 -1
  83. package/.next/server/app/api/mcp/servers/[name]/tools/[toolName]/route.js.nft.json +1 -1
  84. package/.next/server/app/api/mcp/servers/[name]/tools/[toolName]/route_client-reference-manifest.js +1 -1
  85. package/.next/server/app/api/mcp/servers/[name]/tools/route.js.nft.json +1 -1
  86. package/.next/server/app/api/mcp/servers/[name]/tools/route_client-reference-manifest.js +1 -1
  87. package/.next/server/app/api/mcp/servers/route.js.nft.json +1 -1
  88. package/.next/server/app/api/mcp/servers/route_client-reference-manifest.js +1 -1
  89. package/.next/server/app/api/mcp/test-connection/route.js.nft.json +1 -1
  90. package/.next/server/app/api/mcp/test-connection/route_client-reference-manifest.js +1 -1
  91. package/.next/server/app/api/mcp/test-connection/stream/route.js.nft.json +1 -1
  92. package/.next/server/app/api/mcp/test-connection/stream/route_client-reference-manifest.js +1 -1
  93. package/.next/server/app/api/mcp-registry/route.js +1 -1
  94. package/.next/server/app/api/mcp-registry/route.js.nft.json +1 -1
  95. package/.next/server/app/api/mcp-registry/route_client-reference-manifest.js +1 -1
  96. package/.next/server/app/api/mcp-registry/spotlight/route.js +1 -1
  97. package/.next/server/app/api/mcp-registry/spotlight/route_client-reference-manifest.js +1 -1
  98. package/.next/server/app/api/model/[id]/route.js.nft.json +1 -1
  99. package/.next/server/app/api/model/[id]/route_client-reference-manifest.js +1 -1
  100. package/.next/server/app/api/model/provider/route.js +1 -1
  101. package/.next/server/app/api/model/provider/route.js.nft.json +1 -1
  102. package/.next/server/app/api/model/provider/route_client-reference-manifest.js +1 -1
  103. package/.next/server/app/api/model/route.js.nft.json +1 -1
  104. package/.next/server/app/api/model/route_client-reference-manifest.js +1 -1
  105. package/.next/server/app/api/model/test/route.js +1 -1
  106. package/.next/server/app/api/model/test/route.js.nft.json +1 -1
  107. package/.next/server/app/api/model/test/route_client-reference-manifest.js +1 -1
  108. package/.next/server/app/api/oauth/callback/route.js +1 -1
  109. package/.next/server/app/api/oauth/callback/route_client-reference-manifest.js +1 -1
  110. package/.next/server/app/api/oauth/initiate/route.js +1 -1
  111. package/.next/server/app/api/oauth/initiate/route_client-reference-manifest.js +1 -1
  112. package/.next/server/app/api/oauth/reset/route.js +1 -1
  113. package/.next/server/app/api/oauth/reset/route.js.nft.json +1 -1
  114. package/.next/server/app/api/oauth/reset/route_client-reference-manifest.js +1 -1
  115. package/.next/server/app/api/packages/build/route.js +1 -1
  116. package/.next/server/app/api/packages/build/route.js.nft.json +1 -1
  117. package/.next/server/app/api/packages/build/route_client-reference-manifest.js +1 -1
  118. package/.next/server/app/api/packages/derive-secrets/route.js.nft.json +1 -1
  119. package/.next/server/app/api/packages/derive-secrets/route_client-reference-manifest.js +1 -1
  120. package/.next/server/app/api/packages/install/route.js.nft.json +1 -1
  121. package/.next/server/app/api/packages/install/route_client-reference-manifest.js +1 -1
  122. package/.next/server/app/api/packages/install/status/route.js.nft.json +1 -1
  123. package/.next/server/app/api/packages/install/status/route_client-reference-manifest.js +1 -1
  124. package/.next/server/app/api/packages/installed/route.js.nft.json +1 -1
  125. package/.next/server/app/api/packages/installed/route_client-reference-manifest.js +1 -1
  126. package/.next/server/app/api/packages/resolve/route.js +1 -1
  127. package/.next/server/app/api/packages/resolve/route.js.nft.json +1 -1
  128. package/.next/server/app/api/packages/resolve/route_client-reference-manifest.js +1 -1
  129. package/.next/server/app/api/packages/scan-targets/route.js.nft.json +1 -1
  130. package/.next/server/app/api/packages/scan-targets/route_client-reference-manifest.js +1 -1
  131. package/.next/server/app/api/packages/search/route.js +1 -1
  132. package/.next/server/app/api/packages/search/route_client-reference-manifest.js +1 -1
  133. package/.next/server/app/api/packages/uninstall/route.js.nft.json +1 -1
  134. package/.next/server/app/api/packages/uninstall/route_client-reference-manifest.js +1 -1
  135. package/.next/server/app/api/planned-executions/[id]/route.js +1 -1
  136. package/.next/server/app/api/planned-executions/[id]/route.js.nft.json +1 -1
  137. package/.next/server/app/api/planned-executions/[id]/route_client-reference-manifest.js +1 -1
  138. package/.next/server/app/api/planned-executions/[id]/run/route.js +1 -1
  139. package/.next/server/app/api/planned-executions/[id]/run/route.js.nft.json +1 -1
  140. package/.next/server/app/api/planned-executions/[id]/run/route_client-reference-manifest.js +1 -1
  141. package/.next/server/app/api/planned-executions/[id]/runs/route.js +1 -1
  142. package/.next/server/app/api/planned-executions/[id]/runs/route.js.nft.json +1 -1
  143. package/.next/server/app/api/planned-executions/[id]/runs/route_client-reference-manifest.js +1 -1
  144. package/.next/server/app/api/planned-executions/preview-schedule/route_client-reference-manifest.js +1 -1
  145. package/.next/server/app/api/planned-executions/reconcile/route.js +1 -1
  146. package/.next/server/app/api/planned-executions/reconcile/route.js.nft.json +1 -1
  147. package/.next/server/app/api/planned-executions/reconcile/route_client-reference-manifest.js +1 -1
  148. package/.next/server/app/api/planned-executions/route.js +1 -1
  149. package/.next/server/app/api/planned-executions/route.js.nft.json +1 -1
  150. package/.next/server/app/api/planned-executions/route_client-reference-manifest.js +1 -1
  151. package/.next/server/app/api/registry/auth/resend/route_client-reference-manifest.js +1 -1
  152. package/.next/server/app/api/registry/auth/reset/route_client-reference-manifest.js +1 -1
  153. package/.next/server/app/api/registry/auth/route_client-reference-manifest.js +1 -1
  154. package/.next/server/app/api/registry/feedback/route.js +1 -1
  155. package/.next/server/app/api/registry/feedback/route_client-reference-manifest.js +1 -1
  156. package/.next/server/app/api/registry/oauth/callback/route_client-reference-manifest.js +1 -1
  157. package/.next/server/app/api/registry/oauth/initiate/route_client-reference-manifest.js +1 -1
  158. package/.next/server/app/api/registry/packages/route_client-reference-manifest.js +1 -1
  159. package/.next/server/app/api/registry/publish/route_client-reference-manifest.js +1 -1
  160. package/.next/server/app/api/registry/settings/route_client-reference-manifest.js +1 -1
  161. package/.next/server/app/api/restore/route.js +1 -1
  162. package/.next/server/app/api/restore/route.js.nft.json +1 -1
  163. package/.next/server/app/api/restore/route_client-reference-manifest.js +1 -1
  164. package/.next/server/app/api/runs/active/route.js +1 -1
  165. package/.next/server/app/api/runs/active/route.js.nft.json +1 -1
  166. package/.next/server/app/api/runs/active/route_client-reference-manifest.js +1 -1
  167. package/.next/server/app/api/storage/route.js +1 -1
  168. package/.next/server/app/api/storage/route_client-reference-manifest.js +1 -1
  169. package/.next/server/app/api/telemetry/daily-active/route.js +1 -1
  170. package/.next/server/app/api/telemetry/daily-active/route_client-reference-manifest.js +1 -1
  171. package/.next/server/app/api/update/route.js +1 -1
  172. package/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
  173. package/.next/server/app/api/waves/route.js +1 -1
  174. package/.next/server/app/api/waves/route.js.nft.json +1 -1
  175. package/.next/server/app/api/waves/route_client-reference-manifest.js +1 -1
  176. package/.next/server/app/api/webhooks/[id]/route.js +1 -1
  177. package/.next/server/app/api/webhooks/[id]/route.js.nft.json +1 -1
  178. package/.next/server/app/api/webhooks/[id]/route_client-reference-manifest.js +1 -1
  179. package/.next/server/app/chat/page.js +2 -2
  180. package/.next/server/app/chat/page.js.nft.json +1 -1
  181. package/.next/server/app/chat/page_client-reference-manifest.js +1 -1
  182. package/.next/server/app/chat.html +1 -1
  183. package/.next/server/app/chat.rsc +3 -3
  184. package/.next/server/app/docs/page_client-reference-manifest.js +1 -1
  185. package/.next/server/app/docs.html +1 -1
  186. package/.next/server/app/docs.rsc +2 -2
  187. package/.next/server/app/executions/page.js +2 -2
  188. package/.next/server/app/executions/page.js.nft.json +1 -1
  189. package/.next/server/app/executions/page_client-reference-manifest.js +1 -1
  190. package/.next/server/app/executions.html +1 -1
  191. package/.next/server/app/executions.rsc +3 -3
  192. package/.next/server/app/flows/page.js +3 -3
  193. package/.next/server/app/flows/page.js.nft.json +1 -1
  194. package/.next/server/app/flows/page_client-reference-manifest.js +1 -1
  195. package/.next/server/app/flows.html +1 -1
  196. package/.next/server/app/flows.rsc +3 -3
  197. package/.next/server/app/index.html +1 -1
  198. package/.next/server/app/index.rsc +3 -3
  199. package/.next/server/app/mcp/page.js +1 -1
  200. package/.next/server/app/mcp/page_client-reference-manifest.js +1 -1
  201. package/.next/server/app/mcp-flows/route.js +1 -1
  202. package/.next/server/app/mcp-flows/route.js.nft.json +1 -1
  203. package/.next/server/app/mcp-flows/route_client-reference-manifest.js +1 -1
  204. package/.next/server/app/mcp-proxy/[server]/route.js +1 -1
  205. package/.next/server/app/mcp-proxy/[server]/route.js.nft.json +1 -1
  206. package/.next/server/app/mcp-proxy/[server]/route_client-reference-manifest.js +1 -1
  207. package/.next/server/app/mcp.html +1 -1
  208. package/.next/server/app/mcp.rsc +3 -3
  209. package/.next/server/app/models/page.js +1 -1
  210. package/.next/server/app/models/page.js.nft.json +1 -1
  211. package/.next/server/app/models/page_client-reference-manifest.js +1 -1
  212. package/.next/server/app/packages/page.js +1 -1
  213. package/.next/server/app/packages/page_client-reference-manifest.js +1 -1
  214. package/.next/server/app/packages.html +1 -1
  215. package/.next/server/app/packages.rsc +3 -3
  216. package/.next/server/app/page.js +4 -2
  217. package/.next/server/app/page_client-reference-manifest.js +1 -1
  218. package/.next/server/app/settings/page.js +1 -1
  219. package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  220. package/.next/server/app/settings.html +1 -1
  221. package/.next/server/app/settings.rsc +3 -3
  222. package/.next/server/app/v1/chat/completions/route.js.nft.json +1 -1
  223. package/.next/server/app/v1/chat/completions/route_client-reference-manifest.js +1 -1
  224. package/.next/server/app/v1/chat/conversations/[conversationId]/breakpoints/route.js +2 -2
  225. package/.next/server/app/v1/chat/conversations/[conversationId]/breakpoints/route.js.nft.json +1 -1
  226. package/.next/server/app/v1/chat/conversations/[conversationId]/breakpoints/route_client-reference-manifest.js +1 -1
  227. package/.next/server/app/v1/chat/conversations/[conversationId]/cancel/route.js +2 -2
  228. package/.next/server/app/v1/chat/conversations/[conversationId]/cancel/route.js.nft.json +1 -1
  229. package/.next/server/app/v1/chat/conversations/[conversationId]/cancel/route_client-reference-manifest.js +1 -1
  230. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/continue/route.js +1 -1
  231. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/continue/route.js.nft.json +1 -1
  232. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/continue/route_client-reference-manifest.js +1 -1
  233. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/step/route.js +1 -1
  234. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/step/route.js.nft.json +1 -1
  235. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/step/route_client-reference-manifest.js +1 -1
  236. package/.next/server/app/v1/chat/conversations/[conversationId]/edit-state/route.js +2 -2
  237. package/.next/server/app/v1/chat/conversations/[conversationId]/edit-state/route.js.nft.json +1 -1
  238. package/.next/server/app/v1/chat/conversations/[conversationId]/edit-state/route_client-reference-manifest.js +1 -1
  239. package/.next/server/app/v1/chat/conversations/[conversationId]/events/route.js +1 -1
  240. package/.next/server/app/v1/chat/conversations/[conversationId]/events/route.js.nft.json +1 -1
  241. package/.next/server/app/v1/chat/conversations/[conversationId]/events/route_client-reference-manifest.js +1 -1
  242. package/.next/server/app/v1/chat/conversations/[conversationId]/inject/route.js +1 -1
  243. package/.next/server/app/v1/chat/conversations/[conversationId]/inject/route.js.nft.json +1 -1
  244. package/.next/server/app/v1/chat/conversations/[conversationId]/inject/route_client-reference-manifest.js +1 -1
  245. package/.next/server/app/v1/chat/conversations/[conversationId]/resources/[resourceId]/content/route.js +1 -0
  246. package/.next/server/app/v1/chat/conversations/[conversationId]/resources/[resourceId]/content/route.js.nft.json +1 -0
  247. package/.next/server/app/v1/chat/conversations/[conversationId]/resources/[resourceId]/content/route_client-reference-manifest.js +1 -0
  248. package/.next/server/app/v1/chat/conversations/[conversationId]/resources/route.js +1 -1
  249. package/.next/server/app/v1/chat/conversations/[conversationId]/resources/route_client-reference-manifest.js +1 -1
  250. package/.next/server/app/v1/chat/conversations/[conversationId]/respond/route.js +1 -1
  251. package/.next/server/app/v1/chat/conversations/[conversationId]/respond/route.js.nft.json +1 -1
  252. package/.next/server/app/v1/chat/conversations/[conversationId]/respond/route_client-reference-manifest.js +1 -1
  253. package/.next/server/app/v1/chat/conversations/[conversationId]/route.js +1 -1
  254. package/.next/server/app/v1/chat/conversations/[conversationId]/route.js.nft.json +1 -1
  255. package/.next/server/app/v1/chat/conversations/[conversationId]/route_client-reference-manifest.js +1 -1
  256. package/.next/server/app/v1/chat/conversations/route.js +1 -1
  257. package/.next/server/app/v1/chat/conversations/route.js.nft.json +1 -1
  258. package/.next/server/app/v1/chat/conversations/route_client-reference-manifest.js +1 -1
  259. package/.next/server/app/v1/chat/events/route.js +1 -1
  260. package/.next/server/app/v1/chat/events/route.js.nft.json +1 -1
  261. package/.next/server/app/v1/chat/events/route_client-reference-manifest.js +1 -1
  262. package/.next/server/app/v1/models/route.js +1 -1
  263. package/.next/server/app/v1/models/route.js.nft.json +1 -1
  264. package/.next/server/app/v1/models/route_client-reference-manifest.js +1 -1
  265. package/.next/server/app/waves/page_client-reference-manifest.js +1 -1
  266. package/.next/server/app/waves.html +1 -1
  267. package/.next/server/app/waves.rsc +2 -2
  268. package/.next/server/app-paths-manifest.json +20 -19
  269. package/.next/server/chunks/1114.js +1 -1
  270. package/.next/server/chunks/1226.js +1 -1
  271. package/.next/server/chunks/1227.js +1 -1
  272. package/.next/server/chunks/166.js +5 -5
  273. package/.next/server/chunks/1664.js +1 -1
  274. package/.next/server/chunks/1805.js +1 -1
  275. package/.next/server/chunks/227.js +1 -1
  276. package/.next/server/chunks/2273.js +2 -2
  277. package/.next/server/chunks/2372.js +1 -1
  278. package/.next/server/chunks/2859.js +1 -1
  279. package/.next/server/chunks/3717.js +1 -0
  280. package/.next/server/chunks/3935.js +4 -0
  281. package/.next/server/chunks/4265.js +1 -1
  282. package/.next/server/chunks/4466.js +1 -1
  283. package/.next/server/chunks/4551.js +1 -1
  284. package/.next/server/chunks/4771.js +2 -2
  285. package/.next/server/chunks/4822.js +1 -1
  286. package/.next/server/chunks/5096.js +1 -1
  287. package/.next/server/chunks/519.js +2 -0
  288. package/.next/server/chunks/5285.js +1 -0
  289. package/.next/server/chunks/5309.js +78 -0
  290. package/.next/server/chunks/544.js +16 -16
  291. package/.next/server/chunks/5463.js +1 -1
  292. package/.next/server/chunks/5544.js +4 -4
  293. package/.next/server/chunks/5703.js +2 -2
  294. package/.next/server/chunks/{5708.js → 6041.js} +1 -1
  295. package/.next/server/chunks/6226.js +1 -1
  296. package/.next/server/chunks/6747.js +72 -43
  297. package/.next/server/chunks/701.js +1 -1
  298. package/.next/server/chunks/7069.js +4 -4
  299. package/.next/server/chunks/7506.js +1 -1
  300. package/.next/server/chunks/7628.js +1 -1
  301. package/.next/server/chunks/7630.js +11 -0
  302. package/.next/server/chunks/7891.js +1 -1
  303. package/.next/server/chunks/7993.js +1 -1
  304. package/.next/server/chunks/8284.js +42 -0
  305. package/.next/server/chunks/8387.js +1 -1
  306. package/.next/server/chunks/8645.js +1 -1
  307. package/.next/server/chunks/8739.js +1 -1
  308. package/.next/server/chunks/9085.js +1 -1
  309. package/.next/server/chunks/9235.js +26 -5
  310. package/.next/server/chunks/9285.js +1 -1
  311. package/.next/server/functions-config-manifest.json +1 -1
  312. package/.next/server/instrumentation.js.nft.json +1 -1
  313. package/.next/server/middleware-build-manifest.js +1 -1
  314. package/.next/server/middleware-manifest.json +1 -1
  315. package/.next/server/middleware-react-loadable-manifest.js +1 -1
  316. package/.next/server/pages/404.html +1 -1
  317. package/.next/server/pages/500.html +1 -1
  318. package/.next/server/server-reference-manifest.js +1 -1
  319. package/.next/server/server-reference-manifest.json +1 -1
  320. package/.next/static/chunks/2005.4eea65c00d9a29cd.js +1 -0
  321. package/.next/static/chunks/3429-34fb1a84aed96703.js +1 -0
  322. package/.next/static/chunks/{2005-f9d38c39f10c321f.js → 4386-e9621d3c94969a68.js} +1 -1
  323. package/.next/static/chunks/4919-6c8a48e3cc642349.js +1 -0
  324. package/.next/static/chunks/7561-2b366ddcbc3cc0ec.js +1 -0
  325. package/.next/static/chunks/8404-5aa8ea49197b98b8.js +1 -0
  326. package/.next/static/chunks/{8650-41c2afc0eba37fb8.js → 8650-aa22dbf7b37348f0.js} +1 -1
  327. package/.next/static/chunks/9611-9867e6e8e65172ec.js +1 -0
  328. package/.next/static/chunks/app/api/approvals/[id]/{route-9ea2990be4b67136.js → route-b9c783850b4c2acf.js} +1 -1
  329. package/.next/static/chunks/app/api/approvals/{route-9ea2990be4b67136.js → route-b9c783850b4c2acf.js} +1 -1
  330. package/.next/static/chunks/app/api/backup/{route-9ea2990be4b67136.js → route-b9c783850b4c2acf.js} +1 -1
  331. package/.next/static/chunks/app/api/browse/{route-9ea2990be4b67136.js → route-b9c783850b4c2acf.js} +1 -1
  332. package/.next/static/chunks/app/api/bugs/enhance/route-b9c783850b4c2acf.js +1 -0
  333. package/.next/static/chunks/app/api/cwd/route-b9c783850b4c2acf.js +1 -0
  334. package/.next/static/chunks/app/api/encryption/secure/route-b9c783850b4c2acf.js +1 -0
  335. package/.next/static/chunks/app/api/env/route-b9c783850b4c2acf.js +1 -0
  336. package/.next/static/chunks/app/api/flow/[id]/route-b9c783850b4c2acf.js +1 -0
  337. package/.next/static/chunks/app/api/flow/[id]/versions/[versionId]/route-b9c783850b4c2acf.js +1 -0
  338. package/.next/static/chunks/app/api/flow/[id]/versions/route-b9c783850b4c2acf.js +1 -0
  339. package/.next/static/chunks/app/api/flow/compile/route-b9c783850b4c2acf.js +1 -0
  340. package/.next/static/chunks/app/api/flow/generate/route-b9c783850b4c2acf.js +1 -0
  341. package/.next/static/chunks/app/api/flow/generator/route-b9c783850b4c2acf.js +1 -0
  342. package/.next/static/chunks/app/api/flow/improve/route-b9c783850b4c2acf.js +1 -0
  343. package/.next/static/chunks/app/api/flow/prompt-renderer/route-b9c783850b4c2acf.js +1 -0
  344. package/.next/static/chunks/app/api/flow/quick-chat/route-b9c783850b4c2acf.js +1 -0
  345. package/.next/static/chunks/app/api/flow/repair/route-b9c783850b4c2acf.js +1 -0
  346. package/.next/static/chunks/app/api/flow/route-b9c783850b4c2acf.js +1 -0
  347. package/.next/static/chunks/app/api/git/route-b9c783850b4c2acf.js +1 -0
  348. package/.next/static/chunks/app/api/init/route-b9c783850b4c2acf.js +1 -0
  349. package/.next/static/chunks/app/api/local-models/capability/route-b9c783850b4c2acf.js +1 -0
  350. package/.next/static/chunks/app/api/local-models/pull/route-b9c783850b4c2acf.js +1 -0
  351. package/.next/static/chunks/app/api/local-models/suggest/route-b9c783850b4c2acf.js +1 -0
  352. package/.next/static/chunks/app/api/mcp/app-sandbox/route-b9c783850b4c2acf.js +1 -0
  353. package/.next/static/chunks/app/api/mcp/cancel/route-b9c783850b4c2acf.js +1 -0
  354. package/.next/static/chunks/app/api/mcp/oauth-capability/route-b9c783850b4c2acf.js +1 -0
  355. package/.next/static/chunks/app/api/mcp/servers/[name]/prompts/get/route-b9c783850b4c2acf.js +1 -0
  356. package/.next/static/chunks/app/api/mcp/servers/[name]/prompts/route-b9c783850b4c2acf.js +1 -0
  357. package/.next/static/chunks/app/api/mcp/servers/[name]/resources/read/route-b9c783850b4c2acf.js +1 -0
  358. package/.next/static/chunks/app/api/mcp/servers/[name]/resources/route-b9c783850b4c2acf.js +1 -0
  359. package/.next/static/chunks/app/api/mcp/servers/[name]/route-b9c783850b4c2acf.js +1 -0
  360. package/.next/static/chunks/app/api/mcp/servers/[name]/status/route-b9c783850b4c2acf.js +1 -0
  361. package/.next/static/chunks/app/api/mcp/servers/[name]/tools/[toolName]/route-b9c783850b4c2acf.js +1 -0
  362. package/.next/static/chunks/app/api/mcp/servers/[name]/tools/route-b9c783850b4c2acf.js +1 -0
  363. package/.next/static/chunks/app/api/mcp/servers/route-b9c783850b4c2acf.js +1 -0
  364. package/.next/static/chunks/app/api/mcp/test-connection/route-b9c783850b4c2acf.js +1 -0
  365. package/.next/static/chunks/app/api/mcp/test-connection/stream/route-b9c783850b4c2acf.js +1 -0
  366. package/.next/static/chunks/app/api/mcp-registry/route-b9c783850b4c2acf.js +1 -0
  367. package/.next/static/chunks/app/api/mcp-registry/spotlight/route-b9c783850b4c2acf.js +1 -0
  368. package/.next/static/chunks/app/api/model/[id]/route-b9c783850b4c2acf.js +1 -0
  369. package/.next/static/chunks/app/api/model/provider/route-b9c783850b4c2acf.js +1 -0
  370. package/.next/static/chunks/app/api/model/route-b9c783850b4c2acf.js +1 -0
  371. package/.next/static/chunks/app/api/model/test/route-b9c783850b4c2acf.js +1 -0
  372. package/.next/static/chunks/app/api/oauth/callback/route-b9c783850b4c2acf.js +1 -0
  373. package/.next/static/chunks/app/api/oauth/initiate/route-b9c783850b4c2acf.js +1 -0
  374. package/.next/static/chunks/app/api/oauth/reset/route-b9c783850b4c2acf.js +1 -0
  375. package/.next/static/chunks/app/api/packages/build/route-b9c783850b4c2acf.js +1 -0
  376. package/.next/static/chunks/app/api/packages/derive-secrets/route-b9c783850b4c2acf.js +1 -0
  377. package/.next/static/chunks/app/api/packages/install/route-b9c783850b4c2acf.js +1 -0
  378. package/.next/static/chunks/app/api/packages/install/status/route-b9c783850b4c2acf.js +1 -0
  379. package/.next/static/chunks/app/api/packages/installed/route-b9c783850b4c2acf.js +1 -0
  380. package/.next/static/chunks/app/api/packages/resolve/route-b9c783850b4c2acf.js +1 -0
  381. package/.next/static/chunks/app/api/packages/scan-targets/route-b9c783850b4c2acf.js +1 -0
  382. package/.next/static/chunks/app/api/packages/search/route-b9c783850b4c2acf.js +1 -0
  383. package/.next/static/chunks/app/api/packages/uninstall/route-b9c783850b4c2acf.js +1 -0
  384. package/.next/static/chunks/app/api/planned-executions/[id]/route-b9c783850b4c2acf.js +1 -0
  385. package/.next/static/chunks/app/api/planned-executions/[id]/run/route-b9c783850b4c2acf.js +1 -0
  386. package/.next/static/chunks/app/api/planned-executions/[id]/runs/route-b9c783850b4c2acf.js +1 -0
  387. package/.next/static/chunks/app/api/planned-executions/preview-schedule/route-b9c783850b4c2acf.js +1 -0
  388. package/.next/static/chunks/app/api/planned-executions/reconcile/route-b9c783850b4c2acf.js +1 -0
  389. package/.next/static/chunks/app/api/planned-executions/route-b9c783850b4c2acf.js +1 -0
  390. package/.next/static/chunks/app/api/registry/auth/resend/route-b9c783850b4c2acf.js +1 -0
  391. package/.next/static/chunks/app/api/registry/auth/reset/route-b9c783850b4c2acf.js +1 -0
  392. package/.next/static/chunks/app/api/registry/auth/route-b9c783850b4c2acf.js +1 -0
  393. package/.next/static/chunks/app/api/registry/feedback/route-b9c783850b4c2acf.js +1 -0
  394. package/.next/static/chunks/app/api/registry/oauth/callback/route-b9c783850b4c2acf.js +1 -0
  395. package/.next/static/chunks/app/api/registry/oauth/initiate/route-b9c783850b4c2acf.js +1 -0
  396. package/.next/static/chunks/app/api/registry/packages/route-b9c783850b4c2acf.js +1 -0
  397. package/.next/static/chunks/app/api/registry/publish/route-b9c783850b4c2acf.js +1 -0
  398. package/.next/static/chunks/app/api/registry/settings/route-b9c783850b4c2acf.js +1 -0
  399. package/.next/static/chunks/app/api/restore/route-b9c783850b4c2acf.js +1 -0
  400. package/.next/static/chunks/app/api/runs/active/route-b9c783850b4c2acf.js +1 -0
  401. package/.next/static/chunks/app/api/storage/route-b9c783850b4c2acf.js +1 -0
  402. package/.next/static/chunks/app/api/telemetry/daily-active/route-b9c783850b4c2acf.js +1 -0
  403. package/.next/static/chunks/app/api/update/route-b9c783850b4c2acf.js +1 -0
  404. package/.next/static/chunks/app/api/waves/route-b9c783850b4c2acf.js +1 -0
  405. package/.next/static/chunks/app/api/webhooks/[id]/route-b9c783850b4c2acf.js +1 -0
  406. package/.next/static/chunks/app/chat/{page-1d100e5d974c919e.js → page-e37bbc561f40ce60.js} +1 -1
  407. package/.next/static/chunks/app/executions/page-8296fd69c439ccee.js +1 -0
  408. package/.next/static/chunks/app/flows/page-e52c8943555e38dd.js +1 -0
  409. package/.next/static/chunks/app/{layout-38b88f3b057f4852.js → layout-abed1f211e03152f.js} +1 -1
  410. package/.next/static/chunks/app/mcp/page-1648e6fde0c41461.js +1 -0
  411. package/.next/static/chunks/app/mcp-flows/route-b9c783850b4c2acf.js +1 -0
  412. package/.next/static/chunks/app/mcp-proxy/[server]/route-b9c783850b4c2acf.js +1 -0
  413. package/.next/static/chunks/app/models/page-595597042e227970.js +1 -0
  414. package/.next/static/chunks/app/packages/page-f1a22789a6c0e0b6.js +1 -0
  415. package/.next/static/chunks/app/page-2f9da78a4891731a.js +1 -0
  416. package/.next/static/chunks/app/settings/page-f35e939032b0277d.js +1 -0
  417. package/.next/static/chunks/app/v1/chat/completions/route-b9c783850b4c2acf.js +1 -0
  418. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/breakpoints/route-b9c783850b4c2acf.js +1 -0
  419. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/cancel/route-b9c783850b4c2acf.js +1 -0
  420. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/debug/continue/route-b9c783850b4c2acf.js +1 -0
  421. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/debug/step/route-b9c783850b4c2acf.js +1 -0
  422. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/edit-state/route-b9c783850b4c2acf.js +1 -0
  423. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/events/route-b9c783850b4c2acf.js +1 -0
  424. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/inject/route-b9c783850b4c2acf.js +1 -0
  425. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/resources/[resourceId]/content/route-b9c783850b4c2acf.js +1 -0
  426. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/resources/route-b9c783850b4c2acf.js +1 -0
  427. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/respond/route-b9c783850b4c2acf.js +1 -0
  428. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/route-b9c783850b4c2acf.js +1 -0
  429. package/.next/static/chunks/app/v1/chat/conversations/route-b9c783850b4c2acf.js +1 -0
  430. package/.next/static/chunks/app/v1/chat/events/route-b9c783850b4c2acf.js +1 -0
  431. package/.next/static/chunks/app/v1/models/route-b9c783850b4c2acf.js +1 -0
  432. package/.next/static/chunks/{webpack-dccb4f149ebdedcc.js → webpack-9d09d53b271f49e2.js} +1 -1
  433. package/.next/trace +10 -10
  434. package/.next/types/app/v1/chat/conversations/[conversationId]/resources/[resourceId]/content/route.ts +347 -0
  435. package/.next/types/routes.d.ts +2 -1
  436. package/.next/types/validator.ts +9 -0
  437. package/README.md +47 -47
  438. package/package.json +5 -5
  439. package/.next/server/chunks/2985.js +0 -1
  440. package/.next/server/chunks/4308.js +0 -4
  441. package/.next/server/chunks/4366.js +0 -2
  442. package/.next/server/chunks/5040.js +0 -48
  443. package/.next/server/chunks/8187.js +0 -78
  444. package/.next/server/chunks/8851.js +0 -1
  445. package/.next/static/chunks/289-98f50bfcf833d661.js +0 -1
  446. package/.next/static/chunks/3089.df88f3b16898aad7.js +0 -1
  447. package/.next/static/chunks/6733-c9029143901e62e9.js +0 -1
  448. package/.next/static/chunks/8041-05830e887c133085.js +0 -1
  449. package/.next/static/chunks/8404-bfa9203e4296f3fb.js +0 -1
  450. package/.next/static/chunks/95-b9691d3cb15556dc.js +0 -1
  451. package/.next/static/chunks/app/api/bugs/enhance/route-9ea2990be4b67136.js +0 -1
  452. package/.next/static/chunks/app/api/cwd/route-9ea2990be4b67136.js +0 -1
  453. package/.next/static/chunks/app/api/encryption/secure/route-9ea2990be4b67136.js +0 -1
  454. package/.next/static/chunks/app/api/env/route-9ea2990be4b67136.js +0 -1
  455. package/.next/static/chunks/app/api/flow/[id]/route-9ea2990be4b67136.js +0 -1
  456. package/.next/static/chunks/app/api/flow/[id]/versions/[versionId]/route-9ea2990be4b67136.js +0 -1
  457. package/.next/static/chunks/app/api/flow/[id]/versions/route-9ea2990be4b67136.js +0 -1
  458. package/.next/static/chunks/app/api/flow/compile/route-9ea2990be4b67136.js +0 -1
  459. package/.next/static/chunks/app/api/flow/generate/route-9ea2990be4b67136.js +0 -1
  460. package/.next/static/chunks/app/api/flow/generator/route-9ea2990be4b67136.js +0 -1
  461. package/.next/static/chunks/app/api/flow/improve/route-9ea2990be4b67136.js +0 -1
  462. package/.next/static/chunks/app/api/flow/prompt-renderer/route-9ea2990be4b67136.js +0 -1
  463. package/.next/static/chunks/app/api/flow/quick-chat/route-9ea2990be4b67136.js +0 -1
  464. package/.next/static/chunks/app/api/flow/repair/route-9ea2990be4b67136.js +0 -1
  465. package/.next/static/chunks/app/api/flow/route-9ea2990be4b67136.js +0 -1
  466. package/.next/static/chunks/app/api/git/route-9ea2990be4b67136.js +0 -1
  467. package/.next/static/chunks/app/api/init/route-9ea2990be4b67136.js +0 -1
  468. package/.next/static/chunks/app/api/local-models/capability/route-9ea2990be4b67136.js +0 -1
  469. package/.next/static/chunks/app/api/local-models/pull/route-9ea2990be4b67136.js +0 -1
  470. package/.next/static/chunks/app/api/local-models/suggest/route-9ea2990be4b67136.js +0 -1
  471. package/.next/static/chunks/app/api/mcp/app-sandbox/route-9ea2990be4b67136.js +0 -1
  472. package/.next/static/chunks/app/api/mcp/cancel/route-9ea2990be4b67136.js +0 -1
  473. package/.next/static/chunks/app/api/mcp/oauth-capability/route-9ea2990be4b67136.js +0 -1
  474. package/.next/static/chunks/app/api/mcp/servers/[name]/prompts/get/route-9ea2990be4b67136.js +0 -1
  475. package/.next/static/chunks/app/api/mcp/servers/[name]/prompts/route-9ea2990be4b67136.js +0 -1
  476. package/.next/static/chunks/app/api/mcp/servers/[name]/resources/read/route-9ea2990be4b67136.js +0 -1
  477. package/.next/static/chunks/app/api/mcp/servers/[name]/resources/route-9ea2990be4b67136.js +0 -1
  478. package/.next/static/chunks/app/api/mcp/servers/[name]/route-9ea2990be4b67136.js +0 -1
  479. package/.next/static/chunks/app/api/mcp/servers/[name]/status/route-9ea2990be4b67136.js +0 -1
  480. package/.next/static/chunks/app/api/mcp/servers/[name]/tools/[toolName]/route-9ea2990be4b67136.js +0 -1
  481. package/.next/static/chunks/app/api/mcp/servers/[name]/tools/route-9ea2990be4b67136.js +0 -1
  482. package/.next/static/chunks/app/api/mcp/servers/route-9ea2990be4b67136.js +0 -1
  483. package/.next/static/chunks/app/api/mcp/test-connection/route-9ea2990be4b67136.js +0 -1
  484. package/.next/static/chunks/app/api/mcp/test-connection/stream/route-9ea2990be4b67136.js +0 -1
  485. package/.next/static/chunks/app/api/mcp-registry/route-9ea2990be4b67136.js +0 -1
  486. package/.next/static/chunks/app/api/mcp-registry/spotlight/route-9ea2990be4b67136.js +0 -1
  487. package/.next/static/chunks/app/api/model/[id]/route-9ea2990be4b67136.js +0 -1
  488. package/.next/static/chunks/app/api/model/provider/route-9ea2990be4b67136.js +0 -1
  489. package/.next/static/chunks/app/api/model/route-9ea2990be4b67136.js +0 -1
  490. package/.next/static/chunks/app/api/model/test/route-9ea2990be4b67136.js +0 -1
  491. package/.next/static/chunks/app/api/oauth/callback/route-9ea2990be4b67136.js +0 -1
  492. package/.next/static/chunks/app/api/oauth/initiate/route-9ea2990be4b67136.js +0 -1
  493. package/.next/static/chunks/app/api/oauth/reset/route-9ea2990be4b67136.js +0 -1
  494. package/.next/static/chunks/app/api/packages/build/route-9ea2990be4b67136.js +0 -1
  495. package/.next/static/chunks/app/api/packages/derive-secrets/route-9ea2990be4b67136.js +0 -1
  496. package/.next/static/chunks/app/api/packages/install/route-9ea2990be4b67136.js +0 -1
  497. package/.next/static/chunks/app/api/packages/install/status/route-9ea2990be4b67136.js +0 -1
  498. package/.next/static/chunks/app/api/packages/installed/route-9ea2990be4b67136.js +0 -1
  499. package/.next/static/chunks/app/api/packages/resolve/route-9ea2990be4b67136.js +0 -1
  500. package/.next/static/chunks/app/api/packages/scan-targets/route-9ea2990be4b67136.js +0 -1
  501. package/.next/static/chunks/app/api/packages/search/route-9ea2990be4b67136.js +0 -1
  502. package/.next/static/chunks/app/api/packages/uninstall/route-9ea2990be4b67136.js +0 -1
  503. package/.next/static/chunks/app/api/planned-executions/[id]/route-9ea2990be4b67136.js +0 -1
  504. package/.next/static/chunks/app/api/planned-executions/[id]/run/route-9ea2990be4b67136.js +0 -1
  505. package/.next/static/chunks/app/api/planned-executions/[id]/runs/route-9ea2990be4b67136.js +0 -1
  506. package/.next/static/chunks/app/api/planned-executions/preview-schedule/route-9ea2990be4b67136.js +0 -1
  507. package/.next/static/chunks/app/api/planned-executions/reconcile/route-9ea2990be4b67136.js +0 -1
  508. package/.next/static/chunks/app/api/planned-executions/route-9ea2990be4b67136.js +0 -1
  509. package/.next/static/chunks/app/api/registry/auth/resend/route-9ea2990be4b67136.js +0 -1
  510. package/.next/static/chunks/app/api/registry/auth/reset/route-9ea2990be4b67136.js +0 -1
  511. package/.next/static/chunks/app/api/registry/auth/route-9ea2990be4b67136.js +0 -1
  512. package/.next/static/chunks/app/api/registry/feedback/route-9ea2990be4b67136.js +0 -1
  513. package/.next/static/chunks/app/api/registry/oauth/callback/route-9ea2990be4b67136.js +0 -1
  514. package/.next/static/chunks/app/api/registry/oauth/initiate/route-9ea2990be4b67136.js +0 -1
  515. package/.next/static/chunks/app/api/registry/packages/route-9ea2990be4b67136.js +0 -1
  516. package/.next/static/chunks/app/api/registry/publish/route-9ea2990be4b67136.js +0 -1
  517. package/.next/static/chunks/app/api/registry/settings/route-9ea2990be4b67136.js +0 -1
  518. package/.next/static/chunks/app/api/restore/route-9ea2990be4b67136.js +0 -1
  519. package/.next/static/chunks/app/api/runs/active/route-9ea2990be4b67136.js +0 -1
  520. package/.next/static/chunks/app/api/storage/route-9ea2990be4b67136.js +0 -1
  521. package/.next/static/chunks/app/api/telemetry/daily-active/route-9ea2990be4b67136.js +0 -1
  522. package/.next/static/chunks/app/api/update/route-9ea2990be4b67136.js +0 -1
  523. package/.next/static/chunks/app/api/waves/route-9ea2990be4b67136.js +0 -1
  524. package/.next/static/chunks/app/api/webhooks/[id]/route-9ea2990be4b67136.js +0 -1
  525. package/.next/static/chunks/app/executions/page-10ec7d58c7fbdd6f.js +0 -1
  526. package/.next/static/chunks/app/flows/page-9a78a2915268b2f8.js +0 -1
  527. package/.next/static/chunks/app/mcp/page-56b43b2f8752e9a5.js +0 -1
  528. package/.next/static/chunks/app/mcp-flows/route-9ea2990be4b67136.js +0 -1
  529. package/.next/static/chunks/app/mcp-proxy/[server]/route-9ea2990be4b67136.js +0 -1
  530. package/.next/static/chunks/app/models/page-808c0568ebc5e2c7.js +0 -1
  531. package/.next/static/chunks/app/packages/page-af6ec89522915206.js +0 -1
  532. package/.next/static/chunks/app/page-30bf4293efa47a47.js +0 -1
  533. package/.next/static/chunks/app/settings/page-59ae1b658838f0bc.js +0 -1
  534. package/.next/static/chunks/app/v1/chat/completions/route-9ea2990be4b67136.js +0 -1
  535. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/breakpoints/route-9ea2990be4b67136.js +0 -1
  536. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/cancel/route-9ea2990be4b67136.js +0 -1
  537. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/debug/continue/route-9ea2990be4b67136.js +0 -1
  538. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/debug/step/route-9ea2990be4b67136.js +0 -1
  539. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/edit-state/route-9ea2990be4b67136.js +0 -1
  540. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/events/route-9ea2990be4b67136.js +0 -1
  541. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/inject/route-9ea2990be4b67136.js +0 -1
  542. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/resources/route-9ea2990be4b67136.js +0 -1
  543. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/respond/route-9ea2990be4b67136.js +0 -1
  544. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/route-9ea2990be4b67136.js +0 -1
  545. package/.next/static/chunks/app/v1/chat/conversations/route-9ea2990be4b67136.js +0 -1
  546. package/.next/static/chunks/app/v1/chat/events/route-9ea2990be4b67136.js +0 -1
  547. package/.next/static/chunks/app/v1/models/route-9ea2990be4b67136.js +0 -1
  548. /package/.next/static/{jfb1GsjSGMjBmwfa3kM26 → hbjnLG9RCje2AApS9TzP8}/_buildManifest.js +0 -0
  549. /package/.next/static/{jfb1GsjSGMjBmwfa3kM26 → hbjnLG9RCje2AApS9TzP8}/_ssgManifest.js +0 -0
@@ -0,0 +1,4 @@
1
+ "use strict";exports.id=3935,exports.ids=[3935],exports.modules={4580:(a,b,c)=>{async function d(a,b){throw Error("Web Speech API is only available in browser environments")}function e(){return{supported:!1,message:"Not in browser environment"}}c.d(b,{G:()=>e,S:()=>d}),(0,c(19815).h)("frontend/services/transcription/webSpeech")},6135:(a,b,c)=>{c.d(b,{A:()=>al});var d=c(21124),e=c(38301),f=c.n(e),g=c(79515),h=c(81637),i=c(68730),j=c(8521),k=c(43312),l=c(41893),m=c(99561),n=c(95587),o=c(67191),p=c(44079),q=c(54573),r=c(61628),s=c(19787),t=c(95803),u=c(77028),v=c(82605),w=c(50062),x=c(7675),y=c(94367),z=c(38233),A=c(37674),B=c(29231),C=c(86374),D=c(74419),E=c(7118),F=c(50553),G=c(84233),H=c(45798),I=c(18954),J=c(96955),K=c(16348),L=c(13665),M=c(9258),N=c(73245),O=c(17332),P=c(84049),Q=c(56685),R=c(82543),S=c(22797),T=c(12033),U=c(24276),V=c(885),W=c(91353),X=c(82571),Y=c(98502);function Z(a){return!!a&&(a.startsWith(Y.n9)||"handoff"===a)}var $=c(34641);function _(a){return a.url?a.url:a.data?`data:${a.mimeType??"application/octet-stream"};base64,${a.data}`:void 0}let aa=(0,c(19815).h)("frontend/components/Chat/ChatMessages");function ab(a){return"assistant"===a.role&&"tool_calls"in a&&Array.isArray(a.tool_calls)}function ac(a){if("tool"!==a.role||"string"!=typeof a.content)return!1;try{return JSON.parse(a.content)?.handoff===!0}catch{return!1}}let ad={p:a=>(0,d.jsx)(g.default,{variant:"body1",sx:{mb:.5,whiteSpace:"pre-line"},children:a.children}),h1:a=>(0,d.jsx)(g.default,{variant:"h5",sx:{mt:2,mb:.5},children:a.children}),h2:a=>(0,d.jsx)(g.default,{variant:"h6",sx:{mt:2,mb:.5},children:a.children}),h3:a=>(0,d.jsx)(g.default,{variant:"subtitle1",sx:{mt:1.5,mb:.5},children:a.children}),h4:a=>(0,d.jsx)(g.default,{variant:"subtitle2",sx:{mt:1.5,mb:.5},children:a.children}),h5:a=>(0,d.jsx)(g.default,{variant:"body1",sx:{mt:1,mb:.5,fontWeight:"bold"},children:a.children}),h6:a=>(0,d.jsx)(g.default,{variant:"body2",sx:{mt:1,mb:.5,fontWeight:"bold"},children:a.children}),ul:a=>(0,d.jsx)(h.default,{component:"ul",sx:{pl:2,mb:1},children:a.children}),ol:a=>(0,d.jsx)(h.default,{component:"ol",sx:{pl:2,mb:1},children:a.children}),li:a=>(0,d.jsx)(h.default,{component:"li",sx:{mb:.5,whiteSpace:"pre-line"},children:a.children}),a:a=>(0,d.jsx)(g.default,{component:"a",sx:{color:"primary.main"},href:a.href,children:a.children}),blockquote:a=>(0,d.jsx)(h.default,{component:"blockquote",sx:{borderLeft:"4px solid",borderColor:"divider",pl:2,py:.5,my:1,bgcolor:"action.hover",borderRadius:"4px"},children:a.children}),code:({node:a,className:b,children:c,...e})=>/language-(\w+)/.exec(b||"")||b?(0,d.jsx)(h.default,{component:"pre",sx:{bgcolor:"action.hover",p:1.5,borderRadius:"4px",overflowX:"auto",fontFamily:"monospace",fontSize:"0.875rem",my:1,whiteSpace:"pre-wrap",wordBreak:"break-word"},children:c}):(0,d.jsx)(g.default,{component:"code",sx:{bgcolor:"action.hover",px:.5,py:.25,borderRadius:"4px",fontFamily:"monospace",wordBreak:"break-all"},children:c})},ae=({media:a})=>(0,d.jsx)(h.default,{sx:{display:"flex",flexDirection:"column",gap:1,mt:1},children:a.map((a,b)=>{let c=_(a),e=a.resourceUri??a.url??`${a.type}-${b}`;return c?"image"===a.type?(0,d.jsx)(h.default,{component:"img",src:c,alt:a.name??`Generated image ${b+1}`,sx:{maxWidth:"100%",height:"auto",borderRadius:1}},e):"audio"===a.type?(0,d.jsxs)(h.default,{children:[(0,d.jsx)(h.default,{component:"audio",controls:!0,src:c,sx:{width:"100%"}}),a.transcript&&(0,d.jsx)(g.default,{variant:"caption",color:"text.secondary",sx:{display:"block",mt:.5},children:a.transcript})]},e):"video"===a.type?(0,d.jsx)(h.default,{component:"video",controls:!0,src:c,sx:{maxWidth:"100%",maxHeight:560,borderRadius:1}},e):(0,d.jsx)(i.A,{component:"a",href:c,download:a.name||!0,target:"_blank",rel:"noopener noreferrer",variant:"outlined",size:"small",startIcon:(0,d.jsx)(M.A,{}),sx:{alignSelf:"flex-start"},children:a.name??"Download generated file"},e):null})}),af=({content:a,showRaw:b})=>b?(0,d.jsx)(h.default,{component:"pre",sx:{whiteSpace:"pre-wrap",wordBreak:"break-all",fontSize:"0.8rem",p:1,borderRadius:1,border:1,borderColor:a=>a.palette.divider,bgcolor:"action.hover",color:a=>a.palette.text.primary,overflow:"auto",maxHeight:"300px"},children:"string"==typeof a?a:"[Invalid tool content]"}):"string"!=typeof a?(0,d.jsx)(g.default,{variant:"body2",fontStyle:"italic",color:"text.secondary",children:"[Invalid tool content]"}):(0,d.jsx)(h.default,{sx:{width:"100%",minWidth:0},children:(()=>{try{let b=JSON.parse(a);if(b&&Array.isArray(b.content))return(0,d.jsx)(h.default,{sx:{display:"flex",flexDirection:"column",gap:1},children:b.content.map((a,b)=>"text"===a.type?(0,d.jsx)(H.oz,{remarkPlugins:[I.A],children:a.text},b):"image"===a.type&&a.data&&a.mimeType?(0,d.jsx)("img",{src:`data:${a.mimeType};base64,${a.data}`,alt:`Tool Result Image ${b+1}`,style:{maxWidth:"100%",height:"auto",borderRadius:"4px",marginTop:"8px"}},b):"audio"===a.type&&a.data&&a.mimeType?(0,d.jsx)("audio",{controls:!0,src:`data:${a.mimeType};base64,${a.data}`,style:{width:"100%",marginTop:"8px"},children:"Your browser does not support the audio element."},b):"video"===a.type&&a.data&&a.mimeType?(0,d.jsx)("video",{controls:!0,src:`data:${a.mimeType};base64,${a.data}`,style:{maxWidth:"100%",maxHeight:"560px",marginTop:"8px"},children:"Your browser does not support the video element."},b):(0,d.jsx)(h.default,{component:"pre",sx:{whiteSpace:"pre-wrap",wordBreak:"break-all",fontSize:"0.8rem",p:1,borderRadius:1,border:1,borderColor:a=>a.palette.divider,bgcolor:"action.hover",color:a=>a.palette.text.primary,overflow:"auto",mt:1},children:`Unsupported content type: ${a.type}
2
+ ${JSON.stringify(a,null,2)}`},b))});return(0,d.jsx)(H.oz,{remarkPlugins:[I.A],children:`\`\`\`json
3
+ ${JSON.stringify(b,null,2)}
4
+ \`\`\``})}catch(b){return(0,d.jsx)(H.oz,{remarkPlugins:[I.A],children:a})}})()}),ag=({pairs:a,messageId:b,onAppMessage:c,onUpdateModelContext:i,onRegisterAppTeardown:p,onOpenInCanvas:q})=>{let[r,s]=(0,e.useState)(null),[t,u]=(0,e.useState)({}),v=(a,c)=>a.toolCall.id||`tc-${b}-${c}`;return(0,d.jsxs)(h.default,{sx:{mt:1,pt:1,borderTop:"1px solid",borderColor:"divider"},children:[(0,d.jsxs)(h.default,{sx:{display:"flex",alignItems:"center",color:"primary.main",mb:1},children:[(0,d.jsx)(P.A,{fontSize:"small",sx:{mr:1}}),(0,d.jsx)(g.default,{variant:"body2",children:1===a.length?"The assistant used a tool":`The assistant used ${a.length} tools`})]}),(0,d.jsx)(h.default,{sx:{display:"flex",flexWrap:"wrap",alignItems:"center",gap:.5},children:a.map((a,b)=>{let c=v(a,b),e=function(a){if(!a)return"pending";if("string"==typeof a.content)try{let b=JSON.parse(a.content);if(b&&(!0===b.isError||null!=b.error))return"error"}catch{}return"done"}(a.result),g=r===c;return(0,d.jsxs)(f().Fragment,{children:[b>0&&(0,d.jsx)(h.default,{sx:{width:14,height:"2px",bgcolor:"divider",flexShrink:0}}),(0,d.jsx)(k.A,{title:g?"Hide call & result":"Show call & result",children:(0,d.jsx)(l.A,{icon:function(a){return"pending"===a?(0,d.jsx)(j.default,{size:14,thickness:6}):"error"===a?(0,d.jsx)(S.A,{fontSize:"small"}):(0,d.jsx)(R.A,{fontSize:"small"})}(e),label:(0,X.yo)(a.toolCall.function.name),size:"small",clickable:!0,variant:g?"filled":"outlined",color:"error"===e?"error":"pending"===e?"default":"primary",onClick:()=>s(g?null:c),sx:{maxWidth:"100%"}})})]},c)})}),a.map((a,b)=>{let e=v(a,b),f=a.toolCall.function.arguments;try{f=JSON.stringify(JSON.parse(a.toolCall.function.arguments),null,2)}catch(a){}let k=!!t[e];return(0,d.jsx)(m.A,{in:r===e,children:(0,d.jsxs)(h.default,{sx:{mt:1,p:1,borderRadius:1,bgcolor:"rgba(0, 0, 0, 0.03)"},children:[(0,d.jsxs)(h.default,{sx:{display:"flex",alignItems:"center",mb:.5},children:[(0,d.jsx)(P.A,{fontSize:"small",sx:{mr:.5,color:"primary.main"}}),(0,d.jsx)(g.default,{variant:"caption",sx:{fontWeight:"bold"},children:"Parameters"}),(0,d.jsx)(l.A,{label:`ID: ${a.toolCall.id?a.toolCall.id.substring(0,8):"N/A"}...`,size:"small",color:"default",variant:"outlined",sx:{ml:1,height:20,fontSize:"0.7rem"}})]}),(0,d.jsx)(h.default,{component:"pre",sx:{bgcolor:"action.hover",p:1,borderRadius:"4px",overflowX:"auto",fontFamily:"monospace",fontSize:"0.75rem",my:.5,maxHeight:"150px",whiteSpace:"pre-wrap",wordBreak:"break-word"},children:f}),(0,d.jsxs)(h.default,{sx:{display:"flex",alignItems:"center",mt:1,mb:.5},children:[(0,d.jsx)(Q.A,{fontSize:"small",sx:{mr:.5,color:"text.secondary"}}),(0,d.jsx)(g.default,{variant:"caption",sx:{fontWeight:"bold"},children:"Result"}),a.result&&(0,d.jsx)(n.A,{control:(0,d.jsx)(o.A,{size:"small",checked:k,onChange:a=>u(b=>({...b,[e]:a.target.checked}))}),label:"Raw",sx:{ml:"auto",mr:0,"& .MuiTypography-root":{fontSize:"0.75rem"}}})]}),a.result?(0,d.jsx)(af,{content:a.result.content,showRaw:k}):(0,d.jsxs)(g.default,{variant:"body2",fontStyle:"italic",color:"text.secondary",sx:{display:"flex",alignItems:"center",gap:1},children:[(0,d.jsx)(j.default,{size:14,thickness:6})," Waiting for the tool to respond…"]}),a.result?.ui?.uri&&a.result.ui.serverName&&(0,d.jsx)($.Ay,{serverName:a.result.ui.serverName,uri:a.result.ui.uri,toolName:a.result.ui.toolName??a.toolCall.function.name,toolArgs:a.toolCall.function.arguments,toolResultContent:"string"==typeof a.result.content?a.result.content:void 0,toolCancelledReason:a.result.ui.cancelledReason,toolIsError:a.result.ui.isError,onAppMessage:c,onUpdateModelContext:i,onRegisterTeardown:p,teardownRegistrationKey:`${a.result.ui.serverName}::${a.result.ui.uri}::${e}`,onRequestDock:q?()=>q({serverName:a.result.ui.serverName,uri:a.result.ui.uri,toolName:a.result.ui.toolName??a.toolCall.function.name,toolArgs:a.toolCall.function.arguments,resultContent:"string"==typeof a.result.content?a.result.content:void 0,cancelledReason:a.result.ui.cancelledReason,isError:a.result.ui.isError}):void 0})]})},e)})]})},ah=f().memo(function({message:a,nodeLabel:b,availableNodes:c,showRaw:e,toolCallPairs:f,onAppMessage:i,onUpdateModelContext:j,onRegisterAppTeardown:m,onOpenInCanvas:u,hoistedHandoffs:v,isBeingEdited:w,onMenuOpen:x,onToggleRaw:y}){var z;let A,B=a.depth??0;return(0,d.jsxs)(h.default,{sx:{display:"flex",flexDirection:"column",alignItems:"user"===a.role?"flex-end":"flex-start",opacity:a.disabled?.5:1,...B>0&&{pl:3*B,borderLeft:"2px solid",borderColor:"divider",ml:1}},children:[(0,d.jsxs)(h.default,{sx:{display:"flex",alignItems:"center",mb:.5},children:[(0,d.jsxs)(g.default,{variant:"caption",color:"text.secondary",sx:{mr:1},children:["user"===a.role?"You":"assistant"===a.role?"Assistant":"tool"===a.role?"Tool":"System"," • ","number"!=typeof(z=a.timestamp)||isNaN(z)?(aa.warn("formatTime received invalid timestamp:",z),"Invalid Date"):new Date(z).toLocaleTimeString(void 0,{hour:"2-digit",minute:"2-digit"})]}),a.processNodeId&&(0,d.jsx)(k.A,{title:`${b?`${b} — `:""}Process Node ID: ${a.processNodeId}`,children:(0,d.jsx)(l.A,{label:`Node: ${b||`${a.processNodeId.substring(0,6)}...`}`,size:"small",color:"primary",variant:"outlined",sx:{height:20,fontSize:"0.7rem",mr:1}})}),B>0&&(0,d.jsx)(k.A,{title:`Nested subflow step (depth ${B})`,children:(0,d.jsx)(l.A,{label:"Subflow step",size:"small",color:"secondary",variant:"outlined",sx:{height:20,fontSize:"0.7rem",mr:1}})}),a.disabled&&(0,d.jsx)(l.A,{label:"Disabled",size:"small",color:"default",variant:"outlined",sx:{height:20,fontSize:"0.7rem"}}),a.usage&&(0,d.jsx)(k.A,{title:`${a.usage.promptTokens.toLocaleString()} prompt + ${a.usage.completionTokens.toLocaleString()} completion tokens (provider-reported)`,children:(0,d.jsx)(l.A,{label:`${(A=a.usage.totalTokens)>=1e3?`${(A/1e3).toFixed(A>=1e5?0:1)}k`:`${A}`} tok`,size:"small",color:"default",variant:"outlined",sx:{height:20,fontSize:"0.7rem",mr:1}})}),(0,d.jsx)(p.A,{size:"small",onClick:b=>x(b,a.id),sx:{ml:1},children:(0,d.jsx)(J.A,{fontSize:"small"})})]}),(0,d.jsxs)(q.A,{elevation:1,sx:{p:2,maxWidth:"75vw",borderRadius:2,bgcolor:"user"===a.role?"primary.light":"assistant"===a.role||"tool"===a.role?"background.paper":"info.light",color:"user"===a.role?"primary.contrastText":"assistant"===a.role||"tool"===a.role?"text.primary":"info.contrastText",position:"relative",borderLeft:"tool"===a.role?"4px solid":"none",borderColor:"tool"===a.role?"grey.400":"transparent",opacity:w?.55:1,outline:w?"2px dashed":"none",outlineColor:"warning.main",overflowWrap:"break-word",wordBreak:"break-word",overflow:"hidden"},children:[(0,d.jsxs)(d.Fragment,{children:["tool"!==a.role&&"string"==typeof a.content&&(0,d.jsx)(H.oz,{remarkPlugins:[I.A],components:ad,children:a.content}),"tool"!==a.role&&Array.isArray(a.content)&&(0,d.jsx)(h.default,{sx:{display:"flex",flexDirection:"column",gap:1},children:a.content.map((a,b)=>a?.type==="text"?(0,d.jsx)(H.oz,{remarkPlugins:[I.A],children:a.text},b):a?.type==="image_url"&&a.image_url?.url?(0,d.jsx)("img",{src:a.image_url.url,alt:`Image ${b+1}`,style:{maxWidth:"100%",height:"auto",borderRadius:"4px"}},b):null)}),"tool"!==a.role&&a.media&&a.media.length>0&&(0,d.jsx)(ae,{media:a.media.filter(b=>"image"!==b.type||!Array.isArray(a.content)||!a.content.some(a=>a?.type==="image_url"&&a.image_url?.url===_(b)))}),"tool"!==a.role&&"string"!=typeof a.content&&!Array.isArray(a.content)&&!ab(a)&&!a.media?.length&&(0,d.jsx)(g.default,{variant:"body2",fontStyle:"italic",color:"text.secondary",children:"[No text content]"})]}),(()=>{let b=[...ab(a)?a.tool_calls.filter(a=>{var b;return!!(b=a.function.name)&&(b.startsWith(Y.n9)||"handoff"===b)}):[],...v??[]];return(0,d.jsx)(h.default,{sx:{mt:1,display:"flex",flexWrap:"wrap",gap:.5},children:b.map((b,e)=>(0,d.jsx)(l.A,{size:"small",variant:"outlined",color:"secondary",icon:(0,d.jsx)(W.A,{fontSize:"small"}),label:`Handoff → ${function(a,b){let c=a.startsWith(Y.n9)?a.slice(Y.n9.length):a,d=c.replace(/_\d+$/,""),e=b.find(a=>{let b=(0,Y.RN)(a.label);return b===c||b===d});return e?.label?e.label:d.split("_").filter(Boolean).map(a=>a.charAt(0).toUpperCase()+a.slice(1)).join(" ")||"target node"}(b.function.name,c)}`,sx:{maxWidth:"100%",fontWeight:500}},b.id||`handoff-${a.id}-${e}`))})})(),f&&f.length>0&&(0,d.jsx)(ag,{pairs:f,messageId:a.id,onAppMessage:i,onUpdateModelContext:j,onRegisterAppTeardown:m,onOpenInCanvas:u}),"tool"===a.role&&a.tool_call_id&&!ac(a)&&(0,d.jsxs)(h.default,{children:[(0,d.jsxs)(g.default,{variant:"body2",sx:{display:"flex",alignItems:"center",color:"text.secondary",mb:1},children:[(0,d.jsx)(Q.A,{fontSize:"small",sx:{mr:1}}),"The tool responded to the assistant"]}),(0,d.jsxs)(r.A,{defaultExpanded:!1,sx:{mb:.5,"&:before":{display:"none"},boxShadow:"none",bgcolor:"rgba(0, 0, 0, 0.02)"},children:[(0,d.jsx)(s.A,{expandIcon:(0,d.jsx)(O.A,{}),children:(0,d.jsxs)(h.default,{sx:{display:"flex",alignItems:"center"},children:[(0,d.jsx)(Q.A,{fontSize:"small",sx:{mr:1,color:"text.secondary"}}),(0,d.jsx)(g.default,{variant:"subtitle2",children:"Tool Result"}),(0,d.jsx)(l.A,{label:`ID: ${a.tool_call_id.substring(0,8)}...`,size:"small",color:"default",variant:"outlined",sx:{ml:1,height:20,fontSize:"0.7rem"}}),(0,d.jsx)(n.A,{control:(0,d.jsx)(o.A,{size:"small",checked:e,onChange:b=>y(a.id,b.target.checked),onClick:a=>a.stopPropagation()}),label:"Raw",sx:{mr:1,ml:"auto","& .MuiTypography-root":{fontSize:"0.75rem"}},onClick:a=>a.stopPropagation()})]})}),(0,d.jsx)(t.A,{sx:{pt:0,pb:1,overflow:"hidden"},children:(0,d.jsx)(af,{content:a.content,showRaw:e})})]})]}),a.attachments&&a.attachments.length>0&&(0,d.jsxs)(h.default,{sx:{mt:1,pt:1,borderTop:"1px solid",borderColor:"divider"},children:[(0,d.jsx)(g.default,{variant:"caption",color:"text.secondary",sx:{display:"block",mb:.5},children:"Attachments:"}),a.attachments.map(a=>"image"===a.type?(0,d.jsx)(h.default,{sx:{mb:.5},children:(0,d.jsx)("img",{src:a.content,alt:a.originalName||"image attachment",style:{maxWidth:"100%",height:"auto",borderRadius:"4px"}})},a.id):(0,d.jsxs)(h.default,{sx:{display:"flex",alignItems:"center",p:1,borderRadius:1,bgcolor:"rgba(0, 0, 0, 0.04)",mb:.5},children:["document"===a.type?(0,d.jsx)(M.A,{fontSize:"small",sx:{mr:1}}):(0,d.jsx)(N.A,{fontSize:"small",sx:{mr:1}}),(0,d.jsx)(g.default,{variant:"caption",sx:{wordBreak:"break-all"},children:a.originalName||`${a.type} attachment`})]},a.id))]})]})]})}),ai=({elicitation:a,onSubmit:b,onCancel:c})=>{let{elicitationId:f,message:j,requestedSchema:k}=a,l=k?.properties??{},m=Object.keys(l),[o,p]=(0,e.useState)(()=>{let a={};for(let b of m){let c=l[b];void 0!==c.default?a[b]=c.default:"boolean"===c.type?a[b]=!1:"number"===c.type||"integer"===c.type?a[b]=0:a[b]=""}return a}),r=(a,b)=>{p(c=>({...c,[a]:b}))};return(0,d.jsxs)(q.A,{elevation:2,sx:{p:2,mt:2,bgcolor:"info.light",border:"1px solid",borderColor:"info.main",borderRadius:2},children:[(0,d.jsx)(g.default,{variant:"h6",sx:{mb:1},children:"Server needs more information"}),(0,d.jsx)(g.default,{variant:"body2",sx:{mb:2},children:j}),(0,d.jsx)(h.default,{sx:{display:"flex",flexDirection:"column",gap:1.5},children:m.map(a=>{let b=l[a],c=b.title||a,e=o[a];if("boolean"===b.type)return(0,d.jsx)(n.A,{control:(0,d.jsx)(u.A,{checked:!!e,onChange:b=>r(a,b.target.checked),size:"small"}),label:c},a);if(b.enum&&b.enum.length>0)return(0,d.jsxs)(v.A,{size:"small",sx:{minWidth:200},children:[(0,d.jsx)(w.A,{children:c}),(0,d.jsx)(x.A,{label:c,value:String(e??""),onChange:b=>r(a,b.target.value),children:b.enum.map((a,c)=>(0,d.jsx)(y.A,{value:a,children:b.enumNames?.[c]||a},a))}),b.description&&(0,d.jsx)(z.A,{children:b.description})]},a);let f="number"===b.type||"integer"===b.type;return(0,d.jsx)(A.A,{size:"small",label:c,type:f?"number":"text",value:String(e??""),helperText:b.description,inputProps:{minLength:b.minLength,maxLength:b.maxLength,min:b.minimum,max:b.maximum},onChange:b=>{if(f){let c=parseFloat(b.target.value);r(a,isNaN(c)?0:c)}else r(a,b.target.value)}},a)})}),(0,d.jsxs)(h.default,{sx:{display:"flex",justifyContent:"flex-end",gap:1,mt:2},children:[(0,d.jsx)(i.A,{variant:"outlined",color:"inherit",size:"small",onClick:()=>{c&&c(f)},disabled:!c,children:"Cancel"}),(0,d.jsx)(i.A,{variant:"contained",color:"primary",size:"small",onClick:()=>{b&&b(f,o)},disabled:!b,children:"Submit"})]})]})},aj="Type your own answer",ak=({question:a,onAnswer:b,onDecline:c})=>{let{questionId:f,questions:j}=a,[k,l]=(0,e.useState)(()=>j.map(()=>[])),[m,o]=(0,e.useState)(()=>j.map(()=>"")),p=()=>j.map((a,b)=>(k[b]??[]).map(a=>a===aj?m[b].trim():a).filter(a=>a.length>0)),r=j.every((a,b)=>(p()[b]??[]).length>0);return(0,d.jsxs)(q.A,{elevation:2,sx:{p:2,mt:2,bgcolor:"info.light",border:"1px solid",borderColor:"info.main",borderRadius:2},children:[(0,d.jsx)(g.default,{variant:"h6",sx:{mb:1},children:"The assistant is asking"}),(0,d.jsx)(h.default,{sx:{display:"flex",flexDirection:"column",gap:2},children:j.map((a,b)=>(0,d.jsxs)(v.A,{component:"fieldset",sx:{display:"flex"},children:[(0,d.jsx)(B.A,{sx:{mb:.5},children:a.prompt}),a.multiple?(0,d.jsx)(h.default,{sx:{display:"flex",flexDirection:"column"},children:a.options.map(a=>(0,d.jsx)(n.A,{control:(0,d.jsx)(u.A,{size:"small",checked:(k[b]??[]).includes(a),onChange:()=>((a,b)=>{l(c=>{let d=c.map(a=>[...a]),e=d[a],f=e.indexOf(b);return f>=0?e.splice(f,1):e.push(b),d})})(b,a)}),label:a},a))}):(0,d.jsx)(C.A,{value:(k[b]??[])[0]??"",onChange:a=>{var c;return c=a.target.value,void l(a=>{let d=a.map(a=>[...a]);return d[b]=[c],d})},children:a.options.map(a=>(0,d.jsx)(n.A,{value:a,control:(0,d.jsx)(D.A,{size:"small"}),label:a},a))}),(k[b]??[]).includes(aj)&&(0,d.jsx)(A.A,{size:"small",sx:{mt:1},placeholder:"Your answer…",value:m[b],onChange:a=>o(c=>{let d=[...c];return d[b]=a.target.value,d})})]},b))}),(0,d.jsxs)(h.default,{sx:{display:"flex",justifyContent:"flex-end",gap:1,mt:2},children:[(0,d.jsx)(i.A,{variant:"outlined",color:"inherit",size:"small",onClick:()=>{c&&c(f)},disabled:!c,children:"Decline"}),(0,d.jsx)(i.A,{variant:"contained",color:"primary",size:"small",onClick:()=>{b&&b(f,p())},disabled:!b||!r,children:"Answer"})]})]})},al=({messages:a,pendingToolCalls:b,pendingElicitation:c,availableNodes:k=[],conversationId:m,editingMessageId:n,onToggleDisabled:o,onSplitConversation:p,onBeginEditMessage:u,onApproveToolCall:v,onRejectToolCall:w,onSubmitElicitation:x,onCancelElicitation:z,pendingQuestion:B,onAnswerQuestion:C,onDeclineQuestion:D,onAppMessage:H,onUpdateModelContext:I,onRegisterAppTeardown:J,onOpenInCanvas:M,queuedMessages:N=[],queueHoldReason:Q=null})=>{let[R,S]=(0,e.useState)({}),[W,Y]=(0,e.useState)(50);(0,e.useEffect)(()=>{Y(50)},[m]);let $=Math.max(0,(Array.isArray(a)?a.length:0)-W),_=(0,e.useMemo)(()=>Array.isArray(a)?$>0?a.slice($):a:[],[a,$]),{pairsByAnchorId:ab,handoffsByAnchorId:ad,consumedToolCallIds:ae,groups:af}=(0,e.useMemo)(()=>(function(a){let b=new Map,c=new Map,d=new Set,e=new Set,f=new Map,g=[];if(!Array.isArray(a))return{pairsByAnchorId:b,handoffsByAnchorId:c,hoistedAssistantIds:d,consumedToolCallIds:e,groups:g};let h=new Map;for(let b of a)"tool"===b.role&&"string"==typeof b.tool_call_id&&b.tool_call_id&&!h.has(b.tool_call_id)&&h.set(b.tool_call_id,b);let i=a=>{let d=f.get(a);return d||(d={anchorId:a,memberIds:[a],hoistedIds:[]},f.set(a,d),g.push(d),b.set(a,[]),c.set(a,[])),d},j=null;for(let f of a){if("user"===f.role||"system"===f.role){j=null;continue}if("assistant"!==f.role)continue;let a=Array.isArray(f.tool_calls)?f.tool_calls:[],g=[],k=[];for(let b of a){if("function"!==b.type)continue;if(Z(b.function?.name)){k.push(b);continue}let a=b.id,c=a?h.get(a):void 0;a&&e.add(a),g.push({toolCall:b,result:c})}let l=function(a){let b=a.content;return"string"==typeof b?b.trim().length>0:!!Array.isArray(b)&&b.some(a=>!!a&&"object"==typeof a&&("text"===a.type?"string"==typeof a.text&&a.text.trim().length>0:"image_url"===a.type?!!a.image_url?.url:"input_audio"===a.type&&!!a.input_audio?.data))}(f),m=g.length>0||k.length>0;if(l){j=f.id,m&&(i(f.id),b.get(f.id).push(...g),c.get(f.id).push(...k));continue}if(m)if(j){let a=i(j);b.get(j).push(...g),c.get(j).push(...k),a.memberIds.push(f.id),a.hoistedIds.push(f.id),d.add(f.id)}else j=f.id,i(f.id),b.get(f.id).push(...g),c.get(f.id).push(...k)}return{pairsByAnchorId:b,handoffsByAnchorId:c,hoistedAssistantIds:d,consumedToolCallIds:e,groups:g}})(a),[a]),ag=(0,e.useMemo)(()=>(function(a){let b=new Set;if(!Array.isArray(a))return b;for(let c of a){if("assistant"!==c.role)continue;let a=c.tool_calls;if(Array.isArray(a))for(let c of a)"function"===c.type&&Z(c.function?.name)&&"string"==typeof c.id&&c.id&&b.add(c.id)}return b})(a),[a]),aj=(0,e.useMemo)(()=>new Set(_.map(a=>a.id)),[_]),{renderPairsById:al,renderHandoffsById:am,suppressedIds:an}=(0,e.useMemo)(()=>{let a=new Map,b=new Map,c=new Set;for(let d of af){let e=ab.get(d.anchorId)??[],f=ad.get(d.anchorId)??[],g=d.memberIds.find(a=>aj.has(a))??d.anchorId;for(let h of(e.length>0&&a.set(g,e),f.length>0&&b.set(g,f),d.hoistedIds))h!==g&&c.add(h)}return{renderPairsById:a,renderHandoffsById:b,suppressedIds:c}},[af,ab,ad,aj]),[ao,ap]=f().useState(null),[aq,ar]=f().useState(null),[as,at]=f().useState({}),au=(0,e.useCallback)((a,b)=>{aa.debug(`handleMenuOpen called with messageId: ${b}`),ap(a.currentTarget),ar(b)},[]),av=(0,e.useCallback)((a,b)=>{at(c=>({...c,[a]:b}))},[]),aw=()=>{ap(null),ar(null)},ax=()=>{aq&&(u?.(aq),aw())},ay=(0,e.useMemo)(()=>{let a=new Map;for(let b of k)a.set(b.id,b.label);return a},[k]),az=(0,e.useMemo)(()=>aq&&a.find(a=>a.id===aq)||null,[aq,a]);return(0,d.jsxs)(h.default,{sx:{display:"flex",flexDirection:"column",gap:2},children:[$>0&&(0,d.jsx)(h.default,{sx:{display:"flex",justifyContent:"center"},children:(0,d.jsxs)(i.A,{size:"small",variant:"outlined",onClick:()=>Y(a=>a+200),children:["Show earlier messages (",$," more)"]})}),_.map((a,b)=>ac(a)||"tool"===a.role&&"string"==typeof a.tool_call_id&&ag.has(a.tool_call_id)||"tool"===a.role&&"string"==typeof a.tool_call_id&&ae.has(a.tool_call_id)||an.has(a.id)?null:(0,d.jsx)(ah,{message:a,nodeLabel:a.processNodeId?ay.get(a.processNodeId):void 0,availableNodes:k,showRaw:!!as[a.id],toolCallPairs:al.get(a.id),onAppMessage:H,onUpdateModelContext:I,onRegisterAppTeardown:J,onOpenInCanvas:M,hoistedHandoffs:am.get(a.id),isBeingEdited:!!n&&a.id===n,onMenuOpen:au,onToggleRaw:av},a.id||`msg-${$+b}`)),N.map(a=>(0,d.jsx)(h.default,{"data-testid":"queued-bubble",sx:{display:"flex",justifyContent:"flex-end",opacity:.6},children:(0,d.jsxs)(h.default,{sx:{maxWidth:"70%",bgcolor:"primary.light",color:"primary.contrastText",borderRadius:2,px:2,py:1,display:"flex",flexDirection:"column",gap:.5},children:[(0,d.jsx)(g.default,{variant:"body2",sx:{whiteSpace:"pre-wrap",wordBreak:"break-word"},children:a.content||(a.attachments.length>0?`${a.attachments.length} attachment(s)`:"")}),(0,d.jsxs)(h.default,{sx:{display:"flex",alignItems:"center",gap:.5,justifyContent:"flex-end"},children:[!Q&&(0,d.jsx)(j.default,{size:10,color:"inherit"}),(0,d.jsx)(g.default,{variant:"caption",sx:{opacity:.85},children:Q??"Queued"})]})]})},a.id)),(0,d.jsxs)(E.A,{anchorEl:ao,open:!!ao,onClose:aw,children:[az&&(()=>{aa.debug("Entering menu item rendering logic",{activeMessageId:aq}),aa.debug("Active message object for menu:",az),aa.debug("Active message role for menu:",az?.role);try{if("user"===az.role&&"string"==typeof az.content&&u)return(0,d.jsxs)(y.A,{onClick:ax,children:[(0,d.jsx)(F.A,{children:(0,d.jsx)(T.A,{fontSize:"small"})}),(0,d.jsx)(G.A,{children:"Edit Message"})]});return null}catch(a){return aa.error("Error rendering Edit Message menu item",{error:a}),null}})(),(0,d.jsxs)(y.A,{onClick:()=>{aq&&(o(aq),aw())},children:[(0,d.jsx)(F.A,{children:(0,d.jsx)(K.A,{fontSize:"small"})}),(0,d.jsx)(G.A,{children:az?.disabled?"Enable Message":"Disable Message"})]}),(0,d.jsxs)(y.A,{onClick:()=>{aq&&(p(aq),aw())},children:[(0,d.jsx)(F.A,{children:(0,d.jsx)(L.A,{fontSize:"small"})}),(0,d.jsx)(G.A,{children:"Split Conversation Here"})]})]}),c&&(0,d.jsx)(ai,{elicitation:c,onSubmit:x,onCancel:z}),B&&(0,d.jsx)(ak,{question:B,onAnswer:C,onDecline:D}),b&&b.length>0&&(0,d.jsxs)(q.A,{elevation:2,sx:{p:2,mt:2,bgcolor:"warning.light",border:"1px solid",borderColor:"warning.main",borderRadius:2},children:[(0,d.jsxs)(g.default,{variant:"h6",sx:{mb:1,display:"flex",alignItems:"center"},children:[(0,d.jsx)(P.A,{sx:{mr:1}})," Tool Approval Required"]}),(0,d.jsx)(g.default,{variant:"body2",sx:{mb:2},children:"The assistant wants to use the following tool(s). Please approve or reject each request."}),b.map((a,b)=>{let c=(0,X.yo)(a.function.name),e=a.function.arguments;try{let b=JSON.parse(a.function.arguments);e=JSON.stringify(b,null,2)}catch(a){}return(0,d.jsxs)(r.A,{defaultExpanded:!0,sx:{mb:1,"&:before":{display:"none"},boxShadow:1},children:[(0,d.jsx)(s.A,{expandIcon:(0,d.jsx)(O.A,{}),children:(0,d.jsxs)(h.default,{sx:{display:"flex",alignItems:"center",width:"100%"},children:[(0,d.jsx)(P.A,{fontSize:"small",sx:{mr:1,color:"primary.main"}}),(0,d.jsx)(g.default,{variant:"subtitle2",sx:{fontWeight:"bold",flexGrow:1},children:c}),(0,d.jsx)(l.A,{label:`ID: ${a.id?a.id.substring(0,8):"N/A"}...`,size:"small",variant:"outlined",sx:{ml:1,height:20,fontSize:"0.7rem"}})]})}),(0,d.jsxs)(t.A,{sx:{pt:0},children:[(0,d.jsx)(h.default,{component:"pre",sx:{bgcolor:"action.hover",p:1,borderRadius:"4px",overflowX:"auto",fontFamily:"monospace",fontSize:"0.75rem",my:.5,maxHeight:"150px",whiteSpace:"pre-wrap",wordBreak:"break-word"},children:e}),(0,d.jsx)(A.A,{label:"Rejection reason (optional)",placeholder:"e.g. write to dist/ instead",value:R[a.id]??"",onChange:b=>S(c=>({...c,[a.id]:b.target.value})),multiline:!0,minRows:1,maxRows:4,fullWidth:!0,size:"small",sx:{mt:1,mb:1}}),(0,d.jsxs)(h.default,{sx:{display:"flex",justifyContent:"flex-end",gap:1,mt:1,flexWrap:"wrap"},children:[(0,d.jsx)(i.A,{variant:"outlined",color:"error",size:"small",startIcon:(0,d.jsx)(V.A,{}),onClick:()=>w&&w(a.id,!1,R[a.id]?.trim()||void 0),disabled:!w,children:"Reject"}),(0,d.jsx)(i.A,{variant:"outlined",color:"error",size:"small",onClick:()=>w&&w(a.id,!0),disabled:!w,title:"Always deny this tool — saves a rule so future calls are auto-denied",children:"Always Deny"}),(0,d.jsx)(i.A,{variant:"outlined",color:"success",size:"small",startIcon:(0,d.jsx)(U.A,{}),onClick:()=>v&&v(a.id,!0),disabled:!v,title:"Always allow this tool — saves a rule so future calls are auto-approved",children:"Always Allow"}),(0,d.jsx)(i.A,{variant:"contained",color:"success",size:"small",startIcon:(0,d.jsx)(U.A,{}),onClick:()=>v&&v(a.id),disabled:!v,children:"Approve"})]})]})]},a.id||`ptc-${b}`)})]})]})}},24856:(a,b,c)=>{c.d(b,{pX:()=>d});function d(a,b,c,d){let e=`${a.type}-bottom`,f=`${b.type}-top`;return{id:`${a.id}:${e}->${b.id}:${f}`,source:a.id,sourceHandle:e,target:b.id,targetHandle:f,type:"custom",data:{edgeType:"standard",...c?{bidirectional:!0}:{},...d?{condition:d}:{}},animated:!0}}},29237:(a,b,c)=>{c.d(b,{C:()=>f,L2:()=>e,P2:()=>h,w4:()=>d,wM:()=>g});let d=["contains","regex","equals","always"],e=["last-assistant","last-message"];function f(a){return"string"==typeof a&&d.includes(a)}function g(a){try{return new RegExp(a),!0}catch{return!1}}function h(a){if(!a||!f(a.kind))return"";let b=a.negate?"!":"";if("always"===a.kind)return`${b}always`;let c=a.ignoreCase?" i":"",d="string"==typeof a.value?a.value:"",e=d.length>8?`${d.slice(0,8)}…`:d,g="regex"===a.kind?`/${e}/`:`"${e}"`;return`${b}${a.kind}:${g}${c}`}},31164:(a,b,c)=>{c.d(b,{jY:()=>f,oY:()=>g,sZ:()=>h});var d=c(21124);c(38301);var e=c(97004);let f=a=>(0,d.jsx)(e.A,{...a,variant:"standard"}),g=a=>(0,d.jsx)(e.A,{...a,variant:"mcp"}),h=a=>(0,d.jsx)(e.A,{...a,variant:"resource"})},36627:(a,b,c)=>{function d(a){return!!a&&a.includes("mcp")}function e(a){return!!a&&a.includes("resource")}function f(a){let b=a?.data?.edgeType;return"mcp"===b||"resource"===b}function g(a,b,c,f){if("trigger"===a&&"start"===c)return b&&"trigger-bottom"!==b?"Trigger nodes must connect via their bottom handle":f&&"start-top"!==f?"Trigger nodes must connect to the top handle of the Start node":null;if("trigger"===c)return"Trigger nodes cannot have incoming connections";if("trigger"===a&&"start"!==c)return"Trigger nodes can only connect to the Start node";if("start"===c)return"Start nodes cannot have incoming connections";if("finish"===a)return"Finish nodes cannot have outgoing connections";if("mcp"===a||"mcp"===c||d(b)||d(f))return("mcp"!==a||"process"!==c)&&("process"!==a||"mcp"!==c)?"MCP connections must link an MCP node to a Process node via MCP handles":"process"!==a||d(b)?null:"Connect MCP nodes from the Process node's left/right MCP handles";if("resource"===a||"resource"===c||e(b)||e(f)){if(("resource"!==a||"process"!==c)&&("process"!==a||"resource"!==c))return"Resource connections must link a Resource node to a Process node via resource handles";if("process"===a&&!e(b))return"Connect Resource nodes from the Process node's left/right resource handles"}return null}function h(a,b){return"resource"===a?"resource-in":"process"===a&&e(b)?"process-left-resource":"process"===a&&d(b)?"process-left-mcp":"start"===a?"start-top":`${a}-top`}function i(a,b){if("trigger"===a)return["start"];let c=["process","finish","mcp","subflow","resource","signal","trigger"];return a&&b?c.filter(c=>null===g(a,b,c,h(c,b))):c}c.d(b,{BY:()=>f,CW:()=>h,_w:()=>i,vC:()=>g,vM:()=>e,z5:()=>d})},38259:(a,b,c)=>{c.d(b,{O:()=>i,b:()=>e});let d=(0,c(19815).h)("frontend/services/chat/index");class e extends Error{constructor(a,b,c){super(a),this.name="ChatApiError",this.status=b,this.body=c}}let f="/v1/chat/conversations";async function g(a){let b;if(204===a.status)return;let c=await a.text();if(c)try{b=JSON.parse(c)}catch{b=c}if(!a.ok)throw new e(b&&"object"==typeof b&&(b.error||b.message)||`Request failed with status ${a.status}`,a.status,b);return b}class h{async listConversations(){return d.debug("listConversations: Entering method"),g(await fetch(f))}async getConversation(a){return d.debug("getConversation: Entering method",{conversationId:a}),g(await fetch(`${f}/${encodeURIComponent(a)}`))}async createConversation(a){return d.debug("createConversation: Entering method",{conversationId:a.id}),g(await fetch(f,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(a)}))}async updateConversationFlow(a,b){return d.debug("updateConversationFlow: Entering method",{conversationId:a,flowId:b}),g(await fetch(`${f}/${encodeURIComponent(a)}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({flowId:b})}))}async updateConversationTitle(a,b){return d.debug("updateConversationTitle: Entering method",{conversationId:a}),g(await fetch(`${f}/${encodeURIComponent(a)}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({title:b})}))}async updateConversationApproval(a,b){return d.debug("updateConversationApproval: Entering method",{conversationId:a,requireApproval:b}),g(await fetch(`${f}/${encodeURIComponent(a)}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({requireApproval:b})}))}async deleteConversation(a){d.debug("deleteConversation: Entering method",{conversationId:a});let b=await fetch(`${f}/${encodeURIComponent(a)}`,{method:"DELETE"});await g(b)}async deleteConversations(a){return d.debug("deleteConversations: Entering method",{count:a.length}),g(await fetch(f,{method:"DELETE",headers:{"Content-Type":"application/json"},body:JSON.stringify({ids:a})}))}async respondToToolCall(a,b,c,e,h){return d.debug("respondToToolCall: Entering method",{conversationId:a,action:b,toolCallId:c,always:e}),g(await fetch(`${f}/${encodeURIComponent(a)}/respond`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:b,toolCallId:c,...e?{always:!0}:{},...h?{feedback:h}:{}})}))}async debugStep(a){return d.debug("debugStep: Entering method",{conversationId:a}),g(await fetch(`${f}/${encodeURIComponent(a)}/debug/step`,{method:"POST"}))}async debugContinue(a){return d.debug("debugContinue: Entering method",{conversationId:a}),g(await fetch(`${f}/${encodeURIComponent(a)}/debug/continue`,{method:"POST"}))}async setBreakpoints(a,b){d.debug("setBreakpoints: Entering method",{conversationId:a,count:b.length});let c=await fetch(`${f}/${encodeURIComponent(a)}/breakpoints`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({breakpoints:b})});await g(c)}async synthesizeQuickChat(a){return d.debug("synthesizeQuickChat: Entering method",{conversationId:a.conversationId}),g(await fetch("/api/flow/quick-chat",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(a)}))}async synthesizeFlowGenerator(a){return g(await fetch("/api/flow/generator",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(a)}))}async completeFlowGeneratorTurn(a){return g(await fetch("/v1/chat/completions",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({model:"flow-Flow Generator Session",messages:a.messages,stream:!1,metadata:{flujo:"true",conversationId:a.conversationId}})}))}async restoreFlowGenerator(){return g(await fetch("/api/flow/generator",{method:"PUT"}))}async cancel(a){d.debug("cancel: Entering method",{conversationId:a});let b=await fetch(`${f}/${encodeURIComponent(a)}/cancel`,{method:"POST"});await g(b)}async injectMessage(a,b,c){d.debug("injectMessage: Entering method",{conversationId:a,messageId:c});try{let e=await fetch(`${f}/${encodeURIComponent(a)}/inject`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({content:b,id:c})});if(e.ok)return{delivered:!0};if(409===e.status)return d.debug("injectMessage: run is not live; caller should send normally",{conversationId:a}),{delivered:!1};return d.warn("injectMessage: unexpected response; falling back to a normal send",{conversationId:a,status:e.status}),{delivered:!1}}catch(b){return d.warn("injectMessage: request failed; falling back to a normal send",{conversationId:a,err:b}),{delivered:!1}}}subscribeToEvents(a,b,c){let e=new EventSource(void 0!==c?`${f}/${encodeURIComponent(a)}/events?fromSeq=${c}`:`${f}/${encodeURIComponent(a)}/events`);return e.onopen=()=>{d.debug("Execution event stream open",{conversationId:a}),b.onOpen?.()},e.onmessage=a=>{try{b.onEvent(JSON.parse(a.data))}catch(a){d.warn("Failed to parse SSE event",{err:a})}},e.onerror=a=>{d.debug("SSE stream error (browser will retry if still open)"),b.onError?.(a)},e}}let i=new h},57361:(a,b,c)=>{c.d(b,{Ay:()=>Z,nd:()=>V,c_:()=>U});var d=c(21124),e=c(38301),f=c(6537),g=c(81637),h=c(79515),i=c(95791),j=c(46973),k=c(60839),l=c(18168),m=c(2117),n=c(63281),o=c(63654),p=c(8070),q=c(94367),r=c(50553),s=c(84233),t=c(91059),u=c(7118),v=c(91034),w=c(38941),x=c(95345),y=c(12033),z=c(1010);let A=({open:a,position:b,onClose:c,onDelete:e,onEditProperties:f,onToggleBidirectional:g,onCopy:h,onPaste:i,canPaste:j,canCopy:k,nodeId:l,selection:m,edgeId:n})=>{let o=()=>{f&&f(),c()},p=[];return l&&!m&&p.push((0,d.jsxs)(q.A,{onClick:o,children:[(0,d.jsx)(r.A,{children:(0,d.jsx)(y.A,{fontSize:"small"})}),(0,d.jsx)(s.A,{children:"Edit Properties"})]},"edit")),n&&!l&&!m&&(f&&p.push((0,d.jsxs)(q.A,{onClick:o,children:[(0,d.jsx)(r.A,{children:(0,d.jsx)(y.A,{fontSize:"small"})}),(0,d.jsx)(s.A,{children:"Edit Properties"})]},"edge-edit")),g&&p.push((0,d.jsxs)(q.A,{onClick:()=>{g&&g(),c()},children:[(0,d.jsx)(r.A,{children:(0,d.jsx)(z.A,{fontSize:"small"})}),(0,d.jsx)(s.A,{children:"Toggle Bidirectional"})]},"edge-bidirectional"))),h&&(l||m)&&p.push((0,d.jsxs)(q.A,{onClick:()=>{h&&h(),c()},disabled:!k,children:[(0,d.jsx)(r.A,{children:(0,d.jsx)(w.A,{fontSize:"small"})}),(0,d.jsx)(s.A,{children:"Copy"})]},"copy")),i&&p.push((0,d.jsxs)(q.A,{onClick:()=>{i&&i(),c()},disabled:!j,children:[(0,d.jsx)(r.A,{children:(0,d.jsx)(x.A,{fontSize:"small"})}),(0,d.jsx)(s.A,{children:"Paste"})]},"paste")),(l||n||m)&&p.push((0,d.jsx)(t.A,{},"delete-divider"),(0,d.jsxs)(q.A,{onClick:()=>{e(),c()},sx:{color:"error.main"},children:[(0,d.jsx)(r.A,{sx:{color:"error.main"},children:(0,d.jsx)(v.A,{fontSize:"small"})}),(0,d.jsx)(s.A,{children:"Delete"})]},"delete")),(0,d.jsx)(u.A,{open:a,onClose:c,anchorReference:"anchorPosition",anchorPosition:null!==b.y&&null!==b.x?{top:b.y,left:b.x}:void 0,children:p})};var B=c(31164),C=c(97004);function D(a,b){return b.find(b=>b.id===a)}var E=c(19815);let F=(0,E.h)("components/flow/FlowBuilder/Canvas/hooks/useCanvasEvents.ts");var G=c(90430),H=c(36627),I=c(68730),J=c(43312),K=c(34229),L=c(48440),M=c(1618);let N=(0,l.Ay)(I.A)(({theme:a})=>({minWidth:"36px",padding:"6px",margin:"0 4px",backgroundColor:"dark"===a.palette.mode?"rgba(255, 255, 255, 0.05)":"rgba(0, 0, 0, 0.02)","&:hover":{backgroundColor:"dark"===a.palette.mode?"rgba(255, 255, 255, 0.1)":"rgba(0, 0, 0, 0.05)"}})),O=()=>{let{zoomIn:a,zoomOut:b,fitView:c}=(0,i.VH)();return(0,d.jsx)(i.Zk,{position:"top-right",style:{margin:"10px"},children:(0,d.jsxs)("div",{style:{display:"flex",gap:"5px"},children:[(0,d.jsx)(J.A,{title:"Zoom In",children:(0,d.jsx)(N,{variant:"outlined",size:"small",onClick:()=>a(),children:(0,d.jsx)(K.A,{fontSize:"small"})})}),(0,d.jsx)(J.A,{title:"Zoom Out",children:(0,d.jsx)(N,{variant:"outlined",size:"small",onClick:()=>b(),children:(0,d.jsx)(L.A,{fontSize:"small"})})}),(0,d.jsx)(J.A,{title:"Fit View",children:(0,d.jsx)(N,{variant:"outlined",size:"small",onClick:()=>c(),children:(0,d.jsx)(M.A,{fontSize:"small"})})})]})})},P=({showMiniMap:a=!0,showControls:b=!0,showBackground:c=!0})=>{let e=(0,k.A)(),f="dark"===e.palette.mode;return(0,d.jsxs)(d.Fragment,{children:[c&&(0,d.jsx)(i.VS,{color:f?e.palette.text.disabled:e.palette.divider,gap:20,size:1}),b&&(0,d.jsx)(i.H2,{}),a&&(0,d.jsx)(i.of,{nodeColor:f?e.palette.primary.dark:e.palette.primary.light,maskColor:f?"rgba(0, 0, 0, 0.4)":"rgba(255, 255, 255, 0.6)"})]})},Q=(0,E.h)("components/flow/FlowBuilder/Canvas/Canvas.tsx"),R="flujo:flowClipboard",S=null;function T(a){S=a;try{localStorage.setItem(R,JSON.stringify(a))}catch(a){Q.warn("Could not persist flow clipboard to localStorage",a)}}let U={start:p.vm,process:p.Uw,finish:p.IK,mcp:p.v2,subflow:p.lA,resource:p.z9,signal:p.z3,trigger:p.pF},V={custom:B.jY,mcpEdge:B.oY,resourceEdge:B.sZ},W=({open:a,position:b,onClose:c,onSelectNodeType:e,sourceNodeType:i,sourceHandleId:j})=>{let l=(0,k.A)(),m=(0,H._w)(i,j);Q.debug(`NodeSelectionModal: Source node type: ${i}, Source handle ID: ${j}`),Q.debug(`NodeSelectionModal: Valid node types: ${m.join(", ")}`);let n=[{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"},{type:"resource",label:"Resource Node",description:"A data artifact steps read or write"},{type:"signal",label:"Signal Node",description:"Emit an event to trigger another flow"},{type:"trigger",label:"Trigger Node",description:"Schedule or event-trigger for this flow"}].filter(a=>m.includes(a.type));return b?(0,d.jsx)(f.A,{open:a,onClose:c,"aria-labelledby":"node-selection-modal",children:(0,d.jsxs)(g.default,{sx:{position:"absolute",top:"50%",left:"50%",transform:"translate(-50%, -50%)",width:300,bgcolor:"background.paper",borderRadius:2,boxShadow:24,p:4},children:[(0,d.jsx)(h.default,{variant:"h6",component:"h2",gutterBottom:!0,children:"Select Node Type"}),(0,d.jsx)(g.default,{display:"flex",flexDirection:"column",gap:2,children:n.map(a=>(0,d.jsxs)(g.default,{sx:{padding:2,borderRadius:1,border:`2px solid ${"process"===a.type?l.palette.secondary.main:"finish"===a.type?l.palette.success.main:"subflow"===a.type?l.palette.warning.main:"resource"===a.type?p.nH:l.palette.info.main}`,cursor:"pointer","&:hover":{boxShadow:3}},onClick:()=>e(a.type,b),children:[(0,d.jsxs)(g.default,{display:"flex",alignItems:"center",gap:1,mb:1,children:[(a=>{switch(a){case"process":default:return(0,d.jsx)("div",{style:{width:24,height:24,backgroundColor:l.palette.secondary.main,borderRadius:"50%"}});case"finish":return(0,d.jsx)("div",{style:{width:24,height:24,backgroundColor:l.palette.success.main,borderRadius:"50%"}});case"mcp":return(0,d.jsx)("div",{style:{width:24,height:24,backgroundColor:l.palette.info.main,borderRadius:"50%"}});case"subflow":return(0,d.jsx)("div",{style:{width:24,height:24,backgroundColor:l.palette.warning.main,borderRadius:"50%"}});case"resource":return(0,d.jsx)("div",{style:{width:24,height:24,backgroundColor:p.nH,borderRadius:"50%"}});case"signal":return(0,d.jsx)("div",{style:{width:24,height:24,backgroundColor:p.vp,borderRadius:"50%"}});case"trigger":return(0,d.jsx)("div",{style:{width:24,height:24,backgroundColor:p.$Q,borderRadius:"50%"}})}})(a.type),(0,d.jsx)(h.default,{variant:"subtitle1",fontWeight:"bold",children:a.label})]}),(0,d.jsx)(h.default,{variant:"body2",color:"text.secondary",children:a.description})]},a.type))})]})}):null},X=(0,l.Ay)("div")(({theme:a})=>({width:"100%",height:"80vh",border:`1px solid ${a.palette.divider}`,borderRadius:"4px",background:a.palette.background.paper,position:"relative"})),Y=(0,e.forwardRef)((a,b)=>{let c=(0,k.A)(),{nodes:f,edges:g,onNodesChange:h,onEdgesChange:l,onDrop:p,onDragOver:q,onInit:r,reactFlowWrapper:s,onEditNode:t,onEditEdge:u}=a,{contextMenu:v,selectedElements:w,closeContextMenu:x,handleDelete:y,onNodeContextMenu:z,onEdgeContextMenu:B,onPaneContextMenu:E,onSelectionContextMenu:I}=function(a){let{deleteElements:b}=(0,i.VH)(),[c,d]=(0,e.useState)({open:!1,position:{x:0,y:0}}),[f,g]=(0,e.useState)({nodes:[],edges:[]});(0,i.p4)({onChange:({nodes:a,edges:b})=>{let c=a.map(a=>a.id),d=b.map(a=>a.id);F.debug(`Selection changed: ${c.length} nodes, ${d.length} edges selected`),g({nodes:c,edges:d})}});let h=(0,e.useCallback)((a,b,c,e)=>{a.preventDefault(),b?F.debug(`Context menu opened for node: ${b}`):c?F.debug(`Context menu opened for edge: ${c}`):e?F.debug("Context menu opened for the current selection"):F.debug(`Context menu opened on canvas at (${a.clientX}, ${a.clientY})`),d({open:!0,position:{x:a.clientX,y:a.clientY},nodeId:b,edgeId:c,selection:e})},[]),j=(0,e.useCallback)(()=>{F.debug("Context menu closed"),d(a=>({...a,open:!1}))},[]),k=(0,e.useCallback)(()=>{if(c.selection)F.debug("handleDelete: Deleting the current selection"),b({nodes:f.nodes.map(a=>({id:a})),edges:f.edges.map(a=>({id:a}))});else if(c.nodeId){if(F.debug(`handleDelete: Attempting to delete node ${c.nodeId}`),!function(a,b){let c=D(a,b);return!!c&&"start"!==c.type}(c.nodeId,a)){F.warn(`Cannot delete Start node: ${c.nodeId}`),alert("Start nodes cannot be deleted");return}b({nodes:[{id:c.nodeId}]})}else c.edgeId&&(F.debug(`handleDelete: Deleting edge ${c.edgeId}`),b({edges:[{id:c.edgeId}]}))},[c,b,a,f]),l=(0,e.useCallback)((a,b)=>{h(a,b.id)},[h]),m=(0,e.useCallback)((a,b)=>{h(a,void 0,b.id)},[h]),n=(0,e.useCallback)(a=>{h(a)},[h]),o=(0,e.useCallback)(a=>{h(a,void 0,void 0,!0)},[h]);return{contextMenu:c,selectedElements:f,onContextMenu:h,closeContextMenu:j,handleDelete:k,onNodeContextMenu:l,onEdgeContextMenu:m,onPaneContextMenu:n,onSelectionContextMenu:o}}(f),{deleteElements:J}=(0,i.VH)(),K=(0,i.PI)(),L=(0,e.useRef)(null),[M,N]=(0,e.useState)(null),[Y,Z]=(0,e.useState)({open:!1,position:null}),$=(0,e.useCallback)(a=>[...f.filter(a=>a.selected).map(a=>({type:"select",id:a.id,selected:!1})),{type:"add",item:{...a,selected:!0}}],[f]);(0,e.useEffect)(()=>{if(!t)return;let a=a=>{if(a.detail&&a.detail.nodeId){let b=D(a.detail.nodeId,f);b&&t(b)}};return document.addEventListener("editNode",a),()=>{document.removeEventListener("editNode",a)}},[f,t]);let _=(0,e.useCallback)(a=>{if(!a.sourceHandle||!a.targetHandle)return void Q.error("Invalid connection: Missing source or target handle",a);let b=K.getState().connection.fromHandle?.type==="target";if(!(0,G.JL)(a,f,g))return;let d=(0,G.wn)(a,f);if(d.data?.edgeType==="standard"){let d=a=>a.data?.edgeType!=="mcp",e=a=>!!a.data?.bidirectional,h=g.find(b=>d(b)&&b.source===a.source&&b.target===a.target),i=g.find(b=>d(b)&&b.source===a.target&&b.target===a.source),k=a=>{Q.info(`Merging reverse connection into bidirectional edge ${a.id}`),l([{type:"replace",id:a.id,item:{...a,data:{...a.data,bidirectional:!0},markerStart:{type:j.TG.ArrowClosed,width:20,height:20,color:c.palette.text.secondary}}}])};if(b){let a=h??i;return a?void(!e(a)&&(0,G.y2)(a,f,g)&&k(a)):void Q.info("Connection drawn from a top handle is only allowed to convert an existing edge to bidirectional")}if(h&&e(h))return;if(i){!e(i)&&(0,G.y2)(i,f,g)&&k(i);return}}l([...(0,G.Cm)(d,g).map(a=>({type:"remove",id:a})),{type:"add",item:d}])},[f,g,l,K,c.palette.text.secondary]),aa=(0,e.useCallback)(a=>(0,G.p9)(a,f,g),[f,g]);(0,e.useEffect)(()=>{let a=a=>{let{edgeId:b,waypoints:c}=a.detail,d=g.find(a=>a.id===b);if(!d)return;let{waypoint:e,...f}=d.data??{};l([{type:"replace",id:b,item:{...d,data:{...f,waypoints:c??void 0}}}])};return document.addEventListener(C.R,a),()=>document.removeEventListener(C.R,a)},[g,l]);let ab=(0,e.useCallback)(async({nodes:a,edges:b})=>{let c=a.filter(a=>"start"!==a.type),d=new Set(c.map(a=>a.id)),e=new Set(a.map(a=>a.id)),f=b.filter(a=>!!(a.selected||d.has(a.source)||d.has(a.target))||!(e.has(a.source)||e.has(a.target))),g=c.filter(a=>"trigger"===a.type);return g.length>0&&await Promise.all(g.map(async a=>{let b=a.data?.properties?.executionId;if("string"==typeof b&&b)try{await o.P.update(b,{enabled:!1})}catch(a){console.warn("TriggerNode: failed to disarm PlannedExecution",b,a)}})),(0!==c.length||0!==f.length)&&{nodes:c,edges:f}},[]),ac=(0,e.useCallback)(a=>{N(a),r&&r(a)},[r]);(0,e.useEffect)(()=>{let a=a=>{if(!a.detail||!M)return;let{nodeType:b,position:c}=a.detail,d=n.g.createNode(b,c);h($(d)),t&&t(d)};return document.addEventListener("addNodeFromPalette",a),()=>{document.removeEventListener("addNodeFromPalette",a)}},[M,h,$,t]);let ad=(0,e.useCallback)(()=>{if(v.nodeId&&t){let a=D(v.nodeId,f);a&&t(a)}else if(v.edgeId&&u){let a=g.find(a=>a.id===v.edgeId);a&&u(a)}},[v.nodeId,v.edgeId,f,g,t,u]),ae=(0,e.useCallback)(()=>{let a;if(!v.edgeId)return;let b=g.find(a=>a.id===v.edgeId);if(!b)return;if(b.data?.edgeType!=="standard")return void Q.debug(`Toggle bidirectional ignored for non-standard edge ${b.id}`);let d=!!b.data?.bidirectional;if(!d&&!(0,G.y2)(b,f,g))return void Q.info(`Edge ${b.id} cannot be made bidirectional (reverse direction is not a legal connection)`);let e={...b.data??{},bidirectional:!d};if(d){let{markerStart:c,...d}=b;a={...d,data:e}}else a={...b,data:e,markerStart:{type:j.TG.ArrowClosed,width:20,height:20,color:c.palette.text.secondary}};l([{type:"replace",id:b.id,item:a}])},[v.edgeId,g,f,l,c.palette.text.secondary]),af=(0,e.useCallback)((a,b)=>{a.preventDefault(),t&&t(b)},[t]),ag=(0,e.useCallback)((a,b)=>{let{fromNode:c,fromHandle:d,toHandle:e}=b;if(!c||!d?.id||!M)return void Q.debug("onConnectEnd: No valid connection start data");Q.debug(`onConnectEnd: Connection ended from node ${c.id}, handle ${d.id}`);let f="subflow"===c.type&&g.some(a=>{let b=a.data;return b?.edgeType!=="mcp"&&b?.edgeType!=="resource"&&(a.source===c.id||a.target===c.id&&!!b?.bidirectional)}),h=!!a.target?.closest?.(".react-flow__pane");if(!function(a){let{fromNodeType:b,fromHandleType:c,fromHandleId:d,landedOnHandle:e,droppedOnPane:f,subflowHasOutgoing:g}=a;return!e&&!!f&&!!d&&("target"!==c||!!(0,H.z5)(d))&&("subflow"!==b||"source"!==c||!g)}({fromNodeType:c.type,fromHandleType:d.type,fromHandleId:d.id,landedOnHandle:!!e,droppedOnPane:h,subflowHasOutgoing:f}))return;let i=a instanceof MouseEvent?a:a.changedTouches[0],j=M.screenToFlowPosition({x:i.clientX,y:i.clientY});Q.debug(`onConnectEnd: Connection dropped on pane at position (${j.x}, ${j.y})`),Z({open:!0,position:j,sourceNodeId:c.id,sourceNodeType:c.type,sourceHandleId:d.id})},[M,g]),ah=(0,e.useCallback)((a,b)=>{Q.debug(`handleNodeTypeSelection: Selected node type ${a} at position (${b.x}, ${b.y})`);let c=n.g.createNode(a,b);h($(c));let{sourceNodeId:d,sourceHandleId:e}=Y,i=d?D(d,f):void 0;if(i&&e){let b=(0,H.CW)(a,e),d={source:i.id,sourceHandle:e,target:c.id,targetHandle:b};if(Q.debug(`handleNodeTypeSelection: Creating connection from ${d.source} to ${d.target}`),(0,G.JL)(d,[...f,c],g)){let a=(0,G.wn)(d,[...f,c]);l([...(0,G.Cm)(a,g).map(a=>({type:"remove",id:a})),{type:"add",item:a}]),Q.debug(`handleNodeTypeSelection: Edge created with id ${a.id}`)}}Z({open:!1,position:null}),t&&t(c)},[Y,f,g,$,h,l,t]),ai=(0,e.useCallback)(()=>{Q.debug("handleCloseNodeSelectionModal: Closing node selection modal"),Z({open:!1,position:null})},[]),aj=(0,e.useCallback)(()=>{let a=new Set(w.nodes),b=f.filter(b=>a.has(b.id)&&"start"!==b.type);if(0===b.length)return!1;let c=new Set(b.map(a=>a.id)),d=g.filter(a=>c.has(a.source)&&c.has(a.target));return T({nodes:JSON.parse(JSON.stringify(b)),edges:JSON.parse(JSON.stringify(d))}),Q.debug(`Copied ${b.length} node(s) and ${d.length} edge(s)`),!0},[w,f,g]),ak=(0,e.useCallback)(()=>{let a=S;if(!a)try{let b=localStorage.getItem(R);b&&(a=JSON.parse(b))}catch(a){Q.warn("Could not read flow clipboard from localStorage",a)}if(!a||!a.nodes||0===a.nodes.length)return void Q.debug("Paste requested but clipboard is empty");let b=new Map;a.nodes.forEach(a=>b.set(a.id,(0,m.A)()));let c=a.nodes.map(a=>({...a,id:b.get(a.id),position:{x:(a.position?.x??0)+40,y:(a.position?.y??0)+40},selected:!0,data:{...a.data}})),d=(a.edges||[]).filter(a=>b.has(a.source)&&b.has(a.target)).map(a=>({...a,id:(0,m.A)(),source:b.get(a.source),target:b.get(a.target),selected:!1}));h([...f.filter(a=>a.selected).map(a=>({type:"select",id:a.id,selected:!1})),...c.map(a=>({type:"add",item:a}))]),d.length>0&&l(d.map(a=>({type:"add",item:a}))),Q.info(`Pasted ${c.length} node(s) and ${d.length} edge(s)`)},[f,h,l]),al=(0,e.useCallback)(a=>{let b=a.ctrlKey||a.metaKey,c=a.key.toLowerCase();if(b&&"c"===c){aj()&&a.preventDefault();return}if(b&&"x"===c){aj()&&(a.preventDefault(),J({nodes:w.nodes.map(a=>({id:a})),edges:w.edges.map(a=>({id:a}))}));return}if(b&&"v"===c){a.preventDefault(),ak();return}},[aj,ak,J,w]),am=(0,e.useCallback)(()=>{if(v.nodeId&&!w.nodes.includes(v.nodeId)){let a=f.find(a=>a.id===v.nodeId);a&&"start"!==a.type&&(T({nodes:JSON.parse(JSON.stringify([a])),edges:[]}),Q.debug("Copied right-clicked node to clipboard"));return}aj()},[v.nodeId,w,f,aj]),an=(0,e.useMemo)(()=>{if(S)return!0;try{return!!localStorage.getItem(R)}catch{return!1}},[v.open]),ao=(0,e.useMemo)(()=>{if(v.selection){let a=new Set(w.nodes);return f.some(b=>a.has(b.id)&&"start"!==b.type)}if(v.nodeId){let a=f.find(a=>a.id===v.nodeId);return!!a&&"start"!==a.type}return!1},[v.selection,v.nodeId,w,f]);return(0,d.jsxs)(X,{ref:a=>{b&&("function"==typeof b?b(a):b.current=a),s&&(s.current=a),L.current=a},children:[(0,d.jsxs)(i.Gc,{nodes:f,edges:g,nodeTypes:U,edgeTypes:V,defaultEdgeOptions:(0,e.useMemo)(()=>({type:"custom",animated:!0,style:{stroke:c.palette.text.secondary,strokeWidth:2},markerEnd:{type:j.TG.ArrowClosed,width:20,height:20,color:c.palette.text.secondary}}),[c.palette.text.secondary]),connectionLineType:j.Do.SmoothStep,connectionMode:j.WZ.Loose,isValidConnection:aa,onNodesChange:h,onEdgesChange:l,onConnect:_,onBeforeDelete:ab,deleteKeyCode:["Backspace","Delete"],onDrop:p,onDragOver:q,onInit:ac,onNodeContextMenu:z,onEdgeContextMenu:B,onPaneContextMenu:E,onSelectionContextMenu:I,onKeyDown:al,onNodeDoubleClick:af,onConnectEnd:ag,tabIndex:0,fitView:!0,attributionPosition:"bottom-right",minZoom:.1,maxZoom:2,snapToGrid:!0,snapGrid:[15,15],connectOnClick:!1,children:[(0,d.jsx)(O,{}),(0,d.jsx)(P,{})]}),(0,d.jsx)(A,{open:v.open,position:v.position,onClose:x,onDelete:y,onEditProperties:ad,onToggleBidirectional:ae,onCopy:am,onPaste:ak,canPaste:an,canCopy:ao,nodeId:v.nodeId,selection:v.selection,edgeId:v.edgeId}),(0,d.jsx)(W,{open:Y.open,position:Y.position,onClose:ai,onSelectNodeType:ah,sourceNodeType:Y.sourceNodeType,sourceHandleId:Y.sourceHandleId})]})});Y.displayName="Canvas";let Z=Y},61220:(a,b,c)=>{c.d(b,{A:()=>P});var d=c(21124),e=c(38301),f=c(19815);async function g(a,b={}){return{text:"Speech recognition is only available in browser environments",success:!1,error:"Server-side transcription is not supported"}}c(4580),(0,f.h)("frontend/services/transcription");var h=c(49938),i=c(54573),j=c(81637),k=c(79515),l=c(44079),m=c(41893),n=c(37674),o=c(43312),p=c(95587),q=c(77028),r=c(40512),s=c(83899),t=c(52327),u=c(8521),v=c(19925),w=c(68730),x=c(70011),y=c(9258),z=c(73245),A=c(30137),B=c(88970),C=c(36698),D=c(12033),E=c(73821),F=c(46973),G=c(95791),H=c(60839),I=c(57361);let J=new Set(["start","process","subflow"]),K=a=>a.type??a.data?.type,L=({flow:a,selectedNodeId:b,onSelect:c,onClose:f})=>{let g=(0,H.A)(),h=(0,e.useMemo)(()=>(a?.nodes||[]).map(a=>{let c=J.has(K(a)||""),d=a.id===b;return{...a,draggable:!1,selectable:!1,style:{...a.style||{},opacity:c?1:.35,cursor:c?"pointer":"default",borderRadius:8,boxShadow:d?`0 0 0 3px ${g.palette.primary.main}`:void 0,transition:"box-shadow 120ms ease"}}}),[a?.nodes,b,g.palette.primary.main]),i=(0,e.useMemo)(()=>(a?.edges||[]).filter(a=>a.source&&a.target&&a.sourceHandle&&a.targetHandle),[a?.edges]),j=(0,e.useMemo)(()=>({type:"custom",animated:!1,style:{stroke:g.palette.text.secondary,strokeWidth:2},markerEnd:{type:F.TG.ArrowClosed,width:20,height:20,color:g.palette.text.secondary}}),[g.palette.text.secondary]);return(0,d.jsx)(G.Gc,{nodes:h,edges:i,nodeTypes:I.c_,edgeTypes:I.nd,defaultEdgeOptions:j,connectionLineType:F.Do.SmoothStep,fitView:!0,minZoom:.1,maxZoom:2,onNodeClick:(a,b)=>{J.has(K(b)||"")&&(c(b.id),f())},nodesDraggable:!1,nodesConnectable:!1,elementsSelectable:!1,deleteKeyCode:null,proOptions:{hideAttribution:!0},children:(0,d.jsx)(G.VS,{})})},M=({open:a,flow:b,selectedNodeId:c,allowAutomatic:e,onSelect:f,onClose:g})=>{let h=!!(b&&(b.nodes?.length??0)>0);return(0,d.jsxs)(r.A,{open:a,onClose:g,maxWidth:"lg",fullWidth:!0,children:[(0,d.jsx)(s.A,{children:"Pick a node to run on"}),(0,d.jsxs)(t.A,{dividers:!0,sx:{p:0},children:[(0,d.jsx)(j.default,{sx:{px:2,pt:1.5},children:(0,d.jsxs)(k.default,{variant:"caption",color:"text.secondary",children:["Click a ",(0,d.jsx)("strong",{children:"Start"}),", ",(0,d.jsx)("strong",{children:"Process"}),", or"," ",(0,d.jsx)("strong",{children:"Subflow"})," node. Other nodes and edges can't be picked."]})}),(0,d.jsx)(j.default,{sx:{height:"62vh",width:"100%"},children:h?(0,d.jsx)(G.Ln,{children:(0,d.jsx)(L,{flow:b,selectedNodeId:c,onSelect:f,onClose:g})}):(0,d.jsx)(j.default,{sx:{height:"100%",display:"flex",alignItems:"center",justifyContent:"center"},children:(0,d.jsx)(k.default,{variant:"body2",color:"text.secondary",children:"No flow to display."})})})]}),(0,d.jsxs)(v.A,{children:[e&&(0,d.jsx)(w.A,{startIcon:(0,d.jsx)(E.A,{}),onClick:()=>{f(null),g()},children:"Automatic"}),(0,d.jsx)(j.default,{sx:{flex:1}}),(0,d.jsx)(w.A,{onClick:g,children:"Cancel"})]})]})};var N=c(2117);let O=(0,f.h)("frontend/components/Chat/ChatInput"),P=({onSendMessage:a,disabled:b=!1,requireApproval:c=!1,onRequireApprovalChange:f,executeInDebugger:E=!1,onExecuteInDebuggerChange:F,availableNodes:G=[],flow:H=null,currentNodeId:I=null,nodeOverrideActive:J=!1,onSelectNode:K,editing:L=null,onEditingContentChange:P,onEditingNodeChange:Q,onSaveEdit:R,onCancelEdit:S})=>{let{settings:T}=(0,h.rX)(),[U,V]=(0,e.useState)(""),[W,X]=(0,e.useState)([]),[Y,Z]=(0,e.useState)(!1),[$,_]=(0,e.useState)(0),[aa,ab]=(0,e.useState)(null),ac=(0,e.useRef)(null),ad=(0,e.useRef)(null),ae=(0,e.useRef)([]),[af,ag]=(0,e.useState)(!1),ah=!!L,ai=ah?L?.nodeId??null:I,aj=(a=>G.find(b=>b.id===a)?.label||(a?`${a.substring(0,6)}...`:"Start"))(ai),[ak,al]=(0,e.useState)(!1),[am,an]=(0,e.useState)(""),[ao,ap]=(0,e.useState)(""),[aq,ar]=(0,e.useState)("document"),[as,at]=(0,e.useState)(null),[au,av]=(0,e.useState)(),[aw,ax]=(0,e.useState)(!1),[ay,az]=(0,e.useState)(0),[aA,aB]=(0,e.useState)(""),aC=()=>{L&&L.content.trim()&&R?.()},aD=()=>{(U.trim()||W.length>0)&&(O.debug("Sending message",{messageLength:U.length,attachmentsCount:W.length}),a(U,W),V(""),X([]))},aE=async a=>{let b=a.target.files;if(!b||0===b.length)return;let c=b[0];O.debug("File selected",{fileName:c.name,fileSize:c.size,fileType:c.type});try{let a=c.type||"application/octet-stream";if(a.startsWith("text/")||/\.(txt|md|json|csv|html?|xml|js|ts|jsx|tsx|css|scss)$/i.test(c.name)){ap(`Processing ${c.name}`),ar("document"),an(""),ax(!0),al(!0);let a=await aF(c);O.debug("File read successfully",{contentLength:a.length}),an(a),ax(!1)}else{let b=await aG(c),d=a.startsWith("image/")?"image":a.startsWith("audio/")?"audio":a.startsWith("video/")?"video":"document";X(e=>[...e,{id:(0,N.A)(),type:d,content:b,originalName:c.name,mimeType:a}])}}catch(a){O.error("Error reading file:",a),an("Error reading file. Please try again."),ax(!1)}ac.current&&(ac.current.value="")},aF=a=>new Promise((b,c)=>{let d=new FileReader;d.onload=a=>{a.target?.result?b(a.target.result):c(Error("Failed to read file"))},d.onerror=()=>{c(Error("Error reading file"))},d.readAsText(a)}),aG=a=>new Promise((b,c)=>{let d=new FileReader;d.onload=()=>"string"==typeof d.result?b(d.result):c(Error("Failed to encode file")),d.onerror=()=>c(Error("Error reading file")),d.readAsDataURL(a)}),aH=async()=>{O.debug("Starting audio recording");try{let a=await navigator.mediaDevices.getUserMedia({audio:!0});O.debug("Audio stream obtained successfully"),ae.current=[];let b=new MediaRecorder(a);ad.current=b,b.ondataavailable=a=>{a.data.size>0&&ae.current.push(a.data)},b.onstop=async()=>{let c=b.mimeType||ae.current[0]?.type||"audio/webm",d=new Blob(ae.current,{type:c});ap("Audio Recording"),ar("audio"),at(await aG(d)),av(c),an(""),ax(!0),al(!0);try{if((T?.speech||{enabled:!0,modelSize:"base",autoDownload:!1}).enabled){aB("Initializing transcription..."),az(0);let a=await g(d,{onProgress:az,onStatusChange:aB,language:navigator.language});if(a.success){let b=a.text;an(b),O.debug("Transcription successful",{textLength:a.text.length,engine:a.engine})}else an(`Error transcribing audio: ${a.error}.`),O.error("Transcription failed",{error:a.error})}else an("Speech recognition is disabled in settings. Enable it to get automatic transcriptions.")}catch(a){O.error("Error handling audio recording",{error:a}),an(`Failed to process audio: ${a}`)}finally{ax(!1),a.getTracks().forEach(a=>a.stop())}},b.start(),Z(!0);let c=setInterval(()=>{_(a=>a+1)},1e3);ab(c)}catch(a){O.error("Error starting recording:",a),alert("Could not access microphone. Please check permissions.")}};return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)(i.A,{elevation:3,sx:{p:2,display:"flex",flexDirection:"column",borderRadius:2},children:[W.length>0&&(0,d.jsx)(j.default,{sx:{mb:2,display:"flex",flexWrap:"wrap",gap:1},children:W.map(a=>(0,d.jsxs)(i.A,{variant:"outlined",sx:{p:1,display:"flex",alignItems:"center",borderRadius:1,bgcolor:"background.default"},children:["image"===a.type?(0,d.jsx)(j.default,{component:"img",src:a.content,alt:a.originalName||"pasted image",sx:{width:40,height:40,objectFit:"cover",borderRadius:1,mr:1}}):"video"===a.type?(0,d.jsx)(j.default,{component:"video",src:a.content,sx:{width:40,height:40,objectFit:"cover",borderRadius:1,mr:1}}):"document"===a.type?(0,d.jsx)(y.A,{fontSize:"small",sx:{mr:1}}):(0,d.jsx)(z.A,{fontSize:"small",sx:{mr:1}}),(0,d.jsx)(k.default,{variant:"body2",noWrap:!0,sx:{maxWidth:150},children:a.originalName||`${a.type} attachment`}),(0,d.jsx)(l.A,{size:"small",onClick:()=>(a=>{O.debug("Removing attachment",{id:a}),X(W.filter(b=>b.id!==a))})(a.id),sx:{ml:1},children:(0,d.jsx)(A.A,{fontSize:"small"})})]},a.id))}),ah&&(0,d.jsxs)(j.default,{sx:{mb:1,display:"flex",alignItems:"center",gap:1},children:[(0,d.jsx)(m.A,{icon:(0,d.jsx)(D.A,{}),label:"Editing message",size:"small",color:"warning",variant:"outlined"}),(0,d.jsx)(k.default,{variant:"caption",color:"text.secondary",children:"Enter to save \xb7 Esc to cancel"})]}),(0,d.jsxs)(j.default,{sx:{display:"flex",alignItems:"flex-end"},children:[(0,d.jsx)(n.A,{fullWidth:!0,multiline:!0,maxRows:ah?12:4,"data-tour":"chat-input",placeholder:ah?"Edit message...":"Type a message...",value:ah?L?.content??"":U,onChange:a=>{ah?P?.(a.target.value):V(a.target.value)},onKeyDown:a=>{"Enter"!==a.key||a.shiftKey?"Escape"===a.key&&ah&&(a.preventDefault(),S?.()):(a.preventDefault(),ah?aC():(O.debug("Enter key pressed, sending message"),aD()))},onPaste:a=>{let b=a.clipboardData?.items;if(!b)return;let c=[];for(let a=0;a<b.length;a++){let d=b[a];if("file"===d.kind&&d.type.startsWith("image/")){let a=d.getAsFile();a&&c.push(a)}}0!==c.length&&(a.preventDefault(),O.debug("Pasting image attachment(s)",{count:c.length}),c.forEach(a=>{let b=new FileReader;b.onload=b=>{let c=b.target?.result;if("string"!=typeof c)return;let d=(a.type.split("/")[1]||"png").split("+")[0];X(b=>[...b,{id:(0,N.A)(),type:"image",content:c,originalName:a.name&&!/^image\.\w+$/i.test(a.name)?a.name:`Pasted image.${d}`}])},b.onerror=()=>O.error("Failed to read pasted image"),b.readAsDataURL(a)}))},disabled:!ah&&b,variant:"outlined",autoFocus:ah,sx:{mr:1},InputProps:{sx:{borderRadius:2}}}),!ah&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(o.A,{title:"Attach document",children:(0,d.jsx)(l.A,{color:"primary",onClick:()=>{O.debug("File selection triggered"),ac.current?.click()},disabled:b||Y,children:(0,d.jsx)(y.A,{})})}),(0,d.jsx)("input",{type:"file",ref:ac,onChange:aE,style:{display:"none"},accept:"image/*,audio/*,video/*,.pdf,.txt,.md,.json,.csv,.html,.xml,.js,.ts,.jsx,.tsx,.css,.scss"}),(0,d.jsx)(o.A,{title:Y?"Stop recording":"Record audio",children:(0,d.jsxs)(l.A,{color:Y?"error":"primary",onClick:Y?()=>{O.debug("Stopping audio recording"),ad.current&&"inactive"!==ad.current.state&&(ad.current.stop(),Z(!1),aa&&(clearInterval(aa),ab(null)),_(0))}:aH,disabled:b,children:[(0,d.jsx)(z.A,{}),Y&&(0,d.jsx)(k.default,{variant:"caption",sx:{position:"absolute",bottom:-15,fontSize:"0.7rem",color:"error.main"},children:(a=>{let b=Math.floor(a/60);return`${b.toString().padStart(2,"0")}:${(a%60).toString().padStart(2,"0")}`})($)})]})})]}),ah?(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(o.A,{title:"Save edit",children:(0,d.jsx)("span",{children:(0,d.jsx)(l.A,{color:"primary",onClick:aC,disabled:!L?.content.trim(),children:(0,d.jsx)(C.A,{})})})}),(0,d.jsx)(o.A,{title:"Cancel edit",children:(0,d.jsx)(l.A,{color:"default",onClick:()=>S?.(),children:(0,d.jsx)(A.A,{})})})]}):(0,d.jsx)(o.A,{title:"Send message",children:(0,d.jsx)("span",{children:(0,d.jsx)(l.A,{color:"primary",onClick:aD,disabled:b||!U.trim()&&0===W.length,children:(0,d.jsx)(x.A,{})})})})]})," ",(f||(K||ah)&&G.length>0)&&(0,d.jsxs)(j.default,{sx:{mt:1,display:"flex",justifyContent:"flex-start",alignItems:"center",flexWrap:"wrap",gap:1},children:[(K||ah)&&G.length>0&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(o.A,{title:ah?"Node this message runs on — click to pick from the flow":J?"Next message will run on this manually picked node — click to change":"Node the next message will run on — click to pick from the flow",children:(0,d.jsx)(m.A,{icon:(0,d.jsx)(B.A,{}),label:aj,size:"small",color:ah||J?"primary":"default",variant:ah||J?"filled":"outlined",onClick:()=>ag(!0),disabled:!ah&&b})}),(0,d.jsx)(M,{open:af,flow:H,selectedNodeId:ai,allowAutomatic:!ah,onSelect:a=>{ah?Q?.(a):K?.(a)},onClose:()=>ag(!1)})]}),f&&(0,d.jsx)(p.A,{control:(0,d.jsx)(q.A,{checked:c,onChange:a=>f(a.target.checked),size:"small",disabled:b}),label:(0,d.jsx)(k.default,{variant:"caption",children:"Require Tool Approvals"}),sx:{mr:"auto"}}),F&&(0,d.jsx)(p.A,{control:(0,d.jsx)(q.A,{checked:E,onChange:a=>F(a.target.checked),size:"small",disabled:b}),label:(0,d.jsx)(k.default,{variant:"caption",children:"Execute in Debugger"}),sx:{ml:2}})]})," "]})," ",(0,d.jsxs)(r.A,{open:ak,onClose:()=>!aw&&al(!1),maxWidth:"md",fullWidth:!0,children:[(0,d.jsxs)(s.A,{children:[ao,!aw&&(0,d.jsx)(l.A,{"aria-label":"close",onClick:()=>al(!1),sx:{position:"absolute",right:8,top:8},children:(0,d.jsx)(A.A,{})})]}),(0,d.jsx)(t.A,{dividers:!0,children:aw?(0,d.jsxs)(j.default,{sx:{display:"flex",justifyContent:"center",flexDirection:"column",alignItems:"center",p:4},children:[(0,d.jsx)(u.default,{value:"audio"===aq&&ay?ay:void 0,variant:"audio"===aq&&ay>0?"determinate":"indeterminate"}),"audio"===aq&&(0,d.jsxs)(j.default,{sx:{mt:2,textAlign:"center"},children:[(0,d.jsx)(k.default,{variant:"body2",children:aA||"Processing audio..."}),ay>0&&(0,d.jsxs)(k.default,{variant:"body2",color:"text.secondary",sx:{mt:1},children:[Math.round(ay),"%"]})]})]}):(0,d.jsx)(n.A,{multiline:!0,fullWidth:!0,minRows:10,maxRows:20,value:am,onChange:a=>an(a.target.value),variant:"outlined",placeholder:"document"===aq?"Document content":"Audio transcription"})}),(0,d.jsxs)(v.A,{children:[(0,d.jsx)(w.A,{onClick:()=>al(!1),disabled:aw,children:"Cancel"}),(0,d.jsx)(w.A,{onClick:()=>{O.debug("Adding attachment",{type:aq,titleLength:ao.length}),X([...W,{id:(0,N.A)(),type:aq,content:"audio"===aq&&as?as:am,originalName:ao,..."audio"===aq&&au?{mimeType:au,transcript:am}:{}}]),at(null),av(void 0),al(!1)},variant:"contained",disabled:aw||!am.trim(),children:"Add to Message"})]})]})]})}},74855:(a,b,c)=>{c.d(b,{MG:()=>e,Ud:()=>f});var d=c(46973);d.TG.ArrowClosed;let e={type:"resourceEdge",animated:!1,style:{stroke:"#009688",strokeWidth:2},markerEnd:{type:d.TG.ArrowClosed,width:20,height:20,color:"#009688"}},f={type:"mcpEdge",animated:!1,style:{stroke:"#1976d2",strokeWidth:2},markerEnd:{type:d.TG.ArrowClosed,width:20,height:20,color:"#1976d2"},markerStart:{type:d.TG.ArrowClosed,width:20,height:20,color:"#1976d2"}}},90430:(a,b,c)=>{c.d(b,{Cm:()=>l,JL:()=>i,p9:()=>h,wn:()=>j,y2:()=>k});var d=c(74855),e=c(36627);function f(a,b,c){return b.filter(b=>!(0,e.BY)(b)&&(b.source===a?b.target!==c:!!(b.target===a&&b.data?.bidirectional)&&b.source!==c))}function g(a,b,c=[]){if(!a.source||!a.target||!a.sourceHandle||!a.targetHandle)return"Missing source, target, or handles";let d=b.find(b=>b.id===a.source),h=b.find(b=>b.id===a.target);if(!d||!h)return"Source or target node not found";let i=(0,e.vC)(d.type,a.sourceHandle,h.type,a.targetHandle);return i||("subflow"===d.type&&f(d.id,c,a.target).length>0?"Subflow nodes can only have one outgoing connection":null)}function h(a,b,c=[]){return null===g(a,b,c)}function i(a,b,c=[]){let d=g(a,b,c);return!d||(console.error(`Invalid connection: ${d}`,a),!1)}function j(a,b,c){let f=b.find(b=>b.id===a.source),g=b.find(b=>b.id===a.target),h=a.sourceHandle,i=a.targetHandle,j=f?.type==="mcp"||g?.type==="mcp"||(0,e.z5)(h)||(0,e.z5)(i),k=!j&&(f?.type==="resource"||g?.type==="resource"||(0,e.vM)(h)||(0,e.vM)(i)),l=`${a.source}:${h}->${a.target}:${i}`;return j?{id:l,...a,type:"mcpEdge",data:{edgeType:"mcp"},animated:!1,markerEnd:d.Ud.markerEnd,markerStart:d.Ud.markerStart,style:d.Ud.style}:k?{id:l,...a,type:"resourceEdge",data:{edgeType:"resource"},animated:!1,markerEnd:d.MG.markerEnd,style:d.MG.style}:{id:l,...a,type:"custom",data:{edgeType:"standard",...c?{condition:c}:{}},animated:!0}}function k(a,b,c=[]){let d=b.find(b=>b.id===a.source),g=b.find(b=>b.id===a.target);return!!d&&!!g&&("subflow"!==g.type||!(f(g.id,c,a.source).length>0))&&null===(0,e.vC)(g.type,null,d.type,null)}function l(a,b){let c=a=>a.data?.edgeType,d=a=>"mcp"===c(a),e=a=>"resource"===c(a);return b.filter(b=>b.id===a.id||(d(a)?d(b)&&(b.source===a.source&&b.target===a.target||b.source===a.target&&b.target===a.source):e(a)?e(b)&&b.source===a.source&&b.target===a.target:!d(b)&&!e(b)&&b.source===a.source&&b.target===a.target)).map(a=>a.id)}},97004:(a,b,c)=>{c.d(b,{R:()=>l,A:()=>r});var d=c(21124),e=c(38301),f=c(95791),g=c(46973),h=c(18168),i=c(60839);function j(a){return a===g.yX.Left||a===g.yX.Right?"h":"v"}var k=c(29237);let l="flowEdgeWaypoint",m={x:16,y:-16},n=(0,h.Ay)("button")(({theme:a})=>({background:a.palette.background.paper,border:`1px solid ${a.palette.divider}`,cursor:"pointer",borderRadius:"50%",fontSize:"10px",width:"20px",height:"20px",display:"flex",justifyContent:"center",alignItems:"center",color:a.palette.text.secondary,boxShadow:"dark"===a.palette.mode?"0 2px 4px rgba(0,0,0,0.3)":"0 2px 4px rgba(0,0,0,0.1)","&:hover":{background:a.palette.error.main,borderColor:a.palette.error.main,color:a.palette.error.contrastText}})),o=(0,h.Ay)(f.tE)({"&&.animated":{strokeDasharray:5,animation:"flowPathAnimation 500ms infinite linear"},"&&.animated-both":{strokeDasharray:5,animation:"flowPathAnimation 750ms infinite linear alternate"},"@keyframes flowPathAnimation":{"0%":{strokeDashoffset:10},"100%":{strokeDashoffset:0}}}),p="#009688",q="#4DB6AC",r=({variant:a,id:b,source:c,target:h,sourceHandleId:r,targetHandleId:s,sourceX:t,sourceY:u,targetX:v,targetY:w,sourcePosition:x,targetPosition:y,style:z={},markerEnd:A,markerStart:B,data:C,selected:D})=>{let E,F,G=(0,i.A)(),{deleteElements:H,screenToFlowPosition:I,getNode:J}=(0,f.VH)(),[K,L]=(0,e.useState)(!1),[M,N]=(0,e.useState)(null),O=(0,e.useRef)(null),P=(0,e.useRef)(!1),Q="standard"===a&&C?.condition?(0,k.P2)(C.condition):"",R=a=>!!a&&a.includes("process")&&a.includes("resource"),S="";if("resource"===a){let a=J(c)?.type,b=J(h)?.type;"resource"===a&&"process"===b?S="consume":"process"===a&&"resource"===b||R(r)?S="produce":R(s)&&(S="consume")}let T=C?.waypoints??(C?.waypoint?[C.waypoint]:[]),U=M??T,V="standard"===a&&!!C?.bidirectional,W="mcp"===a||"resource"===a,X=x||(W?g.yX.Left:g.yX.Bottom),Y=y||(W?g.yX.Right:g.yX.Top),Z=null;if(U.length>0)E=(Z=function(a,b,c,d,e,f=8){let g=[a,...e,c],h=[a],i=[],j=b,k=(a,b)=>{let c;c=h[h.length-1],.01>Math.abs(c.x-a.x)&&.01>Math.abs(c.y-a.y)||(h.push(a),i.push(b))};for(let a=1;a<g.length;a++){let b=h[h.length-1],c=g[a],e=a-1;if(a===g.length-1){if("v"===d)if("h"===j)k({x:c.x,y:b.y},e);else{let a=(b.y+c.y)/2;k({x:b.x,y:a},e),k({x:c.x,y:a},e)}else if("v"===j)k({x:b.x,y:c.y},e);else{let a=(b.x+c.x)/2;k({x:a,y:b.y},e),k({x:a,y:c.y},e)}k(c,e)}else k("v"===j?{x:b.x,y:c.y}:{x:c.x,y:b.y},e),k(c,e),j="v"===j?"h":"v"}!function(a,b){for(let c=1;c<a.length-1;c++){let d=a[c-1],e=a[c],f=a[c+1],g=.01>Math.abs(d.x-e.x)&&.01>Math.abs(f.x-e.x)&&(e.y-d.y)*(f.y-e.y)<0,h=.01>Math.abs(d.y-e.y)&&.01>Math.abs(f.y-e.y)&&(e.x-d.x)*(f.x-e.x)<0;if(g||h){if(g){let g=(a[c-2]?.x??e.x-1)<=e.x,h=g?e.x-12:e.x+12,i=g?e.x+12:e.x-12,j=b[c-1];a.splice(c-1,3,{x:h,y:d.y},{x:h,y:e.y},{x:i,y:e.y},{x:i,y:f.y}),b.splice(c-1,2,j,j,j)}else{let g=(a[c-2]?.y??e.y-1)<=e.y,h=g?e.y-12:e.y+12,i=g?e.y+12:e.y-12,j=b[c-1];a.splice(c-1,3,{x:d.x,y:h},{x:e.x,y:h},{x:e.x,y:i},{x:f.x,y:i}),b.splice(c-1,2,j,j,j)}c++}}}(h,i);let l=[];for(let a=0;a<h.length-1;a++)l.push({a:h[a],b:h[a+1],gap:i[a]});return{d:function(a,b){if(0===a.length)return"";let c=`M ${a[0].x},${a[0].y}`;for(let d=1;d<a.length-1;d++){let e=a[d-1],f=a[d],g=a[d+1],h=Math.hypot(f.x-e.x,f.y-e.y),i=Math.hypot(g.x-f.x,g.y-f.y),j=Math.min(b,h/2,i/2);if(j<.5){c+=` L ${f.x},${f.y}`;continue}let k={x:f.x-(f.x-e.x)/h*j,y:f.y-(f.y-e.y)/h*j},l={x:f.x+(g.x-f.x)/i*j,y:f.y+(g.y-f.y)/i*j};c+=` L ${k.x},${k.y} Q ${f.x},${f.y} ${l.x},${l.y}`}let d=a[a.length-1];return c+` L ${d.x},${d.y}`}(h,f),points:h,segments:l,midpoint:function(a,b){let c=0;for(let b=0;b<a.length-1;b++)c+=Math.hypot(a[b+1].x-a[b].x,a[b+1].y-a[b].y);if(0===c)return a[0];let d=.5*c;for(let b=0;b<a.length-1;b++){let c=Math.hypot(a[b+1].x-a[b].x,a[b+1].y-a[b].y);if(d<=c){let e=0===c?0:d/c;return{x:a[b].x+(a[b+1].x-a[b].x)*e,y:a[b].y+(a[b+1].y-a[b].y)*e}}d-=c}return a[a.length-1]}(h,.5)}}({x:t,y:u},j(X),{x:v,y:w},j(Y),U,16)).d,F=Z.midpoint;else{let[a,b,c]=(0,g.oN)({sourceX:t,sourceY:u,sourcePosition:X,targetX:v,targetY:w,targetPosition:Y,borderRadius:16});E=a,F={x:b,y:c}}let $=W?"":V?"animated-both":C?.animated!==!1?"animated":"",_={...z,strokeWidth:D?3:2,stroke:"mcp"===a?D?G.palette.info.light:G.palette.info.main:"resource"===a?D?q:p:D?G.palette.primary.main:G.palette.text.secondary,..."resource"===a?{strokeDasharray:"6 4"}:{},...$?{animationDuration:`${Math.round((V?750:500)*(a=>{let b=0;for(let c=0;c<a.length;c++)b=31*b+a.charCodeAt(c)|0;return .9+Math.abs(b)%1e3/1e3*.2})(b))}ms`}:{}},aa=a=>{document.dispatchEvent(new CustomEvent(l,{detail:{edgeId:b,waypoints:a&&a.length>0?a:null}}))},ab=a=>{if(0!==a.button)return;let b=I({x:a.clientX,y:a.clientY}),c=Z?function(a,b){let c=0,d=1/0;for(let e of b){let b=function(a,b,c){let d=c.x-b.x,e=c.y-b.y,f=d*d+e*e,g=0===f?0:Math.max(0,Math.min(1,((a.x-b.x)*d+(a.y-b.y)*e)/f));return Math.hypot(a.x-(b.x+d*g),a.y-(b.y+e*g))}(a,e.a,e.b);b<d&&(d=b,c=e.gap)}return c}(b,Z.segments):0,d=[...U];d.splice(c,0,b),O.current={index:c,pointerId:a.pointerId,startClient:{x:a.clientX,y:a.clientY},base:d,active:!1,fromPath:!0},a.target.setPointerCapture(a.pointerId)},ac=a=>{let b=O.current;if(!b||a.pointerId!==b.pointerId)return;if(!b.active){if(4>Math.hypot(a.clientX-b.startClient.x,a.clientY-b.startClient.y))return;b.active=!0}let c=[...b.base];c[b.index]=I({x:a.clientX,y:a.clientY}),N(c)},ad=a=>{let b=O.current;if(!b||a.pointerId!==b.pointerId||(O.current=null,a.target.releasePointerCapture(a.pointerId),P.current=b.active,!b.active))return;let c=[...b.base];c[b.index]=I({x:a.clientX,y:a.clientY}),aa(c),N(null)},ae=null!==M,af=D||K||ae;return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(o,{path:E,markerEnd:A,markerStart:B,style:_,id:b,className:$}),(0,d.jsx)("path",{d:E,fill:"none",stroke:"transparent",strokeWidth:20,style:{cursor:ae?"grabbing":"grab"},onMouseEnter:()=>L(!0),onMouseLeave:()=>L(!1),onPointerDown:ab,onPointerMove:ac,onPointerUp:ad}),(0,d.jsxs)(f.rV,{children:[Q&&(0,d.jsx)("div",{style:{position:"absolute",transform:`translate(-50%, -50%) translate(${F.x}px,${F.y-18}px)`,pointerEvents:"none",background:G.palette.info.main,color:G.palette.info.contrastText,borderRadius:4,padding:"1px 6px",fontSize:10,fontWeight:600,whiteSpace:"nowrap",boxShadow:G.shadows[1],zIndex:1002},className:"nodrag nopan",title:`Routing condition: ${Q}`,children:Q}),S&&(0,d.jsx)("div",{style:{position:"absolute",transform:`translate(-50%, -50%) translate(${F.x}px,${F.y-18}px)`,pointerEvents:"none",background:D?q:p,color:"#ffffff",borderRadius:4,padding:"1px 6px",fontSize:10,fontWeight:600,whiteSpace:"nowrap",boxShadow:G.shadows[1],zIndex:1002},className:"nodrag nopan",title:"consume"===S?"This step consumes (reads) the resource":"This step produces (writes) the resource",children:S}),af&&U.map((a,b)=>(0,d.jsx)("div",{style:{position:"absolute",transform:`translate(-50%, -50%) translate(${a.x}px,${a.y}px)`,width:12,height:12,borderRadius:"50%",background:G.palette.primary.main,border:`2px solid ${G.palette.background.paper}`,boxShadow:G.shadows[1],cursor:"move",pointerEvents:"all",touchAction:"none",zIndex:1001},className:"nodrag nopan",title:"Drag to move; double-click to remove this bend",onMouseEnter:()=>L(!0),onMouseLeave:()=>L(!1),onPointerDown:a=>{0===a.button&&(a.stopPropagation(),O.current={index:b,pointerId:a.pointerId,startClient:{x:a.clientX,y:a.clientY},base:[...U],active:!1,fromPath:!1},a.target.setPointerCapture(a.pointerId))},onPointerMove:ac,onPointerUp:ad,onDoubleClick:a=>{a.stopPropagation(),(a=>{let b=U.filter((b,c)=>c!==a);N(null),aa(b)})(b)}},b)),(0,d.jsx)("div",{style:{position:"absolute",transform:`translate(-50%, -50%) translate(${F.x+m.x}px,${F.y+m.y}px)`,pointerEvents:af&&!ae?"all":"none",opacity:af&&!ae?1:0,transition:"opacity 120ms ease",zIndex:1e3},className:"nodrag nopan",onMouseEnter:()=>L(!0),onMouseLeave:()=>L(!1),children:(0,d.jsx)(n,{title:"Delete connection (drag to re-route)",style:{touchAction:"none"},onPointerDown:ab,onPointerMove:ac,onPointerUp:ad,onClick:a=>{if(a.stopPropagation(),P.current){P.current=!1;return}H({edges:[{id:b}]})},children:"\xd7"})})]})]})}},98502:(a,b,c)=>{c.d(b,{E9:()=>f,RN:()=>e,n9:()=>d});let d="handoff_to_";function e(a,b){let c=(a&&a.trim()||b&&b.trim()||"node").toLowerCase().replace(/[^a-z0-9]+/g,"_").replace(/_+/g,"_").replace(/^_+|_+$/g,"");return c.length>48&&(c=c.slice(0,48).replace(/_+$/g,"")),c||(c=b&&b.trim().toLowerCase().replace(/[^a-z0-9]+/g,"_")||"node"),c||"node"}function f(a){let b=new Set,c=new Map;for(let f of a){if(c.has(f.id))continue;let a=e(f.label,f.type),g=`${d}${a}`;if(b.has(g)){let c=2;for(;b.has(`${d}${a}_${c}`);)c++;g=`${d}${a}_${c}`}b.add(g),c.set(f.id,g)}return c}}};
@@ -1 +1 @@
1
- "use strict";exports.id=4265,exports.ids=[4265],exports.modules={14265:(a,b,c)=>{let d;c.d(b,{LG:()=>T,aM:()=>S,a$:()=>Q,e3:()=>O});var e=c(50846),f=c(8665),g=c(25250),h=c(60453),i=c(92372);let j=(0,e.h)("backend/services/mcp/quality/cache"),k="mcp-quality-cache";class l{constructor(a=Date.now()){this.entries={},this.dirty=!1,this.now=a}async load(){try{let a=await (0,i.YM)(k,{entries:{}});this.entries=a?.entries&&"object"==typeof a.entries?a.entries:{}}catch(a){j.warn("Failed to load quality cache; starting empty",a),this.entries={}}}get(a,b){let c=this.entries[`${a}::${b}`];if(c&&!(this.now-c.at>864e5))return c.signal}set(a,b,c){this.entries[`${a}::${b}`]={at:this.now,signal:c},this.dirty=!0}async flush(){let a=!1;for(let[b,c]of Object.entries(this.entries))this.now-c.at>864e5&&(delete this.entries[b],a=!0);if(this.dirty||a)try{await (0,i.VH)(k,{entries:this.entries})}catch(a){j.warn("Failed to persist quality cache",a)}}}function m(a){return!Number.isFinite(a)||a<0?0:a>1?1:a}function n(a,b){return!Number.isFinite(a)||a<=0?0:!Number.isFinite(b)||b<=1?+(a>0):m(Math.log10(a+1)/Math.log10(b+1))}let o=(0,e.h)("backend/services/mcp/quality/providers/githubStars"),p="github",q=new Map;function r(){return d??(process.env.GITHUB_TOKEN||void 0)}function s(a){let b,c=a.server.repository;if(c?.source&&"github"!==c.source.toLowerCase())return null;var d=c?.url;if(!d)return null;try{b=new URL(d.replace(/^git\+/,""))}catch{return null}if(!/(^|\.)github\.com$/i.test(b.hostname))return null;let e=b.pathname.replace(/\.git$/i,"").split("/").filter(Boolean);return e.length<2?null:`${e[0]}/${e[1]}`.toLowerCase()}async function t(a,b){let c=new AbortController,d=()=>c.abort();b.addEventListener("abort",d,{once:!0});let e=setTimeout(()=>c.abort(),6e3);try{return await fetch(`https://api.github.com${a}`,{headers:function(){let a={Accept:"application/vnd.github+json","User-Agent":"FLUJO-mcp-quality","X-GitHub-Api-Version":"2022-11-28"},b=r();return b&&(a.Authorization=`Bearer ${b}`),a}(),signal:c.signal,cache:"no-store"})}catch(b){return o.warn(`GitHub request failed (${a})`,b instanceof Error?b.message:b),null}finally{clearTimeout(e),b.removeEventListener("abort",d)}}function u(a){return(403===a.status||429===a.status)&&"0"===a.headers.get("x-ratelimit-remaining")}let v=(0,e.h)("backend/services/mcp/quality/providers/npmDownloads"),w="npm-downloads",x=new Map;function y(a){for(let b of a.server.packages??[])if("npm"===b.registryType&&b.identifier)return b.identifier;return null}function z(a){return a.startsWith("@")}async function A(a,b){let c=new AbortController,d=()=>c.abort();b.addEventListener("abort",d,{once:!0});let e=setTimeout(()=>c.abort(),6e3);try{return await fetch(`https://api.npmjs.org${a}`,{signal:c.signal,cache:"no-store"})}catch(b){return v.warn(`npm request failed (${a})`,b instanceof Error?b.message:b),null}finally{clearTimeout(e),b.removeEventListener("abort",d)}}let B="registry-status",C=[{id:p,label:"GitHub Stars & Activity",defaultWeight:.5,isApplicable:a=>null!==s(a),cacheKey:a=>s(a),async prefetch(a,b,c){let d=`${a??""} mcp`.trim(),e=`/search/repositories?q=${encodeURIComponent(d)}&sort=stars&order=desc&per_page=50`,f=await t(e,c);if(f&&f.ok)try{for(let a of(await f.json()).items??[])a.full_name&&q.set(a.full_name.toLowerCase(),{stars:"number"==typeof a.stargazers_count?a.stargazers_count:0,pushedAtMs:a.pushed_at?Date.parse(a.pushed_at):null})}catch(a){o.warn("Failed to parse GitHub search response",a)}else if(f&&u(f))return void o.warn("GitHub search rate-limited; ranking will degrade to other providers");if(!r())return;let g=3;for(let a of b){if(g<=0)break;let b=s(a);if(!b||q.has(b))continue;g-=1;let d=await t(`/repos/${b}`,c);if(d){if(u(d))break;if(d.ok)try{let a=await d.json();q.set(b,{stars:"number"==typeof a.stargazers_count?a.stargazers_count:0,pushedAtMs:a.pushed_at?Date.parse(a.pushed_at):null})}catch{}}}},async fetch(a){let b=s(a);if(!b)return null;let c=q.get(b);if(!c)return null;let d=n(c.stars,5e4),e=function(a,b,c=30,d=730){if(!a||!Number.isFinite(a))return 0;let e=(b-a)/864e5;return e<=c?1:e>=d?0:m(1-(e-c)/(d-c))}(c.pushedAtMs,Date.now());return{providerId:p,score:m(.7*d+.3*e),evidence:{repo:b,stars:c.stars,...c.pushedAtMs?{pushedAt:new Date(c.pushedAtMs).toISOString()}:{},starsScore:d,recencyScore:e}}}},{id:w,label:"npm Weekly Downloads",defaultWeight:.35,isApplicable:a=>null!==y(a),cacheKey:a=>y(a),async prefetch(a,b,c){let d=b.map(y).filter(a=>!!a&&!x.has(a)),e=d.filter(a=>!z(a)),f=d.filter(z);for(let a=0;a<e.length;a+=100){let b=e.slice(a,a+100),d=await A(`/downloads/point/last-week/${b.join(",")}`,c);if(d&&d.ok)try{let a=await d.json();if(1===b.length)"number"==typeof a.downloads&&x.set(b[0],a.downloads);else for(let c of b){let b=a[c];x.set(c,b&&"number"==typeof b.downloads?b.downloads:0)}}catch(a){v.warn("Failed to parse npm bulk downloads response",a)}}for(let a of f){let b=await A(`/downloads/point/last-week/${a}`,c);if(b&&b.ok)try{let c=await b.json();"number"==typeof c.downloads&&x.set(a,c.downloads)}catch{}}},async fetch(a){let b=y(a);if(!b)return null;let c=x.get(b);return void 0===c?null:{providerId:w,score:n(c,1e6),evidence:{package:b,weeklyDownloads:c}}}},{id:B,label:"Registry Status",defaultWeight:.15,isApplicable:a=>!0,cacheKey:()=>null,fetch:async a=>({providerId:B,score:+("active"===a.verificationStatus),evidence:{status:a.verificationStatus}})}];var D=c(38844);let E=(0,e.h)("backend/services/mcp/quality/settings");function F(){return{providers:C.map(a=>({id:a.id,enabled:!0,weight:a.defaultWeight})),minScore:0,worksGate:!0}}async function G(){try{let a=await (0,i.YM)(D.Z.MCP_QUALITY_SETTINGS,F());return function(a){var b,c;let d=F(),e=a??{},f=new Map;if(Array.isArray(e.providers))for(let a of e.providers)a&&"string"==typeof a.id&&f.set(a.id,a);return{providers:d.providers.map(a=>{let b=f.get(a.id);return{id:a.id,enabled:"boolean"==typeof b?.enabled?b.enabled:a.enabled,weight:"number"==typeof b?.weight&&Number.isFinite(b.weight)&&b.weight>=0?b.weight:a.weight}}),minScore:(b=e.minScore,c=d.minScore,"number"==typeof b&&Number.isFinite(b)?Math.min(1,Math.max(0,b)):c),worksGate:"boolean"==typeof e.worksGate?e.worksGate:d.worksGate,..."string"==typeof e.githubToken&&e.githubToken.length>0?{githubToken:e.githubToken}:{}}}(a)}catch(a){return E.warn("Failed to load mcpQuality settings; using defaults",a),F()}}let H=(0,e.h)("backend/services/mcp/quality/orchestrator");async function I(a,b){let c=new AbortController,d=setTimeout(()=>c.abort(),b);try{return await a(c.signal)}finally{clearTimeout(d)}}async function J(a,b,c={}){let e=c.topN??10;try{var f;let g=c.settings??await G(),h=C.filter(a=>(function(a,b){let c=a.providers.find(a=>a.id===b);return!!c?.enabled})(g,a.id));if(0===h.length)return b.map(a=>({candidate:a,score:0,signals:[]}));d=(f=g.githubToken)&&f.length>0?f:void 0;let i=b.slice(0,e),j=b.slice(e),k=new l(c.now??Date.now());await k.load();let n=i.map(()=>[]);for(let b of h){let c=i.map((a,b)=>({c:a,i:b})).filter(({c:a})=>b.isApplicable(a)),d=[],e=[];for(let a of c){let c=b.cacheKey(a.c);if(c){let d=k.get(b.id,c);if(d){e.push({i:a.i,signal:d});continue}}d.push(a)}if(b.prefetch&&d.length>0)try{await I(c=>b.prefetch(a,d.map(a=>a.c),c),12e3)}catch(a){H.warn(`Provider "${b.id}" prefetch failed; degrading`,a)}for(let{c:a,i:c}of d)try{let d=await I(c=>b.fetch(a,c),2e3);if(d){n[c].push(d);let e=b.cacheKey(a);e&&k.set(b.id,e,d)}}catch(c){H.warn(`Provider "${b.id}" fetch failed for "${a.registryName}"`,c)}for(let{i:a,signal:b}of e)n[a].push(b)}await k.flush();let o=i.map((a,b)=>{let c=n[b],d=new Map(c.map(a=>[a.providerId,a])),e=h.filter(b=>b.isApplicable(a)).map(a=>({providerId:a.id,weight:function(a,b){let c=a.providers.find(a=>a.id===b);return c&&c.enabled?c.weight:0}(g,a.id),score:d.get(a.id)?.score??0})),{score:f}=function(a){let b=0,c=0;for(let d of a){let a=Number.isFinite(d.weight)&&d.weight>0?d.weight:0,e=m(d.score);b+=a,c+=a*e}return{score:b>0?c/b:0,breakdown:a}}(e);return{candidate:a,score:f,signals:c}}).map((a,b)=>({s:a,idx:b})).sort((a,b)=>b.s.score-a.s.score||a.idx-b.idx).map(a=>a.s),p=j.map(a=>({candidate:a,score:0,signals:[]}));return[...o,...p]}catch(a){return H.warn("enrichAndRank failed; returning unranked candidates",a),b.map(a=>({candidate:a,score:0,signals:[]}))}}let K=(0,e.h)("backend/services/mcp/registryInstall"),L="/v0.1/servers";function M(a){return{registryName:a.server.name,server:a.server,verificationStatus:(0,g.vf)(a)}}function N(a){let b=b=>a.signals.find(a=>a.providerId===b)?.evidence,c=b(p),d=b(w),e=b(B);return{score:a.score,..."number"==typeof c?.stars?{stars:c.stars}:{},..."number"==typeof d?.weeklyDownloads?{weeklyDownloads:d.weeklyDownloads}:{},..."string"==typeof e?.status?{status:e.status}:{}}}async function O(a,b=8){let c=await P(a,b);return(await J(a,c.map(M))).map(a=>(function(a,b){let c=(0,g.AH)(a),d=c[0];return{name:a.name,...a.title?{title:a.title}:{},...a.description?{description:a.description}:{},installable:c.length>0,requiredEnv:d?(0,g.jg)(d):[],...b?{quality:N(b)}:{}}})(a.candidate.server,a))}async function P(a,b){let c=new URL(f.jD+L);c.searchParams.set("version","latest"),c.searchParams.set("limit",String(Math.min(Math.max(b,1),30))),a&&c.searchParams.set("search",a);let d=await (0,f.Ws)(c,15e3);return Array.isArray(d?.servers)?d.servers:[]}async function Q(a,b){try{let c=await J(a,b.map(M)),d=new Map(b.map(a=>[a.server.name,a])),e=[];for(let a of c){let b=d.get(a.candidate.server.name);b&&e.push(a.signals.length>0?{...b,quality:N(a)}:b)}return e.length===b.length?e:b}catch{return b}}async function R(a){let b=new URL(f.jD+L);b.searchParams.set("version","latest"),b.searchParams.set("limit","10"),b.searchParams.set("search",a);let c=await (0,f.Ws)(b,15e3),d=Array.isArray(c?.servers)?c.servers:[];return d.find(b=>b.server?.name===a)??d[0]??null}async function S(a,b,c){let d;if(!a||"string"!=typeof a)return{installed:!1,error:"A registry server name is required"};try{d=await R(a)}catch(a){return{installed:!1,error:`Registry lookup failed: ${a instanceof Error?a.message:String(a)}`}}let e=d?.server??null;if(!e)return{installed:!1,error:`No registry entry found for "${a}"`};let f=(0,g.AH)(e)[0];if(!f)return{installed:!1,error:`"${e.name}" has no install method FLUJO supports (stdio package or HTTP remote)`};let i=(0,g.vf)(d),j=(0,g.O$)(a,e,f,i);if(c?.resolveOnly)return{installed:!1,serverName:j.serverName,plan:j};let k=(0,g.jg)(f,b);if(k.length>0)return{installed:!1,needsEnv:k,plan:j,error:`"${e.name}" requires values for: ${k.join(", ")}`};let l=(0,g.cy)((0,g.Yr)(e,f),b),m=l.name,n=await h.mcpService.loadServerConfigs();if(Array.isArray(n)&&n.some(a=>a.name===m)){K.info(`installRegistryServer: "${m}" already configured; reusing`);let{tools:a,error:b}=await h.mcpService.listServerTools(m);return{installed:!0,alreadyExisted:!0,serverName:m,plan:j,tools:(a??[]).map(a=>({name:a.name,...a.description?{description:a.description}:{}})),...b?{error:b}:{}}}K.info(`installRegistryServer: installing "${e.name}" as "${m}" (${f.kind})`);let o=await h.mcpService.updateServerConfig(m,l);if(!Array.isArray(o)&&o&&"success"in o&&!1===o.success)return{installed:!1,error:`Saving the server failed: ${o.error??"unknown error"}`};let{tools:p,error:q}=await h.mcpService.listServerTools(m),r=(p??[]).map(a=>({name:a.name,...a.description?{description:a.description}:{}}));if((c?.worksGate??(await G()).worksGate)&&0===r.length){K.warn(`installRegistryServer: "${m}" exposed no tools${q?` (${q})`:""}; rolling back (works-gate)`);try{await h.mcpService.deleteServerConfig(m)}catch(a){K.error(`installRegistryServer: rollback of "${m}" failed`,a)}return{installed:!1,worksGateRejected:!0,serverName:m,plan:j,error:q?`"${e.name}" failed to start: ${q}`:`"${e.name}" connected but exposed no tools — rejected by the works-gate. Try a different server.`}}return{installed:!0,serverName:m,plan:j,tools:r,...q?{error:q}:{}}}async function T(a,b,c){let d;if(!a||"string"!=typeof a)return{installed:!1,error:"A capability search query is required"};try{d=await P(a,10)}catch(a){return{installed:!1,error:`Registry lookup failed: ${a instanceof Error?a.message:String(a)}`}}let e=await J(a,d.map(M)),f=await G(),h=c?.minScore??f.minScore,i=c?.maxAttempts??3,j=[],k=0;for(let a of e){let d=a.candidate.registryName;if(a.score<h){j.push({name:d,score:a.score,reason:`below minScore ${h}`});break}if(0===(0,g.AH)(a.candidate.server).length){j.push({name:d,score:a.score,reason:"no supported install method"});continue}if(k>=i)break;k+=1;let e=await S(d,b,{worksGate:!0});if(c?.onAttempt)try{await c.onAttempt(e.plan,e)}catch(a){K.error("installBestForCapability: onAttempt hook failed",a)}if(e.installed)return{...e,attempts:j};let f=e.needsEnv?.length?`needs env: ${e.needsEnv.join(", ")}`:e.worksGateRejected?"works-gate rejected (no tools / failed to start)":e.error??"install failed";j.push({name:d,score:a.score,reason:f})}return{installed:!1,attempts:j,error:`No working server found for "${a}" among the top ${k} installable candidate(s).`}}}};
1
+ "use strict";exports.id=4265,exports.ids=[4265],exports.modules={14265:(a,b,c)=>{let d;c.d(b,{LG:()=>T,aM:()=>S,a$:()=>Q,e3:()=>O});var e=c(50846),f=c(8665),g=c(25250),h=c(60453),i=c(92372);let j=(0,e.h)("backend/services/mcp/quality/cache"),k="mcp-quality-cache";class l{constructor(a=Date.now()){this.entries={},this.dirty=!1,this.now=a}async load(){try{let a=await (0,i.loadItem)(k,{entries:{}});this.entries=a?.entries&&"object"==typeof a.entries?a.entries:{}}catch(a){j.warn("Failed to load quality cache; starting empty",a),this.entries={}}}get(a,b){let c=this.entries[`${a}::${b}`];if(c&&!(this.now-c.at>864e5))return c.signal}set(a,b,c){this.entries[`${a}::${b}`]={at:this.now,signal:c},this.dirty=!0}async flush(){let a=!1;for(let[b,c]of Object.entries(this.entries))this.now-c.at>864e5&&(delete this.entries[b],a=!0);if(this.dirty||a)try{await (0,i.VH)(k,{entries:this.entries})}catch(a){j.warn("Failed to persist quality cache",a)}}}function m(a){return!Number.isFinite(a)||a<0?0:a>1?1:a}function n(a,b){return!Number.isFinite(a)||a<=0?0:!Number.isFinite(b)||b<=1?+(a>0):m(Math.log10(a+1)/Math.log10(b+1))}let o=(0,e.h)("backend/services/mcp/quality/providers/githubStars"),p="github",q=new Map;function r(){return d??(process.env.GITHUB_TOKEN||void 0)}function s(a){let b,c=a.server.repository;if(c?.source&&"github"!==c.source.toLowerCase())return null;var d=c?.url;if(!d)return null;try{b=new URL(d.replace(/^git\+/,""))}catch{return null}if(!/(^|\.)github\.com$/i.test(b.hostname))return null;let e=b.pathname.replace(/\.git$/i,"").split("/").filter(Boolean);return e.length<2?null:`${e[0]}/${e[1]}`.toLowerCase()}async function t(a,b){let c=new AbortController,d=()=>c.abort();b.addEventListener("abort",d,{once:!0});let e=setTimeout(()=>c.abort(),6e3);try{return await fetch(`https://api.github.com${a}`,{headers:function(){let a={Accept:"application/vnd.github+json","User-Agent":"FLUJO-mcp-quality","X-GitHub-Api-Version":"2022-11-28"},b=r();return b&&(a.Authorization=`Bearer ${b}`),a}(),signal:c.signal,cache:"no-store"})}catch(b){return o.warn(`GitHub request failed (${a})`,b instanceof Error?b.message:b),null}finally{clearTimeout(e),b.removeEventListener("abort",d)}}function u(a){return(403===a.status||429===a.status)&&"0"===a.headers.get("x-ratelimit-remaining")}let v=(0,e.h)("backend/services/mcp/quality/providers/npmDownloads"),w="npm-downloads",x=new Map;function y(a){for(let b of a.server.packages??[])if("npm"===b.registryType&&b.identifier)return b.identifier;return null}function z(a){return a.startsWith("@")}async function A(a,b){let c=new AbortController,d=()=>c.abort();b.addEventListener("abort",d,{once:!0});let e=setTimeout(()=>c.abort(),6e3);try{return await fetch(`https://api.npmjs.org${a}`,{signal:c.signal,cache:"no-store"})}catch(b){return v.warn(`npm request failed (${a})`,b instanceof Error?b.message:b),null}finally{clearTimeout(e),b.removeEventListener("abort",d)}}let B="registry-status",C=[{id:p,label:"GitHub Stars & Activity",defaultWeight:.5,isApplicable:a=>null!==s(a),cacheKey:a=>s(a),async prefetch(a,b,c){let d=`${a??""} mcp`.trim(),e=`/search/repositories?q=${encodeURIComponent(d)}&sort=stars&order=desc&per_page=50`,f=await t(e,c);if(f&&f.ok)try{for(let a of(await f.json()).items??[])a.full_name&&q.set(a.full_name.toLowerCase(),{stars:"number"==typeof a.stargazers_count?a.stargazers_count:0,pushedAtMs:a.pushed_at?Date.parse(a.pushed_at):null})}catch(a){o.warn("Failed to parse GitHub search response",a)}else if(f&&u(f))return void o.warn("GitHub search rate-limited; ranking will degrade to other providers");if(!r())return;let g=3;for(let a of b){if(g<=0)break;let b=s(a);if(!b||q.has(b))continue;g-=1;let d=await t(`/repos/${b}`,c);if(d){if(u(d))break;if(d.ok)try{let a=await d.json();q.set(b,{stars:"number"==typeof a.stargazers_count?a.stargazers_count:0,pushedAtMs:a.pushed_at?Date.parse(a.pushed_at):null})}catch{}}}},async fetch(a){let b=s(a);if(!b)return null;let c=q.get(b);if(!c)return null;let d=n(c.stars,5e4),e=function(a,b,c=30,d=730){if(!a||!Number.isFinite(a))return 0;let e=(b-a)/864e5;return e<=c?1:e>=d?0:m(1-(e-c)/(d-c))}(c.pushedAtMs,Date.now());return{providerId:p,score:m(.7*d+.3*e),evidence:{repo:b,stars:c.stars,...c.pushedAtMs?{pushedAt:new Date(c.pushedAtMs).toISOString()}:{},starsScore:d,recencyScore:e}}}},{id:w,label:"npm Weekly Downloads",defaultWeight:.35,isApplicable:a=>null!==y(a),cacheKey:a=>y(a),async prefetch(a,b,c){let d=b.map(y).filter(a=>!!a&&!x.has(a)),e=d.filter(a=>!z(a)),f=d.filter(z);for(let a=0;a<e.length;a+=100){let b=e.slice(a,a+100),d=await A(`/downloads/point/last-week/${b.join(",")}`,c);if(d&&d.ok)try{let a=await d.json();if(1===b.length)"number"==typeof a.downloads&&x.set(b[0],a.downloads);else for(let c of b){let b=a[c];x.set(c,b&&"number"==typeof b.downloads?b.downloads:0)}}catch(a){v.warn("Failed to parse npm bulk downloads response",a)}}for(let a of f){let b=await A(`/downloads/point/last-week/${a}`,c);if(b&&b.ok)try{let c=await b.json();"number"==typeof c.downloads&&x.set(a,c.downloads)}catch{}}},async fetch(a){let b=y(a);if(!b)return null;let c=x.get(b);return void 0===c?null:{providerId:w,score:n(c,1e6),evidence:{package:b,weeklyDownloads:c}}}},{id:B,label:"Registry Status",defaultWeight:.15,isApplicable:a=>!0,cacheKey:()=>null,fetch:async a=>({providerId:B,score:+("active"===a.verificationStatus),evidence:{status:a.verificationStatus}})}];var D=c(38844);let E=(0,e.h)("backend/services/mcp/quality/settings");function F(){return{providers:C.map(a=>({id:a.id,enabled:!0,weight:a.defaultWeight})),minScore:0,worksGate:!0}}async function G(){try{let a=await (0,i.loadItem)(D.Z.MCP_QUALITY_SETTINGS,F());return function(a){var b,c;let d=F(),e=a??{},f=new Map;if(Array.isArray(e.providers))for(let a of e.providers)a&&"string"==typeof a.id&&f.set(a.id,a);return{providers:d.providers.map(a=>{let b=f.get(a.id);return{id:a.id,enabled:"boolean"==typeof b?.enabled?b.enabled:a.enabled,weight:"number"==typeof b?.weight&&Number.isFinite(b.weight)&&b.weight>=0?b.weight:a.weight}}),minScore:(b=e.minScore,c=d.minScore,"number"==typeof b&&Number.isFinite(b)?Math.min(1,Math.max(0,b)):c),worksGate:"boolean"==typeof e.worksGate?e.worksGate:d.worksGate,..."string"==typeof e.githubToken&&e.githubToken.length>0?{githubToken:e.githubToken}:{}}}(a)}catch(a){return E.warn("Failed to load mcpQuality settings; using defaults",a),F()}}let H=(0,e.h)("backend/services/mcp/quality/orchestrator");async function I(a,b){let c=new AbortController,d=setTimeout(()=>c.abort(),b);try{return await a(c.signal)}finally{clearTimeout(d)}}async function J(a,b,c={}){let e=c.topN??10;try{var f;let g=c.settings??await G(),h=C.filter(a=>(function(a,b){let c=a.providers.find(a=>a.id===b);return!!c?.enabled})(g,a.id));if(0===h.length)return b.map(a=>({candidate:a,score:0,signals:[]}));d=(f=g.githubToken)&&f.length>0?f:void 0;let i=b.slice(0,e),j=b.slice(e),k=new l(c.now??Date.now());await k.load();let n=i.map(()=>[]);for(let b of h){let c=i.map((a,b)=>({c:a,i:b})).filter(({c:a})=>b.isApplicable(a)),d=[],e=[];for(let a of c){let c=b.cacheKey(a.c);if(c){let d=k.get(b.id,c);if(d){e.push({i:a.i,signal:d});continue}}d.push(a)}if(b.prefetch&&d.length>0)try{await I(c=>b.prefetch(a,d.map(a=>a.c),c),12e3)}catch(a){H.warn(`Provider "${b.id}" prefetch failed; degrading`,a)}for(let{c:a,i:c}of d)try{let d=await I(c=>b.fetch(a,c),2e3);if(d){n[c].push(d);let e=b.cacheKey(a);e&&k.set(b.id,e,d)}}catch(c){H.warn(`Provider "${b.id}" fetch failed for "${a.registryName}"`,c)}for(let{i:a,signal:b}of e)n[a].push(b)}await k.flush();let o=i.map((a,b)=>{let c=n[b],d=new Map(c.map(a=>[a.providerId,a])),e=h.filter(b=>b.isApplicable(a)).map(a=>({providerId:a.id,weight:function(a,b){let c=a.providers.find(a=>a.id===b);return c&&c.enabled?c.weight:0}(g,a.id),score:d.get(a.id)?.score??0})),{score:f}=function(a){let b=0,c=0;for(let d of a){let a=Number.isFinite(d.weight)&&d.weight>0?d.weight:0,e=m(d.score);b+=a,c+=a*e}return{score:b>0?c/b:0,breakdown:a}}(e);return{candidate:a,score:f,signals:c}}).map((a,b)=>({s:a,idx:b})).sort((a,b)=>b.s.score-a.s.score||a.idx-b.idx).map(a=>a.s),p=j.map(a=>({candidate:a,score:0,signals:[]}));return[...o,...p]}catch(a){return H.warn("enrichAndRank failed; returning unranked candidates",a),b.map(a=>({candidate:a,score:0,signals:[]}))}}let K=(0,e.h)("backend/services/mcp/registryInstall"),L="/v0.1/servers";function M(a){return{registryName:a.server.name,server:a.server,verificationStatus:(0,g.vf)(a)}}function N(a){let b=b=>a.signals.find(a=>a.providerId===b)?.evidence,c=b(p),d=b(w),e=b(B);return{score:a.score,..."number"==typeof c?.stars?{stars:c.stars}:{},..."number"==typeof d?.weeklyDownloads?{weeklyDownloads:d.weeklyDownloads}:{},..."string"==typeof e?.status?{status:e.status}:{}}}async function O(a,b=8){let c=await P(a,b);return(await J(a,c.map(M))).map(a=>(function(a,b){let c=(0,g.AH)(a),d=c[0];return{name:a.name,...a.title?{title:a.title}:{},...a.description?{description:a.description}:{},installable:c.length>0,requiredEnv:d?(0,g.jg)(d):[],...b?{quality:N(b)}:{}}})(a.candidate.server,a))}async function P(a,b){let c=new URL(f.jD+L);c.searchParams.set("version","latest"),c.searchParams.set("limit",String(Math.min(Math.max(b,1),30))),a&&c.searchParams.set("search",a);let d=await (0,f.Ws)(c,15e3);return Array.isArray(d?.servers)?d.servers:[]}async function Q(a,b){try{let c=await J(a,b.map(M)),d=new Map(b.map(a=>[a.server.name,a])),e=[];for(let a of c){let b=d.get(a.candidate.server.name);b&&e.push(a.signals.length>0?{...b,quality:N(a)}:b)}return e.length===b.length?e:b}catch{return b}}async function R(a){let b=new URL(f.jD+L);b.searchParams.set("version","latest"),b.searchParams.set("limit","10"),b.searchParams.set("search",a);let c=await (0,f.Ws)(b,15e3),d=Array.isArray(c?.servers)?c.servers:[];return d.find(b=>b.server?.name===a)??d[0]??null}async function S(a,b,c){let d;if(!a||"string"!=typeof a)return{installed:!1,error:"A registry server name is required"};try{d=await R(a)}catch(a){return{installed:!1,error:`Registry lookup failed: ${a instanceof Error?a.message:String(a)}`}}let e=d?.server??null;if(!e)return{installed:!1,error:`No registry entry found for "${a}"`};let f=(0,g.AH)(e)[0];if(!f)return{installed:!1,error:`"${e.name}" has no install method FLUJO supports (stdio package or HTTP remote)`};let i=(0,g.vf)(d),j=(0,g.O$)(a,e,f,i);if(c?.resolveOnly)return{installed:!1,serverName:j.serverName,plan:j};let k=(0,g.jg)(f,b);if(k.length>0)return{installed:!1,needsEnv:k,plan:j,error:`"${e.name}" requires values for: ${k.join(", ")}`};let l=function(a,b){if(!b?.length)return a;if("stdio"!==a.transport||!Array.isArray(a.args))return{error:"Package argument templates require a stdio registry server"};let c=[...a.args];for(let a of b){if(!Number.isInteger(a.index)||a.index<0||a.index>c.length||a.index<c.length&&!/\$\{global:[A-Za-z0-9_.-]+\}/.test(c[a.index])||!/\$\{global:[A-Za-z0-9_.-]+\}/.test(a.value))return{error:`Invalid package argument template at index ${String(a.index)}; templates may append arguments or replace an existing global-backed argument`};c[a.index]=a.value}return{...a,args:c}}((0,g.cy)((0,g.Yr)(e,f),b),c?.argTemplates);if("error"in l)return{installed:!1,plan:j,error:l.error};let m=l.name,n=await h.mcpService.loadServerConfigs();if(Array.isArray(n)&&n.some(a=>a.name===m)){K.info(`installRegistryServer: "${m}" already configured; reusing`);let{tools:a,error:b}=await h.mcpService.listServerTools(m);return{installed:!0,alreadyExisted:!0,serverName:m,plan:j,tools:(a??[]).map(a=>({name:a.name,...a.description?{description:a.description}:{}})),...b?{error:b}:{}}}K.info(`installRegistryServer: installing "${e.name}" as "${m}" (${f.kind})`);let o=await h.mcpService.updateServerConfig(m,l);if(!Array.isArray(o)&&o&&"success"in o&&!1===o.success)return{installed:!1,error:`Saving the server failed: ${o.error??"unknown error"}`};let{tools:p,error:q}=await h.mcpService.listServerTools(m),r=(p??[]).map(a=>({name:a.name,...a.description?{description:a.description}:{}}));if((c?.worksGate??(await G()).worksGate)&&0===r.length){K.warn(`installRegistryServer: "${m}" exposed no tools${q?` (${q})`:""}; rolling back (works-gate)`);try{await h.mcpService.deleteServerConfig(m)}catch(a){K.error(`installRegistryServer: rollback of "${m}" failed`,a)}return{installed:!1,worksGateRejected:!0,serverName:m,plan:j,error:q?`"${e.name}" failed to start: ${q}`:`"${e.name}" connected but exposed no tools — rejected by the works-gate. Try a different server.`}}return{installed:!0,serverName:m,plan:j,tools:r,...q?{error:q}:{}}}async function T(a,b,c){let d;if(!a||"string"!=typeof a)return{installed:!1,error:"A capability search query is required"};try{d=await P(a,10)}catch(a){return{installed:!1,error:`Registry lookup failed: ${a instanceof Error?a.message:String(a)}`}}let e=await J(a,d.map(M)),f=await G(),h=c?.minScore??f.minScore,i=c?.maxAttempts??3,j=[],k=0;for(let a of e){let d=a.candidate.registryName;if(a.score<h){j.push({name:d,score:a.score,reason:`below minScore ${h}`});break}if(0===(0,g.AH)(a.candidate.server).length){j.push({name:d,score:a.score,reason:"no supported install method"});continue}if(k>=i)break;k+=1;let e=await S(d,b,{worksGate:!0});if(c?.onAttempt)try{await c.onAttempt(e.plan,e)}catch(a){K.error("installBestForCapability: onAttempt hook failed",a)}if(e.installed)return{...e,attempts:j};let f=e.needsEnv?.length?`needs env: ${e.needsEnv.join(", ")}`:e.worksGateRejected?"works-gate rejected (no tools / failed to start)":e.error??"install failed";j.push({name:d,score:a.score,reason:f})}return{installed:!1,attempts:j,error:`No working server found for "${a}" among the top ${k} installable candidate(s).`}}}};
@@ -1 +1 @@
1
- "use strict";exports.id=4466,exports.ids=[4466],exports.modules={8070:(a,b,c)=>{c.d(b,{$Q:()=>z,C2:()=>A,IK:()=>Q,M6:()=>I,Uw:()=>P,lA:()=>S,nH:()=>x,pF:()=>V,v2:()=>R,vm:()=>O,vp:()=>y,z3:()=>U,z9:()=>T});var d=c(21124),e=c(38301),f=c(95791),g=c(46973),h=c(18168),i=c(60839),j=c(54573),k=c(81637),l=c(79515),m=c(44079),n=c(99561),o=c(48823),p=c(76159),q=c(83144),r=c(88970),s=c(87351),t=c(93995),u=c(88698),v=c(17332),w=c(63908);let x="#009688",y="#7E57C2",z="#E91E63",A="#F48FB1",B={start:{main:()=>"#795548",light:()=>"#A1887F"},process:{main:a=>a.palette.secondary.main,light:a=>a.palette.secondary.light},finish:{main:a=>a.palette.success.main,light:a=>a.palette.success.light},mcp:{main:a=>a.palette.info.main,light:a=>a.palette.info.light},subflow:{main:a=>a.palette.warning.main,light:a=>a.palette.warning.light},resource:{main:()=>x,light:()=>"#4DB6AC"},signal:{main:()=>y,light:()=>"#B39DDB"},trigger:{main:()=>z,light:()=>A}},C=(a,b)=>(B[a]??B.start).main(b),D=(0,h.Ay)(j.A,{shouldForwardProp:a=>!["nodeType","selected"].includes(a)})(({theme:a,nodeType:b,selected:c})=>({padding:a.spacing(1.5),width:"200px",borderRadius:"8px",backgroundColor:a.palette.background.paper,border:`2px solid ${C(b,a)}`,boxShadow:c?`0 0 0 2px ${a.palette.primary.main}, 0 3px 10px rgba(0,0,0,0.2)`:a.shadows[2],transition:"all 0.2s ease","&:hover":{boxShadow:`0 0 0 1px ${C(b,a)}, 0 3px 10px rgba(0,0,0,0.1)`}})),E=(0,h.Ay)(k.default,{shouldForwardProp:a=>"nodeType"!==a})(({theme:a,nodeType:b})=>({display:"flex",alignItems:"center",justifyContent:"space-between",borderBottom:`1px solid ${(B[b]??B.start).light(a)}`,marginBottom:a.spacing(1),paddingBottom:a.spacing(.5)})),F=(0,h.Ay)(k.default)({display:"flex",alignItems:"center",gap:"8px"}),G=(0,h.Ay)(k.default)(({theme:a})=>({marginTop:a.spacing(1),fontSize:"0.8rem"})),H=(0,h.Ay)(k.default)(({theme:a})=>({display:"flex",justifyContent:"space-between",padding:a.spacing(.5,0),borderBottom:`1px dashed ${"dark"===a.palette.mode?"rgba(255,255,255,0.1)":"rgba(0,0,0,0.1)"}`})),I=(a,b)=>C(a,b),J=a=>({backgroundColor:a.palette.info.main,borderColor:"dark"===a.palette.mode?a.palette.background.paper:"white",width:16,height:16,borderRadius:8,borderWidth:2}),K=a=>({backgroundColor:a.palette.secondary.main,borderColor:"dark"===a.palette.mode?a.palette.background.paper:"white",width:16,height:16,borderRadius:8,borderWidth:2}),L=a=>({backgroundColor:a.palette.primary.main,borderColor:"dark"===a.palette.mode?a.palette.background.paper:"white",width:16,height:16,borderRadius:8,borderWidth:2}),M=a=>({backgroundColor:x,borderColor:"dark"===a.palette.mode?a.palette.background.paper:"white",width:16,height:16,borderRadius:8,borderWidth:2}),N=({data:a,nodeType:b,selected:c})=>{let h=(0,i.A)(),[j,k]=(0,e.useState)(!1),A=a||{label:"No Label",properties:{}},B=A.properties||{},C="signal"===b?"string"==typeof B.topic&&B.topic.trim()?B.topic.trim():"string"==typeof A.label&&A.label?A.label:"Signal":"string"==typeof A.label?A.label:"No Label",I="signal"===b?Object.fromEntries(Object.entries(B).filter(([a])=>"topic"!==a)):B,N=Object.keys(I).length;return(0,d.jsx)(d.Fragment,{children:(0,d.jsxs)(D,{elevation:2,nodeType:b,selected:c,children:[(()=>{if("mcp"===b)return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(f.h7,{id:"mcp-top",type:"target",position:g.yX.Top,style:J(h)}),(0,d.jsx)(f.h7,{id:"mcp-right",type:"target",position:g.yX.Right,style:J(h)}),(0,d.jsx)(f.h7,{id:"mcp-bottom",type:"source",position:g.yX.Bottom,style:J(h)}),(0,d.jsx)(f.h7,{id:"mcp-left",type:"target",position:g.yX.Left,style:J(h)})]});if("process"===b)return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(f.h7,{id:"process-top",type:"target",position:g.yX.Top,style:K(h)}),(0,d.jsx)(f.h7,{id:"process-bottom",type:"source",position:g.yX.Bottom,style:K(h)}),(0,d.jsx)(f.h7,{id:"process-left-mcp",type:"source",position:g.yX.Left,style:{...L(h),top:"30%"}}),(0,d.jsx)(f.h7,{id:"process-right-mcp",type:"source",position:g.yX.Right,style:{...L(h),top:"30%"}}),(0,d.jsx)(f.h7,{id:"process-left-resource",type:"source",position:g.yX.Left,style:{...M(h),top:"70%"}}),(0,d.jsx)(f.h7,{id:"process-right-resource",type:"source",position:g.yX.Right,style:{...M(h),top:"70%"}})]});if("resource"===b)return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(f.h7,{id:"resource-in",type:"target",position:g.yX.Left,style:M(h)}),(0,d.jsx)(f.h7,{id:"resource-out",type:"source",position:g.yX.Right,style:M(h)})]});if("start"===b)return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(f.h7,{id:"start-top",type:"target",position:g.yX.Top,style:K(h)}),(0,d.jsx)(f.h7,{id:"start-bottom",type:"source",position:g.yX.Bottom,style:K(h)})]});if("finish"===b)return(0,d.jsx)(f.h7,{id:"finish-top",type:"target",position:g.yX.Top,style:K(h)});else if("subflow"===b)return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(f.h7,{id:"subflow-top",type:"target",position:g.yX.Top,style:K(h)}),(0,d.jsx)(f.h7,{id:"subflow-bottom",type:"source",position:g.yX.Bottom,style:K(h)})]});else if("signal"===b)return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(f.h7,{id:"signal-top",type:"target",position:g.yX.Top,style:K(h)}),(0,d.jsx)(f.h7,{id:"signal-bottom",type:"source",position:g.yX.Bottom,style:K(h)})]});else if("trigger"===b)return(0,d.jsx)(f.h7,{id:"trigger-bottom",type:"source",position:g.yX.Bottom,style:{...K(h),backgroundColor:z}});return null})(),(0,d.jsxs)(E,{nodeType:b,children:[(0,d.jsxs)(F,{children:[(a=>{switch(a){case"start":default:return(0,d.jsx)(o.A,{sx:{color:"#795548"}});case"process":return(0,d.jsx)(p.A,{color:"secondary"});case"finish":return(0,d.jsx)(q.A,{color:"success"});case"mcp":return(0,d.jsx)(p.A,{color:"info"});case"subflow":return(0,d.jsx)(r.A,{sx:{color:"warning.main"}});case"resource":return(0,d.jsx)(s.A,{sx:{color:x}});case"signal":return(0,d.jsx)(t.A,{sx:{color:y}});case"trigger":return(0,d.jsx)(u.A,{sx:{color:z}})}})(b),(0,d.jsx)(l.default,{variant:"subtitle2",fontWeight:"bold",children:C})]}),N>0&&(0,d.jsx)(m.A,{size:"small",onClick:a=>{a.stopPropagation(),k(!j)},sx:{padding:.5},children:j?(0,d.jsx)(w.A,{fontSize:"small"}):(0,d.jsx)(v.A,{fontSize:"small"})})]}),(0,d.jsx)(n.A,{in:j,children:(0,d.jsx)(G,{children:Object.entries(I).map(([a,b])=>(0,d.jsxs)(H,{children:[(0,d.jsxs)(l.default,{variant:"caption",sx:{fontWeight:"bold"},children:[a,":"]}),(0,d.jsxs)(l.default,{variant:"caption",children:[String(b).substring(0,30),String(b).length>30?"...":""]})]},a))})}),N>0&&!j&&(0,d.jsx)(l.default,{variant:"caption",color:"text.secondary",children:`${N} properties configured`})]})})},O=(0,e.memo)(function(a){return(0,d.jsx)(N,{...a,nodeType:"start",selected:a.selected})}),P=(0,e.memo)(function(a){return(0,d.jsx)(N,{...a,nodeType:"process",selected:a.selected})}),Q=(0,e.memo)(function(a){return(0,d.jsx)(N,{...a,nodeType:"finish",selected:a.selected})}),R=(0,e.memo)(function(a){return(0,d.jsx)(N,{...a,nodeType:"mcp",selected:a.selected})}),S=(0,e.memo)(function(a){return(0,d.jsx)(N,{...a,nodeType:"subflow",selected:a.selected})}),T=(0,e.memo)(function(a){return(0,d.jsx)(N,{...a,nodeType:"resource",selected:a.selected})}),U=(0,e.memo)(function(a){return(0,d.jsx)(N,{...a,nodeType:"signal",selected:a.selected})}),V=(0,e.memo)(function(a){return(0,d.jsx)(N,{...a,nodeType:"trigger",selected:a.selected})})},21570:(a,b,c)=>{c.d(b,{A:()=>p});var d=c(21124);c(38301);var e=c(40512),f=c(83899),g=c(81637),h=c(79515),i=c(44079),j=c(91059),k=c(52327),l=c(19925),m=c(68730),n=c(30137),o=c(24330);let p=({open:a,onClose:b,title:c,description:p,maxWidth:q="md",...r})=>(0,d.jsxs)(e.A,{open:a,onClose:b,maxWidth:q,fullWidth:!0,children:[(0,d.jsx)(f.A,{component:"div",children:(0,d.jsxs)(g.default,{display:"flex",alignItems:"center",justifyContent:"space-between",children:[(0,d.jsx)(h.default,{variant:"h6",children:c}),(0,d.jsx)(i.A,{edge:"end",color:"inherit",onClick:b,"aria-label":"close",children:(0,d.jsx)(n.A,{})})]})}),(0,d.jsx)(j.A,{}),(0,d.jsxs)(k.A,{sx:{p:3},children:[p&&(0,d.jsx)(h.default,{variant:"body2",color:"text.secondary",sx:{mb:2},children:p}),(0,d.jsx)(o.A,{...r})]}),(0,d.jsx)(l.A,{children:(0,d.jsx)(m.A,{onClick:b,children:"Cancel"})})]})},24330:(a,b,c)=>{c.d(b,{A:()=>o});var d=c(21124),e=c(38301),f=c(82666),g=c(81637),h=c(37674),i=c(67101),j=c(8521),k=c(79515),l=c(40973),m=c(59737);let n={xs:12,sm:6,md:4},o=({isLoading:a=!1,error:b=null,emptyMessage:c="Nothing to choose from.",loadingMessage:o="Loading…",skeleton:p,skeletonCount:q=4,columns:r=n,items:s,searchable:t=!1,searchPlaceholder:u="Search…",searchTerm:v,onSearchChange:w,groups:x,collapsedKeys:y,onToggleGroup:z})=>{let A={...n,...r},[B,C]=(0,e.useState)(""),D=void 0!==v,E=D?v:B,[F,G]=(0,e.useState)(new Set),H=y??F,I=a=>(0,d.jsx)(f.Ay,{container:!0,spacing:2,alignItems:"stretch",children:a.map(a=>(0,d.jsx)(f.Ay,{item:!0,xs:A.xs,sm:A.sm,md:A.md,lg:A.lg,sx:{display:"flex"},children:(0,d.jsx)(g.default,{sx:{width:"100%"},children:a.content})},a.key))}),J=t?(0,d.jsx)(h.A,{placeholder:u,variant:"outlined",size:"small",fullWidth:!0,value:E,onChange:a=>(a=>{w?.(a),D||C(a)})(a.target.value),sx:{mb:2},InputProps:{startAdornment:(0,d.jsx)(i.A,{position:"start",children:(0,d.jsx)(l.A,{fontSize:"small"})})}}):null,K=a=>(0,d.jsxs)(g.default,{children:[J,a]});if(a)return K(p?(0,d.jsx)(f.Ay,{container:!0,spacing:2,children:Array.from({length:q}).map((a,b)=>(0,d.jsx)(f.Ay,{item:!0,xs:A.xs,sm:A.sm,md:A.md,lg:A.lg,children:p},`skeleton-${b}`))}):(0,d.jsxs)(g.default,{sx:{display:"flex",alignItems:"center",gap:1,py:2},children:[(0,d.jsx)(j.default,{size:20}),(0,d.jsx)(k.default,{variant:"body2",color:"text.secondary",children:o})]}));if(b)return K((0,d.jsx)(k.default,{color:"error",variant:"body2",sx:{py:2},children:b}));let L=D?"":E.trim().toLowerCase(),M=a=>!L||(a.searchText??"").toLowerCase().includes(L),N=(0,d.jsx)(k.default,{variant:"body2",color:"text.secondary",sx:{py:2},children:c});if(x){let a=x.map(a=>({...a,items:a.items.filter(M)})).filter(a=>a.items.length>0);return K(0===a.length?N:(0,d.jsx)(d.Fragment,{children:a.map(a=>(0,d.jsx)(m.A,{label:a.label,count:a.items.length,expanded:!H.has(a.key),onToggle:()=>(a=>{if(z)return void z(a);G(b=>{let c=new Set(b);return c.has(a)?c.delete(a):c.add(a),c})})(a.key),children:I(a.items)},a.key))}))}let O=(s??[]).filter(M);return K(0===O.length?N:I(O))}},39438:(a,b,c)=>{c.d(b,{A:()=>H,o:()=>G});var d=c(21124),e=c(38301),f=c(18168),g=c(30818),h=c(81637),i=c(37489),j=c(60839),k=c(79515),l=c(43312),m=c(44079),n=c(423),o=c(27114),p=c(41893),q=c(98463),r=c(72197),s=c(91034),t=c(38941),u=c(12033),v=c(1312),w=c(5501),x=c(99587),y=c(48823),z=c(22797),A=c(21358),B=c(8070),C=c(78352);let D=(0,c(19815).h)("components/Flow/FlowDashboard/FlowCard"),E=(0,f.Ay)(g.A,{shouldForwardProp:a=>"selected"!==a})(({theme:a,selected:b})=>({display:"flex",flexDirection:"column",height:"100%",transition:"all 0.3s cubic-bezier(0.4, 0, 0.2, 1)",position:"relative",border:b?`2px solid ${a.palette.primary.main}`:"none",boxShadow:b?a.shadows[4]:a.shadows[1],"&:hover":{boxShadow:a.shadows[6],transform:"translateY(-4px)"},"&::before":b?{content:'""',position:"absolute",top:0,left:0,width:"100%",height:"4px",backgroundColor:a.palette.primary.main}:{}})),F=(0,f.Ay)(h.default)(({theme:a})=>({height:"140px",backgroundColor:(0,i.X4)(a.palette.background.default,.7),borderRadius:a.shape.borderRadius,display:"flex",alignItems:"center",justifyContent:"center",margin:a.spacing(1),overflow:"hidden",position:"relative"})),G=()=>(0,d.jsxs)(g.A,{sx:{height:"100%",display:"flex",flexDirection:"column"},children:[(0,d.jsx)(h.default,{sx:{p:1},children:(0,d.jsx)(r.A,{variant:"rectangular",height:140})}),(0,d.jsxs)(o.A,{sx:{flexGrow:1},children:[(0,d.jsx)(r.A,{variant:"text",width:"80%",height:30}),(0,d.jsxs)(h.default,{sx:{display:"flex",gap:1,mt:1},children:[(0,d.jsx)(r.A,{variant:"rectangular",width:60,height:20}),(0,d.jsx)(r.A,{variant:"rectangular",width:90,height:20})]})]}),(0,d.jsxs)(q.A,{sx:{justifyContent:"flex-end",p:1},children:[(0,d.jsx)(r.A,{variant:"circular",width:28,height:28}),(0,d.jsx)(r.A,{variant:"circular",width:28,height:28}),(0,d.jsx)(r.A,{variant:"circular",width:28,height:28})]})]}),H=({flow:a,selected:b,onSelect:c,onDelete:f,onCopy:g,onEdit:r,onOpenInChat:G,onSetFolder:H,onToggleFavorite:I,folders:J=[],validation:K,pickerMode:L=!1})=>{D.debug("Rendering FlowCard",{flowId:a.id,flowName:a.name});let M=(0,j.A)(),[N,O]=(0,e.useState)(null),P=K?.errorCount??0,Q=K?.warningCount??0,R=P>0?"error":Q>0?"warning":null,S=K?(0,d.jsxs)(h.default,{children:[(0,d.jsx)(k.default,{variant:"caption",sx:{fontWeight:600,display:"block",mb:.5},children:P>0?`${P} problem${1===P?"":"s"} — won't run`:`${Q} warning${1===Q?"":"s"}`}),K.issues.slice(0,5).map((a,b)=>(0,d.jsxs)(k.default,{variant:"caption",sx:{display:"block"},children:["• ",a.message]},b)),K.issues.length>5&&(0,d.jsxs)(k.default,{variant:"caption",sx:{display:"block",fontStyle:"italic"},children:["…and ",K.issues.length-5," more"]})]}):null;return(0,d.jsxs)(E,{selected:b,children:[I&&(0,d.jsx)(l.A,{title:a.favorite?"Remove from favorites":"Add to favorites",arrow:!0,placement:"top",children:(0,d.jsx)(m.A,{size:"small",onClick:b=>{b.stopPropagation(),I&&I(a.id)},sx:{position:"absolute",top:4,left:4,zIndex:2,color:a.favorite?M.palette.warning.main:M.palette.text.secondary,backgroundColor:(0,i.X4)(M.palette.background.paper,.6),"&:hover":{backgroundColor:(0,i.X4)(M.palette.background.paper,.9)}},children:a.favorite?(0,d.jsx)(w.A,{fontSize:"small"}):(0,d.jsx)(x.A,{fontSize:"small"})})}),R&&(0,d.jsx)(l.A,{title:S,arrow:!0,placement:"top",children:(0,d.jsxs)(h.default,{sx:{position:"absolute",top:8,right:8,zIndex:2,display:"flex",alignItems:"center",gap:.5,px:.75,py:.25,borderRadius:1,color:"#fff",backgroundColor:"error"===R?M.palette.error.main:M.palette.warning.main,boxShadow:M.shadows[2],pointerEvents:"auto"},children:["error"===R?(0,d.jsx)(z.A,{sx:{fontSize:16}}):(0,d.jsx)(A.A,{sx:{fontSize:16}}),(0,d.jsx)(k.default,{variant:"caption",sx:{fontWeight:700,lineHeight:1},children:"error"===R?P:Q})]})}),(0,d.jsxs)(n.A,{onClick:()=>c(a.id),sx:{display:"flex",flexDirection:"column",alignItems:"stretch",height:"100%",position:"relative"},children:[(0,d.jsx)(F,{children:(()=>{if(0===a.nodes.length)return(0,d.jsx)(h.default,{sx:{width:"100%",height:"100%",display:"flex",alignItems:"center",justifyContent:"center"},children:(0,d.jsx)(k.default,{color:"textSecondary",align:"center",children:"Empty Flow"})});let b=a.nodes.map(a=>a.position?.x??0),c=a.nodes.map(a=>a.position?.y??0),e=Math.min(...b),f=Math.min(...c),g=Math.max(...b)+180,i=Math.max(...c)+70,j=`${e-40} ${f-40} ${g-e+80} ${i-f+80}`,l=a=>({cx:(a.position?.x??0)+90,cy:(a.position?.y??0)+35});return(0,d.jsx)(h.default,{sx:{width:"100%",height:"100%",p:1},children:(0,d.jsxs)("svg",{width:"100%",height:"100%",viewBox:j,preserveAspectRatio:"xMidYMid meet",style:{display:"block"},children:[a.edges.map((b,c)=>{let e=a.nodes.find(a=>a.id===b.source),f=a.nodes.find(a=>a.id===b.target);if(!e||!f)return null;let g=l(e),h=l(f);return(0,d.jsx)("line",{x1:g.cx,y1:g.cy,x2:h.cx,y2:h.cy,stroke:M.palette.text.secondary,strokeWidth:2,opacity:.5,vectorEffect:"non-scaling-stroke"},b.id||c)}),a.nodes.map(a=>{let b=a.position?.x??0,c=a.position?.y??0,e=a.data?.type??"process",f=(0,B.M6)(e,M);return(0,d.jsxs)("g",{children:[(0,d.jsx)("rect",{x:b,y:c,width:180,height:70,rx:12,fill:f,opacity:.85,stroke:M.palette.background.paper,strokeWidth:2,vectorEffect:"non-scaling-stroke"}),(0,d.jsx)("text",{x:b+90,y:c+35,textAnchor:"middle",dominantBaseline:"central",fill:"#fff",fontSize:35,fontWeight:"bold",children:e.substring(0,1).toUpperCase()})]},a.id)})]})})})()}),(0,d.jsxs)(o.A,{sx:{flexGrow:1,pb:0},children:[(0,d.jsx)(k.default,{variant:"h6",component:"div",noWrap:!0,children:a.name}),a.description&&(0,d.jsx)(l.A,{title:a.description,placement:"bottom-start",children:(0,d.jsx)(k.default,{variant:"body2",color:"text.secondary",sx:{mt:.5,display:"-webkit-box",WebkitLineClamp:2,WebkitBoxOrient:"vertical",overflow:"hidden"},children:a.description})}),(0,d.jsxs)(h.default,{sx:{display:"flex",gap:.5,mt:1,flexWrap:"wrap"},children:[(0,d.jsx)(p.A,{size:"small",label:`${a.nodes.length} nodes`,color:"primary",variant:"outlined",sx:{fontSize:"0.7rem",height:20}}),(0,d.jsx)(p.A,{size:"small",label:`${a.edges.length} connections`,color:"secondary",variant:"outlined",sx:{fontSize:"0.7rem",height:20}})]})]})]}),!L&&(0,d.jsxs)(q.A,{sx:{justifyContent:"flex-end",p:1,opacity:.7,"&:hover":{opacity:1}},children:[G&&(0,d.jsx)(l.A,{title:"Start a conversation with this flow",children:(0,d.jsx)(m.A,{size:"small",onClick:b=>{b.stopPropagation(),G&&G(a.id)},color:"primary",children:(0,d.jsx)(y.A,{fontSize:"small"})})}),r&&(0,d.jsx)(l.A,{title:"Edit flow metadata",children:(0,d.jsx)(m.A,{size:"small",onClick:b=>{b.stopPropagation(),r&&r(a.id)},children:(0,d.jsx)(u.A,{fontSize:"small"})})}),g&&(0,d.jsx)(l.A,{title:"Copy flow",children:(0,d.jsx)(m.A,{size:"small",onClick:b=>{b.stopPropagation(),g&&g(a.id)},children:(0,d.jsx)(t.A,{fontSize:"small"})})}),H&&(0,d.jsx)(l.A,{title:a.folder?`Folder: ${a.folder}`:"Move to folder",children:(0,d.jsx)(m.A,{size:"small",onClick:a=>{a.stopPropagation(),O(a.currentTarget)},color:a.folder?"primary":"default",children:(0,d.jsx)(v.A,{fontSize:"small"})})}),f&&(0,d.jsx)(l.A,{title:"Delete flow",children:(0,d.jsx)(m.A,{size:"small",onClick:b=>{b.stopPropagation(),f&&f(a.id)},color:"error",children:(0,d.jsx)(s.A,{fontSize:"small"})})})]}),!L&&H&&(0,d.jsx)(C.A,{anchorEl:N,open:!!N,currentFolder:a.folder,folders:J,onClose:()=>O(null),onAssign:b=>H(a.id,b)})]})}},45231:(a,b,c)=>{c.d(b,{E:()=>k});var d=c(38301),e=c(2560),f=c(7329),g=c(32640),h=c(61160),i=c(66675);let j={models:{defaultSort:"name-asc",sort:(a,b)=>(0,g.CR)(a,b),deriveSortGroup:(a,b)=>(0,g.eZ)(a,b),getFolder:a=>a.folder,getSearchText:a=>`${(0,g.Lg)(a)} ${a.name??""}`},mcp:{defaultSort:"name-asc",sort:(a,b)=>(0,h.oO)(a,b),deriveSortGroup:(a,b)=>(0,h.mO)(a,b),getFolder:a=>a.folder,getSearchText:a=>`${a.name??""} ${a.rootPath??a.path??""}`},flows:{defaultSort:"name-asc",sort:(a,b)=>(0,i.NP)(a,b),deriveSortGroup:(a,b)=>(0,i.ts)(a,b),getFolder:a=>a.folder,getSearchText:a=>a.name??""}};function k(a,b){let c=j[a],[g,h]=(0,d.useState)(""),[i]=(0,e.Xk)(`flujo-ui:${a}:sort`,c.defaultSort),[k]=(0,e.Xk)(`flujo-ui:${a}:group`,f.FM),[l,m]=(0,e.Xk)(`flujo-ui:${a}:collapsed`,[]),n=(0,d.useMemo)(()=>new Set(l),[l]),o=(0,d.useMemo)(()=>{let a=g.trim().toLowerCase(),d=a?b.filter(b=>c.getSearchText(b).toLowerCase().includes(a)):b;return c.sort([...d],i)},[b,g,i,c]),p=(0,d.useMemo)(()=>"folder"===k?(0,f.Je)(o,a=>c.getFolder(a)):"sort"===k?(0,f.Az)(o,a=>c.deriveSortGroup(a,i)):null,[k,o,i,c]);return{searchTerm:g,setSearchTerm:h,sortOption:i,groupMode:k,items:o,groups:p,collapsedKeys:n,toggleGroup:(0,d.useCallback)(a=>{m(b=>b.includes(a)?b.filter(b=>b!==a):[...b,a])},[m])}}},63281:(a,b,c)=>{c.d(b,{g:()=>g});var d=c(2117);let e=(0,c(19815).h)("frontend/services/flow/index");class f{async loadFlows(){e.debug("loadFlows: Entering method");try{if(this.flowsCache)return e.debug("loadFlows: Using cached flows",{count:this.flowsCache.length}),this.flowsCache;let a=await fetch("/api/flow");if(!a.ok){let b=await a.json();throw Error(b.error||"Failed to load flows")}let b=await a.json();return e.debug("loadFlows: Loaded flows from API",{count:b.length}),this.flowsCache=b,b}catch(a){return e.warn("loadFlows: Failed to load flows:",a),[]}}async getFlow(a){e.debug("getFlow: Entering method",{flowId:a});try{if(this.flowsCache){let b=this.flowsCache.find(b=>b.id===a);if(b)return e.debug("getFlow: Using cached flow",{flowId:a}),b}let b=await fetch(`/api/flow/${encodeURIComponent(a)}`);if(!b.ok){if(404===b.status)return e.debug(`getFlow: Flow ${a} not found`),null;let c=await b.json();throw Error(c.error||`Failed to get flow: ${a}`)}let c=await b.json();return e.debug("getFlow: Retrieved flow from API",{flowId:a}),c}catch(b){return e.warn(`getFlow: Failed to get flow ${a}:`,b),null}}async addFlow(a){e.debug("addFlow: Entering method",{flowId:a.id,flowName:a.name,nodeCount:a.nodes.length,edgeCount:a.edges.length});try{let b=await fetch("/api/flow",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(a)});if(!b.ok){let a=await b.json();return{success:!1,error:a.error||"Failed to add flow"}}let c=await b.json();return this.flowsCache&&this.flowsCache.push(c),e.debug("addFlow: Flow added successfully",{flowId:a.id}),{success:!0}}catch(a){return e.warn("addFlow: Failed to add flow:",a),{success:!1,error:a instanceof Error?a.message:"Failed to add flow"}}}async generateFlow(a,b,c){e.debug("generateFlow: Entering method",{modelId:b,allowInstall:c?.allowInstall,allowSubflows:c?.allowSubflows,maxDepth:c?.maxDepth});try{let d=await fetch("/api/flow/generate",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({description:a,modelId:b,allowInstall:c?.allowInstall===!0,allowSubflows:c?.allowSubflows===!0,..."number"==typeof c?.maxDepth?{maxDepth:c.maxDepth}:{}})}),f=await d.json().catch(()=>null);if(!d.ok)return{success:!1,error:f?.error||"Failed to generate flow"};let g=Array.isArray(f.flows)&&f.flows.length>0?f.flows:[{flow:f.flow,validation:f.validation}];return e.debug("generateFlow: Draft generated",{flowId:f.flow?.id,flowCount:g.length,attempts:f.attempts,errorCount:f.validation?.errorCount,installedServers:f.installedServers?.length??0}),{success:!0,flow:f.flow,validation:f.validation,flows:g,rootFlowId:f.rootFlowId??f.flow?.id,attempts:f.attempts,installedServers:f.installedServers??[]}}catch(a){return e.warn("generateFlow: Failed to generate flow:",a),{success:!1,error:a instanceof Error?a.message:"Failed to generate flow"}}}async improveFlow(a,b,c,d){e.debug("improveFlow: Entering method",{flowId:a?.id,modelId:c,allowInstall:d?.allowInstall});try{let f=await fetch("/api/flow/improve",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({flow:a,description:b,modelId:c,allowInstall:d?.allowInstall===!0})}),g=await f.json().catch(()=>null);if(!f.ok)return{success:!1,error:g?.error||"Failed to improve flow"};return e.debug("improveFlow: Draft revised",{flowId:g.flow?.id,attempts:g.attempts,errorCount:g.validation?.errorCount,installedServers:g.installedServers?.length??0}),{success:!0,flow:g.flow,validation:g.validation,attempts:g.attempts,installedServers:g.installedServers??[]}}catch(a){return e.warn("improveFlow: Failed to improve flow:",a),{success:!1,error:a instanceof Error?a.message:"Failed to improve flow"}}}async updateFlow(a){e.debug("updateFlow: Entering method",{flowId:a.id,flowName:a.name,nodeCount:a.nodes.length,edgeCount:a.edges.length});try{let b=await fetch(`/api/flow/${encodeURIComponent(a.id)}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(a)});if(!b.ok){let a=await b.json();return{success:!1,error:a.error||"Failed to update flow"}}let c=await b.json();if(this.flowsCache){let b=this.flowsCache.findIndex(b=>b.id===a.id);b>=0?this.flowsCache[b]=c:this.flowsCache.push(c)}return e.debug("updateFlow: Flow updated successfully",{flowId:a.id}),{success:!0}}catch(a){return e.warn("updateFlow: Failed to update flow:",a),{success:!1,error:a instanceof Error?a.message:"Failed to update flow"}}}async deleteFlow(a){e.debug("deleteFlow: Entering method",{flowId:a});try{let b=await fetch(`/api/flow/${encodeURIComponent(a)}`,{method:"DELETE"});if(!b.ok){let a=await b.json();return{success:!1,error:a.error||"Failed to delete flow"}}return this.flowsCache&&(this.flowsCache=this.flowsCache.filter(b=>b.id!==a)),e.debug("deleteFlow: Flow deleted successfully",{flowId:a}),{success:!0}}catch(a){return e.warn("deleteFlow: Failed to delete flow:",a),{success:!1,error:a instanceof Error?a.message:"Failed to delete flow"}}}async listFlowVersions(a){e.debug("listFlowVersions: Entering method",{flowId:a});try{let b=await fetch(`/api/flow/${encodeURIComponent(a)}/versions`);if(!b.ok){let a=await b.json().catch(()=>null);throw Error(a?.error||"Failed to list flow versions")}let c=await b.json();return Array.isArray(c.versions)?c.versions:[]}catch(b){return e.warn(`listFlowVersions: Failed for flow ${a}:`,b),[]}}async getFlowVersion(a,b){e.debug("getFlowVersion: Entering method",{flowId:a,versionId:b});try{let c=await fetch(`/api/flow/${encodeURIComponent(a)}/versions/${encodeURIComponent(b)}`);if(!c.ok){if(404===c.status)return null;let a=await c.json().catch(()=>null);throw Error(a?.error||"Failed to get flow version")}return await c.json()}catch(c){return e.warn(`getFlowVersion: Failed for ${a}/${b}:`,c),null}}createNode(a,b){return e.debug("createNode: Entering method",{type:a,position:b}),{id:(0,d.A)(),type:a,position:b,data:{label:`${"mcp"===a?"MCP":a.charAt(0).toUpperCase()+a.slice(1)} Node`,type:a,properties:{}}}}createStartNode(){return{id:(0,d.A)(),type:"start",position:{x:250,y:150},data:{label:"Start Node",type:"start",properties:{promptTemplate:""}}}}createNewFlow(a="NewFlow"){e.debug("createNewFlow: Entering method",{name:a});let b=Date.now();return{id:(0,d.A)(),name:a,createdAt:b,updatedAt:b,nodes:[this.createStartNode()],edges:[]}}createHistoryEntry(a,b){return e.debug("createHistoryEntry: Entering method"),{nodes:[...a],edges:[...b]}}generateSampleFlow(a="Sample Flow"){return e.debug("generateSampleFlow: Entering method",{name:a}),{id:(0,d.A)(),name:a,nodes:[{id:"1",type:"start",position:{x:250,y:50},data:{label:"Start Node",type:"start",properties:{prompt:"Enter your query here",systemMessage:"You are a helpful assistant",temperature:0}}},{id:"2",type:"process",position:{x:250,y:200},data:{label:"Process Node",type:"process",properties:{operation:"transform",enabled:!0}}},{id:"3",type:"finish",position:{x:250,y:350},data:{label:"Finish Node",type:"finish",properties:{format:"json",template:'{ "result": {{data}} }'}}},{id:"4",type:"mcp",position:{x:450,y:200},data:{label:"MCP Node",type:"mcp",properties:{channels:2,mode:"parallel"}}}],edges:[{id:"e1-2",source:"1",target:"2",type:"custom"},{id:"e2-3",source:"2",target:"3",type:"custom"}]}}constructor(){this.flowsCache=null}}let g=new f},63654:(a,b,c)=>{c.d(b,{P:()=>f});let d=(0,c(19815).h)("frontend/services/plannedExecutions");class e{async list(){try{let a=await fetch("/api/planned-executions");if(!a.ok)throw Error(`HTTP ${a.status}`);return await a.json()}catch(a){return d.warn("Failed to list planned executions",a),{paused:!1,executions:[]}}}async create(a){try{let b=await fetch("/api/planned-executions",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(a)}),c=await b.json();if(!b.ok)return{success:!1,error:c?.error||`HTTP ${b.status}`};return{success:!0,execution:c.execution}}catch(a){return{success:!1,error:a instanceof Error?a.message:"Request failed"}}}async update(a,b){try{let c=await fetch(`/api/planned-executions/${a}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify(b)}),d=await c.json();if(!c.ok)return{success:!1,error:d?.error||`HTTP ${c.status}`};return{success:!0,execution:d.execution}}catch(a){return{success:!1,error:a instanceof Error?a.message:"Request failed"}}}async delete(a){try{let b=await fetch(`/api/planned-executions/${a}`,{method:"DELETE"});if(!b.ok){let a=await b.json().catch(()=>null);return{success:!1,error:a?.error||`HTTP ${b.status}`}}return{success:!0}}catch(a){return{success:!1,error:a instanceof Error?a.message:"Request failed"}}}async setPaused(a){try{let b=await fetch("/api/planned-executions",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({paused:a})});if(!b.ok){let a=await b.json().catch(()=>null);return{success:!1,error:a?.error||`HTTP ${b.status}`}}return{success:!0}}catch(a){return{success:!1,error:a instanceof Error?a.message:"Request failed"}}}async runNow(a){try{let b=await fetch(`/api/planned-executions/${a}/run`,{method:"POST"}),c=await b.json();if(!b.ok)return{success:!1,error:c?.error||`HTTP ${b.status}`};return{success:!0,record:c.record}}catch(a){return{success:!1,error:a instanceof Error?a.message:"Request failed"}}}async loadRuns(a){try{let b=await fetch(`/api/planned-executions/${a}/runs`);if(!b.ok)throw Error(`HTTP ${b.status}`);let c=await b.json();return Array.isArray(c?.runs)?c.runs:[]}catch(b){return d.warn(`Failed to load runs for ${a}`,b),[]}}async previewSchedule(a,b){try{let c=await fetch("/api/planned-executions/preview-schedule",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({cron:a,timezone:b})});if(!c.ok)throw Error(`HTTP ${c.status}`);return await c.json()}catch(a){return{valid:!1,error:a instanceof Error?a.message:"Preview failed",nextRuns:[]}}}}let f=new e},66675:(a,b,c)=>{c.d(b,{K:()=>f,NP:()=>i,ts:()=>g});var d=c(7329);function e(a){return a.updatedAt??a.createdAt??0}function f(a,b=Date.now()){if(!a)return{key:"recency:unknown",label:"No date"};let c=b-a;return c<864e5?{key:"recency:today",label:"Today"}:c<6048e5?{key:"recency:week",label:"This week"}:c<2592e6?{key:"recency:month",label:"This month"}:{key:"recency:older",label:"Older"}}function g(a,b){switch(b){case"name-asc":case"name-desc":return(0,d.po)(a.name);case"most-nodes":case"least-nodes":var c;return 0===(c=a.nodes.length)?{key:"nodes:0",label:"0 nodes"}:c<=2?{key:"nodes:1-2",label:"1–2 nodes"}:c<=5?{key:"nodes:3-5",label:"3–5 nodes"}:c<=10?{key:"nodes:6-10",label:"6–10 nodes"}:{key:"nodes:11+",label:"11+ nodes"};case"newest":case"oldest":return f(e(a));default:return{key:"all",label:"All flows"}}}function h(a,b){return a.name.localeCompare(b.name)||a.id.localeCompare(b.id)}function i(a,b){let c=(a,c)=>{switch(b){case"name-asc":return a.name.localeCompare(c.name);case"name-desc":return c.name.localeCompare(a.name);case"most-nodes":return c.nodes.length-a.nodes.length;case"least-nodes":return a.nodes.length-c.nodes.length;case"newest":{let b=e(c)-e(a);return 0!==b?b:h(a,c)}case"oldest":{let b=e(a)-e(c);return 0!==b?b:h(a,c)}default:return 0}};return[...a].sort((a,b)=>{let d=Number(!!b.favorite)-Number(!!a.favorite);return 0!==d?d:c(a,b)})}}};
1
+ "use strict";exports.id=4466,exports.ids=[4466],exports.modules={8070:(a,b,c)=>{c.d(b,{$Q:()=>z,C2:()=>A,IK:()=>Q,M6:()=>I,Uw:()=>P,lA:()=>S,nH:()=>x,pF:()=>V,v2:()=>R,vm:()=>O,vp:()=>y,z3:()=>U,z9:()=>T});var d=c(21124),e=c(38301),f=c(95791),g=c(46973),h=c(18168),i=c(60839),j=c(54573),k=c(81637),l=c(79515),m=c(44079),n=c(99561),o=c(48823),p=c(76159),q=c(83144),r=c(88970),s=c(87351),t=c(93995),u=c(88698),v=c(17332),w=c(63908);let x="#009688",y="#7E57C2",z="#E91E63",A="#F48FB1",B={start:{main:()=>"#795548",light:()=>"#A1887F"},process:{main:a=>a.palette.secondary.main,light:a=>a.palette.secondary.light},finish:{main:a=>a.palette.success.main,light:a=>a.palette.success.light},mcp:{main:a=>a.palette.info.main,light:a=>a.palette.info.light},subflow:{main:a=>a.palette.warning.main,light:a=>a.palette.warning.light},resource:{main:()=>x,light:()=>"#4DB6AC"},signal:{main:()=>y,light:()=>"#B39DDB"},trigger:{main:()=>z,light:()=>A}},C=(a,b)=>(B[a]??B.start).main(b),D=(0,h.Ay)(j.A,{shouldForwardProp:a=>!["nodeType","selected"].includes(a)})(({theme:a,nodeType:b,selected:c})=>({padding:a.spacing(1.5),width:"200px",borderRadius:"8px",backgroundColor:a.palette.background.paper,border:`2px solid ${C(b,a)}`,boxShadow:c?`0 0 0 2px ${a.palette.primary.main}, 0 3px 10px rgba(0,0,0,0.2)`:a.shadows[2],transition:"all 0.2s ease","&:hover":{boxShadow:`0 0 0 1px ${C(b,a)}, 0 3px 10px rgba(0,0,0,0.1)`}})),E=(0,h.Ay)(k.default,{shouldForwardProp:a=>"nodeType"!==a})(({theme:a,nodeType:b})=>({display:"flex",alignItems:"center",justifyContent:"space-between",borderBottom:`1px solid ${(B[b]??B.start).light(a)}`,marginBottom:a.spacing(1),paddingBottom:a.spacing(.5)})),F=(0,h.Ay)(k.default)({display:"flex",alignItems:"center",gap:"8px"}),G=(0,h.Ay)(k.default)(({theme:a})=>({marginTop:a.spacing(1),fontSize:"0.8rem"})),H=(0,h.Ay)(k.default)(({theme:a})=>({display:"flex",justifyContent:"space-between",padding:a.spacing(.5,0),borderBottom:`1px dashed ${"dark"===a.palette.mode?"rgba(255,255,255,0.1)":"rgba(0,0,0,0.1)"}`})),I=(a,b)=>C(a,b),J=a=>({backgroundColor:a.palette.info.main,borderColor:"dark"===a.palette.mode?a.palette.background.paper:"white",width:16,height:16,borderRadius:8,borderWidth:2}),K=a=>({backgroundColor:a.palette.secondary.main,borderColor:"dark"===a.palette.mode?a.palette.background.paper:"white",width:16,height:16,borderRadius:8,borderWidth:2}),L=a=>({backgroundColor:a.palette.primary.main,borderColor:"dark"===a.palette.mode?a.palette.background.paper:"white",width:16,height:16,borderRadius:8,borderWidth:2}),M=a=>({backgroundColor:x,borderColor:"dark"===a.palette.mode?a.palette.background.paper:"white",width:16,height:16,borderRadius:8,borderWidth:2}),N=({data:a,nodeType:b,selected:c})=>{let h=(0,i.A)(),[j,k]=(0,e.useState)(!1),A=a||{label:"No Label",properties:{}},B=A.properties||{},C="signal"===b?"string"==typeof B.topic&&B.topic.trim()?B.topic.trim():"string"==typeof A.label&&A.label?A.label:"Signal":"string"==typeof A.label?A.label:"No Label",I="signal"===b?Object.fromEntries(Object.entries(B).filter(([a])=>"topic"!==a)):B,N=Object.keys(I).length;return(0,d.jsx)(d.Fragment,{children:(0,d.jsxs)(D,{elevation:2,nodeType:b,selected:c,children:[(()=>{if("mcp"===b)return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(f.h7,{id:"mcp-top",type:"target",position:g.yX.Top,style:J(h)}),(0,d.jsx)(f.h7,{id:"mcp-right",type:"target",position:g.yX.Right,style:J(h)}),(0,d.jsx)(f.h7,{id:"mcp-bottom",type:"source",position:g.yX.Bottom,style:J(h)}),(0,d.jsx)(f.h7,{id:"mcp-left",type:"target",position:g.yX.Left,style:J(h)})]});if("process"===b)return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(f.h7,{id:"process-top",type:"target",position:g.yX.Top,style:K(h)}),(0,d.jsx)(f.h7,{id:"process-bottom",type:"source",position:g.yX.Bottom,style:K(h)}),(0,d.jsx)(f.h7,{id:"process-left-mcp",type:"source",position:g.yX.Left,style:{...L(h),top:"30%"}}),(0,d.jsx)(f.h7,{id:"process-right-mcp",type:"source",position:g.yX.Right,style:{...L(h),top:"30%"}}),(0,d.jsx)(f.h7,{id:"process-left-resource",type:"source",position:g.yX.Left,style:{...M(h),top:"70%"}}),(0,d.jsx)(f.h7,{id:"process-right-resource",type:"source",position:g.yX.Right,style:{...M(h),top:"70%"}})]});if("resource"===b)return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(f.h7,{id:"resource-in",type:"target",position:g.yX.Left,style:M(h)}),(0,d.jsx)(f.h7,{id:"resource-out",type:"source",position:g.yX.Right,style:M(h)})]});if("start"===b)return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(f.h7,{id:"start-top",type:"target",position:g.yX.Top,style:K(h)}),(0,d.jsx)(f.h7,{id:"start-bottom",type:"source",position:g.yX.Bottom,style:K(h)})]});if("finish"===b)return(0,d.jsx)(f.h7,{id:"finish-top",type:"target",position:g.yX.Top,style:K(h)});else if("subflow"===b)return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(f.h7,{id:"subflow-top",type:"target",position:g.yX.Top,style:K(h)}),(0,d.jsx)(f.h7,{id:"subflow-bottom",type:"source",position:g.yX.Bottom,style:K(h)})]});else if("signal"===b)return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(f.h7,{id:"signal-top",type:"target",position:g.yX.Top,style:K(h)}),(0,d.jsx)(f.h7,{id:"signal-bottom",type:"source",position:g.yX.Bottom,style:K(h)})]});else if("trigger"===b)return(0,d.jsx)(f.h7,{id:"trigger-bottom",type:"source",position:g.yX.Bottom,style:{...K(h),backgroundColor:z}});return null})(),(0,d.jsxs)(E,{nodeType:b,children:[(0,d.jsxs)(F,{children:[(a=>{switch(a){case"start":default:return(0,d.jsx)(o.A,{sx:{color:"#795548"}});case"process":return(0,d.jsx)(p.A,{color:"secondary"});case"finish":return(0,d.jsx)(q.A,{color:"success"});case"mcp":return(0,d.jsx)(p.A,{color:"info"});case"subflow":return(0,d.jsx)(r.A,{sx:{color:"warning.main"}});case"resource":return(0,d.jsx)(s.A,{sx:{color:x}});case"signal":return(0,d.jsx)(t.A,{sx:{color:y}});case"trigger":return(0,d.jsx)(u.A,{sx:{color:z}})}})(b),(0,d.jsx)(l.default,{variant:"subtitle2",fontWeight:"bold",children:C})]}),N>0&&(0,d.jsx)(m.A,{size:"small",onClick:a=>{a.stopPropagation(),k(!j)},sx:{padding:.5},children:j?(0,d.jsx)(w.A,{fontSize:"small"}):(0,d.jsx)(v.A,{fontSize:"small"})})]}),(0,d.jsx)(n.A,{in:j,children:(0,d.jsx)(G,{children:Object.entries(I).map(([a,b])=>(0,d.jsxs)(H,{children:[(0,d.jsxs)(l.default,{variant:"caption",sx:{fontWeight:"bold"},children:[a,":"]}),(0,d.jsxs)(l.default,{variant:"caption",children:[String(b).substring(0,30),String(b).length>30?"...":""]})]},a))})}),N>0&&!j&&(0,d.jsx)(l.default,{variant:"caption",color:"text.secondary",children:`${N} properties configured`})]})})},O=(0,e.memo)(function(a){return(0,d.jsx)(N,{...a,nodeType:"start",selected:a.selected})}),P=(0,e.memo)(function(a){return(0,d.jsx)(N,{...a,nodeType:"process",selected:a.selected})}),Q=(0,e.memo)(function(a){return(0,d.jsx)(N,{...a,nodeType:"finish",selected:a.selected})}),R=(0,e.memo)(function(a){return(0,d.jsx)(N,{...a,nodeType:"mcp",selected:a.selected})}),S=(0,e.memo)(function(a){return(0,d.jsx)(N,{...a,nodeType:"subflow",selected:a.selected})}),T=(0,e.memo)(function(a){return(0,d.jsx)(N,{...a,nodeType:"resource",selected:a.selected})}),U=(0,e.memo)(function(a){return(0,d.jsx)(N,{...a,nodeType:"signal",selected:a.selected})}),V=(0,e.memo)(function(a){return(0,d.jsx)(N,{...a,nodeType:"trigger",selected:a.selected})})},21570:(a,b,c)=>{c.d(b,{A:()=>p});var d=c(21124);c(38301);var e=c(40512),f=c(83899),g=c(81637),h=c(79515),i=c(44079),j=c(91059),k=c(52327),l=c(19925),m=c(68730),n=c(30137),o=c(24330);let p=({open:a,onClose:b,title:c,description:p,maxWidth:q="md",...r})=>(0,d.jsxs)(e.A,{open:a,onClose:b,maxWidth:q,fullWidth:!0,children:[(0,d.jsx)(f.A,{component:"div",children:(0,d.jsxs)(g.default,{display:"flex",alignItems:"center",justifyContent:"space-between",children:[(0,d.jsx)(h.default,{variant:"h6",children:c}),(0,d.jsx)(i.A,{edge:"end",color:"inherit",onClick:b,"aria-label":"close",children:(0,d.jsx)(n.A,{})})]})}),(0,d.jsx)(j.A,{}),(0,d.jsxs)(k.A,{sx:{p:3},children:[p&&(0,d.jsx)(h.default,{variant:"body2",color:"text.secondary",sx:{mb:2},children:p}),(0,d.jsx)(o.A,{...r})]}),(0,d.jsx)(l.A,{children:(0,d.jsx)(m.A,{onClick:b,children:"Cancel"})})]})},24330:(a,b,c)=>{c.d(b,{A:()=>o});var d=c(21124),e=c(38301),f=c(82666),g=c(81637),h=c(37674),i=c(67101),j=c(8521),k=c(79515),l=c(40973),m=c(59737);let n={xs:12,sm:6,md:4},o=({isLoading:a=!1,error:b=null,emptyMessage:c="Nothing to choose from.",loadingMessage:o="Loading…",skeleton:p,skeletonCount:q=4,columns:r=n,items:s,searchable:t=!1,searchPlaceholder:u="Search…",searchTerm:v,onSearchChange:w,groups:x,collapsedKeys:y,onToggleGroup:z})=>{let A={...n,...r},[B,C]=(0,e.useState)(""),D=void 0!==v,E=D?v:B,[F,G]=(0,e.useState)(new Set),H=y??F,I=a=>(0,d.jsx)(f.Ay,{container:!0,spacing:2,alignItems:"stretch",children:a.map(a=>(0,d.jsx)(f.Ay,{item:!0,xs:A.xs,sm:A.sm,md:A.md,lg:A.lg,sx:{display:"flex"},children:(0,d.jsx)(g.default,{sx:{width:"100%"},children:a.content})},a.key))}),J=t?(0,d.jsx)(h.A,{placeholder:u,variant:"outlined",size:"small",fullWidth:!0,value:E,onChange:a=>(a=>{w?.(a),D||C(a)})(a.target.value),sx:{mb:2},InputProps:{startAdornment:(0,d.jsx)(i.A,{position:"start",children:(0,d.jsx)(l.A,{fontSize:"small"})})}}):null,K=a=>(0,d.jsxs)(g.default,{children:[J,a]});if(a)return K(p?(0,d.jsx)(f.Ay,{container:!0,spacing:2,children:Array.from({length:q}).map((a,b)=>(0,d.jsx)(f.Ay,{item:!0,xs:A.xs,sm:A.sm,md:A.md,lg:A.lg,children:p},`skeleton-${b}`))}):(0,d.jsxs)(g.default,{sx:{display:"flex",alignItems:"center",gap:1,py:2},children:[(0,d.jsx)(j.default,{size:20}),(0,d.jsx)(k.default,{variant:"body2",color:"text.secondary",children:o})]}));if(b)return K((0,d.jsx)(k.default,{color:"error",variant:"body2",sx:{py:2},children:b}));let L=D?"":E.trim().toLowerCase(),M=a=>!L||(a.searchText??"").toLowerCase().includes(L),N=(0,d.jsx)(k.default,{variant:"body2",color:"text.secondary",sx:{py:2},children:c});if(x){let a=x.map(a=>({...a,items:a.items.filter(M)})).filter(a=>a.items.length>0);return K(0===a.length?N:(0,d.jsx)(d.Fragment,{children:a.map(a=>(0,d.jsx)(m.A,{label:a.label,count:a.items.length,expanded:!H.has(a.key),onToggle:()=>(a=>{if(z)return void z(a);G(b=>{let c=new Set(b);return c.has(a)?c.delete(a):c.add(a),c})})(a.key),children:I(a.items)},a.key))}))}let O=(s??[]).filter(M);return K(0===O.length?N:I(O))}},39438:(a,b,c)=>{c.d(b,{A:()=>H,o:()=>G});var d=c(21124),e=c(38301),f=c(18168),g=c(30818),h=c(81637),i=c(37489),j=c(60839),k=c(79515),l=c(43312),m=c(44079),n=c(423),o=c(27114),p=c(41893),q=c(98463),r=c(72197),s=c(91034),t=c(38941),u=c(12033),v=c(1312),w=c(5501),x=c(99587),y=c(48823),z=c(22797),A=c(21358),B=c(8070),C=c(78352);let D=(0,c(19815).h)("components/Flow/FlowDashboard/FlowCard"),E=(0,f.Ay)(g.A,{shouldForwardProp:a=>"selected"!==a})(({theme:a,selected:b})=>({display:"flex",flexDirection:"column",height:"100%",transition:"all 0.3s cubic-bezier(0.4, 0, 0.2, 1)",position:"relative",border:b?`2px solid ${a.palette.primary.main}`:"none",boxShadow:b?a.shadows[4]:a.shadows[1],"&:hover":{boxShadow:a.shadows[6],transform:"translateY(-4px)"},"&::before":b?{content:'""',position:"absolute",top:0,left:0,width:"100%",height:"4px",backgroundColor:a.palette.primary.main}:{}})),F=(0,f.Ay)(h.default)(({theme:a})=>({height:"140px",backgroundColor:(0,i.X4)(a.palette.background.default,.7),borderRadius:a.shape.borderRadius,display:"flex",alignItems:"center",justifyContent:"center",margin:a.spacing(1),overflow:"hidden",position:"relative"})),G=()=>(0,d.jsxs)(g.A,{sx:{height:"100%",display:"flex",flexDirection:"column"},children:[(0,d.jsx)(h.default,{sx:{p:1},children:(0,d.jsx)(r.A,{variant:"rectangular",height:140})}),(0,d.jsxs)(o.A,{sx:{flexGrow:1},children:[(0,d.jsx)(r.A,{variant:"text",width:"80%",height:30}),(0,d.jsxs)(h.default,{sx:{display:"flex",gap:1,mt:1},children:[(0,d.jsx)(r.A,{variant:"rectangular",width:60,height:20}),(0,d.jsx)(r.A,{variant:"rectangular",width:90,height:20})]})]}),(0,d.jsxs)(q.A,{sx:{justifyContent:"flex-end",p:1},children:[(0,d.jsx)(r.A,{variant:"circular",width:28,height:28}),(0,d.jsx)(r.A,{variant:"circular",width:28,height:28}),(0,d.jsx)(r.A,{variant:"circular",width:28,height:28})]})]}),H=({flow:a,selected:b,onSelect:c,onDelete:f,onCopy:g,onEdit:r,onOpenInChat:G,onSetFolder:H,onToggleFavorite:I,folders:J=[],validation:K,pickerMode:L=!1})=>{D.debug("Rendering FlowCard",{flowId:a.id,flowName:a.name});let M=(0,j.A)(),[N,O]=(0,e.useState)(null),P=K?.errorCount??0,Q=K?.warningCount??0,R=P>0?"error":Q>0?"warning":null,S=K?(0,d.jsxs)(h.default,{children:[(0,d.jsx)(k.default,{variant:"caption",sx:{fontWeight:600,display:"block",mb:.5},children:P>0?`${P} problem${1===P?"":"s"} — won't run`:`${Q} warning${1===Q?"":"s"}`}),K.issues.slice(0,5).map((a,b)=>(0,d.jsxs)(k.default,{variant:"caption",sx:{display:"block"},children:["• ",a.message]},b)),K.issues.length>5&&(0,d.jsxs)(k.default,{variant:"caption",sx:{display:"block",fontStyle:"italic"},children:["…and ",K.issues.length-5," more"]})]}):null;return(0,d.jsxs)(E,{selected:b,children:[I&&(0,d.jsx)(l.A,{title:a.favorite?"Remove from favorites":"Add to favorites",arrow:!0,placement:"top",children:(0,d.jsx)(m.A,{size:"small",onClick:b=>{b.stopPropagation(),I&&I(a.id)},sx:{position:"absolute",top:4,left:4,zIndex:2,color:a.favorite?M.palette.warning.main:M.palette.text.secondary,backgroundColor:(0,i.X4)(M.palette.background.paper,.6),"&:hover":{backgroundColor:(0,i.X4)(M.palette.background.paper,.9)}},children:a.favorite?(0,d.jsx)(w.A,{fontSize:"small"}):(0,d.jsx)(x.A,{fontSize:"small"})})}),R&&(0,d.jsx)(l.A,{title:S,arrow:!0,placement:"top",children:(0,d.jsxs)(h.default,{sx:{position:"absolute",top:8,right:8,zIndex:2,display:"flex",alignItems:"center",gap:.5,px:.75,py:.25,borderRadius:1,color:"#fff",backgroundColor:"error"===R?M.palette.error.main:M.palette.warning.main,boxShadow:M.shadows[2],pointerEvents:"auto"},children:["error"===R?(0,d.jsx)(z.A,{sx:{fontSize:16}}):(0,d.jsx)(A.A,{sx:{fontSize:16}}),(0,d.jsx)(k.default,{variant:"caption",sx:{fontWeight:700,lineHeight:1},children:"error"===R?P:Q})]})}),(0,d.jsxs)(n.A,{onClick:()=>c(a.id),sx:{display:"flex",flexDirection:"column",alignItems:"stretch",height:"100%",position:"relative"},children:[(0,d.jsx)(F,{children:(()=>{if(0===a.nodes.length)return(0,d.jsx)(h.default,{sx:{width:"100%",height:"100%",display:"flex",alignItems:"center",justifyContent:"center"},children:(0,d.jsx)(k.default,{color:"textSecondary",align:"center",children:"Empty Flow"})});let b=a.nodes.map(a=>a.position?.x??0),c=a.nodes.map(a=>a.position?.y??0),e=Math.min(...b),f=Math.min(...c),g=Math.max(...b)+180,i=Math.max(...c)+70,j=`${e-40} ${f-40} ${g-e+80} ${i-f+80}`,l=a=>({cx:(a.position?.x??0)+90,cy:(a.position?.y??0)+35});return(0,d.jsx)(h.default,{sx:{width:"100%",height:"100%",p:1},children:(0,d.jsxs)("svg",{width:"100%",height:"100%",viewBox:j,preserveAspectRatio:"xMidYMid meet",style:{display:"block"},children:[a.edges.map((b,c)=>{let e=a.nodes.find(a=>a.id===b.source),f=a.nodes.find(a=>a.id===b.target);if(!e||!f)return null;let g=l(e),h=l(f);return(0,d.jsx)("line",{x1:g.cx,y1:g.cy,x2:h.cx,y2:h.cy,stroke:M.palette.text.secondary,strokeWidth:2,opacity:.5,vectorEffect:"non-scaling-stroke"},b.id||c)}),a.nodes.map(a=>{let b=a.position?.x??0,c=a.position?.y??0,e=a.data?.type??"process",f=(0,B.M6)(e,M);return(0,d.jsxs)("g",{children:[(0,d.jsx)("rect",{x:b,y:c,width:180,height:70,rx:12,fill:f,opacity:.85,stroke:M.palette.background.paper,strokeWidth:2,vectorEffect:"non-scaling-stroke"}),(0,d.jsx)("text",{x:b+90,y:c+35,textAnchor:"middle",dominantBaseline:"central",fill:"#fff",fontSize:35,fontWeight:"bold",children:e.substring(0,1).toUpperCase()})]},a.id)})]})})})()}),(0,d.jsxs)(o.A,{sx:{flexGrow:1,pb:0},children:[(0,d.jsx)(k.default,{variant:"h6",component:"div",noWrap:!0,children:a.name}),a.description&&(0,d.jsx)(l.A,{title:a.description,placement:"bottom-start",children:(0,d.jsx)(k.default,{variant:"body2",color:"text.secondary",sx:{mt:.5,display:"-webkit-box",WebkitLineClamp:2,WebkitBoxOrient:"vertical",overflow:"hidden"},children:a.description})}),(0,d.jsxs)(h.default,{sx:{display:"flex",gap:.5,mt:1,flexWrap:"wrap"},children:[(0,d.jsx)(p.A,{size:"small",label:`${a.nodes.length} nodes`,color:"primary",variant:"outlined",sx:{fontSize:"0.7rem",height:20}}),(0,d.jsx)(p.A,{size:"small",label:`${a.edges.length} connections`,color:"secondary",variant:"outlined",sx:{fontSize:"0.7rem",height:20}})]})]})]}),!L&&(0,d.jsxs)(q.A,{sx:{justifyContent:"flex-end",p:1,opacity:.7,"&:hover":{opacity:1}},children:[G&&(0,d.jsx)(l.A,{title:"Start a conversation with this flow",children:(0,d.jsx)(m.A,{size:"small",onClick:b=>{b.stopPropagation(),G&&G(a.id)},color:"primary",children:(0,d.jsx)(y.A,{fontSize:"small"})})}),r&&(0,d.jsx)(l.A,{title:"Edit flow metadata",children:(0,d.jsx)(m.A,{size:"small",onClick:b=>{b.stopPropagation(),r&&r(a.id)},children:(0,d.jsx)(u.A,{fontSize:"small"})})}),g&&(0,d.jsx)(l.A,{title:"Copy flow",children:(0,d.jsx)(m.A,{size:"small",onClick:b=>{b.stopPropagation(),g&&g(a.id)},children:(0,d.jsx)(t.A,{fontSize:"small"})})}),H&&(0,d.jsx)(l.A,{title:a.folder?`Folder: ${a.folder}`:"Move to folder",children:(0,d.jsx)(m.A,{size:"small",onClick:a=>{a.stopPropagation(),O(a.currentTarget)},color:a.folder?"primary":"default",children:(0,d.jsx)(v.A,{fontSize:"small"})})}),f&&(0,d.jsx)(l.A,{title:"Delete flow",children:(0,d.jsx)(m.A,{size:"small",onClick:b=>{b.stopPropagation(),f&&f(a.id)},color:"error",children:(0,d.jsx)(s.A,{fontSize:"small"})})})]}),!L&&H&&(0,d.jsx)(C.A,{anchorEl:N,open:!!N,currentFolder:a.folder,folders:J,onClose:()=>O(null),onAssign:b=>H(a.id,b)})]})}},45231:(a,b,c)=>{c.d(b,{E:()=>k});var d=c(38301),e=c(2560),f=c(7329),g=c(32640),h=c(61160),i=c(66675);let j={models:{defaultSort:"name-asc",sort:(a,b)=>(0,g.CR)(a,b),deriveSortGroup:(a,b)=>(0,g.eZ)(a,b),getFolder:a=>a.folder,getSearchText:a=>`${(0,g.Lg)(a)} ${a.name??""}`},mcp:{defaultSort:"name-asc",sort:(a,b)=>(0,h.oO)(a,b),deriveSortGroup:(a,b)=>(0,h.mO)(a,b),getFolder:a=>a.folder,getSearchText:a=>`${a.name??""} ${a.rootPath??a.path??""}`},flows:{defaultSort:"name-asc",sort:(a,b)=>(0,i.NP)(a,b),deriveSortGroup:(a,b)=>(0,i.ts)(a,b),getFolder:a=>a.folder,getSearchText:a=>a.name??""}};function k(a,b){let c=j[a],[g,h]=(0,d.useState)(""),[i]=(0,e.Xk)(`flujo-ui:${a}:sort`,c.defaultSort),[k]=(0,e.Xk)(`flujo-ui:${a}:group`,f.FM),[l,m]=(0,e.Xk)(`flujo-ui:${a}:collapsed`,[]),n=(0,d.useMemo)(()=>new Set(l),[l]),o=(0,d.useMemo)(()=>{let a=g.trim().toLowerCase(),d=a?b.filter(b=>c.getSearchText(b).toLowerCase().includes(a)):b;return c.sort([...d],i)},[b,g,i,c]),p=(0,d.useMemo)(()=>"folder"===k?(0,f.Je)(o,a=>c.getFolder(a)):"sort"===k?(0,f.Az)(o,a=>c.deriveSortGroup(a,i)):null,[k,o,i,c]);return{searchTerm:g,setSearchTerm:h,sortOption:i,groupMode:k,items:o,groups:p,collapsedKeys:n,toggleGroup:(0,d.useCallback)(a=>{m(b=>b.includes(a)?b.filter(b=>b!==a):[...b,a])},[m])}}},63281:(a,b,c)=>{c.d(b,{g:()=>g});var d=c(2117);let e=(0,c(19815).h)("frontend/services/flow/index");class f{async loadFlows(){e.debug("loadFlows: Entering method");try{if(this.flowsCache)return e.debug("loadFlows: Using cached flows",{count:this.flowsCache.length}),this.flowsCache;let a=await fetch("/api/flow");if(!a.ok){let b=await a.json();throw Error(b.error||"Failed to load flows")}let b=await a.json();return e.debug("loadFlows: Loaded flows from API",{count:b.length}),this.flowsCache=b,b}catch(a){return e.warn("loadFlows: Failed to load flows:",a),[]}}async getFlow(a){e.debug("getFlow: Entering method",{flowId:a});try{if(this.flowsCache){let b=this.flowsCache.find(b=>b.id===a);if(b)return e.debug("getFlow: Using cached flow",{flowId:a}),b}let b=await fetch(`/api/flow/${encodeURIComponent(a)}`);if(!b.ok){if(404===b.status)return e.debug(`getFlow: Flow ${a} not found`),null;let c=await b.json();throw Error(c.error||`Failed to get flow: ${a}`)}let c=await b.json();return e.debug("getFlow: Retrieved flow from API",{flowId:a}),c}catch(b){return e.warn(`getFlow: Failed to get flow ${a}:`,b),null}}async addFlow(a){e.debug("addFlow: Entering method",{flowId:a.id,flowName:a.name,nodeCount:a.nodes.length,edgeCount:a.edges.length});try{let b=await fetch("/api/flow",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(a)});if(!b.ok){let a=await b.json();return{success:!1,error:a.error||"Failed to add flow"}}let c=await b.json();return this.flowsCache&&this.flowsCache.push(c),e.debug("addFlow: Flow added successfully",{flowId:a.id}),{success:!0}}catch(a){return e.warn("addFlow: Failed to add flow:",a),{success:!1,error:a instanceof Error?a.message:"Failed to add flow"}}}async generateFlow(a,b,c){e.debug("generateFlow: Entering method",{modelId:b,allowInstall:c?.allowInstall,allowSubflows:c?.allowSubflows,maxDepth:c?.maxDepth});try{let d=await fetch("/api/flow/generate",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({description:a,modelId:b,allowInstall:c?.allowInstall===!0,allowSubflows:c?.allowSubflows!==!1,..."number"==typeof c?.maxDepth?{maxDepth:c.maxDepth}:{}})}),f=await d.json().catch(()=>null);if(!d.ok)return{success:!1,error:f?.error||"Failed to generate flow"};let g=Array.isArray(f.flows)&&f.flows.length>0?f.flows:[{flow:f.flow,validation:f.validation}];return e.debug("generateFlow: Draft generated",{flowId:f.flow?.id,flowCount:g.length,attempts:f.attempts,errorCount:f.validation?.errorCount,installedServers:f.installedServers?.length??0}),{success:!0,flow:f.flow,validation:f.validation,flows:g,rootFlowId:f.rootFlowId??f.flow?.id,attempts:f.attempts,installedServers:f.installedServers??[]}}catch(a){return e.warn("generateFlow: Failed to generate flow:",a),{success:!1,error:a instanceof Error?a.message:"Failed to generate flow"}}}async improveFlow(a,b,c,d){e.debug("improveFlow: Entering method",{flowId:a?.id,modelId:c,allowInstall:d?.allowInstall});try{let f=await fetch("/api/flow/improve",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({flow:a,relatedFlows:d?.relatedFlows,description:b,modelId:c,allowInstall:d?.allowInstall===!0})}),g=await f.json().catch(()=>null);if(!f.ok)return{success:!1,error:g?.error||"Failed to improve flow"};return e.debug("improveFlow: Draft revised",{flowId:g.flow?.id,attempts:g.attempts,errorCount:g.validation?.errorCount,installedServers:g.installedServers?.length??0}),{success:!0,flow:g.flow,validation:g.validation,flows:Array.isArray(g.flows)&&g.flows.length>0?g.flows:[{flow:g.flow,validation:g.validation}],rootFlowId:g.rootFlowId??g.flow?.id,attempts:g.attempts,installedServers:g.installedServers??[]}}catch(a){return e.warn("improveFlow: Failed to improve flow:",a),{success:!1,error:a instanceof Error?a.message:"Failed to improve flow"}}}async updateFlow(a){e.debug("updateFlow: Entering method",{flowId:a.id,flowName:a.name,nodeCount:a.nodes.length,edgeCount:a.edges.length});try{let b=await fetch(`/api/flow/${encodeURIComponent(a.id)}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(a)});if(!b.ok){let a=await b.json();return{success:!1,error:a.error||"Failed to update flow"}}let c=await b.json();if(this.flowsCache){let b=this.flowsCache.findIndex(b=>b.id===a.id);b>=0?this.flowsCache[b]=c:this.flowsCache.push(c)}return e.debug("updateFlow: Flow updated successfully",{flowId:a.id}),{success:!0}}catch(a){return e.warn("updateFlow: Failed to update flow:",a),{success:!1,error:a instanceof Error?a.message:"Failed to update flow"}}}async deleteFlow(a){e.debug("deleteFlow: Entering method",{flowId:a});try{let b=await fetch(`/api/flow/${encodeURIComponent(a)}`,{method:"DELETE"});if(!b.ok){let a=await b.json();return{success:!1,error:a.error||"Failed to delete flow"}}return this.flowsCache&&(this.flowsCache=this.flowsCache.filter(b=>b.id!==a)),e.debug("deleteFlow: Flow deleted successfully",{flowId:a}),{success:!0}}catch(a){return e.warn("deleteFlow: Failed to delete flow:",a),{success:!1,error:a instanceof Error?a.message:"Failed to delete flow"}}}async listFlowVersions(a){e.debug("listFlowVersions: Entering method",{flowId:a});try{let b=await fetch(`/api/flow/${encodeURIComponent(a)}/versions`);if(!b.ok){let a=await b.json().catch(()=>null);throw Error(a?.error||"Failed to list flow versions")}let c=await b.json();return Array.isArray(c.versions)?c.versions:[]}catch(b){return e.warn(`listFlowVersions: Failed for flow ${a}:`,b),[]}}async getFlowVersion(a,b){e.debug("getFlowVersion: Entering method",{flowId:a,versionId:b});try{let c=await fetch(`/api/flow/${encodeURIComponent(a)}/versions/${encodeURIComponent(b)}`);if(!c.ok){if(404===c.status)return null;let a=await c.json().catch(()=>null);throw Error(a?.error||"Failed to get flow version")}return await c.json()}catch(c){return e.warn(`getFlowVersion: Failed for ${a}/${b}:`,c),null}}createNode(a,b){return e.debug("createNode: Entering method",{type:a,position:b}),{id:(0,d.A)(),type:a,position:b,data:{label:`${"mcp"===a?"MCP":a.charAt(0).toUpperCase()+a.slice(1)} Node`,type:a,properties:"process"===a?{inputMode:"full-history"}:{}}}}createStartNode(){return{id:(0,d.A)(),type:"start",position:{x:250,y:150},data:{label:"Start Node",type:"start",properties:{promptTemplate:""}}}}createNewFlow(a="NewFlow"){e.debug("createNewFlow: Entering method",{name:a});let b=Date.now();return{id:(0,d.A)(),name:a,createdAt:b,updatedAt:b,nodes:[this.createStartNode()],edges:[]}}createHistoryEntry(a,b){return e.debug("createHistoryEntry: Entering method"),{nodes:[...a],edges:[...b]}}generateSampleFlow(a="Sample Flow"){return e.debug("generateSampleFlow: Entering method",{name:a}),{id:(0,d.A)(),name:a,nodes:[{id:"1",type:"start",position:{x:250,y:50},data:{label:"Start Node",type:"start",properties:{prompt:"Enter your query here",systemMessage:"You are a helpful assistant",temperature:0}}},{id:"2",type:"process",position:{x:250,y:200},data:{label:"Process Node",type:"process",properties:{operation:"transform",enabled:!0}}},{id:"3",type:"finish",position:{x:250,y:350},data:{label:"Finish Node",type:"finish",properties:{format:"json",template:'{ "result": {{data}} }'}}},{id:"4",type:"mcp",position:{x:450,y:200},data:{label:"MCP Node",type:"mcp",properties:{channels:2,mode:"parallel"}}}],edges:[{id:"e1-2",source:"1",target:"2",type:"custom"},{id:"e2-3",source:"2",target:"3",type:"custom"}]}}constructor(){this.flowsCache=null}}let g=new f},63654:(a,b,c)=>{c.d(b,{P:()=>f});let d=(0,c(19815).h)("frontend/services/plannedExecutions");class e{async list(){try{let a=await fetch("/api/planned-executions");if(!a.ok)throw Error(`HTTP ${a.status}`);return await a.json()}catch(a){return d.warn("Failed to list planned executions",a),{paused:!1,executions:[]}}}async create(a){try{let b=await fetch("/api/planned-executions",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(a)}),c=await b.json();if(!b.ok)return{success:!1,error:c?.error||`HTTP ${b.status}`};return{success:!0,execution:c.execution}}catch(a){return{success:!1,error:a instanceof Error?a.message:"Request failed"}}}async update(a,b){try{let c=await fetch(`/api/planned-executions/${a}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify(b)}),d=await c.json();if(!c.ok)return{success:!1,error:d?.error||`HTTP ${c.status}`};return{success:!0,execution:d.execution}}catch(a){return{success:!1,error:a instanceof Error?a.message:"Request failed"}}}async delete(a){try{let b=await fetch(`/api/planned-executions/${a}`,{method:"DELETE"});if(!b.ok){let a=await b.json().catch(()=>null);return{success:!1,error:a?.error||`HTTP ${b.status}`}}return{success:!0}}catch(a){return{success:!1,error:a instanceof Error?a.message:"Request failed"}}}async setPaused(a){try{let b=await fetch("/api/planned-executions",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({paused:a})});if(!b.ok){let a=await b.json().catch(()=>null);return{success:!1,error:a?.error||`HTTP ${b.status}`}}return{success:!0}}catch(a){return{success:!1,error:a instanceof Error?a.message:"Request failed"}}}async runNow(a){try{let b=await fetch(`/api/planned-executions/${a}/run`,{method:"POST"}),c=await b.json();if(!b.ok)return{success:!1,error:c?.error||`HTTP ${b.status}`};return{success:!0,record:c.record}}catch(a){return{success:!1,error:a instanceof Error?a.message:"Request failed"}}}async loadRuns(a){try{let b=await fetch(`/api/planned-executions/${a}/runs`);if(!b.ok)throw Error(`HTTP ${b.status}`);let c=await b.json();return Array.isArray(c?.runs)?c.runs:[]}catch(b){return d.warn(`Failed to load runs for ${a}`,b),[]}}async previewSchedule(a,b){try{let c=await fetch("/api/planned-executions/preview-schedule",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({cron:a,timezone:b})});if(!c.ok)throw Error(`HTTP ${c.status}`);return await c.json()}catch(a){return{valid:!1,error:a instanceof Error?a.message:"Preview failed",nextRuns:[]}}}}let f=new e},66675:(a,b,c)=>{c.d(b,{K:()=>f,NP:()=>i,ts:()=>g});var d=c(7329);function e(a){return a.updatedAt??a.createdAt??0}function f(a,b=Date.now()){if(!a)return{key:"recency:unknown",label:"No date"};let c=b-a;return c<864e5?{key:"recency:today",label:"Today"}:c<6048e5?{key:"recency:week",label:"This week"}:c<2592e6?{key:"recency:month",label:"This month"}:{key:"recency:older",label:"Older"}}function g(a,b){switch(b){case"name-asc":case"name-desc":return(0,d.po)(a.name);case"most-nodes":case"least-nodes":var c;return 0===(c=a.nodes.length)?{key:"nodes:0",label:"0 nodes"}:c<=2?{key:"nodes:1-2",label:"1–2 nodes"}:c<=5?{key:"nodes:3-5",label:"3–5 nodes"}:c<=10?{key:"nodes:6-10",label:"6–10 nodes"}:{key:"nodes:11+",label:"11+ nodes"};case"newest":case"oldest":return f(e(a));default:return{key:"all",label:"All flows"}}}function h(a,b){return a.name.localeCompare(b.name)||a.id.localeCompare(b.id)}function i(a,b){let c=(a,c)=>{switch(b){case"name-asc":return a.name.localeCompare(c.name);case"name-desc":return c.name.localeCompare(a.name);case"most-nodes":return c.nodes.length-a.nodes.length;case"least-nodes":return a.nodes.length-c.nodes.length;case"newest":{let b=e(c)-e(a);return 0!==b?b:h(a,c)}case"oldest":{let b=e(a)-e(c);return 0!==b?b:h(a,c)}default:return 0}};return[...a].sort((a,b)=>{let d=Number(!!b.favorite)-Number(!!a.favorite);return 0!==d?d:c(a,b)})}}};