flujo-ai 3.20.0 → 3.22.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 (553) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-build-manifest.json +312 -242
  3. package/.next/app-path-routes-manifest.json +19 -12
  4. package/.next/build-manifest.json +5 -5
  5. package/.next/prerender-manifest.json +39 -15
  6. package/.next/react-loadable-manifest.json +15 -13
  7. package/.next/routes-manifest.json +14 -0
  8. package/.next/server/app/_not-found/page.js +2 -2
  9. package/.next/server/app/_not-found/page.js.nft.json +1 -1
  10. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  11. package/.next/server/app/_not-found.html +1 -1
  12. package/.next/server/app/_not-found.rsc +5 -3
  13. package/.next/server/app/api/approvals/[id]/route.js +1 -0
  14. package/.next/server/app/api/approvals/[id]/route.js.nft.json +1 -0
  15. package/.next/server/app/api/approvals/[id]/route_client-reference-manifest.js +1 -0
  16. package/.next/server/app/api/approvals/route.js +2 -0
  17. package/.next/server/app/api/approvals/route.js.nft.json +1 -0
  18. package/.next/server/app/api/approvals/route_client-reference-manifest.js +1 -0
  19. package/.next/server/app/api/backup/route.js +1 -1
  20. package/.next/server/app/api/backup/route.js.nft.json +1 -1
  21. package/.next/server/app/api/backup/route_client-reference-manifest.js +1 -1
  22. package/.next/server/app/api/browse/route.js +1 -1
  23. package/.next/server/app/api/browse/route.js.nft.json +1 -1
  24. package/.next/server/app/api/browse/route_client-reference-manifest.js +1 -1
  25. package/.next/server/app/api/bugs/enhance/route.js +14 -0
  26. package/.next/server/app/api/bugs/enhance/route.js.nft.json +1 -0
  27. package/.next/server/app/api/bugs/enhance/route_client-reference-manifest.js +1 -0
  28. package/.next/server/app/api/cwd/route.js +1 -1
  29. package/.next/server/app/api/cwd/route.js.nft.json +1 -1
  30. package/.next/server/app/api/cwd/route_client-reference-manifest.js +1 -1
  31. package/.next/server/app/api/encryption/secure/route.js +1 -1
  32. package/.next/server/app/api/encryption/secure/route.js.nft.json +1 -1
  33. package/.next/server/app/api/encryption/secure/route_client-reference-manifest.js +1 -1
  34. package/.next/server/app/api/env/route.js +1 -1
  35. package/.next/server/app/api/env/route.js.nft.json +1 -1
  36. package/.next/server/app/api/env/route_client-reference-manifest.js +1 -1
  37. package/.next/server/app/api/flow/[id]/route.js +1 -1
  38. package/.next/server/app/api/flow/[id]/route.js.nft.json +1 -1
  39. package/.next/server/app/api/flow/[id]/route_client-reference-manifest.js +1 -1
  40. package/.next/server/app/api/flow/compile/route.js +1 -1
  41. package/.next/server/app/api/flow/compile/route.js.nft.json +1 -1
  42. package/.next/server/app/api/flow/compile/route_client-reference-manifest.js +1 -1
  43. package/.next/server/app/api/flow/generate/route.js +1 -1
  44. package/.next/server/app/api/flow/generate/route.js.nft.json +1 -1
  45. package/.next/server/app/api/flow/generate/route_client-reference-manifest.js +1 -1
  46. package/.next/server/app/api/flow/improve/route.js +1 -1
  47. package/.next/server/app/api/flow/improve/route.js.nft.json +1 -1
  48. package/.next/server/app/api/flow/improve/route_client-reference-manifest.js +1 -1
  49. package/.next/server/app/api/flow/prompt-renderer/route.js +2 -2
  50. package/.next/server/app/api/flow/prompt-renderer/route.js.nft.json +1 -1
  51. package/.next/server/app/api/flow/prompt-renderer/route_client-reference-manifest.js +1 -1
  52. package/.next/server/app/api/flow/quick-chat/route.js +1 -1
  53. package/.next/server/app/api/flow/quick-chat/route.js.nft.json +1 -1
  54. package/.next/server/app/api/flow/quick-chat/route_client-reference-manifest.js +1 -1
  55. package/.next/server/app/api/flow/repair/route.js +1 -1
  56. package/.next/server/app/api/flow/repair/route.js.nft.json +1 -1
  57. package/.next/server/app/api/flow/repair/route_client-reference-manifest.js +1 -1
  58. package/.next/server/app/api/flow/route.js +1 -1
  59. package/.next/server/app/api/flow/route.js.nft.json +1 -1
  60. package/.next/server/app/api/flow/route_client-reference-manifest.js +1 -1
  61. package/.next/server/app/api/git/route.js +6 -4
  62. package/.next/server/app/api/git/route.js.nft.json +1 -1
  63. package/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
  64. package/.next/server/app/api/init/route.js +1 -1
  65. package/.next/server/app/api/init/route.js.nft.json +1 -1
  66. package/.next/server/app/api/init/route_client-reference-manifest.js +1 -1
  67. package/.next/server/app/api/local-models/capability/route_client-reference-manifest.js +1 -1
  68. package/.next/server/app/api/local-models/pull/route_client-reference-manifest.js +1 -1
  69. package/.next/server/app/api/local-models/suggest/route_client-reference-manifest.js +1 -1
  70. package/.next/server/app/api/mcp/cancel/route.js +2 -2
  71. package/.next/server/app/api/mcp/cancel/route.js.nft.json +1 -1
  72. package/.next/server/app/api/mcp/cancel/route_client-reference-manifest.js +1 -1
  73. package/.next/server/app/api/mcp/servers/[name]/prompts/get/route.js +1 -1
  74. package/.next/server/app/api/mcp/servers/[name]/prompts/get/route.js.nft.json +1 -1
  75. package/.next/server/app/api/mcp/servers/[name]/prompts/get/route_client-reference-manifest.js +1 -1
  76. package/.next/server/app/api/mcp/servers/[name]/prompts/route.js +1 -1
  77. package/.next/server/app/api/mcp/servers/[name]/prompts/route.js.nft.json +1 -1
  78. package/.next/server/app/api/mcp/servers/[name]/prompts/route_client-reference-manifest.js +1 -1
  79. package/.next/server/app/api/mcp/servers/[name]/resources/read/route.js +1 -1
  80. package/.next/server/app/api/mcp/servers/[name]/resources/read/route.js.nft.json +1 -1
  81. package/.next/server/app/api/mcp/servers/[name]/resources/read/route_client-reference-manifest.js +1 -1
  82. package/.next/server/app/api/mcp/servers/[name]/resources/route.js +1 -1
  83. package/.next/server/app/api/mcp/servers/[name]/resources/route.js.nft.json +1 -1
  84. package/.next/server/app/api/mcp/servers/[name]/resources/route_client-reference-manifest.js +1 -1
  85. package/.next/server/app/api/mcp/servers/[name]/route.js +1 -1
  86. package/.next/server/app/api/mcp/servers/[name]/route.js.nft.json +1 -1
  87. package/.next/server/app/api/mcp/servers/[name]/route_client-reference-manifest.js +1 -1
  88. package/.next/server/app/api/mcp/servers/[name]/status/route.js +1 -1
  89. package/.next/server/app/api/mcp/servers/[name]/status/route.js.nft.json +1 -1
  90. package/.next/server/app/api/mcp/servers/[name]/status/route_client-reference-manifest.js +1 -1
  91. package/.next/server/app/api/mcp/servers/[name]/tools/[toolName]/route.js +1 -1
  92. package/.next/server/app/api/mcp/servers/[name]/tools/[toolName]/route.js.nft.json +1 -1
  93. package/.next/server/app/api/mcp/servers/[name]/tools/[toolName]/route_client-reference-manifest.js +1 -1
  94. package/.next/server/app/api/mcp/servers/[name]/tools/route.js +1 -1
  95. package/.next/server/app/api/mcp/servers/[name]/tools/route.js.nft.json +1 -1
  96. package/.next/server/app/api/mcp/servers/[name]/tools/route_client-reference-manifest.js +1 -1
  97. package/.next/server/app/api/mcp/servers/route.js +1 -1
  98. package/.next/server/app/api/mcp/servers/route.js.nft.json +1 -1
  99. package/.next/server/app/api/mcp/servers/route_client-reference-manifest.js +1 -1
  100. package/.next/server/app/api/mcp/test-connection/route.js +1 -1
  101. package/.next/server/app/api/mcp/test-connection/route.js.nft.json +1 -1
  102. package/.next/server/app/api/mcp/test-connection/route_client-reference-manifest.js +1 -1
  103. package/.next/server/app/api/mcp/test-connection/stream/route.js +1 -1
  104. package/.next/server/app/api/mcp/test-connection/stream/route.js.nft.json +1 -1
  105. package/.next/server/app/api/mcp/test-connection/stream/route_client-reference-manifest.js +1 -1
  106. package/.next/server/app/api/mcp-registry/route.js +1 -1
  107. package/.next/server/app/api/mcp-registry/route.js.nft.json +1 -1
  108. package/.next/server/app/api/mcp-registry/route_client-reference-manifest.js +1 -1
  109. package/.next/server/app/api/mcp-registry/spotlight/route.js +1 -1
  110. package/.next/server/app/api/mcp-registry/spotlight/route.js.nft.json +1 -1
  111. package/.next/server/app/api/mcp-registry/spotlight/route_client-reference-manifest.js +1 -1
  112. package/.next/server/app/api/model/[id]/route.js +1 -1
  113. package/.next/server/app/api/model/[id]/route.js.nft.json +1 -1
  114. package/.next/server/app/api/model/[id]/route_client-reference-manifest.js +1 -1
  115. package/.next/server/app/api/model/provider/route.js +1 -1
  116. package/.next/server/app/api/model/provider/route.js.nft.json +1 -1
  117. package/.next/server/app/api/model/provider/route_client-reference-manifest.js +1 -1
  118. package/.next/server/app/api/model/route.js +1 -1
  119. package/.next/server/app/api/model/route.js.nft.json +1 -1
  120. package/.next/server/app/api/model/route_client-reference-manifest.js +1 -1
  121. package/.next/server/app/api/model/test/route.js +1 -1
  122. package/.next/server/app/api/model/test/route.js.nft.json +1 -1
  123. package/.next/server/app/api/model/test/route_client-reference-manifest.js +1 -1
  124. package/.next/server/app/api/oauth/callback/route.js +2 -2
  125. package/.next/server/app/api/oauth/callback/route.js.nft.json +1 -1
  126. package/.next/server/app/api/oauth/callback/route_client-reference-manifest.js +1 -1
  127. package/.next/server/app/api/oauth/initiate/route.js +2 -2
  128. package/.next/server/app/api/oauth/initiate/route.js.nft.json +1 -1
  129. package/.next/server/app/api/oauth/initiate/route_client-reference-manifest.js +1 -1
  130. package/.next/server/app/api/oauth/reset/route.js +1 -1
  131. package/.next/server/app/api/oauth/reset/route.js.nft.json +1 -1
  132. package/.next/server/app/api/oauth/reset/route_client-reference-manifest.js +1 -1
  133. package/.next/server/app/api/planned-executions/[id]/route.js +1 -1
  134. package/.next/server/app/api/planned-executions/[id]/route.js.nft.json +1 -1
  135. package/.next/server/app/api/planned-executions/[id]/route_client-reference-manifest.js +1 -1
  136. package/.next/server/app/api/planned-executions/[id]/run/route.js +1 -1
  137. package/.next/server/app/api/planned-executions/[id]/run/route.js.nft.json +1 -1
  138. package/.next/server/app/api/planned-executions/[id]/run/route_client-reference-manifest.js +1 -1
  139. package/.next/server/app/api/planned-executions/[id]/runs/route.js +1 -1
  140. package/.next/server/app/api/planned-executions/[id]/runs/route.js.nft.json +1 -1
  141. package/.next/server/app/api/planned-executions/[id]/runs/route_client-reference-manifest.js +1 -1
  142. package/.next/server/app/api/planned-executions/preview-schedule/route.js +1 -1
  143. package/.next/server/app/api/planned-executions/preview-schedule/route.js.nft.json +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 -0
  146. package/.next/server/app/api/planned-executions/reconcile/route.js.nft.json +1 -0
  147. package/.next/server/app/api/planned-executions/reconcile/route_client-reference-manifest.js +1 -0
  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/restore/route.js +1 -1
  152. package/.next/server/app/api/restore/route.js.nft.json +1 -1
  153. package/.next/server/app/api/restore/route_client-reference-manifest.js +1 -1
  154. package/.next/server/app/api/runs/active/route.js +2 -0
  155. package/.next/server/app/api/runs/active/route.js.nft.json +1 -0
  156. package/.next/server/app/api/runs/active/route_client-reference-manifest.js +1 -0
  157. package/.next/server/app/api/storage/route.js +1 -1
  158. package/.next/server/app/api/storage/route.js.nft.json +1 -1
  159. package/.next/server/app/api/storage/route_client-reference-manifest.js +1 -1
  160. package/.next/server/app/api/update/route.js +1 -1
  161. package/.next/server/app/api/update/route.js.nft.json +1 -1
  162. package/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
  163. package/.next/server/app/api/waves/route.js +1 -0
  164. package/.next/server/app/api/waves/route.js.nft.json +1 -0
  165. package/.next/server/app/api/waves/route_client-reference-manifest.js +1 -0
  166. package/.next/server/app/api/webhooks/[id]/route.js +1 -1
  167. package/.next/server/app/api/webhooks/[id]/route.js.nft.json +1 -1
  168. package/.next/server/app/api/webhooks/[id]/route_client-reference-manifest.js +1 -1
  169. package/.next/server/app/chat/page.js +10 -10
  170. package/.next/server/app/chat/page.js.nft.json +1 -1
  171. package/.next/server/app/chat/page_client-reference-manifest.js +1 -1
  172. package/.next/server/app/chat.html +1 -1
  173. package/.next/server/app/chat.rsc +6 -4
  174. package/.next/server/app/docs/page.js +9 -4
  175. package/.next/server/app/docs/page.js.nft.json +1 -1
  176. package/.next/server/app/docs/page_client-reference-manifest.js +1 -1
  177. package/.next/server/app/docs.html +1 -1
  178. package/.next/server/app/docs.rsc +6 -4
  179. package/.next/server/app/executions/page.js +3 -3
  180. package/.next/server/app/executions/page.js.nft.json +1 -1
  181. package/.next/server/app/executions/page_client-reference-manifest.js +1 -1
  182. package/.next/server/app/executions.html +1 -1
  183. package/.next/server/app/executions.rsc +6 -4
  184. package/.next/server/app/flows/page.js +3 -3
  185. package/.next/server/app/flows/page.js.nft.json +1 -1
  186. package/.next/server/app/flows/page_client-reference-manifest.js +1 -1
  187. package/.next/server/app/flows.html +1 -1
  188. package/.next/server/app/flows.rsc +6 -4
  189. package/.next/server/app/index.html +1 -1
  190. package/.next/server/app/index.rsc +6 -4
  191. package/.next/server/app/mcp/page.js +5 -5
  192. package/.next/server/app/mcp/page.js.nft.json +1 -1
  193. package/.next/server/app/mcp/page_client-reference-manifest.js +1 -1
  194. package/.next/server/app/mcp-flows/route.js +1 -1
  195. package/.next/server/app/mcp-flows/route.js.nft.json +1 -1
  196. package/.next/server/app/mcp-flows/route_client-reference-manifest.js +1 -1
  197. package/.next/server/app/mcp-proxy/[server]/route.js +1 -1
  198. package/.next/server/app/mcp-proxy/[server]/route.js.nft.json +1 -1
  199. package/.next/server/app/mcp-proxy/[server]/route_client-reference-manifest.js +1 -1
  200. package/.next/server/app/mcp.html +1 -1
  201. package/.next/server/app/mcp.rsc +6 -4
  202. package/.next/server/app/models/page.js +2 -2
  203. package/.next/server/app/models/page.js.nft.json +1 -1
  204. package/.next/server/app/models/page_client-reference-manifest.js +1 -1
  205. package/.next/server/app/page.js +2 -2
  206. package/.next/server/app/page.js.nft.json +1 -1
  207. package/.next/server/app/page_client-reference-manifest.js +1 -1
  208. package/.next/server/app/settings/page.js +14 -4
  209. package/.next/server/app/settings/page.js.nft.json +1 -1
  210. package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  211. package/.next/server/app/settings.html +1 -1
  212. package/.next/server/app/settings.rsc +6 -4
  213. package/.next/server/app/v1/chat/completions/route.js +1 -1
  214. package/.next/server/app/v1/chat/completions/route.js.nft.json +1 -1
  215. package/.next/server/app/v1/chat/completions/route_client-reference-manifest.js +1 -1
  216. package/.next/server/app/v1/chat/conversations/[conversationId]/breakpoints/route.js +2 -2
  217. package/.next/server/app/v1/chat/conversations/[conversationId]/breakpoints/route.js.nft.json +1 -1
  218. package/.next/server/app/v1/chat/conversations/[conversationId]/breakpoints/route_client-reference-manifest.js +1 -1
  219. package/.next/server/app/v1/chat/conversations/[conversationId]/cancel/route.js +2 -2
  220. package/.next/server/app/v1/chat/conversations/[conversationId]/cancel/route.js.nft.json +1 -1
  221. package/.next/server/app/v1/chat/conversations/[conversationId]/cancel/route_client-reference-manifest.js +1 -1
  222. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/continue/route.js +1 -1
  223. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/continue/route.js.nft.json +1 -1
  224. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/continue/route_client-reference-manifest.js +1 -1
  225. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/step/route.js +1 -1
  226. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/step/route.js.nft.json +1 -1
  227. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/step/route_client-reference-manifest.js +1 -1
  228. package/.next/server/app/v1/chat/conversations/[conversationId]/edit-state/route.js +2 -2
  229. package/.next/server/app/v1/chat/conversations/[conversationId]/edit-state/route.js.nft.json +1 -1
  230. package/.next/server/app/v1/chat/conversations/[conversationId]/edit-state/route_client-reference-manifest.js +1 -1
  231. package/.next/server/app/v1/chat/conversations/[conversationId]/events/route.js +2 -2
  232. package/.next/server/app/v1/chat/conversations/[conversationId]/events/route.js.nft.json +1 -1
  233. package/.next/server/app/v1/chat/conversations/[conversationId]/events/route_client-reference-manifest.js +1 -1
  234. package/.next/server/app/v1/chat/conversations/[conversationId]/resources/route.js +1 -1
  235. package/.next/server/app/v1/chat/conversations/[conversationId]/resources/route.js.nft.json +1 -1
  236. package/.next/server/app/v1/chat/conversations/[conversationId]/resources/route_client-reference-manifest.js +1 -1
  237. package/.next/server/app/v1/chat/conversations/[conversationId]/respond/route.js +1 -1
  238. package/.next/server/app/v1/chat/conversations/[conversationId]/respond/route.js.nft.json +1 -1
  239. package/.next/server/app/v1/chat/conversations/[conversationId]/respond/route_client-reference-manifest.js +1 -1
  240. package/.next/server/app/v1/chat/conversations/[conversationId]/route.js +2 -2
  241. package/.next/server/app/v1/chat/conversations/[conversationId]/route.js.nft.json +1 -1
  242. package/.next/server/app/v1/chat/conversations/[conversationId]/route_client-reference-manifest.js +1 -1
  243. package/.next/server/app/v1/chat/conversations/route.js +2 -2
  244. package/.next/server/app/v1/chat/conversations/route.js.nft.json +1 -1
  245. package/.next/server/app/v1/chat/conversations/route_client-reference-manifest.js +1 -1
  246. package/.next/server/app/v1/models/route.js +1 -1
  247. package/.next/server/app/v1/models/route.js.nft.json +1 -1
  248. package/.next/server/app/v1/models/route_client-reference-manifest.js +1 -1
  249. package/.next/server/app/waves/page.js +4 -0
  250. package/.next/server/app/waves/page.js.nft.json +1 -0
  251. package/.next/server/app/waves/page_client-reference-manifest.js +1 -0
  252. package/.next/server/app/waves.html +1 -0
  253. package/.next/server/app/waves.meta +7 -0
  254. package/.next/server/app/waves.rsc +22 -0
  255. package/.next/server/app-paths-manifest.json +19 -12
  256. package/.next/server/chunks/1083.js +1 -1
  257. package/.next/server/chunks/1152.js +1 -1
  258. package/.next/server/chunks/1197.js +1 -1
  259. package/.next/server/chunks/1226.js +1 -0
  260. package/.next/server/chunks/1373.js +1 -1
  261. package/.next/server/chunks/1377.js +1 -0
  262. package/.next/server/chunks/1439.js +1 -0
  263. package/.next/server/chunks/1556.js +52 -0
  264. package/.next/server/chunks/1659.js +1 -0
  265. package/.next/server/chunks/1910.js +37 -0
  266. package/.next/server/chunks/{4949.js → 1999.js} +1 -1
  267. package/.next/server/chunks/264.js +1 -1
  268. package/.next/server/chunks/2859.js +3 -3
  269. package/.next/server/chunks/289.js +1 -1
  270. package/.next/server/chunks/{6772.js → 3030.js} +1 -1
  271. package/.next/server/chunks/3286.js +6 -0
  272. package/.next/server/chunks/3489.js +1 -0
  273. package/.next/server/chunks/3648.js +1 -0
  274. package/.next/server/chunks/3774.js +6 -0
  275. package/.next/server/chunks/3823.js +40 -0
  276. package/.next/server/chunks/{3511.js → 3928.js} +1 -1
  277. package/.next/server/chunks/4239.js +1 -0
  278. package/.next/server/chunks/4265.js +1 -1
  279. package/.next/server/chunks/4372.js +1 -0
  280. package/.next/server/chunks/4456.js +1 -1
  281. package/.next/server/chunks/4561.js +64 -0
  282. package/.next/server/chunks/4637.js +13 -8
  283. package/.next/server/chunks/4671.js +1 -1
  284. package/.next/server/chunks/472.js +1 -0
  285. package/.next/server/chunks/4771.js +6 -0
  286. package/.next/server/chunks/5148.js +1 -0
  287. package/.next/server/chunks/5311.js +1 -0
  288. package/.next/server/chunks/5662.js +1 -1
  289. package/.next/server/chunks/5708.js +8 -3
  290. package/.next/server/chunks/5734.js +4 -4
  291. package/.next/server/chunks/6537.js +1 -0
  292. package/.next/server/chunks/6644.js +1 -0
  293. package/.next/server/chunks/6793.js +1 -0
  294. package/.next/server/chunks/6908.js +3 -3
  295. package/.next/server/chunks/701.js +1 -1
  296. package/.next/server/chunks/7032.js +1 -0
  297. package/.next/server/chunks/7214.js +4 -4
  298. package/.next/server/chunks/724.js +1 -1
  299. package/.next/server/chunks/7362.js +18 -18
  300. package/.next/server/chunks/7427.js +1 -0
  301. package/.next/server/chunks/7463.js +4 -4
  302. package/.next/server/chunks/7506.js +1 -1
  303. package/.next/server/chunks/7821.js +1 -1
  304. package/.next/server/chunks/8357.js +1 -0
  305. package/.next/server/chunks/8518.js +2 -0
  306. package/.next/server/chunks/{3778.js → 8652.js} +2 -2
  307. package/.next/server/chunks/8739.js +2 -2
  308. package/.next/server/chunks/8745.js +28 -0
  309. package/.next/server/chunks/9285.js +1 -0
  310. package/.next/server/chunks/9343.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-react-loadable-manifest.js +1 -1
  315. package/.next/server/pages/404.html +1 -1
  316. package/.next/server/pages/500.html +1 -1
  317. package/.next/server/server-reference-manifest.js +1 -1
  318. package/.next/server/server-reference-manifest.json +1 -1
  319. package/.next/static/MMmWHUQ3UAJBdRB7G1zGj/_buildManifest.js +1 -0
  320. package/.next/static/chunks/1871-dd8c10ed9d37100b.js +1 -0
  321. package/.next/static/chunks/1983-242862b3dc022a26.js +1 -0
  322. package/.next/static/chunks/2003-460f30484998c05d.js +1 -0
  323. package/.next/static/chunks/4207-41abb9622eb4b4f8.js +1 -0
  324. package/.next/static/chunks/4812-4a9aceb49632a973.js +1 -0
  325. package/.next/static/chunks/5501-f5b093c8dfd74196.js +1 -0
  326. package/.next/static/chunks/5545-2ab6e5d749e103cd.js +1 -0
  327. package/.next/static/chunks/6016.a157e5bde2faa652.js +1 -0
  328. package/.next/static/chunks/6288-a285bbbd701e0dbf.js +1 -0
  329. package/.next/static/chunks/{3648-733cf7ca4a5d1f19.js → 6730-c330b55cd0fe4f47.js} +1 -1
  330. package/.next/static/chunks/6731-c230e88cf0032609.js +1 -0
  331. package/.next/static/chunks/7430-6e78aaeac66988a9.js +1 -0
  332. package/.next/static/chunks/{7583.26a8c1f6e6823daf.js → 7583.7cb88044a5212b29.js} +1 -1
  333. package/.next/static/chunks/8083.16fda2c7f6d10d0c.js +1 -0
  334. package/.next/static/chunks/812-181496bc32cd0cd3.js +1 -0
  335. package/.next/static/chunks/8480-229fd353b68b570f.js +1 -0
  336. package/.next/static/chunks/8834-bda798efab40c60a.js +1 -0
  337. package/.next/static/chunks/{9164-f54d3531ca1df5f7.js → 9164-3d34bf7eab100ac7.js} +1 -1
  338. package/.next/static/chunks/9181-8d8ecd3f641b7209.js +8 -0
  339. package/.next/static/chunks/9356-99ba407b60b9dfe9.js +1 -0
  340. package/.next/static/chunks/9451-680fa09f81f18806.js +1 -0
  341. package/.next/static/chunks/9659-a279e3aaba407251.js +1 -0
  342. package/.next/static/chunks/app/api/approvals/[id]/route-6b442f97c5062f2c.js +1 -0
  343. package/.next/static/chunks/app/api/approvals/route-6b442f97c5062f2c.js +1 -0
  344. package/.next/static/chunks/app/api/backup/route-6b442f97c5062f2c.js +1 -0
  345. package/.next/static/chunks/app/api/browse/route-6b442f97c5062f2c.js +1 -0
  346. package/.next/static/chunks/app/api/bugs/enhance/route-6b442f97c5062f2c.js +1 -0
  347. package/.next/static/chunks/app/api/cwd/route-6b442f97c5062f2c.js +1 -0
  348. package/.next/static/chunks/app/api/encryption/secure/route-6b442f97c5062f2c.js +1 -0
  349. package/.next/static/chunks/app/api/env/route-6b442f97c5062f2c.js +1 -0
  350. package/.next/static/chunks/app/api/flow/[id]/route-6b442f97c5062f2c.js +1 -0
  351. package/.next/static/chunks/app/api/flow/compile/route-6b442f97c5062f2c.js +1 -0
  352. package/.next/static/chunks/app/api/flow/generate/route-6b442f97c5062f2c.js +1 -0
  353. package/.next/static/chunks/app/api/flow/improve/route-6b442f97c5062f2c.js +1 -0
  354. package/.next/static/chunks/app/api/flow/prompt-renderer/route-6b442f97c5062f2c.js +1 -0
  355. package/.next/static/chunks/app/api/flow/quick-chat/route-6b442f97c5062f2c.js +1 -0
  356. package/.next/static/chunks/app/api/flow/repair/route-6b442f97c5062f2c.js +1 -0
  357. package/.next/static/chunks/app/api/flow/route-6b442f97c5062f2c.js +1 -0
  358. package/.next/static/chunks/app/api/git/route-6b442f97c5062f2c.js +1 -0
  359. package/.next/static/chunks/app/api/init/route-6b442f97c5062f2c.js +1 -0
  360. package/.next/static/chunks/app/api/local-models/capability/route-6b442f97c5062f2c.js +1 -0
  361. package/.next/static/chunks/app/api/local-models/pull/route-6b442f97c5062f2c.js +1 -0
  362. package/.next/static/chunks/app/api/local-models/suggest/route-6b442f97c5062f2c.js +1 -0
  363. package/.next/static/chunks/app/api/mcp/cancel/route-6b442f97c5062f2c.js +1 -0
  364. package/.next/static/chunks/app/api/mcp/servers/[name]/prompts/get/route-6b442f97c5062f2c.js +1 -0
  365. package/.next/static/chunks/app/api/mcp/servers/[name]/prompts/route-6b442f97c5062f2c.js +1 -0
  366. package/.next/static/chunks/app/api/mcp/servers/[name]/resources/read/route-6b442f97c5062f2c.js +1 -0
  367. package/.next/static/chunks/app/api/mcp/servers/[name]/resources/route-6b442f97c5062f2c.js +1 -0
  368. package/.next/static/chunks/app/api/mcp/servers/[name]/route-6b442f97c5062f2c.js +1 -0
  369. package/.next/static/chunks/app/api/mcp/servers/[name]/status/route-6b442f97c5062f2c.js +1 -0
  370. package/.next/static/chunks/app/api/mcp/servers/[name]/tools/[toolName]/route-6b442f97c5062f2c.js +1 -0
  371. package/.next/static/chunks/app/api/mcp/servers/[name]/tools/route-6b442f97c5062f2c.js +1 -0
  372. package/.next/static/chunks/app/api/mcp/servers/route-6b442f97c5062f2c.js +1 -0
  373. package/.next/static/chunks/app/api/mcp/test-connection/route-6b442f97c5062f2c.js +1 -0
  374. package/.next/static/chunks/app/api/mcp/test-connection/stream/route-6b442f97c5062f2c.js +1 -0
  375. package/.next/static/chunks/app/api/mcp-registry/route-6b442f97c5062f2c.js +1 -0
  376. package/.next/static/chunks/app/api/mcp-registry/spotlight/route-6b442f97c5062f2c.js +1 -0
  377. package/.next/static/chunks/app/api/model/[id]/route-6b442f97c5062f2c.js +1 -0
  378. package/.next/static/chunks/app/api/model/provider/route-6b442f97c5062f2c.js +1 -0
  379. package/.next/static/chunks/app/api/model/route-6b442f97c5062f2c.js +1 -0
  380. package/.next/static/chunks/app/api/model/test/route-6b442f97c5062f2c.js +1 -0
  381. package/.next/static/chunks/app/api/oauth/callback/route-6b442f97c5062f2c.js +1 -0
  382. package/.next/static/chunks/app/api/oauth/initiate/route-6b442f97c5062f2c.js +1 -0
  383. package/.next/static/chunks/app/api/oauth/reset/route-6b442f97c5062f2c.js +1 -0
  384. package/.next/static/chunks/app/api/planned-executions/[id]/route-6b442f97c5062f2c.js +1 -0
  385. package/.next/static/chunks/app/api/planned-executions/[id]/run/route-6b442f97c5062f2c.js +1 -0
  386. package/.next/static/chunks/app/api/planned-executions/[id]/runs/route-6b442f97c5062f2c.js +1 -0
  387. package/.next/static/chunks/app/api/planned-executions/preview-schedule/route-6b442f97c5062f2c.js +1 -0
  388. package/.next/static/chunks/app/api/planned-executions/reconcile/route-6b442f97c5062f2c.js +1 -0
  389. package/.next/static/chunks/app/api/planned-executions/route-6b442f97c5062f2c.js +1 -0
  390. package/.next/static/chunks/app/api/restore/route-6b442f97c5062f2c.js +1 -0
  391. package/.next/static/chunks/app/api/runs/active/route-6b442f97c5062f2c.js +1 -0
  392. package/.next/static/chunks/app/api/storage/route-6b442f97c5062f2c.js +1 -0
  393. package/.next/static/chunks/app/api/update/route-6b442f97c5062f2c.js +1 -0
  394. package/.next/static/chunks/app/api/waves/route-6b442f97c5062f2c.js +1 -0
  395. package/.next/static/chunks/app/api/webhooks/[id]/route-6b442f97c5062f2c.js +1 -0
  396. package/.next/static/chunks/app/chat/page-3a3efba25b59a747.js +1 -0
  397. package/.next/static/chunks/app/docs/page-84a92c3d5d8d5e13.js +1 -0
  398. package/.next/static/chunks/app/executions/page-445afbf37819e3ce.js +1 -0
  399. package/.next/static/chunks/app/flows/page-74ebca19957cc6db.js +1 -0
  400. package/.next/static/chunks/app/layout-2ebf01d97702a18a.js +1 -0
  401. package/.next/static/chunks/app/mcp/page-770a870b3d40766b.js +1 -0
  402. package/.next/static/chunks/app/mcp-flows/route-6b442f97c5062f2c.js +1 -0
  403. package/.next/static/chunks/app/mcp-proxy/[server]/route-6b442f97c5062f2c.js +1 -0
  404. package/.next/static/chunks/app/models/error-a3183f168e8a9b04.js +1 -0
  405. package/.next/static/chunks/app/models/page-5a13ea6ff5ac1b9c.js +1 -0
  406. package/.next/static/chunks/app/{page-77e1ba238b0ee1d0.js → page-a859e4dbd180df98.js} +1 -1
  407. package/.next/static/chunks/app/settings/page-7a68583660508ffd.js +1 -0
  408. package/.next/static/chunks/app/v1/chat/completions/route-6b442f97c5062f2c.js +1 -0
  409. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/breakpoints/route-6b442f97c5062f2c.js +1 -0
  410. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/cancel/route-6b442f97c5062f2c.js +1 -0
  411. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/debug/continue/route-6b442f97c5062f2c.js +1 -0
  412. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/debug/step/route-6b442f97c5062f2c.js +1 -0
  413. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/edit-state/route-6b442f97c5062f2c.js +1 -0
  414. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/events/route-6b442f97c5062f2c.js +1 -0
  415. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/resources/route-6b442f97c5062f2c.js +1 -0
  416. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/respond/route-6b442f97c5062f2c.js +1 -0
  417. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/route-6b442f97c5062f2c.js +1 -0
  418. package/.next/static/chunks/app/v1/chat/conversations/route-6b442f97c5062f2c.js +1 -0
  419. package/.next/static/chunks/app/v1/models/route-6b442f97c5062f2c.js +1 -0
  420. package/.next/static/chunks/app/waves/page-ec33cf79f6103a9e.js +1 -0
  421. package/.next/static/chunks/webpack-dded92b3d7b33173.js +1 -0
  422. package/.next/static/css/39393a79f7cb0dee.css +1 -0
  423. package/.next/static/css/599369d853c61df7.css +31 -0
  424. package/.next/static/css/b496025c9cd768cc.css +1 -0
  425. package/.next/trace +9 -9
  426. package/.next/types/app/api/approvals/[id]/route.ts +347 -0
  427. package/.next/types/app/api/approvals/route.ts +347 -0
  428. package/.next/types/app/api/bugs/enhance/route.ts +347 -0
  429. package/.next/types/app/api/planned-executions/reconcile/route.ts +347 -0
  430. package/.next/types/app/api/runs/active/route.ts +347 -0
  431. package/.next/types/app/api/waves/route.ts +347 -0
  432. package/.next/types/app/waves/page.ts +84 -0
  433. package/.next/types/routes.d.ts +9 -2
  434. package/.next/types/validator.ts +63 -0
  435. package/README.md +1 -1
  436. package/package.json +1 -1
  437. package/.next/server/chunks/1491.js +0 -1
  438. package/.next/server/chunks/1690.js +0 -1
  439. package/.next/server/chunks/1746.js +0 -1
  440. package/.next/server/chunks/1991.js +0 -1
  441. package/.next/server/chunks/2261.js +0 -1
  442. package/.next/server/chunks/2350.js +0 -1
  443. package/.next/server/chunks/2430.js +0 -1
  444. package/.next/server/chunks/3574.js +0 -6
  445. package/.next/server/chunks/3953.js +0 -1
  446. package/.next/server/chunks/4028.js +0 -1
  447. package/.next/server/chunks/4045.js +0 -1
  448. package/.next/server/chunks/4322.js +0 -1
  449. package/.next/server/chunks/4498.js +0 -40
  450. package/.next/server/chunks/4690.js +0 -38
  451. package/.next/server/chunks/5625.js +0 -28
  452. package/.next/server/chunks/6532.js +0 -52
  453. package/.next/server/chunks/6901.js +0 -6
  454. package/.next/server/chunks/6981.js +0 -1
  455. package/.next/server/chunks/7101.js +0 -64
  456. package/.next/server/chunks/7635.js +0 -6
  457. package/.next/server/chunks/8298.js +0 -1
  458. package/.next/server/chunks/9957.js +0 -1
  459. package/.next/static/chunks/1161-970b105d0ab11425.js +0 -1
  460. package/.next/static/chunks/1871-14c3e63ca865d85e.js +0 -1
  461. package/.next/static/chunks/1892-5c1e38d89e0a5a9c.js +0 -1
  462. package/.next/static/chunks/2003-7710c23acaef11c9.js +0 -1
  463. package/.next/static/chunks/2720-2a926505ec98a6de.js +0 -1
  464. package/.next/static/chunks/3381-5fd2417957ca0881.js +0 -1
  465. package/.next/static/chunks/3930-cc8d73c953811b97.js +0 -1
  466. package/.next/static/chunks/422-268783d9ad5897e1.js +0 -1
  467. package/.next/static/chunks/4365-5d0e3d01c1bc0fdc.js +0 -1
  468. package/.next/static/chunks/5134-e21bd33daaf14ecf.js +0 -1
  469. package/.next/static/chunks/5501-c400aaeaf57e6297.js +0 -1
  470. package/.next/static/chunks/5619-82fc5c3133837739.js +0 -1
  471. package/.next/static/chunks/6013-cb423bc438256acb.js +0 -1
  472. package/.next/static/chunks/7258-e27017c1b98f43f9.js +0 -1
  473. package/.next/static/chunks/7539.41f0448cf9783388.js +0 -1
  474. package/.next/static/chunks/8066-c202a83aef15143a.js +0 -1
  475. package/.next/static/chunks/8187.fd653767df53db87.js +0 -1
  476. package/.next/static/chunks/8345.76f420453fc0dee7.js +0 -1
  477. package/.next/static/chunks/8755-9f375ec8740fecac.js +0 -1
  478. package/.next/static/chunks/9587-706bfd1a692c4660.js +0 -8
  479. package/.next/static/chunks/app/api/backup/route-b296683a5faf800a.js +0 -1
  480. package/.next/static/chunks/app/api/browse/route-b296683a5faf800a.js +0 -1
  481. package/.next/static/chunks/app/api/cwd/route-b296683a5faf800a.js +0 -1
  482. package/.next/static/chunks/app/api/encryption/secure/route-b296683a5faf800a.js +0 -1
  483. package/.next/static/chunks/app/api/env/route-b296683a5faf800a.js +0 -1
  484. package/.next/static/chunks/app/api/flow/[id]/route-b296683a5faf800a.js +0 -1
  485. package/.next/static/chunks/app/api/flow/compile/route-b296683a5faf800a.js +0 -1
  486. package/.next/static/chunks/app/api/flow/generate/route-b296683a5faf800a.js +0 -1
  487. package/.next/static/chunks/app/api/flow/improve/route-b296683a5faf800a.js +0 -1
  488. package/.next/static/chunks/app/api/flow/prompt-renderer/route-b296683a5faf800a.js +0 -1
  489. package/.next/static/chunks/app/api/flow/quick-chat/route-b296683a5faf800a.js +0 -1
  490. package/.next/static/chunks/app/api/flow/repair/route-b296683a5faf800a.js +0 -1
  491. package/.next/static/chunks/app/api/flow/route-b296683a5faf800a.js +0 -1
  492. package/.next/static/chunks/app/api/git/route-b296683a5faf800a.js +0 -1
  493. package/.next/static/chunks/app/api/init/route-b296683a5faf800a.js +0 -1
  494. package/.next/static/chunks/app/api/local-models/capability/route-b296683a5faf800a.js +0 -1
  495. package/.next/static/chunks/app/api/local-models/pull/route-b296683a5faf800a.js +0 -1
  496. package/.next/static/chunks/app/api/local-models/suggest/route-b296683a5faf800a.js +0 -1
  497. package/.next/static/chunks/app/api/mcp/cancel/route-b296683a5faf800a.js +0 -1
  498. package/.next/static/chunks/app/api/mcp/servers/[name]/prompts/get/route-b296683a5faf800a.js +0 -1
  499. package/.next/static/chunks/app/api/mcp/servers/[name]/prompts/route-b296683a5faf800a.js +0 -1
  500. package/.next/static/chunks/app/api/mcp/servers/[name]/resources/read/route-b296683a5faf800a.js +0 -1
  501. package/.next/static/chunks/app/api/mcp/servers/[name]/resources/route-b296683a5faf800a.js +0 -1
  502. package/.next/static/chunks/app/api/mcp/servers/[name]/route-b296683a5faf800a.js +0 -1
  503. package/.next/static/chunks/app/api/mcp/servers/[name]/status/route-b296683a5faf800a.js +0 -1
  504. package/.next/static/chunks/app/api/mcp/servers/[name]/tools/[toolName]/route-b296683a5faf800a.js +0 -1
  505. package/.next/static/chunks/app/api/mcp/servers/[name]/tools/route-b296683a5faf800a.js +0 -1
  506. package/.next/static/chunks/app/api/mcp/servers/route-b296683a5faf800a.js +0 -1
  507. package/.next/static/chunks/app/api/mcp/test-connection/route-b296683a5faf800a.js +0 -1
  508. package/.next/static/chunks/app/api/mcp/test-connection/stream/route-b296683a5faf800a.js +0 -1
  509. package/.next/static/chunks/app/api/mcp-registry/route-b296683a5faf800a.js +0 -1
  510. package/.next/static/chunks/app/api/mcp-registry/spotlight/route-b296683a5faf800a.js +0 -1
  511. package/.next/static/chunks/app/api/model/[id]/route-b296683a5faf800a.js +0 -1
  512. package/.next/static/chunks/app/api/model/provider/route-b296683a5faf800a.js +0 -1
  513. package/.next/static/chunks/app/api/model/route-b296683a5faf800a.js +0 -1
  514. package/.next/static/chunks/app/api/model/test/route-b296683a5faf800a.js +0 -1
  515. package/.next/static/chunks/app/api/oauth/callback/route-b296683a5faf800a.js +0 -1
  516. package/.next/static/chunks/app/api/oauth/initiate/route-b296683a5faf800a.js +0 -1
  517. package/.next/static/chunks/app/api/oauth/reset/route-b296683a5faf800a.js +0 -1
  518. package/.next/static/chunks/app/api/planned-executions/[id]/route-b296683a5faf800a.js +0 -1
  519. package/.next/static/chunks/app/api/planned-executions/[id]/run/route-b296683a5faf800a.js +0 -1
  520. package/.next/static/chunks/app/api/planned-executions/[id]/runs/route-b296683a5faf800a.js +0 -1
  521. package/.next/static/chunks/app/api/planned-executions/preview-schedule/route-b296683a5faf800a.js +0 -1
  522. package/.next/static/chunks/app/api/planned-executions/route-b296683a5faf800a.js +0 -1
  523. package/.next/static/chunks/app/api/restore/route-b296683a5faf800a.js +0 -1
  524. package/.next/static/chunks/app/api/storage/route-b296683a5faf800a.js +0 -1
  525. package/.next/static/chunks/app/api/update/route-b296683a5faf800a.js +0 -1
  526. package/.next/static/chunks/app/api/webhooks/[id]/route-b296683a5faf800a.js +0 -1
  527. package/.next/static/chunks/app/chat/page-a67ad3683443e7ad.js +0 -1
  528. package/.next/static/chunks/app/docs/page-097827ec4dae1d30.js +0 -1
  529. package/.next/static/chunks/app/executions/page-cb0dcc66d84c9bf8.js +0 -1
  530. package/.next/static/chunks/app/flows/page-abdd0642e378c5da.js +0 -1
  531. package/.next/static/chunks/app/layout-64fc0ae7efe81e3c.js +0 -1
  532. package/.next/static/chunks/app/mcp/page-7d3a269dce68b529.js +0 -1
  533. package/.next/static/chunks/app/mcp-flows/route-b296683a5faf800a.js +0 -1
  534. package/.next/static/chunks/app/mcp-proxy/[server]/route-b296683a5faf800a.js +0 -1
  535. package/.next/static/chunks/app/models/error-5732fbb053e182c5.js +0 -1
  536. package/.next/static/chunks/app/models/page-616950f93a1e0027.js +0 -1
  537. package/.next/static/chunks/app/settings/page-199d0ffae9ec7263.js +0 -1
  538. package/.next/static/chunks/app/v1/chat/completions/route-b296683a5faf800a.js +0 -1
  539. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/breakpoints/route-b296683a5faf800a.js +0 -1
  540. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/cancel/route-b296683a5faf800a.js +0 -1
  541. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/debug/continue/route-b296683a5faf800a.js +0 -1
  542. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/debug/step/route-b296683a5faf800a.js +0 -1
  543. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/edit-state/route-b296683a5faf800a.js +0 -1
  544. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/events/route-b296683a5faf800a.js +0 -1
  545. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/resources/route-b296683a5faf800a.js +0 -1
  546. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/respond/route-b296683a5faf800a.js +0 -1
  547. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/route-b296683a5faf800a.js +0 -1
  548. package/.next/static/chunks/app/v1/chat/conversations/route-b296683a5faf800a.js +0 -1
  549. package/.next/static/chunks/app/v1/models/route-b296683a5faf800a.js +0 -1
  550. package/.next/static/chunks/webpack-ef5b2cef70829f42.js +0 -1
  551. package/.next/static/css/d1484588c616b291.css +0 -31
  552. package/.next/static/dvSaKx6-EfRNi7Xj-cSv_/_buildManifest.js +0 -1
  553. /package/.next/static/{dvSaKx6-EfRNi7Xj-cSv_ → MMmWHUQ3UAJBdRB7G1zGj}/_ssgManifest.js +0 -0
@@ -1,6 +0,0 @@
1
- "use strict";exports.id=6901,exports.ids=[6901],exports.modules={2560:(a,b,c)=>{c.d(b,{Xk:()=>e});var d=c(38301);function e(a,b){let[c,e]=(0,d.useState)(()=>b);return[c,(0,d.useCallback)(a=>{e(b=>"function"==typeof a?a(b):a)},[a])]}},7329:(a,b,c)=>{function d(a,b){let c=[],d=new Map;for(let e of a){let{key:a,label:f}=b(e),g=d.get(a);g||(g={key:a,label:f,items:[]},d.set(a,g),c.push(g)),g.items.push(e)}return c}function e(a){let b=(a??"").trim().charAt(0).toUpperCase();return b>="A"&&b<="Z"?{key:`letter:${b}`,label:b}:{key:"letter:#",label:"#"}}function f(a,b,c="Ungrouped"){let d=new Map,e=[];for(let c of a){let a=b(c)?.trim();if(a){let b=d.get(a);b?b.push(c):d.set(a,[c])}else e.push(c)}let g=Array.from(d.keys()).sort((a,b)=>a.localeCompare(b)).map(a=>({key:`folder:${a}`,label:a,items:d.get(a)}));return e.length>0&&g.push({key:"folder:__ungrouped__",label:c,items:e}),g}function g(a,b){let c=new Set;for(let d of a){let a=b(d)?.trim();a&&c.add(a)}return Array.from(c).sort((a,b)=>a.localeCompare(b))}c.d(b,{Az:()=>d,Je:()=>f,po:()=>e,yF:()=>g})},13516:(a,b,c)=>{c.d(b,{G:()=>d});let d={LOG_LEVEL:3,INCLUDE_TOOL_CALLS_IN_RESPONSE:!0,ENABLE_EXECUTION_TRACKER:!1}},32631:(a,b,c)=>{c.d(b,{D:()=>h}),c(21124);var d=c(38301),e=c(19815);c(84040),c(9718);let f=(0,e.h)("frontend/contexts/ThemeContext"),g=(0,d.createContext)(void 0),h=()=>{let a=(0,d.useContext)(g);if(!a)throw f.error("useTheme hook used outside of ThemeProvider"),Error("useTheme must be used within a ThemeProvider");return f.debug("useTheme hook accessed"),a}},32720:(a,b,c)=>{c.d(b,{A:()=>B});var d=c(21124),e=c(38301),f=c(40512),g=c(83899),h=c(52327),i=c(81637),j=c(43312),k=c(44079),l=c(37674),m=c(41893),n=c(88745),o=c(8521),p=c(79515),q=c(89490),r=c(75983),s=c(50553),t=c(84233),u=c(19925),v=c(68730),w=c(30717),x=c(98810),y=c(52399),z=c(91314);let A=(0,c(19815).h)("frontend/components/shared/FolderPickerDialog"),B=({open:a,title:b="Choose a folder",selectFiles:c=!1,initialPath:B,onClose:C,onSelect:D})=>{let[E,F]=(0,e.useState)(null),[G,H]=(0,e.useState)(""),[I,J]=(0,e.useState)(!1),[K,L]=(0,e.useState)(null),M=(0,e.useCallback)(async a=>{J(!0),L(null);try{let b=a?`?path=${encodeURIComponent(a)}`:"",c=await fetch(`/api/browse${b}`),d=await c.json();if(!c.ok||d.error)return void L(d.error||`HTTP ${c.status}`);F(d),H(d.path)}catch(a){A.warn("Browse failed",a),L("Could not reach the backend to browse folders.")}finally{J(!1)}},[]);(0,e.useEffect)(()=>{a?M(B||void 0):(F(null),L(null))},[a,B,M]);let N=a=>{D(a),C()};return(0,d.jsxs)(f.A,{open:a,onClose:C,maxWidth:"sm",fullWidth:!0,children:[(0,d.jsx)(g.A,{children:b}),(0,d.jsxs)(h.A,{dividers:!0,sx:{display:"flex",flexDirection:"column",gap:1.5},children:[(0,d.jsxs)(i.default,{sx:{display:"flex",alignItems:"center",gap:1},children:[(0,d.jsx)(j.A,{title:"Up one folder",children:(0,d.jsx)("span",{children:(0,d.jsx)(k.A,{size:"small",disabled:!E?.parent||I,onClick:()=>E?.parent&&void M(E.parent),children:(0,d.jsx)(y.A,{fontSize:"small"})})})}),(0,d.jsx)(j.A,{title:"Home folder",children:(0,d.jsx)("span",{children:(0,d.jsx)(k.A,{size:"small",disabled:I,onClick:()=>void M(),children:(0,d.jsx)(z.A,{fontSize:"small"})})})}),(0,d.jsx)(l.A,{fullWidth:!0,size:"small",value:G,onChange:a=>H(a.target.value),onKeyDown:a=>{"Enter"===a.key&&(a.preventDefault(),M(G))},placeholder:"Type a path and press Enter"})]}),E&&E.drives.length>0&&(0,d.jsx)(i.default,{sx:{display:"flex",gap:.75,flexWrap:"wrap"},children:E.drives.map(a=>(0,d.jsx)(m.A,{label:a,size:"small",variant:E.path.toLowerCase().startsWith(a.toLowerCase())?"filled":"outlined",onClick:()=>void M(a)},a))}),K&&(0,d.jsx)(n.A,{severity:"error",children:K}),(0,d.jsxs)(i.default,{sx:{minHeight:240,maxHeight:"45vh",overflow:"auto",border:1,borderColor:"divider",borderRadius:1},children:[I&&(0,d.jsx)(i.default,{sx:{display:"flex",justifyContent:"center",py:4},children:(0,d.jsx)(o.default,{size:24})}),!I&&E&&0===E.entries.length&&(0,d.jsx)(p.default,{variant:"body2",color:"text.secondary",sx:{p:2},children:"This folder is empty."}),!I&&(0,d.jsx)(q.A,{dense:!0,disablePadding:!0,children:E?.entries.map(a=>(0,d.jsxs)(r.A,{disabled:!a.isDirectory&&!c,onClick:()=>a.isDirectory?void M(a.path):N(a.path),children:[(0,d.jsx)(s.A,{sx:{minWidth:34},children:a.isDirectory?(0,d.jsx)(w.A,{fontSize:"small",color:"primary"}):(0,d.jsx)(x.A,{fontSize:"small"})}),(0,d.jsx)(t.A,{primary:a.name,primaryTypographyProps:{noWrap:!0}})]},a.path))})]})]}),(0,d.jsxs)(u.A,{children:[(0,d.jsx)(v.A,{onClick:C,children:"Cancel"}),(0,d.jsx)(v.A,{variant:"contained",disabled:!E||I,onClick:()=>E&&N(E.path),children:"Select this folder"})]})]})}},33799:(a,b,c)=>{c.d(b,{b:()=>f,c:()=>g});var d=c(50648);async function e(a,b){try{let c=await fetch("/api/git",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(a)});if(!c.ok||!c.body)return null;let e=null;return await (0,d.z)(c,a=>{"stdout"===a.type||"stderr"===a.type?b(a.data):"result"===a.type&&(e={success:a.success,output:a.commandOutput??""})}),e}catch(a){return console.error("Error streaming git command:",a),null}}let f=async(a,b,c)=>{if(c){let d=await e({action:"installStream",savePath:a,installCommand:b},c);if(d)return{success:d.success,message:d.success?{type:"success",text:"Dependencies installed successfully. You can now build the server."}:{type:"error",text:"Error installing dependencies. You can still try to build the server."},output:d.output||"No output was returned from the installation process."}}try{let c=await fetch("/api/git",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"install",savePath:a,installCommand:b})}),d=await c.json();if(!c.ok)throw Error(d.error||"Failed to install dependencies");return{success:!0,message:{type:"success",text:"Dependencies installed successfully. You can now build the server."},output:d.commandOutput||"No output was returned from the installation process."}}catch(a){return console.error("Error installing dependencies:",a),{success:!1,message:{type:"error",text:`Error installing dependencies: ${a.message||"Unknown error"}. You can still try to build the server.`},output:a instanceof Response?await a.text():a?.message||"Unknown error"}}},g=async(a,b,c)=>{if(c){let d=await e({action:"buildStream",savePath:a,buildCommand:b},c);if(d)return{success:d.success,message:d.success?{type:"success",text:"Server built successfully."}:{type:"error",text:"Error building server."},output:d.output||"No output was returned from the build process."}}try{let c=await fetch("/api/git",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"build",savePath:a,buildCommand:b})}),d=await c.json();if(!c.ok)throw Error(d.error||"Failed to build repository");return{success:!0,message:{type:"success",text:"Server built successfully."},output:d.commandOutput||"No output was returned from the build process."}}catch(a){return console.error("Error building server:",a),{success:!1,message:{type:"error",text:`Error building server: ${a.message||"Unknown error"}.`},output:a instanceof Response?await a.text():a?.message||"Unknown error"}}}},46393:(a,b,c)=>{c.d(b,{A:()=>ae});var d=c(21124),e=c(38301),f=c(19815),g=c(84040),h=c(8165),i=c(93083),j=c(65343),k=c(53222),l=c(12033),m=c(91034),n=c(95786),o=c(64956),p=c(55641),q=c(29320),r=c(5748),s=c(38941),t=c(1312),u=c(25750),v=c(61615),w=c(78352),x=c(28055),y=c(41893),z=c(56685),A=c(71756),B=c(91901),C=c(83013);let D=({transport:a,size:b="small"})=>{let c=(()=>{switch(a){case"stdio":return{label:"STDIO",icon:(0,d.jsx)(z.A,{fontSize:"small"}),color:"#1976d2",bgColor:"#e3f2fd"};case"websocket":return{label:"WebSocket",icon:(0,d.jsx)(A.A,{fontSize:"small"}),color:"#2e7d32",bgColor:"#e8f5e8"};case"sse":return{label:"SSE",icon:(0,d.jsx)(B.A,{fontSize:"small"}),color:"#f57c00",bgColor:"#fff3e0"};case"streamable":return{label:"HTTP Stream",icon:(0,d.jsx)(C.A,{fontSize:"small"}),color:"#00796b",bgColor:"#e0f2f1"};default:return{label:"UNKNOWN",icon:(0,d.jsx)(z.A,{fontSize:"small"}),color:"#757575",bgColor:"#f5f5f5"}}})();return(0,d.jsx)(y.A,{icon:c.icon,label:c.label,size:b,sx:{backgroundColor:c.bgColor,color:c.color,fontWeight:500,fontSize:"small"===b?"0.75rem":"0.875rem",height:"small"===b?24:32,"& .MuiChip-icon":{color:c.color}}})};var E=c(40512),F=c(83899),G=c(52327),H=c(19925),I=c(68730),J=c(81637),K=c(79515),L=c(88745),M=c(95587),N=c(77028),O=c(89490),P=c(71439),Q=c(50553),R=c(84233),S=c(72264),T=c(53455),U=c(33799);let V=(0,f.h)("frontend/components/mcp/MCPServerManager/ServerUpdateDialog"),W=({open:a,onClose:b,serverName:c,rootPath:f,installCommand:g,buildCommand:i,enabled:k,updateInfo:l,onToggle:m,onUpdated:n})=>{let[o,p]=(0,e.useState)(null),[q,r]=(0,e.useState)(!1),[s,t]=(0,e.useState)(!1),[w,x]=(0,e.useState)(!1),[z,A]=(0,e.useState)(null),[B,C]=(0,e.useState)({}),[D,W]=(0,e.useState)(""),X=!!(g&&g.trim()),Y=!!(i&&i.trim()),Z=[{key:"stop",label:"Stop server",active:k},{key:"pull",label:"Pull latest changes",active:!0},{key:"install",label:`Install dependencies (${g})`,active:X},{key:"build",label:`Build (${i})`,active:Y},{key:"restart",label:"Restart server",active:k}];(0,e.useEffect)(()=>{a&&(r(!1),t(!1),x(!1),A(null),C({}),W(""))},[a,c]),(0,e.useEffect)(()=>{if(a&&l.remoteUrl&&l.localSha&&l.remoteSha){let a=!1;return(0,T.Qz)(l.remoteUrl,l.localSha,l.remoteSha).then(b=>{a||p(b)}),()=>{a=!0}}p(null)},[a,l.remoteUrl,l.localSha,l.remoteSha]);let $=(0,e.useCallback)((a,b)=>{C(c=>({...c,[a]:b}))},[]),_=(0,e.useCallback)((a,b)=>{W(c=>c+(c?"\n":"")+`--- ${a} ---
2
- `+(b||"").trim()+"\n")},[]),aa=async()=>{t(!0),A(null),V.info(`Starting update for server ${c}`);let a=(a,b)=>{$(a,"error"),A(b),t(!1)};try{k&&($("stop","running"),await Promise.resolve(m(!1)),$("stop","done")),$("pull","running");let b=await (0,T.Qv)(f);if(!b.success)return void a("pull",b.error||"Failed to pull updates");if(_("Pull",`Updated ${(0,T.Fu)(b.oldSha)} -> ${(0,T.Fu)(b.newSha)}`),$("pull","done"),X){$("install","running");let b=await (0,U.b)(f,g.trim());if(_("Install",b.output),!b.success)return void a("install",b.message.text);$("install","done")}if(Y){$("build","running");let b=await (0,U.c)(f,i.trim());if(_("Build",b.output),!b.success)return void a("build",b.message.text);$("build","done")}k&&($("restart","running"),await Promise.resolve(m(!0)),$("restart","done")),V.info(`Update completed for server ${c}`),x(!0),t(!1),n?.()}catch(a){V.error(`Update failed for server ${c}`,a),A(a.message||"Update failed"),t(!1)}},ab=s||w||Object.keys(B).length>0,ac=l.hasLocalChanges&&!q;return(0,d.jsxs)(E.A,{open:a,onClose:s?void 0:b,maxWidth:"sm",fullWidth:!0,onClick:a=>a.stopPropagation(),children:[(0,d.jsxs)(F.A,{component:"div",sx:{display:"flex",alignItems:"center",gap:1},children:[(0,d.jsx)(u.A,{color:"primary"}),"Update ",c]}),(0,d.jsxs)(G.A,{children:[(0,d.jsxs)(J.default,{sx:{display:"flex",alignItems:"center",gap:1,mb:1,flexWrap:"wrap"},children:[(0,d.jsx)(y.A,{size:"small",label:(0,T.Fu)(l.localSha),sx:{fontFamily:"monospace"}}),(0,d.jsx)(K.default,{variant:"body2",color:"text.secondary",children:"→"}),(0,d.jsx)(y.A,{size:"small",color:"primary",label:(0,T.Fu)(l.remoteSha),sx:{fontFamily:"monospace"}}),l.branch&&"HEAD"!==l.branch&&(0,d.jsxs)(K.default,{variant:"body2",color:"text.secondary",children:["on ",(0,d.jsx)("code",{children:l.branch})]}),o?.behindBy!=null&&(0,d.jsxs)(K.default,{variant:"body2",color:"text.secondary",children:["(",o.behindBy," commit",1===o.behindBy?"":"s"," behind)"]})]}),l.repoRoot&&l.repoRoot.replace(/\\/g,"/").replace(/\/+$/,"").toLowerCase()!==f.replace(/\\/g,"/").replace(/\/+$/,"").toLowerCase()&&(0,d.jsxs)(K.default,{variant:"body2",color:"text.secondary",sx:{mb:1},children:["This server lives inside a larger repository — the update pulls"," ",(0,d.jsx)("code",{children:l.repoRoot})," as a whole (other servers from the same repository are updated along with it)."]}),o&&o.commits.length>0&&!ab&&(0,d.jsx)(J.default,{sx:{mb:2,p:1,borderRadius:1,border:"1px solid",borderColor:"divider",maxHeight:160,overflow:"auto"},children:o.commits.map(a=>(0,d.jsxs)(K.default,{variant:"body2",sx:{fontSize:"0.8rem"},noWrap:!0,title:a.message,children:[(0,d.jsx)("code",{children:a.sha})," ",a.message]},a.sha))}),l.hasLocalChanges&&!ab&&(0,d.jsxs)(L.A,{severity:"warning",sx:{mb:2},children:[(0,d.jsxs)(K.default,{variant:"body2",sx:{mb:1},children:["This repository has local changes to tracked files. Updating will ",(0,d.jsx)("strong",{children:"discard"})," them. Untracked files (e.g. a ",(0,d.jsx)("code",{children:".env"})," you created) and all FLUJO settings for this server are kept."]}),(0,d.jsx)(J.default,{component:"ul",sx:{m:0,pl:3,maxHeight:100,overflow:"auto"},children:l.dirtyFiles.map(a=>(0,d.jsx)("li",{children:(0,d.jsx)(K.default,{variant:"body2",component:"span",sx:{fontFamily:"monospace",fontSize:"0.8rem"},children:a})},a))}),(0,d.jsx)(M.A,{sx:{mt:1},control:(0,d.jsx)(N.A,{size:"small",checked:q,onChange:a=>r(a.target.checked)}),label:(0,d.jsx)(K.default,{variant:"body2",children:"Discard my local changes and update"})})]}),(0,d.jsx)(O.A,{dense:!0,disablePadding:!0,children:Z.filter(a=>a.active).map(a=>(0,d.jsxs)(P.Ay,{disableGutters:!0,sx:{py:.25},children:[(0,d.jsx)(Q.A,{sx:{minWidth:32},children:(a=>{switch(a){case"running":return(0,d.jsx)(v.default,{size:"small",color:"primary"});case"done":return(0,d.jsx)(h.A,{color:"success",fontSize:"small"});case"error":return(0,d.jsx)(j.A,{color:"error",fontSize:"small"});default:return(0,d.jsx)(S.A,{color:"disabled",fontSize:"small"})}})(B[a.key])}),(0,d.jsx)(R.A,{primary:a.label,primaryTypographyProps:{variant:"body2",noWrap:!0,title:a.label}})]},a.key))}),z&&(0,d.jsxs)(L.A,{severity:"error",sx:{mt:2,whiteSpace:"pre-wrap"},children:[z,k&&(0,d.jsx)(K.default,{variant:"body2",sx:{mt:1},children:"The server was left stopped. Adjust the install/build commands via Edit, then re-enable it."})]}),w&&(0,d.jsxs)(L.A,{severity:"success",sx:{mt:2},children:["Server updated successfully",k?" and restarted":"","."]}),D&&(0,d.jsx)(J.default,{sx:{mt:2,p:1,borderRadius:1,bgcolor:"background.paper",border:"1px solid",borderColor:"divider",fontFamily:"monospace",fontSize:"0.75rem",whiteSpace:"pre-wrap",overflow:"auto",maxHeight:200},children:D})]}),(0,d.jsxs)(H.A,{children:[(0,d.jsx)(I.A,{onClick:b,disabled:s,children:w?"Close":"Cancel"}),!w&&(0,d.jsx)(I.A,{variant:"contained",color:"primary",startIcon:(0,d.jsx)(u.A,{}),onClick:aa,disabled:s||ac,children:s?"Updating…":z?"Retry Update":"Update"})]})]})};var X=c(30873),Y=c(60839),Z=c(30818),$=c(27114),_=c(43312),aa=c(44079),ab=c(67191),ac=c(98463);let ad=(0,f.h)("frontend/components/mcp/MCPServerManager/ServerCard"),ae=({name:a,status:b,path:f,enabled:z,transport:A,onToggle:B=()=>{},onRetry:C=()=>{},onDelete:M=()=>{},onClick:O,onEdit:P=()=>{},onAuthenticate:Q,pickerMode:R=!1,error:S,stderrOutput:U,authorizationUrl:V,selected:ae=!1,onSelect:af,selectionMode:ag=!1,hasOAuthTokens:ah=!1,exposeAsMcpServer:ai=!1,enableMcpApps:aj=!1,updateInfo:ak,installCommand:al,buildCommand:am,onUpdated:an,folder:ao,folders:ap=[],onSetFolder:aq,builtIn:ar=!1})=>{let[as,at]=(0,e.useState)(!1),[au,av]=(0,e.useState)(null),[aw,ax]=(0,e.useState)(!1),[ay,az]=(0,e.useState)(!1),[aA,aB]=(0,e.useState)(""),[aC,aD]=(0,e.useState)("success"),[aE,aF]=(0,e.useState)(!1),[aG,aH]=(0,e.useState)(!1),[aI,aJ]=(0,e.useState)(ai),[aK,aL]=(0,e.useState)(aj);(0,Y.A)(),(0,e.useEffect)(()=>{aJ(ai)},[ai]),(0,e.useEffect)(()=>{aL(aj)},[aj]);let aM=async b=>{aJ(b);let c=await x.S.updateServerConfig(a,{exposeAsMcpServer:b});"success"in c&&c.success?(aB(b?"Server is now exposed to external apps.":"Server is no longer exposed."),aD("success")):(aJ(!b),aB("Failed to update exposure setting."),aD("error")),az(!0)},aN=async b=>{aL(b);let c=await x.S.updateServerConfig(a,{enableMcpApps:b});"success"in c&&c.success?(aB(b?"This server may now render interactive apps in chat (sandboxed).":"Interactive apps disabled for this server."),aD("success")):(aL(!b),aB("Failed to update the MCP Apps setting."),aD("error")),az(!0)},aO=()=>{navigator.clipboard.writeText(""),aB("Endpoint URL copied to clipboard."),aD("success"),az(!0)},aP={connected:"success.main",disconnected:"text.secondary",error:"error.main",connecting:"info.main",initialization:"info.main",requires_authentication:"warning.main"}[b];(0,e.useEffect)(()=>{if(("connecting"===b||"initialization"===b)&&z&&!R){aF(!0);let b=setTimeout(()=>{ad.debug(`Polling status for server: ${a}`),C()},2e3);return()=>{clearTimeout(b),aF(!1)}}"connecting"!==b&&"initialization"!==b&&aF(!1)},[b,z,a,C]);let[aQ,aR]=(0,e.useState)(null);(0,e.useEffect)(()=>()=>{aQ&&clearTimeout(aQ)},[aQ]);let aS=async b=>{b.stopPropagation(),ad.debug(`Reset OAuth tokens button clicked for server: ${a}`),aH(!0);try{let b=await fetch("/api/oauth/reset",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({serverName:a})});if(!b.ok){let a=await b.json();throw Error(a.error||"Failed to reset OAuth tokens")}let c=await b.json();ad.info(`OAuth tokens reset successfully for ${a}`,c),aB("OAuth tokens reset successfully. Server will require re-authentication."),aD("success"),az(!0),setTimeout(()=>{C()},500)}catch(b){ad.error(`Failed to reset OAuth tokens for ${a}`,b),aB(`Failed to reset OAuth tokens: ${b instanceof Error?b.message:"Unknown error"}`),aD("error"),az(!0)}finally{aH(!1)}},{getThemeValue:aT,getThemeColor:aU,colors:aV}=(0,g.Ic)(),aW=()=>{ad.debug(`Server restart initiated for: ${a}`),B(!1),setTimeout(()=>{B(!0),ad.info(`Server ${a} restarted`)},1e3)};return(0,d.jsxs)(Z.A,{role:R?"button":void 0,"aria-pressed":R?ae:void 0,sx:{cursor:"pointer",height:R?"100%":void 0,transition:"box-shadow 0.3s ease, border-color 0.12s ease",border:a=>R&&ae?`2px solid ${a.palette.primary.main}`:"2px solid transparent","&:hover":{boxShadow:3}},onClick:()=>{ad.debug(`Server card clicked: ${a}`),O()},children:[(0,d.jsxs)($.A,{sx:{pb:1},children:[(0,d.jsxs)(J.default,{sx:{display:"flex",justifyContent:"space-between",alignItems:"flex-start",mb:1},children:[(0,d.jsxs)(J.default,{sx:{display:"flex",alignItems:"center",flex:1},children:[ag&&af&&(0,d.jsx)(N.A,{checked:ae,onClick:a=>a.stopPropagation(),onChange:a=>af(a.target.checked),size:"small",sx:{mr:1,p:.5}}),(0,d.jsx)(K.default,{variant:"h6",component:"h3",sx:{flex:1},children:a})]}),(0,d.jsxs)(J.default,{sx:{display:"flex",flexDirection:"column",alignItems:"flex-end",gap:.5},children:[(0,d.jsxs)(J.default,{sx:{display:"flex",alignItems:"center",gap:.5},children:[ak?.updateAvailable&&(0,d.jsx)(_.A,{title:`Update available: ${(0,T.Fu)(ak.localSha)} → ${(0,T.Fu)(ak.remoteSha)}. Click to update.`,children:(0,d.jsx)(y.A,{icon:(0,d.jsx)(u.A,{}),label:"Update",color:"warning",size:"small",onClick:b=>{b.stopPropagation(),ad.debug(`Update badge clicked for server: ${a}`),ax(!0)}})}),ar?(0,d.jsx)(_.A,{title:"FLUJO's built-in server — always available, cannot be edited or removed.",children:(0,d.jsx)(y.A,{label:"Built-in",color:"primary",size:"small"})}):(0,d.jsx)(D,{transport:A,size:"small"})]}),(0,d.jsxs)(J.default,{sx:{display:"flex",alignItems:"center"},children:["connected"===b&&(0,d.jsx)(h.A,{color:"success",sx:{mr:.5},fontSize:"small"}),"disconnected"===b&&(0,d.jsx)(i.A,{color:"action",sx:{mr:.5},fontSize:"small"}),"error"===b&&(0,d.jsx)(j.A,{color:"error",sx:{mr:.5},fontSize:"small"}),"requires_authentication"===b&&(0,d.jsx)(n.A,{color:"warning",sx:{mr:.5},fontSize:"small"}),("connecting"===b||"initialization"===b)&&(0,d.jsx)(v.default,{size:"small",color:"primary",sx:{mr:.5}}),(0,d.jsx)(K.default,{variant:"body2",color:aP,children:"requires_authentication"===b?"Requires Authentication":b})]})]})]}),(0,d.jsx)(K.default,{variant:"body2",color:"text.secondary",sx:{mb:1,fontSize:"0.875rem"},noWrap:!0,title:ar?void 0:f,children:ar?"FLUJO's own backend API — flow authoring, execution and server management as MCP tools.":f}),ar&&!R&&(0,d.jsxs)(J.default,{sx:{mt:1,mb:1,p:1,borderRadius:1,border:"1px solid",borderColor:"divider"},onClick:a=>a.stopPropagation(),children:[(0,d.jsxs)(J.default,{sx:{display:"flex",alignItems:"center"},children:[(0,d.jsx)(q.A,{fontSize:"small",sx:{mr:.5,color:"primary.main"}}),(0,d.jsx)(_.A,{title:"External MCP clients (Claude Code, Claude Desktop, Cursor, …) can drive FLUJO through this local endpoint.",children:(0,d.jsx)(K.default,{variant:"body2",sx:{fontWeight:500},children:"Exposed to external apps"})})]}),(0,d.jsxs)(J.default,{sx:{display:"flex",alignItems:"center",mt:.5},children:[(0,d.jsx)(K.default,{variant:"caption",sx:{flex:1,fontFamily:"monospace",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},title:"",children:""}),(0,d.jsx)(_.A,{title:"Copy endpoint URL",children:(0,d.jsx)(aa.A,{size:"small",onClick:aO,children:(0,d.jsx)(s.A,{fontSize:"small"})})})]})]}),!ar&&!R&&(0,d.jsxs)(J.default,{sx:{mt:1,mb:1,p:1,borderRadius:1,border:"1px solid",borderColor:"divider"},onClick:a=>a.stopPropagation(),children:[(0,d.jsxs)(J.default,{sx:{display:"flex",alignItems:"center"},children:[(0,d.jsx)(q.A,{fontSize:"small",sx:{mr:.5,color:aI?"primary.main":"text.disabled"}}),(0,d.jsx)(ab.A,{checked:aI,onChange:a=>aM(a.target.checked),size:"small"}),(0,d.jsx)(_.A,{title:"Re-expose this server's tools to external MCP clients (Claude Desktop, Cursor, …) at a local URL.",children:(0,d.jsx)(K.default,{variant:"body2",sx:{fontWeight:500},children:"Expose to external apps"})})]}),aI&&(0,d.jsxs)(J.default,{sx:{display:"flex",alignItems:"center",mt:.5},children:[(0,d.jsx)(K.default,{variant:"caption",sx:{flex:1,fontFamily:"monospace",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},title:"",children:""}),(0,d.jsx)(_.A,{title:"Copy endpoint URL",children:(0,d.jsx)(aa.A,{size:"small",onClick:aO,children:(0,d.jsx)(s.A,{fontSize:"small"})})})]})]}),!ar&&!R&&(0,d.jsx)(J.default,{sx:{mt:1,mb:1,p:1,borderRadius:1,border:"1px solid",borderColor:"divider"},onClick:a=>a.stopPropagation(),children:(0,d.jsxs)(J.default,{sx:{display:"flex",alignItems:"center"},children:[(0,d.jsx)(r.A,{fontSize:"small",sx:{mr:.5,color:aK?"primary.main":"text.disabled"}}),(0,d.jsx)(ab.A,{checked:aK,onChange:a=>aN(a.target.checked),size:"small"}),(0,d.jsx)(_.A,{title:"Allow this server's tools to render interactive apps (MCP Apps / ui:// resources) in chat. Rendered read-only in a strict sandbox. Only enable for servers you trust.",children:(0,d.jsx)(K.default,{variant:"body2",sx:{fontWeight:500},children:"Render interactive apps"})})]})}),"error"===b&&(0,d.jsxs)(J.default,{sx:{mt:1,mb:1},children:[(0,d.jsxs)(J.default,{sx:{display:"flex",justifyContent:"space-between",alignItems:"center",mb:.5},children:[(0,d.jsx)(K.default,{variant:"body2",fontWeight:"medium",color:"error",children:"Error:"}),(0,d.jsx)(I.A,{size:"small",color:"primary",onClick:b=>{b.stopPropagation(),ad.debug(`View full error clicked for server: ${a}`),at(!0)},children:"View Full Error"})]}),(0,d.jsx)(J.default,{sx:{maxHeight:"80px",overflow:"auto",p:1,borderRadius:1,bgcolor:a=>aU("error.background"),color:a=>aU("error.text"),border:"1px solid",borderColor:a=>aU("error.border"),fontSize:"0.75rem",fontWeight:500,whiteSpace:"pre-wrap"},children:S||"Unknown error"})]}),"requires_authentication"===b&&!R&&(0,d.jsxs)(J.default,{sx:{mt:1,mb:1},children:[(0,d.jsx)(J.default,{sx:{display:"flex",justifyContent:"space-between",alignItems:"center",mb:1},children:(0,d.jsx)(K.default,{variant:"body2",fontWeight:"medium",color:"warning.main",children:"Authentication Required"})}),(0,d.jsxs)(I.A,{variant:"contained",color:"warning",size:"small",startIcon:(0,d.jsx)(o.A,{}),onClick:async b=>{if(b.stopPropagation(),ad.debug(`Authenticate button clicked for server: ${a}`),Q)Q();else try{let b=await fetch("/api/oauth/initiate",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({serverName:a})});if(!b.ok){let a=await b.json();throw Error(a.error||"Failed to initiate OAuth")}let{authorizationUrl:d,alreadyAuthorized:e}=await b.json();if(e||!d){ad.info(`Server ${a} already authorized, no popup needed`),aW();return}let{openOAuthPopup:f}=await c.e(558).then(c.bind(c,60558));await f({url:d,windowName:`oauth_${a}`,onSuccess:b=>{ad.info(`OAuth authentication successful for ${a}`,b),ad.info(`Automatically restarting server ${a} after OAuth completion`),aW()},onError:b=>{ad.error(`OAuth authentication failed for ${a}`,b),aB("OAuth authentication failed"),aD("error"),az(!0)}})}catch(b){ad.error(`Failed to start OAuth authentication for ${a}`,b),aB("Failed to start OAuth authentication"),aD("error"),az(!0)}},sx:{width:"100%"},children:["Authenticate with ",a]})]})]}),!ar&&!R&&(0,d.jsxs)(ac.A,{sx:{justifyContent:"space-between",px:2,py:1},children:[(0,d.jsxs)(J.default,{sx:{display:"flex",alignItems:"center"},children:[(0,d.jsx)(ab.A,{checked:z,onClick:a=>a.stopPropagation(),onChange:b=>{ad.debug(`Server ${a} toggle changed to: ${b.target.checked}`),B(b.target.checked)},color:"primary",size:"small"}),(0,d.jsx)(K.default,{variant:"body2",sx:{ml:.5,fontWeight:500,color:z?"primary.main":"text.secondary"},children:z?"Enabled":"Disabled"}),z&&(0,d.jsx)(_.A,{title:"Restart server",children:(0,d.jsx)(aa.A,{size:"small",onClick:b=>{b.stopPropagation(),ad.debug(`Restart button clicked for server: ${a}`),aW()},sx:{ml:1},children:(0,d.jsx)(k.A,{fontSize:"small"})})})]}),(0,d.jsxs)(J.default,{children:[(0,d.jsx)(_.A,{title:"Retry connection",children:(0,d.jsx)(aa.A,{color:"primary",onClick:c=>{c.stopPropagation(),ad.debug(`Retry button clicked for server: ${a}`),aQ&&clearTimeout(aQ),aF(!0),C();let d=setTimeout(()=>{"connecting"!==b&&"initialization"!==b&&aF(!1),aR(null)},1e4);aR(d)},disabled:aE,size:"small",children:aE?(0,d.jsx)(v.default,{size:"small",color:"primary"}):(0,d.jsx)(k.A,{})})}),"streamable"===A&&ah&&(0,d.jsx)(_.A,{title:"Reset OAuth tokens",children:(0,d.jsx)(aa.A,{color:"warning",onClick:aS,disabled:aG,size:"small",children:aG?(0,d.jsx)(v.default,{size:"small",color:"primary"}):(0,d.jsx)(p.A,{})})}),aq&&(0,d.jsx)(_.A,{title:ao?`Folder: ${ao}`:"Move to folder",children:(0,d.jsx)(aa.A,{color:ao?"primary":"default",onClick:a=>{a.stopPropagation(),av(a.currentTarget)},size:"small",children:(0,d.jsx)(t.A,{})})}),(0,d.jsx)(_.A,{title:"Edit server",children:(0,d.jsx)(aa.A,{color:"primary",onClick:a=>{a.stopPropagation(),P()},size:"small",children:(0,d.jsx)(l.A,{})})}),(0,d.jsx)(_.A,{title:"Delete server",children:(0,d.jsx)(aa.A,{color:"error",onClick:a=>{a.stopPropagation(),M()},size:"small",children:(0,d.jsx)(m.A,{})})})]})]}),aq&&(0,d.jsx)(w.A,{anchorEl:au,open:!!au,currentFolder:ao,folders:ap,onClose:()=>av(null),onAssign:a=>aq(a)}),(0,d.jsxs)(E.A,{open:as,onClose:()=>{ad.debug(`Error modal closed for server: ${a}`),at(!1)},maxWidth:"md",fullWidth:!0,onClick:a=>a.stopPropagation(),children:[(0,d.jsxs)(F.A,{component:"div",children:["Error Details for ",a]}),(0,d.jsxs)(G.A,{children:[(0,d.jsx)(J.default,{sx:{p:2,borderRadius:1,bgcolor:a=>aU("error.background"),color:a=>aU("error.text"),border:"1px solid",borderColor:a=>aU("error.border"),fontFamily:"monospace",fontSize:"0.875rem",fontWeight:500,whiteSpace:"pre-wrap",overflow:"auto",maxHeight:"300px",mb:2},children:S||"Unknown error"}),U&&(0,d.jsxs)(J.default,{sx:{mt:2},children:[(0,d.jsx)(K.default,{variant:"h6",gutterBottom:!0,children:"Stderr Output:"}),(0,d.jsx)(J.default,{sx:{p:2,borderRadius:1,bgcolor:"background.paper",border:"1px solid",borderColor:"divider",fontFamily:"monospace",fontSize:"0.875rem",whiteSpace:"pre-wrap",overflow:"auto",maxHeight:"300px"},children:U})]})]}),(0,d.jsxs)(H.A,{children:[(0,d.jsx)(I.A,{onClick:()=>at(!1),children:"Close"}),(0,d.jsx)(I.A,{onClick:()=>{let b=[S||"Unknown error",U?`
3
-
4
- Stderr Output:
5
- ${U}`:""].join("");navigator.clipboard.writeText(b),ad.debug(`Error copied to clipboard for server: ${a}`),aB("Error message copied to clipboard"),aD("success"),az(!0)},color:"primary",children:"Copy to Clipboard"})]})]}),ak&&(0,d.jsx)(W,{open:aw,onClose:()=>ax(!1),serverName:a,rootPath:f,installCommand:al,buildCommand:am,enabled:z,updateInfo:ak,onToggle:B,onUpdated:an}),(0,d.jsx)(X.A,{open:ay,autoHideDuration:3e3,onClose:()=>az(!1),anchorOrigin:{vertical:"bottom",horizontal:"center"},children:(0,d.jsx)(L.A,{onClose:()=>az(!1),severity:aC,sx:{width:"100%"},children:aA||"Error message copied to clipboard"})})]})}},50846:(a,b,c)=>{c.d(b,{h:()=>i});var d=c(13516);let e={VERBOSE:-1,DEBUG:0,INFO:1,WARN:2,ERROR:3},f="number"==typeof d.G.LOG_LEVEL?d.G.LOG_LEVEL:e.ERROR;function g(a,b=0){if(b>6)return String(a);if(!(a instanceof Error))return a;let c={name:a.name,message:a.message};for(let d of Object.getOwnPropertyNames(a)){if("name"===d||"message"===d)continue;let e=a[d];"function"!=typeof e&&("stack"===d?c.stack=e:"cause"===d?c.cause=g(e,b+1):"errors"===d&&Array.isArray(e)?c.errors=e.map(a=>g(a,b+1)):c[d]=e)}return c}function h(a,b,c,d,h){if(a>=("number"==typeof h?h:f)){if("function"==typeof d)try{d=d()}catch{d="[lazy log data threw]"}let f=new Date().toISOString(),h=`[${f}] [${b}]`,i=`${h} ${c}`;if(void 0!==d)if(d instanceof Error||"object"==typeof d)try{let a=d instanceof Error?g(d):d,b=JSON.stringify(a,(a,b)=>b instanceof Error?g(b):b,2);i+=`:
6
- ${b}`}catch(a){i+=": [Object cannot be stringified]"}else i+=`: ${d}`;switch(a){case e.VERBOSE:console.debug(`[VERBOSE] ${i}`);break;case e.DEBUG:console.debug(i);break;case e.INFO:console.info(i);break;case e.WARN:console.warn(i);break;case e.ERROR:console.error(i);break;default:console.log(i)}}}function i(a,b){let c,d=((c=a.replace(/^src\//,"")).startsWith("/")&&(c=c.substring(1)),c);return{verbose:(a,c)=>{h(e.VERBOSE,d,a,c,b)},debug:(a,c)=>{h(e.DEBUG,d,a,c,b)},info:(a,c)=>{h(e.INFO,d,a,c,b)},warn:(a,c)=>{h(e.WARN,d,a,c,b)},error:(a,c)=>{h(e.ERROR,d,a,c,b)}}}},53455:(a,b,c)=>{c.d(b,{Fu:()=>i,M8:()=>f,Qv:()=>g,Qz:()=>h});let d=(0,c(19815).h)("frontend/components/mcp/MCPServerManager/utils/serverUpdates"),e=new Map;async function f(a,b=!1){let c=Date.now(),g={},h=[];for(let d of new Set(a.filter(Boolean))){let a=e.get(d);!b&&a&&c-a.at<6e5?g[d]=a.info:h.push(d)}if(h.length>0)try{let a=await fetch("/api/git",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"checkUpdatesBatch",paths:h})}),b=await a.json();if(a.ok&&b.results)for(let[a,d]of Object.entries(b.results))e.set(a,{at:c,info:d}),g[a]=d;else d.warn("Batch update check failed",b.error)}catch(a){d.warn("Batch update check request failed",a)}return g}async function g(a){try{let b=await fetch("/api/git",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"pullUpdates",savePath:a})}),c=await b.json();if(!b.ok)return{success:!1,error:c.error||"Failed to pull updates"};return{success:!0,oldSha:c.oldSha,newSha:c.newSha,updated:c.updated}}catch(a){return{success:!1,error:a.message||"Failed to pull updates"}}}async function h(a,b,c){let e=a.match(/github\.com[:/]([^/]+)\/([^/]+?)(?:\.git)?\/?$/i);if(!e)return null;try{let a=await fetch(`https://api.github.com/repos/${e[1]}/${e[2]}/compare/${b}...${c}`);if(!a.ok)return null;let d=await a.json(),f=Array.isArray(d.commits)?d.commits:[];return{behindBy:"number"==typeof d.total_commits?d.total_commits:null,commits:f.slice(-10).reverse().map(a=>({sha:(a.sha||"").slice(0,7),message:(a.commit?.message||"").split("\n")[0]}))}}catch(a){return d.debug("GitHub compare preview failed (non-fatal)",a),null}}function i(a){return a?a.slice(0,7):""}},61160:(a,b,c)=>{c.d(b,{mO:()=>f,rI:()=>g});var d=c(7329);let e=["stdio","websocket","sse","streamable"];function f(a,b){switch(b){case"name-asc":case"name-desc":return(0,d.po)(a.name);case"status-connected":case"status-disconnected":{let b=a.status;if("connected"===b)return{key:"status:connected",label:"Connected"};if("error"===b)return{key:"status:error",label:"Error"};if("requires_authentication"===b)return{key:"status:auth",label:"Requires authentication"};return{key:"status:disconnected",label:"Disconnected"}}case"transport":{let b=a.transport||"unknown";return{key:`transport:${b}`,label:({stdio:"Stdio",websocket:"WebSocket",sse:"SSE",streamable:"Streamable HTTP"})[b]||b}}default:return{key:"all",label:"All servers"}}}function g(a,b){return[...a].sort((a,c)=>{switch(b){case"name-asc":return a.name.localeCompare(c.name);case"name-desc":return c.name.localeCompare(a.name);case"status-connected":if("connected"===a.status&&"connected"!==c.status)return -1;if("connected"!==a.status&&"connected"===c.status)return 1;return a.name.localeCompare(c.name);case"status-disconnected":if("disconnected"===a.status&&"disconnected"!==c.status)return -1;if("disconnected"!==a.status&&"disconnected"===c.status)return 1;return a.name.localeCompare(c.name);case"transport":{let b=e.indexOf(a.transport??""),d=e.indexOf(c.transport??"");if(b!==d)return b-d;return a.name.localeCompare(c.name)}default:return 0}})}},84040:(a,b,c)=>{c.d(b,{Ic:()=>g});var d=c(32631);let e=(0,c(19815).h)("frontend/utils/theme"),f={light:{background:"#FFFFFF",foreground:"#2C3E50",paperBackground:"#F5F6FA",textSecondary:"#7F8C8D",border:"#e5e7eb",heading:"#111",text:"#333",secondaryText:"#666",error:{background:"#fef2f2",border:"#fecaca",text:"#dc2626"}},dark:{background:"#1a1a1a",foreground:"#f0f0f0",paperBackground:"#2a2a2a",textSecondary:"#aaaaaa",border:"#3a3a3a",heading:"#f8f8f8",text:"#f0f0f0",secondaryText:"#aaa",error:{background:"#3a2222",border:"#5a3333",text:"#f87171"}}};function g(){let{isDarkMode:a}=(0,d.D)();return e.debug(`useThemeUtils called with isDarkMode: ${a}`),{getThemeValue:(b,c)=>a?c:b,getThemeColor:b=>{let c=b.split("."),d=f[a?"dark":"light"];for(let a of c)if(!d||"object"!=typeof d||!(a in d))return e.warn(`Theme color path not found: ${b}`),"";else d=d[a];return d},colors:a?f.dark:f.light,isDarkMode:a}}}};
@@ -1 +0,0 @@
1
- "use strict";exports.id=6981,exports.ids=[6981,7821],exports.modules={41527:(a,b,c)=>{c.d(b,{S$:()=>e,T9:()=>f,qW:()=>h});let d=/\$\{var:([^}]+)\}/g;function e(a,b){if("string"!=typeof a||0===a.length||!d.test(a))return a;let c=b??{};return a.replace(d,(a,b)=>{let d=b.trim(),e=c[d];return"string"==typeof e?e:(console.warn(`[resolveRunVars] unknown variable "${d}"; substituting empty string`),"")})}function f(a){let b;if("string"!=typeof a||0===a.length)return[];let c=new Set;for(d.lastIndex=0;null!==(b=d.exec(a));){let a=b[1].trim();a&&c.add(a)}return[...c]}let g=/^[A-Za-z_][\w-]*$/;function h(a){return"string"==typeof a&&g.test(a)}},44681:(a,b,c)=>{c.d(b,{Q:()=>j,validateFlowForRun:()=>k});var d=c(50846),e=c(87821),f=c(20433),g=c(23514),h=c(84671);let i=(0,d.h)("backend/execution/flow/validateFlowForRun");async function j(a){let b,c;try{b=await f.modelService.loadModels()}catch(a){i.warn("validateFlowObjectForRun: could not load models; skipping model checks",a)}try{let a=await g.mcpService.loadServerConfigs();Array.isArray(a)&&(c=a.map(a=>({name:a.name,status:a.disabled?"disabled":void 0})))}catch(a){i.warn("validateFlowObjectForRun: could not load servers; skipping server checks",a)}return(0,h.nC)(a,{models:b,servers:c})}async function k(a){let b=await e.flowService.getFlow(a);return b?j(b):(i.warn(`validateFlowForRun: flow ${a} could not be loaded; skipping pre-run checks`),{issues:[],errorCount:0,warningCount:0,isRunnable:!0})}},45131:(a,b,c)=>{c.d(b,{C:()=>e,F9:()=>i,PP:()=>h,wM:()=>f});let d=["contains","regex","equals"];function e(a){return"string"==typeof a&&d.includes(a)}function f(a){try{return new RegExp(a),!0}catch{return!1}}function g(a){return"string"==typeof a?a:Array.isArray(a)?a.map(a=>"string"==typeof a?a:a&&"object"==typeof a&&"text"in a&&"string"==typeof a.text?a.text:"").join(""):""}function h(a,b="last-assistant"){if(!Array.isArray(a)||0===a.length)return null;if("last-message"===b)return g(a[a.length-1]?.content);for(let b=a.length-1;b>=0;b--)if(a[b]?.role==="assistant")return g(a[b]?.content);return null}function i(a,b){let c;if(!a)return!1;let d="string"==typeof b?b:"",e="string"==typeof a.value?a.value:String(a.value??"");switch(a.kind){case"contains":c=a.ignoreCase?d.toLowerCase().includes(e.toLowerCase()):d.includes(e);break;case"equals":c=a.ignoreCase?d.toLowerCase()===e.toLowerCase():d===e;break;case"regex":{let b;try{b=new RegExp(e,a.ignoreCase?"i":void 0)}catch(a){return console.warn("[edgeConditions] invalid regex predicate; treating as no-match",e,a),!1}c=b.test(d);break}default:return console.warn("[edgeConditions] unknown condition kind; treating as no-match",a.kind),!1}return a.negate?!c:c}},49181:(a,b,c)=>{c.d(b,{A$:()=>g});let d="_-_-_",e=/^(tool|resource):(.+)$/,f=/\$\{((?:tool|resource):[^}]+|_-_-_[^}]+)\}/g;function g(a){let b,c=[];for(f.lastIndex=0;null!==(b=f.exec(a));){let a=function(a){let b=e.exec(a);if(b){let a=b[1],c=function(a){let b=a.indexOf("__");if(b<=0)return null;let c=a.slice(b+2);return c?{server:a.slice(0,b),name:c}:null}(b[2]);return c?{kind:a,server:c.server,name:c.name}:null}if(a.startsWith(d)){let b=a.split(d);if(3===b.length&&b[1]&&b[2])return{kind:"tool",server:b[1],name:b[2]}}return null}(b[1]);a&&c.push({...a,fullMatch:b[0],index:b.index})}return c}},87821:(a,b,c)=>{c.d(b,{flowService:()=>w});var d=c(32524),e=c(92372),f=c(46480),g=c(50846),h=c(33873),i=c.n(h),j=c(29021),k=c(43326);let l=(0,g.h)("backend/services/flow/flowVersions");function m(a){return(0,e.ln)(a),`flow-versions/${a}`}async function n(a){try{let b=m(a.id),c=Date.now(),d=`${c}-${Math.random().toString(36).slice(2,6)}`,f={versionId:d,flowId:a.id,savedAt:c,flow:a};return await (0,e.Vt)(b,d,f),await o(a.id),d}catch(b){return l.warn(`Could not archive a version of flow ${a.id}`,b),null}}async function o(a){let b=m(a),c=await (0,e.pL)(b);if(!(c.length<=25))for(let d of c.sort((a,b)=>b.savedAt-a.savedAt).slice(25))try{await (0,e.bB)(b,d.versionId)}catch(b){l.warn(`Could not prune version ${d.versionId} of flow ${a}`,b)}}async function p(a){return(await (0,e.pL)(m(a))).sort((a,b)=>b.savedAt-a.savedAt).map(a=>({versionId:a.versionId,savedAt:a.savedAt,name:a.flow?.name??"unknown",nodeCount:a.flow?.nodes?.length??0,edgeCount:a.flow?.edges?.length??0}))}async function q(a,b){try{return await (0,e.EI)(m(a),b,null)}catch(c){return l.debug(`getFlowVersion: could not load ${a}/${b}`,c),null}}async function r(a){try{(0,e.ln)(a),await j.promises.rm(i().join((0,k.ok)(),"db","flow-versions",a),{recursive:!0,force:!0})}catch(b){l.warn(`Could not remove version history of flow ${a}`,b)}}let s=(0,g.h)("backend/services/flow/index"),t=f.Z.FLOWS;async function u(){return global.__flujo_flowsMigration||(global.__flujo_flowsMigration=(async()=>{try{await (0,e.w5)(f.Z.FLOWS,t,a=>a.id)}catch(a){s.error("Flow storage migration failed",a),global.__flujo_flowsMigration=void 0}})()),global.__flujo_flowsMigration}class v{get flowsCache(){return global.__flujo_flowsCache??null}set flowsCache(a){global.__flujo_flowsCache=a}async loadFlows(){try{if(this.flowsCache)return s.debug("Using cached flows"),this.flowsCache;s.debug("Loading flows from storage"),await u();let a=await (0,e.pL)(t);return this.flowsCache=a,s.info("Loaded flows from storage",{count:a.length}),a}catch(a){return s.error("Failed to load flows",a),[]}}async getFlow(a){try{s.debug(`Getting flow by ID: ${a}`);let b=this.flowsCache?.find(b=>b.id===a)||null;if(b)return s.debug(`Flow ${a} found in cache`),b;await u();let c=null;try{c=await (0,e.EI)(t,a,null)}catch(b){s.debug(`getFlow: could not load flow ${a}`,b),c=null}if(c&&this.flowsCache){let a=this.flowsCache,b=a.findIndex(a=>a.id===c.id);b>=0?a[b]=c:a.push(c),this.flowsCache=a}return s.debug(`Flow ${a} ${c?"found":"not found"}`),c}catch(b){return s.error(`Failed to get flow ${a}`,b),null}}async invalidateExecutionCache(a){try{let{FlowExecutor:b}=await Promise.all([c.e(6996),c.e(1223),c.e(5734),c.e(1373),c.e(264),c.e(724),c.e(4498)]).then(c.bind(c,44498));b.clearFlowCache(a),s.debug("Invalidated execution flow cache",{flowId:a??"all"})}catch(a){s.warn("Failed to invalidate execution flow cache",a)}}async saveFlow(a){try{s.debug(`Saving flow: ${a.id}`,{name:a.name}),(0,e.ln)(a.id),await u();let b=null;try{b=await (0,e.EI)(t,a.id,null)}catch(b){s.debug(`saveFlow: could not read previous definition of ${a.id} for versioning`,b)}b&&JSON.stringify(b)!==JSON.stringify(a)&&await n(b),await (0,e.Vt)(t,a.id,a);let c=this.flowsCache;if(c){let b=c.findIndex(b=>b.id===a.id);b>=0?c[b]=a:c.push(a),this.flowsCache=c}return await this.invalidateExecutionCache(a.id),s.info(`Flow ${a.id} saved successfully`),{success:!0}}catch(a){return s.error("Failed to save flow",a),{success:!1,error:a instanceof Error?a.message:"Failed to save flow"}}}async deleteFlow(a){try{s.debug(`Deleting flow: ${a}`),await u(),await (0,e.bB)(t,a);let b=this.flowsCache;return b&&(this.flowsCache=b.filter(b=>b.id!==a)),await this.invalidateExecutionCache(a),await r(a),s.info(`Flow ${a} deleted successfully`),{success:!0}}catch(b){return s.error(`Failed to delete flow: ${a}`,b),{success:!1,error:b instanceof Error?b.message:"Failed to delete flow"}}}async listFlowVersions(a){return p(a)}async getFlowVersion(a,b){return q(a,b)}async revertFlow(a,b){let c=await q(a,b);return c?this.saveFlow({...c.flow,id:a}):{success:!1,error:`No version "${b}" of flow ${a}`}}createNode(a,b){s.debug(`Creating new node of type: ${a}`,{position:b});let c={id:(0,d.A)(),type:a,position:b,data:{label:`${"mcp"===a?"MCP":a.charAt(0).toUpperCase()+a.slice(1)} Node`,type:a,properties:{}}};return s.debug(`Node created with ID: ${c.id}`),c}createNewFlow(a="NewFlow"){s.debug(`Creating new flow: ${a}`);let b={id:(0,d.A)(),type:"start",position:{x:250,y:150},data:{label:"Start Node",type:"start",properties:{promptTemplate:""}}},c={id:(0,d.A)(),name:a,nodes:[b],edges:[]};return s.info(`New flow created with ID: ${c.id}`,{name:a}),c}createHistoryEntry(a,b){return s.debug("Creating history entry",{nodeCount:a.length,edgeCount:b.length}),{nodes:[...a],edges:[...b]}}generateSampleFlow(a="Sample Flow"){s.debug(`Generating sample flow: ${a}`);let b={id:(0,d.A)(),name:a,nodes:[{id:"1",type:"start",position:{x:250,y:50},data:{label:"Start Node",type:"start",properties:{prompt:"Enter your query here",systemMessage:"You are a helpful assistant",temperature:0}}},{id:"2",type:"process",position:{x:250,y:200},data:{label:"Process Node",type:"process",properties:{operation:"transform",enabled:!0}}},{id:"3",type:"finish",position:{x:250,y:350},data:{label:"Finish Node",type:"finish",properties:{format:"json",template:'{ "result": {{data}} }'}}},{id:"4",type:"mcp",position:{x:450,y:200},data:{label:"MCP Node",type:"mcp",properties:{channels:2,mode:"parallel"}}}],edges:[{id:"e1-2",source:"1",target:"2",type:"custom"},{id:"e2-3",source:"2",target:"3",type:"custom"}]};return s.info(`Sample flow generated with ID: ${b.id}`,{name:a}),b}async listFlows(){s.debug("listFlows: Entering method");try{let a=await this.loadFlows();return{success:!0,flows:a}}catch(a){return s.warn("listFlows: Failed to list flows:",a),{success:!1,error:a instanceof Error?a.message:"Failed to list flows"}}}}let w=new v}};
@@ -1,64 +0,0 @@
1
- "use strict";exports.id=7101,exports.ids=[7101],exports.modules={8336:(a,b,c)=>{c.d(b,{A$:()=>g});let d="_-_-_",e=/^(tool|resource):(.+)$/,f=/\$\{((?:tool|resource):[^}]+|_-_-_[^}]+)\}/g;function g(a){let b,c=[];for(f.lastIndex=0;null!==(b=f.exec(a));){let a=function(a){let b=e.exec(a);if(b){let a=b[1],c=function(a){let b=a.indexOf("__");if(b<=0)return null;let c=a.slice(b+2);return c?{server:a.slice(0,b),name:c}:null}(b[2]);return c?{kind:a,server:c.server,name:c.name}:null}if(a.startsWith(d)){let b=a.split(d);if(3===b.length&&b[1]&&b[2])return{kind:"tool",server:b[1],name:b[2]}}return null}(b[1]);a&&c.push({...a,fullMatch:b[0],index:b.index})}return c}},8918:(a,b,c)=>{c.d(b,{Fp:()=>f,M5:()=>d,Po:()=>e});let d=(a,b,c,d,e)=>({type:"model",code:a,message:b,modelId:c,requestId:d,details:e}),e=(a,b,c,d,e)=>({type:"tool",code:a,message:b,toolName:c,toolArgs:d,details:e}),f=(a,b,c,d,e)=>({type:"mcp",code:a,message:b,serverName:c,operation:d,details:e})},11659:(a,b,c)=>{c.d(b,{flowService:()=>w});var d=c(89850),e=c(79111),f=c(89392),g=c(18230),h=c(33873),i=c.n(h),j=c(29021),k=c(63129);let l=(0,g.h)("backend/services/flow/flowVersions");function m(a){return(0,e.ln)(a),`flow-versions/${a}`}async function n(a){try{let b=m(a.id),c=Date.now(),d=`${c}-${Math.random().toString(36).slice(2,6)}`,f={versionId:d,flowId:a.id,savedAt:c,flow:a};return await (0,e.Vt)(b,d,f),await o(a.id),d}catch(b){return l.warn(`Could not archive a version of flow ${a.id}`,b),null}}async function o(a){let b=m(a),c=await (0,e.pL)(b);if(!(c.length<=25))for(let d of c.sort((a,b)=>b.savedAt-a.savedAt).slice(25))try{await (0,e.bB)(b,d.versionId)}catch(b){l.warn(`Could not prune version ${d.versionId} of flow ${a}`,b)}}async function p(a){return(await (0,e.pL)(m(a))).sort((a,b)=>b.savedAt-a.savedAt).map(a=>({versionId:a.versionId,savedAt:a.savedAt,name:a.flow?.name??"unknown",nodeCount:a.flow?.nodes?.length??0,edgeCount:a.flow?.edges?.length??0}))}async function q(a,b){try{return await (0,e.EI)(m(a),b,null)}catch(c){return l.debug(`getFlowVersion: could not load ${a}/${b}`,c),null}}async function r(a){try{(0,e.ln)(a),await j.promises.rm(i().join((0,k.ok)(),"db","flow-versions",a),{recursive:!0,force:!0})}catch(b){l.warn(`Could not remove version history of flow ${a}`,b)}}let s=(0,g.h)("backend/services/flow/index"),t=f.Z.FLOWS;async function u(){return global.__flujo_flowsMigration||(global.__flujo_flowsMigration=(async()=>{try{await (0,e.w5)(f.Z.FLOWS,t,a=>a.id)}catch(a){s.error("Flow storage migration failed",a),global.__flujo_flowsMigration=void 0}})()),global.__flujo_flowsMigration}class v{get flowsCache(){return global.__flujo_flowsCache??null}set flowsCache(a){global.__flujo_flowsCache=a}async loadFlows(){try{if(this.flowsCache)return s.debug("Using cached flows"),this.flowsCache;s.debug("Loading flows from storage"),await u();let a=await (0,e.pL)(t);return this.flowsCache=a,s.info("Loaded flows from storage",{count:a.length}),a}catch(a){return s.error("Failed to load flows",a),[]}}async getFlow(a){try{s.debug(`Getting flow by ID: ${a}`);let b=this.flowsCache?.find(b=>b.id===a)||null;if(b)return s.debug(`Flow ${a} found in cache`),b;await u();let c=null;try{c=await (0,e.EI)(t,a,null)}catch(b){s.debug(`getFlow: could not load flow ${a}`,b),c=null}if(c&&this.flowsCache){let a=this.flowsCache,b=a.findIndex(a=>a.id===c.id);b>=0?a[b]=c:a.push(c),this.flowsCache=a}return s.debug(`Flow ${a} ${c?"found":"not found"}`),c}catch(b){return s.error(`Failed to get flow ${a}`,b),null}}async invalidateExecutionCache(a){try{let{FlowExecutor:b}=await Promise.resolve().then(c.bind(c,37101));b.clearFlowCache(a),s.debug("Invalidated execution flow cache",{flowId:a??"all"})}catch(a){s.warn("Failed to invalidate execution flow cache",a)}}async saveFlow(a){try{s.debug(`Saving flow: ${a.id}`,{name:a.name}),(0,e.ln)(a.id),await u();let b=null;try{b=await (0,e.EI)(t,a.id,null)}catch(b){s.debug(`saveFlow: could not read previous definition of ${a.id} for versioning`,b)}b&&JSON.stringify(b)!==JSON.stringify(a)&&await n(b),await (0,e.Vt)(t,a.id,a);let c=this.flowsCache;if(c){let b=c.findIndex(b=>b.id===a.id);b>=0?c[b]=a:c.push(a),this.flowsCache=c}return await this.invalidateExecutionCache(a.id),s.info(`Flow ${a.id} saved successfully`),{success:!0}}catch(a){return s.error("Failed to save flow",a),{success:!1,error:a instanceof Error?a.message:"Failed to save flow"}}}async deleteFlow(a){try{s.debug(`Deleting flow: ${a}`),await u(),await (0,e.bB)(t,a);let b=this.flowsCache;return b&&(this.flowsCache=b.filter(b=>b.id!==a)),await this.invalidateExecutionCache(a),await r(a),s.info(`Flow ${a} deleted successfully`),{success:!0}}catch(b){return s.error(`Failed to delete flow: ${a}`,b),{success:!1,error:b instanceof Error?b.message:"Failed to delete flow"}}}async listFlowVersions(a){return p(a)}async getFlowVersion(a,b){return q(a,b)}async revertFlow(a,b){let c=await q(a,b);return c?this.saveFlow({...c.flow,id:a}):{success:!1,error:`No version "${b}" of flow ${a}`}}createNode(a,b){s.debug(`Creating new node of type: ${a}`,{position:b});let c={id:(0,d.A)(),type:a,position:b,data:{label:`${"mcp"===a?"MCP":a.charAt(0).toUpperCase()+a.slice(1)} Node`,type:a,properties:{}}};return s.debug(`Node created with ID: ${c.id}`),c}createNewFlow(a="NewFlow"){s.debug(`Creating new flow: ${a}`);let b={id:(0,d.A)(),type:"start",position:{x:250,y:150},data:{label:"Start Node",type:"start",properties:{promptTemplate:""}}},c={id:(0,d.A)(),name:a,nodes:[b],edges:[]};return s.info(`New flow created with ID: ${c.id}`,{name:a}),c}createHistoryEntry(a,b){return s.debug("Creating history entry",{nodeCount:a.length,edgeCount:b.length}),{nodes:[...a],edges:[...b]}}generateSampleFlow(a="Sample Flow"){s.debug(`Generating sample flow: ${a}`);let b={id:(0,d.A)(),name:a,nodes:[{id:"1",type:"start",position:{x:250,y:50},data:{label:"Start Node",type:"start",properties:{prompt:"Enter your query here",systemMessage:"You are a helpful assistant",temperature:0}}},{id:"2",type:"process",position:{x:250,y:200},data:{label:"Process Node",type:"process",properties:{operation:"transform",enabled:!0}}},{id:"3",type:"finish",position:{x:250,y:350},data:{label:"Finish Node",type:"finish",properties:{format:"json",template:'{ "result": {{data}} }'}}},{id:"4",type:"mcp",position:{x:450,y:200},data:{label:"MCP Node",type:"mcp",properties:{channels:2,mode:"parallel"}}}],edges:[{id:"e1-2",source:"1",target:"2",type:"custom"},{id:"e2-3",source:"2",target:"3",type:"custom"}]};return s.info(`Sample flow generated with ID: ${b.id}`,{name:a}),b}async listFlows(){s.debug("listFlows: Entering method");try{let a=await this.loadFlows();return{success:!0,flows:a}}catch(a){return s.warn("listFlows: Failed to list flows:",a),{success:!1,error:a instanceof Error?a.message:"Failed to list flows"}}}}let w=new v},18975:(a,b,c)=>{function d(a){return"assistant"===a.role&&Array.isArray(a.tool_calls)&&a.tool_calls.length>0}function e(a){let b=a.length-1;for(;b>=0;b--){let c=a[b];if(!("tool"===c.role||d(c)))break}let c=a.slice(b+1);return c.some(d)?c:[]}function f(a,b,c){if(!b||"full-history"===b)return a;let d=a.filter(a=>"system"===a.role);if("isolated"===b)return[...d,{role:"user",content:c??"",id:"isolated-input",timestamp:0},...e(a)];let f=-1;for(let b=a.length-1;b>=0;b--)if("user"===a[b].role){f=b;break}return -1===f?a:[...d,...a.slice(f)]}function g(a){return a.tool_calls.some(a=>"function"===a.type&&i(a.function.name))}function h(a,b){if(0===b.size)return a;let c=a.length-e(a).length,f=Array(c).fill(!1);for(let b=0;b<c;){let e=a[b].processNodeId,h=b;for(;h<c&&a[h].processNodeId===e;)h++;let i=!1;if(e)for(let c=b;c<h;c++){let b=a[c];if("assistant"===b.role&&k(b)&&(!d(b)||g(b))){i=!0;break}}for(let a=b;a<h;a++)f[a]=i;b=h}let h=new Set,i=[],j=!1;for(let e=0;e<a.length;e++){let l=a[e];if(e<c){if(d(l)&&l.processNodeId&&b.has(l.processNodeId)&&f[e]){for(let a of l.tool_calls)h.add(a.id);if(j=!0,g(l)&&k(l)){let{tool_calls:a,...b}=l;i.push(b)}continue}if("tool"===l.role&&l.tool_call_id&&h.has(l.tool_call_id)){j=!0;continue}}i.push(l)}return j?i:a}function i(a){return"handoff"===a||a.startsWith("handoff_to_")}function j(a,b){return[b,...a.filter(a=>"system"!==a.role)]}function k(a){return"string"==typeof a.content?a.content.trim().length>0:!!Array.isArray(a.content)&&a.content.length>0}function l(a){return(function(a){let b=new Set;for(let c of a)if("assistant"===c.role&&Array.isArray(c.tool_calls))for(let a of c.tool_calls)"function"===a.type&&i(a.function.name)&&b.add(a.id);let c=[];for(let d of a)if(("user"!==d.role||"string"!=typeof d.content||"The handoff was successful. Continue"!==d.content.trim())&&!("tool"===d.role&&d.tool_call_id&&b.has(d.tool_call_id))){if("assistant"===d.role&&Array.isArray(d.tool_calls)&&d.tool_calls.some(a=>"function"===a.type&&i(a.function.name))){let a=d.tool_calls.filter(a=>!("function"===a.type&&i(a.function.name)));if(a.length>0)c.push({...d,tool_calls:a});else if(k(d)){let{tool_calls:a,...b}=d;c.push(b)}continue}c.push(d)}return c})(a).map(({id:a,timestamp:b,disabled:c,processNodeId:d,depth:e,usage:f,...g})=>g)}c.d(b,{Qv:()=>h,Ui:()=>j,ae:()=>l,ij:()=>f})},22861:(a,b,c)=>{c.d(b,{R:()=>e,j:()=>d});let d="flujo://run/",e={autoCaptureEnabled:!0,textThresholdChars:8192,maxResourceBytes:0x3200000,maxConversationBytes:0x10000000,replaceLargeTextWithStub:!1}},26485:(a,b,c)=>{c.d(b,{E5:()=>g,Jp:()=>d,O:()=>f,g4:()=>e});let d="TOOL_CALL",e="FINAL_RESPONSE",f="ERROR",g="STAY_ON_NODE"},27386:(a,b,c)=>{c.d(b,{S$:()=>e,T9:()=>f,qW:()=>h});let d=/\$\{var:([^}]+)\}/g;function e(a,b){if("string"!=typeof a||0===a.length||!d.test(a))return a;let c=b??{};return a.replace(d,(a,b)=>{let d=b.trim(),e=c[d];return"string"==typeof e?e:(console.warn(`[resolveRunVars] unknown variable "${d}"; substituting empty string`),"")})}function f(a){let b;if("string"!=typeof a||0===a.length)return[];let c=new Set;for(d.lastIndex=0;null!==(b=d.exec(a));){let a=b[1].trim();a&&c.add(a)}return[...c]}let g=/^[A-Za-z_][\w-]*$/;function h(a){return"string"==typeof a&&g.test(a)}},34115:(a,b,c)=>{c.d(b,{LB:()=>q,Os:()=>t,UG:()=>w,cc:()=>u,jM:()=>x,u8:()=>s});var d=c(29021),e=c(33873),f=c.n(e),g=c(18230),h=c(63129);let i=(0,g.h)("backend/execution/flow/conversationLog"),j=new Set(["run:start","run:done","node:enter","node:exit","handoff","message","message:removed","tool:call","tool:result","usage","subflow:start","subflow:done","resource:read","resource:write","error"]),k=/^[A-Za-z0-9_-]+$/,l=f().join((0,h.ok)(),"db","conversation-logs");function m(a){return f().join(l,`${a}.jsonl`)}let n=new Map;function o(a,b){let c=(n.get(a)??Promise.resolve()).catch(()=>{}).then(async()=>{await d.promises.mkdir(l,{recursive:!0}),await d.promises.appendFile(m(a),b)});return n.set(a,c),c.finally(()=>{n.get(a)===c&&n.delete(a)})}function p(a){return`${JSON.stringify(a)}
2
- `}function q(a){if(j.has(a.type)){if(!k.test(a.conversationId))return void i.warn("Refusing to log event for unsafe conversation id",{conversationId:a.conversationId});(function(a){try{let{FlowExecutor:b}=c(37101),d=b.conversationStates.get(a);if(!d)return!1;return!d.ephemeral}catch(b){return i.warn(`Could not resolve persistence policy for ${a}; not persisting.`,{err:b}),!1}})(a.conversationId)&&o(a.conversationId,p(a)).catch(b=>i.warn(`Failed to append event to conversation log ${a.conversationId}`,{err:b}))}}async function r(a,b){if(0===b.length||a.ephemeral)return;let c=a.conversationId;if(!c||!k.test(c))return;let d=b.map(a=>p({...a,conversationId:c,seq:-1,timestamp:Date.now()})).join("");try{await o(c,d)}catch(a){i.warn(`Failed to append ${b.length} event(s) to conversation log ${c}`,{err:a})}}function s(a){let b=n.get(a);return b?b.then(()=>void 0,()=>void 0):Promise.resolve()}async function t(a){let b;if(!k.test(a))return;try{b=await d.promises.readFile(m(a),"utf-8")}catch(b){if("ENOENT"===b.code)return;i.error(`Error reading conversation log ${a}:`,b);return}let c=[],e=0;for(let a of b.split("\n"))if(0!==a.trim().length)try{c.push(JSON.parse(a))}catch{e++}return e>0&&i.warn(`Skipped ${e} unparseable line(s) in conversation log ${a} (truncated append?)`),c}function u(a){let b=[],c=new Map;for(let d of a)if("message"===d.type){let a=d.message;if(!a||!a.id||"system"===a.role)continue;let e=d.depth??0,f=e>0?{...a,depth:e}:{...a},g=c.get(a.id);void 0!==g?b[g]=f:(c.set(a.id,b.length),b.push(f))}else if("message:removed"===d.type){let a=c.get(d.messageId);if(void 0===a)continue;for(let[e,f]of(b.splice(a,1),c.delete(d.messageId),c))f>a&&c.set(e,f-1)}return b}function v(a){return JSON.stringify([a.role,a.content,a.tool_calls??null,a.disabled??!1,a.processNodeId??null])}async function w(a,b){if(a.ephemeral)return;let c=a.conversationId;if(!c||!k.test(c))return;let d=(a.messages??[]).filter(a=>"system"!==a.role&&!!a.id),e=await y(c)?b.filter(a=>"system"!==a.role&&!!a.id):[],f=new Map(e.map(a=>[a.id,a])),g=new Set(d.map(a=>a.id)),h=[];for(let a of d){let b=f.get(a.id);b&&v(b)===v(a)||h.push({type:"message",message:a})}for(let a of e)g.has(a.id)||h.push({type:"message:removed",messageId:a.id});await r(a,h)}async function x(a){if(a.ephemeral)return!1;let b=a.conversationId;if(!b||!k.test(b))return!1;let c=await t(b);if(!c)return!1;let d=u(c).filter(a=>!((a.depth??0)>0)),e=(a.messages??[]).filter(a=>"system"!==a.role&&!!a.id).map(a=>a.id);if(d.length<=e.length)return!1;let f=new Set(d.map(a=>a.id));return!!e.every(a=>f.has(a))&&(i.info(`Recovered ${d.length-e.length} message(s) from the conversation log for ${b} (snapshot was behind).`),a.messages=d,!0)}async function y(a){if(!k.test(a))return!1;try{return await d.promises.access(m(a)),!0}catch{return!1}}},37101:(a,b,c)=>{c.r(b),c.d(b,{FlowExecutor:()=>ao});var d=c(18230),e=c(26485),f=c(43304),g=c.n(f),h=c(86028),i=c(11659);let j=(0,d.h)("backend/execution/flow/pocketflow"),k="default";class l{constructor(){j.debug("BaseNode constructor called"),this.flow_params={},this.node_params={},this.successors=new Map}setParams(a,b){j.debug("setParams called with params",{params:a}),j.verbose("setParams input",{params:a,node_params:b}),this.flow_params=a,b&&(this.node_params=b),j.debug("setParams finished. flow_params count",{flow_params:this.flow_params?.length,node_params:this.node_params?.length}),j.verbose("setParams result",{flow_params:this.flow_params,node_params:this.node_params})}clone(){j.debug("clone called");let a=this._clone();return j.verbose("_clone result",{newNode:a}),a.flow_params=g()(this.flow_params),j.verbose("Cloned flow_params",{flow_params:a.flow_params}),a.node_params=g()(this.node_params),j.verbose("Cloned node_params",{node_params:a.node_params}),a.successors=new Map(this.successors),j.verbose("Cloned successors",{successors:a.successors}),j.verbose("clone finished"),a}addSuccessor(a,b=k){if(j.verbose(`addSuccessor called with action: ${b}`),this.successors.has(b))throw j.error(`Action ${b} already exists`),Error(`Action ${b} already exists`);this.successors.set(b,a),j.debug("addSuccessor finished. Successors",{successors:this.successors})}getSuccessor(a){if(j.debug(`getSuccessor called with name: ${a}`),!this.successors.has(a))return void j.error(`Successor ${a} not found`);let b=this.successors.get(a).clone();return j.debug("getSuccessor finished. Returning successor",{successor:b}),b}async execWrapper(a,b){j.debug("execWrapper called with prepResult",{prepResult:a}),j.verbose("execWrapper input",{prepResult:a,node_params:b});let c=await this.execCore(a,b);return j.debug("execWrapper finished. Result",{result:c}),j.verbose("execWrapper result",c),c}async run(a){j.debug("run called with sharedState",{sharedState:a}),j.debug("Current flow_params at start of run",{flow_params:this.flow_params}),j.verbose("run input",{sharedState:a,flow_params:this.flow_params,node_params:this.node_params});let b=await this.prep(a,this.node_params);j.verbose("run prepResult",b);let c=await this.execWrapper(b,this.node_params);j.verbose("run execResult",c);let d=await this.post(b,c,a,this.node_params);return j.debug("action",{action:d}),j.debug(`run finished. Returning action: ${d}`),j.verbose("run action result",{action:d,prepResult:b,execResult:c}),{action:d,prepResult:b,execResult:c}}}class m extends l{constructor(a){j.debug("Flow constructor called with start",{start:a}),super(),this.start=a}_clone(){j.debug("Flow _clone called");let a=new m(this.start);return j.debug("Flow _clone finished. Returning",{newFlow:a}),a}async getStartNode(){j.debug("getStartNode called");let a=this.start.clone();return j.debug("getStartNode finished. Returning",{clonedStart:a}),a}async execCore(a){throw j.error("Flow node does not support direct execution"),j.verbose("Flow execCore error",{error:"Flow node does not support direct execution"}),Error("Flow node does not support direct execution")}async prep(a,b){return j.debug("Flow prep called with sharedState",{sharedState:a}),j.verbose("Flow prep input",{sharedState:a,node_params:b}),j.debug("Flow prep finished. Returning empty object"),j.verbose("Flow prep result",{}),{}}async post(a,b,c,d){return j.debug("Flow post called with prepResult, execResult, and sharedState",{prepResult:a,execResult:b,sharedState:c}),j.verbose("Flow post input",{prepResult:a,execResult:b,node_params:d}),j.debug("Flow post finished. Returning DEFAULT_ACTION"),j.verbose("Flow post result",{action:k}),k}}let n=(0,d.h)("execution/nodes/StartNode.ts");class o extends l{async prep(a,b){n.info("prep() started");let c=b?.properties?.promptTemplate||"";n.info("Extracted promptTemplate",{promptTemplateLength:c.length,promptTemplatePreview:c.length>100?c.substring(0,100)+"...":c});let d={nodeId:b?.id||"",nodeType:"start",systemPrompt:c};return n.info("prep() completed"),d}async execCore(a,b){n.info("execCore() started"),n.verbose("execCore() prepResult",JSON.stringify(a));let c={success:!0};return n.verbose("execCore() execResult",JSON.stringify(c)),n.info("execCore() completed"),c}async post(a,b,c,d){if(n.info("post() started"),n.verbose("post() inputs",JSON.stringify({prepResult:a,execResult:b,nodeParams:d})),h.G.ENABLE_EXECUTION_TRACKER&&Array.isArray(c.trackingInfo.nodeExecutionTracker)&&(c.trackingInfo.nodeExecutionTracker.push({nodeType:"StartNode",nodeId:d?.id||"unknown",nodeName:d?.properties?.name||"Start Node",timestamp:new Date().toISOString()}),n.info("Added StartNode tracking information")),a.systemPrompt){let b={role:"system",content:a.systemPrompt,id:crypto.randomUUID(),timestamp:Date.now()};c.messages.some(a=>"system"===a.role)||(c.messages.push(b),n.debug("Added system message",{contentLength:"string"==typeof b.content?b.content.length:"non-string content",contentPreview:"string"==typeof b.content&&b.content.length>50?b.content.substring(0,50)+"...":b.content}))}n.info("Successors object:",{hasSuccessors:!!this.successors,isMap:this.successors instanceof Map,type:typeof this.successors});let e=this.successors instanceof Map?Array.from(this.successors.keys()):Object.keys(this.successors||{});if(n.info("Actions:",{actionsCount:e.length,actions:e}),e.length>0){let a=e[0];return n.info(`post() completed, returning action: ${a}`),a}return n.info("post() completed, returning default action"),"default"}_clone(){return new o}}var p=c(12763),q=c(99924),r=c(8336);c(87507);let s=(0,d.h)("backend/utils/PromptRenderer");class t{async renderPrompt(a,b,c){let d=c?.renderMode||"rendered",e=c?.includeConversationHistory||!1;s.info(`Rendering prompt for node ${b} in flow ${a}`,{renderMode:d,includeConversationHistory:e});let{prompt:f,excludeModelPrompt:g,excludeStartNodePrompt:h,excludeSystemPrompt:i}=await this.findNodePrompt(b,a),j=c?.excludeModelPrompt!==void 0?c?.excludeModelPrompt:g,k=c?.excludeStartNodePrompt!==void 0?c?.excludeStartNodePrompt:h,l=c?.excludeSystemPrompt!==void 0?c?.excludeSystemPrompt:i;s.debug("Exclusion settings",{excludeModelPrompt:j,excludeStartNodePrompt:k,excludeSystemPrompt:l,fromOptions:{excludeModelPrompt:c?.excludeModelPrompt!==void 0,excludeStartNodePrompt:c?.excludeStartNodePrompt!==void 0,excludeSystemPrompt:c?.excludeSystemPrompt!==void 0}});let m="",n=null;if(!k){let b=await this.findStartNodePrompt(a);b&&(s.debug("Adding start node prompt",{length:b.length}),m+=b+"\n\n")}if(!j){let c=await this.findModelPrompt(b,a);c.prompt&&(s.debug("Adding model prompt",{modelId:c.modelId,length:c.prompt.length}),m+=c.prompt+"\n\n"),n=c.functionCallingSchema,c.reasoningSchema&&(m+=`Please use the following pattern to mark your reasoning: ${c.reasoningSchema}
3
-
4
- `),n&&(m+=`Please use the following pattern to use a tool: ${n}
5
-
6
- `)}return l||(m+=`# GENERAL INFORMATION:
7
- `,m+=`You are operating in a workflow with other agents, each with it's own responsibilities.
8
- `,m+=`You will receive a message from the user which may contain tasks that are outside of your scope.
9
- `,m+=`Focus on the part of the user-message that can be accomplished using the tools provided to you.
10
-
11
- `,m+=`You may do multiple tool calls.
12
-
13
- `,m+=`After you completed the user's request to the best of your ability, you can use the 'handoff_to_xxxx' tool.
14
-
15
- `,m+=`The processing may be handed back to you as part of a loop. In this case repeat processing your instructions as if you were executing them for the first time.
16
-
17
- `),f&&(m+=`# YOUR OPERATIONAL INSTRUCTION:
18
- `,s.debug("Adding node prompt",{length:f.length}),m+=f+`
19
- `),m=await this.resolveBindings(m,d,n,c?.onResourceRead),e&&(s.debug("Adding conversation history placeholder"),m+="\n\n[Conversation History will be included here]"),s.info("Prompt rendering completed",{totalLength:m.length,hasStartNodePrompt:!k,hasModelPrompt:!j,hasSystemPrompt:!l,hasNodePrompt:!!f,includesConversationHistory:e}),m}async findStartNodePrompt(a){s.debug(`Finding start node prompt for flow ${a}`);let b=await i.flowService.getFlow(a);if(!b)return s.warn(`Flow not found: ${a}`),"";let c=b.nodes.find(a=>"start"===a.type);if(!c)return s.warn(`Start node not found in flow: ${a}`),"";let d=c.data.properties?.promptTemplate||"";return s.debug("Found start node prompt",{nodeId:c.id,length:d.length}),d}async findModelPrompt(a,b){s.debug(`Finding model prompt for node ${a} in flow ${b}`);let c=await i.flowService.getFlow(b);if(!c)return s.warn(`Flow not found: ${b}`),{prompt:"",modelId:null,reasoningSchema:null,functionCallingSchema:null};let d=c.nodes.find(b=>b.id===a);if(!d)return s.warn(`Node not found: ${a} in flow: ${b}`),{prompt:"",modelId:null,reasoningSchema:null,functionCallingSchema:null};let e=d.data.properties?.boundModel;if(!e)return s.debug(`No model bound to node ${a}`),{prompt:"",modelId:null,reasoningSchema:null,functionCallingSchema:null};let f=await p.modelService.getModel(e);if(!f)return s.warn(`Model not found: ${e}`),{prompt:"",modelId:null,reasoningSchema:null,functionCallingSchema:null};let g=f.promptTemplate||"",h=f.reasoningSchema||null,j=f.functionCallingSchema||null;return s.debug("Found model prompt",{modelId:e,modelName:f.name,length:g.length}),{prompt:g,modelId:e,reasoningSchema:h,functionCallingSchema:j}}async findNodePrompt(a,b){s.debug(`Finding node prompt for node ${a} in flow ${b}`);let c=await i.flowService.getFlow(b);if(!c)return s.warn(`Flow not found: ${b}`),{prompt:"",excludeModelPrompt:!1,excludeStartNodePrompt:!1,excludeSystemPrompt:!1};let d=c.nodes.find(b=>b.id===a);if(!d)return s.warn(`Node not found: ${a} in flow: ${b}`),{prompt:"",excludeModelPrompt:!1,excludeStartNodePrompt:!1,excludeSystemPrompt:!1};let e=d.data.properties?.promptTemplate||"",f=d.data.properties?.excludeModelPrompt||!1,g=d.data.properties?.excludeStartNodePrompt||!1,h=d.data.properties?.excludeSystemPrompt||!1;return s.debug("Found node prompt and settings",{length:e.length,excludeModelPrompt:f,excludeStartNodePrompt:g,excludeSystemPrompt:h}),{prompt:e,excludeModelPrompt:f,excludeStartNodePrompt:g,excludeSystemPrompt:h}}async resolveBindings(a,b,c,d){b="raw";let e=(0,r.A$)(a);if(0===e.length)return a;s.debug(`Resolving ${e.length} binding pills`,{renderMode:b});let f=this.resolveFormatType(c),g="",h=0;for(let c of e)g+=a.slice(h,c.index),h=c.index+c.fullMatch.length,"resource"===c.kind?g+=await this.renderResourceBinding(c.server,c.name,d):"raw"===b?g+=c.fullMatch:g+=await this.renderToolBinding(c.server,c.name,f,c.fullMatch);return g+=a.slice(h),s.debug("Resolved binding pills"),g}resolveFormatType(a){return a?a.includes('"tool"')&&a.includes('"parameters"')?"json":a.includes("<")&&a.includes("</")?"xml":"text":"text"}async ensureConnected(a){let b=await q.mcpService.getServerStatus(a);return"connected"!==b.status&&(s.debug(`force connect ${a}`),await q.mcpService.connectServer(a),b=await q.mcpService.getServerStatus(a)),"connected"===b.status}async renderToolBinding(a,b,c,d){for(let e=0;e<3;e++){try{if(await this.ensureConnected(a)){let d=await q.mcpService.listServerTools(a),e=d.tools?.find(a=>a.name===b);if(e)switch(c){case"json":return this.formatToolDescriptionJSON(a,b,e);case"xml":return this.formatToolDescriptionXML(a,b,e);default:{let c=this.formatToolParameters(e);return`[The user is referencing a tool \`tool:${a}__${b}\` (${e.description||"No description"})${c}]`}}s.warn(`Tool not found: ${b} in server ${a}`)}else s.warn(`Server not connected: ${a}`)}catch(a){s.warn(`Error resolving tool pill (attempt ${e+1}): ${d}`,a)}await this.delay(100*Math.pow(2,e+1))}return s.error(`Failed to resolve tool pill after multiple retries: ${d}`),d}async renderResourceBinding(a,b,c){for(let d=0;d<3;d++){try{if(await this.ensureConnected(a)){let d=await q.mcpService.readResource(a,b);if(d.success&&d.data){let e=this.formatResourceContents(d.data);try{let e=d.data?.contents?.[0];c?.({server:a,uri:b,mimeType:e?.mimeType,size:"string"==typeof e?.text?e.text.length:"string"==typeof e?.blob?Math.floor(3*e.blob.length/4):void 0})}catch{}return`
20
- [Resource ${b} (from ${a})]:
21
- ${e}
22
- `}return s.warn(`Failed to read resource ${b} from ${a}: ${d.error}`),`[Resource ${b} from ${a} could not be read: ${d.error||"unknown error"}]`}s.warn(`Server not connected for resource read: ${a}`)}catch(a){s.warn(`Error resolving resource pill (attempt ${d+1}): ${b}`,a)}await this.delay(100*Math.pow(2,d+1))}return`[Resource ${b} from ${a} is currently unavailable]`}formatResourceContents(a){let b=a?.contents;return Array.isArray(b)&&0!==b.length?b.map(a=>{if("string"==typeof a.text)return a.text;if("string"==typeof a.blob){let b=Math.round(3*a.blob.length/4/1024);return`[binary ${a.mimeType||"data"} (~${b} KB)${a.uri?` at ${a.uri}`:""} — not inlined; readable via MCP resources/read]`}return JSON.stringify(a)}).join("\n\n"):"(empty resource)"}formatToolDescriptionJSON(a,b,c){let d={tool:`${b}`,parameters:{}};if(c.inputSchema?.properties)for(let a in c.inputSchema.properties){let b=c.inputSchema.properties[a];d.parameters[a]=b.description||a}return`[Tool: \`tool:${a}__${b}\` (${c.description||"No description"})
23
- Example usage:
24
- ${JSON.stringify(d,null,2)}]`}formatToolDescriptionXML(a,b,c){let d=`<${b}>
25
- `;if(c.inputSchema?.properties)for(let a in c.inputSchema.properties){let b=c.inputSchema.properties[a];d+=` <${a}>${b.description||a}</${a}>
26
- `}return d+=`</${b}>`,`[Tool: \`tool:${a}__${b}\` (${c.description||"No description"})
27
- Example usage:
28
- ${d}]`}formatToolParameters(a){if(!a.inputSchema||!a.inputSchema.properties)return"";let b=[];for(let c in a.inputSchema.properties){let d=a.inputSchema.properties[c],e=d.description?`(${d.description})`:"";b.push(`\`${c}\` ${e}`)}return b.length>0?` with parameters ${b.join(", ")}`:""}delay(a){return new Promise(b=>setTimeout(b,a))}}let u=new t;var v=c(70834),w=c(80808),x=c(71966);let y=(0,d.h)("backend/flow/execution/handlers/ResourceHandler");function z(a,b,c){let d=Array.isArray(c?.contents)?c.contents:[];if(0===d.length)return`### ${a}
29
- (empty resource — ${b})
30
- `;let e=d.map(a=>{if("string"==typeof a.text)return a.text;if("string"==typeof a.blob){let b=Math.round(3*a.blob.length/4/1024);return`[binary ${a.mimeType||"data"} (~${b} KB)${a.uri?` at ${a.uri}`:""} — not inlined; readable via MCP resources/read]`}return JSON.stringify(a)}).join("\n\n");return`### ${a} (${b})
31
- ${e}
32
- `}class A{static async processResourceNodes(a){let b=(a.resourceNodes??[]).filter(a=>"consume"===a.role);if(0===b.length)return"";let c=[];for(let d of b){let b=d.properties??{},e=b.name||b.runName||b.uri||d.id;try{if("run"===b.scope){let f=b.runName?.trim();if(!f){c.push(`### ${e}
33
- (run artifact with no name — configure the resource node)
34
- `);continue}if(!a.conversationId){c.push(`### ${e}
35
- (run artifact "${f}" is not available in this run)
36
- `);continue}let g=await (0,x.FA)(a.conversationId,f);if(!g){c.push(`### ${e}
37
- (run artifact "${f}" has not been produced yet)
38
- `);continue}let h=await (0,x.gy)(g.uri,{at:Date.now(),source:"node",nodeId:d.id});if(!h){c.push(`### ${e}
39
- (run artifact "${f}" could not be read)
40
- `);continue}c.push(z(e,g.uri,h.contents)),a.emit?.({type:"resource:read",node:{nodeId:d.id,nodeName:b.name,nodeType:"resource"},server:"flujo",uri:g.uri,name:f,mimeType:g.mimeType,size:g.size,source:"node"})}else{let f=b.boundServer,g=b.uri;if(!f||!g){c.push(`### ${e}
41
- (resource node is not fully bound — set server and uri)
42
- `);continue}let h=await q.mcpService.readResource(f,g);if(!h.success||!h.data){c.push(`### ${e}
43
- (resource ${g} on ${f} could not be read: ${h.error??"unknown error"})
44
- `);continue}c.push(z(e,`${g} from ${f}`,h.data));let i=h.data.contents?.[0];a.emit?.({type:"resource:read",node:{nodeId:d.id,nodeName:b.name,nodeType:"resource"},server:f,uri:g,name:b.name,mimeType:i?.mimeType??b.mimeType,size:"string"==typeof i?.text?i.text.length:"string"==typeof i?.blob?Math.floor(3*i.blob.length/4):void 0,source:"node"})}}catch(a){y.error(`Failed to read resource node ${d.id}; injecting a note`,a),c.push(`### ${e}
45
- (resource is currently unavailable)
46
- `)}}return`
47
-
48
- ## Resources
49
- The following data artifacts are wired to this step:
50
-
51
- ${c.join("\n")}`}}var B=c(18975),C=c(85701);function D(a,b){let c=a.replace(/\s+/g," ").trim();if(c.length<=b)return c;let d=c.slice(0,b),e=d.lastIndexOf(" ");return`${(e>.6*b?d.slice(0,e):d).trimEnd()}…`}let E=(0,d.h)("backend/execution/flow/buildHandoffDescription");async function F(a,b){if(!a)return;if(b.modelNames.has(a))return b.modelNames.get(a);let c=a;try{let b=await p.modelService.getModel(a);b&&(c=b.displayName&&b.displayName.trim()||b.name||a)}catch(b){E.debug("resolveModelName failed; using raw id",{modelId:a,err:b})}return b.modelNames.set(a,c),c}async function G(a,b){if(b.serverConnected.has(a))return b.serverConnected.get(a);let c=!1;try{let b=await q.mcpService.getServerStatus(a);c=b?.status==="connected"}catch(b){E.debug("getServerStatus failed; treating server as offline",{server:a,err:b})}return b.serverConnected.set(a,c),c}async function H(a,b){if(b.flows.has(a))return b.flows.get(a);let c=null;try{c=await i.flowService.getFlow(a)}catch(b){E.debug("getFlow failed while summarising subflow",{flowId:a,err:b})}return b.flows.set(a,c),c}async function I(a,b){let c=Array.isArray(a.mcpNodes)?a.mcpNodes:[],d=[],e=new Set;for(let a of c){let c=a?.properties?.boundServer;if(!c||e.has(c))continue;e.add(c);let f=await G(c,b),g=Array.isArray(a?.properties?.enabledTools)?a.properties.enabledTools:[];d.push({name:c,connected:f,tools:f?g:void 0})}return d}async function J(a,b,c,d){let e=a.data?.type||a.type||"unknown",f=a.data?.label||"Unknown Node",g=a.data?.properties||{},h=a.data?.description,i={label:f,type:e,userDescription:h};if(h&&h.trim())return i;if("subflow"===e){let a=g.subflowId;if(!a)return i.subflowMissing=!0,i;if(b+1>C.A||d.has(a)){i.depthCapReached=!0;let b=await H(a,c);return i.subflowName=b?.name,i}let e=await H(a,c);if(!e)return i.subflowMissing=!0,i;i.subflowName=e.name;let f=new Set(d);f.add(a);let h=(e.nodes||[]).filter(a=>a.data?.type==="process"||a.data?.type==="subflow"||"process"===a.type||"subflow"===a.type);for(let a of(i.children=[],h))i.children.push(await J(a,b+1,c,f));return i}i.modelName=await F(g.boundModel,c);let j=g.promptTemplate;return"string"==typeof j&&j.trim()&&(i.promptSummary=j),i.servers=await I(g,c),i}async function K(a){try{let b=await J(a,0,{modelNames:new Map,serverConnected:new Map,flows:new Map},new Set);return function(a){if(a.userDescription&&a.userDescription.trim())return D(a.userDescription,1500);let b=`Hand off execution to ${a.label} (${a.type}).`,c=[];!function a(b,c,d){let e=" ".repeat(c);if(b.userDescription&&b.userDescription.trim())return void d.push(`${e}${D(b.userDescription,200)}`);if("subflow"===b.type){if(b.subflowMissing)return void d.push(`${e}Runs a subflow (referenced flow not found).`);if(b.subflowDetailsUnavailable){let a=b.subflowName?` "${b.subflowName}"`:"";d.push(`${e}Runs a subflow${a} (contents summarised when the flow runs).`);return}if(d.push(`${e}Runs the subflow "${b.subflowName??"unknown"}", which contains:`),b.depthCapReached)return void d.push(`${e} (nested subflows omitted — recursion depth limit reached)`);let f=b.children??[];if(0===f.length)return void d.push(`${e} (no process or subflow steps)`);for(let b of f.slice(0,10))d.push(`${e} - ${b.label}:`),a(b,c+2,d);return void(f.length>10&&d.push(`${e} - …and ${f.length-10} more step(s)`))}if(b.modelName&&d.push(`${e}Model: ${b.modelName}`),b.promptSummary&&d.push(`${e}Role: ${D(b.promptSummary,200)}`),b.servers&&b.servers.length>0)for(let a of b.servers)if(a.connected&&a.tools&&a.tools.length>0){let b=a.tools.slice(0,10),c=a.tools.length-b.length,f=c>0?`, +${c} more`:"";d.push(`${e}Tools (${a.name}): ${b.join(", ")}${f}`)}else d.push(`${e}Tools (${a.name}): server not connected`)}(a,0,c);let d=c.join("\n").trim(),e=d?`${b}
52
- ${d}`:b;if(e.length<=1500)return e;let f=1500-b.length-2;return f<=0?b:`${b}
53
- ${D(d,f)}`}(b)}catch(d){let b=a.data?.label||"Unknown Node",c=a.data?.type||a.type||"unknown";return E.warn("buildHandoffDescription failed; falling back to basic description",{label:b,type:c,err:d}),`Hand off execution to ${b} (${c})`}}let L="handoff_to_";var M=c(78606),N=c(27386);let O=(0,d.h)("backend/flow/execution/resolveRunResourceRefs"),P=/\$\{res:([^}]+)\}/g;async function Q(a,b,c,d){if(!a||!a.includes("${res:")||!b)return a?a.replace(P,""):a;P.lastIndex=0;let e=new Set;for(let b=P.exec(a);b;b=P.exec(a))e.add(b[1]);let f=new Map;for(let a of e){let e="";try{let f=await (0,x.FA)(b,a.trim());if(f){let b=await (0,x.gy)(f.uri,{at:Date.now(),source:"res-ref",nodeId:d?.nodeId});if(b){let h=b.contents.contents[0];if(h&&"string"==typeof h.text&&"link"!==f.kind)e=`
54
- --- resource ${a} (${f.uri}) ---
55
- ${h.text}
56
- --- end resource ${a} ---
57
- `;else{var g;e=`[run resource "${a}": ${f.mimeType??f.kind} (${(g=f.size)<1024?`${g} B`:g<1048576?`${Math.round(g/1024)} KB`:`${(g/1048576).toFixed(1)} MB`}) at ${f.uri} — readable via the 'flujo' MCP server]`}c?.({type:"resource:read",node:d,server:"flujo",uri:f.uri,name:a,mimeType:f.mimeType,size:f.size,source:"res-ref"})}else O.warn(`\${res:${a}} entry exists but payload read failed; resolving to ''`,{uri:f.uri})}else O.warn(`\${res:${a}} has no matching run resource; resolving to ''`,{conversationId:b})}catch(b){O.error(`Failed to resolve \${res:${a}}; resolving to ''`,b)}f.set(a,e)}return a.replace(P,(a,b)=>f.get(b)??"")}var R=c(89850);let S=(0,d.h)("backend/flow/execution/nodes/ProcessNode");class T extends l{async generateHandoffTools(a){S.info("Generating handoff tools");let b=(this.successors instanceof Map?Array.from(this.successors.keys()):Object.keys(this.successors||{})).filter(a=>!a.includes("-mcpEdge")&&!a.endsWith("mcpEdge")&&!a.includes("-mcp"));S.debug("Found standard actions for handoff tools",{actionsCount:b.length,actions:b});let c=[],d=new Set;for(let a of b){let b=this.successors instanceof Map?this.successors.get(a):this.successors[a];if(!b){S.warn(`Target node not found for edge ${a}`);continue}let e=b.node_params?.id||"unknown";d.has(e)||(d.add(e),c.push({id:e,label:b.node_params?.label||"Unknown Node",type:b.node_params?.type||"unknown"}))}let e=function(a){let b=new Set,c=new Map;for(let d of a){if(c.has(d.id))continue;let a=function(a,b){let c=(a&&a.trim()||b&&b.trim()||"node").toLowerCase().replace(/[^a-z0-9]+/g,"_").replace(/_+/g,"_").replace(/^_+|_+$/g,"");return c.length>48&&(c=c.slice(0,48).replace(/_+$/g,"")),c||(c=b&&b.trim().toLowerCase().replace(/[^a-z0-9]+/g,"_")||"node"),c||"node"}(d.label,d.type),e=`${L}${a}`;if(b.has(e)){let c=2;for(;b.has(`${L}${a}_${c}`);)c++;e=`${L}${a}_${c}`}b.add(e),c.set(d.id,e)}return c}(c);a.handoffNameMap=a.handoffNameMap||{};let f=null;try{let b=await i.flowService.getFlow(a.flowId);b&&(f=new Map(b.nodes.map(a=>[a.id,a])))}catch(a){S.warn("Could not load flow for handoff descriptions; using basic descriptions",{err:a})}let g=[];for(let b of c){let c=e.get(b.id)||`handoff_to_${b.id}`;a.handoffNameMap[c]=b.id;let d=f?.get(b.id),h=d?await K(d):`Hand off execution to ${b.label} (${b.type})`,i=d?.data?.properties,j="subflow"===b.type&&i?.inputMode==="isolated"&&i?.allowCallerPrompt===!0;g.push({name:c,description:j?`${h}
58
-
59
- Optionally pass a "prompt" argument to instruct the target subflow; omit it to use its default prompt.`:h,inputSchema:j?{type:"object",properties:{prompt:{type:"string",description:"Instruction/prompt to run the target subflow with (isolated mode). Optional; omitted falls back to the subflow's default prompt."}},required:[]}:{type:"object",properties:{},required:[]}}),S.debug("Created handoff tool",{toolName:c,targetNodeId:b.id,targetNodeLabel:b.label})}return S.info("Generated handoff tools",{toolsCount:g.length}),g}async prep(a,b){S.info("prep() started");let c=b?.id,d=a.flowId,e=b?.properties?.boundModel,f=b?.properties?.excludeModelPrompt||!1,g=b?.properties?.excludeStartNodePrompt||!1,h=b?.properties?.excludeSystemPrompt||!1;if(S.debug("Extracted properties",{nodeId:c,flowId:d,boundModel:e,excludeModelPrompt:f,excludeStartNodePrompt:g,excludeSystemPrompt:h}),!c||!d)throw S.error("Missing required node or flow ID",{nodeId:c,flowId:d}),Error("Process node requires node ID and flow ID");if(!e)throw S.error("Missing bound model"),Error("Process node requires a bound model");S.info("Using promptRenderer to build the complete prompt");let j=await u.renderPrompt(d,c,{renderMode:"rendered",includeConversationHistory:!1,excludeModelPrompt:f,excludeStartNodePrompt:g,excludeSystemPrompt:h,onResourceRead:b=>a.emit?.({type:"resource:read",node:{nodeId:c},source:"pill",...b})}),k=await Q((0,N.S$)(j,a.variables),a.ephemeral?void 0:a.conversationId,a.emit,{nodeId:c}),l=b?.properties?.resourceNodes||[];l.length>0&&(k+=await A.processResourceNodes({resourceNodes:l,conversationId:a.ephemeral?void 0:a.conversationId,emit:a.emit})),S.debug("Prompt rendered successfully",{completePromptLength:k.length,completePromptPreview:k.length>100?k.substring(0,100)+"...":k}),a.currentNodeId=c;let m=[];if(a.mcpContext&&a.mcpContext.availableTools&&a.mcpContext.availableTools.length>0)S.info("Using MCP tools from shared state",{toolsCount:a.mcpContext.availableTools.length}),m=a.mcpContext.availableTools;else{let a=b?.properties?.mcpNodes||[];if(a.length>0){S.info("No MCP tools found in shared state, processing MCP nodes",{mcpNodesCount:a.length});let b=await v.ToolHandler.processMCPNodes({mcpNodes:a});if(!b.success)throw S.error("Failed to process MCP nodes",{error:b.error}),Error(`Failed to process MCP nodes: ${b.error.message}`);m=b.value.availableTools}}for(let b of(m=[...m,...await this.generateHandoffTools(a)],a.toolNameMap=a.toolNameMap||{},m))b.server&&b.originalName&&(a.toolNameMap[b.name]={server:b.server,tool:b.originalName,timeout:b.timeout});let n={nodeId:c,nodeType:"process",currentPrompt:k,boundModel:e,availableTools:m,messages:[],conversationId:a.conversationId,requireToolApproval:a.requireApproval??!1},o={id:(0,R.A)(),role:"system",content:k,timestamp:Date.now()};S.info("Added system message from prompt template",{contentLength:k.length,contentPreview:k.length>100?k.substring(0,100)+"...":k}),n.messages=(0,B.Ui)(a.messages,o);let p=b?.properties?.inputMode??"full-history",q=n.messages;try{let a=await i.flowService.getFlow(d),b=new Set((a?.nodes??[]).filter(a=>"process"===a.type&&a.data?.properties?.outputMode==="latest-message").map(a=>a.id));q=(0,B.Qv)(n.messages,b)}catch(a){S.warn("Could not resolve outputMode collapse set; sending the full wire view",{err:a})}if("full-history"!==p||q!==n.messages){let d=b?.properties?.isolatedPrompt,e=void 0!==d?await Q((0,N.S$)(d,a.variables),a.ephemeral?void 0:a.conversationId,a.emit,{nodeId:c}):d;n.wireMessages=(0,B.ij)(q,p,e)}return S.info("Assembled node context",{systemMessageCount:1,totalMessageCount:n.messages.length,inputMode:p,wireMessageCount:n.wireMessages?.length}),S.info("prep() completed",{completePromptLength:k.length,boundModel:e,hasTools:!!n.availableTools?.length,toolsCount:n.availableTools?.length||0,messagesCount:n.messages.length}),n}async execCore(a,b){S.info("execCore() started",{boundModel:a.boundModel,promptLength:a.currentPrompt?.length,messagesCount:a.messages?.length||0}),S.debug("execCore() prepResult",a);try{let c,d;if(a.availableTools&&a.availableTools.length>0){let b=v.ToolHandler.prepareTools({availableTools:a.availableTools});if(!b.success)throw S.error("Failed to prepare tools",{error:b.error}),Error(`Failed to prepare tools: ${b.error.message}`);d=b.value.tools}let e={};for(let b of a.availableTools??[])b.server&&b.originalName&&(e[b.name]={server:b.server,tool:b.originalName,timeout:b.timeout});let f=b?.label||b?.properties?.name||"Process Node",g=a.messages&&a.messages.length>0?a.messages[a.messages.length-1]:null;S.debug(`[ProcessNode ${a.nodeId}] Calling ModelHandler.callModel`,{modelId:a.boundModel,messageCount:a.messages?.length||0,toolCount:d?.length||0,lastMessageType:g?.role,lastMessageToolCallId:g?.role==="tool"?g.tool_call_id:void 0,lastMessageContentPreview:"string"==typeof g?.content?g.content.substring(0,100)+"...":"(non-string content)"});try{(c=await w.s.callModel({modelId:a.boundModel,prompt:a.currentPrompt,messages:a.messages,wireMessages:a.wireMessages,tools:d,iteration:1,maxIterations:1,maxTurns:b?.properties?.maxTurns,nodeName:f,nodeId:a.nodeId,toolNameMap:e,conversationId:a.conversationId,requireToolApproval:a.requireToolApproval})).success?S.debug(`[ProcessNode ${a.nodeId}] ModelHandler.callModel returned successfully`,{success:!0,hasContent:!!c.value?.content,contentLength:c.value?.content?.length||0,toolCallsCount:c.value?.toolCalls?.length||0}):S.warn(`[ProcessNode ${a.nodeId}] ModelHandler.callModel returned failure state unexpectedly here`,{success:!1,error:c.error})}catch(b){throw S.error(`[ProcessNode ${a.nodeId}] Error calling ModelHandler.callModel`,{error:b}),b}finally{S.debug(`[ProcessNode ${a.nodeId}] Finished attempt to call ModelHandler.callModel`)}if(!c||!c.success){let a=c?.error||{message:"Unknown model execution error after call attempt."};S.error("Model execution error after call attempt",{error:a});let b=Error(`Model execution failed: ${c.error.message}`);throw b.isModelError=!0,b.details={message:c.error.message,type:c.error.type,code:c.error.code,..."model"===c.error.type?{modelId:c.error.modelId}:{},param:"string"==typeof c.error.details?.param?c.error.details.param:void 0,status:"number"==typeof c.error.details?.status?c.error.details.status:void 0,...c.error.details},S.error("Throwing critical model error to abort flow execution",{error:c.error.message,type:c.error.type,code:c.error.code}),b}let h=c.value,i={success:!0,content:h.content||"",messages:h.messages,fullResponse:h.fullResponse,toolCalls:h.toolCalls};return h.toolCalls&&h.toolCalls.length>0&&S.info("Tool calls found in model response",{toolCallsCount:h.toolCalls.length,toolNames:h.toolCalls.map(a=>a.name).join(", ")}),S.info("execCore() completed",{responseLength:i.content?.length||0,messagesCount:i.messages?.length||0,hasToolCalls:!!i.toolCalls?.length}),S.verbose("execCore() execResult",i),i}catch(b){if(b&&"object"==typeof b&&("isCriticalToolError"in b||"isModelError"in b)){let a=b instanceof Error?b.message:String(b);throw S.error("Critical error detected - propagating to abort flow:",{error:a,isModelError:"isModelError"in b,isCriticalToolError:"isCriticalToolError"in b}),b}let a={success:!1,error:b instanceof Error?b.message:String(b),errorDetails:b instanceof Error?{message:b.message,name:b.name,stack:b.stack}:{message:String(b)}};return S.error("execCore() failed",{error:a.error,errorDetails:a.errorDetails}),S.verbose("execCore() errorResult",a),a}}processHandoffToolCalls(a,b){if(!a||0===a.length)return!1;S.info("Processing tool calls for handoff requests",{toolCallsCount:a.length});let c=(this.successors instanceof Map?Array.from(this.successors.keys()):Object.keys(this.successors||{})).filter(a=>!a.includes("-mcpEdge")&&!a.endsWith("mcpEdge")&&!a.includes("-mcp"));for(let d of a){let{name:a}=d;if(a.startsWith("handoff_to_")){let d=b.handoffNameMap?.[a]||a.replace("handoff_to_","");for(let e of c){let c=this.successors instanceof Map?this.successors.get(e):this.successors[e];if(c&&c.node_params?.id===d)return b.handoffRequested={edgeId:e,targetNodeId:d},S.info(`Handoff requested to node ${d}`,{edgeId:e,toolName:a}),!0}}}return!1}orderedControlEdges(a){let b=a?.orderedOutgoingEdges;return Array.isArray(b)&&b.length>0?b:(this.successors instanceof Map?Array.from(this.successors.keys()):Object.keys(this.successors||{})).filter(a=>!a.includes("-mcpEdge")&&!a.endsWith("mcpEdge")&&!a.includes("-mcp"))}async post(a,b,c,d){if(S.debug(`[ProcessNode ${d?.id}] post() method started.`),S.info("post() started",{execResultSuccess:b.success,execResultContentLength:b.content?.length||0,messagesCount:b.messages?.length||0,toolCallsCount:b.toolCalls?.length||0}),!b.success)return c.lastResponse={success:!1,error:b.error,errorDetails:b.errorDetails},Array.isArray(c.trackingInfo.nodeExecutionTracker),S.warn(`Execution failed for node ${d?.id}. Returning ERROR_ACTION.`),e.O;c.lastResponse=b.content||"";let f=d?.properties?.captureVariable?.trim();b.success&&f&&(c.variables=c.variables??{},c.variables[f]=b.content??"",S.info("Captured node output into run variable",{captureVariable:f,nodeId:d?.id}));let g=d?.properties?.captureResource?.trim();if(b.success&&g&&c.conversationId&&!c.ephemeral)try{let a=await (0,x.tm)({conversationId:c.conversationId,name:g,mimeType:"text/markdown",kind:"text",data:{text:b.content??""},producedBy:{source:"capture",nodeId:d?.id,nodeName:d?.properties?.name}});"skipped"in a?S.warn("captureResource skipped by store cap",{captureResource:g,reason:a.skipped}):(c.emit?.({type:"resource:write",node:{nodeId:d?.id??"unknown",nodeName:d?.properties?.name,nodeType:"process"},server:"flujo",uri:a.uri,name:g,mimeType:a.mimeType,size:a.size,source:"capture"}),S.info("Captured node output into run resource",{captureResource:g,uri:a.uri,nodeId:d?.id}))}catch(a){S.error("captureResource failed; continuing run",a)}if(b.messages&&b.messages.length>0&&(c.messages=b.messages.filter(a=>"system"!==a.role),S.info("Updated messages in sharedState (system prompt excluded)",{messagesCount:c.messages.length})),h.G.ENABLE_EXECUTION_TRACKER&&Array.isArray(c.trackingInfo.nodeExecutionTracker)&&(c.trackingInfo.nodeExecutionTracker.push({nodeType:"ProcessNode",nodeId:d?.id||"unknown",nodeName:d?.properties?.name||"Process Node",modelDisplayName:a.modelDisplayName||"Unknown Model",modelTechnicalName:a.boundModel||"unknown",allowedTools:d?.properties?.allowedTools?.join(", "),timestamp:new Date().toISOString()}),S.info("Added ProcessNode tracking information",{modelDisplayName:a.modelDisplayName,modelTechnicalName:a.boundModel})),this.processHandoffToolCalls(b.toolCalls,c)&&c.handoffRequested){let a=c.handoffRequested.edgeId;return S.info(`Handoff requested via tool call, returning edge ID: ${a}`),a}let i=b.toolCalls?.filter(a=>!a.name.startsWith("handoff_to_"));if(i&&i.length>0)return S.info("Non-handoff tool calls detected, returning TOOL_CALL_ACTION"),e.Jp;let j=d?.edgeConditions;if(j&&Object.keys(j).length>0){let a=this.orderedControlEdges(d);for(let b of a){let a=j[b];if(!a)continue;let d=(0,M.PP)(c.messages,a.target);if((0,M.F9)(a,d))return S.info("Deterministic edge condition matched; routing",{edgeId:b,kind:a.kind}),b}let b=a.find(a=>!j[a]);if(b)return S.info("No edge condition matched; routing to bare fallback edge",{edgeId:b}),b;S.info("Conditioned node: no predicate matched and no bare fallback; terminating")}return S.info("No tool calls or handoff requested, returning FINAL_RESPONSE_ACTION"),e.g4}_clone(){return new T}}var U=c(8918);let V=(0,d.h)("backend/flow/execution/handlers/MCPHandler");class W{static async executeMCP(a){let{mcpServer:b,enabledTools:c,nodeId:d,nodeRoots:e}=a;V.verbose("executeMCP input",JSON.stringify(a));try{d&&q.mcpService.setNodeRoots(b,d,e);let a=await q.mcpService.getServerStatus(b);if("connected"!==a.status){let a=await q.mcpService.connectServer(b);if(!a.success){let c={success:!1,error:(0,U.Fp)("server_connection_failed",`Failed to connect to MCP server: ${a.error}`,b,"connect")};return V.verbose("executeMCP connection error",JSON.stringify(c)),c}}let f=await q.mcpService.listServerTools(b);if(f.error){let a={success:!1,error:(0,U.Fp)("list_tools_failed",`Failed to list tools for server: ${f.error}`,b,"listTools")};return V.verbose("executeMCP list tools error",JSON.stringify(a)),a}let g={success:!0,value:{server:b,tools:f.tools||[],enabledTools:c}};return V.verbose("executeMCP success result",JSON.stringify(g)),g}catch(c){let a={success:!1,error:(0,U.Fp)("mcp_execution_failed",c instanceof Error?c.message:String(c),b,"executeMCP")};return V.verbose("executeMCP execution error",JSON.stringify(a)),a}}}var X=c(59448);let Y=(0,d.h)("backend/flow/execution/nodes/MCPNode");class Z extends l{async prep(a,b){Y.info("prep() started");let c=b?.id||"",d=b?.properties?.boundServer,e=b?.properties?.enabledTools||[],f=b?.properties?.roots||[];if(!d)throw Y.error("Missing bound server"),Error("MCP node requires a bound server");return Y.info("prep() completed",{mcpServer:d,enabledToolsCount:e.length,nodeRootsCount:f.length}),{nodeId:c,nodeType:"mcp",mcpServer:d,enabledTools:e,nodeRoots:f}}async execCore(a,b){Y.info("execCore() started",{mcpServer:a.mcpServer}),Y.verbose("execCore() prepResult",JSON.stringify(a));try{let b=await W.executeMCP({mcpServer:a.mcpServer,enabledTools:a.enabledTools,nodeId:a.nodeId,nodeRoots:a.nodeRoots});if(!b.success)throw Y.error("MCP execution failed",{error:b.error}),Error(`MCP execution failed: ${b.error.message}`);let c={success:!0,server:b.value.server,tools:b.value.tools,enabledTools:b.value.enabledTools};return Y.info("execCore() completed",{server:c.server,toolsCount:c.tools?.length||0,enabledToolsCount:c.enabledTools?.length||0}),Y.verbose("execCore() execResult",JSON.stringify(c)),c}catch(b){let a={success:!1,error:b instanceof Error?b.message:String(b)};return Y.error("execCore() failed",{error:a.error}),Y.verbose("execCore() errorResult",JSON.stringify(a)),a}}async post(a,b,c,d){if(Y.info("post() started",{server:b.server,toolsCount:b.tools?.length||0,enabledToolsCount:b.enabledTools?.length||0}),Y.verbose("post() inputs",JSON.stringify({prepResult:a,execResult:b,nodeParams:d})),h.G.ENABLE_EXECUTION_TRACKER&&Array.isArray(c.trackingInfo.nodeExecutionTracker)&&(c.trackingInfo.nodeExecutionTracker.push({nodeType:"MCPNode",nodeId:d?.id||"unknown",nodeName:d?.properties?.name||"MCP Node",timestamp:new Date().toISOString()}),Y.info("Added MCPNode tracking information")),b.success&&b.server&&b.tools){let a=d?.properties?.toolTimeout,e=b.tools.filter(a=>b.enabledTools?.includes(a.name)).map(c=>({...c,originalName:c.name,server:b.server,name:(0,X.Y6)(b.server,c.name),timeout:a}));if(c.mcpContext){let a=[...c.mcpContext.availableTools||[]];for(let b of e)a.some(a=>a.name===b.name)||a.push(b);c.mcpContext.availableTools=a}else c.mcpContext={server:b.server,availableTools:e};for(let a of(c.toolNameMap=c.toolNameMap||{},e))c.toolNameMap[a.name]={server:b.server,tool:a.originalName,timeout:a.timeout};let f=e.map(a=>a.name);Y.info("Stored MCP context in shared state",{server:b.server,availableToolsCount:e.length,availableToolNames:f.length>10?f.slice(0,10).join(", ")+"...":f.join(", "),totalToolsCount:c.mcpContext.availableTools.length})}Y.info("post() completed"),Y.info("Successors object:",{hasSuccessors:!!this.successors,isMap:this.successors instanceof Map,type:typeof this.successors});let e=this.successors instanceof Map?Array.from(this.successors.keys()):Object.keys(this.successors||{});if(Y.info("Actions:",{actionsCount:e.length,actions:e}),e.length>0){let a=e[0];return Y.info(`Returning action: ${a}`),a}return"default"}_clone(){return new Z}}let $=(0,d.h)("backend/flow/execution/nodes/FinishNode");class _ extends l{async prep(a,b){$.debug("prep() started");let c={nodeId:b?.id||"",nodeType:"finish",messages:a.messages};return $.debug("prep() completed",{messagesCount:c.messages.length,hasSystemPrompt:c.messages.some(a=>"system"===a.role)}),c}async execCore(a,b){$.debug("execCore() started",{messagesCount:a.messages.length}),$.verbose("execCore() prepResult",JSON.stringify(a));let c={success:!0};return $.verbose("execCore() execResult",JSON.stringify(c)),$.info("execCore() completed"),c}async post(a,b,c,d){$.info("post() started",{messagesCount:a.messages.length}),$.verbose("post() inputs",JSON.stringify({prepResult:a,execResult:b,nodeParams:d})),h.G.ENABLE_EXECUTION_TRACKER&&Array.isArray(c.trackingInfo.nodeExecutionTracker)&&(c.trackingInfo.nodeExecutionTracker.push({nodeType:"FinishNode",nodeId:d?.id||"unknown",nodeName:d?.properties?.name||"Finish Node",timestamp:new Date().toISOString()}),$.info("Added FinishNode tracking information"));let f=a.messages[a.messages.length-1];f&&"assistant"===f.role&&f.content&&("string"==typeof f.content?c.lastResponse=f.content:c.lastResponse={content:f.content,role:f.role}),$.info("Successors object:",{hasSuccessors:!!this.successors,isMap:this.successors instanceof Map,type:typeof this.successors});let g=this.successors instanceof Map?Array.from(this.successors.keys()):Object.keys(this.successors||{});if($.info("Actions:",{actionsCount:g.length,actions:g}),g.length>0){let a=g[0];return $.info(`post() completed, returning action: ${a}`),a}return $.info("post() completed, returning FINAL_RESPONSE_ACTION"),e.g4}_clone(){return new _}}let aa=(0,d.h)("backend/execution/flow/nodes/SubflowNode");function ab(a){for(let b=a.length-1;b>=0;b--)if("user"===a[b].role)return[a[b]];return a}function ac(a,b,c,d,e,f){if(!a||!b)return;let g=f?{laneIndex:f.index,laneCount:f.count}:{};return b=>{let f=(b.depth??0)+1;return"run:start"===b.type?void a({type:"subflow:start",node:c,subflowId:d,subflowName:e,depth:f,...g}):"run:done"===b.type?void a({type:"subflow:done",node:c,subflowId:d,status:b.status,depth:f,...g}):"message"===b.type?void a({...b,depth:f,message:{...b.message,depth:f},...g}):void a({...b,depth:f,...g})}}class ad extends l{async prep(a,b){let d=b?.properties?.subflowId,e=(b?.properties?.parallelSubflowIds??[]).filter(a=>"string"==typeof a&&""!==a.trim()),f=b?.properties?.mapOverList===!0,g=b?.properties?.itemSplit==="lines"?"lines":"json-array",h=b?.properties?.sequential===!0,i=b?.properties?.promptTemplate?.trim(),j=b?.properties?.inputMode??(i?"isolated":"full-history"),k=b?.properties?.outputMode!=="final-only",l={nodeId:b?.id||"",nodeType:"subflow",subflowId:d,depth:(a.runDepth??0)+1,parentRunId:a.conversationId,showSteps:k,emit:a.emit,nodeName:b?.properties?.name};if("isolated"===j){let c=b?.properties?.allowCallerPrompt===!0,d=a.handoffInput;d&&d.targetNodeId===b?.id?(a.handoffInput=void 0,c&&d.prompt.trim()?(l.inputText=d.prompt,aa.info("Using caller-supplied prompt for isolated subflow",{nodeId:b?.id})):l.inputText=i??""):l.inputText=i??""}else{let b=function(a){let b=[];for(let d of a){var c;if("system"===d.role||"tool"===d.role||"assistant"===d.role&&Array.isArray(d.tool_calls)&&d.tool_calls.length>0||!("string"==typeof(c=d.content)?c.trim().length>0:!!Array.isArray(c)&&c.length>0))continue;let{processNodeId:a,...e}=d;b.push({...e})}return b}(a.messages);l.messages="latest-message"===j?ab(b):b}if(void 0!==l.inputText&&(l.inputText=await Q((0,N.S$)(l.inputText,a.variables),a.ephemeral?void 0:a.conversationId,a.emit,b?.id?{nodeId:b.id,nodeType:"subflow"}:void 0)),f&&e.length>0&&aa.warn("SubflowNode sets both mapOverList and parallelSubflowIds; ignoring mapOverList (fan-out precedence)",{nodeId:b?.id}),e.length>0){let a=e.map(a=>({subflowId:a}));try{let{flowService:b}=await Promise.resolve().then(c.bind(c,11659));await Promise.all(a.map(async a=>{try{let c=await b.getFlow(a.subflowId);c?.name&&(a.subflowName=c.name)}catch{}}))}catch{}l.lanes=a,l.concurrencyLimit=Math.max(1,b?.properties?.concurrencyLimit??4),l.joinSeparator=b?.properties?.joinSeparator??"\n\n",l.errorStrategy=b?.properties?.errorStrategy??"collect-all"}else if(f&&d){var m;let a,e=function(a,b){let c;if("lines"===b)return a.split(/\r?\n/).map(a=>a.trim()).filter(a=>a.length>0);try{c=JSON.parse(a)}catch{return[]}return Array.isArray(c)?c.map(a=>"string"==typeof a?a:JSON.stringify(a)):[]}((void 0!==l.inputText?l.inputText:"string"==typeof(m=ab(l.messages??[])[0]?.content)?m:Array.isArray(m)?m.map(a=>"string"==typeof a?a:"string"==typeof a?.text?a.text:"").join(""):"")??"",g);try{let{flowService:b}=await Promise.resolve().then(c.bind(c,11659)),e=await b.getFlow(d);e?.name&&(a=e.name)}catch{}l.lanes=e.map((b,c)=>({subflowId:d,subflowName:a,input:{prompt:b},itemIndex:c,itemCount:e.length})),l.mapOverList=!0,l.concurrencyLimit=h?1:Math.max(1,b?.properties?.concurrencyLimit??4),l.joinSeparator=b?.properties?.joinSeparator??"\n\n",l.errorStrategy=b?.properties?.errorStrategy??"collect-all"}else if(d)try{let{flowService:a}=await Promise.resolve().then(c.bind(c,11659)),b=await a.getFlow(d);b?.name&&(l.subflowName=b.name)}catch{}return aa.info("prep() completed",{subflowId:d,depth:l.depth,mode:j,historyCount:l.messages?.length,laneCount:l.lanes?.length,showSteps:k}),l}async execCore(a,b){let{runFlow:d}=await c.e(7463).then(c.bind(c,67463)),e={nodeId:a.nodeId,nodeName:a.nodeName,nodeType:"subflow"},f=a.messages?{messages:a.messages}:{prompt:a.inputText??""};if(a.lanes&&a.lanes.length>0)return this.execParallel(a,d,e,f);if(a.mapOverList)return aa.info("execCore() map-over-list resolved no items → nothing to map",{subflowId:a.subflowId}),{success:!0,outputText:"",subStatus:"completed",lanes:[]};if(!a.subflowId)return{success:!1,error:"Subflow node has no flow selected (subflowId is empty)."};let g=ac(a.emit,a.showSteps,e,a.subflowId,a.subflowName);aa.info("execCore() running subflow",{subflowId:a.subflowId,depth:a.depth,showSteps:a.showSteps,foldingEvents:!!g});let h=await d({flowId:a.subflowId,...f,mode:"ephemeral",flujo:!0,requireApproval:!1,debug:!1,depth:a.depth,parentRunId:a.parentRunId,...g?{emit:g}:{}});return"error"===h.status?{success:!1,error:h.error?.message||"Subflow execution failed",errorDetails:h.error?.details,subStatus:h.status}:{success:!0,outputText:h.outputText,subStatus:h.status}}async execParallel(a,b,c,d){let e=a.lanes??[],f=e.length,g=Math.max(1,a.concurrencyLimit??4),h=a.joinSeparator??"\n\n",i=a.errorStrategy??"collect-all";aa.info("execCore() running parallel subflows",{laneCount:f,concurrencyLimit:g,errorStrategy:i,depth:a.depth});let j=Array(f),k=0,l=!1,m=async g=>{let h=e[g],k=ac(a.emit,a.showSteps,c,h.subflowId,h.subflowName,{index:h.itemIndex??g,count:h.itemCount??f});try{let c=await b({flowId:h.subflowId,...h.input??d,mode:"ephemeral",flujo:!0,requireApproval:!1,debug:!1,depth:a.depth,parentRunId:a.parentRunId,...k?{emit:k}:{}});j[g]="error"===c.status?{subflowId:h.subflowId,success:!1,error:c.error?.message||"Subflow execution failed"}:{subflowId:h.subflowId,success:!0,outputText:c.outputText}}catch(a){j[g]={subflowId:h.subflowId,success:!1,error:a instanceof Error?a.message:String(a)}}j[g].success||"fail-fast"!==i||(l=!0)},n=async()=>{for(;;){if(l)return;let a=k++;if(a>=f)return;await m(a)}},o=Math.min(g,f);await Promise.all(Array.from({length:o},()=>n()));let p=j.filter(a=>void 0!==a),q=p.filter(a=>a.success),r=p.filter(a=>!a.success),s=r.length>0;if("fail-fast"===i&&s){let a=p.find(a=>!a.success);return{success:!1,error:a?.error||"A parallel subflow lane failed",subStatus:"error",lanes:p}}if(0===q.length)return{success:!1,error:"All parallel subflows failed",subStatus:"error",lanes:p};let t=q.map(a=>a.outputText??"").join(h);if(s){let a=r.map(a=>`- ${a.subflowId}: ${a.error??"unknown error"}`).join("\n");t+=`${h}[${r.length} parallel subflow(s) failed:
60
- ${a}]`}return{success:!0,outputText:t,subStatus:"completed",lanes:p,partial:s}}async post(a,b,c,d){if(h.G.ENABLE_EXECUTION_TRACKER&&Array.isArray(c.trackingInfo.nodeExecutionTracker)&&c.trackingInfo.nodeExecutionTracker.push({nodeType:"SubflowNode",nodeId:d?.id||"unknown",nodeName:d?.properties?.name||"Subflow Node",timestamp:new Date().toISOString()}),!b.success)return aa.error("Subflow failed",{subflowId:a.subflowId,error:b.error}),c.lastResponse={success:!1,error:b.error||"Subflow execution failed",errorDetails:b.errorDetails},e.O;let f=b.outputText??"",g={role:"assistant",content:f,id:crypto.randomUUID(),timestamp:Date.now(),processNodeId:d?.id};c.messages.push(g),c.lastResponse=f;let i=d?.properties?.captureVariable?.trim();i&&(c.variables=c.variables??{},c.variables[i]=f,aa.info("Captured subflow output into run variable",{captureVariable:i,nodeId:d?.id}));let j=d?.properties?.captureResource?.trim();if(j&&c.conversationId&&!c.ephemeral)try{let a=await (0,x.tm)({conversationId:c.conversationId,name:j,mimeType:"text/markdown",kind:"text",data:{text:f},producedBy:{source:"capture",nodeId:d?.id,nodeName:d?.properties?.name}});"skipped"in a?aa.warn("captureResource skipped by store cap",{captureResource:j,reason:a.skipped}):(c.emit?.({type:"resource:write",node:{nodeId:d?.id??"unknown",nodeName:d?.properties?.name,nodeType:"subflow"},server:"flujo",uri:a.uri,name:j,mimeType:a.mimeType,size:a.size,source:"capture"}),aa.info("Captured subflow output into run resource",{captureResource:j,uri:a.uri,nodeId:d?.id}))}catch(a){aa.error("captureResource failed; continuing run",a)}let k=this.successors instanceof Map?Array.from(this.successors.keys()):Object.keys(this.successors||{});if(k.length>0){let a=k[0];return aa.info(`post() completed, handing off via action: ${a}`),a}return aa.info("post() completed, no successor → FINAL_RESPONSE_ACTION"),e.g4}_clone(){return new ad}}let ae=(0,d.h)("backend/flow/execution/nodes/ResourceNode");class af extends l{async prep(a,b){return ae.warn("ResourceNode.prep() reached — resource nodes are config holders and should never execute",{nodeId:b?.id}),{}}async execCore(){return{}}async post(a,b,c,d){let e=this.successors instanceof Map?Array.from(this.successors.keys()):Object.keys(this.successors||{});return e.length>0?e[0]:"default"}_clone(){return new af}}let ag=(0,d.h)("backend/flow/execution/FlowConverter");class ah{static convert(a){ag.info("Converting React Flow to Pocket Flow",{flowName:a.name,nodeCount:a.nodes.length,edgeCount:a.edges.length}),ag.verbose("convert input",JSON.stringify({flowName:a.name,nodeCount:a.nodes.length,edgeCount:a.edges.length}));let b=new Map;for(let c of a.nodes){ag.debug(`Creating node: ${c.id} (${c.type})`);let a=this.createNode(c);b.set(c.id,a)}for(let c of a.edges){ag.debug(`Connecting edge: ${c.id} (${c.source} -> ${c.target})`);let a=b.get(c.source),d=b.get(c.target);if(a&&d)if(c.data?.edgeType==="mcp"){let b,e;ag.info(`Handling MCP connection: ${c.id} (${c.source} -> ${c.target})`),a instanceof T?(b=a,e=d):d instanceof T&&(b=d,e=a),b&&e?(b.node_params.properties||(b.node_params.properties={}),b.node_params.properties.mcpNodes||(b.node_params.properties.mcpNodes=[]),b.node_params.properties.mcpNodes.push({id:e.node_params.id,properties:e.node_params.properties}),ag.info("Stored MCP node in Process node properties",{processNodeId:b.node_params.id,mcpNodeId:e.node_params.id})):ag.warn(`Invalid MCP connection: ${c.id}. Could not find Process and MCP nodes.`,{sourceNodeType:a.constructor.name,targetNodeType:d.constructor.name})}else if(c.data?.edgeType==="resource"){let b,e,f;if(ag.info(`Handling resource connection: ${c.id} (${c.source} -> ${c.target})`),a instanceof af&&d instanceof T?(e=a,b=d,f="consume"):a instanceof T&&d instanceof af&&(b=a,e=d,f="produce"),b&&e&&f){b.node_params.properties||(b.node_params.properties={}),b.node_params.properties.resourceNodes||(b.node_params.properties.resourceNodes=[]);let a=e.node_params.properties??{};b.node_params.properties.resourceNodes.push({id:e.node_params.id,role:f,properties:a}),"produce"===f&&"run"===a.scope&&a.runName&&!b.node_params.properties.captureResource&&(b.node_params.properties.captureResource=a.runName,ag.info("Derived captureResource from produce edge",{processNodeId:b.node_params.id,runName:a.runName})),ag.info("Stored resource node in Process node properties",{processNodeId:b.node_params.id,resourceNodeId:e.node_params.id,role:f})}else ag.warn(`Invalid resource connection: ${c.id}. Could not find Process and Resource nodes.`,{sourceNodeType:a.constructor.name,targetNodeType:d.constructor.name})}else{let b=c.id||"default";a.addSuccessor(d,b),a.node_params.orderedOutgoingEdges=a.node_params.orderedOutgoingEdges||[],a.node_params.orderedOutgoingEdges.push(b);let e=c.data?.condition;if(e&&"object"==typeof e&&(a.node_params.edgeConditions=a.node_params.edgeConditions||{},a.node_params.edgeConditions[b]=e,ag.info("Retained edge condition for routing",{edgeId:b,source:c.source})),c.data?.bidirectional){let e=`${b}__reverse`;d.addSuccessor(a,e),d.node_params.orderedOutgoingEdges=d.node_params.orderedOutgoingEdges||[],d.node_params.orderedOutgoingEdges.push(e),ag.info(`Connected nodes (bidirectional): ${c.target} -> ${c.source} with action: ${e}`)}ag.info(`Connected nodes: ${c.source} -> ${c.target} with action: ${b}`),a.successors instanceof Map?ag.debug("Source node successors after connection:",{sourceNodeId:c.source,successorsCount:a.successors.size,successorsKeys:Array.from(a.successors.keys()),hasTargetNode:a.successors.has(b)}):ag.warn("Source node successors is not a Map:",{sourceNodeId:c.source,successorsType:typeof a.successors})}else ag.warn(`Failed to connect edge: ${c.id}`,{sourceExists:!!a,targetExists:!!d})}let c=a.nodes.find(a=>"start"===a.type);if(!c)throw ag.error("No start node found in flow"),Error("Flow must have a start node");ag.debug(`Found start node: ${c.id}`);let d=b.get(c.id);if(!d)throw ag.error(`Failed to retrieve start node from map: ${c.id}`),Error("Failed to create start node");let e=new m(d);return ag.debug("Created Pocket Flow with start node"),ag.info("Flow conversion completed successfully",{nodeCount:b.size}),ag.verbose("convert result",JSON.stringify({flowStartNodeId:e.node_params?.id||"unknown",nodesCount:b.size})),e}static createNode(a){let b,c;switch(ag.debug(`Creating node of type: ${a.type}`,{nodeId:a.id,label:a.data.label}),ag.verbose("createNode input",JSON.stringify({nodeId:a.id,nodeType:a.type,label:a.data.label,properties:a.data.properties})),a.type){case"start":b=new o,c={id:a.id,label:a.data.label,type:"start",properties:a.data.properties||{name:a.data.label}};break;case"process":b=new T,c={id:a.id,label:a.data.label,type:"process",properties:a.data.properties||{name:a.data.label}};break;case"mcp":b=new Z,c={id:a.id,label:a.data.label,type:"mcp",properties:a.data.properties||{name:a.data.label}};break;case"finish":b=new _,c={id:a.id,label:a.data.label,type:"finish",properties:a.data.properties||{name:a.data.label}};break;case"subflow":b=new ad,c={id:a.id,label:a.data.label,type:"subflow",properties:a.data.properties||{name:a.data.label}};break;case"resource":b=new af,c={id:a.id,label:a.data.label,type:"resource",properties:a.data.properties||{name:a.data.label}};break;default:throw ag.error(`Unknown node type: ${a.type}`,{nodeId:a.id}),Error(`Unknown node type: ${a.type}`)}return b.setParams({},c),ag.debug("Node created and parameters set",{nodeId:a.id,type:a.type,propertiesKeys:Object.keys(c.properties||{})}),ag.verbose("createNode result",JSON.stringify({nodeId:a.id,nodeType:a.type,nodeParams:c})),b}}let ai=(0,d.h)("backend/execution/flow/engine/PocketflowEngine");class aj{clearCache(a){a?this.pocketFlowCache.delete(a):this.pocketFlowCache.clear()}async resolveFlowDefinition(a){let b=a.flowId;if(this.pocketFlowCache.has(b))return ai.debug(`Using cached Pocket Flow for flowId: ${b}`),this.pocketFlowCache.get(b).clone();let c=a.flowSnapshot;if(c)ai.verbose(`Resolving flow ${b} from an in-memory quick-chat snapshot.`);else if(ai.verbose(`Loading and converting flow for flowId: ${b}`),!(c=await i.flowService.getFlow(b)??void 0))throw ai.error(`Flow not found for flowId: ${b}`),Error(`Flow not found: ${b}`);ai.info(`Found flow: ${c.name}`,{flowId:c.id,nodeCount:c.nodes.length,edgeCount:c.edges.length});let d=ah.convert(c);return this.pocketFlowCache.set(b,d),ai.verbose(`Flow ${b} converted and cached.`),d.clone()}async findNodeById(a,b){ai.verbose(`Searching for node ${b} in flow ${a.node_params?.id}`);let c=await a.getStartNode(),d=[c],e=new Set,f=c.node_params?.id;for(f?e.add(f):ai.warn("Start node is missing an ID in its parameters.");d.length>0;){let a=d.shift();if(a.node_params?.id===b)return ai.verbose(`Found node ${b}`),a;if(a.successors instanceof Map)for(let b of a.successors.values()){let a=b.node_params?.id;"string"==typeof a&&a.length>0&&!e.has(a)&&(e.add(a),d.push(b.clone()))}}ai.warn(`Node ${b} not found in flow.`)}async resolveNode(a){let b,{conversationId:c,currentNodeId:d}=a,e=await this.resolveFlowDefinition(a);if(d)(b=await this.findNodeById(e,d))?ai.info(`Resuming conversation ${c} at node ${d}`):(ai.warn(`Resuming conversation ${c}, but node ${d} not found. Starting from beginning.`),b=await e.getStartNode());else{let d=a.messages.length>0?a.messages[a.messages.length-1]:null;d?.processNodeId?(ai.info(`Found processNodeId ${d.processNodeId} in last message. Attempting to resume from this node.`),(b=await this.findNodeById(e,d.processNodeId))?ai.info(`Resuming conversation ${c} from node ${d.processNodeId} based on last message.`):(ai.warn(`Could not find node ${d.processNodeId} from last message. Starting from beginning.`),b=await e.getStartNode())):(b=await e.getStartNode(),ai.info(`Starting conversation ${c} from the beginning.`))}if(!b)throw Error("Execution error: Cannot find starting node.");let f=b.node_params?.id;if("string"!=typeof f||0===f.length)throw Error(`Execution error: Node ${b.constructor.name} is missing an ID.`);return{handle:b,id:f,type:b.node_params?.type||"unknown",name:b.node_params?.label||"Unknown Node"}}async resolveHandoff(a,b){let{currentNodeId:c}=a;if(!c||!b)return{isSuccessorEdge:!1,targetNodeId:null};let d=await this.resolveFlowDefinition(a),e=await this.findNodeById(d,c);if(!e||!e.successors.has(b))return{isSuccessorEdge:!1,targetNodeId:null};let f=e.getSuccessor(b),g=f?.node_params?.id,h=f?.node_params?.type;return{isSuccessorEdge:!0,targetNodeId:"string"==typeof g&&g.length>0?g:null,targetNodeType:"string"==typeof h?h:null}}async runNode(a,b,c){let d=a.handle;c&&(b.emit=c);try{ai.debug(`[PocketflowEngine] Calling run() on node ${a.id} (${a.type})`);let c=await d.run(b);return ai.debug(`[PocketflowEngine] Node ${a.id} returned action: "${c.action}"`),{action:c.action,prepResult:c.prepResult,execResult:c.execResult}}finally{delete b.emit}}constructor(){this.pocketFlowCache=new Map}}let ak=(0,d.h)("backend/execution/flow/FlowExecutor"),al=["messages","availableTools","fullResponse","emit"];function am(a){let{messages:b,executionTrace:c,emit:d,mcpContext:e,...f}=a,h=g()(f);return h.messageCount=b?.length??0,e&&(h.mcpContext={server:e.server,availableTools:[]}),h}function an(a){if(!a||"object"!=typeof a)return a;let b=g()(a);for(let a of al)a in b&&delete b[a];return b}class ao{static get conversationStates(){return global.__flujo_conversation_states||(global.__flujo_conversation_states=new Map),global.__flujo_conversation_states}static get engine(){return global.__flujo_flow_engine||(global.__flujo_flow_engine=new aj),global.__flujo_flow_engine}static set engine(a){global.__flujo_flow_engine=a}static clearFlowCache(a){this.engine.clearCache(a)}static resolveHandoff(a,b){return this.engine.resolveHandoff(a,b)}static async peekNextNodeId(a){try{return(await this.engine.resolveNode(a)).id}catch{return null}}static async executeStep(a,b){let c,d,f,{conversationId:g,flowId:i,currentNodeId:j}=a;if("string"!=typeof g||0===g.length)return ak.error("executeStep called without a valid conversationId in sharedState."),a.lastResponse={success:!1,error:"Internal error: Missing conversationId."},{sharedState:a,action:e.O};ak.debug(`executeStep called for conversation ${g}`,{flowId:i,currentNodeId:j});let k=h.G.ENABLE_EXECUTION_TRACKER||!!a.debugMode,l=j;try{let e=await this.engine.resolveNode(a);l=e.id,a.currentNodeId=e.id,ak.info(`Executing step for node ${e.id} (${e.type}) in conversation ${g}`),k&&!a.executionTrace&&(a.executionTrace=[]),c=am(a),b?.({type:"node:enter",node:{nodeId:e.id,nodeName:e.name,nodeType:e.type}});let h=await this.engine.runNode(e,a,b),i=h.action;d=h.prepResult,f=h.execResult,b?.({type:"node:exit",node:{nodeId:e.id,nodeName:e.name,nodeType:e.type},action:i}),ak.debug(`Node ${e.id} finished with action: ${i} for conversation ${g}`);let j=am(a);if(k&&a.executionTrace){let b=a.executionTrace.length,h={stepIndex:b,nodeId:e.id,nodeType:e.type,nodeName:e.name,timestamp:new Date().toISOString(),actionTaken:i,stateBefore:c,stateAfter:j,prepResultSnapshot:an(d),execResultSnapshot:an(f)};a.executionTrace.push(h),ak.verbose(`Appended step ${b} to execution trace for conversation ${g}`)}return this.conversationStates.set(g,a),ak.debug(`[FlowExecutor] Returning from executeStep for node ${e.id} with action: "${i}"`),{sharedState:a,action:i}}catch(i){let f=l||"unknown node";ak.error(`Error during node execution step for ${f} in conversation ${g}`,{error:i});let h=i?.details;if(a.lastResponse={success:!1,error:i instanceof Error?i.message:String(i),errorDetails:i instanceof Error?{name:i.name,message:i.message,stack:i.stack,...h&&"object"==typeof h?h:{}}:{message:String(i)}},a.currentNodeId=l,b?.({type:"error",node:l?{nodeId:l}:void 0,message:i instanceof Error?i.message:String(i)}),k&&a.executionTrace){let b=a.executionTrace.length,h={stepIndex:b,nodeId:f,nodeType:"unknown",nodeName:"Unknown Node",timestamp:new Date().toISOString(),actionTaken:e.O,stateBefore:c??am(a),stateAfter:am(a),prepResultSnapshot:d?an(d):null,execResultSnapshot:{success:!1,error:a.lastResponse}};a.executionTrace.push(h),ak.verbose(`Appended ERROR step ${b} to execution trace for conversation ${g}`)}return this.conversationStates.set(g,a),{sharedState:a,action:e.O}}}}},59448:(a,b,c)=>{c.d(b,{$9:()=>g,Y6:()=>e,ud:()=>f});let d="_-_-_";function e(a,b){let c=function(a){let b=0x811c9dc5;for(let c=0;c<a.length;c++)b^=a.charCodeAt(c),b=Math.imul(b,0x1000193);return(b>>>0).toString(36)}(`${a}\0${b}`),d=64-(5+c.length),e=b.replace(/[^a-zA-Z0-9_-]/g,"_").slice(0,Math.max(0,d));return`mcp_${e}_${c}`}function f(a,b){if(b&&b[a])return b[a];if(a.includes(d)){let b=a.split(d);if(3===b.length)return{server:b[1],tool:b[2]}}return null}function g(a,b){return!!b&&!!b[a]||a.includes(d)}},70834:(a,b,c)=>{c.r(b),c.d(b,{ToolHandler:()=>i});var d=c(18230),e=c(8918),f=c(99924),g=c(59448);let h=(0,d.h)("backend/flow/execution/handlers/ToolHandler");class i{static sanitizeSchema(a){if(!a||"object"!=typeof a)return a;let b=JSON.parse(JSON.stringify(a));return"string"===b.type&&b.format&&"enum"!==b.format&&"date-time"!==b.format&&(b.description||(b.description=""),b.description+=` (format: ${b.format})`,delete b.format),b.properties&&Object.keys(b.properties).forEach(a=>{b.properties[a]=i.sanitizeSchema(b.properties[a])}),b.items&&(b.items=i.sanitizeSchema(b.items)),["oneOf","anyOf","allOf"].forEach(a=>{Array.isArray(b[a])&&(b[a]=b[a].map(a=>i.sanitizeSchema(a)))}),b}static prepareTools(a){let{availableTools:b}=a;if(h.verbose("prepareTools input",JSON.stringify(a)),!b||0===b.length){let a={success:!0,value:{tools:[]}};return h.verbose("prepareTools empty result",JSON.stringify(a)),a}try{for(let a of b){if(!a.name)return{success:!1,error:(0,e.Po)("invalid_tool","Tool missing required 'name' property","unknown")};if(!a.inputSchema)return{success:!1,error:(0,e.Po)("invalid_tool",`Tool '${a.name}' missing required 'inputSchema' property`,a.name)}}let a=[...b].sort((a,b)=>a.name<b.name?-1:+(a.name>b.name)).map(a=>({type:"function",function:{name:a.name,description:a.description||`Tool: ${a.name}`,parameters:i.sanitizeSchema(a.inputSchema)}})),c={success:!0,value:{tools:a}};return h.verbose("prepareTools success result",JSON.stringify(c)),c}catch(b){let a={success:!1,error:(0,e.Po)("tool_preparation_failed",b instanceof Error?b.message:String(b),"unknown")};return h.verbose("prepareTools error result",JSON.stringify(a)),a}}static async processMCPNodes(a){let{mcpNodes:b}=a;if(h.verbose("processMCPNodes input",JSON.stringify(a)),!b||0===b.length){let a={success:!0,value:{availableTools:[]}};return h.verbose("processMCPNodes empty result",JSON.stringify(a)),a}try{let a=[];for(let c of b){let b=c.properties;if(b&&b.boundServer){let d=b.boundServer,h=b.enabledTools||[],i=b.toolTimeout;f.mcpService.setNodeRoots(d,c.id,b.roots);let j=await f.mcpService.connectServer(d);if(!j.success)return{success:!1,error:(0,e.Fp)("server_connection_failed",`Failed to connect to MCP server '${d}': ${j.error}`,d,"connect")};let k=await f.mcpService.listServerTools(d);if(k.error)return{success:!1,error:(0,e.Fp)("list_tools_failed",`Failed to list tools for MCP server '${d}': ${k.error}`,d,"listTools")};for(let b of(k.tools||[]).filter(a=>h.includes(a.name)).map(a=>({originalName:a.name,server:d,name:(0,g.Y6)(d,a.name),timeout:i,description:a.description,inputSchema:a.inputSchema})))a.some(a=>a.name===b.name)||a.push(b)}}let c={success:!0,value:{availableTools:a}};return h.verbose("processMCPNodes success result",JSON.stringify(c)),c}catch(b){let a={success:!1,error:(0,e.Fp)("mcp_processing_failed",b instanceof Error?b.message:String(b),"unknown","processMCPNodes")};return h.verbose("processMCPNodes error result",JSON.stringify(a)),a}}}},71966:(a,b,c)=>{c.d(b,{FA:()=>B,Ns:()=>t,gy:()=>C,jR:()=>v,tm:()=>z,yP:()=>A});var d=c(29021),e=c(33873),f=c.n(e),g=c(55511),h=c(18230),i=c(63129),j=c(79111),k=c(89392),l=c(22861);let m=(0,h.h)("backend/services/runResources"),n=f().join((0,i.ok)(),"db","run-resources"),o=/^[A-Za-z0-9_-]{1,64}$/;function p(a,b){if("string"!=typeof a||!o.test(a))throw Error(`Unsafe run-resource ${b}: ${JSON.stringify(a)}`)}let q=a=>f().join(n,a),r=a=>f().join(q(a),"index.json"),s=(a,b)=>f().join(q(a),`${b}.dat`);function t(a){if("string"!=typeof a||!a.startsWith(l.j))return null;let b=a.slice(l.j.length).split("/");if(2!==b.length)return null;let[c,d]=b;return o.test(c)&&o.test(d)?{conversationId:c,id:d}:null}let u=null;async function v(){let a;if(u&&Date.now()-u.at<3e4)return u.value;try{let b=await (0,j.YM)(k.Z.RUN_RESOURCE_SETTINGS,l.R);a={...l.R,...b}}catch(b){m.warn("Failed to load run-resource settings; using defaults",b),a=l.R}return u={value:a,at:Date.now()},a}let w=global.__flujo_run_resources??(global.__flujo_run_resources=new Map);async function x(a){let b=w.get(a);if(b)return b;let c=[];try{let b=await d.promises.readFile(r(a),"utf-8");if(b.trim().length>0){let a=JSON.parse(b);Array.isArray(a)&&(c=a)}}catch(b){"ENOENT"!==b.code&&m.error(`Failed to read run-resource index for ${a}; treating as empty`,b)}return w.set(a,c),c}async function y(a,b){w.set(a,b),await (0,j.l_)(`run-resources/${a}`,()=>(0,j.Zf)(r(a),JSON.stringify(b,null,2)))}async function z(a){var b;let c;p(a.conversationId,"conversationId");let e=await v(),f=null,h="utf8";a.data&&("text"in a.data?(f=Buffer.from(a.data.text,"utf8"),h="utf8"):(f=Buffer.from(a.data.base64,"base64"),h="base64"));let i=f?.byteLength??0;if(i>e.maxResourceBytes)return m.warn(`Run-resource write skipped (size ${i} > cap ${e.maxResourceBytes})`,{conversationId:a.conversationId,name:a.name,kind:a.kind}),{skipped:"size-cap"};let j=await x(a.conversationId);a.name&&(c=j.find(b=>b.name===a.name));let k=j.reduce((a,b)=>a+(b===c?0:b.size),0);if(k+i>e.maxConversationBytes)return m.warn(`Run-resource write skipped (conversation budget ${k}+${i} > ${e.maxConversationBytes})`,{conversationId:a.conversationId,name:a.name,kind:a.kind}),{skipped:"conversation-cap"};let n=(0,g.randomUUID)(),o={id:n,uri:(b=a.conversationId,`${l.j}${b}/${n}`),conversationId:a.conversationId,name:a.name,mimeType:a.mimeType,size:i,kind:a.kind,encoding:h,createdAt:Date.now(),producedBy:a.producedBy,origin:a.origin,readBy:[]};f&&(await d.promises.mkdir(q(a.conversationId),{recursive:!0}),await d.promises.writeFile(s(a.conversationId,n),f));let r=c?j.filter(a=>a!==c):j.slice();return r.push(o),await y(a.conversationId,r),c&&c.size>0&&d.promises.unlink(s(a.conversationId,c.id)).catch(()=>{}),m.debug(`Stored run resource ${o.uri}`,{kind:o.kind,size:i,name:o.name}),o}async function A(a=200){let b=[];try{b=(await d.promises.readdir(n,{withFileTypes:!0})).filter(a=>a.isDirectory()&&o.test(a.name)).map(a=>a.name)}catch(a){if("ENOENT"===a.code)return[];throw a}let c=[];for(let a of b)c.push(...await x(a));return c.sort((a,b)=>b.createdAt-a.createdAt),c.slice(0,a)}async function B(a,b){return p(a,"conversationId"),(await x(a)).find(a=>a.name===b)??null}async function C(a,b){let c,e=t(a);if(!e)return null;let f=await x(e.conversationId),g=f.find(a=>a.id===e.id);if(!g)return null;if("link"===g.kind)c={contents:[{uri:g.uri,mimeType:g.mimeType??"text/plain",text:`Run resource link → ${g.origin?`${g.origin.server}: ${g.origin.uri}`:"unknown origin"}`}]};else{let b;try{b=await d.promises.readFile(s(e.conversationId,e.id))}catch(b){return m.error(`Run-resource payload missing for ${a}`,b),null}c="utf8"===g.encoding?{contents:[{uri:g.uri,mimeType:g.mimeType??"text/plain",text:b.toString("utf8")}]}:{contents:[{uri:g.uri,mimeType:g.mimeType??"application/octet-stream",blob:b.toString("base64")}]}}return b&&(g.readBy.push(b),y(e.conversationId,f).catch(b=>m.warn(`Failed to persist readBy for ${a}`,b))),{entry:g,contents:c}}},78606:(a,b,c)=>{c.d(b,{C:()=>e,F9:()=>i,PP:()=>h,wM:()=>f});let d=["contains","regex","equals"];function e(a){return"string"==typeof a&&d.includes(a)}function f(a){try{return new RegExp(a),!0}catch{return!1}}function g(a){return"string"==typeof a?a:Array.isArray(a)?a.map(a=>"string"==typeof a?a:a&&"object"==typeof a&&"text"in a&&"string"==typeof a.text?a.text:"").join(""):""}function h(a,b="last-assistant"){if(!Array.isArray(a)||0===a.length)return null;if("last-message"===b)return g(a[a.length-1]?.content);for(let b=a.length-1;b>=0;b--)if(a[b]?.role==="assistant")return g(a[b]?.content);return null}function i(a,b){let c;if(!a)return!1;let d="string"==typeof b?b:"",e="string"==typeof a.value?a.value:String(a.value??"");switch(a.kind){case"contains":c=a.ignoreCase?d.toLowerCase().includes(e.toLowerCase()):d.includes(e);break;case"equals":c=a.ignoreCase?d.toLowerCase()===e.toLowerCase():d===e;break;case"regex":{let b;try{b=new RegExp(e,a.ignoreCase?"i":void 0)}catch(a){return console.warn("[edgeConditions] invalid regex predicate; treating as no-match",e,a),!1}c=b.test(d);break}default:return console.warn("[edgeConditions] unknown condition kind; treating as no-match",a.kind),!1}return a.negate?!c:c}},80808:(a,b,c)=>{c.d(b,{s:()=>w});var d=c(18230),e=c(8918),f=c(59448),g=c(18975),h=c(1191),i=c(12763),j=c(22124),k=c(25713),l=c(99924),m=c(69088),n=c(71966);let o=(0,d.h)("backend/services/runResources/capture");function p(a){var b;return`[FLUJO stored this ${a.mimeType??a.kind} (${(b=a.size)<1024?`${b} B`:b<1048576?`${Math.round(b/1024)} KB`:`${(b/1048576).toFixed(1)} MB`}) as run resource ${a.uri}. Read it back via the 'flujo' MCP server (resources/read) if needed.]`}async function q(a){let{conversationId:b,server:c,toolName:d,toolCallId:e,nodeId:f,result:g,settings:h}=a,i=[];if(g.isError||!Array.isArray(g.content))return{result:g,captured:i};let j={source:"tool-result",nodeId:f,server:c,toolName:d,toolCallId:e},k=async(a,e,f,g)=>{try{let h=await (0,n.tm)({conversationId:b,mimeType:f,kind:a,data:e,producedBy:g?{...j,source:"mcp-link"}:j,origin:g});if("skipped"in h)return o.warn(`Auto-capture skipped (${h.skipped}) for ${c}/${d}`),null;return i.push(h),h}catch(a){return o.error(`Auto-capture failed for ${c}/${d}; keeping inline content`,a),null}},l=[];for(let a of g.content)switch(a.type){case"image":case"audio":{let b=await k(a.type,{base64:a.data},a.mimeType);l.push(b?{type:"text",text:p(b)}:a);break}case"resource_link":await k("link",void 0,a.mimeType,{server:c,uri:a.uri}),l.push(a);break;case"resource":{let b=a.resource;if("string"==typeof b.blob){let d=b.blob,e=await k("blob",{base64:d},b.mimeType,{server:c,uri:b.uri});l.push(e?{type:"text",text:p(e)}:a)}else if("string"==typeof b.text){let d=b.text;if(d.length>=h.textThresholdChars){let e=await k("text",{text:d},b.mimeType??"text/plain",{server:c,uri:b.uri});e&&h.replaceLargeTextWithStub?l.push({type:"text",text:`${d.slice(0,1024)}
61
- …
62
- ${p(e)}`}):l.push(a)}else l.push(a)}else l.push(a);break}case"text":if("string"==typeof a.text&&a.text.length>=h.textThresholdChars){let b=await k("text",{text:a.text},"text/plain");b&&h.replaceLargeTextWithStub?l.push({type:"text",text:`${a.text.slice(0,1024)}
63
- …
64
- ${p(b)}`}):l.push(a)}else l.push(a);break;default:l.push(a)}return 0===i.length?{result:g,captured:i}:{result:{...g,content:l},captured:i}}var r=c(96249);let s=globalThis,t=s.__flujoToolApprovals??(s.__flujoToolApprovals=new Map);var u=c(89850);let v=(0,d.h)("backend/flow/execution/handlers/ModelHandler");class w{static async resolveToolUiLink(a,b){let c=function(a){if(a&&"object"==typeof a){for(let b of[a.ui,a["io.modelcontextprotocol/ui"]])if(b&&"object"==typeof b){let a=b.resourceUri;if("string"==typeof a&&a.trim().toLowerCase().startsWith("ui://"))return a}}}(b?._meta);if(c)try{let b=await l.mcpService.loadServerConfigs();if(!Array.isArray(b))return;let d=b.find(b=>b.name===a);if(!d?.enableMcpApps)return;return{uri:c,serverName:a}}catch(b){v.warn(`resolveToolUiLink: failed to check MCP Apps opt-in for ${a}`,b);return}}static extractProviderErrorDetails(a,b){let c=b||a?.message||"Provider returned an unspecified error in the response body.";b&&"string"==typeof a?.message&&a.message&&a.message!==b&&(c=`${b} - ${a.message}`);let d=a?.metadata;if(d){let a;if("string"==typeof d.raw)try{let b=JSON.parse(d.raw);a=b?.error?.message||b?.message||d.raw}catch{a=d.raw}else d.raw&&"object"==typeof d.raw&&(a=d.raw.error?.message||d.raw.message);let b=[];d.provider_name&&b.push(String(d.provider_name)),a&&b.push(a),b.length>0&&(c=`${c} (upstream: ${b.join(": ")})`)}return"string"==typeof a?.origin&&a.origin&&(c=`${c} (origin: ${a.origin})`),{message:c,code:a?.code,type:a?.type,param:a?.param,retryAfter:d?.retry_after_seconds!=null?String(d.retry_after_seconds):void 0,providerError:a}}static persistStreamedMessage(a,b){try{let{FlowExecutor:d}=c(37101),e=d.conversationStates.get(a);if(!e||!Array.isArray(e.messages))return;!function(a,b){let c=a.findIndex(a=>a.id===b.id);c>=0?a[c]=b:a.push(b)}(e.messages,b),e.updatedAt=Date.now()}catch(b){v.warn(`Failed to fold streamed message into conversation ${a}`,{err:b})}}static async callModel(a){let b,{modelId:c,prompt:d,messages:e,wireMessages:f,tools:g,nodeName:h,nodeId:k,toolNameMap:l,maxTurns:m,conversationId:n,requireToolApproval:o}=a;try{let a=await i.modelService.getModel(c);a&&(a.displayName||a.name,a.name,b=a.maxTurns)}catch(a){v.warn(`Failed to fetch model information for prefix: ${a instanceof Error?a.message:String(a)}`)}let p=function(a,b,c=j.m){return"number"==typeof a&&Number.isFinite(a)&&a>0?a:"number"==typeof b&&Number.isFinite(b)&&b>0?b:c}(m,b);v.info("callModel - Single execution",{modelId:c,messagesCount:e.length,toolsCount:g?.length||0,nodeName:h,nodeId:k}),v.verbose("callModel input",a);let q=n?r.$.emitterFor(n):void 0,s=o&&q&&n?async a=>{let b={id:a.id,type:"function",function:{name:a.name,arguments:JSON.stringify(a.args??{})}};return new Promise(a=>{let c;(c=t.get(n))||(c=new Map,t.set(n,c)),c.set(b.id,{toolCall:b,resolve:a}),q({type:"run:awaiting_approval",pendingToolCalls:function(a){let b=t.get(a);return b?Array.from(b.values(),a=>a.toolCall):[]}(n)})})}:void 0,x=q?a=>{let b=k?{...a,processNodeId:k}:a;q({type:"message",message:b,node:k?{nodeId:k}:void 0}),n&&w.persistStreamedMessage(n,b)}:void 0,y=await this.generateCompletion(c,d,f??e,g,{toolNameMap:l,maxTurns:p,requestToolApproval:s,onTranscriptMessage:x});if(!y.success)return v.verbose("callModel error response",y),{success:!1,error:y.error};let z=y.value,A=z.content||"",B=[...e],C=function(a){if(!a)return;let b=a.prompt_tokens_details?.cached_tokens;return{promptTokens:a.prompt_tokens??0,completionTokens:a.completion_tokens??0,totalTokens:a.total_tokens??0,...null!=b?{cacheReadTokens:b}:{}}}(z.fullResponse?.usage);if(z.transcript&&z.transcript.length>0){let a=Date.now(),b=z.transcript;b.forEach((c,d)=>{let e=d===b.length-1;B.push({...c,id:c.id??(0,u.A)(),timestamp:c.timestamp??a+d,processNodeId:k,...e&&C?{usage:C}:{}})})}else{let a={id:(0,u.A)(),role:"assistant",content:A,tool_calls:z.fullResponse?.choices?.[0]?.message?.tool_calls,timestamp:Date.now(),processNodeId:k,...C?{usage:C}:{}};B.push(a)}let D=z.fullResponse?.choices?.[0]?.message?.tool_calls?.map(a=>{try{return{name:a.function.name,args:JSON.parse(a.function.arguments),id:a.id,result:""}}catch(b){return v.warn(`Failed to parse tool arguments for call ${a.id}`,{args:a.function.arguments,error:b}),{name:a.function.name,args:{},id:a.id,result:""}}}).filter(Boolean),E={success:!0,value:{content:A,messages:B,fullResponse:z.fullResponse,toolCalls:D}};return v.verbose("callModel single step result",E),E}static async generateCompletion(a,b,d,f,j){v.verbose("generateCompletion input",{modelId:a,prompt:b,messages:d,tools:f});try{let b,h=await i.modelService.getModel(a);if(!h)return{success:!1,error:(0,e.M5)("model_not_found",`Model not found: ${a}`,a)};let l=h.temperature?parseFloat(h.temperature):0,m=await i.modelService.resolveAndDecryptApiKey(h.ApiKey);if(!m)return{success:!1,error:(0,e.M5)("api_key_error","Failed to resolve or decrypt API key",a)};v.verbose(`decrypted api key ${m}`),v.verbose(` baseurl ${h.baseUrl}`);let n=(0,g.ae)(d);if(f&&f.length>0){let{ToolHandler:a}=c(70834);b=f.map(b=>"function"===b.type&&b.function.parameters?{...b,function:{...b.function,parameters:a.sanitizeSchema(b.function.parameters)}}:b)}let o=(0,k.getCompletionAdapter)(h);v.debug("calling chatcompletion"),v.verbose("calling chatcompletion now with ADAPTER",h.adapter||"openai"),v.verbose("calling chatcompletion now with MODEL",h.name),v.verbose("calling chatcompletion now with TEMP",l),v.verbose("calling chatcompletion now with MESSAGES",n),v.verbose("calling chatcompletion now with TOOLS",b),v.debug("[ModelHandler.generateCompletion] Sending request via adapter",{adapter:h.adapter||"openai",model:h.name});let{completion:p,transcript:q}=await o.createCompletion({model:h,apiKey:m,messages:n,tools:b,temperature:l,toolNameMap:j?.toolNameMap,maxTurns:j?.maxTurns,requestToolApproval:j?.requestToolApproval,onTranscriptMessage:j?.onTranscriptMessage});if(v.debug("[ModelHandler.generateCompletion] Received raw response from OpenAI API",{response:p}),v.verbose("chatcompletion returned"),v.verbose("chatcompletion returned",p),p&&"object"==typeof p&&"error"in p&&p.error){v.warn("API call returned successfully but contained an error object:",JSON.stringify(p.error));let b=p.error,c=w.extractProviderErrorDetails(b),d={success:!1,error:(0,e.M5)("api_error",c.message,a,void 0,{code:c.code,type:c.type,param:c.param,retryAfter:c.retryAfter,providerError:c.providerError})};return v.verbose("generateCompletion returning error from response body",d),d}let r=p?.choices?.[0];if(!r)return v.error("API response missing choices array or first choice.",{response:p}),{success:!1,error:(0,e.M5)("api_error","Invalid response structure from API: Missing choices.",a,void 0,{rawResponse:p})};let s={success:!0,value:{content:r.message?.content||"",messages:[...d],fullResponse:p,transcript:q}};return v.verbose("generateCompletion success result",s),s}catch(c){if(v.error("[ModelHandler.generateCompletion] Caught error during OpenAI API call",{rawError:c}),v.error("--- Error during openai.chat.completions.create ---"),c instanceof Error?(v.error(`Error Name: ${c.name}`),v.error(`Error Message: ${c.message}`),v.error(`Error Stack: ${c.stack}`)):v.error("Caught non-Error object:",c),c instanceof h.Ay.APIError&&(v.error(`API Error Status: ${c.status}`),v.error(`API Error Type: ${c.type}`),v.error(`API Error Code: ${c.code}`),v.error(`API Error Param: ${c.param}`),v.error(`API Error Headers: ${JSON.stringify(c.headers)}`)),v.error("--- End Error Details ---"),c instanceof h.Ay.APIError){let b=c.error,d=w.extractProviderErrorDetails(b,c.message),f=c.headers||{},g=f["retry-after"]??f["Retry-After"],h=void 0!==g?String(g):d.retryAfter,i=f["x-ratelimit-reset"]??f["x-ratelimit-reset-requests"],j={success:!1,error:(0,e.M5)("api_error",d.message,a,void 0,{status:c.status,type:d.type??c.type,code:d.code??c.code,param:d.param??c.param,retryAfter:h,rateLimitReset:void 0!==i?String(i):void 0,providerError:d.providerError,stack:c.stack})};return v.verbose("generateCompletion API error",j),j}let b={success:!1,error:(0,e.M5)("unknown_error",c instanceof Error?c.message:String(c),a,void 0,{stack:c instanceof Error?c.stack:void 0})};return v.verbose("generateCompletion unknown error",b),b}}static async processToolCalls(a){let{toolCalls:b,toolNameMap:c,emit:d,conversationId:g,node:h}=a;if(v.verbose("processToolCalls input",a),!b||0===b.length){let a={success:!0,value:{toolCallMessages:[],processedToolCalls:[]}};return v.verbose("processToolCalls empty result",a),a}try{let a=[],e=[];for(let i of b){let{id:b,function:{name:j,arguments:k}}=i;try{let i=JSON.parse(k);if(v.info("trying to call tool",j),j.startsWith("handoff_to_")||"handoff"===j){v.info(`Processing handoff tool: ${j}`);let c={handoff:!0,args:i},d=JSON.stringify(c);a.push({id:(0,u.A)(),role:"tool",tool_call_id:b,content:d,timestamp:Date.now()}),e.push({name:j,args:i,id:b,result:d});continue}let o=(0,f.ud)(j,c);if(!o)throw v.error("invalid tool format",j),Error(`Invalid tool name format: ${j}`);let p=o.server,r=o.tool;d?.({type:"tool:call",toolCallId:b,name:j,args:k});let s=o.timeout??m.aI,t=await l.mcpService.callTool(p,r,i,s,a=>d?.({type:"tool:progress",toolCallId:b,name:j,progress:a.progress,total:a.total,message:a.message})),x=t.data;if(t.success&&g)try{let a=await (0,n.jR)();if(a.autoCaptureEnabled){let c=await q({conversationId:g,server:p,toolName:r,toolCallId:b,nodeId:h?.nodeId,result:t.data,settings:a});for(let a of(x=c.result,c.captured))d?.({type:"resource:write",node:h,server:"flujo",uri:a.uri,name:a.name,mimeType:a.mimeType,size:a.size,source:"tool-result",toolCallId:b})}}catch(a){v.error("Run-resource auto-capture failed; keeping original tool result",a),x=t.data}let y=t.success?JSON.stringify(x):`Error: ${t.error}`;d?.({type:"tool:result",toolCallId:b,name:j,result:y.length>500?`${y.slice(0,500)}…`:y,isError:!t.success});let z=t.success?await w.resolveToolUiLink(p,t.data):void 0;a.push({id:(0,u.A)(),role:"tool",tool_call_id:b,content:y,timestamp:Date.now(),...z?{ui:z}:{}}),e.push({name:j,args:i,id:b,result:y})}catch(f){let c=`Error: ${f instanceof Error?f.message:"Unknown error"}`;d?.({type:"tool:result",toolCallId:b,name:j,result:c,isError:!0}),a.push({id:(0,u.A)(),role:"tool",tool_call_id:b,content:c,timestamp:Date.now()}),e.push({name:j,args:{},id:b,result:c})}}let i={success:!0,value:{toolCallMessages:a,processedToolCalls:e}};return v.verbose("processToolCalls success result",i),i}catch(b){let a={success:!1,error:(0,e.Po)("tool_processing_failed",b instanceof Error?b.message:String(b),"unknown")};return v.verbose("processToolCalls error result",a),a}}static hasToolCalls(a){return!!(a.fullResponse?.choices?.[0]?.message?.tool_calls&&a.fullResponse.choices[0].message.tool_calls.length>0)}}},85701:(a,b,c)=>{c.d(b,{A:()=>d});let d=8},96249:(a,b,c)=>{c.d(b,{$:()=>i});var d=c(94735),e=c(34115);let f=(0,c(18230).h)("backend/execution/flow/engine/ExecutionEventBus");class g{getChannel(a){let b=this.channels.get(a);if(!b){let c=new d.EventEmitter;c.setMaxListeners(0),b={emitter:c,seq:0,buffer:[]},this.channels.set(a,b)}return b}cancelCleanup(a){let b=this.cleanupTimers.get(a);b&&(clearTimeout(b),this.cleanupTimers.delete(a))}scheduleCleanup(a,b){this.cancelCleanup(a);let c=setTimeout(()=>{this.cleanupTimers.delete(a);let c=this.channels.get(a);c&&c.seq===b&&(c.emitter.listenerCount("event")>0||this.channels.delete(a))},3e5);"function"==typeof c.unref&&c.unref(),this.cleanupTimers.set(a,c)}emit(a,b){let c=this.getChannel(a),d={...b,conversationId:a,seq:c.seq++,timestamp:Date.now()};return c.buffer.push(d),c.buffer.length>1e3&&c.buffer.shift(),c.emitter.emit("event",d),(0,e.LB)(d),"run:done"===d.type?this.scheduleCleanup(a,c.seq):this.cancelCleanup(a),d}emitterFor(a){return b=>{try{this.emit(a,b)}catch(b){f.warn(`Failed to emit execution event for ${a}`,{err:b})}}}getBufferedSince(a,b){let c=this.channels.get(a);return c?c.buffer.filter(a=>a.seq>=b):[]}currentSeq(a){return this.channels.get(a)?.seq??0}subscribe(a,b){let c=this.getChannel(a);return c.emitter.on("event",b),()=>{c.emitter.off("event",b)}}constructor(){this.channels=new Map,this.cleanupTimers=new Map}}let h=globalThis,i=h.__flujoExecutionEventBus??(h.__flujoExecutionEventBus=new g)}};
@@ -1,6 +0,0 @@
1
- "use strict";exports.id=7635,exports.ids=[7635],exports.modules={27635:(a,b,c)=>{c.d(b,{z:()=>C});var d=c(32524),e=c(92372),f=c(46480),g=c(50846),h=c(58739),i=c(52189),j=c(33873),k=c.n(j),l=c(29021),m=c(9794);let n=(0,g.h)("backend/services/scheduler/triggers/fileWatch");var o=c(73736);function p(a){let b=Math.max(5,Math.round((a??6e4)/1e3));if(b<60)return`*/${b} * * * * *`;let c=Math.max(1,Math.round(b/60));if(c<60)return`*/${c} * * * *`;let d=Math.max(1,Math.min(23,Math.round(c/60)));return`0 */${d} * * *`}var q=c(51875);let r=(0,g.h)("backend/services/scheduler/triggers/mcpPoll"),s=(0,g.h)("backend/services/scheduler/triggers/urlWatch");var t=c(59911);let u=(0,g.h)("backend/services/scheduler/state"),v=a=>`planned-execution-state/${a}`;async function w(a){try{return await (0,e.YM)(v(a),{})}catch(b){return u.error(`Failed to load trigger state for ${a}:`,b),{}}}async function x(a,b){await (0,e.VH)(v(a),b)}async function y(a){await (0,e.N2)(v(a))}let z=(0,g.h)("backend/services/scheduler/index"),A={version:1,paused:!1,executions:[]};class B{async start(){this.started||(this.started=!0,z.info("Starting scheduler"),await this.reconcile())}reconcile(){let a=this.reconcileChain.catch(()=>{}).then(()=>this.doReconcile());return this.reconcileChain=a,a}async doReconcile(){for(let[a,b]of this.armed)try{b.dispose()}catch(b){z.warn(`Failed to dispose trigger for ${a}:`,b)}this.armed.clear();let a=await this.loadFile();if(this.pausedCache=a.paused,a.paused)return void z.info("Scheduler is paused — nothing armed");for(let b of a.executions)if(b.enabled)try{await this.armExecution(b)}catch(c){let a=c instanceof Error?c.message:String(c);this.lastTriggerErrors.set(b.id,a),z.error(`Failed to arm "${b.name}" (${b.id}):`,c)}z.info(`Scheduler armed ${this.armed.size} execution(s)`)}async armExecution(a){let b=a.trigger;switch(b.type){case"schedule":{let c=await w(a.id);c.lastScheduledFireAt?b.catchUp&&(0,i.hk)(b,c.lastScheduledFireAt)&&(await x(a.id,{...c,lastScheduledFireAt:new Date().toISOString()}),z.info(`Catch-up run for "${a.name}" (missed while closed)`),this.fire(a,{kind:"schedule-catchup",summary:"Schedule (missed while FLUJO was closed — ran once at startup)"})):await x(a.id,{...c,lastScheduledFireAt:new Date().toISOString()}),this.armed.set(a.id,(0,i.wv)(b,()=>{(async()=>{let b=await w(a.id);await x(a.id,{...b,lastScheduledFireAt:new Date().toISOString()}),await this.fire(a,{kind:"schedule",summary:"Schedule"})})().catch(b=>z.error(`Scheduled fire failed for ${a.id}:`,b))}));break}case"webhook":break;case"file-watch":this.armed.set(a.id,function(a,b,c){let d,e=a.debounceMs??2e3,f=new Set(a.events),g=a.glob?.trim()?function(a){let b=a.replace(/\\/g,"/"),c="";for(let a=0;a<b.length;a++){let d=b[a];"*"===d?"*"===b[a+1]?"/"===b[++a+1]?(a++,c+="(?:.*/)?"):c+=".*":c+="[^/]*":"?"===d?c+="[^/]":c+=d.replace(/[.+^${}()|[\]\\]/g,"\\$&")}return RegExp(`^${c}$`)}(a.glob.trim()):null;try{d=l.realpathSync.native(a.path)}catch(d){let b=d instanceof Error?d.message:String(d);return n.warn(`Cannot watch "${a.path}": ${b}`),c(`Cannot watch "${a.path}": ${b}`),{dispose:()=>void 0}}let h=[],i=!1,j=null,o=!1,p=()=>{if(j=null,o||0===h.length)return;let a=h;i&&n.info("File-watch batch overflowed; reporting first 50 events"),h=[],i=!1,b({events:a})},q=(0,m.wB)(d,{ignoreInitial:!0,awaitWriteFinish:{stabilityThreshold:500,pollInterval:100}});return q.on("all",(a,b)=>{if(!o&&("add"===a||"change"===a||"unlink"===a)&&f.has(a)){if(g){let a=k().relative(d,b).replace(/\\/g,"/")||k().basename(b);if(!g.test(a))return}h.length>=50?i=!0:h.push({event:a,path:b}),j&&clearTimeout(j),j=setTimeout(p,e),j.unref?.()}}),q.on("error",a=>{let b=a instanceof Error?a.message:String(a);n.warn(`Watcher error for ${d}: ${b}`),c(b)}),{dispose:()=>{o=!0,j&&(clearTimeout(j),j=null),h=[],q.close().catch(a=>n.warn(`Failed to close watcher for ${d}:`,a))}}}(b,({events:c})=>{this.lastTriggerErrors.delete(a.id),this.fire(a,{kind:"file",summary:1===c.length?`File ${"unlink"===c[0].event?"deleted":"add"===c[0].event?"added":"changed"}`:`${c.length} file changes`,context:{watchedPath:b.path,events:c}})},b=>this.lastTriggerErrors.set(a.id,b)));break;case"mcp-poll":Promise.all([c.e(6996),c.e(1223),c.e(5734),c.e(264)]).then(c.bind(c,23514)).then(async({mcpService:c})=>{await c.isServerDisabled(b.serverName)&&this.lastTriggerErrors.set(a.id,`MCP server '${b.serverName}' is disabled — enable it on the MCP page or change the trigger`)}).catch(b=>z.warn(`Arm-time disabled-server check failed for ${a.id}:`,b)),this.armed.set(a.id,function(a,b){let c=a.cron||p(a.intervalMs),d=!1,e=!1,f=0,g=0,h=async()=>{if(!e&&!d){if(g>0)return void g--;d=!0;try{let c,d=await b.callTool(a.serverName,a.toolName,a.args);if(!d.success)throw Error(d.error||"Tool call failed");f=0;let g=await b.loadState(),h=a.evaluate;if(c="on-change"===h.mode?(0,q.Jl)(d.data,g):"new-items"===h.mode?(0,q.A1)(d.data,h.itemsPath,h.idField,g):b.evaluateAiGate?await b.evaluateAiGate(d.data,h,g):{fire:!1,newState:{},error:'The "AI decides" condition is not available yet'},e)return;if(Object.keys(c.newState).length>0&&await b.saveState(c.newState),c.error)b.onError(c.error);else if(c.fire){let{status:d}=await b.onFire({summary:`Watched tool: ${c.summary??"condition met"}`,context:{server:a.serverName,tool:a.toolName,..."object"==typeof c.context&&null!==c.context?c.context:{result:c.context}}});if(e)return;if(c.pendingState){let{giveUpError:a}=await (0,q.vV)({status:d,pendingState:c.pendingState,priorFailures:g.pendingFailures??0,saveState:b.saveState});a&&b.onError(a)}}else b.onSuccess?.()}catch(d){f++,g=Math.min(2**(f-1),8);let c=d instanceof Error?d.message:String(d);r.warn(`Poll failed for ${a.serverName}/${a.toolName} (backing off ${g} check(s)): ${c}`),b.onError(c)}finally{d=!1}}},i=new o.l4(c,{timezone:a.timezone,unref:!0},()=>void h());return h(),{dispose:()=>{e=!0,i.stop()},nextRun:()=>i.nextRun()?.toISOString()??null}}(b,{callTool:async(a,b,d)=>{let{mcpService:e}=await Promise.all([c.e(6996),c.e(1223),c.e(5734),c.e(264)]).then(c.bind(c,23514)),f=await e.callTool(a,b,d);return{success:!0===f.success,data:f.data,error:"string"==typeof f.error?f.error:void 0}},loadState:()=>w(a.id),saveState:async b=>{let c=await w(a.id);await x(a.id,{...c,...b})},onFire:async({summary:b,context:c})=>(this.lastTriggerErrors.delete(a.id),{status:(await this.fire(a,{kind:"mcp-poll",summary:b,context:c})).status}),onError:b=>this.lastTriggerErrors.set(a.id,b),onSuccess:()=>this.lastTriggerErrors.delete(a.id),evaluateAiGate:async(a,b,d)=>{let{evaluateAiGate:e}=await c.e(7506).then(c.bind(c,47506));return e(a,b,d)}}));break;case"url-watch":this.armed.set(a.id,function(a,b){let c=b.fetchImpl??fetch,d=!1,e=!1,f=async()=>{if(!e&&!d){d=!0;try{let d=await c(a.url,{redirect:"follow",headers:{"User-Agent":"FLUJO-url-watch"},signal:AbortSignal.timeout(3e4)});if(!d.ok)return void b.onError(`The URL answered with HTTP ${d.status}`);let f=await d.text(),g=(0,q.qq)(f),h=await b.loadState();if(e)return;if(!h.lastHash){await b.saveState({lastHash:g}),b.onSuccess?.();return}if(h.lastHash===g)return void b.onSuccess?.();let{status:i}=await b.onFire({summary:"Online content changed",context:{url:a.url,status:d.status,contentType:d.headers.get("content-type")??void 0,content:f.length>8192?`${f.slice(0,8192)}… (truncated, ${f.length} chars total)`:f}});if(e)return;let{giveUpError:j}=await (0,q.vV)({status:i,pendingState:{lastHash:g},priorFailures:h.pendingFailures??0,saveState:b.saveState});j&&b.onError(j)}catch(d){let c=d instanceof Error&&"TimeoutError"===d.name?"The URL did not answer within 30s":d instanceof Error?d.message:String(d);s.warn(`URL check failed for ${a.url}: ${c}`),b.onError(c)}finally{d=!1}}},g=new o.l4(a.cron,{timezone:a.timezone,unref:!0},()=>void f());return f(),{dispose:()=>{e=!0,g.stop()},nextRun:()=>g.nextRun()?.toISOString()??null}}(b,{loadState:()=>w(a.id),saveState:async b=>{let c=await w(a.id);await x(a.id,{...c,...b})},onFire:async({summary:b,context:c})=>(this.lastTriggerErrors.delete(a.id),{status:(await this.fire(a,{kind:"url-watch",summary:b,context:c})).status}),onError:b=>this.lastTriggerErrors.set(a.id,b),onSuccess:()=>this.lastTriggerErrors.delete(a.id)}));break;default:z.warn(`Trigger type "${b.type}" is not implemented — "${a.name}" not armed`)}}async loadFile(){let a=await (0,e.YM)(f.Z.PLANNED_EXECUTIONS,A);return{version:1,paused:!0===a.paused,executions:Array.isArray(a.executions)?a.executions:[]}}async saveFile(a){await (0,e.VH)(f.Z.PLANNED_EXECUTIONS,a)}async isPaused(){return(await this.loadFile()).paused}async setPaused(a){let b=await this.loadFile();await this.saveFile({...b,paused:a}),await this.reconcile()}async list(){return Promise.all((await this.loadFile()).executions.map(async a=>({execution:a,status:this.getStatus(a),lastRun:await (0,t.tl)(a.id)})))}async get(a){return(await this.loadFile()).executions.find(b=>b.id===a)??null}async create(a){let b=this.validateInput(a);if(b)return{error:b};if(void 0!==a.id&&!/^[0-9a-f]{8}-[0-9a-f-]{27}$/i.test(a.id))return{error:"The id must be a UUID"};let c=new Date().toISOString(),e={...a,trigger:this.normalizeTrigger(a.trigger),id:a.id??(0,d.A)(),createdAt:c,updatedAt:c},f=await this.loadFile();return f.executions.some(a=>a.id===e.id)?{error:`A planned execution with id "${e.id}" already exists`}:(await this.saveFile({...f,executions:[...f.executions,e]}),await this.reconcile(),{execution:e})}async update(a,b){let c=await this.loadFile(),d=c.executions.findIndex(b=>b.id===a);if(d<0)return{error:`No planned execution with id "${a}"`};let e={...c.executions[d],...b,...b.trigger?{trigger:this.normalizeTrigger(b.trigger)}:{},id:a,createdAt:c.executions[d].createdAt,updatedAt:new Date().toISOString()},f=this.validateInput(e);if(f)return{error:f};let g=[...c.executions];return g[d]=e,await this.saveFile({...c,executions:g}),await this.reconcile(),{execution:e}}async delete(a){let b=await this.loadFile();return b.executions.some(b=>b.id===a)?(await this.saveFile({...b,executions:b.executions.filter(b=>b.id!==a)}),await this.reconcile(),this.lastTriggerErrors.delete(a),await (0,t.xC)(a),await y(a),{success:!0}):{success:!1,error:`No planned execution with id "${a}"`}}normalizeTrigger(a){return a?.type!=="webhook"||a.token?a?.type!=="mcp-poll"||a.cron?a:{...a,cron:p(a.intervalMs)}:{...a,token:(0,d.A)()}}validateInput(a){if(!a.name?.trim())return"A name is required";if(!a.flowId)return"A flow is required";if("string"!=typeof a.prompt)return"A prompt is required (may be empty)";let b=a.trigger;if(!b||"object"!=typeof b)return"A trigger is required";switch(b.type){case"schedule":{let a=(0,i.O9)(b.cron,b.timezone);return a.valid?null:`Invalid schedule: ${a.error}`}case"webhook":return null;case"file-watch":if(!b.path?.trim())return"A folder or file path to watch is required";if(!Array.isArray(b.events)||0===b.events.length)return"At least one file event is required";return null;case"mcp-poll":if(!b.serverName||!b.toolName)return"A server and tool are required";if(b.cron){let a=(0,i.O9)(b.cron,b.timezone);if(!a.valid)return`Invalid schedule: ${a.error}`}if(b.evaluate?.mode==="new-items"&&!b.evaluate.idField?.trim())return"An id field is required to detect new items";if((b.evaluate?.mode==="llm-gate"||b.evaluate?.mode==="flow-gate")&&!b.evaluate.condition?.trim())return"A condition is required for the AI to check";if(b.evaluate?.mode==="llm-gate"&&!b.evaluate.modelId)return"A model is required to check the condition";if(b.evaluate?.mode==="flow-gate"&&!b.evaluate.flowId)return"A flow is required to check the condition";return null;case"url-watch":{try{let a=new URL(b.url??"");if("http:"!==a.protocol&&"https:"!==a.protocol)return"The URL must start with http:// or https://"}catch{return"A valid URL is required"}let a=(0,i.O9)(b.cron,b.timezone);return a.valid?null:`Invalid schedule: ${a.error}`}default:return"Unknown trigger type"}}getStatus(a){let b=this.armed.get(a.id),c=void 0!==b||a.enabled&&"webhook"===a.trigger.type&&this.started&&!this.pausedCache,d=this.running.get(a.id);return{armed:c,nextRun:b?.nextRun?b.nextRun():void 0,lastTriggerError:this.lastTriggerErrors.get(a.id),running:void 0!==d,runningSince:d}}async runNow(a){let b=await this.get(a);return b?{record:await this.fire(b,{kind:"manual",summary:"Manual run"})}:{error:`No planned execution with id "${a}"`}}async fire(a,b,e=(0,d.A)()){let f,g=new Date().toISOString();if(await (0,h.isEncryptionLocked)()){let c={runId:e,conversationId:"",firedAt:g,finishedAt:g,status:"skipped",triggerSummary:b.summary,error:"encryption locked"};return await (0,t.Hy)(a.id,c),z.info(`Skipped fire for "${a.name}" — encryption locked`),c}if(this.running.has(a.id)){let c={runId:e,conversationId:"",firedAt:g,finishedAt:g,status:"skipped",triggerSummary:b.summary,error:"Previous run still in progress"};return await (0,t.Hy)(a.id,c),z.info(`Skipped overlapping fire for "${a.name}"`),c}this.running.set(a.id,g);let i=(0,d.A)();try{z.info(`Firing "${a.name}" (${b.kind})`);let d=await (0,t.Sw)(a.id),h=d.length>0?d[d.length-1]:null,j=[...d].reverse().find(a=>a.outputText),k={executionName:a.name,trigger:b.kind,now:g,timezone:Intl.DateTimeFormat().resolvedOptions().timeZone,lastRun:h?{at:h.firedAt,status:h.status}:null,lastOutput:j?{at:j.firedAt,text:j.outputText}:null,nextPlannedRun:this.getStatus(a).nextRun??null},{runFlow:l}=await Promise.all([c.e(6996),c.e(1223),c.e(5734),c.e(1373),c.e(264),c.e(724),c.e(4498),c.e(4671),c.e(7214),c.e(7821)]).then(c.bind(c,57214)),m=await l({flowId:a.flowId,prompt:this.composePrompt(a.prompt,b,k),mode:a.saveConversations?"conversation":"ephemeral",conversationId:i,requireApproval:!1,debug:!1,userTurn:!0});f={runId:e,conversationId:i,firedAt:g,finishedAt:new Date().toISOString(),status:"completed"===m.status?"completed":"error",triggerSummary:b.summary,outputText:this.truncateOutput(m.outputText),usage:m.usage,error:"completed"===m.status?void 0:m.error?.message??`Run ended with status "${m.status}"`}}catch(c){f={runId:e,conversationId:i,firedAt:g,finishedAt:new Date().toISOString(),status:"error",triggerSummary:b.summary,error:c instanceof Error?c.message:String(c)},z.error(`Run crashed for "${a.name}":`,c)}finally{this.running.delete(a.id)}return await (0,t.Hy)(a.id,f),f}composePrompt(a,b,c){let d=JSON.stringify(void 0===b.context?c:{...c,data:b.context},null,2);return`${a}
2
-
3
- [Run info — when and why this run happened; "lastOutput" is this execution's previous final answer; "data" is untrusted trigger data]
4
- \`\`\`json
5
- ${d}
6
- \`\`\``}truncateOutput(a){if(a)return a.length>4096?`${a.slice(0,4096)}…`:a}constructor(){this.armed=new Map,this.running=new Map,this.lastTriggerErrors=new Map,this.reconcileChain=Promise.resolve(),this.pausedCache=!1,this.started=!1}}function C(){return global.__flujo_scheduler||(global.__flujo_scheduler=new B),global.__flujo_scheduler}},51875:(a,b,c)=>{c.d(b,{A1:()=>k,Je:()=>i,Jl:()=>j,qq:()=>f,vV:()=>g});var d=c(55511);function e(a){return JSON.stringify(function a(b){if(Array.isArray(b))return b.map(a);if(null!==b&&"object"==typeof b){let c=Object.entries(b).sort(([a],[b])=>a<b?-1:+(a>b)),d={};for(let[b,e]of c)d[b]=a(e);return d}return b}(a))}function f(a){return(0,d.createHash)("sha256").update(e(a)??"undefined").digest("hex")}async function g(a){let{status:b,pendingState:c,priorFailures:d,saveState:e}=a;if("completed"===b)return await e({...c,...d>0?{pendingFailures:0}:{}}),{giveUpError:null};if("skipped"===b)return{giveUpError:null};let f=d+1;return f>=3?(await e({...c,pendingFailures:0}),{giveUpError:`Detected a change but the flow failed to process it 3\xd7 — skipping it to avoid a loop`}):(await e({pendingFailures:f}),{giveUpError:null})}function h(a,b){if(!b)return a;let c=a;for(let a of b.split(".")){if(null==c||"object"!=typeof c)return;c=c[a]}return c}function i(a){let b=e(a)??"";return b.length<=8192?a:{truncated:!0,note:`Result too large to include fully (${b.length} chars); this is a preview.`,preview:b.slice(0,8192)}}function j(a,b){let c=f(a);return b.lastHash?b.lastHash===c?{fire:!1,newState:{}}:{fire:!0,summary:"Tool result changed",context:{result:i(a)},newState:{},pendingState:{lastHash:c}}:{fire:!1,newState:{lastHash:c}}}function k(a,b,c,d){let e=h(a,b);if(!Array.isArray(e))return{fire:!1,newState:{},error:`"${b||"(root)"}" did not resolve to a list in the tool result`};let g=e.map(a=>{let b=h(a,c);return{id:null==b||"object"==typeof b?`hash:${f(a)}`:String(b),item:a}}),j=d.seenIds,k=a=>{let b=[...a??[]],c=new Set(b);for(let{id:a}of g)c.has(a)||(c.add(a),b.push(a));return b.slice(-1e3)};if(!j)return{fire:!1,newState:{seenIds:k(void 0)}};let l=new Set(j),m=g.filter(({id:a})=>!l.has(a));return 0===m.length?{fire:!1,newState:{}}:{fire:!0,summary:1===m.length?"1 new item":`${m.length} new items`,context:{newItems:i(m.slice(0,50).map(({item:a})=>a)),...m.length>50?{omitted:m.length-50}:{}},newState:{},pendingState:{seenIds:k(j)}}}},52189:(a,b,c)=>{c.d(b,{O9:()=>e,Z9:()=>f,hk:()=>g,wv:()=>h});var d=c(73736);function e(a,b){try{let c=new d.l4(a,{timezone:b,paused:!0});return c.nextRun(),c.stop(),{valid:!0}}catch(a){return{valid:!1,error:a instanceof Error?a.message:"Invalid cron pattern"}}}function f(a,b,c){let e=new d.l4(a,{timezone:b,paused:!0});try{return e.nextRuns(c).map(a=>a.toISOString())}finally{e.stop()}}function g(a,b){let c=new d.l4(a.cron,{timezone:a.timezone,paused:!0});try{let a=c.nextRun(new Date(b));return null!==a&&a.getTime()<=Date.now()}finally{c.stop()}}function h(a,b){let c=new d.l4(a.cron,{timezone:a.timezone,unref:!0},b);return{dispose:()=>c.stop(),nextRun:()=>c.nextRun()?.toISOString()??null}}},59911:(a,b,c)=>{c.d(b,{Hy:()=>i,Sw:()=>h,tl:()=>j,xC:()=>k});var d=c(92372);let e=(0,c(50846).h)("backend/services/scheduler/runHistory"),f=a=>`planned-execution-runs/${a}`,g=new Map;async function h(a){try{return await (0,d.YM)(f(a),[])}catch(b){return e.error(`Failed to load run history for ${a}:`,b),[]}}async function i(a,b){let c=(g.get(a)??Promise.resolve()).catch(()=>{}).then(async()=>{let c=await h(a);c.push(b);let e=c.slice(-100);await (0,d.VH)(f(a),e)});g.set(a,c);try{await c}finally{g.get(a)===c&&g.delete(a)}}async function j(a){let b=await h(a);return b.length>0?b[b.length-1]:null}async function k(a){await (0,d.N2)(f(a))}}};
@@ -1 +0,0 @@
1
- exports.id=8298,exports.ids=[8298],exports.modules={22682:(a,b,c)=>{"use strict";a.exports=c(49754).vendored["react-rsc"].ReactDOM},27825:(a,b,c)=>{"use strict";a.exports=c(33030)},33030:(a,b,c)=>{"use strict";var d=c(28354),e=c(22682),f={stream:!0},g=Object.prototype.hasOwnProperty,h=new Map;function i(a){var b=globalThis.__next_require__(a);return"function"!=typeof b.then||"fulfilled"===b.status?null:(b.then(function(a){b.status="fulfilled",b.value=a},function(a){b.status="rejected",b.reason=a}),b)}function j(){}function k(a){for(var b=a[1],d=[],e=0;e<b.length;){var f=b[e++];b[e++];var g=h.get(f);if(void 0===g){g=c.e(f),d.push(g);var k=h.set.bind(h,f,null);g.then(k,j),h.set(f,g)}else null!==g&&d.push(g)}return 4===a.length?0===d.length?i(a[0]):Promise.all(d).then(function(){return i(a[0])}):0<d.length?Promise.all(d):null}function l(a){var b=globalThis.__next_require__(a[0]);if(4===a.length&&"function"==typeof b.then)if("fulfilled"===b.status)b=b.value;else throw b.reason;return"*"===a[2]?b:""===a[2]?b.__esModule?b.default:b:g.call(b,a[2])?b[a[2]]:void 0}var m=e.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,n=Symbol.for("react.transitional.element"),o=Symbol.for("react.lazy"),p=Symbol.iterator,q=Symbol.asyncIterator,r=Array.isArray,s=Object.getPrototypeOf,t=Object.prototype,u=new WeakMap;function v(a,b,c,d,e){function f(a,c){c=new Blob([new Uint8Array(c.buffer,c.byteOffset,c.byteLength)]);var d=i++;return null===k&&(k=new FormData),k.append(b+d,c),"$"+a+d.toString(16)}function g(a,v){if(null===v)return null;if("object"==typeof v){switch(v.$$typeof){case n:if(void 0!==c&&-1===a.indexOf(":")){var w,x,y,z,A,B=l.get(this);if(void 0!==B)return c.set(B+":"+a,v),"$T"}throw Error("React Element cannot be passed to Server Functions from the Client without a temporary reference set. Pass a TemporaryReferenceSet to the options.");case o:B=v._payload;var C=v._init;null===k&&(k=new FormData),j++;try{var D=C(B),E=i++,F=h(D,E);return k.append(b+E,F),"$"+E.toString(16)}catch(a){if("object"==typeof a&&null!==a&&"function"==typeof a.then){j++;var G=i++;return B=function(){try{var a=h(v,G),c=k;c.append(b+G,a),j--,0===j&&d(c)}catch(a){e(a)}},a.then(B,B),"$"+G.toString(16)}return e(a),null}finally{j--}}if(B=l.get(v),"function"==typeof v.then){if(void 0!==B)if(m!==v)return B;else m=null;null===k&&(k=new FormData),j++;var H=i++;return a="$@"+H.toString(16),l.set(v,a),v.then(function(a){try{var c=l.get(a),f=void 0!==c?JSON.stringify(c):h(a,H);(a=k).append(b+H,f),j--,0===j&&d(a)}catch(a){e(a)}},e),a}if(void 0!==B)if(m!==v)return B;else m=null;else -1===a.indexOf(":")&&void 0!==(B=l.get(this))&&(a=B+":"+a,l.set(v,a),void 0!==c&&c.set(a,v));if(r(v))return v;if(v instanceof FormData){null===k&&(k=new FormData);var I=k,J=b+"_"+(a=i++)+"_";return v.forEach(function(a,b){I.append(J+b,a)}),"$K"+a.toString(16)}if(v instanceof Map)return a=i++,B=h(Array.from(v),a),null===k&&(k=new FormData),k.append(b+a,B),"$Q"+a.toString(16);if(v instanceof Set)return a=i++,B=h(Array.from(v),a),null===k&&(k=new FormData),k.append(b+a,B),"$W"+a.toString(16);if(v instanceof ArrayBuffer)return a=new Blob([v]),B=i++,null===k&&(k=new FormData),k.append(b+B,a),"$A"+B.toString(16);if(v instanceof Int8Array)return f("O",v);if(v instanceof Uint8Array)return f("o",v);if(v instanceof Uint8ClampedArray)return f("U",v);if(v instanceof Int16Array)return f("S",v);if(v instanceof Uint16Array)return f("s",v);if(v instanceof Int32Array)return f("L",v);if(v instanceof Uint32Array)return f("l",v);if(v instanceof Float32Array)return f("G",v);if(v instanceof Float64Array)return f("g",v);if(v instanceof BigInt64Array)return f("M",v);if(v instanceof BigUint64Array)return f("m",v);if(v instanceof DataView)return f("V",v);if("function"==typeof Blob&&v instanceof Blob)return null===k&&(k=new FormData),a=i++,k.append(b+a,v),"$B"+a.toString(16);if(a=null===(w=v)||"object"!=typeof w?null:"function"==typeof(w=p&&w[p]||w["@@iterator"])?w:null)return(B=a.call(v))===v?(a=i++,B=h(Array.from(B),a),null===k&&(k=new FormData),k.append(b+a,B),"$i"+a.toString(16)):Array.from(B);if("function"==typeof ReadableStream&&v instanceof ReadableStream)return function(a){try{var c,f,h,l,m,n,o,p=a.getReader({mode:"byob"})}catch(l){return c=a.getReader(),null===k&&(k=new FormData),f=k,j++,h=i++,c.read().then(function a(i){if(i.done)f.append(b+h,"C"),0==--j&&d(f);else try{var k=JSON.stringify(i.value,g);f.append(b+h,k),c.read().then(a,e)}catch(a){e(a)}},e),"$R"+h.toString(16)}return l=p,null===k&&(k=new FormData),m=k,j++,n=i++,o=[],l.read(new Uint8Array(1024)).then(function a(c){c.done?(c=i++,m.append(b+c,new Blob(o)),m.append(b+n,'"$o'+c.toString(16)+'"'),m.append(b+n,"C"),0==--j&&d(m)):(o.push(c.value),l.read(new Uint8Array(1024)).then(a,e))},e),"$r"+n.toString(16)}(v);if("function"==typeof(a=v[q]))return x=v,y=a.call(v),null===k&&(k=new FormData),z=k,j++,A=i++,x=x===y,y.next().then(function a(c){if(c.done){if(void 0===c.value)z.append(b+A,"C");else try{var f=JSON.stringify(c.value,g);z.append(b+A,"C"+f)}catch(a){e(a);return}0==--j&&d(z)}else try{var h=JSON.stringify(c.value,g);z.append(b+A,h),y.next().then(a,e)}catch(a){e(a)}},e),"$"+(x?"x":"X")+A.toString(16);if((a=s(v))!==t&&(null===a||null!==s(a))){if(void 0===c)throw Error("Only plain objects, and a few built-ins, can be passed to Server Functions. Classes or null prototypes are not supported.");return"$T"}return v}if("string"==typeof v)return"Z"===v[v.length-1]&&this[a]instanceof Date?"$D"+v:a="$"===v[0]?"$"+v:v;if("boolean"==typeof v)return v;if("number"==typeof v)return Number.isFinite(v)?0===v&&-1/0==1/v?"$-0":v:1/0===v?"$Infinity":-1/0===v?"$-Infinity":"$NaN";if(void 0===v)return"$undefined";if("function"==typeof v){if(void 0!==(B=u.get(v)))return void 0!==(a=l.get(v))||(a=JSON.stringify({id:B.id,bound:B.bound},g),null===k&&(k=new FormData),B=i++,k.set(b+B,a),a="$h"+B.toString(16),l.set(v,a)),a;if(void 0!==c&&-1===a.indexOf(":")&&void 0!==(B=l.get(this)))return c.set(B+":"+a,v),"$T";throw Error("Client Functions cannot be passed directly to Server Functions. Only Functions passed from the Server can be passed back again.")}if("symbol"==typeof v){if(void 0!==c&&-1===a.indexOf(":")&&void 0!==(B=l.get(this)))return c.set(B+":"+a,v),"$T";throw Error("Symbols cannot be passed to a Server Function without a temporary reference set. Pass a TemporaryReferenceSet to the options.")}if("bigint"==typeof v)return"$n"+v.toString(10);throw Error("Type "+typeof v+" is not supported as an argument to a Server Function.")}function h(a,b){return"object"==typeof a&&null!==a&&(b="$"+b.toString(16),l.set(a,b),void 0!==c&&c.set(b,a)),m=a,JSON.stringify(a,g)}var i=1,j=0,k=null,l=new WeakMap,m=a,v=h(a,0);return null===k?d(v):(k.set(b+"0",v),0===j&&d(k)),function(){0<j&&(j=0,null===k?d(v):d(k))}}var w=new WeakMap;function x(a){var b=u.get(this);if(!b)throw Error("Tried to encode a Server Action from a different instance than the encoder is from. This is a bug in React.");var c=null;if(null!==b.bound){if((c=w.get(b))||(d={id:b.id,bound:b.bound},g=new Promise(function(a,b){e=a,f=b}),v(d,"",void 0,function(a){if("string"==typeof a){var b=new FormData;b.append("0",a),a=b}g.status="fulfilled",g.value=a,e(a)},function(a){g.status="rejected",g.reason=a,f(a)}),c=g,w.set(b,c)),"rejected"===c.status)throw c.reason;if("fulfilled"!==c.status)throw c;b=c.value;var d,e,f,g,h=new FormData;b.forEach(function(b,c){h.append("$ACTION_"+a+":"+c,b)}),c=h,b="$ACTION_REF_"+a}else b="$ACTION_ID_"+b.id;return{name:b,method:"POST",encType:"multipart/form-data",data:c}}function y(a,b){var c=u.get(this);if(!c)throw Error("Tried to encode a Server Action from a different instance than the encoder is from. This is a bug in React.");if(c.id!==a)return!1;var d=c.bound;if(null===d)return 0===b;switch(d.status){case"fulfilled":return d.value.length===b;case"pending":throw d;case"rejected":throw d.reason;default:throw"string"!=typeof d.status&&(d.status="pending",d.then(function(a){d.status="fulfilled",d.value=a},function(a){d.status="rejected",d.reason=a})),d}}function z(a,b,c,d){u.has(a)||(u.set(a,{id:b,originalBind:a.bind,bound:c}),Object.defineProperties(a,{$$FORM_ACTION:{value:void 0===d?x:function(){var a=u.get(this);if(!a)throw Error("Tried to encode a Server Action from a different instance than the encoder is from. This is a bug in React.");var b=a.bound;return null===b&&(b=Promise.resolve([])),d(a.id,b)}},$$IS_SIGNATURE_EQUAL:{value:y},bind:{value:C}}))}var A=Function.prototype.bind,B=Array.prototype.slice;function C(){var a=u.get(this);if(!a)return A.apply(this,arguments);var b=a.originalBind.apply(this,arguments),c=B.call(arguments,1),d=null;return d=null!==a.bound?Promise.resolve(a.bound).then(function(a){return a.concat(c)}):Promise.resolve(c),u.set(b,{id:a.id,originalBind:b.bind,bound:d}),Object.defineProperties(b,{$$FORM_ACTION:{value:this.$$FORM_ACTION},$$IS_SIGNATURE_EQUAL:{value:y},bind:{value:C}}),b}function D(a,b,c){this.status=a,this.value=b,this.reason=c}function E(a){switch(a.status){case"resolved_model":P(a);break;case"resolved_module":Q(a)}switch(a.status){case"fulfilled":return a.value;case"pending":case"blocked":case"halted":throw a;default:throw a.reason}}function F(a,b){for(var c=0;c<a.length;c++){var d=a[c];"function"==typeof d?d(b):U(d,b)}}function G(a,b){for(var c=0;c<a.length;c++){var d=a[c];"function"==typeof d?d(b):V(d,b)}}function H(a,b){var c=b.handler.chunk;if(null===c)return null;if(c===a)return b.handler;if(null!==(b=c.value))for(c=0;c<b.length;c++){var d=b[c];if("function"!=typeof d&&null!==(d=H(a,d)))return d}return null}function I(a,b,c){switch(a.status){case"fulfilled":F(b,a.value);break;case"blocked":for(var d=0;d<b.length;d++){var e=b[d];if("function"!=typeof e){var f=H(a,e);if(null!==f)switch(U(e,f.value),b.splice(d,1),d--,null!==c&&-1!==(e=c.indexOf(e))&&c.splice(e,1),a.status){case"fulfilled":F(b,a.value);return;case"rejected":null!==c&&G(c,a.reason);return}}}case"pending":if(a.value)for(d=0;d<b.length;d++)a.value.push(b[d]);else a.value=b;if(a.reason){if(c)for(b=0;b<c.length;b++)a.reason.push(c[b])}else a.reason=c;break;case"rejected":c&&G(c,a.reason)}}function J(a,b,c){"pending"!==b.status&&"blocked"!==b.status?b.reason.error(c):(a=b.reason,b.status="rejected",b.reason=c,null!==a&&G(a,c))}function K(a,b,c){return new D("resolved_model",(c?'{"done":true,"value":':'{"done":false,"value":')+b+"}",a)}function L(a,b,c,d){M(a,b,(d?'{"done":true,"value":':'{"done":false,"value":')+c+"}")}function M(a,b,c){if("pending"!==b.status)b.reason.enqueueModel(c);else{var d=b.value,e=b.reason;b.status="resolved_model",b.value=c,b.reason=a,null!==d&&(P(b),I(b,d,e))}}function N(a,b,c){if("pending"===b.status||"blocked"===b.status){a=b.value;var d=b.reason;b.status="resolved_module",b.value=c,b.reason=null,null!==a&&(Q(b),I(b,a,d))}}D.prototype=Object.create(Promise.prototype),D.prototype.then=function(a,b){switch(this.status){case"resolved_model":P(this);break;case"resolved_module":Q(this)}switch(this.status){case"fulfilled":"function"==typeof a&&a(this.value);break;case"pending":case"blocked":"function"==typeof a&&(null===this.value&&(this.value=[]),this.value.push(a)),"function"==typeof b&&(null===this.reason&&(this.reason=[]),this.reason.push(b));break;case"halted":break;default:"function"==typeof b&&b(this.reason)}};var O=null;function P(a){var b=O;O=null;var c=a.value,d=a.reason;a.status="blocked",a.value=null,a.reason=null;try{var e=JSON.parse(c,d._fromJSON),f=a.value;if(null!==f&&(a.value=null,a.reason=null,F(f,e)),null!==O){if(O.errored)throw O.reason;if(0<O.deps){O.value=e,O.reason=null,O.chunk=a;return}}a.status="fulfilled",a.value=e,a.reason=null}catch(b){a.status="rejected",a.reason=b}finally{O=b}}function Q(a){try{var b=l(a.value);a.status="fulfilled",a.value=b,a.reason=null}catch(b){a.status="rejected",a.reason=b}}function R(a,b){a._closed=!0,a._closedReason=b,a._chunks.forEach(function(c){"pending"===c.status?J(a,c,b):"fulfilled"===c.status&&null!==c.reason&&c.reason.error(b)})}function S(a){return{$$typeof:o,_payload:a,_init:E}}function T(a,b){var c=a._chunks,d=c.get(b);return d||(d=a._closed?new D("rejected",null,a._closedReason):new D("pending",null,null),c.set(b,d)),d}function U(a,b){var c=a.response,d=a.handler,e=a.parentObject,f=a.key,h=a.map,i=a.path;try{for(var j=1;j<i.length;j++){for(;b.$$typeof===o;){var k=b._payload;if(k===d.chunk)b=d.value;else{switch(k.status){case"resolved_model":P(k);break;case"resolved_module":Q(k)}switch(k.status){case"fulfilled":b=k.value;continue;case"blocked":var l=H(k,a);if(null!==l){b=l.value;continue}case"pending":i.splice(0,j-1),null===k.value?k.value=[a]:k.value.push(a),null===k.reason?k.reason=[a]:k.reason.push(a);return;case"halted":return;default:V(a,k.reason);return}}}var m=i[j];if("object"==typeof b&&null!==b&&g.call(b,m))b=b[m];else throw Error("Invalid reference.")}var p=h(c,b,e,f);if("__proto__"!==f&&(e[f]=p),""===f&&null===d.value&&(d.value=p),e[0]===n&&"object"==typeof d.value&&null!==d.value&&d.value.$$typeof===n){var q=d.value;"3"===f&&(q.props=p)}}catch(b){V(a,b);return}d.deps--,0===d.deps&&null!==(a=d.chunk)&&"blocked"===a.status&&(b=a.value,a.status="fulfilled",a.value=d.value,a.reason=d.reason,null!==b&&F(b,d.value))}function V(a,b){var c=a.handler;a=a.response,c.errored||(c.errored=!0,c.value=null,c.reason=b,null!==(c=c.chunk)&&"blocked"===c.status&&J(a,c,b))}function W(a,b,c,d,e,f){if(O){var g=O;g.deps++}else g=O={parent:null,chunk:null,value:null,reason:null,deps:1,errored:!1};return b={response:d,handler:g,parentObject:b,key:c,map:e,path:f},null===a.value?a.value=[b]:a.value.push(b),null===a.reason?a.reason=[b]:a.reason.push(b),null}function X(a,b,c,d){if(!a._serverReferenceConfig)return function(a,b,c){function d(){var a=Array.prototype.slice.call(arguments);return f?"fulfilled"===f.status?b(e,f.value.concat(a)):Promise.resolve(f).then(function(c){return b(e,c.concat(a))}):b(e,a)}var e=a.id,f=a.bound;return z(d,e,f,c),d}(b,a._callServer,a._encodeFormAction);var e=function(a,b){var c="",d=a[b];if(d)c=d.name;else{var e=b.lastIndexOf("#");if(-1!==e&&(c=b.slice(e+1),d=a[b.slice(0,e)]),!d)throw Error('Could not find the module "'+b+'" in the React Server Manifest. This is probably a bug in the React Server Components bundler.')}return d.async?[d.id,d.chunks,c,1]:[d.id,d.chunks,c]}(a._serverReferenceConfig,b.id),f=k(e);if(f)b.bound&&(f=Promise.all([f,b.bound]));else{if(!b.bound)return z(f=l(e),b.id,b.bound,a._encodeFormAction),f;f=Promise.resolve(b.bound)}if(O){var g=O;g.deps++}else g=O={parent:null,chunk:null,value:null,reason:null,deps:1,errored:!1};return f.then(function(){var f=l(e);if(b.bound){var h=b.bound.value.slice(0);h.unshift(null),f=f.bind.apply(f,h)}z(f,b.id,b.bound,a._encodeFormAction),"__proto__"!==d&&(c[d]=f),""===d&&null===g.value&&(g.value=f),c[0]===n&&"object"==typeof g.value&&null!==g.value&&g.value.$$typeof===n&&(h=g.value,"3"===d)&&(h.props=f),g.deps--,0===g.deps&&null!==(f=g.chunk)&&"blocked"===f.status&&(h=f.value,f.status="fulfilled",f.value=g.value,f.reason=null,null!==h&&F(h,g.value))},function(b){if(!g.errored){g.errored=!0,g.value=null,g.reason=b;var c=g.chunk;null!==c&&"blocked"===c.status&&J(a,c,b)}}),null}function Y(a,b,c,d,e){var f=parseInt((b=b.split(":"))[0],16);switch((f=T(a,f)).status){case"resolved_model":P(f);break;case"resolved_module":Q(f)}switch(f.status){case"fulfilled":var g=f.value;for(f=1;f<b.length;f++){for(;g.$$typeof===o;){switch((g=g._payload).status){case"resolved_model":P(g);break;case"resolved_module":Q(g)}switch(g.status){case"fulfilled":g=g.value;break;case"blocked":case"pending":return W(g,c,d,a,e,b.slice(f-1));case"halted":return O?(a=O,a.deps++):O={parent:null,chunk:null,value:null,reason:null,deps:1,errored:!1},null;default:return O?(O.errored=!0,O.value=null,O.reason=g.reason):O={parent:null,chunk:null,value:null,reason:g.reason,deps:0,errored:!0},null}}g=g[b[f]]}return e(a,g,c,d);case"pending":case"blocked":return W(f,c,d,a,e,b);case"halted":return O?(a=O,a.deps++):O={parent:null,chunk:null,value:null,reason:null,deps:1,errored:!1},null;default:return O?(O.errored=!0,O.value=null,O.reason=f.reason):O={parent:null,chunk:null,value:null,reason:f.reason,deps:0,errored:!0},null}}function Z(a,b){return new Map(b)}function $(a,b){return new Set(b)}function _(a,b){return new Blob(b.slice(1),{type:b[0]})}function aa(a,b){a=new FormData;for(var c=0;c<b.length;c++)a.append(b[c][0],b[c][1]);return a}function ab(a,b){return b[Symbol.iterator]()}function ac(a,b){return b}function ad(){throw Error('Trying to call a function from "use server" but the callServer option was not implemented in your router runtime.')}function ae(a,b,c,e,f,g,h){var i,j=new Map;this._bundlerConfig=a,this._serverReferenceConfig=b,this._moduleLoading=c,this._callServer=void 0!==e?e:ad,this._encodeFormAction=f,this._nonce=g,this._chunks=j,this._stringDecoder=new d.TextDecoder,this._fromJSON=null,this._closed=!1,this._closedReason=null,this._tempRefs=h,this._fromJSON=(i=this,function(a,b){if("__proto__"!==a){if("string"==typeof b){var c=i,d=this,e=a,f=b;if("$"===f[0]){if("$"===f)return null!==O&&"0"===e&&(O={parent:O,chunk:null,value:null,reason:null,deps:0,errored:!1}),n;switch(f[1]){case"$":return f.slice(1);case"L":return S(c=T(c,d=parseInt(f.slice(2),16)));case"@":return T(c,d=parseInt(f.slice(2),16));case"S":return Symbol.for(f.slice(2));case"h":return Y(c,f=f.slice(2),d,e,X);case"T":if(d="$"+f.slice(2),null==(c=c._tempRefs))throw Error("Missing a temporary reference set but the RSC response returned a temporary reference. Pass a temporaryReference option with the set that was used with the reply.");return c.get(d);case"Q":return Y(c,f=f.slice(2),d,e,Z);case"W":return Y(c,f=f.slice(2),d,e,$);case"B":return Y(c,f=f.slice(2),d,e,_);case"K":return Y(c,f=f.slice(2),d,e,aa);case"Z":return al();case"i":return Y(c,f=f.slice(2),d,e,ab);case"I":return 1/0;case"-":return"$-0"===f?-0:-1/0;case"N":return NaN;case"u":return;case"D":return new Date(Date.parse(f.slice(2)));case"n":return BigInt(f.slice(2));default:return Y(c,f=f.slice(1),d,e,ac)}}return f}if("object"==typeof b&&null!==b){if(b[0]===n){if(a={$$typeof:n,type:b[1],key:b[2],ref:null,props:b[3]},null!==O){if(O=(b=O).parent,b.errored)a=S(a=new D("rejected",null,b.reason));else if(0<b.deps){var g=new D("blocked",null,null);b.value=a,b.chunk=g,a=S(g)}}}else a=b;return a}return b}})}function af(){return{_rowState:0,_rowID:0,_rowTag:0,_rowLength:0,_buffer:[]}}function ag(a,b,c){var d=(a=a._chunks).get(b);d&&"pending"!==d.status?d.reason.enqueueValue(c):a.set(b,new D("fulfilled",c,null))}function ah(a,b,c,d){var e=a._chunks;(a=e.get(b))?"pending"===a.status&&(b=a.value,a.status="fulfilled",a.value=c,a.reason=d,null!==b&&F(b,a.value)):e.set(b,new D("fulfilled",c,d))}function ai(a,b,c){var d=null,e=!1;c=new ReadableStream({type:c,start:function(a){d=a}});var f=null;ah(a,b,c,{enqueueValue:function(a){null===f?d.enqueue(a):f.then(function(){d.enqueue(a)})},enqueueModel:function(b){if(null===f){var c=new D("resolved_model",b,a);P(c),"fulfilled"===c.status?d.enqueue(c.value):(c.then(function(a){return d.enqueue(a)},function(a){return d.error(a)}),f=c)}else{c=f;var e=new D("pending",null,null);e.then(function(a){return d.enqueue(a)},function(a){return d.error(a)}),f=e,c.then(function(){f===e&&(f=null),M(a,e,b)})}},close:function(){if(!e)if(e=!0,null===f)d.close();else{var a=f;f=null,a.then(function(){return d.close()})}},error:function(a){if(!e)if(e=!0,null===f)d.error(a);else{var b=f;f=null,b.then(function(){return d.error(a)})}}})}function aj(){return this}function ak(a,b,c){var d=[],e=!1,f=0,g={};g[q]=function(){var a,b=0;return(a={next:a=function(a){if(void 0!==a)throw Error("Values cannot be passed to next() of AsyncIterables passed to Client Components.");if(b===d.length){if(e)return new D("fulfilled",{done:!0,value:void 0},null);d[b]=new D("pending",null,null)}return d[b++]}})[q]=aj,a},ah(a,b,c?g[q]():g,{enqueueValue:function(a){if(f===d.length)d[f]=new D("fulfilled",{done:!1,value:a},null);else{var b=d[f],c=b.value,e=b.reason;b.status="fulfilled",b.value={done:!1,value:a},b.reason=null,null!==c&&I(b,c,e)}f++},enqueueModel:function(b){f===d.length?d[f]=K(a,b,!1):L(a,d[f],b,!1),f++},close:function(b){if(!e)for(e=!0,f===d.length?d[f]=K(a,b,!0):L(a,d[f],b,!0),f++;f<d.length;)L(a,d[f++],'"$undefined"',!0)},error:function(b){if(!e)for(e=!0,f===d.length&&(d[f]=new D("pending",null,null));f<d.length;)J(a,d[f++],b)}})}function al(){var a=Error("An error occurred in the Server Components render. The specific message is omitted in production builds to avoid leaking sensitive details. A digest property is included on this error instance which may provide additional details about the nature of the error.");return a.stack="Error: "+a.message,a}function am(a,b){for(var c=a.length,d=b.length,e=0;e<c;e++)d+=a[e].byteLength;d=new Uint8Array(d);for(var f=e=0;f<c;f++){var g=a[f];d.set(g,e),e+=g.byteLength}return d.set(b,e),d}function an(a,b,c,d,e,f){ag(a,b,e=new e((c=0===c.length&&0==d.byteOffset%f?d:am(c,d)).buffer,c.byteOffset,c.byteLength/f))}function ao(a,b,c,d){switch(c){case 73:var e=a,f=b,g=d,h=e._chunks,i=h.get(f);g=JSON.parse(g,e._fromJSON);var j=function(a,b){if(a){var c=a[b[0]];if(a=c&&c[b[2]])c=a.name;else{if(!(a=c&&c["*"]))throw Error('Could not find the module "'+b[0]+'" in the React Server Consumer Manifest. This is probably a bug in the React Server Components bundler.');c=b[2]}return 4===b.length?[a.id,a.chunks,c,1]:[a.id,a.chunks,c]}return b}(e._bundlerConfig,g);if(!function(a,b,c){if(null!==a)for(var d=1;d<b.length;d+=2){var e=m.d,f=e.X,g=a.prefix+b[d],h=a.crossOrigin;h="string"==typeof h?"use-credentials"===h?h:"":void 0,f.call(e,g,{crossOrigin:h,nonce:c})}}(e._moduleLoading,g[1],e._nonce),g=k(j)){if(i){var l=i;l.status="blocked"}else l=new D("blocked",null,null),h.set(f,l);g.then(function(){return N(e,l,j)},function(a){return J(e,l,a)})}else i?N(e,i,j):h.set(f,new D("resolved_module",j,null));break;case 72:switch(b=d[0],a=JSON.parse(d=d.slice(1),a._fromJSON),d=m.d,b){case"D":d.D(a);break;case"C":"string"==typeof a?d.C(a):d.C(a[0],a[1]);break;case"L":b=a[0],c=a[1],3===a.length?d.L(b,c,a[2]):d.L(b,c);break;case"m":"string"==typeof a?d.m(a):d.m(a[0],a[1]);break;case"X":"string"==typeof a?d.X(a):d.X(a[0],a[1]);break;case"S":"string"==typeof a?d.S(a):d.S(a[0],0===a[1]?void 0:a[1],3===a.length?a[2]:void 0);break;case"M":"string"==typeof a?d.M(a):d.M(a[0],a[1])}break;case 69:var n=(c=a._chunks).get(b);d=JSON.parse(d);var o=al();o.digest=d.digest,n?J(a,n,o):c.set(b,new D("rejected",null,o));break;case 84:(c=(a=a._chunks).get(b))&&"pending"!==c.status?c.reason.enqueueValue(d):a.set(b,new D("fulfilled",d,null));break;case 78:case 68:case 74:case 87:throw Error("Failed to read a RSC payload created by a development version of React on the server while using a production version on the client. Always use matching versions on the server and the client.");case 82:ai(a,b,void 0);break;case 114:ai(a,b,"bytes");break;case 88:ak(a,b,!1);break;case 120:ak(a,b,!0);break;case 67:(a=a._chunks.get(b))&&"fulfilled"===a.status&&a.reason.close(""===d?'"$undefined"':d);break;default:(n=(c=a._chunks).get(b))?M(a,n,d):c.set(b,new D("resolved_model",d,a))}}function ap(a,b,c){for(var d=0,e=b._rowState,g=b._rowID,h=b._rowTag,i=b._rowLength,j=b._buffer,k=c.length;d<k;){var l=-1;switch(e){case 0:58===(l=c[d++])?e=1:g=g<<4|(96<l?l-87:l-48);continue;case 1:84===(e=c[d])||65===e||79===e||111===e||85===e||83===e||115===e||76===e||108===e||71===e||103===e||77===e||109===e||86===e?(h=e,e=2,d++):64<e&&91>e||35===e||114===e||120===e?(h=e,e=3,d++):(h=0,e=3);continue;case 2:44===(l=c[d++])?e=4:i=i<<4|(96<l?l-87:l-48);continue;case 3:l=c.indexOf(10,d);break;case 4:(l=d+i)>c.length&&(l=-1)}var m=c.byteOffset+d;if(-1<l)(function(a,b,c,d,e){switch(c){case 65:ag(a,b,am(d,e).buffer);return;case 79:an(a,b,d,e,Int8Array,1);return;case 111:ag(a,b,0===d.length?e:am(d,e));return;case 85:an(a,b,d,e,Uint8ClampedArray,1);return;case 83:an(a,b,d,e,Int16Array,2);return;case 115:an(a,b,d,e,Uint16Array,2);return;case 76:an(a,b,d,e,Int32Array,4);return;case 108:an(a,b,d,e,Uint32Array,4);return;case 71:an(a,b,d,e,Float32Array,4);return;case 103:an(a,b,d,e,Float64Array,8);return;case 77:an(a,b,d,e,BigInt64Array,8);return;case 109:an(a,b,d,e,BigUint64Array,8);return;case 86:an(a,b,d,e,DataView,1);return}for(var g=a._stringDecoder,h="",i=0;i<d.length;i++)h+=g.decode(d[i],f);ao(a,b,c,h+=g.decode(e))})(a,g,h,j,i=new Uint8Array(c.buffer,m,l-d)),d=l,3===e&&d++,i=g=h=e=0,j.length=0;else{a=new Uint8Array(c.buffer,m,c.byteLength-d),j.push(a),i-=a.byteLength;break}}b._rowState=e,b._rowID=g,b._rowTag=h,b._rowLength=i}function aq(a){R(a,Error("Connection closed."))}function ar(){throw Error("Server Functions cannot be called during initial render. This would create a fetch waterfall. Try to use a Server Component to pass data to Client Components instead.")}function as(a){return new ae(a.serverConsumerManifest.moduleMap,a.serverConsumerManifest.serverModuleMap,a.serverConsumerManifest.moduleLoading,ar,a.encodeFormAction,"string"==typeof a.nonce?a.nonce:void 0,a&&a.temporaryReferences?a.temporaryReferences:void 0)}function at(a,b){function c(b){R(a,b)}var d=af(),e=b.getReader();e.read().then(function b(f){var g=f.value;if(!f.done)return ap(a,d,g),e.read().then(b).catch(c);aq(a)}).catch(c)}function au(){throw Error("Server Functions cannot be called during initial render. This would create a fetch waterfall. Try to use a Server Component to pass data to Client Components instead.")}b.createFromFetch=function(a,b){var c=as(b);return a.then(function(a){at(c,a.body)},function(a){R(c,a)}),T(c,0)},b.createFromNodeStream=function(a,b,c){var d=new ae(b.moduleMap,b.serverModuleMap,b.moduleLoading,au,c?c.encodeFormAction:void 0,c&&"string"==typeof c.nonce?c.nonce:void 0,void 0),e=af();return a.on("data",function(a){if("string"==typeof a){for(var b=0,c=e._rowState,f=e._rowID,g=e._rowTag,h=e._rowLength,i=e._buffer,j=a.length;b<j;){var k=-1;switch(c){case 0:58===(k=a.charCodeAt(b++))?c=1:f=f<<4|(96<k?k-87:k-48);continue;case 1:84===(c=a.charCodeAt(b))||65===c||79===c||111===c||85===c||83===c||115===c||76===c||108===c||71===c||103===c||77===c||109===c||86===c?(g=c,c=2,b++):64<c&&91>c||114===c||120===c?(g=c,c=3,b++):(g=0,c=3);continue;case 2:44===(k=a.charCodeAt(b++))?c=4:h=h<<4|(96<k?k-87:k-48);continue;case 3:k=a.indexOf("\n",b);break;case 4:if(84!==g)throw Error("Binary RSC chunks cannot be encoded as strings. This is a bug in the wiring of the React streams.");if(h<a.length||a.length>3*h)throw Error("String chunks need to be passed in their original shape. Not split into smaller string chunks. This is a bug in the wiring of the React streams.");k=a.length}if(-1<k){if(0<i.length)throw Error("String chunks need to be passed in their original shape. Not split into smaller string chunks. This is a bug in the wiring of the React streams.");ao(d,f,g,b=a.slice(b,k)),b=k,3===c&&b++,h=f=g=c=0,i.length=0}else if(a.length!==b)throw Error("String chunks need to be passed in their original shape. Not split into smaller string chunks. This is a bug in the wiring of the React streams.")}e._rowState=c,e._rowID=f,e._rowTag=g,e._rowLength=h}else ap(d,e,a)}),a.on("error",function(a){R(d,a)}),a.on("end",function(){return aq(d)}),T(d,0)},b.createFromReadableStream=function(a,b){return at(b=as(b),a),T(b,0)},b.createServerReference=function(a){function b(){var b=Array.prototype.slice.call(arguments);return ar(a,b)}return z(b,a,null,void 0),b},b.createTemporaryReferenceSet=function(){return new Map},b.encodeReply=function(a,b){return new Promise(function(c,d){var e=v(a,"",b&&b.temporaryReferences?b.temporaryReferences:void 0,c,d);if(b&&b.signal){var f=b.signal;if(f.aborted)e(f.reason);else{var g=function(){e(f.reason),f.removeEventListener("abort",g)};f.addEventListener("abort",g)}}})},b.registerServerReference=function(a,b,c){return z(a,b,null,c),a}},48723:(a,b,c)=>{"use strict";Object.defineProperty(b,"__esModule",{value:!0}),!function(a,b){for(var c in b)Object.defineProperty(a,c,{enumerable:!0,get:b[c]})}(b,{normalizeAppPath:function(){return f},normalizeRscURL:function(){return g}});let d=c(51506),e=c(96896);function f(a){return(0,d.ensureLeadingSlash)(a.split("/").reduce((a,b,c,d)=>!b||(0,e.isGroupSegment)(b)||"@"===b[0]||("page"===b||"route"===b)&&c===d.length-1?a:a+"/"+b,""))}function g(a){return a.replace(/\.rsc($|\?)/,"$1")}},51506:(a,b)=>{"use strict";function c(a){return a.startsWith("/")?a:"/"+a}Object.defineProperty(b,"__esModule",{value:!0}),Object.defineProperty(b,"ensureLeadingSlash",{enumerable:!0,get:function(){return c}})},77533:(a,b,c)=>{"use strict";let d;Object.defineProperty(b,"__esModule",{value:!0}),!function(a,b){for(var c in b)Object.defineProperty(a,c,{enumerable:!0,get:b[c]})}(b,{arrayBufferToString:function(){return h},decrypt:function(){return k},encrypt:function(){return j},getActionEncryptionKey:function(){return p},getClientReferenceManifestForRsc:function(){return o},getServerModuleMap:function(){return n},setReferenceManifestsSingleton:function(){return m},stringToUint8Array:function(){return i}});let e=c(49290),f=c(48723),g=c(29294);function h(a){let b=new Uint8Array(a),c=b.byteLength;if(c<65535)return String.fromCharCode.apply(null,b);let d="";for(let a=0;a<c;a++)d+=String.fromCharCode(b[a]);return d}function i(a){let b=a.length,c=new Uint8Array(b);for(let d=0;d<b;d++)c[d]=a.charCodeAt(d);return c}function j(a,b,c){return crypto.subtle.encrypt({name:"AES-GCM",iv:b},a,c)}function k(a,b,c){return crypto.subtle.decrypt({name:"AES-GCM",iv:b},a,c)}let l=Symbol.for("next.server.action-manifests");function m({page:a,clientReferenceManifest:b,serverActionsManifest:c,serverModuleMap:d}){var e;let g=null==(e=globalThis[l])?void 0:e.clientReferenceManifestsPerPage;globalThis[l]={clientReferenceManifestsPerPage:{...g,[(0,f.normalizeAppPath)(a)]:b},serverActionsManifest:c,serverModuleMap:d}}function n(){let a=globalThis[l];if(!a)throw Object.defineProperty(new e.InvariantError("Missing manifest for Server Actions."),"__NEXT_ERROR_CODE",{value:"E606",enumerable:!1,configurable:!0});return a.serverModuleMap}function o(){let a=globalThis[l];if(!a)throw Object.defineProperty(new e.InvariantError("Missing manifest for Server Actions."),"__NEXT_ERROR_CODE",{value:"E606",enumerable:!1,configurable:!0});let{clientReferenceManifestsPerPage:b}=a,c=g.workAsyncStorage.getStore();if(!c){var d=b;let a=Object.values(d),c={clientModules:{},edgeRscModuleMapping:{},rscModuleMapping:{}};for(let b of a)c.clientModules={...c.clientModules,...b.clientModules},c.edgeRscModuleMapping={...c.edgeRscModuleMapping,...b.edgeRscModuleMapping},c.rscModuleMapping={...c.rscModuleMapping,...b.rscModuleMapping};return c}let f=b[c.route];if(!f)throw Object.defineProperty(new e.InvariantError(`Missing Client Reference Manifest for ${c.route}.`),"__NEXT_ERROR_CODE",{value:"E570",enumerable:!1,configurable:!0});return f}async function p(){if(d)return d;let a=globalThis[l];if(!a)throw Object.defineProperty(new e.InvariantError("Missing manifest for Server Actions."),"__NEXT_ERROR_CODE",{value:"E606",enumerable:!1,configurable:!0});let b=process.env.NEXT_SERVER_ACTIONS_ENCRYPTION_KEY||a.serverActionsManifest.encryptionKey;if(void 0===b)throw Object.defineProperty(new e.InvariantError("Missing encryption key for Server Actions"),"__NEXT_ERROR_CODE",{value:"E571",enumerable:!1,configurable:!0});return d=await crypto.subtle.importKey("raw",i(atob(b)),"AES-GCM",!0,["encrypt","decrypt"])}},77925:()=>{},96896:(a,b)=>{"use strict";function c(a){return"("===a[0]&&a.endsWith(")")}function d(a){return a.startsWith("@")&&"@children"!==a}function e(a,b){if(a.includes(f)){let a=JSON.stringify(b);return"{}"!==a?f+"?"+a:f}return a}Object.defineProperty(b,"__esModule",{value:!0}),!function(a,b){for(var c in b)Object.defineProperty(a,c,{enumerable:!0,get:b[c]})}(b,{DEFAULT_SEGMENT_KEY:function(){return g},PAGE_SEGMENT_KEY:function(){return f},addSearchParamsIfPageSegment:function(){return e},isGroupSegment:function(){return c},isParallelRouteSegment:function(){return d}});let f="__PAGE__",g="__DEFAULT__"},97954:(a,b,c)=>{"use strict";a.exports=c(49754).vendored["react-rsc"].ReactServerDOMWebpackServer}};