flujo-ai 3.18.0 → 3.20.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 (487) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-build-manifest.json +252 -231
  3. package/.next/app-path-routes-manifest.json +13 -11
  4. package/.next/build-manifest.json +5 -5
  5. package/.next/prerender-manifest.json +21 -21
  6. package/.next/react-loadable-manifest.json +11 -11
  7. package/.next/routes-manifest.json +8 -0
  8. package/.next/server/app/_not-found/page.js +2 -2
  9. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  10. package/.next/server/app/_not-found.html +1 -1
  11. package/.next/server/app/_not-found.rsc +2 -2
  12. package/.next/server/app/api/backup/route.js +1 -1
  13. package/.next/server/app/api/backup/route.js.nft.json +1 -1
  14. package/.next/server/app/api/backup/route_client-reference-manifest.js +1 -1
  15. package/.next/server/app/api/browse/route_client-reference-manifest.js +1 -1
  16. package/.next/server/app/api/cwd/route_client-reference-manifest.js +1 -1
  17. package/.next/server/app/api/encryption/secure/route.js +1 -1
  18. package/.next/server/app/api/encryption/secure/route.js.nft.json +1 -1
  19. package/.next/server/app/api/encryption/secure/route_client-reference-manifest.js +1 -1
  20. package/.next/server/app/api/env/route.js +2 -2
  21. package/.next/server/app/api/env/route_client-reference-manifest.js +1 -1
  22. package/.next/server/app/api/flow/[id]/route.js +1 -1
  23. package/.next/server/app/api/flow/[id]/route.js.nft.json +1 -1
  24. package/.next/server/app/api/flow/[id]/route_client-reference-manifest.js +1 -1
  25. package/.next/server/app/api/flow/compile/route.js +1 -1
  26. package/.next/server/app/api/flow/compile/route.js.nft.json +1 -1
  27. package/.next/server/app/api/flow/compile/route_client-reference-manifest.js +1 -1
  28. package/.next/server/app/api/flow/generate/route.js +1 -1
  29. package/.next/server/app/api/flow/generate/route.js.nft.json +1 -1
  30. package/.next/server/app/api/flow/generate/route_client-reference-manifest.js +1 -1
  31. package/.next/server/app/api/flow/improve/route.js +1 -1
  32. package/.next/server/app/api/flow/improve/route.js.nft.json +1 -1
  33. package/.next/server/app/api/flow/improve/route_client-reference-manifest.js +1 -1
  34. package/.next/server/app/api/flow/prompt-renderer/route.js +2 -2
  35. package/.next/server/app/api/flow/prompt-renderer/route.js.nft.json +1 -1
  36. package/.next/server/app/api/flow/prompt-renderer/route_client-reference-manifest.js +1 -1
  37. package/.next/server/app/api/flow/quick-chat/route.js +1 -1
  38. package/.next/server/app/api/flow/quick-chat/route.js.nft.json +1 -1
  39. package/.next/server/app/api/flow/quick-chat/route_client-reference-manifest.js +1 -1
  40. package/.next/server/app/api/flow/repair/route.js +1 -0
  41. package/.next/server/app/api/flow/repair/route.js.nft.json +1 -0
  42. package/.next/server/app/api/flow/repair/route_client-reference-manifest.js +1 -0
  43. package/.next/server/app/api/flow/route.js +1 -1
  44. package/.next/server/app/api/flow/route.js.nft.json +1 -1
  45. package/.next/server/app/api/flow/route_client-reference-manifest.js +1 -1
  46. package/.next/server/app/api/git/route.js +4 -4
  47. package/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
  48. package/.next/server/app/api/init/route.js +1 -1
  49. package/.next/server/app/api/init/route.js.nft.json +1 -1
  50. package/.next/server/app/api/init/route_client-reference-manifest.js +1 -1
  51. package/.next/server/app/api/local-models/capability/route_client-reference-manifest.js +1 -1
  52. package/.next/server/app/api/local-models/pull/route_client-reference-manifest.js +1 -1
  53. package/.next/server/app/api/local-models/suggest/route_client-reference-manifest.js +1 -1
  54. package/.next/server/app/api/mcp/cancel/route.js +2 -2
  55. package/.next/server/app/api/mcp/cancel/route.js.nft.json +1 -1
  56. package/.next/server/app/api/mcp/cancel/route_client-reference-manifest.js +1 -1
  57. package/.next/server/app/api/mcp/servers/[name]/prompts/get/route.js +1 -1
  58. package/.next/server/app/api/mcp/servers/[name]/prompts/get/route.js.nft.json +1 -1
  59. package/.next/server/app/api/mcp/servers/[name]/prompts/get/route_client-reference-manifest.js +1 -1
  60. package/.next/server/app/api/mcp/servers/[name]/prompts/route.js +1 -1
  61. package/.next/server/app/api/mcp/servers/[name]/prompts/route.js.nft.json +1 -1
  62. package/.next/server/app/api/mcp/servers/[name]/prompts/route_client-reference-manifest.js +1 -1
  63. package/.next/server/app/api/mcp/servers/[name]/resources/read/route.js +1 -1
  64. package/.next/server/app/api/mcp/servers/[name]/resources/read/route.js.nft.json +1 -1
  65. package/.next/server/app/api/mcp/servers/[name]/resources/read/route_client-reference-manifest.js +1 -1
  66. package/.next/server/app/api/mcp/servers/[name]/resources/route.js +1 -1
  67. package/.next/server/app/api/mcp/servers/[name]/resources/route.js.nft.json +1 -1
  68. package/.next/server/app/api/mcp/servers/[name]/resources/route_client-reference-manifest.js +1 -1
  69. package/.next/server/app/api/mcp/servers/[name]/route.js +1 -1
  70. package/.next/server/app/api/mcp/servers/[name]/route.js.nft.json +1 -1
  71. package/.next/server/app/api/mcp/servers/[name]/route_client-reference-manifest.js +1 -1
  72. package/.next/server/app/api/mcp/servers/[name]/status/route.js +1 -1
  73. package/.next/server/app/api/mcp/servers/[name]/status/route.js.nft.json +1 -1
  74. package/.next/server/app/api/mcp/servers/[name]/status/route_client-reference-manifest.js +1 -1
  75. package/.next/server/app/api/mcp/servers/[name]/tools/[toolName]/route.js +1 -1
  76. package/.next/server/app/api/mcp/servers/[name]/tools/[toolName]/route.js.nft.json +1 -1
  77. package/.next/server/app/api/mcp/servers/[name]/tools/[toolName]/route_client-reference-manifest.js +1 -1
  78. package/.next/server/app/api/mcp/servers/[name]/tools/route.js +1 -1
  79. package/.next/server/app/api/mcp/servers/[name]/tools/route.js.nft.json +1 -1
  80. package/.next/server/app/api/mcp/servers/[name]/tools/route_client-reference-manifest.js +1 -1
  81. package/.next/server/app/api/mcp/servers/route.js +1 -1
  82. package/.next/server/app/api/mcp/servers/route.js.nft.json +1 -1
  83. package/.next/server/app/api/mcp/servers/route_client-reference-manifest.js +1 -1
  84. package/.next/server/app/api/mcp/test-connection/route.js +1 -1
  85. package/.next/server/app/api/mcp/test-connection/route.js.nft.json +1 -1
  86. package/.next/server/app/api/mcp/test-connection/route_client-reference-manifest.js +1 -1
  87. package/.next/server/app/api/mcp/test-connection/stream/route.js +1 -1
  88. package/.next/server/app/api/mcp/test-connection/stream/route.js.nft.json +1 -1
  89. package/.next/server/app/api/mcp/test-connection/stream/route_client-reference-manifest.js +1 -1
  90. package/.next/server/app/api/mcp-registry/route.js +2 -1
  91. package/.next/server/app/api/mcp-registry/route.js.nft.json +1 -1
  92. package/.next/server/app/api/mcp-registry/route_client-reference-manifest.js +1 -1
  93. package/.next/server/app/api/mcp-registry/spotlight/route_client-reference-manifest.js +1 -1
  94. package/.next/server/app/api/model/[id]/route.js +1 -1
  95. package/.next/server/app/api/model/[id]/route.js.nft.json +1 -1
  96. package/.next/server/app/api/model/[id]/route_client-reference-manifest.js +1 -1
  97. package/.next/server/app/api/model/provider/route.js +2 -2
  98. package/.next/server/app/api/model/provider/route.js.nft.json +1 -1
  99. package/.next/server/app/api/model/provider/route_client-reference-manifest.js +1 -1
  100. package/.next/server/app/api/model/route.js +1 -1
  101. package/.next/server/app/api/model/route.js.nft.json +1 -1
  102. package/.next/server/app/api/model/route_client-reference-manifest.js +1 -1
  103. package/.next/server/app/api/model/test/route.js +2 -2
  104. package/.next/server/app/api/model/test/route.js.nft.json +1 -1
  105. package/.next/server/app/api/model/test/route_client-reference-manifest.js +1 -1
  106. package/.next/server/app/api/oauth/callback/route.js +2 -2
  107. package/.next/server/app/api/oauth/callback/route_client-reference-manifest.js +1 -1
  108. package/.next/server/app/api/oauth/initiate/route.js +2 -2
  109. package/.next/server/app/api/oauth/initiate/route_client-reference-manifest.js +1 -1
  110. package/.next/server/app/api/oauth/reset/route.js +2 -2
  111. package/.next/server/app/api/oauth/reset/route.js.nft.json +1 -1
  112. package/.next/server/app/api/oauth/reset/route_client-reference-manifest.js +1 -1
  113. package/.next/server/app/api/planned-executions/[id]/route.js +2 -2
  114. package/.next/server/app/api/planned-executions/[id]/route.js.nft.json +1 -1
  115. package/.next/server/app/api/planned-executions/[id]/route_client-reference-manifest.js +1 -1
  116. package/.next/server/app/api/planned-executions/[id]/run/route.js +2 -2
  117. package/.next/server/app/api/planned-executions/[id]/run/route.js.nft.json +1 -1
  118. package/.next/server/app/api/planned-executions/[id]/run/route_client-reference-manifest.js +1 -1
  119. package/.next/server/app/api/planned-executions/[id]/runs/route.js +2 -2
  120. package/.next/server/app/api/planned-executions/[id]/runs/route.js.nft.json +1 -1
  121. package/.next/server/app/api/planned-executions/[id]/runs/route_client-reference-manifest.js +1 -1
  122. package/.next/server/app/api/planned-executions/preview-schedule/route_client-reference-manifest.js +1 -1
  123. package/.next/server/app/api/planned-executions/route.js +1 -1
  124. package/.next/server/app/api/planned-executions/route.js.nft.json +1 -1
  125. package/.next/server/app/api/planned-executions/route_client-reference-manifest.js +1 -1
  126. package/.next/server/app/api/restore/route.js +1 -1
  127. package/.next/server/app/api/restore/route.js.nft.json +1 -1
  128. package/.next/server/app/api/restore/route_client-reference-manifest.js +1 -1
  129. package/.next/server/app/api/storage/route_client-reference-manifest.js +1 -1
  130. package/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
  131. package/.next/server/app/api/webhooks/[id]/route.js +1 -1
  132. package/.next/server/app/api/webhooks/[id]/route.js.nft.json +1 -1
  133. package/.next/server/app/api/webhooks/[id]/route_client-reference-manifest.js +1 -1
  134. package/.next/server/app/chat/page.js +8 -7
  135. package/.next/server/app/chat/page.js.nft.json +1 -1
  136. package/.next/server/app/chat/page_client-reference-manifest.js +1 -1
  137. package/.next/server/app/chat.html +1 -1
  138. package/.next/server/app/chat.rsc +3 -3
  139. package/.next/server/app/docs/page.js +37 -6
  140. package/.next/server/app/docs/page.js.nft.json +1 -1
  141. package/.next/server/app/docs/page_client-reference-manifest.js +1 -1
  142. package/.next/server/app/docs.html +1 -1
  143. package/.next/server/app/docs.rsc +3 -3
  144. package/.next/server/app/executions/page.js +3 -5
  145. package/.next/server/app/executions/page.js.nft.json +1 -1
  146. package/.next/server/app/executions/page_client-reference-manifest.js +1 -1
  147. package/.next/server/app/executions.html +1 -1
  148. package/.next/server/app/executions.rsc +3 -3
  149. package/.next/server/app/flows/page.js +3 -3
  150. package/.next/server/app/flows/page.js.nft.json +1 -1
  151. package/.next/server/app/flows/page_client-reference-manifest.js +1 -1
  152. package/.next/server/app/flows.html +1 -1
  153. package/.next/server/app/flows.rsc +3 -3
  154. package/.next/server/app/index.html +1 -1
  155. package/.next/server/app/index.rsc +3 -3
  156. package/.next/server/app/mcp/page.js +6 -6
  157. package/.next/server/app/mcp/page.js.nft.json +1 -1
  158. package/.next/server/app/mcp/page_client-reference-manifest.js +1 -1
  159. package/.next/server/app/mcp-flows/route.js +1 -5
  160. package/.next/server/app/mcp-flows/route.js.nft.json +1 -1
  161. package/.next/server/app/mcp-flows/route_client-reference-manifest.js +1 -1
  162. package/.next/server/app/mcp-proxy/[server]/route.js +1 -1
  163. package/.next/server/app/mcp-proxy/[server]/route.js.nft.json +1 -1
  164. package/.next/server/app/mcp-proxy/[server]/route_client-reference-manifest.js +1 -1
  165. package/.next/server/app/mcp.html +1 -1
  166. package/.next/server/app/mcp.rsc +3 -3
  167. package/.next/server/app/models/page.js +2 -3
  168. package/.next/server/app/models/page.js.nft.json +1 -1
  169. package/.next/server/app/models/page_client-reference-manifest.js +1 -1
  170. package/.next/server/app/page.js +3 -2
  171. package/.next/server/app/page.js.nft.json +1 -1
  172. package/.next/server/app/page_client-reference-manifest.js +1 -1
  173. package/.next/server/app/settings/page.js +4 -3
  174. package/.next/server/app/settings/page.js.nft.json +1 -1
  175. package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  176. package/.next/server/app/settings.html +1 -1
  177. package/.next/server/app/settings.rsc +3 -3
  178. package/.next/server/app/v1/chat/completions/route.js +1 -1
  179. package/.next/server/app/v1/chat/completions/route.js.nft.json +1 -1
  180. package/.next/server/app/v1/chat/completions/route_client-reference-manifest.js +1 -1
  181. package/.next/server/app/v1/chat/conversations/[conversationId]/breakpoints/route.js +2 -2
  182. package/.next/server/app/v1/chat/conversations/[conversationId]/breakpoints/route.js.nft.json +1 -1
  183. package/.next/server/app/v1/chat/conversations/[conversationId]/breakpoints/route_client-reference-manifest.js +1 -1
  184. package/.next/server/app/v1/chat/conversations/[conversationId]/cancel/route.js +2 -2
  185. package/.next/server/app/v1/chat/conversations/[conversationId]/cancel/route.js.nft.json +1 -1
  186. package/.next/server/app/v1/chat/conversations/[conversationId]/cancel/route_client-reference-manifest.js +1 -1
  187. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/continue/route.js +1 -1
  188. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/continue/route.js.nft.json +1 -1
  189. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/continue/route_client-reference-manifest.js +1 -1
  190. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/step/route.js +1 -1
  191. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/step/route.js.nft.json +1 -1
  192. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/step/route_client-reference-manifest.js +1 -1
  193. package/.next/server/app/v1/chat/conversations/[conversationId]/edit-state/route.js +2 -2
  194. package/.next/server/app/v1/chat/conversations/[conversationId]/edit-state/route.js.nft.json +1 -1
  195. package/.next/server/app/v1/chat/conversations/[conversationId]/edit-state/route_client-reference-manifest.js +1 -1
  196. package/.next/server/app/v1/chat/conversations/[conversationId]/events/route.js +3 -3
  197. package/.next/server/app/v1/chat/conversations/[conversationId]/events/route.js.nft.json +1 -1
  198. package/.next/server/app/v1/chat/conversations/[conversationId]/events/route_client-reference-manifest.js +1 -1
  199. package/.next/server/app/v1/chat/conversations/[conversationId]/resources/route.js +1 -0
  200. package/.next/server/app/v1/chat/conversations/[conversationId]/resources/route.js.nft.json +1 -0
  201. package/.next/server/app/v1/chat/conversations/[conversationId]/resources/route_client-reference-manifest.js +1 -0
  202. package/.next/server/app/v1/chat/conversations/[conversationId]/respond/route.js +1 -1
  203. package/.next/server/app/v1/chat/conversations/[conversationId]/respond/route.js.nft.json +1 -1
  204. package/.next/server/app/v1/chat/conversations/[conversationId]/respond/route_client-reference-manifest.js +1 -1
  205. package/.next/server/app/v1/chat/conversations/[conversationId]/route.js +2 -2
  206. package/.next/server/app/v1/chat/conversations/[conversationId]/route.js.nft.json +1 -1
  207. package/.next/server/app/v1/chat/conversations/[conversationId]/route_client-reference-manifest.js +1 -1
  208. package/.next/server/app/v1/chat/conversations/route.js +2 -2
  209. package/.next/server/app/v1/chat/conversations/route.js.nft.json +1 -1
  210. package/.next/server/app/v1/chat/conversations/route_client-reference-manifest.js +1 -1
  211. package/.next/server/app/v1/models/route.js +2 -2
  212. package/.next/server/app/v1/models/route.js.nft.json +1 -1
  213. package/.next/server/app/v1/models/route_client-reference-manifest.js +1 -1
  214. package/.next/server/app-paths-manifest.json +13 -11
  215. package/.next/server/chunks/{2776.js → 1083.js} +2 -3
  216. package/.next/server/chunks/1119.js +1 -0
  217. package/.next/server/chunks/{7731.js → 1152.js} +2 -2
  218. package/.next/server/chunks/1197.js +2 -0
  219. package/.next/server/chunks/1373.js +1 -1
  220. package/.next/server/chunks/1491.js +1 -0
  221. package/.next/server/chunks/{8460.js → 1991.js} +1 -1
  222. package/.next/server/chunks/2246.js +1 -0
  223. package/.next/server/chunks/2261.js +1 -0
  224. package/.next/server/chunks/227.js +5 -0
  225. package/.next/server/chunks/2350.js +1 -1
  226. package/.next/server/chunks/2430.js +1 -0
  227. package/.next/server/chunks/264.js +1 -1
  228. package/.next/server/chunks/2859.js +3 -7
  229. package/.next/server/chunks/289.js +1 -0
  230. package/.next/server/chunks/3511.js +1 -0
  231. package/.next/server/chunks/{6069.js → 3574.js} +2 -2
  232. package/.next/server/chunks/3778.js +42 -0
  233. package/.next/server/chunks/{8367.js → 38.js} +2 -2
  234. package/.next/server/chunks/3953.js +1 -0
  235. package/.next/server/chunks/3984.js +4 -4
  236. package/.next/server/chunks/4028.js +1 -0
  237. package/.next/server/chunks/4045.js +1 -0
  238. package/.next/server/chunks/4265.js +1 -0
  239. package/.next/server/chunks/4436.js +1 -0
  240. package/.next/server/chunks/{8227.js → 4456.js} +2 -2
  241. package/.next/server/chunks/4498.js +40 -0
  242. package/.next/server/chunks/4637.js +70 -0
  243. package/.next/server/chunks/4671.js +1 -0
  244. package/.next/server/chunks/{1912.js → 4690.js} +2 -2
  245. package/.next/server/chunks/4949.js +1 -0
  246. package/.next/server/chunks/5625.js +28 -0
  247. package/.next/server/chunks/{805.js → 5662.js} +2 -2
  248. package/.next/server/chunks/5708.js +64 -0
  249. package/.next/server/chunks/5734.js +4 -4
  250. package/.next/server/chunks/62.js +1 -0
  251. package/.next/server/chunks/6532.js +52 -0
  252. package/.next/server/chunks/{6760.js → 6772.js} +1 -1
  253. package/.next/server/chunks/{6201.js → 6901.js} +3 -2
  254. package/.next/server/chunks/{9314.js → 6908.js} +3 -3
  255. package/.next/server/chunks/6981.js +1 -0
  256. package/.next/server/chunks/6996.js +3 -3
  257. package/.next/server/chunks/701.js +1 -1
  258. package/.next/server/chunks/7101.js +64 -0
  259. package/.next/server/chunks/7214.js +3 -3
  260. package/.next/server/chunks/724.js +3 -3
  261. package/.next/server/chunks/7362.js +4 -4
  262. package/.next/server/chunks/7463.js +6 -0
  263. package/.next/server/chunks/7506.js +1 -1
  264. package/.next/server/chunks/7635.js +1 -1
  265. package/.next/server/chunks/7821.js +1 -1
  266. package/.next/server/chunks/8739.js +2 -2
  267. package/.next/server/chunks/9509.js +2 -2
  268. package/.next/server/chunks/9632.js +1 -0
  269. package/.next/server/chunks/9957.js +1 -1
  270. package/.next/server/functions-config-manifest.json +3 -3
  271. package/.next/server/instrumentation.js.nft.json +1 -1
  272. package/.next/server/middleware-build-manifest.js +1 -1
  273. package/.next/server/middleware-react-loadable-manifest.js +1 -1
  274. package/.next/server/pages/404.html +1 -1
  275. package/.next/server/pages/500.html +1 -1
  276. package/.next/server/server-reference-manifest.js +1 -1
  277. package/.next/server/server-reference-manifest.json +1 -1
  278. package/.next/static/chunks/1161-970b105d0ab11425.js +1 -0
  279. package/.next/static/chunks/1620-0d8ecd877f123f7b.js +1 -0
  280. package/.next/static/chunks/1871-14c3e63ca865d85e.js +1 -0
  281. package/.next/static/chunks/{1892-359187893bbc7f3a.js → 1892-5c1e38d89e0a5a9c.js} +1 -1
  282. package/.next/static/chunks/3217.058098140ec3f563.js +1 -0
  283. package/.next/static/chunks/3381-5fd2417957ca0881.js +1 -0
  284. package/.next/static/chunks/{3545.d3a512315a9fce3e.js → 3545.353a62a68d3b7fd1.js} +1 -1
  285. package/.next/static/chunks/{2084-2463e1d781bad2a6.js → 3648-733cf7ca4a5d1f19.js} +1 -1
  286. package/.next/static/chunks/3736-5e2b3f6cda1bb923.js +1 -0
  287. package/.next/static/chunks/3930-cc8d73c953811b97.js +1 -0
  288. package/.next/static/chunks/422-268783d9ad5897e1.js +1 -0
  289. package/.next/static/chunks/4365-5d0e3d01c1bc0fdc.js +1 -0
  290. package/.next/static/chunks/5134-e21bd33daaf14ecf.js +1 -0
  291. package/.next/static/chunks/5501-c400aaeaf57e6297.js +1 -0
  292. package/.next/static/chunks/5619-82fc5c3133837739.js +1 -0
  293. package/.next/static/chunks/6013-cb423bc438256acb.js +1 -0
  294. package/.next/static/chunks/6920-a83ad5c0d5a54cf3.js +1 -0
  295. package/.next/static/chunks/7258-e27017c1b98f43f9.js +1 -0
  296. package/.next/static/chunks/{7583.b6c2f8874b6b89cd.js → 7583.26a8c1f6e6823daf.js} +1 -1
  297. package/.next/static/chunks/7687-7edf1a6e1f063b08.js +1 -0
  298. package/.next/static/chunks/8066-c202a83aef15143a.js +1 -0
  299. package/.next/static/chunks/{8187.15bf331f5318c00f.js → 8187.fd653767df53db87.js} +1 -1
  300. package/.next/static/chunks/8755-9f375ec8740fecac.js +1 -0
  301. package/.next/static/chunks/{9164-a56181e5e93cc47e.js → 9164-f54d3531ca1df5f7.js} +1 -1
  302. package/.next/static/chunks/{9747-ffb8be5e59700c27.js → 9587-706bfd1a692c4660.js} +3 -3
  303. package/.next/static/chunks/app/api/backup/route-b296683a5faf800a.js +1 -0
  304. package/.next/static/chunks/app/api/browse/route-b296683a5faf800a.js +1 -0
  305. package/.next/static/chunks/app/api/cwd/route-b296683a5faf800a.js +1 -0
  306. package/.next/static/chunks/app/api/encryption/secure/route-b296683a5faf800a.js +1 -0
  307. package/.next/static/chunks/app/api/env/route-b296683a5faf800a.js +1 -0
  308. package/.next/static/chunks/app/api/flow/[id]/route-b296683a5faf800a.js +1 -0
  309. package/.next/static/chunks/app/api/flow/compile/route-b296683a5faf800a.js +1 -0
  310. package/.next/static/chunks/app/api/flow/generate/route-b296683a5faf800a.js +1 -0
  311. package/.next/static/chunks/app/api/flow/improve/route-b296683a5faf800a.js +1 -0
  312. package/.next/static/chunks/app/api/flow/prompt-renderer/route-b296683a5faf800a.js +1 -0
  313. package/.next/static/chunks/app/api/flow/quick-chat/route-b296683a5faf800a.js +1 -0
  314. package/.next/static/chunks/app/api/flow/repair/route-b296683a5faf800a.js +1 -0
  315. package/.next/static/chunks/app/api/flow/route-b296683a5faf800a.js +1 -0
  316. package/.next/static/chunks/app/api/git/route-b296683a5faf800a.js +1 -0
  317. package/.next/static/chunks/app/api/init/route-b296683a5faf800a.js +1 -0
  318. package/.next/static/chunks/app/api/local-models/capability/route-b296683a5faf800a.js +1 -0
  319. package/.next/static/chunks/app/api/local-models/pull/route-b296683a5faf800a.js +1 -0
  320. package/.next/static/chunks/app/api/local-models/suggest/route-b296683a5faf800a.js +1 -0
  321. package/.next/static/chunks/app/api/mcp/cancel/route-b296683a5faf800a.js +1 -0
  322. package/.next/static/chunks/app/api/mcp/servers/[name]/prompts/get/route-b296683a5faf800a.js +1 -0
  323. package/.next/static/chunks/app/api/mcp/servers/[name]/prompts/route-b296683a5faf800a.js +1 -0
  324. package/.next/static/chunks/app/api/mcp/servers/[name]/resources/read/route-b296683a5faf800a.js +1 -0
  325. package/.next/static/chunks/app/api/mcp/servers/[name]/resources/route-b296683a5faf800a.js +1 -0
  326. package/.next/static/chunks/app/api/mcp/servers/[name]/route-b296683a5faf800a.js +1 -0
  327. package/.next/static/chunks/app/api/mcp/servers/[name]/status/route-b296683a5faf800a.js +1 -0
  328. package/.next/static/chunks/app/api/mcp/servers/[name]/tools/[toolName]/route-b296683a5faf800a.js +1 -0
  329. package/.next/static/chunks/app/api/mcp/servers/[name]/tools/route-b296683a5faf800a.js +1 -0
  330. package/.next/static/chunks/app/api/mcp/servers/route-b296683a5faf800a.js +1 -0
  331. package/.next/static/chunks/app/api/mcp/test-connection/route-b296683a5faf800a.js +1 -0
  332. package/.next/static/chunks/app/api/mcp/test-connection/stream/route-b296683a5faf800a.js +1 -0
  333. package/.next/static/chunks/app/api/mcp-registry/route-b296683a5faf800a.js +1 -0
  334. package/.next/static/chunks/app/api/mcp-registry/spotlight/route-b296683a5faf800a.js +1 -0
  335. package/.next/static/chunks/app/api/model/[id]/route-b296683a5faf800a.js +1 -0
  336. package/.next/static/chunks/app/api/model/provider/route-b296683a5faf800a.js +1 -0
  337. package/.next/static/chunks/app/api/model/route-b296683a5faf800a.js +1 -0
  338. package/.next/static/chunks/app/api/model/test/route-b296683a5faf800a.js +1 -0
  339. package/.next/static/chunks/app/api/oauth/callback/route-b296683a5faf800a.js +1 -0
  340. package/.next/static/chunks/app/api/oauth/initiate/route-b296683a5faf800a.js +1 -0
  341. package/.next/static/chunks/app/api/oauth/reset/route-b296683a5faf800a.js +1 -0
  342. package/.next/static/chunks/app/api/planned-executions/[id]/route-b296683a5faf800a.js +1 -0
  343. package/.next/static/chunks/app/api/planned-executions/[id]/run/route-b296683a5faf800a.js +1 -0
  344. package/.next/static/chunks/app/api/planned-executions/[id]/runs/route-b296683a5faf800a.js +1 -0
  345. package/.next/static/chunks/app/api/planned-executions/preview-schedule/route-b296683a5faf800a.js +1 -0
  346. package/.next/static/chunks/app/api/planned-executions/route-b296683a5faf800a.js +1 -0
  347. package/.next/static/chunks/app/api/restore/route-b296683a5faf800a.js +1 -0
  348. package/.next/static/chunks/app/api/storage/route-b296683a5faf800a.js +1 -0
  349. package/.next/static/chunks/app/api/update/route-b296683a5faf800a.js +1 -0
  350. package/.next/static/chunks/app/api/webhooks/[id]/route-b296683a5faf800a.js +1 -0
  351. package/.next/static/chunks/app/chat/page-a67ad3683443e7ad.js +1 -0
  352. package/.next/static/chunks/app/docs/page-097827ec4dae1d30.js +1 -0
  353. package/.next/static/chunks/app/executions/page-cb0dcc66d84c9bf8.js +1 -0
  354. package/.next/static/chunks/app/flows/page-abdd0642e378c5da.js +1 -0
  355. package/.next/static/chunks/app/{layout-2878f13d7e253503.js → layout-64fc0ae7efe81e3c.js} +1 -1
  356. package/.next/static/chunks/app/mcp/page-7d3a269dce68b529.js +1 -0
  357. package/.next/static/chunks/app/mcp-flows/route-b296683a5faf800a.js +1 -0
  358. package/.next/static/chunks/app/mcp-proxy/[server]/route-b296683a5faf800a.js +1 -0
  359. package/.next/static/chunks/app/models/{error-2b00c98abf1e02cf.js → error-5732fbb053e182c5.js} +1 -1
  360. package/.next/static/chunks/app/models/page-616950f93a1e0027.js +1 -0
  361. package/.next/static/chunks/app/{page-6e18a8cd78b2050e.js → page-77e1ba238b0ee1d0.js} +1 -1
  362. package/.next/static/chunks/app/settings/{page-9430dfdaff87d70c.js → page-199d0ffae9ec7263.js} +1 -1
  363. package/.next/static/chunks/app/v1/chat/completions/route-b296683a5faf800a.js +1 -0
  364. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/breakpoints/route-b296683a5faf800a.js +1 -0
  365. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/cancel/route-b296683a5faf800a.js +1 -0
  366. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/debug/continue/route-b296683a5faf800a.js +1 -0
  367. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/debug/step/route-b296683a5faf800a.js +1 -0
  368. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/edit-state/route-b296683a5faf800a.js +1 -0
  369. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/events/route-b296683a5faf800a.js +1 -0
  370. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/resources/route-b296683a5faf800a.js +1 -0
  371. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/respond/route-b296683a5faf800a.js +1 -0
  372. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/route-b296683a5faf800a.js +1 -0
  373. package/.next/static/chunks/app/v1/chat/conversations/route-b296683a5faf800a.js +1 -0
  374. package/.next/static/chunks/app/v1/models/route-b296683a5faf800a.js +1 -0
  375. package/.next/static/chunks/webpack-ef5b2cef70829f42.js +1 -0
  376. package/.next/static/dvSaKx6-EfRNi7Xj-cSv_/_buildManifest.js +1 -0
  377. package/.next/trace +9 -7
  378. package/.next/types/app/api/flow/repair/route.ts +347 -0
  379. package/.next/types/app/v1/chat/conversations/[conversationId]/resources/route.ts +347 -0
  380. package/.next/types/routes.d.ts +3 -1
  381. package/.next/types/validator.ts +18 -0
  382. package/README.md +1 -1
  383. package/package.json +1 -1
  384. package/.next/server/chunks/1050.js +0 -1
  385. package/.next/server/chunks/1403.js +0 -8
  386. package/.next/server/chunks/2439.js +0 -52
  387. package/.next/server/chunks/2666.js +0 -1
  388. package/.next/server/chunks/3310.js +0 -35
  389. package/.next/server/chunks/453.js +0 -1
  390. package/.next/server/chunks/4681.js +0 -1
  391. package/.next/server/chunks/5311.js +0 -1
  392. package/.next/server/chunks/6037.js +0 -41
  393. package/.next/server/chunks/6390.js +0 -28
  394. package/.next/server/chunks/6936.js +0 -37
  395. package/.next/server/chunks/7186.js +0 -2
  396. package/.next/server/chunks/7982.js +0 -1
  397. package/.next/server/chunks/8342.js +0 -1
  398. package/.next/server/chunks/906.js +0 -35
  399. package/.next/server/chunks/9687.js +0 -1
  400. package/.next/server/chunks/9880.js +0 -1
  401. package/.next/server/chunks/9938.js +0 -1
  402. package/.next/static/Fdh7zqKv38txmpLAxepeR/_buildManifest.js +0 -1
  403. package/.next/static/chunks/1374-e084b3c40554288a.js +0 -1
  404. package/.next/static/chunks/2380-5696e0dc0469f6a5.js +0 -1
  405. package/.next/static/chunks/2709-29f91a54eef90221.js +0 -1
  406. package/.next/static/chunks/3217.1a7e24fd70294370.js +0 -1
  407. package/.next/static/chunks/4105-8fddb00196bf3c6d.js +0 -1
  408. package/.next/static/chunks/4244-6f399c7ff9980207.js +0 -1
  409. package/.next/static/chunks/4809-423a2a4a90d02f2c.js +0 -1
  410. package/.next/static/chunks/6084-68908a197e957e5f.js +0 -1
  411. package/.next/static/chunks/6509-3380826fd7c82b4e.js +0 -1
  412. package/.next/static/chunks/6582-6735fdd6b42b5c35.js +0 -1
  413. package/.next/static/chunks/690-391bc0f482a9f67c.js +0 -1
  414. package/.next/static/chunks/7290-fd5bb2c94fd7f605.js +0 -1
  415. package/.next/static/chunks/8098-297bf477152a565b.js +0 -1
  416. package/.next/static/chunks/924-64f908860caf1a35.js +0 -1
  417. package/.next/static/chunks/9286-6ea909e5bf70a97e.js +0 -1
  418. package/.next/static/chunks/9562-93cc45aef3630781.js +0 -1
  419. package/.next/static/chunks/9984-1ed094ea9f5b1f17.js +0 -1
  420. package/.next/static/chunks/app/api/backup/route-1691635994fcddb5.js +0 -1
  421. package/.next/static/chunks/app/api/browse/route-1691635994fcddb5.js +0 -1
  422. package/.next/static/chunks/app/api/cwd/route-1691635994fcddb5.js +0 -1
  423. package/.next/static/chunks/app/api/encryption/secure/route-1691635994fcddb5.js +0 -1
  424. package/.next/static/chunks/app/api/env/route-1691635994fcddb5.js +0 -1
  425. package/.next/static/chunks/app/api/flow/[id]/route-1691635994fcddb5.js +0 -1
  426. package/.next/static/chunks/app/api/flow/compile/route-1691635994fcddb5.js +0 -1
  427. package/.next/static/chunks/app/api/flow/generate/route-1691635994fcddb5.js +0 -1
  428. package/.next/static/chunks/app/api/flow/improve/route-1691635994fcddb5.js +0 -1
  429. package/.next/static/chunks/app/api/flow/prompt-renderer/route-1691635994fcddb5.js +0 -1
  430. package/.next/static/chunks/app/api/flow/quick-chat/route-1691635994fcddb5.js +0 -1
  431. package/.next/static/chunks/app/api/flow/route-1691635994fcddb5.js +0 -1
  432. package/.next/static/chunks/app/api/git/route-1691635994fcddb5.js +0 -1
  433. package/.next/static/chunks/app/api/init/route-1691635994fcddb5.js +0 -1
  434. package/.next/static/chunks/app/api/local-models/capability/route-1691635994fcddb5.js +0 -1
  435. package/.next/static/chunks/app/api/local-models/pull/route-1691635994fcddb5.js +0 -1
  436. package/.next/static/chunks/app/api/local-models/suggest/route-1691635994fcddb5.js +0 -1
  437. package/.next/static/chunks/app/api/mcp/cancel/route-1691635994fcddb5.js +0 -1
  438. package/.next/static/chunks/app/api/mcp/servers/[name]/prompts/get/route-1691635994fcddb5.js +0 -1
  439. package/.next/static/chunks/app/api/mcp/servers/[name]/prompts/route-1691635994fcddb5.js +0 -1
  440. package/.next/static/chunks/app/api/mcp/servers/[name]/resources/read/route-1691635994fcddb5.js +0 -1
  441. package/.next/static/chunks/app/api/mcp/servers/[name]/resources/route-1691635994fcddb5.js +0 -1
  442. package/.next/static/chunks/app/api/mcp/servers/[name]/route-1691635994fcddb5.js +0 -1
  443. package/.next/static/chunks/app/api/mcp/servers/[name]/status/route-1691635994fcddb5.js +0 -1
  444. package/.next/static/chunks/app/api/mcp/servers/[name]/tools/[toolName]/route-1691635994fcddb5.js +0 -1
  445. package/.next/static/chunks/app/api/mcp/servers/[name]/tools/route-1691635994fcddb5.js +0 -1
  446. package/.next/static/chunks/app/api/mcp/servers/route-1691635994fcddb5.js +0 -1
  447. package/.next/static/chunks/app/api/mcp/test-connection/route-1691635994fcddb5.js +0 -1
  448. package/.next/static/chunks/app/api/mcp/test-connection/stream/route-1691635994fcddb5.js +0 -1
  449. package/.next/static/chunks/app/api/mcp-registry/route-1691635994fcddb5.js +0 -1
  450. package/.next/static/chunks/app/api/mcp-registry/spotlight/route-1691635994fcddb5.js +0 -1
  451. package/.next/static/chunks/app/api/model/[id]/route-1691635994fcddb5.js +0 -1
  452. package/.next/static/chunks/app/api/model/provider/route-1691635994fcddb5.js +0 -1
  453. package/.next/static/chunks/app/api/model/route-1691635994fcddb5.js +0 -1
  454. package/.next/static/chunks/app/api/model/test/route-1691635994fcddb5.js +0 -1
  455. package/.next/static/chunks/app/api/oauth/callback/route-1691635994fcddb5.js +0 -1
  456. package/.next/static/chunks/app/api/oauth/initiate/route-1691635994fcddb5.js +0 -1
  457. package/.next/static/chunks/app/api/oauth/reset/route-1691635994fcddb5.js +0 -1
  458. package/.next/static/chunks/app/api/planned-executions/[id]/route-1691635994fcddb5.js +0 -1
  459. package/.next/static/chunks/app/api/planned-executions/[id]/run/route-1691635994fcddb5.js +0 -1
  460. package/.next/static/chunks/app/api/planned-executions/[id]/runs/route-1691635994fcddb5.js +0 -1
  461. package/.next/static/chunks/app/api/planned-executions/preview-schedule/route-1691635994fcddb5.js +0 -1
  462. package/.next/static/chunks/app/api/planned-executions/route-1691635994fcddb5.js +0 -1
  463. package/.next/static/chunks/app/api/restore/route-1691635994fcddb5.js +0 -1
  464. package/.next/static/chunks/app/api/storage/route-1691635994fcddb5.js +0 -1
  465. package/.next/static/chunks/app/api/update/route-1691635994fcddb5.js +0 -1
  466. package/.next/static/chunks/app/api/webhooks/[id]/route-1691635994fcddb5.js +0 -1
  467. package/.next/static/chunks/app/chat/page-6486974f4a6c7b57.js +0 -1
  468. package/.next/static/chunks/app/docs/page-5da72cc6db51f238.js +0 -1
  469. package/.next/static/chunks/app/executions/page-fe19f6a1bd3fe05c.js +0 -1
  470. package/.next/static/chunks/app/flows/page-3b84093cdf2aee84.js +0 -1
  471. package/.next/static/chunks/app/mcp/page-355386ec2a542e42.js +0 -1
  472. package/.next/static/chunks/app/mcp-flows/route-1691635994fcddb5.js +0 -1
  473. package/.next/static/chunks/app/mcp-proxy/[server]/route-1691635994fcddb5.js +0 -1
  474. package/.next/static/chunks/app/models/page-20c80d398bf83fc5.js +0 -1
  475. package/.next/static/chunks/app/v1/chat/completions/route-1691635994fcddb5.js +0 -1
  476. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/breakpoints/route-1691635994fcddb5.js +0 -1
  477. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/cancel/route-1691635994fcddb5.js +0 -1
  478. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/debug/continue/route-1691635994fcddb5.js +0 -1
  479. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/debug/step/route-1691635994fcddb5.js +0 -1
  480. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/edit-state/route-1691635994fcddb5.js +0 -1
  481. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/events/route-1691635994fcddb5.js +0 -1
  482. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/respond/route-1691635994fcddb5.js +0 -1
  483. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/route-1691635994fcddb5.js +0 -1
  484. package/.next/static/chunks/app/v1/chat/conversations/route-1691635994fcddb5.js +0 -1
  485. package/.next/static/chunks/app/v1/models/route-1691635994fcddb5.js +0 -1
  486. package/.next/static/chunks/webpack-4880945dd240d429.js +0 -1
  487. /package/.next/static/{Fdh7zqKv38txmpLAxepeR → dvSaKx6-EfRNi7Xj-cSv_}/_ssgManifest.js +0 -0
@@ -2,7 +2,7 @@
2
2
  // Do not edit this file manually
3
3
 
4
4
  type AppRoutes = "/" | "/chat" | "/docs" | "/executions" | "/flows" | "/mcp" | "/models" | "/settings"
5
- type AppRouteHandlerRoutes = "/api/backup" | "/api/browse" | "/api/cwd" | "/api/encryption/secure" | "/api/env" | "/api/flow" | "/api/flow/[id]" | "/api/flow/compile" | "/api/flow/generate" | "/api/flow/improve" | "/api/flow/prompt-renderer" | "/api/flow/quick-chat" | "/api/git" | "/api/init" | "/api/local-models/capability" | "/api/local-models/pull" | "/api/local-models/suggest" | "/api/mcp-registry" | "/api/mcp-registry/spotlight" | "/api/mcp/cancel" | "/api/mcp/servers" | "/api/mcp/servers/[name]" | "/api/mcp/servers/[name]/prompts" | "/api/mcp/servers/[name]/prompts/get" | "/api/mcp/servers/[name]/resources" | "/api/mcp/servers/[name]/resources/read" | "/api/mcp/servers/[name]/status" | "/api/mcp/servers/[name]/tools" | "/api/mcp/servers/[name]/tools/[toolName]" | "/api/mcp/test-connection" | "/api/mcp/test-connection/stream" | "/api/model" | "/api/model/[id]" | "/api/model/provider" | "/api/model/test" | "/api/oauth/callback" | "/api/oauth/initiate" | "/api/oauth/reset" | "/api/planned-executions" | "/api/planned-executions/[id]" | "/api/planned-executions/[id]/run" | "/api/planned-executions/[id]/runs" | "/api/planned-executions/preview-schedule" | "/api/restore" | "/api/storage" | "/api/update" | "/api/webhooks/[id]" | "/mcp-flows" | "/mcp-proxy/[server]" | "/v1/chat/completions" | "/v1/chat/conversations" | "/v1/chat/conversations/[conversationId]" | "/v1/chat/conversations/[conversationId]/breakpoints" | "/v1/chat/conversations/[conversationId]/cancel" | "/v1/chat/conversations/[conversationId]/debug/continue" | "/v1/chat/conversations/[conversationId]/debug/step" | "/v1/chat/conversations/[conversationId]/edit-state" | "/v1/chat/conversations/[conversationId]/events" | "/v1/chat/conversations/[conversationId]/respond" | "/v1/models"
5
+ type AppRouteHandlerRoutes = "/api/backup" | "/api/browse" | "/api/cwd" | "/api/encryption/secure" | "/api/env" | "/api/flow" | "/api/flow/[id]" | "/api/flow/compile" | "/api/flow/generate" | "/api/flow/improve" | "/api/flow/prompt-renderer" | "/api/flow/quick-chat" | "/api/flow/repair" | "/api/git" | "/api/init" | "/api/local-models/capability" | "/api/local-models/pull" | "/api/local-models/suggest" | "/api/mcp-registry" | "/api/mcp-registry/spotlight" | "/api/mcp/cancel" | "/api/mcp/servers" | "/api/mcp/servers/[name]" | "/api/mcp/servers/[name]/prompts" | "/api/mcp/servers/[name]/prompts/get" | "/api/mcp/servers/[name]/resources" | "/api/mcp/servers/[name]/resources/read" | "/api/mcp/servers/[name]/status" | "/api/mcp/servers/[name]/tools" | "/api/mcp/servers/[name]/tools/[toolName]" | "/api/mcp/test-connection" | "/api/mcp/test-connection/stream" | "/api/model" | "/api/model/[id]" | "/api/model/provider" | "/api/model/test" | "/api/oauth/callback" | "/api/oauth/initiate" | "/api/oauth/reset" | "/api/planned-executions" | "/api/planned-executions/[id]" | "/api/planned-executions/[id]/run" | "/api/planned-executions/[id]/runs" | "/api/planned-executions/preview-schedule" | "/api/restore" | "/api/storage" | "/api/update" | "/api/webhooks/[id]" | "/mcp-flows" | "/mcp-proxy/[server]" | "/v1/chat/completions" | "/v1/chat/conversations" | "/v1/chat/conversations/[conversationId]" | "/v1/chat/conversations/[conversationId]/breakpoints" | "/v1/chat/conversations/[conversationId]/cancel" | "/v1/chat/conversations/[conversationId]/debug/continue" | "/v1/chat/conversations/[conversationId]/debug/step" | "/v1/chat/conversations/[conversationId]/edit-state" | "/v1/chat/conversations/[conversationId]/events" | "/v1/chat/conversations/[conversationId]/resources" | "/v1/chat/conversations/[conversationId]/respond" | "/v1/models"
6
6
  type PageRoutes = never
7
7
  type LayoutRoutes = "/"
8
8
  type RedirectRoutes = never
@@ -24,6 +24,7 @@ interface ParamMap {
24
24
  "/api/flow/improve": {}
25
25
  "/api/flow/prompt-renderer": {}
26
26
  "/api/flow/quick-chat": {}
27
+ "/api/flow/repair": {}
27
28
  "/api/git": {}
28
29
  "/api/init": {}
29
30
  "/api/local-models/capability": {}
@@ -77,6 +78,7 @@ interface ParamMap {
77
78
  "/v1/chat/conversations/[conversationId]/debug/step": { "conversationId": string; }
78
79
  "/v1/chat/conversations/[conversationId]/edit-state": { "conversationId": string; }
79
80
  "/v1/chat/conversations/[conversationId]/events": { "conversationId": string; }
81
+ "/v1/chat/conversations/[conversationId]/resources": { "conversationId": string; }
80
82
  "/v1/chat/conversations/[conversationId]/respond": { "conversationId": string; }
81
83
  "/v1/models": {}
82
84
  }
@@ -218,6 +218,15 @@ type RouteHandlerConfig<Route extends AppRouteHandlerRoutes = AppRouteHandlerRou
218
218
  type __Unused = __Check
219
219
  }
220
220
 
221
+ // Validate ../../src/app/api/flow/repair/route.ts
222
+ {
223
+ type __IsExpected<Specific extends RouteHandlerConfig<"/api/flow/repair">> = Specific
224
+ const handler = {} as typeof import("../../src/app/api/flow/repair/route.js")
225
+ type __Check = __IsExpected<typeof handler>
226
+ // @ts-ignore
227
+ type __Unused = __Check
228
+ }
229
+
221
230
  // Validate ../../src/app/api/flow/route.ts
222
231
  {
223
232
  type __IsExpected<Specific extends RouteHandlerConfig<"/api/flow">> = Specific
@@ -623,6 +632,15 @@ type RouteHandlerConfig<Route extends AppRouteHandlerRoutes = AppRouteHandlerRou
623
632
  type __Unused = __Check
624
633
  }
625
634
 
635
+ // Validate ../../src/app/v1/chat/conversations/[conversationId]/resources/route.ts
636
+ {
637
+ type __IsExpected<Specific extends RouteHandlerConfig<"/v1/chat/conversations/[conversationId]/resources">> = Specific
638
+ const handler = {} as typeof import("../../src/app/v1/chat/conversations/[conversationId]/resources/route.js")
639
+ type __Check = __IsExpected<typeof handler>
640
+ // @ts-ignore
641
+ type __Unused = __Check
642
+ }
643
+
626
644
  // Validate ../../src/app/v1/chat/conversations/[conversationId]/respond/route.ts
627
645
  {
628
646
  type __IsExpected<Specific extends RouteHandlerConfig<"/v1/chat/conversations/[conversationId]/respond">> = Specific
package/README.md CHANGED
@@ -37,7 +37,7 @@ For *anything* that you struggle with (MCP Installation, Application Issues, Usa
37
37
  # FLUJO
38
38
 
39
39
  [![MIT License](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
40
- [![Version](https://img.shields.io/badge/version-3.18.0-green.svg)](package.json)
40
+ [![Version](https://img.shields.io/badge/version-3.20.0-green.svg)](package.json)
41
41
 
42
42
  FLUJO is an open-source, local-first platform for building **MCP-powered AI workflows**. It brings together model management, Model-Context-Protocol (MCP) servers, a visual flow builder, and a chat interface in one app — so you can wire models and tools together, run them headlessly on triggers, and expose the result to other apps, without giving up control of your keys and data.
43
43
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "flujo-ai",
3
- "version": "3.18.0",
3
+ "version": "3.20.0",
4
4
  "bin": {
5
5
  "flujo": "bin/flujo.mjs"
6
6
  },
@@ -1 +0,0 @@
1
- "use strict";exports.id=1050,exports.ids=[1050],exports.modules={8165:(a,b,c)=>{c.d(b,{A:()=>f});var d=c(27080),e=c(21124);let f=(0,d.A)((0,e.jsx)("path",{d:"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2m-2 15-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8z"}),"CheckCircle")},12033:(a,b,c)=>{c.d(b,{A:()=>f});var d=c(27080),e=c(21124);let f=(0,d.A)((0,e.jsx)("path",{d:"M3 17.25V21h3.75L17.81 9.94l-3.75-3.75zM20.71 7.04c.39-.39.39-1.02 0-1.41l-2.34-2.34a.996.996 0 0 0-1.41 0l-1.83 1.83 3.75 3.75z"}),"Edit")},31605:(a,b,c)=>{c.d(b,{A:()=>ay});var d=c(38404),e=c(38301),f=c(67943),g=c(75249),h=c(46757);function i(a){if(null==a)return window;if("[object Window]"!==a.toString()){var b=a.ownerDocument;return b&&b.defaultView||window}return a}function j(a){var b=i(a).Element;return a instanceof b||a instanceof Element}function k(a){var b=i(a).HTMLElement;return a instanceof b||a instanceof HTMLElement}function l(a){if("undefined"==typeof ShadowRoot)return!1;var b=i(a).ShadowRoot;return a instanceof b||a instanceof ShadowRoot}var m=Math.max,n=Math.min,o=Math.round;function p(){var a=navigator.userAgentData;return null!=a&&a.brands&&Array.isArray(a.brands)?a.brands.map(function(a){return a.brand+"/"+a.version}).join(" "):navigator.userAgent}function q(){return!/^((?!chrome|android).)*safari/i.test(p())}function r(a,b,c){void 0===b&&(b=!1),void 0===c&&(c=!1);var d=a.getBoundingClientRect(),e=1,f=1;b&&k(a)&&(e=a.offsetWidth>0&&o(d.width)/a.offsetWidth||1,f=a.offsetHeight>0&&o(d.height)/a.offsetHeight||1);var g=(j(a)?i(a):window).visualViewport,h=!q()&&c,l=(d.left+(h&&g?g.offsetLeft:0))/e,m=(d.top+(h&&g?g.offsetTop:0))/f,n=d.width/e,p=d.height/f;return{width:n,height:p,top:m,right:l+n,bottom:m+p,left:l,x:l,y:m}}function s(a){var b=i(a);return{scrollLeft:b.pageXOffset,scrollTop:b.pageYOffset}}function t(a){return a?(a.nodeName||"").toLowerCase():null}function u(a){return((j(a)?a.ownerDocument:a.document)||window.document).documentElement}function v(a){return r(u(a)).left+s(a).scrollLeft}function w(a){return i(a).getComputedStyle(a)}function x(a){var b=w(a),c=b.overflow,d=b.overflowX,e=b.overflowY;return/auto|scroll|overlay|hidden/.test(c+e+d)}function y(a){var b=r(a),c=a.offsetWidth,d=a.offsetHeight;return 1>=Math.abs(b.width-c)&&(c=b.width),1>=Math.abs(b.height-d)&&(d=b.height),{x:a.offsetLeft,y:a.offsetTop,width:c,height:d}}function z(a){return"html"===t(a)?a:a.assignedSlot||a.parentNode||(l(a)?a.host:null)||u(a)}function A(a,b){void 0===b&&(b=[]);var c,d=function a(b){return["html","body","#document"].indexOf(t(b))>=0?b.ownerDocument.body:k(b)&&x(b)?b:a(z(b))}(a),e=d===(null==(c=a.ownerDocument)?void 0:c.body),f=i(d),g=e?[f].concat(f.visualViewport||[],x(d)?d:[]):d,h=b.concat(g);return e?h:h.concat(A(z(g)))}function B(a){return k(a)&&"fixed"!==w(a).position?a.offsetParent:null}function C(a){for(var b=i(a),c=B(a);c&&["table","td","th"].indexOf(t(c))>=0&&"static"===w(c).position;)c=B(c);return c&&("html"===t(c)||"body"===t(c)&&"static"===w(c).position)?b:c||function(a){var b=/firefox/i.test(p());if(/Trident/i.test(p())&&k(a)&&"fixed"===w(a).position)return null;var c=z(a);for(l(c)&&(c=c.host);k(c)&&0>["html","body"].indexOf(t(c));){var d=w(c);if("none"!==d.transform||"none"!==d.perspective||"paint"===d.contain||-1!==["transform","perspective"].indexOf(d.willChange)||b&&"filter"===d.willChange||b&&d.filter&&"none"!==d.filter)return c;c=c.parentNode}return null}(a)||b}var D="bottom",E="right",F="left",G="auto",H=["top",D,E,F],I="start",J="viewport",K="popper",L=H.reduce(function(a,b){return a.concat([b+"-"+I,b+"-end"])},[]),M=[].concat(H,[G]).reduce(function(a,b){return a.concat([b,b+"-"+I,b+"-end"])},[]),N=["beforeRead","read","afterRead","beforeMain","main","afterMain","beforeWrite","write","afterWrite"],O={placement:"bottom",modifiers:[],strategy:"absolute"};function P(){for(var a=arguments.length,b=Array(a),c=0;c<a;c++)b[c]=arguments[c];return!b.some(function(a){return!(a&&"function"==typeof a.getBoundingClientRect)})}var Q={passive:!0};function R(a){return a.split("-")[0]}function S(a){return a.split("-")[1]}function T(a){return["top","bottom"].indexOf(a)>=0?"x":"y"}function U(a){var b,c=a.reference,d=a.element,e=a.placement,f=e?R(e):null,g=e?S(e):null,h=c.x+c.width/2-d.width/2,i=c.y+c.height/2-d.height/2;switch(f){case"top":b={x:h,y:c.y-d.height};break;case D:b={x:h,y:c.y+c.height};break;case E:b={x:c.x+c.width,y:i};break;case F:b={x:c.x-d.width,y:i};break;default:b={x:c.x,y:c.y}}var j=f?T(f):null;if(null!=j){var k="y"===j?"height":"width";switch(g){case I:b[j]=b[j]-(c[k]/2-d[k]/2);break;case"end":b[j]=b[j]+(c[k]/2-d[k]/2)}}return b}var V={top:"auto",right:"auto",bottom:"auto",left:"auto"};function W(a){var b,c,d,e,f,g,h,j=a.popper,k=a.popperRect,l=a.placement,m=a.variation,n=a.offsets,p=a.position,q=a.gpuAcceleration,r=a.adaptive,s=a.roundOffsets,t=a.isFixed,v=n.x,x=void 0===v?0:v,y=n.y,z=void 0===y?0:y,A="function"==typeof s?s({x:x,y:z}):{x:x,y:z};x=A.x,z=A.y;var B=n.hasOwnProperty("x"),G=n.hasOwnProperty("y"),H=F,I="top",J=window;if(r){var K=C(j),L="clientHeight",M="clientWidth";K===i(j)&&"static"!==w(K=u(j)).position&&"absolute"===p&&(L="scrollHeight",M="scrollWidth"),("top"===l||(l===F||l===E)&&"end"===m)&&(I=D,z-=(t&&K===J&&J.visualViewport?J.visualViewport.height:K[L])-k.height,z*=q?1:-1),(l===F||("top"===l||l===D)&&"end"===m)&&(H=E,x-=(t&&K===J&&J.visualViewport?J.visualViewport.width:K[M])-k.width,x*=q?1:-1)}var N=Object.assign({position:p},r&&V),O=!0===s?(b={x:x,y:z},c=i(j),d=b.x,e=b.y,{x:o(d*(f=c.devicePixelRatio||1))/f||0,y:o(e*f)/f||0}):{x:x,y:z};return(x=O.x,z=O.y,q)?Object.assign({},N,((h={})[I]=G?"0":"",h[H]=B?"0":"",h.transform=1>=(J.devicePixelRatio||1)?"translate("+x+"px, "+z+"px)":"translate3d("+x+"px, "+z+"px, 0)",h)):Object.assign({},N,((g={})[I]=G?z+"px":"",g[H]=B?x+"px":"",g.transform="",g))}var X={left:"right",right:"left",bottom:"top",top:"bottom"};function Y(a){return a.replace(/left|right|bottom|top/g,function(a){return X[a]})}var Z={start:"end",end:"start"};function $(a){return a.replace(/start|end/g,function(a){return Z[a]})}function _(a,b){var c=b.getRootNode&&b.getRootNode();if(a.contains(b))return!0;if(c&&l(c)){var d=b;do{if(d&&a.isSameNode(d))return!0;d=d.parentNode||d.host}while(d)}return!1}function aa(a){return Object.assign({},a,{left:a.x,top:a.y,right:a.x+a.width,bottom:a.y+a.height})}function ab(a,b,c){var d,e,f,g,h,k,l,n,o,p;return b===J?aa(function(a,b){var c=i(a),d=u(a),e=c.visualViewport,f=d.clientWidth,g=d.clientHeight,h=0,j=0;if(e){f=e.width,g=e.height;var k=q();(k||!k&&"fixed"===b)&&(h=e.offsetLeft,j=e.offsetTop)}return{width:f,height:g,x:h+v(a),y:j}}(a,c)):j(b)?((d=r(b,!1,"fixed"===c)).top=d.top+b.clientTop,d.left=d.left+b.clientLeft,d.bottom=d.top+b.clientHeight,d.right=d.left+b.clientWidth,d.width=b.clientWidth,d.height=b.clientHeight,d.x=d.left,d.y=d.top,d):aa((e=u(a),g=u(e),h=s(e),k=null==(f=e.ownerDocument)?void 0:f.body,l=m(g.scrollWidth,g.clientWidth,k?k.scrollWidth:0,k?k.clientWidth:0),n=m(g.scrollHeight,g.clientHeight,k?k.scrollHeight:0,k?k.clientHeight:0),o=-h.scrollLeft+v(e),p=-h.scrollTop,"rtl"===w(k||g).direction&&(o+=m(g.clientWidth,k?k.clientWidth:0)-l),{width:l,height:n,x:o,y:p}))}function ac(){return{top:0,right:0,bottom:0,left:0}}function ad(a){return Object.assign({},ac(),a)}function ae(a,b){return b.reduce(function(b,c){return b[c]=a,b},{})}function af(a,b){void 0===b&&(b={});var c,d,e,f,g,h,i,l,o=b,p=o.placement,q=void 0===p?a.placement:p,s=o.strategy,v=void 0===s?a.strategy:s,x=o.boundary,y=o.rootBoundary,B=o.elementContext,F=void 0===B?K:B,G=o.altBoundary,I=o.padding,L=void 0===I?0:I,M=ad("number"!=typeof L?L:ae(L,H)),N=a.rects.popper,O=a.elements[void 0!==G&&G?F===K?"reference":K:F],P=(c=j(O)?O:O.contextElement||u(a.elements.popper),d=void 0===x?"clippingParents":x,e=void 0===y?J:y,i=(h=[].concat("clippingParents"===d?(f=A(z(c)),!j(g=["absolute","fixed"].indexOf(w(c).position)>=0&&k(c)?C(c):c)?[]:f.filter(function(a){return j(a)&&_(a,g)&&"body"!==t(a)})):[].concat(d),[e]))[0],(l=h.reduce(function(a,b){var d=ab(c,b,v);return a.top=m(d.top,a.top),a.right=n(d.right,a.right),a.bottom=n(d.bottom,a.bottom),a.left=m(d.left,a.left),a},ab(c,i,v))).width=l.right-l.left,l.height=l.bottom-l.top,l.x=l.left,l.y=l.top,l),Q=r(a.elements.reference),R=U({reference:Q,element:N,strategy:"absolute",placement:q}),S=aa(Object.assign({},N,R)),T=F===K?S:Q,V={top:P.top-T.top+M.top,bottom:T.bottom-P.bottom+M.bottom,left:P.left-T.left+M.left,right:T.right-P.right+M.right},W=a.modifiersData.offset;if(F===K&&W){var X=W[q];Object.keys(V).forEach(function(a){var b=[E,D].indexOf(a)>=0?1:-1,c=["top",D].indexOf(a)>=0?"y":"x";V[a]+=X[c]*b})}return V}function ag(a,b,c){return m(a,n(b,c))}function ah(a,b,c){return void 0===c&&(c={x:0,y:0}),{top:a.top-b.height-c.y,right:a.right-b.width+c.x,bottom:a.bottom-b.height+c.y,left:a.left-b.width-c.x}}function ai(a){return["top",E,D,F].some(function(b){return a[b]>=0})}var aj=function(a){void 0===a&&(a={});var b=a,c=b.defaultModifiers,d=void 0===c?[]:c,e=b.defaultOptions,f=void 0===e?O:e;return function(a,b,c){void 0===c&&(c=f);var e,g,h={placement:"bottom",orderedModifiers:[],options:Object.assign({},O,f),modifiersData:{},elements:{reference:a,popper:b},attributes:{},styles:{}},l=[],m=!1,n={state:h,setOptions:function(c){var e,g,i,k,m,o,q="function"==typeof c?c(h.options):c;p(),h.options=Object.assign({},f,h.options,q),h.scrollParents={reference:j(a)?A(a):a.contextElement?A(a.contextElement):[],popper:A(b)};var r=(g=Object.keys(e=[].concat(d,h.options.modifiers).reduce(function(a,b){var c=a[b.name];return a[b.name]=c?Object.assign({},c,b,{options:Object.assign({},c.options,b.options),data:Object.assign({},c.data,b.data)}):b,a},{})).map(function(a){return e[a]}),i=new Map,k=new Set,m=[],g.forEach(function(a){i.set(a.name,a)}),g.forEach(function(a){k.has(a.name)||function a(b){k.add(b.name),[].concat(b.requires||[],b.requiresIfExists||[]).forEach(function(b){if(!k.has(b)){var c=i.get(b);c&&a(c)}}),m.push(b)}(a)}),o=m,N.reduce(function(a,b){return a.concat(o.filter(function(a){return a.phase===b}))},[]));return h.orderedModifiers=r.filter(function(a){return a.enabled}),h.orderedModifiers.forEach(function(a){var b=a.name,c=a.options,d=a.effect;if("function"==typeof d){var e=d({state:h,name:b,instance:n,options:void 0===c?{}:c});l.push(e||function(){})}}),n.update()},forceUpdate:function(){if(!m){var a=h.elements,b=a.reference,c=a.popper;if(P(b,c)){h.rects={reference:(d=C(c),e="fixed"===h.options.strategy,f=k(d),p=k(d)&&(j=o((g=d.getBoundingClientRect()).width)/d.offsetWidth||1,l=o(g.height)/d.offsetHeight||1,1!==j||1!==l),q=u(d),w=r(b,p,e),z={scrollLeft:0,scrollTop:0},A={x:0,y:0},(f||!f&&!e)&&(("body"!==t(d)||x(q))&&(z=function(a){return a!==i(a)&&k(a)?{scrollLeft:a.scrollLeft,scrollTop:a.scrollTop}:s(a)}(d)),k(d)?(A=r(d,!0),A.x+=d.clientLeft,A.y+=d.clientTop):q&&(A.x=v(q))),{x:w.left+z.scrollLeft-A.x,y:w.top+z.scrollTop-A.y,width:w.width,height:w.height}),popper:y(c)},h.reset=!1,h.placement=h.options.placement,h.orderedModifiers.forEach(function(a){return h.modifiersData[a.name]=Object.assign({},a.data)});for(var d,e,f,g,j,l,p,q,w,z,A,B=0;B<h.orderedModifiers.length;B++){if(!0===h.reset){h.reset=!1,B=-1;continue}var D=h.orderedModifiers[B],E=D.fn,F=D.options,G=void 0===F?{}:F,H=D.name;"function"==typeof E&&(h=E({state:h,options:G,name:H,instance:n})||h)}}}},update:(e=function(){return new Promise(function(a){n.forceUpdate(),a(h)})},function(){return g||(g=new Promise(function(a){Promise.resolve().then(function(){g=void 0,a(e())})})),g}),destroy:function(){p(),m=!0}};if(!P(a,b))return n;function p(){l.forEach(function(a){return a()}),l=[]}return n.setOptions(c).then(function(a){!m&&c.onFirstUpdate&&c.onFirstUpdate(a)}),n}}({defaultModifiers:[{name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:function(a){var b=a.state,c=a.instance,d=a.options,e=d.scroll,f=void 0===e||e,g=d.resize,h=void 0===g||g,j=i(b.elements.popper),k=[].concat(b.scrollParents.reference,b.scrollParents.popper);return f&&k.forEach(function(a){a.addEventListener("scroll",c.update,Q)}),h&&j.addEventListener("resize",c.update,Q),function(){f&&k.forEach(function(a){a.removeEventListener("scroll",c.update,Q)}),h&&j.removeEventListener("resize",c.update,Q)}},data:{}},{name:"popperOffsets",enabled:!0,phase:"read",fn:function(a){var b=a.state,c=a.name;b.modifiersData[c]=U({reference:b.rects.reference,element:b.rects.popper,strategy:"absolute",placement:b.placement})},data:{}},{name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:function(a){var b=a.state,c=a.options,d=c.gpuAcceleration,e=c.adaptive,f=c.roundOffsets,g=void 0===f||f,h={placement:R(b.placement),variation:S(b.placement),popper:b.elements.popper,popperRect:b.rects.popper,gpuAcceleration:void 0===d||d,isFixed:"fixed"===b.options.strategy};null!=b.modifiersData.popperOffsets&&(b.styles.popper=Object.assign({},b.styles.popper,W(Object.assign({},h,{offsets:b.modifiersData.popperOffsets,position:b.options.strategy,adaptive:void 0===e||e,roundOffsets:g})))),null!=b.modifiersData.arrow&&(b.styles.arrow=Object.assign({},b.styles.arrow,W(Object.assign({},h,{offsets:b.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:g})))),b.attributes.popper=Object.assign({},b.attributes.popper,{"data-popper-placement":b.placement})},data:{}},{name:"applyStyles",enabled:!0,phase:"write",fn:function(a){var b=a.state;Object.keys(b.elements).forEach(function(a){var c=b.styles[a]||{},d=b.attributes[a]||{},e=b.elements[a];k(e)&&t(e)&&(Object.assign(e.style,c),Object.keys(d).forEach(function(a){var b=d[a];!1===b?e.removeAttribute(a):e.setAttribute(a,!0===b?"":b)}))})},effect:function(a){var b=a.state,c={popper:{position:b.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(b.elements.popper.style,c.popper),b.styles=c,b.elements.arrow&&Object.assign(b.elements.arrow.style,c.arrow),function(){Object.keys(b.elements).forEach(function(a){var d=b.elements[a],e=b.attributes[a]||{},f=Object.keys(b.styles.hasOwnProperty(a)?b.styles[a]:c[a]).reduce(function(a,b){return a[b]="",a},{});k(d)&&t(d)&&(Object.assign(d.style,f),Object.keys(e).forEach(function(a){d.removeAttribute(a)}))})}},requires:["computeStyles"]},{name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function(a){var b=a.state,c=a.options,d=a.name,e=c.offset,f=void 0===e?[0,0]:e,g=M.reduce(function(a,c){var d,e,g,h,i,j;return a[c]=(d=b.rects,g=[F,"top"].indexOf(e=R(c))>=0?-1:1,i=(h="function"==typeof f?f(Object.assign({},d,{placement:c})):f)[0],j=h[1],i=i||0,j=(j||0)*g,[F,E].indexOf(e)>=0?{x:j,y:i}:{x:i,y:j}),a},{}),h=g[b.placement],i=h.x,j=h.y;null!=b.modifiersData.popperOffsets&&(b.modifiersData.popperOffsets.x+=i,b.modifiersData.popperOffsets.y+=j),b.modifiersData[d]=g}},{name:"flip",enabled:!0,phase:"main",fn:function(a){var b=a.state,c=a.options,d=a.name;if(!b.modifiersData[d]._skip){for(var e=c.mainAxis,f=void 0===e||e,g=c.altAxis,h=void 0===g||g,i=c.fallbackPlacements,j=c.padding,k=c.boundary,l=c.rootBoundary,m=c.altBoundary,n=c.flipVariations,o=void 0===n||n,p=c.allowedAutoPlacements,q=b.options.placement,r=R(q)===q,s=i||(r||!o?[Y(q)]:function(a){if(R(a)===G)return[];var b=Y(a);return[$(a),b,$(b)]}(q)),t=[q].concat(s).reduce(function(a,c){var d,e,f,g,h,i,m,n,q,r,s,t;return a.concat(R(c)===G?(e=(d={placement:c,boundary:k,rootBoundary:l,padding:j,flipVariations:o,allowedAutoPlacements:p}).placement,f=d.boundary,g=d.rootBoundary,h=d.padding,i=d.flipVariations,n=void 0===(m=d.allowedAutoPlacements)?M:m,0===(s=(r=(q=S(e))?i?L:L.filter(function(a){return S(a)===q}):H).filter(function(a){return n.indexOf(a)>=0})).length&&(s=r),Object.keys(t=s.reduce(function(a,c){return a[c]=af(b,{placement:c,boundary:f,rootBoundary:g,padding:h})[R(c)],a},{})).sort(function(a,b){return t[a]-t[b]})):c)},[]),u=b.rects.reference,v=b.rects.popper,w=new Map,x=!0,y=t[0],z=0;z<t.length;z++){var A=t[z],B=R(A),C=S(A)===I,J=["top",D].indexOf(B)>=0,K=J?"width":"height",N=af(b,{placement:A,boundary:k,rootBoundary:l,altBoundary:m,padding:j}),O=J?C?E:F:C?D:"top";u[K]>v[K]&&(O=Y(O));var P=Y(O),Q=[];if(f&&Q.push(N[B]<=0),h&&Q.push(N[O]<=0,N[P]<=0),Q.every(function(a){return a})){y=A,x=!1;break}w.set(A,Q)}if(x)for(var T=o?3:1,U=function(a){var b=t.find(function(b){var c=w.get(b);if(c)return c.slice(0,a).every(function(a){return a})});if(b)return y=b,"break"},V=T;V>0&&"break"!==U(V);V--);b.placement!==y&&(b.modifiersData[d]._skip=!0,b.placement=y,b.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}},{name:"preventOverflow",enabled:!0,phase:"main",fn:function(a){var b=a.state,c=a.options,d=a.name,e=c.mainAxis,f=c.altAxis,g=c.boundary,h=c.rootBoundary,i=c.altBoundary,j=c.padding,k=c.tether,l=void 0===k||k,o=c.tetherOffset,p=void 0===o?0:o,q=af(b,{boundary:g,rootBoundary:h,padding:j,altBoundary:i}),r=R(b.placement),s=S(b.placement),t=!s,u=T(r),v="x"===u?"y":"x",w=b.modifiersData.popperOffsets,x=b.rects.reference,z=b.rects.popper,A="function"==typeof p?p(Object.assign({},b.rects,{placement:b.placement})):p,B="number"==typeof A?{mainAxis:A,altAxis:A}:Object.assign({mainAxis:0,altAxis:0},A),G=b.modifiersData.offset?b.modifiersData.offset[b.placement]:null,H={x:0,y:0};if(w){if(void 0===e||e){var J,K="y"===u?"top":F,L="y"===u?D:E,M="y"===u?"height":"width",N=w[u],O=N+q[K],P=N-q[L],Q=l?-z[M]/2:0,U=s===I?x[M]:z[M],V=s===I?-z[M]:-x[M],W=b.elements.arrow,X=l&&W?y(W):{width:0,height:0},Y=b.modifiersData["arrow#persistent"]?b.modifiersData["arrow#persistent"].padding:ac(),Z=Y[K],$=Y[L],_=ag(0,x[M],X[M]),aa=t?x[M]/2-Q-_-Z-B.mainAxis:U-_-Z-B.mainAxis,ab=t?-x[M]/2+Q+_+$+B.mainAxis:V+_+$+B.mainAxis,ad=b.elements.arrow&&C(b.elements.arrow),ae=ad?"y"===u?ad.clientTop||0:ad.clientLeft||0:0,ah=null!=(J=null==G?void 0:G[u])?J:0,ai=ag(l?n(O,N+aa-ah-ae):O,N,l?m(P,N+ab-ah):P);w[u]=ai,H[u]=ai-N}if(void 0!==f&&f){var aj,ak,al="x"===u?"top":F,am="x"===u?D:E,an=w[v],ao="y"===v?"height":"width",ap=an+q[al],aq=an-q[am],ar=-1!==["top",F].indexOf(r),as=null!=(ak=null==G?void 0:G[v])?ak:0,at=ar?ap:an-x[ao]-z[ao]-as+B.altAxis,au=ar?an+x[ao]+z[ao]-as-B.altAxis:aq,av=l&&ar?(aj=ag(at,an,au))>au?au:aj:ag(l?at:ap,an,l?au:aq);w[v]=av,H[v]=av-an}b.modifiersData[d]=H}},requiresIfExists:["offset"]},{name:"arrow",enabled:!0,phase:"main",fn:function(a){var b,c=a.state,d=a.name,e=a.options,f=c.elements.arrow,g=c.modifiersData.popperOffsets,h=R(c.placement),i=T(h),j=[F,E].indexOf(h)>=0?"height":"width";if(f&&g){var k,l=(k=e.padding,ad("number"!=typeof(k="function"==typeof k?k(Object.assign({},c.rects,{placement:c.placement})):k)?k:ae(k,H))),m=y(f),n="y"===i?"top":F,o="y"===i?D:E,p=c.rects.reference[j]+c.rects.reference[i]-g[i]-c.rects.popper[j],q=g[i]-c.rects.reference[i],r=C(f),s=r?"y"===i?r.clientHeight||0:r.clientWidth||0:0,t=l[n],u=s-m[j]-l[o],v=s/2-m[j]/2+(p/2-q/2),w=ag(t,v,u);c.modifiersData[d]=((b={})[i]=w,b.centerOffset=w-v,b)}},effect:function(a){var b=a.state,c=a.options.element,d=void 0===c?"[data-popper-arrow]":c;if(null!=d)("string"!=typeof d||(d=b.elements.popper.querySelector(d)))&&_(b.elements.popper,d)&&(b.elements.arrow=d)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]},{name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(a){var b=a.state,c=a.name,d=b.rects.reference,e=b.rects.popper,f=b.modifiersData.preventOverflow,g=af(b,{elementContext:"reference"}),h=af(b,{altBoundary:!0}),i=ah(g,d),j=ah(h,e,f),k=ai(i),l=ai(j);b.modifiersData[c]={referenceClippingOffsets:i,popperEscapeOffsets:j,isReferenceHidden:k,hasPopperEscaped:l},b.attributes.popper=Object.assign({},b.attributes.popper,{"data-popper-reference-hidden":k,"data-popper-escaped":l})}}]}),ak=c(2783),al=c(94633),am=c(1509),an=c(29565),ao=c(33105);function ap(a){return(0,ao.Ay)("MuiPopper",a)}(0,an.A)("MuiPopper",["root"]);var aq=c(21124);function ar(a){return"function"==typeof a?a():a}let as={},at=e.forwardRef(function(a,b){let{anchorEl:c,children:d,direction:h,disablePortal:i,modifiers:j,open:k,placement:l,popperOptions:m,popperRef:n,slotProps:o={},slots:p={},TransitionProps:q,ownerState:r,...s}=a,t=e.useRef(null),u=(0,f.A)(t,b),v=e.useRef(null),w=(0,f.A)(v,n),x=e.useRef(w);(0,g.A)(()=>{x.current=w},[w]),e.useImperativeHandle(n,()=>v.current,[]);let y=function(a,b){if("ltr"===b)return a;switch(a){case"bottom-end":return"bottom-start";case"bottom-start":return"bottom-end";case"top-end":return"top-start";case"top-start":return"top-end";default:return a}}(l,h),[z,A]=e.useState(y),[B,C]=e.useState(ar(c));e.useEffect(()=>{v.current&&v.current.forceUpdate()}),e.useEffect(()=>{c&&C(ar(c))},[c]),(0,g.A)(()=>{if(!B||!k)return;let a=[{name:"preventOverflow",options:{altBoundary:i}},{name:"flip",options:{altBoundary:i}},{name:"onUpdate",enabled:!0,phase:"afterWrite",fn:({state:a})=>{A(a.placement)}}];null!=j&&(a=a.concat(j)),m&&null!=m.modifiers&&(a=a.concat(m.modifiers));let b=aj(B,t.current,{placement:y,...m,modifiers:a});return x.current(b),()=>{b.destroy(),x.current(null)}},[B,i,j,k,m,y]);let D={placement:z};null!==q&&(D.TransitionProps=q);let E=(a=>{let{classes:b}=a;return(0,ak.A)({root:["root"]},ap,b)})(a),F=p.root??"div",G=(0,al.A)({elementType:F,externalSlotProps:o.root,externalForwardedProps:s,additionalProps:{role:"tooltip",ref:u},ownerState:a,className:E.root});return(0,aq.jsx)(F,{...G,children:"function"==typeof d?d(D):d})}),au=e.forwardRef(function(a,b){let c,{anchorEl:d,children:f,container:g,direction:i="ltr",disablePortal:j=!1,keepMounted:k=!1,modifiers:l,open:m,placement:n="bottom",popperOptions:o=as,popperRef:p,style:q,transition:r=!1,slotProps:s={},slots:t={},...u}=a,[v,w]=e.useState(!0);if(!k&&!m&&(!r||v))return null;if(g)c=g;else if(d){let a=ar(d);c=a&&void 0!==a.nodeType?(0,h.A)(a).body:(0,h.A)(null).body}let x=!m&&k&&(!r||v)?"none":void 0,y=r?{in:m,onEnter:()=>{w(!1)},onExited:()=>{w(!0)}}:void 0;return(0,aq.jsx)(am.A,{disablePortal:j,container:c,children:(0,aq.jsx)(at,{anchorEl:d,direction:i,disablePortal:j,modifiers:l,ref:b,open:r?!v:m,placement:n,popperOptions:o,popperRef:p,slotProps:s,slots:t,...u,style:{position:"fixed",top:0,left:0,display:x,...q},TransitionProps:y,children:f})})});var av=c(18168),aw=c(6636);let ax=(0,av.Ay)(au,{name:"MuiPopper",slot:"Root",overridesResolver:(a,b)=>b.root})({}),ay=e.forwardRef(function(a,b){let c=(0,d.I)(),{anchorEl:e,component:f,components:g,componentsProps:h,container:i,disablePortal:j,keepMounted:k,modifiers:l,open:m,placement:n,popperOptions:o,popperRef:p,transition:q,slots:r,slotProps:s,...t}=(0,aw.b)({props:a,name:"MuiPopper"}),u=r?.root??g?.Root,v={anchorEl:e,container:i,disablePortal:j,keepMounted:k,modifiers:l,open:m,placement:n,popperOptions:o,popperRef:p,transition:q,...t};return(0,aq.jsx)(ax,{as:f,direction:c?"rtl":"ltr",slots:{root:u},slotProps:s??h,...v,ref:b})})},36698:(a,b,c)=>{c.d(b,{A:()=>f});var d=c(27080),e=c(21124);let f=(0,d.A)((0,e.jsx)("path",{d:"M9 16.17 4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z"}),"Check")},38313:(a,b,c)=>{c.d(b,{A:()=>g,f:()=>f});var d=c(29565),e=c(33105);function f(a){return(0,e.Ay)("MuiListItemIcon",a)}let g=(0,d.A)("MuiListItemIcon",["root","alignItemsFlexStart"])},43312:(a,b,c)=>{c.d(b,{A:()=>J});var d=c(38301),e=c(43249),f=c(74846),g=c(2783),h=c(37489),i=c(38404),j=c(4007),k=c(51939),l=c(18168),m=c(60839),n=c(68333),o=c(6636),p=c(6638),q=c(4927),r=c(31605),s=c(87974),t=c(26636),u=c(70300),v=c(65603),w=c(20385),x=c(29565),y=c(33105);function z(a){return(0,y.Ay)("MuiTooltip",a)}let A=(0,x.A)("MuiTooltip",["popper","popperInteractive","popperArrow","popperClose","tooltip","tooltipArrow","touch","tooltipPlacementLeft","tooltipPlacementRight","tooltipPlacementTop","tooltipPlacementBottom","arrow"]);var B=c(21124);let C=(0,l.Ay)(r.A,{name:"MuiTooltip",slot:"Popper",overridesResolver:(a,b)=>{let{ownerState:c}=a;return[b.popper,!c.disableInteractive&&b.popperInteractive,c.arrow&&b.popperArrow,!c.open&&b.popperClose]}})((0,n.A)(({theme:a})=>({zIndex:(a.vars||a).zIndex.tooltip,pointerEvents:"none",variants:[{props:({ownerState:a})=>!a.disableInteractive,style:{pointerEvents:"auto"}},{props:({open:a})=>!a,style:{pointerEvents:"none"}},{props:({ownerState:a})=>a.arrow,style:{[`&[data-popper-placement*="bottom"] .${A.arrow}`]:{top:0,marginTop:"-0.71em","&::before":{transformOrigin:"0 100%"}},[`&[data-popper-placement*="top"] .${A.arrow}`]:{bottom:0,marginBottom:"-0.71em","&::before":{transformOrigin:"100% 0"}},[`&[data-popper-placement*="right"] .${A.arrow}`]:{height:"1em",width:"0.71em","&::before":{transformOrigin:"100% 100%"}},[`&[data-popper-placement*="left"] .${A.arrow}`]:{height:"1em",width:"0.71em","&::before":{transformOrigin:"0 0"}}}},{props:({ownerState:a})=>a.arrow&&!a.isRtl,style:{[`&[data-popper-placement*="right"] .${A.arrow}`]:{left:0,marginLeft:"-0.71em"}}},{props:({ownerState:a})=>a.arrow&&!!a.isRtl,style:{[`&[data-popper-placement*="right"] .${A.arrow}`]:{right:0,marginRight:"-0.71em"}}},{props:({ownerState:a})=>a.arrow&&!a.isRtl,style:{[`&[data-popper-placement*="left"] .${A.arrow}`]:{right:0,marginRight:"-0.71em"}}},{props:({ownerState:a})=>a.arrow&&!!a.isRtl,style:{[`&[data-popper-placement*="left"] .${A.arrow}`]:{left:0,marginLeft:"-0.71em"}}}]}))),D=(0,l.Ay)("div",{name:"MuiTooltip",slot:"Tooltip",overridesResolver:(a,b)=>{let{ownerState:c}=a;return[b.tooltip,c.touch&&b.touch,c.arrow&&b.tooltipArrow,b[`tooltipPlacement${(0,p.A)(c.placement.split("-")[0])}`]]}})((0,n.A)(({theme:a})=>({backgroundColor:a.vars?a.vars.palette.Tooltip.bg:(0,h.X4)(a.palette.grey[700],.92),borderRadius:(a.vars||a).shape.borderRadius,color:(a.vars||a).palette.common.white,fontFamily:a.typography.fontFamily,padding:"4px 8px",fontSize:a.typography.pxToRem(11),maxWidth:300,margin:2,wordWrap:"break-word",fontWeight:a.typography.fontWeightMedium,[`.${A.popper}[data-popper-placement*="left"] &`]:{transformOrigin:"right center"},[`.${A.popper}[data-popper-placement*="right"] &`]:{transformOrigin:"left center"},[`.${A.popper}[data-popper-placement*="top"] &`]:{transformOrigin:"center bottom",marginBottom:"14px"},[`.${A.popper}[data-popper-placement*="bottom"] &`]:{transformOrigin:"center top",marginTop:"14px"},variants:[{props:({ownerState:a})=>a.arrow,style:{position:"relative",margin:0}},{props:({ownerState:a})=>a.touch,style:{padding:"8px 16px",fontSize:a.typography.pxToRem(14),lineHeight:`${Math.round(16/14*1e5)/1e5}em`,fontWeight:a.typography.fontWeightRegular}},{props:({ownerState:a})=>!a.isRtl,style:{[`.${A.popper}[data-popper-placement*="left"] &`]:{marginRight:"14px"},[`.${A.popper}[data-popper-placement*="right"] &`]:{marginLeft:"14px"}}},{props:({ownerState:a})=>!a.isRtl&&a.touch,style:{[`.${A.popper}[data-popper-placement*="left"] &`]:{marginRight:"24px"},[`.${A.popper}[data-popper-placement*="right"] &`]:{marginLeft:"24px"}}},{props:({ownerState:a})=>!!a.isRtl,style:{[`.${A.popper}[data-popper-placement*="left"] &`]:{marginLeft:"14px"},[`.${A.popper}[data-popper-placement*="right"] &`]:{marginRight:"14px"}}},{props:({ownerState:a})=>!!a.isRtl&&a.touch,style:{[`.${A.popper}[data-popper-placement*="left"] &`]:{marginLeft:"24px"},[`.${A.popper}[data-popper-placement*="right"] &`]:{marginRight:"24px"}}},{props:({ownerState:a})=>a.touch,style:{[`.${A.popper}[data-popper-placement*="top"] &`]:{marginBottom:"24px"}}},{props:({ownerState:a})=>a.touch,style:{[`.${A.popper}[data-popper-placement*="bottom"] &`]:{marginTop:"24px"}}}]}))),E=(0,l.Ay)("span",{name:"MuiTooltip",slot:"Arrow",overridesResolver:(a,b)=>b.arrow})((0,n.A)(({theme:a})=>({overflow:"hidden",position:"absolute",width:"1em",height:"0.71em",boxSizing:"border-box",color:a.vars?a.vars.palette.Tooltip.bg:(0,h.X4)(a.palette.grey[700],.9),"&::before":{content:'""',margin:"auto",display:"block",width:"100%",height:"100%",backgroundColor:"currentColor",transform:"rotate(45deg)"}}))),F=!1,G=new f.E,H={x:0,y:0};function I(a,b){return(c,...d)=>{b&&b(c,...d),a(c,...d)}}let J=d.forwardRef(function(a,b){let c=(0,o.b)({props:a,name:"MuiTooltip"}),{arrow:h=!1,children:l,classes:n,components:x={},componentsProps:y={},describeChild:A=!1,disableFocusListener:J=!1,disableHoverListener:K=!1,disableInteractive:L=!1,disableTouchListener:M=!1,enterDelay:N=100,enterNextDelay:O=0,enterTouchDelay:P=700,followCursor:Q=!1,id:R,leaveDelay:S=0,leaveTouchDelay:T=1500,onClose:U,onOpen:V,open:W,placement:X="bottom",PopperComponent:Y,PopperProps:Z={},slotProps:$={},slots:_={},title:aa,TransitionComponent:ab,TransitionProps:ac,...ad}=c,ae=d.isValidElement(l)?l:(0,B.jsx)("span",{children:l}),af=(0,m.A)(),ag=(0,i.I)(),[ah,ai]=d.useState(),[aj,ak]=d.useState(null),al=d.useRef(!1),am=L||Q,an=(0,f.A)(),ao=(0,f.A)(),ap=(0,f.A)(),aq=(0,f.A)(),[ar,as]=(0,v.A)({controlled:W,default:!1,name:"Tooltip",state:"open"}),at=ar,au=(0,u.A)(R),av=d.useRef(),aw=(0,s.A)(()=>{void 0!==av.current&&(document.body.style.WebkitUserSelect=av.current,av.current=void 0),aq.clear()});d.useEffect(()=>aw,[aw]);let ax=a=>{G.clear(),F=!0,as(!0),V&&!at&&V(a)},ay=(0,s.A)(a=>{G.start(800+S,()=>{F=!1}),as(!1),U&&at&&U(a),an.start(af.transitions.duration.shortest,()=>{al.current=!1})}),az=a=>{al.current&&"touchstart"!==a.type||(ah&&ah.removeAttribute("title"),ao.clear(),ap.clear(),N||F&&O?ao.start(F?O:N,()=>{ax(a)}):ax(a))},aA=a=>{ao.clear(),ap.start(S,()=>{ay(a)})},[,aB]=d.useState(!1),aC=a=>{(0,j.A)(a.target)||(aB(!1),aA(a))},aD=a=>{ah||ai(a.currentTarget),(0,j.A)(a.target)&&(aB(!0),az(a))},aE=a=>{al.current=!0;let b=ae.props;b.onTouchStart&&b.onTouchStart(a)};d.useEffect(()=>{if(at)return document.addEventListener("keydown",a),()=>{document.removeEventListener("keydown",a)};function a(a){"Escape"===a.key&&ay(a)}},[ay,at]);let aF=(0,t.A)((0,k.A)(ae),ai,b);aa||0===aa||(at=!1);let aG=d.useRef(),aH={},aI="string"==typeof aa;A?(aH.title=at||!aI||K?null:aa,aH["aria-describedby"]=at?au:null):(aH["aria-label"]=aI?aa:null,aH["aria-labelledby"]=at&&!aI?au:null);let aJ={...aH,...ad,...ae.props,className:(0,e.A)(ad.className,ae.props.className),onTouchStart:aE,ref:aF,...Q?{onMouseMove:a=>{let b=ae.props;b.onMouseMove&&b.onMouseMove(a),H={x:a.clientX,y:a.clientY},aG.current&&aG.current.update()}}:{}},aK={};M||(aJ.onTouchStart=a=>{aE(a),ap.clear(),an.clear(),aw(),av.current=document.body.style.WebkitUserSelect,document.body.style.WebkitUserSelect="none",aq.start(P,()=>{document.body.style.WebkitUserSelect=av.current,az(a)})},aJ.onTouchEnd=a=>{ae.props.onTouchEnd&&ae.props.onTouchEnd(a),aw(),ap.start(T,()=>{ay(a)})}),!K&&(aJ.onMouseOver=I(az,aJ.onMouseOver),aJ.onMouseLeave=I(aA,aJ.onMouseLeave),am||(aK.onMouseOver=az,aK.onMouseLeave=aA)),!J&&(aJ.onFocus=I(aD,aJ.onFocus),aJ.onBlur=I(aC,aJ.onBlur),am||(aK.onFocus=aD,aK.onBlur=aC));let aL={...c,isRtl:ag,arrow:h,disableInteractive:am,placement:X,PopperComponentProp:Y,touch:al.current},aM="function"==typeof $.popper?$.popper(aL):$.popper,aN=d.useMemo(()=>{let a=[{name:"arrow",enabled:!!aj,options:{element:aj,padding:4}}];return Z.popperOptions?.modifiers&&(a=a.concat(Z.popperOptions.modifiers)),aM?.popperOptions?.modifiers&&(a=a.concat(aM.popperOptions.modifiers)),{...Z.popperOptions,...aM?.popperOptions,modifiers:a}},[aj,Z.popperOptions,aM?.popperOptions]),aO=(a=>{let{classes:b,disableInteractive:c,arrow:d,touch:e,placement:f}=a,h={popper:["popper",!c&&"popperInteractive",d&&"popperArrow"],tooltip:["tooltip",d&&"tooltipArrow",e&&"touch",`tooltipPlacement${(0,p.A)(f.split("-")[0])}`],arrow:["arrow"]};return(0,g.A)(h,z,b)})(aL),aP="function"==typeof $.transition?$.transition(aL):$.transition,aQ={slots:{popper:x.Popper,transition:x.Transition??ab,tooltip:x.Tooltip,arrow:x.Arrow,..._},slotProps:{arrow:$.arrow??y.arrow,popper:{...Z,...aM??y.popper},tooltip:$.tooltip??y.tooltip,transition:{...ac,...aP??y.transition}}},[aR,aS]=(0,w.A)("popper",{elementType:C,externalForwardedProps:aQ,ownerState:aL,className:(0,e.A)(aO.popper,Z?.className)}),[aT,aU]=(0,w.A)("transition",{elementType:q.A,externalForwardedProps:aQ,ownerState:aL}),[aV,aW]=(0,w.A)("tooltip",{elementType:D,className:aO.tooltip,externalForwardedProps:aQ,ownerState:aL}),[aX,aY]=(0,w.A)("arrow",{elementType:E,className:aO.arrow,externalForwardedProps:aQ,ownerState:aL,ref:ak});return(0,B.jsxs)(d.Fragment,{children:[d.cloneElement(ae,aJ),(0,B.jsx)(aR,{as:Y??r.A,placement:X,anchorEl:Q?{getBoundingClientRect:()=>({top:H.y,left:H.x,right:H.x,bottom:H.y,width:0,height:0})}:ah,popperRef:aG,open:!!ah&&at,id:au,transition:!0,...aK,...aS,popperOptions:aN,children:({TransitionProps:a})=>(0,B.jsx)(aT,{timeout:af.transitions.duration.shorter,...a,...aU,children:(0,B.jsxs)(aV,{...aW,children:[aa,h?(0,B.jsx)(aX,{...aY}):null]})})})]})})},50553:(a,b,c)=>{c.d(b,{A:()=>n});var d=c(38301),e=c(43249),f=c(2783),g=c(18168),h=c(68333),i=c(6636),j=c(38313),k=c(55470),l=c(21124);let m=(0,g.Ay)("div",{name:"MuiListItemIcon",slot:"Root",overridesResolver:(a,b)=>{let{ownerState:c}=a;return[b.root,"flex-start"===c.alignItems&&b.alignItemsFlexStart]}})((0,h.A)(({theme:a})=>({minWidth:56,color:(a.vars||a).palette.action.active,flexShrink:0,display:"inline-flex",variants:[{props:{alignItems:"flex-start"},style:{marginTop:8}}]}))),n=d.forwardRef(function(a,b){let c=(0,i.b)({props:a,name:"MuiListItemIcon"}),{className:g,...h}=c,n=d.useContext(k.A),o={...c,alignItems:n.alignItems},p=(a=>{let{alignItems:b,classes:c}=a;return(0,f.A)({root:["root","flex-start"===b&&"alignItemsFlexStart"]},j.f,c)})(o);return(0,l.jsx)(m,{className:(0,e.A)(p.root,g),ownerState:o,ref:b,...h})})},76345:(a,b,c)=>{c.d(b,{A:()=>g,b:()=>f});var d=c(29565),e=c(33105);function f(a){return(0,e.Ay)("MuiListItemText",a)}let g=(0,d.A)("MuiListItemText",["root","multiline","dense","inset","primary","secondary"])},84233:(a,b,c)=>{c.d(b,{A:()=>p});var d=c(38301),e=c(43249),f=c(2783),g=c(29071),h=c(79515),i=c(55470),j=c(18168),k=c(6636),l=c(76345),m=c(20385),n=c(21124);let o=(0,j.Ay)("div",{name:"MuiListItemText",slot:"Root",overridesResolver:(a,b)=>{let{ownerState:c}=a;return[{[`& .${l.A.primary}`]:b.primary},{[`& .${l.A.secondary}`]:b.secondary},b.root,c.inset&&b.inset,c.primary&&c.secondary&&b.multiline,c.dense&&b.dense]}})({flex:"1 1 auto",minWidth:0,marginTop:4,marginBottom:4,[`.${g.A.root}:where(& .${l.A.primary})`]:{display:"block"},[`.${g.A.root}:where(& .${l.A.secondary})`]:{display:"block"},variants:[{props:({ownerState:a})=>a.primary&&a.secondary,style:{marginTop:6,marginBottom:6}},{props:({ownerState:a})=>a.inset,style:{paddingLeft:56}}]}),p=d.forwardRef(function(a,b){let c=(0,k.b)({props:a,name:"MuiListItemText"}),{children:g,className:j,disableTypography:p=!1,inset:q=!1,primary:r,primaryTypographyProps:s,secondary:t,secondaryTypographyProps:u,slots:v={},slotProps:w={},...x}=c,{dense:y}=d.useContext(i.A),z=null!=r?r:g,A=t,B={...c,disableTypography:p,inset:q,primary:!!z,secondary:!!A,dense:y},C=(a=>{let{classes:b,inset:c,primary:d,secondary:e,dense:g}=a;return(0,f.A)({root:["root",c&&"inset",g&&"dense",d&&e&&"multiline"],primary:["primary"],secondary:["secondary"]},l.b,b)})(B),D={slots:v,slotProps:{primary:s,secondary:u,...w}},[E,F]=(0,m.A)("root",{className:(0,e.A)(C.root,j),elementType:o,externalForwardedProps:{...D,...x},ownerState:B,ref:b}),[G,H]=(0,m.A)("primary",{className:C.primary,elementType:h.default,externalForwardedProps:D,ownerState:B}),[I,J]=(0,m.A)("secondary",{className:C.secondary,elementType:h.default,externalForwardedProps:D,ownerState:B});return null==z||z.type===h.default||p||(z=(0,n.jsx)(G,{variant:y?"body2":"body1",component:H?.variant?void 0:"span",...H,children:z})),null==A||A.type===h.default||p||(A=(0,n.jsx)(I,{variant:"body2",color:"textSecondary",...J,children:A})),(0,n.jsxs)(E,{...F,children:[z,A]})})},94367:(a,b,c)=>{c.d(b,{A:()=>y});var d=c(38301),e=c(43249),f=c(2783),g=c(37489),h=c(41126),i=c(18168),j=c(68333),k=c(6636),l=c(55470),m=c(14328),n=c(14758),o=c(26636),p=c(93895),q=c(38313),r=c(76345),s=c(29565),t=c(33105);function u(a){return(0,t.Ay)("MuiMenuItem",a)}let v=(0,s.A)("MuiMenuItem",["root","focusVisible","dense","disabled","divider","gutters","selected"]);var w=c(21124);let x=(0,i.Ay)(m.A,{shouldForwardProp:a=>(0,h.A)(a)||"classes"===a,name:"MuiMenuItem",slot:"Root",overridesResolver:(a,b)=>{let{ownerState:c}=a;return[b.root,c.dense&&b.dense,c.divider&&b.divider,!c.disableGutters&&b.gutters]}})((0,j.A)(({theme:a})=>({...a.typography.body1,display:"flex",justifyContent:"flex-start",alignItems:"center",position:"relative",textDecoration:"none",minHeight:48,paddingTop:6,paddingBottom:6,boxSizing:"border-box",whiteSpace:"nowrap","&:hover":{textDecoration:"none",backgroundColor:(a.vars||a).palette.action.hover,"@media (hover: none)":{backgroundColor:"transparent"}},[`&.${v.selected}`]:{backgroundColor:a.vars?`rgba(${a.vars.palette.primary.mainChannel} / ${a.vars.palette.action.selectedOpacity})`:(0,g.X4)(a.palette.primary.main,a.palette.action.selectedOpacity),[`&.${v.focusVisible}`]:{backgroundColor:a.vars?`rgba(${a.vars.palette.primary.mainChannel} / calc(${a.vars.palette.action.selectedOpacity} + ${a.vars.palette.action.focusOpacity}))`:(0,g.X4)(a.palette.primary.main,a.palette.action.selectedOpacity+a.palette.action.focusOpacity)}},[`&.${v.selected}:hover`]:{backgroundColor:a.vars?`rgba(${a.vars.palette.primary.mainChannel} / calc(${a.vars.palette.action.selectedOpacity} + ${a.vars.palette.action.hoverOpacity}))`:(0,g.X4)(a.palette.primary.main,a.palette.action.selectedOpacity+a.palette.action.hoverOpacity),"@media (hover: none)":{backgroundColor:a.vars?`rgba(${a.vars.palette.primary.mainChannel} / ${a.vars.palette.action.selectedOpacity})`:(0,g.X4)(a.palette.primary.main,a.palette.action.selectedOpacity)}},[`&.${v.focusVisible}`]:{backgroundColor:(a.vars||a).palette.action.focus},[`&.${v.disabled}`]:{opacity:(a.vars||a).palette.action.disabledOpacity},[`& + .${p.A.root}`]:{marginTop:a.spacing(1),marginBottom:a.spacing(1)},[`& + .${p.A.inset}`]:{marginLeft:52},[`& .${r.A.root}`]:{marginTop:0,marginBottom:0},[`& .${r.A.inset}`]:{paddingLeft:36},[`& .${q.A.root}`]:{minWidth:36},variants:[{props:({ownerState:a})=>!a.disableGutters,style:{paddingLeft:16,paddingRight:16}},{props:({ownerState:a})=>a.divider,style:{borderBottom:`1px solid ${(a.vars||a).palette.divider}`,backgroundClip:"padding-box"}},{props:({ownerState:a})=>!a.dense,style:{[a.breakpoints.up("sm")]:{minHeight:"auto"}}},{props:({ownerState:a})=>a.dense,style:{minHeight:32,paddingTop:4,paddingBottom:4,...a.typography.body2,[`& .${q.A.root} svg`]:{fontSize:"1.25rem"}}}]}))),y=d.forwardRef(function(a,b){let c,g=(0,k.b)({props:a,name:"MuiMenuItem"}),{autoFocus:h=!1,component:i="li",dense:j=!1,divider:m=!1,disableGutters:p=!1,focusVisibleClassName:q,role:r="menuitem",tabIndex:s,className:t,...v}=g,y=d.useContext(l.A),z=d.useMemo(()=>({dense:j||y.dense||!1,disableGutters:p}),[y.dense,j,p]),A=d.useRef(null);(0,n.A)(()=>{h&&A.current&&A.current.focus()},[h]);let B={...g,dense:z.dense,divider:m,disableGutters:p},C=(a=>{let{disabled:b,dense:c,divider:d,disableGutters:e,selected:g,classes:h}=a,i=(0,f.A)({root:["root",c&&"dense",b&&"disabled",!e&&"gutters",d&&"divider",g&&"selected"]},u,h);return{...h,...i}})(g),D=(0,o.A)(A,b);return g.disabled||(c=void 0!==s?s:-1),(0,w.jsx)(l.A.Provider,{value:z,children:(0,w.jsx)(x,{ref:D,role:r,tabIndex:c,component:i,focusVisibleClassName:(0,e.A)(C.focusVisible,q),className:(0,e.A)(C.root,t),...v,ownerState:B,classes:C})})})}};
@@ -1,8 +0,0 @@
1
- "use strict";exports.id=1403,exports.ids=[1403],exports.modules={8193:(a,b,c)=>{c.d(b,{s:()=>r});var d=c(50846),e=c(38611),f=c(75312),g=c(83964),h=c(78975),i=c(20433),j=c(41561),k=c(24423),l=c(23514),m=c(77213),n=c(14214),o=c(76813),p=c(32524);let q=(0,d.h)("backend/flow/execution/handlers/ModelHandler");class r{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){q.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(91403),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){q.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:s,requireToolApproval:t}=a;try{let a=await i.modelService.getModel(c);a&&(a.displayName||a.name,a.name,b=a.maxTurns)}catch(a){q.warn(`Failed to fetch model information for prefix: ${a instanceof Error?a.message:String(a)}`)}let u=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);q.info("callModel - Single execution",{modelId:c,messagesCount:e.length,toolsCount:g?.length||0,nodeName:h,nodeId:k}),q.verbose("callModel input",a);let v=s?n.$.emitterFor(s):void 0,w=t&&v&&s?async a=>{let b={id:a.id,type:"function",function:{name:a.name,arguments:JSON.stringify(a.args??{})}};return new Promise(a=>{(0,o.sf)(s,b,a),v({type:"run:awaiting_approval",pendingToolCalls:(0,o.Rt)(s)})})}:void 0,x=v?a=>{let b=k?{...a,processNodeId:k}:a;v({type:"message",message:b,node:k?{nodeId:k}:void 0}),s&&r.persistStreamedMessage(s,b)}:void 0,y=await this.generateCompletion(c,d,f??e,g,{toolNameMap:l,maxTurns:u,requestToolApproval:w,onTranscriptMessage:x});if(!y.success)return q.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,p.A)(),timestamp:c.timestamp??a+d,processNodeId:k,...e&&C?{usage:C}:{}})})}else{let a={id:(0,p.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 q.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 q.verbose("callModel single step result",E),E}static async generateCompletion(a,b,d,f,j){q.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)};q.verbose(`decrypted api key ${m}`),q.verbose(` baseurl ${h.baseUrl}`);let n=(0,g.ae)(d);if(f&&f.length>0){let{ToolHandler:a}=c(14159);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);q.debug("calling chatcompletion"),q.verbose("calling chatcompletion now with ADAPTER",h.adapter||"openai"),q.verbose("calling chatcompletion now with MODEL",h.name),q.verbose("calling chatcompletion now with TEMP",l),q.verbose("calling chatcompletion now with MESSAGES",n),q.verbose("calling chatcompletion now with TOOLS",b),q.debug("[ModelHandler.generateCompletion] Sending request via adapter",{adapter:h.adapter||"openai",model:h.name});let{completion:p,transcript:s}=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(q.debug("[ModelHandler.generateCompletion] Received raw response from OpenAI API",{response:p}),q.verbose("chatcompletion returned"),q.verbose("chatcompletion returned",p),p&&"object"==typeof p&&"error"in p&&p.error){q.warn("API call returned successfully but contained an error object:",JSON.stringify(p.error));let b=p.error,c=r.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 q.verbose("generateCompletion returning error from response body",d),d}let t=p?.choices?.[0];if(!t)return q.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 u={success:!0,value:{content:t.message?.content||"",messages:[...d],fullResponse:p,transcript:s}};return q.verbose("generateCompletion success result",u),u}catch(c){if(q.error("[ModelHandler.generateCompletion] Caught error during OpenAI API call",{rawError:c}),q.error("--- Error during openai.chat.completions.create ---"),c instanceof Error?(q.error(`Error Name: ${c.name}`),q.error(`Error Message: ${c.message}`),q.error(`Error Stack: ${c.stack}`)):q.error("Caught non-Error object:",c),c instanceof h.Ay.APIError&&(q.error(`API Error Status: ${c.status}`),q.error(`API Error Type: ${c.type}`),q.error(`API Error Code: ${c.code}`),q.error(`API Error Param: ${c.param}`),q.error(`API Error Headers: ${JSON.stringify(c.headers)}`)),q.error("--- End Error Details ---"),c instanceof h.Ay.APIError){let b=c.error,d=r.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 q.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 q.verbose("generateCompletion unknown error",b),b}}static async processToolCalls(a){let{toolCalls:b,toolNameMap:c,emit:d}=a;if(q.verbose("processToolCalls input",a),!b||0===b.length){let a={success:!0,value:{toolCallMessages:[],processedToolCalls:[]}};return q.verbose("processToolCalls empty result",a),a}try{let a=[],e=[];for(let g of b){let{id:b,function:{name:h,arguments:i}}=g;try{let g=JSON.parse(i);if(q.info("trying to call tool",h),h.startsWith("handoff_to_")||"handoff"===h){q.info(`Processing handoff tool: ${h}`);let c={handoff:!0,args:g},d=JSON.stringify(c);a.push({id:(0,p.A)(),role:"tool",tool_call_id:b,content:d,timestamp:Date.now()}),e.push({name:h,args:g,id:b,result:d});continue}let j=(0,f.ud)(h,c);if(!j)throw q.error("invalid tool format",h),Error(`Invalid tool name format: ${h}`);let k=j.server,n=j.tool;d?.({type:"tool:call",toolCallId:b,name:h,args:i});let o=j.timeout??m.aI,s=await l.mcpService.callTool(k,n,g,o,a=>d?.({type:"tool:progress",toolCallId:b,name:h,progress:a.progress,total:a.total,message:a.message})),t=s.success?JSON.stringify(s.data):`Error: ${s.error}`;d?.({type:"tool:result",toolCallId:b,name:h,result:t.length>500?`${t.slice(0,500)}…`:t,isError:!s.success});let u=s.success?await r.resolveToolUiLink(k,s.data):void 0;a.push({id:(0,p.A)(),role:"tool",tool_call_id:b,content:t,timestamp:Date.now(),...u?{ui:u}:{}}),e.push({name:h,args:g,id:b,result:t})}catch(f){let c=`Error: ${f instanceof Error?f.message:"Unknown error"}`;d?.({type:"tool:result",toolCallId:b,name:h,result:c,isError:!0}),a.push({id:(0,p.A)(),role:"tool",tool_call_id:b,content:c,timestamp:Date.now()}),e.push({name:h,args:{},id:b,result:c})}}let g={success:!0,value:{toolCallMessages:a,processedToolCalls:e}};return q.verbose("processToolCalls success result",g),g}catch(b){let a={success:!1,error:(0,e.Po)("tool_processing_failed",b instanceof Error?b.message:String(b),"unknown")};return q.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)}}},14159:(a,b,c)=>{c.r(b),c.d(b,{ToolHandler:()=>i});var d=c(50846),e=c(38611),f=c(23514),g=c(75312);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}}}},14214:(a,b,c)=>{c.d(b,{$:()=>i});var d=c(94735),e=c(60184);let f=(0,c(50846).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)},35205:(a,b,c)=>{c.d(b,{t:()=>s,p:()=>r});var d=c(87821),e=c(20433),f=c(23514),g=c(50846),h=c(67490);function i(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()}…`}function j(a,b,c){let d=" ".repeat(b);if(a.userDescription&&a.userDescription.trim())return void c.push(`${d}${i(a.userDescription,200)}`);if("subflow"===a.type){if(a.subflowMissing)return void c.push(`${d}Runs a subflow (referenced flow not found).`);if(a.subflowDetailsUnavailable){let b=a.subflowName?` "${a.subflowName}"`:"";c.push(`${d}Runs a subflow${b} (contents summarised when the flow runs).`);return}if(c.push(`${d}Runs the subflow "${a.subflowName??"unknown"}", which contains:`),a.depthCapReached)return void c.push(`${d} (nested subflows omitted — recursion depth limit reached)`);let e=a.children??[];if(0===e.length)return void c.push(`${d} (no process or subflow steps)`);for(let a of e.slice(0,10))c.push(`${d} - ${a.label}:`),j(a,b+2,c);return void(e.length>10&&c.push(`${d} - …and ${e.length-10} more step(s)`))}if(a.modelName&&c.push(`${d}Model: ${a.modelName}`),a.promptSummary&&c.push(`${d}Role: ${i(a.promptSummary,200)}`),a.servers&&a.servers.length>0)for(let b of a.servers)if(b.connected&&b.tools&&b.tools.length>0){let a=b.tools.slice(0,10),e=b.tools.length-a.length,f=e>0?`, +${e} more`:"";c.push(`${d}Tools (${b.name}): ${a.join(", ")}${f}`)}else c.push(`${d}Tools (${b.name}): server not connected`)}let k=(0,g.h)("backend/execution/flow/buildHandoffDescription");function l(){return{modelNames:new Map,serverConnected:new Map,flows:new Map}}async function m(a,b){if(!a)return;if(b.modelNames.has(a))return b.modelNames.get(a);let c=a;try{let b=await e.modelService.getModel(a);b&&(c=b.displayName&&b.displayName.trim()||b.name||a)}catch(b){k.debug("resolveModelName failed; using raw id",{modelId:a,err:b})}return b.modelNames.set(a,c),c}async function n(a,b){if(b.serverConnected.has(a))return b.serverConnected.get(a);let c=!1;try{let b=await f.mcpService.getServerStatus(a);c=b?.status==="connected"}catch(b){k.debug("getServerStatus failed; treating server as offline",{server:a,err:b})}return b.serverConnected.set(a,c),c}async function o(a,b){if(b.flows.has(a))return b.flows.get(a);let c=null;try{c=await d.flowService.getFlow(a)}catch(b){k.debug("getFlow failed while summarising subflow",{flowId:a,err:b})}return b.flows.set(a,c),c}async function p(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 n(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 q(a,b,c,d){let e=a.data?.type||a.type||"unknown",f=a.data?.label||"Unknown Node",g=a.data?.properties||{},i=a.data?.description,j={label:f,type:e,userDescription:i};if(i&&i.trim())return j;if("subflow"===e){let a=g.subflowId;if(!a)return j.subflowMissing=!0,j;if(b+1>h.A||d.has(a)){j.depthCapReached=!0;let b=await o(a,c);return j.subflowName=b?.name,j}let e=await o(a,c);if(!e)return j.subflowMissing=!0,j;j.subflowName=e.name;let f=new Set(d);f.add(a);let i=(e.nodes||[]).filter(a=>a.data?.type==="process"||a.data?.type==="subflow"||"process"===a.type||"subflow"===a.type);for(let a of(j.children=[],i))j.children.push(await q(a,b+1,c,f));return j}j.modelName=await m(g.boundModel,c);let k=g.promptTemplate;return"string"==typeof k&&k.trim()&&(j.promptSummary=k),j.servers=await p(g,c),j}async function r(a){try{let b=await q(a,0,l(),new Set);return function(a){if(a.userDescription&&a.userDescription.trim())return i(a.userDescription,1500);let b=`Hand off execution to ${a.label} (${a.type}).`,c=[];j(a,0,c);let d=c.join("\n").trim(),e=d?`${b}
2
- ${d}`:b;if(e.length<=1500)return e;let f=1500-b.length-2;return f<=0?b:`${b}
3
- ${i(d,f)}`}(b)}catch(d){let b=a.data?.label||"Unknown Node",c=a.data?.type||a.type||"unknown";return k.warn("buildHandoffDescription failed; falling back to basic description",{label:b,type:c,err:d}),`Hand off execution to ${b} (${c})`}}async function s(a){try{let b=l(),c=new Set([a.id]),d=(a.nodes||[]).filter(a=>a.data?.type==="process"||a.data?.type==="subflow"||"process"===a.type||"subflow"===a.type),e=[];for(let a of d)e.push(await q(a,1,b,c));return function(a,b,c){let d=`Runs the FLUJO flow "${a}".`,e=[],f=b.slice(0,10);if(f.length>0){for(let a of(e.push("Steps:"),f))e.push(` - ${a.label}:`),j(a,2,e);b.length>10&&e.push(` - …and ${b.length-10} more step(s)`)}let g=e.join("\n").trim(),h=g?`${d}
4
- ${g}`:d;if(h.length<=1500)return h;let k=1500-d.length-2;return k<=0?d:`${d}
5
- ${i(g,k)}`}(a.name,e)}catch(b){return k.warn("buildFlowToolDescription failed; falling back to basic description",{flow:a?.name,err:b}),`Runs the FLUJO flow "${a?.name??"unknown"}".`}}},38611:(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})},60184:(a,b,c)=>{c.d(b,{$b:()=>z,D$:()=>r,LB:()=>q,Os:()=>t,RU:()=>u,UG:()=>x,cc:()=>v,jM:()=>y,u8:()=>s});var d=c(29021),e=c(33873),f=c.n(e),g=c(50846),h=c(43326);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","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)}
6
- `}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(91403),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}async function u(a){if(k.test(a))try{await d.promises.unlink(m(a))}catch(b){"ENOENT"!==b.code&&i.warn(`Error deleting conversation log ${a}:`,b)}}function v(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 w(a){return JSON.stringify([a.role,a.content,a.tool_calls??null,a.disabled??!1,a.processNodeId??null])}async function x(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 A(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&&w(b)===w(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 y(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=v(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 z(a){if(a.ephemeral)return;let b=a.conversationId;if(!b||!k.test(b))return;let c=await t(b);if(!c)return;let e=v(c).filter(a=>!((a.depth??0)>0)),f=(a.messages??[]).filter(a=>"system"!==a.role&&!!a.id);if(e.length>=f.length)return;let g=new Set(f.map(a=>a.id));if(!e.every(a=>g.has(a.id)))return;let h=f.map(a=>p({type:"message",message:a,conversationId:b,seq:-1,timestamp:Date.now()})).join("");try{await function(a,b){let c=(n.get(a)??Promise.resolve()).catch(()=>{}).then(async()=>{await d.promises.mkdir(l,{recursive:!0}),await d.promises.writeFile(m(a),b)});return n.set(a,c),c.finally(()=>{n.get(a)===c&&n.delete(a)})}(b,h),i.info(`Rebuilt truncated conversation log for ${b} from snapshot (${e.length} → ${f.length} message(s)); issue #49 self-heal.`)}catch(a){i.warn(`Failed to rebuild truncated conversation log ${b}`,{err:a})}return f}async function A(a){if(!k.test(a))return!1;try{return await d.promises.access(m(a)),!0}catch{return!1}}},67490:(a,b,c)=>{c.d(b,{A:()=>d});let d=8},75312:(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)}},76813:(a,b,c)=>{c.d(b,{J:()=>g,Rt:()=>h,sf:()=>f});let d=globalThis,e=d.__flujoToolApprovals??(d.__flujoToolApprovals=new Map);function f(a,b,c){let d=e.get(a);d||(d=new Map,e.set(a,d)),d.set(b.id,{toolCall:b,resolve:c})}function g(a,b,c){let d=e.get(a),f=d?.get(b);return!!d&&!!f&&(d.delete(b),0===d.size&&e.delete(a),f.resolve(c),!0)}function h(a){let b=e.get(a);return b?Array.from(b.values(),a=>a.toolCall):[]}},83964:(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})},91403:(a,b,c)=>{c.r(b),c.d(b,{FlowExecutor:()=>R});var d=c(50846),e=c(99978),f=c(91373),g=c.n(f),h=c(13516),i=c(87821);let j=(0,d.h)("backend/execution/flow/temp_pocket"),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",JSON.stringify({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",JSON.stringify({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",JSON.stringify({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",JSON.stringify({sharedState:a,node_params:b})),j.debug("Flow prep finished. Returning empty object"),j.verbose("Flow prep result",JSON.stringify({})),{}}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",JSON.stringify({prepResult:a,execResult:b,node_params:d})),j.debug("Flow post finished. Returning DEFAULT_ACTION"),j.verbose("Flow post result",JSON.stringify({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(60724),q=c(14159),r=c(8193),s=c(83964),t=c(35205);let u="handoff_to_";var v=c(32524);let w=(0,d.h)("backend/flow/execution/nodes/ProcessNode");class x extends l{async generateHandoffTools(a){w.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"));w.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){w.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=`${u}${a}`;if(b.has(e)){let c=2;for(;b.has(`${u}${a}_${c}`);)c++;e=`${u}${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){w.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 (0,t.p)(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}
7
-
8
- 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:[]}}),w.debug("Created handoff tool",{toolName:c,targetNodeId:b.id,targetNodeLabel:b.label})}return w.info("Generated handoff tools",{toolsCount:g.length}),g}async prep(a,b){w.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(w.debug("Extracted properties",{nodeId:c,flowId:d,boundModel:e,excludeModelPrompt:f,excludeStartNodePrompt:g,excludeSystemPrompt:h}),!c||!d)throw w.error("Missing required node or flow ID",{nodeId:c,flowId:d}),Error("Process node requires node ID and flow ID");if(!e)throw w.error("Missing bound model"),Error("Process node requires a bound model");w.info("Using promptRenderer to build the complete prompt");let j=await p.h.renderPrompt(d,c,{renderMode:"rendered",includeConversationHistory:!1,excludeModelPrompt:f,excludeStartNodePrompt:g,excludeSystemPrompt:h});w.debug("Prompt rendered successfully",{completePromptLength:j.length,completePromptPreview:j.length>100?j.substring(0,100)+"...":j}),a.currentNodeId=c;let k=[];if(a.mcpContext&&a.mcpContext.availableTools&&a.mcpContext.availableTools.length>0)w.info("Using MCP tools from shared state",{toolsCount:a.mcpContext.availableTools.length}),k=a.mcpContext.availableTools;else{let a=b?.properties?.mcpNodes||[];if(a.length>0){w.info("No MCP tools found in shared state, processing MCP nodes",{mcpNodesCount:a.length});let b=await q.ToolHandler.processMCPNodes({mcpNodes:a});if(!b.success)throw w.error("Failed to process MCP nodes",{error:b.error}),Error(`Failed to process MCP nodes: ${b.error.message}`);k=b.value.availableTools}}for(let b of(k=[...k,...await this.generateHandoffTools(a)],a.toolNameMap=a.toolNameMap||{},k))b.server&&b.originalName&&(a.toolNameMap[b.name]={server:b.server,tool:b.originalName,timeout:b.timeout});let l={nodeId:c,nodeType:"process",currentPrompt:j,boundModel:e,availableTools:k,messages:[],conversationId:a.conversationId,requireToolApproval:a.requireApproval??!1},m={id:(0,v.A)(),role:"system",content:j,timestamp:Date.now()};w.info("Added system message from prompt template",{contentLength:j.length,contentPreview:j.length>100?j.substring(0,100)+"...":j}),l.messages=(0,s.Ui)(a.messages,m);let n=b?.properties?.inputMode??"full-history",o=l.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));o=(0,s.Qv)(l.messages,b)}catch(a){w.warn("Could not resolve outputMode collapse set; sending the full wire view",{err:a})}return("full-history"!==n||o!==l.messages)&&(l.wireMessages=(0,s.ij)(o,n,b?.properties?.isolatedPrompt)),w.info("Assembled node context",{systemMessageCount:1,totalMessageCount:l.messages.length,inputMode:n,wireMessageCount:l.wireMessages?.length}),w.info("prep() completed",{completePromptLength:j.length,boundModel:e,hasTools:!!l.availableTools?.length,toolsCount:l.availableTools?.length||0,messagesCount:l.messages.length}),l}async execCore(a,b){w.info("execCore() started",{boundModel:a.boundModel,promptLength:a.currentPrompt?.length,messagesCount:a.messages?.length||0}),w.debug("execCore() prepResult",a);try{let c,d;if(a.availableTools&&a.availableTools.length>0){let b=q.ToolHandler.prepareTools({availableTools:a.availableTools});if(!b.success)throw w.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;w.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 r.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?w.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}):w.warn(`[ProcessNode ${a.nodeId}] ModelHandler.callModel returned failure state unexpectedly here`,{success:!1,error:c.error})}catch(b){throw w.error(`[ProcessNode ${a.nodeId}] Error calling ModelHandler.callModel`,{error:b}),b}finally{w.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."};w.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},w.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&&w.info("Tool calls found in model response",{toolCallsCount:h.toolCalls.length,toolNames:h.toolCalls.map(a=>a.name).join(", ")}),w.info("execCore() completed",{responseLength:i.content?.length||0,messagesCount:i.messages?.length||0,hasToolCalls:!!i.toolCalls?.length}),w.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 w.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 w.error("execCore() failed",{error:a.error,errorDetails:a.errorDetails}),w.verbose("execCore() errorResult",a),a}}processHandoffToolCalls(a,b){if(!a||0===a.length)return!1;w.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},w.info(`Handoff requested to node ${d}`,{edgeId:e,toolName:a}),!0}}}return!1}async post(a,b,c,d){if(w.debug(`[ProcessNode ${d?.id}] post() method started.`),w.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),w.warn(`Execution failed for node ${d?.id}. Returning ERROR_ACTION.`),e.O;if(c.lastResponse=b.content||"",b.messages&&b.messages.length>0&&(c.messages=b.messages.filter(a=>"system"!==a.role),w.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()}),w.info("Added ProcessNode tracking information",{modelDisplayName:a.modelDisplayName,modelTechnicalName:a.boundModel})),this.processHandoffToolCalls(b.toolCalls,c)&&c.handoffRequested){let a=c.handoffRequested.edgeId;return w.info(`Handoff requested via tool call, returning edge ID: ${a}`),a}let f=b.toolCalls?.filter(a=>!a.name.startsWith("handoff_to_"));return f&&f.length>0?(w.info("Non-handoff tool calls detected, returning TOOL_CALL_ACTION"),e.Jp):(w.info("No tool calls or handoff requested, returning FINAL_RESPONSE_ACTION"),e.g4)}_clone(){return new x}}var y=c(38611),z=c(23514);let A=(0,d.h)("backend/flow/execution/handlers/MCPHandler");class B{static async executeMCP(a){let{mcpServer:b,enabledTools:c,nodeId:d,nodeRoots:e}=a;A.verbose("executeMCP input",JSON.stringify(a));try{d&&z.mcpService.setNodeRoots(b,d,e);let a=await z.mcpService.getServerStatus(b);if("connected"!==a.status){let a=await z.mcpService.connectServer(b);if(!a.success){let c={success:!1,error:(0,y.Fp)("server_connection_failed",`Failed to connect to MCP server: ${a.error}`,b,"connect")};return A.verbose("executeMCP connection error",JSON.stringify(c)),c}}let f=await z.mcpService.listServerTools(b);if(f.error){let a={success:!1,error:(0,y.Fp)("list_tools_failed",`Failed to list tools for server: ${f.error}`,b,"listTools")};return A.verbose("executeMCP list tools error",JSON.stringify(a)),a}let g={success:!0,value:{server:b,tools:f.tools||[],enabledTools:c}};return A.verbose("executeMCP success result",JSON.stringify(g)),g}catch(c){let a={success:!1,error:(0,y.Fp)("mcp_execution_failed",c instanceof Error?c.message:String(c),b,"executeMCP")};return A.verbose("executeMCP execution error",JSON.stringify(a)),a}}}var C=c(75312);let D=(0,d.h)("backend/flow/execution/nodes/MCPNode");class E extends l{async prep(a,b){D.info("prep() started");let c=b?.id||"",d=b?.properties?.boundServer,e=b?.properties?.enabledTools||[],f=b?.properties?.roots||[];if(!d)throw D.error("Missing bound server"),Error("MCP node requires a bound server");return D.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){D.info("execCore() started",{mcpServer:a.mcpServer}),D.verbose("execCore() prepResult",JSON.stringify(a));try{let b=await B.executeMCP({mcpServer:a.mcpServer,enabledTools:a.enabledTools,nodeId:a.nodeId,nodeRoots:a.nodeRoots});if(!b.success)throw D.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 D.info("execCore() completed",{server:c.server,toolsCount:c.tools?.length||0,enabledToolsCount:c.enabledTools?.length||0}),D.verbose("execCore() execResult",JSON.stringify(c)),c}catch(b){let a={success:!1,error:b instanceof Error?b.message:String(b)};return D.error("execCore() failed",{error:a.error}),D.verbose("execCore() errorResult",JSON.stringify(a)),a}}async post(a,b,c,d){if(D.info("post() started",{server:b.server,toolsCount:b.tools?.length||0,enabledToolsCount:b.enabledTools?.length||0}),D.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()}),D.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,C.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);D.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})}D.info("post() completed"),D.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(D.info("Actions:",{actionsCount:e.length,actions:e}),e.length>0){let a=e[0];return D.info(`Returning action: ${a}`),a}return"default"}_clone(){return new E}}let F=(0,d.h)("backend/flow/execution/nodes/FinishNode");class G extends l{async prep(a,b){F.debug("prep() started");let c={nodeId:b?.id||"",nodeType:"finish",messages:a.messages};return F.debug("prep() completed",{messagesCount:c.messages.length,hasSystemPrompt:c.messages.some(a=>"system"===a.role)}),c}async execCore(a,b){F.debug("execCore() started",{messagesCount:a.messages.length}),F.verbose("execCore() prepResult",JSON.stringify(a));let c={success:!0};return F.verbose("execCore() execResult",JSON.stringify(c)),F.info("execCore() completed"),c}async post(a,b,c,d){F.info("post() started",{messagesCount:a.messages.length}),F.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()}),F.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}),F.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(F.info("Actions:",{actionsCount:g.length,actions:g}),g.length>0){let a=g[0];return F.info(`post() completed, returning action: ${a}`),a}return F.info("post() completed, returning FINAL_RESPONSE_ACTION"),e.g4}_clone(){return new G}}let H=(0,d.h)("backend/execution/flow/nodes/SubflowNode");class I extends l{async prep(a,b){let d=b?.properties?.subflowId,e=b?.properties?.promptTemplate?.trim(),f=b?.properties?.inputMode??(e?"isolated":"full-history"),g=b?.properties?.outputMode!=="final-only",h={nodeId:b?.id||"",nodeType:"subflow",subflowId:d,depth:(a.runDepth??0)+1,parentRunId:a.conversationId,showSteps:g,emit:a.emit,nodeName:b?.properties?.name};if("isolated"===f){let c=b?.properties?.allowCallerPrompt===!0,d=a.handoffInput;d&&d.targetNodeId===b?.id?(a.handoffInput=void 0,c&&d.prompt.trim()?(h.inputText=d.prompt,H.info("Using caller-supplied prompt for isolated subflow",{nodeId:b?.id})):h.inputText=e??""):h.inputText=e??""}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);h.messages="latest-message"===f?function(a){for(let b=a.length-1;b>=0;b--)if("user"===a[b].role)return[a[b]];return a}(b):b}if(d)try{let{flowService:a}=await Promise.resolve().then(c.bind(c,87821)),b=await a.getFlow(d);b?.name&&(h.subflowName=b.name)}catch{}return H.info("prep() completed",{subflowId:d,depth:h.depth,mode:f,historyCount:h.messages?.length,showSteps:g}),h}async execCore(a,b){if(!a.subflowId)return{success:!1,error:"Subflow node has no flow selected (subflowId is empty)."};let{runFlow:d}=await c.e(7214).then(c.bind(c,57214)),e=a.emit,f={nodeId:a.nodeId,nodeName:a.nodeName,nodeType:"subflow"},g=a.subflowId,h=e&&a.showSteps?b=>{let c=(b.depth??0)+1;return"run:start"===b.type?void e({type:"subflow:start",node:f,subflowId:g,subflowName:a.subflowName,depth:c}):"run:done"===b.type?void e({type:"subflow:done",node:f,subflowId:g,status:b.status,depth:c}):"message"===b.type?void e({...b,depth:c,message:{...b.message,depth:c}}):void e({...b,depth:c})}:void 0;H.info("execCore() running subflow",{subflowId:a.subflowId,depth:a.depth,showSteps:a.showSteps,foldingEvents:!!h});let i=await d({flowId:a.subflowId,...a.messages?{messages:a.messages}:{prompt:a.inputText??""},mode:"ephemeral",flujo:!0,requireApproval:!1,debug:!1,depth:a.depth,parentRunId:a.parentRunId,...h?{emit:h}:{}});return"error"===i.status?{success:!1,error:i.error?.message||"Subflow execution failed",errorDetails:i.error?.details,subStatus:i.status}:{success:!0,outputText:i.outputText,subStatus:i.status}}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 H.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=this.successors instanceof Map?Array.from(this.successors.keys()):Object.keys(this.successors||{});if(i.length>0){let a=i[0];return H.info(`post() completed, handing off via action: ${a}`),a}return H.info("post() completed, no successor → FINAL_RESPONSE_ACTION"),e.g4}_clone(){return new I}}let J=(0,d.h)("backend/flow/execution/FlowConverter");class K{static convert(a){J.info("Converting React Flow to Pocket Flow",{flowName:a.name,nodeCount:a.nodes.length,edgeCount:a.edges.length}),J.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){J.debug(`Creating node: ${c.id} (${c.type})`);let a=this.createNode(c);b.set(c.id,a)}for(let c of a.edges){J.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;J.info(`Handling MCP connection: ${c.id} (${c.source} -> ${c.target})`),a instanceof x?(b=a,e=d):d instanceof x&&(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}),J.info("Stored MCP node in Process node properties",{processNodeId:b.node_params.id,mcpNodeId:e.node_params.id})):J.warn(`Invalid MCP connection: ${c.id}. Could not find Process and MCP nodes.`,{sourceNodeType:a.constructor.name,targetNodeType:d.constructor.name})}else{let b=c.id||"default";a.addSuccessor(d,b),c.data?.bidirectional&&(d.addSuccessor(a,`${b}__reverse`),J.info(`Connected nodes (bidirectional): ${c.target} -> ${c.source} with action: ${b}__reverse`)),J.info(`Connected nodes: ${c.source} -> ${c.target} with action: ${b}`),a.successors instanceof Map?J.debug("Source node successors after connection:",{sourceNodeId:c.source,successorsCount:a.successors.size,successorsKeys:Array.from(a.successors.keys()),hasTargetNode:a.successors.has(b)}):J.warn("Source node successors is not a Map:",{sourceNodeId:c.source,successorsType:typeof a.successors})}else J.warn(`Failed to connect edge: ${c.id}`,{sourceExists:!!a,targetExists:!!d})}let c=a.nodes.find(a=>"start"===a.type);if(!c)throw J.error("No start node found in flow"),Error("Flow must have a start node");J.debug(`Found start node: ${c.id}`);let d=b.get(c.id);if(!d)throw J.error(`Failed to retrieve start node from map: ${c.id}`),Error("Failed to create start node");let e=new m(d);return J.debug("Created Pocket Flow with start node"),J.info("Flow conversion completed successfully",{nodeCount:b.size}),J.verbose("convert result",JSON.stringify({flowStartNodeId:e.node_params?.id||"unknown",nodesCount:b.size})),e}static createNode(a){let b,c;switch(J.debug(`Creating node of type: ${a.type}`,{nodeId:a.id,label:a.data.label}),J.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 x,c={id:a.id,label:a.data.label,type:"process",properties:a.data.properties||{name:a.data.label}};break;case"mcp":b=new E,c={id:a.id,label:a.data.label,type:"mcp",properties:a.data.properties||{name:a.data.label}};break;case"finish":b=new G,c={id:a.id,label:a.data.label,type:"finish",properties:a.data.properties||{name:a.data.label}};break;case"subflow":b=new I,c={id:a.id,label:a.data.label,type:"subflow",properties:a.data.properties||{name:a.data.label}};break;default:throw J.error(`Unknown node type: ${a.type}`,{nodeId:a.id}),Error(`Unknown node type: ${a.type}`)}return b.setParams({},c),J.debug("Node created and parameters set",{nodeId:a.id,type:a.type,propertiesKeys:Object.keys(c.properties||{})}),J.verbose("createNode result",JSON.stringify({nodeId:a.id,nodeType:a.type,nodeParams:c})),b}}let L=(0,d.h)("backend/execution/flow/engine/PocketflowEngine");class M{clearCache(a){a?this.pocketFlowCache.delete(a):this.pocketFlowCache.clear()}async resolveFlowDefinition(a){let b=a.flowId;if(this.pocketFlowCache.has(b))return L.debug(`Using cached Pocket Flow for flowId: ${b}`),this.pocketFlowCache.get(b).clone();let c=a.flowSnapshot;if(c)L.verbose(`Resolving flow ${b} from an in-memory quick-chat snapshot.`);else if(L.verbose(`Loading and converting flow for flowId: ${b}`),!(c=await i.flowService.getFlow(b)??void 0))throw L.error(`Flow not found for flowId: ${b}`),Error(`Flow not found: ${b}`);L.info(`Found flow: ${c.name}`,{flowId:c.id,nodeCount:c.nodes.length,edgeCount:c.edges.length});let d=K.convert(c);return this.pocketFlowCache.set(b,d),L.verbose(`Flow ${b} converted and cached.`),d.clone()}async findNodeById(a,b){L.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):L.warn("Start node is missing an ID in its parameters.");d.length>0;){let a=d.shift();if(a.node_params?.id===b)return L.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()))}}L.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))?L.info(`Resuming conversation ${c} at node ${d}`):(L.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?(L.info(`Found processNodeId ${d.processNodeId} in last message. Attempting to resume from this node.`),(b=await this.findNodeById(e,d.processNodeId))?L.info(`Resuming conversation ${c} from node ${d.processNodeId} based on last message.`):(L.warn(`Could not find node ${d.processNodeId} from last message. Starting from beginning.`),b=await e.getStartNode())):(b=await e.getStartNode(),L.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{L.debug(`[PocketflowEngine] Calling run() on node ${a.id} (${a.type})`);let c=await d.run(b);return L.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 N=(0,d.h)("backend/execution/flow/FlowExecutor"),O=["messages","availableTools","fullResponse","emit"];function P(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 Q(a){if(!a||"object"!=typeof a)return a;let b=g()(a);for(let a of O)a in b&&delete b[a];return b}class R{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 M),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 N.error("executeStep called without a valid conversationId in sharedState."),a.lastResponse={success:!1,error:"Internal error: Missing conversationId."},{sharedState:a,action:e.O};N.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,N.info(`Executing step for node ${e.id} (${e.type}) in conversation ${g}`),k&&!a.executionTrace&&(a.executionTrace=[]),c=P(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}),N.debug(`Node ${e.id} finished with action: ${i} for conversation ${g}`);let j=P(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:Q(d),execResultSnapshot:Q(f)};a.executionTrace.push(h),N.verbose(`Appended step ${b} to execution trace for conversation ${g}`)}return this.conversationStates.set(g,a),N.debug(`[FlowExecutor] Returning from executeStep for node ${e.id} with action: "${i}"`),{sharedState:a,action:i}}catch(i){let f=l||"unknown node";N.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??P(a),stateAfter:P(a),prepResultSnapshot:d?Q(d):null,execResultSnapshot:{success:!1,error:a.lastResponse}};a.executionTrace.push(h),N.verbose(`Appended ERROR step ${b} to execution trace for conversation ${g}`)}return this.conversationStates.set(g,a),{sharedState:a,action:e.O}}}}},99978:(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"}};