flujo-ai 3.27.0 → 3.28.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 (614) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-build-manifest.json +367 -296
  3. package/.next/app-path-routes-manifest.json +20 -10
  4. package/.next/build-manifest.json +5 -5
  5. package/.next/react-loadable-manifest.json +12 -0
  6. package/.next/routes-manifest.json +23 -0
  7. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  8. package/.next/server/app/_not-found.html +1 -1
  9. package/.next/server/app/_not-found.rsc +1 -1
  10. package/.next/server/app/api/approvals/[id]/route.js +1 -1
  11. package/.next/server/app/api/approvals/[id]/route.js.nft.json +1 -1
  12. package/.next/server/app/api/approvals/[id]/route_client-reference-manifest.js +1 -1
  13. package/.next/server/app/api/approvals/route.js +2 -2
  14. package/.next/server/app/api/approvals/route.js.nft.json +1 -1
  15. package/.next/server/app/api/approvals/route_client-reference-manifest.js +1 -1
  16. package/.next/server/app/api/backup/route.js +1 -1
  17. package/.next/server/app/api/backup/route.js.nft.json +1 -1
  18. package/.next/server/app/api/backup/route_client-reference-manifest.js +1 -1
  19. package/.next/server/app/api/browse/route_client-reference-manifest.js +1 -1
  20. package/.next/server/app/api/bugs/enhance/route.js +2 -2
  21. package/.next/server/app/api/bugs/enhance/route.js.nft.json +1 -1
  22. package/.next/server/app/api/bugs/enhance/route_client-reference-manifest.js +1 -1
  23. package/.next/server/app/api/cwd/route.js +1 -1
  24. package/.next/server/app/api/cwd/route_client-reference-manifest.js +1 -1
  25. package/.next/server/app/api/encryption/secure/route.js +1 -1
  26. package/.next/server/app/api/encryption/secure/route.js.nft.json +1 -1
  27. package/.next/server/app/api/encryption/secure/route_client-reference-manifest.js +1 -1
  28. package/.next/server/app/api/env/route.js +2 -2
  29. package/.next/server/app/api/env/route_client-reference-manifest.js +1 -1
  30. package/.next/server/app/api/flow/[id]/route.js.nft.json +1 -1
  31. package/.next/server/app/api/flow/[id]/route_client-reference-manifest.js +1 -1
  32. package/.next/server/app/api/flow/[id]/versions/[versionId]/route.js +1 -0
  33. package/.next/server/app/api/flow/[id]/versions/[versionId]/route.js.nft.json +1 -0
  34. package/.next/server/app/api/flow/[id]/versions/[versionId]/route_client-reference-manifest.js +1 -0
  35. package/.next/server/app/api/flow/[id]/versions/route.js +1 -0
  36. package/.next/server/app/api/flow/[id]/versions/route.js.nft.json +1 -0
  37. package/.next/server/app/api/flow/[id]/versions/route_client-reference-manifest.js +1 -0
  38. package/.next/server/app/api/flow/compile/route.js +1 -1
  39. package/.next/server/app/api/flow/compile/route.js.nft.json +1 -1
  40. package/.next/server/app/api/flow/compile/route_client-reference-manifest.js +1 -1
  41. package/.next/server/app/api/flow/generate/route.js +1 -1
  42. package/.next/server/app/api/flow/generate/route.js.nft.json +1 -1
  43. package/.next/server/app/api/flow/generate/route_client-reference-manifest.js +1 -1
  44. package/.next/server/app/api/flow/improve/route.js +1 -1
  45. package/.next/server/app/api/flow/improve/route.js.nft.json +1 -1
  46. package/.next/server/app/api/flow/improve/route_client-reference-manifest.js +1 -1
  47. package/.next/server/app/api/flow/prompt-renderer/route.js +2 -2
  48. package/.next/server/app/api/flow/prompt-renderer/route.js.nft.json +1 -1
  49. package/.next/server/app/api/flow/prompt-renderer/route_client-reference-manifest.js +1 -1
  50. package/.next/server/app/api/flow/quick-chat/route.js +1 -1
  51. package/.next/server/app/api/flow/quick-chat/route.js.nft.json +1 -1
  52. package/.next/server/app/api/flow/quick-chat/route_client-reference-manifest.js +1 -1
  53. package/.next/server/app/api/flow/repair/route.js +1 -1
  54. package/.next/server/app/api/flow/repair/route.js.nft.json +1 -1
  55. package/.next/server/app/api/flow/repair/route_client-reference-manifest.js +1 -1
  56. package/.next/server/app/api/flow/route.js.nft.json +1 -1
  57. package/.next/server/app/api/flow/route_client-reference-manifest.js +1 -1
  58. package/.next/server/app/api/git/route.js +1 -1
  59. package/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
  60. package/.next/server/app/api/init/route.js +1 -1
  61. package/.next/server/app/api/init/route.js.nft.json +1 -1
  62. package/.next/server/app/api/init/route_client-reference-manifest.js +1 -1
  63. package/.next/server/app/api/local-models/capability/route_client-reference-manifest.js +1 -1
  64. package/.next/server/app/api/local-models/pull/route_client-reference-manifest.js +1 -1
  65. package/.next/server/app/api/local-models/suggest/route_client-reference-manifest.js +1 -1
  66. package/.next/server/app/api/mcp/app-sandbox/route.js +1 -0
  67. package/.next/server/app/api/mcp/app-sandbox/route.js.nft.json +1 -0
  68. package/.next/server/app/api/mcp/app-sandbox/route_client-reference-manifest.js +1 -0
  69. package/.next/server/app/api/mcp/cancel/route.js +2 -2
  70. package/.next/server/app/api/mcp/cancel/route.js.nft.json +1 -1
  71. package/.next/server/app/api/mcp/cancel/route_client-reference-manifest.js +1 -1
  72. package/.next/server/app/api/mcp/oauth-capability/route.js +1 -0
  73. package/.next/server/app/api/mcp/oauth-capability/route.js.nft.json +1 -0
  74. package/.next/server/app/api/mcp/oauth-capability/route_client-reference-manifest.js +1 -0
  75. package/.next/server/app/api/mcp/servers/[name]/prompts/get/route.js +1 -1
  76. package/.next/server/app/api/mcp/servers/[name]/prompts/get/route.js.nft.json +1 -1
  77. package/.next/server/app/api/mcp/servers/[name]/prompts/get/route_client-reference-manifest.js +1 -1
  78. package/.next/server/app/api/mcp/servers/[name]/prompts/route.js +1 -1
  79. package/.next/server/app/api/mcp/servers/[name]/prompts/route.js.nft.json +1 -1
  80. package/.next/server/app/api/mcp/servers/[name]/prompts/route_client-reference-manifest.js +1 -1
  81. package/.next/server/app/api/mcp/servers/[name]/resources/read/route.js +1 -1
  82. package/.next/server/app/api/mcp/servers/[name]/resources/read/route.js.nft.json +1 -1
  83. package/.next/server/app/api/mcp/servers/[name]/resources/read/route_client-reference-manifest.js +1 -1
  84. package/.next/server/app/api/mcp/servers/[name]/resources/route.js +1 -1
  85. package/.next/server/app/api/mcp/servers/[name]/resources/route.js.nft.json +1 -1
  86. package/.next/server/app/api/mcp/servers/[name]/resources/route_client-reference-manifest.js +1 -1
  87. package/.next/server/app/api/mcp/servers/[name]/route.js +1 -1
  88. package/.next/server/app/api/mcp/servers/[name]/route.js.nft.json +1 -1
  89. package/.next/server/app/api/mcp/servers/[name]/route_client-reference-manifest.js +1 -1
  90. package/.next/server/app/api/mcp/servers/[name]/status/route.js +1 -1
  91. package/.next/server/app/api/mcp/servers/[name]/status/route.js.nft.json +1 -1
  92. package/.next/server/app/api/mcp/servers/[name]/status/route_client-reference-manifest.js +1 -1
  93. package/.next/server/app/api/mcp/servers/[name]/tools/[toolName]/route.js +1 -1
  94. package/.next/server/app/api/mcp/servers/[name]/tools/[toolName]/route.js.nft.json +1 -1
  95. package/.next/server/app/api/mcp/servers/[name]/tools/[toolName]/route_client-reference-manifest.js +1 -1
  96. package/.next/server/app/api/mcp/servers/[name]/tools/route.js +1 -1
  97. package/.next/server/app/api/mcp/servers/[name]/tools/route.js.nft.json +1 -1
  98. package/.next/server/app/api/mcp/servers/[name]/tools/route_client-reference-manifest.js +1 -1
  99. package/.next/server/app/api/mcp/servers/route.js +1 -1
  100. package/.next/server/app/api/mcp/servers/route.js.nft.json +1 -1
  101. package/.next/server/app/api/mcp/servers/route_client-reference-manifest.js +1 -1
  102. package/.next/server/app/api/mcp/test-connection/route.js +1 -1
  103. package/.next/server/app/api/mcp/test-connection/route.js.nft.json +1 -1
  104. package/.next/server/app/api/mcp/test-connection/route_client-reference-manifest.js +1 -1
  105. package/.next/server/app/api/mcp/test-connection/stream/route.js +1 -1
  106. package/.next/server/app/api/mcp/test-connection/stream/route.js.nft.json +1 -1
  107. package/.next/server/app/api/mcp/test-connection/stream/route_client-reference-manifest.js +1 -1
  108. package/.next/server/app/api/mcp-registry/route.js +2 -2
  109. package/.next/server/app/api/mcp-registry/route.js.nft.json +1 -1
  110. package/.next/server/app/api/mcp-registry/route_client-reference-manifest.js +1 -1
  111. package/.next/server/app/api/mcp-registry/spotlight/route.js +1 -1
  112. package/.next/server/app/api/mcp-registry/spotlight/route_client-reference-manifest.js +1 -1
  113. package/.next/server/app/api/model/[id]/route.js +1 -1
  114. package/.next/server/app/api/model/[id]/route.js.nft.json +1 -1
  115. package/.next/server/app/api/model/[id]/route_client-reference-manifest.js +1 -1
  116. package/.next/server/app/api/model/provider/route.js +2 -2
  117. package/.next/server/app/api/model/provider/route.js.nft.json +1 -1
  118. package/.next/server/app/api/model/provider/route_client-reference-manifest.js +1 -1
  119. package/.next/server/app/api/model/route.js +1 -1
  120. package/.next/server/app/api/model/route.js.nft.json +1 -1
  121. package/.next/server/app/api/model/route_client-reference-manifest.js +1 -1
  122. package/.next/server/app/api/model/test/route.js +2 -2
  123. package/.next/server/app/api/model/test/route.js.nft.json +1 -1
  124. package/.next/server/app/api/model/test/route_client-reference-manifest.js +1 -1
  125. package/.next/server/app/api/oauth/callback/route.js +2 -2
  126. package/.next/server/app/api/oauth/callback/route.js.nft.json +1 -1
  127. package/.next/server/app/api/oauth/callback/route_client-reference-manifest.js +1 -1
  128. package/.next/server/app/api/oauth/initiate/route.js +2 -2
  129. package/.next/server/app/api/oauth/initiate/route.js.nft.json +1 -1
  130. package/.next/server/app/api/oauth/initiate/route_client-reference-manifest.js +1 -1
  131. package/.next/server/app/api/oauth/reset/route.js +2 -2
  132. package/.next/server/app/api/oauth/reset/route.js.nft.json +1 -1
  133. package/.next/server/app/api/oauth/reset/route_client-reference-manifest.js +1 -1
  134. package/.next/server/app/api/packages/build/route.js +1 -1
  135. package/.next/server/app/api/packages/build/route.js.nft.json +1 -1
  136. package/.next/server/app/api/packages/build/route_client-reference-manifest.js +1 -1
  137. package/.next/server/app/api/packages/derive-secrets/route.js +1 -1
  138. package/.next/server/app/api/packages/derive-secrets/route.js.nft.json +1 -1
  139. package/.next/server/app/api/packages/derive-secrets/route_client-reference-manifest.js +1 -1
  140. package/.next/server/app/api/packages/install/route.js +1 -1
  141. package/.next/server/app/api/packages/install/route.js.nft.json +1 -1
  142. package/.next/server/app/api/packages/install/route_client-reference-manifest.js +1 -1
  143. package/.next/server/app/api/packages/install/status/route.js +1 -1
  144. package/.next/server/app/api/packages/install/status/route.js.nft.json +1 -1
  145. package/.next/server/app/api/packages/install/status/route_client-reference-manifest.js +1 -1
  146. package/.next/server/app/api/packages/installed/route.js +1 -0
  147. package/.next/server/app/api/packages/installed/route.js.nft.json +1 -0
  148. package/.next/server/app/api/packages/installed/route_client-reference-manifest.js +1 -0
  149. package/.next/server/app/api/packages/resolve/route.js +1 -1
  150. package/.next/server/app/api/packages/resolve/route.js.nft.json +1 -1
  151. package/.next/server/app/api/packages/resolve/route_client-reference-manifest.js +1 -1
  152. package/.next/server/app/api/packages/uninstall/route.js +1 -0
  153. package/.next/server/app/api/packages/uninstall/route.js.nft.json +1 -0
  154. package/.next/server/app/api/packages/uninstall/route_client-reference-manifest.js +1 -0
  155. package/.next/server/app/api/planned-executions/[id]/route.js +2 -2
  156. package/.next/server/app/api/planned-executions/[id]/route.js.nft.json +1 -1
  157. package/.next/server/app/api/planned-executions/[id]/route_client-reference-manifest.js +1 -1
  158. package/.next/server/app/api/planned-executions/[id]/run/route.js +2 -2
  159. package/.next/server/app/api/planned-executions/[id]/run/route.js.nft.json +1 -1
  160. package/.next/server/app/api/planned-executions/[id]/run/route_client-reference-manifest.js +1 -1
  161. package/.next/server/app/api/planned-executions/[id]/runs/route.js +2 -2
  162. package/.next/server/app/api/planned-executions/[id]/runs/route.js.nft.json +1 -1
  163. package/.next/server/app/api/planned-executions/[id]/runs/route_client-reference-manifest.js +1 -1
  164. package/.next/server/app/api/planned-executions/preview-schedule/route_client-reference-manifest.js +1 -1
  165. package/.next/server/app/api/planned-executions/reconcile/route.js +1 -1
  166. package/.next/server/app/api/planned-executions/reconcile/route.js.nft.json +1 -1
  167. package/.next/server/app/api/planned-executions/reconcile/route_client-reference-manifest.js +1 -1
  168. package/.next/server/app/api/planned-executions/route.js +1 -1
  169. package/.next/server/app/api/planned-executions/route.js.nft.json +1 -1
  170. package/.next/server/app/api/planned-executions/route_client-reference-manifest.js +1 -1
  171. package/.next/server/app/api/registry/auth/resend/route.js +1 -1
  172. package/.next/server/app/api/registry/auth/resend/route.js.nft.json +1 -1
  173. package/.next/server/app/api/registry/auth/resend/route_client-reference-manifest.js +1 -1
  174. package/.next/server/app/api/registry/auth/reset/route.js +1 -0
  175. package/.next/server/app/api/registry/auth/reset/route.js.nft.json +1 -0
  176. package/.next/server/app/api/registry/auth/reset/route_client-reference-manifest.js +1 -0
  177. package/.next/server/app/api/registry/auth/route.js +1 -1
  178. package/.next/server/app/api/registry/auth/route.js.nft.json +1 -1
  179. package/.next/server/app/api/registry/auth/route_client-reference-manifest.js +1 -1
  180. package/.next/server/app/api/registry/oauth/callback/route.js +1 -0
  181. package/.next/server/app/api/registry/oauth/callback/route.js.nft.json +1 -0
  182. package/.next/server/app/api/registry/oauth/callback/route_client-reference-manifest.js +1 -0
  183. package/.next/server/app/api/registry/oauth/initiate/route.js +1 -0
  184. package/.next/server/app/api/registry/oauth/initiate/route.js.nft.json +1 -0
  185. package/.next/server/app/api/registry/oauth/initiate/route_client-reference-manifest.js +1 -0
  186. package/.next/server/app/api/registry/publish/route.js +1 -1
  187. package/.next/server/app/api/registry/publish/route.js.nft.json +1 -1
  188. package/.next/server/app/api/registry/publish/route_client-reference-manifest.js +1 -1
  189. package/.next/server/app/api/registry/settings/route.js +1 -1
  190. package/.next/server/app/api/registry/settings/route.js.nft.json +1 -1
  191. package/.next/server/app/api/registry/settings/route_client-reference-manifest.js +1 -1
  192. package/.next/server/app/api/restore/route.js +1 -1
  193. package/.next/server/app/api/restore/route.js.nft.json +1 -1
  194. package/.next/server/app/api/restore/route_client-reference-manifest.js +1 -1
  195. package/.next/server/app/api/runs/active/route.js +2 -2
  196. package/.next/server/app/api/runs/active/route.js.nft.json +1 -1
  197. package/.next/server/app/api/runs/active/route_client-reference-manifest.js +1 -1
  198. package/.next/server/app/api/storage/route.js +1 -1
  199. package/.next/server/app/api/storage/route_client-reference-manifest.js +1 -1
  200. package/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
  201. package/.next/server/app/api/waves/route.js +1 -1
  202. package/.next/server/app/api/waves/route.js.nft.json +1 -1
  203. package/.next/server/app/api/waves/route_client-reference-manifest.js +1 -1
  204. package/.next/server/app/api/webhooks/[id]/route.js +1 -1
  205. package/.next/server/app/api/webhooks/[id]/route.js.nft.json +1 -1
  206. package/.next/server/app/api/webhooks/[id]/route_client-reference-manifest.js +1 -1
  207. package/.next/server/app/chat/page.js +8 -8
  208. package/.next/server/app/chat/page.js.nft.json +1 -1
  209. package/.next/server/app/chat/page_client-reference-manifest.js +1 -1
  210. package/.next/server/app/chat.html +1 -1
  211. package/.next/server/app/chat.rsc +2 -2
  212. package/.next/server/app/docs/page.js +4 -3
  213. package/.next/server/app/docs/page_client-reference-manifest.js +1 -1
  214. package/.next/server/app/docs.html +1 -1
  215. package/.next/server/app/docs.rsc +2 -2
  216. package/.next/server/app/executions/page.js +38 -2
  217. package/.next/server/app/executions/page.js.nft.json +1 -1
  218. package/.next/server/app/executions/page_client-reference-manifest.js +1 -1
  219. package/.next/server/app/executions.html +1 -1
  220. package/.next/server/app/executions.rsc +2 -2
  221. package/.next/server/app/flows/page.js +3 -3
  222. package/.next/server/app/flows/page.js.nft.json +1 -1
  223. package/.next/server/app/flows/page_client-reference-manifest.js +1 -1
  224. package/.next/server/app/flows.html +1 -1
  225. package/.next/server/app/flows.rsc +2 -2
  226. package/.next/server/app/index.html +1 -1
  227. package/.next/server/app/index.rsc +1 -1
  228. package/.next/server/app/mcp/page.js +13 -13
  229. package/.next/server/app/mcp/page.js.nft.json +1 -1
  230. package/.next/server/app/mcp/page_client-reference-manifest.js +1 -1
  231. package/.next/server/app/mcp-flows/route.js +1 -1
  232. package/.next/server/app/mcp-flows/route.js.nft.json +1 -1
  233. package/.next/server/app/mcp-flows/route_client-reference-manifest.js +1 -1
  234. package/.next/server/app/mcp-proxy/[server]/route.js +1 -1
  235. package/.next/server/app/mcp-proxy/[server]/route.js.nft.json +1 -1
  236. package/.next/server/app/mcp-proxy/[server]/route_client-reference-manifest.js +1 -1
  237. package/.next/server/app/mcp.html +1 -1
  238. package/.next/server/app/mcp.rsc +2 -2
  239. package/.next/server/app/models/page.js +2 -2
  240. package/.next/server/app/models/page.js.nft.json +1 -1
  241. package/.next/server/app/models/page_client-reference-manifest.js +1 -1
  242. package/.next/server/app/packages/page.js +2 -3
  243. package/.next/server/app/packages/page.js.nft.json +1 -1
  244. package/.next/server/app/packages/page_client-reference-manifest.js +1 -1
  245. package/.next/server/app/packages.html +1 -1
  246. package/.next/server/app/packages.rsc +2 -2
  247. package/.next/server/app/page_client-reference-manifest.js +1 -1
  248. package/.next/server/app/settings/page.js +2 -3
  249. package/.next/server/app/settings/page.js.nft.json +1 -1
  250. package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  251. package/.next/server/app/settings.html +1 -1
  252. package/.next/server/app/settings.rsc +2 -2
  253. package/.next/server/app/v1/chat/completions/route.js +1 -1
  254. package/.next/server/app/v1/chat/completions/route.js.nft.json +1 -1
  255. package/.next/server/app/v1/chat/completions/route_client-reference-manifest.js +1 -1
  256. package/.next/server/app/v1/chat/conversations/[conversationId]/breakpoints/route.js +2 -2
  257. package/.next/server/app/v1/chat/conversations/[conversationId]/breakpoints/route.js.nft.json +1 -1
  258. package/.next/server/app/v1/chat/conversations/[conversationId]/breakpoints/route_client-reference-manifest.js +1 -1
  259. package/.next/server/app/v1/chat/conversations/[conversationId]/cancel/route.js +2 -2
  260. package/.next/server/app/v1/chat/conversations/[conversationId]/cancel/route.js.nft.json +1 -1
  261. package/.next/server/app/v1/chat/conversations/[conversationId]/cancel/route_client-reference-manifest.js +1 -1
  262. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/continue/route.js +1 -1
  263. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/continue/route.js.nft.json +1 -1
  264. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/continue/route_client-reference-manifest.js +1 -1
  265. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/step/route.js +1 -1
  266. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/step/route.js.nft.json +1 -1
  267. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/step/route_client-reference-manifest.js +1 -1
  268. package/.next/server/app/v1/chat/conversations/[conversationId]/edit-state/route.js +2 -2
  269. package/.next/server/app/v1/chat/conversations/[conversationId]/edit-state/route.js.nft.json +1 -1
  270. package/.next/server/app/v1/chat/conversations/[conversationId]/edit-state/route_client-reference-manifest.js +1 -1
  271. package/.next/server/app/v1/chat/conversations/[conversationId]/events/route.js +2 -2
  272. package/.next/server/app/v1/chat/conversations/[conversationId]/events/route.js.nft.json +1 -1
  273. package/.next/server/app/v1/chat/conversations/[conversationId]/events/route_client-reference-manifest.js +1 -1
  274. package/.next/server/app/v1/chat/conversations/[conversationId]/resources/route.js +1 -1
  275. package/.next/server/app/v1/chat/conversations/[conversationId]/resources/route_client-reference-manifest.js +1 -1
  276. package/.next/server/app/v1/chat/conversations/[conversationId]/respond/route.js +1 -1
  277. package/.next/server/app/v1/chat/conversations/[conversationId]/respond/route.js.nft.json +1 -1
  278. package/.next/server/app/v1/chat/conversations/[conversationId]/respond/route_client-reference-manifest.js +1 -1
  279. package/.next/server/app/v1/chat/conversations/[conversationId]/route.js +2 -2
  280. package/.next/server/app/v1/chat/conversations/[conversationId]/route.js.nft.json +1 -1
  281. package/.next/server/app/v1/chat/conversations/[conversationId]/route_client-reference-manifest.js +1 -1
  282. package/.next/server/app/v1/chat/conversations/route.js +2 -2
  283. package/.next/server/app/v1/chat/conversations/route.js.nft.json +1 -1
  284. package/.next/server/app/v1/chat/conversations/route_client-reference-manifest.js +1 -1
  285. package/.next/server/app/v1/chat/events/route.js +11 -0
  286. package/.next/server/app/v1/chat/events/route.js.nft.json +1 -0
  287. package/.next/server/app/v1/chat/events/route_client-reference-manifest.js +1 -0
  288. package/.next/server/app/v1/models/route.js +2 -2
  289. package/.next/server/app/v1/models/route.js.nft.json +1 -1
  290. package/.next/server/app/v1/models/route_client-reference-manifest.js +1 -1
  291. package/.next/server/app/waves/page.js +2 -2
  292. package/.next/server/app/waves/page_client-reference-manifest.js +1 -1
  293. package/.next/server/app/waves.html +1 -1
  294. package/.next/server/app/waves.rsc +2 -2
  295. package/.next/server/app-paths-manifest.json +20 -10
  296. package/.next/server/chunks/1226.js +1 -1
  297. package/.next/server/chunks/1314.js +1 -1
  298. package/.next/server/chunks/1604.js +14 -9
  299. package/.next/server/chunks/1615.js +1 -0
  300. package/.next/server/chunks/1659.js +1 -1
  301. package/.next/server/chunks/166.js +5 -5
  302. package/.next/server/chunks/1805.js +1 -1
  303. package/.next/server/chunks/1819.js +1 -1
  304. package/.next/server/chunks/2434.js +2 -2
  305. package/.next/server/chunks/2859.js +1 -1
  306. package/.next/server/chunks/2940.js +13 -8
  307. package/.next/server/chunks/3128.js +62 -0
  308. package/.next/server/chunks/3273.js +1 -0
  309. package/.next/server/chunks/3570.js +249 -0
  310. package/.next/server/chunks/38.js +2 -2
  311. package/.next/server/chunks/3951.js +151 -0
  312. package/.next/server/chunks/4265.js +1 -1
  313. package/.next/server/chunks/4426.js +2 -2
  314. package/.next/server/chunks/4671.js +1 -1
  315. package/.next/server/chunks/4681.js +1 -1
  316. package/.next/server/chunks/4771.js +2 -2
  317. package/.next/server/chunks/5067.js +1 -0
  318. package/.next/server/chunks/5096.js +1 -1
  319. package/.next/server/chunks/5148.js +1 -0
  320. package/.next/server/chunks/5200.js +1 -0
  321. package/.next/server/chunks/5463.js +1 -1
  322. package/.next/server/chunks/{1089.js → 5471.js} +1 -1
  323. package/.next/server/chunks/5544.js +5 -5
  324. package/.next/server/chunks/5708.js +5 -4
  325. package/.next/server/chunks/5958.js +2 -0
  326. package/.next/server/chunks/6005.js +1 -1
  327. package/.next/server/chunks/{7498.js → 6126.js} +24 -13
  328. package/.next/server/chunks/6849.js +66 -0
  329. package/.next/server/chunks/688.js +3 -0
  330. package/.next/server/chunks/701.js +1 -1
  331. package/.next/server/chunks/7032.js +1 -1
  332. package/.next/server/chunks/7214.js +4 -4
  333. package/.next/server/chunks/724.js +1 -1
  334. package/.next/server/chunks/7463.js +4 -4
  335. package/.next/server/chunks/7506.js +1 -1
  336. package/.next/server/chunks/7538.js +21 -0
  337. package/.next/server/chunks/7579.js +7 -6
  338. package/.next/server/chunks/7821.js +1 -1
  339. package/.next/server/chunks/793.js +393 -0
  340. package/.next/server/chunks/8037.js +1 -0
  341. package/.next/server/chunks/8165.js +3 -0
  342. package/.next/server/chunks/8339.js +1 -0
  343. package/.next/server/chunks/8387.js +1 -1
  344. package/.next/server/chunks/8522.js +2 -2
  345. package/.next/server/chunks/{8192.js → 8568.js} +1 -1
  346. package/.next/server/chunks/8667.js +1 -1
  347. package/.next/server/chunks/8739.js +2 -2
  348. package/.next/server/chunks/8979.js +37 -0
  349. package/.next/server/chunks/8994.js +1 -1
  350. package/.next/server/chunks/9165.js +1 -0
  351. package/.next/server/chunks/9285.js +1 -1
  352. package/.next/server/chunks/94.js +1 -1
  353. package/.next/server/chunks/9400.js +2 -2
  354. package/.next/server/chunks/9472.js +2 -2
  355. package/.next/server/chunks/9671.js +1 -0
  356. package/.next/server/chunks/9724.js +393 -0
  357. package/.next/server/chunks/991.js +2 -0
  358. package/.next/server/functions-config-manifest.json +1 -0
  359. package/.next/server/instrumentation.js +1 -1
  360. package/.next/server/instrumentation.js.nft.json +1 -1
  361. package/.next/server/middleware-build-manifest.js +1 -1
  362. package/.next/server/middleware-manifest.json +1 -1
  363. package/.next/server/middleware-react-loadable-manifest.js +1 -1
  364. package/.next/server/pages/404.html +1 -1
  365. package/.next/server/pages/500.html +1 -1
  366. package/.next/server/server-reference-manifest.js +1 -1
  367. package/.next/server/server-reference-manifest.json +1 -1
  368. package/.next/server/src/middleware.js +1 -1
  369. package/.next/server/src/middleware.js.map +1 -1
  370. package/.next/static/Q6ITx_bZyoEOnKdZu_C7j/_buildManifest.js +1 -0
  371. package/.next/static/chunks/1594-309fa6363f215d76.js +1 -0
  372. package/.next/static/chunks/{9720-5ecb48f1a28808fe.js → 1809-e56cf3c476261e34.js} +1 -1
  373. package/.next/static/chunks/1937-6bbdcdc660db562c.js +1 -0
  374. package/.next/static/chunks/1988-1b651d581fc44a36.js +1 -0
  375. package/.next/static/chunks/2164-7d6451e88a447de7.js +1 -0
  376. package/.next/static/chunks/{4483-463f8bfc6f3dd5fa.js → 218-6cbe09820faa3272.js} +1 -1
  377. package/.next/static/chunks/2800-4fa29a3eeb693593.js +1 -0
  378. package/.next/static/chunks/3418-a2f5d0c4f29ee2fb.js +1 -0
  379. package/.next/static/chunks/{8041-05830e887c133085.js → 3827-9e9a6e11ef808d90.js} +1 -1
  380. package/.next/static/chunks/3910.5c6885d7a5bd753e.js +1 -0
  381. package/.next/static/chunks/{3028-fc1f04241ed578ff.js → 3948-1cb8fc7a64805254.js} +1 -1
  382. package/.next/static/chunks/3958-5641a828b320f2fe.js +100 -0
  383. package/.next/static/chunks/{3574-94e9f20550550a58.js → 5328-4e556503b70e72b4.js} +1 -1
  384. package/.next/static/chunks/{2981-10313d395eb99645.js → 6195-8c4c57628e9013d5.js} +1 -1
  385. package/.next/static/chunks/{6669-012c73587a6628fc.js → 6669-a949326b30ea1d39.js} +1 -1
  386. package/.next/static/chunks/6777-4b0d05731a089de4.js +1 -0
  387. package/.next/static/chunks/6947-0ff3545efb53e959.js +1 -0
  388. package/.next/static/chunks/7304-e7cd725083617b81.js +8 -0
  389. package/.next/static/chunks/812-3ceea0da38ad2891.js +1 -0
  390. package/.next/static/chunks/{5578-49bc150686c13b6f.js → 8551-a28272acfda62ac9.js} +1 -1
  391. package/.next/static/chunks/8855-02889c9ab4bf0bcf.js +1 -0
  392. package/.next/static/chunks/app/api/approvals/[id]/route-c745e5b53b81491a.js +1 -0
  393. package/.next/static/chunks/app/api/approvals/route-c745e5b53b81491a.js +1 -0
  394. package/.next/static/chunks/app/api/backup/route-c745e5b53b81491a.js +1 -0
  395. package/.next/static/chunks/app/api/browse/route-c745e5b53b81491a.js +1 -0
  396. package/.next/static/chunks/app/api/bugs/enhance/route-c745e5b53b81491a.js +1 -0
  397. package/.next/static/chunks/app/api/cwd/route-c745e5b53b81491a.js +1 -0
  398. package/.next/static/chunks/app/api/encryption/secure/route-c745e5b53b81491a.js +1 -0
  399. package/.next/static/chunks/app/api/env/route-c745e5b53b81491a.js +1 -0
  400. package/.next/static/chunks/app/api/flow/[id]/route-c745e5b53b81491a.js +1 -0
  401. package/.next/static/chunks/app/api/flow/[id]/versions/[versionId]/route-c745e5b53b81491a.js +1 -0
  402. package/.next/static/chunks/app/api/flow/[id]/versions/route-c745e5b53b81491a.js +1 -0
  403. package/.next/static/chunks/app/api/flow/compile/route-c745e5b53b81491a.js +1 -0
  404. package/.next/static/chunks/app/api/flow/generate/route-c745e5b53b81491a.js +1 -0
  405. package/.next/static/chunks/app/api/flow/improve/route-c745e5b53b81491a.js +1 -0
  406. package/.next/static/chunks/app/api/flow/prompt-renderer/route-c745e5b53b81491a.js +1 -0
  407. package/.next/static/chunks/app/api/flow/quick-chat/route-c745e5b53b81491a.js +1 -0
  408. package/.next/static/chunks/app/api/flow/repair/route-c745e5b53b81491a.js +1 -0
  409. package/.next/static/chunks/app/api/flow/route-c745e5b53b81491a.js +1 -0
  410. package/.next/static/chunks/app/api/git/route-c745e5b53b81491a.js +1 -0
  411. package/.next/static/chunks/app/api/init/route-c745e5b53b81491a.js +1 -0
  412. package/.next/static/chunks/app/api/local-models/capability/route-c745e5b53b81491a.js +1 -0
  413. package/.next/static/chunks/app/api/local-models/pull/route-c745e5b53b81491a.js +1 -0
  414. package/.next/static/chunks/app/api/local-models/suggest/route-c745e5b53b81491a.js +1 -0
  415. package/.next/static/chunks/app/api/mcp/app-sandbox/route-c745e5b53b81491a.js +1 -0
  416. package/.next/static/chunks/app/api/mcp/cancel/route-c745e5b53b81491a.js +1 -0
  417. package/.next/static/chunks/app/api/mcp/oauth-capability/route-c745e5b53b81491a.js +1 -0
  418. package/.next/static/chunks/app/api/mcp/servers/[name]/prompts/get/route-c745e5b53b81491a.js +1 -0
  419. package/.next/static/chunks/app/api/mcp/servers/[name]/prompts/route-c745e5b53b81491a.js +1 -0
  420. package/.next/static/chunks/app/api/mcp/servers/[name]/resources/read/route-c745e5b53b81491a.js +1 -0
  421. package/.next/static/chunks/app/api/mcp/servers/[name]/resources/route-c745e5b53b81491a.js +1 -0
  422. package/.next/static/chunks/app/api/mcp/servers/[name]/route-c745e5b53b81491a.js +1 -0
  423. package/.next/static/chunks/app/api/mcp/servers/[name]/status/route-c745e5b53b81491a.js +1 -0
  424. package/.next/static/chunks/app/api/mcp/servers/[name]/tools/[toolName]/route-c745e5b53b81491a.js +1 -0
  425. package/.next/static/chunks/app/api/mcp/servers/[name]/tools/route-c745e5b53b81491a.js +1 -0
  426. package/.next/static/chunks/app/api/mcp/servers/route-c745e5b53b81491a.js +1 -0
  427. package/.next/static/chunks/app/api/mcp/test-connection/route-c745e5b53b81491a.js +1 -0
  428. package/.next/static/chunks/app/api/mcp/test-connection/stream/route-c745e5b53b81491a.js +1 -0
  429. package/.next/static/chunks/app/api/mcp-registry/route-c745e5b53b81491a.js +1 -0
  430. package/.next/static/chunks/app/api/mcp-registry/spotlight/route-c745e5b53b81491a.js +1 -0
  431. package/.next/static/chunks/app/api/model/[id]/route-c745e5b53b81491a.js +1 -0
  432. package/.next/static/chunks/app/api/model/provider/route-c745e5b53b81491a.js +1 -0
  433. package/.next/static/chunks/app/api/model/route-c745e5b53b81491a.js +1 -0
  434. package/.next/static/chunks/app/api/model/test/route-c745e5b53b81491a.js +1 -0
  435. package/.next/static/chunks/app/api/oauth/callback/route-c745e5b53b81491a.js +1 -0
  436. package/.next/static/chunks/app/api/oauth/initiate/route-c745e5b53b81491a.js +1 -0
  437. package/.next/static/chunks/app/api/oauth/reset/route-c745e5b53b81491a.js +1 -0
  438. package/.next/static/chunks/app/api/packages/build/route-c745e5b53b81491a.js +1 -0
  439. package/.next/static/chunks/app/api/packages/derive-secrets/route-c745e5b53b81491a.js +1 -0
  440. package/.next/static/chunks/app/api/packages/install/route-c745e5b53b81491a.js +1 -0
  441. package/.next/static/chunks/app/api/packages/install/status/route-c745e5b53b81491a.js +1 -0
  442. package/.next/static/chunks/app/api/packages/installed/route-c745e5b53b81491a.js +1 -0
  443. package/.next/static/chunks/app/api/packages/resolve/route-c745e5b53b81491a.js +1 -0
  444. package/.next/static/chunks/app/api/packages/uninstall/route-c745e5b53b81491a.js +1 -0
  445. package/.next/static/chunks/app/api/planned-executions/[id]/route-c745e5b53b81491a.js +1 -0
  446. package/.next/static/chunks/app/api/planned-executions/[id]/run/route-c745e5b53b81491a.js +1 -0
  447. package/.next/static/chunks/app/api/planned-executions/[id]/runs/route-c745e5b53b81491a.js +1 -0
  448. package/.next/static/chunks/app/api/planned-executions/preview-schedule/route-c745e5b53b81491a.js +1 -0
  449. package/.next/static/chunks/app/api/planned-executions/reconcile/route-c745e5b53b81491a.js +1 -0
  450. package/.next/static/chunks/app/api/planned-executions/route-c745e5b53b81491a.js +1 -0
  451. package/.next/static/chunks/app/api/registry/auth/resend/route-c745e5b53b81491a.js +1 -0
  452. package/.next/static/chunks/app/api/registry/auth/reset/route-c745e5b53b81491a.js +1 -0
  453. package/.next/static/chunks/app/api/registry/auth/route-c745e5b53b81491a.js +1 -0
  454. package/.next/static/chunks/app/api/registry/oauth/callback/route-c745e5b53b81491a.js +1 -0
  455. package/.next/static/chunks/app/api/registry/oauth/initiate/route-c745e5b53b81491a.js +1 -0
  456. package/.next/static/chunks/app/api/registry/publish/route-c745e5b53b81491a.js +1 -0
  457. package/.next/static/chunks/app/api/registry/settings/route-c745e5b53b81491a.js +1 -0
  458. package/.next/static/chunks/app/api/restore/route-c745e5b53b81491a.js +1 -0
  459. package/.next/static/chunks/app/api/runs/active/route-c745e5b53b81491a.js +1 -0
  460. package/.next/static/chunks/app/api/storage/route-c745e5b53b81491a.js +1 -0
  461. package/.next/static/chunks/app/api/update/route-c745e5b53b81491a.js +1 -0
  462. package/.next/static/chunks/app/api/waves/route-c745e5b53b81491a.js +1 -0
  463. package/.next/static/chunks/app/api/webhooks/[id]/route-c745e5b53b81491a.js +1 -0
  464. package/.next/static/chunks/app/chat/page-c39160ddf90bbae9.js +1 -0
  465. package/.next/static/chunks/app/docs/page-250523af44e96120.js +1 -0
  466. package/.next/static/chunks/app/executions/{page-bb2fef60b2240f69.js → page-10d09f36de30939f.js} +1 -1
  467. package/.next/static/chunks/app/flows/page-0d8fb471adfc2981.js +1 -0
  468. package/.next/static/chunks/app/mcp/page-8ad71bf5801bfe5f.js +1 -0
  469. package/.next/static/chunks/app/mcp-flows/route-c745e5b53b81491a.js +1 -0
  470. package/.next/static/chunks/app/mcp-proxy/[server]/route-c745e5b53b81491a.js +1 -0
  471. package/.next/static/chunks/app/models/{page-d71e5606a8e29479.js → page-17e8e6668f92f58d.js} +1 -1
  472. package/.next/static/chunks/app/packages/page-9f61751e98134f3d.js +1 -0
  473. package/.next/static/chunks/app/settings/page-afbf8790e99fecaf.js +1 -0
  474. package/.next/static/chunks/app/v1/chat/completions/route-c745e5b53b81491a.js +1 -0
  475. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/breakpoints/route-c745e5b53b81491a.js +1 -0
  476. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/cancel/route-c745e5b53b81491a.js +1 -0
  477. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/debug/continue/route-c745e5b53b81491a.js +1 -0
  478. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/debug/step/route-c745e5b53b81491a.js +1 -0
  479. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/edit-state/route-c745e5b53b81491a.js +1 -0
  480. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/events/route-c745e5b53b81491a.js +1 -0
  481. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/resources/route-c745e5b53b81491a.js +1 -0
  482. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/respond/route-c745e5b53b81491a.js +1 -0
  483. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/route-c745e5b53b81491a.js +1 -0
  484. package/.next/static/chunks/app/v1/chat/conversations/route-c745e5b53b81491a.js +1 -0
  485. package/.next/static/chunks/app/v1/chat/events/route-c745e5b53b81491a.js +1 -0
  486. package/.next/static/chunks/app/v1/models/route-c745e5b53b81491a.js +1 -0
  487. package/.next/static/chunks/app/waves/page-97ad6b51c9cae4b3.js +1 -0
  488. package/.next/static/chunks/webpack-0d4a4e773990ac44.js +1 -0
  489. package/.next/trace +10 -9
  490. package/.next/types/app/api/flow/[id]/versions/[versionId]/route.ts +347 -0
  491. package/.next/types/app/api/flow/[id]/versions/route.ts +347 -0
  492. package/.next/types/app/api/mcp/app-sandbox/route.ts +347 -0
  493. package/.next/types/app/api/mcp/oauth-capability/route.ts +347 -0
  494. package/.next/types/app/api/packages/installed/route.ts +347 -0
  495. package/.next/types/app/api/packages/uninstall/route.ts +347 -0
  496. package/.next/types/app/api/registry/auth/reset/route.ts +347 -0
  497. package/.next/types/app/api/registry/oauth/callback/route.ts +347 -0
  498. package/.next/types/app/api/registry/oauth/initiate/route.ts +347 -0
  499. package/.next/types/app/v1/chat/events/route.ts +347 -0
  500. package/.next/types/routes.d.ts +11 -1
  501. package/.next/types/validator.ts +90 -0
  502. package/README.md +1 -1
  503. package/package.json +97 -95
  504. package/.next/server/chunks/237.js +0 -1
  505. package/.next/server/chunks/2373.js +0 -1
  506. package/.next/server/chunks/3569.js +0 -1
  507. package/.next/server/chunks/4545.js +0 -21
  508. package/.next/server/chunks/5094.js +0 -2
  509. package/.next/server/chunks/5734.js +0 -60
  510. package/.next/server/chunks/6996.js +0 -1
  511. package/.next/server/chunks/7028.js +0 -1
  512. package/.next/server/chunks/7362.js +0 -158
  513. package/.next/server/chunks/7485.js +0 -1
  514. package/.next/server/chunks/7764.js +0 -37
  515. package/.next/server/chunks/826.js +0 -52
  516. package/.next/server/chunks/8732.js +0 -62
  517. package/.next/server/chunks/8851.js +0 -1
  518. package/.next/static/O-elWbT5rs6ci1CrCqez1/_buildManifest.js +0 -1
  519. package/.next/static/chunks/2019-f22580cb726c5dca.js +0 -1
  520. package/.next/static/chunks/256-a13a59247ac6cc68.js +0 -1
  521. package/.next/static/chunks/2822-8168e3bb8443a1ec.js +0 -1
  522. package/.next/static/chunks/3560-5bdceef09b50e1c3.js +0 -1
  523. package/.next/static/chunks/5766-dbd21cb8435605aa.js +0 -1
  524. package/.next/static/chunks/5866-6834cbc4ab02d86f.js +0 -1
  525. package/.next/static/chunks/6691-117567b2b40cd9f4.js +0 -1
  526. package/.next/static/chunks/6961-a40e97c06e616300.js +0 -1
  527. package/.next/static/chunks/7554-db290baed5782cab.js +0 -8
  528. package/.next/static/chunks/812-8b3d4e0f6546d6f9.js +0 -1
  529. package/.next/static/chunks/app/api/approvals/[id]/route-3e3cc52436d34625.js +0 -1
  530. package/.next/static/chunks/app/api/approvals/route-3e3cc52436d34625.js +0 -1
  531. package/.next/static/chunks/app/api/backup/route-3e3cc52436d34625.js +0 -1
  532. package/.next/static/chunks/app/api/browse/route-3e3cc52436d34625.js +0 -1
  533. package/.next/static/chunks/app/api/bugs/enhance/route-3e3cc52436d34625.js +0 -1
  534. package/.next/static/chunks/app/api/cwd/route-3e3cc52436d34625.js +0 -1
  535. package/.next/static/chunks/app/api/encryption/secure/route-3e3cc52436d34625.js +0 -1
  536. package/.next/static/chunks/app/api/env/route-3e3cc52436d34625.js +0 -1
  537. package/.next/static/chunks/app/api/flow/[id]/route-3e3cc52436d34625.js +0 -1
  538. package/.next/static/chunks/app/api/flow/compile/route-3e3cc52436d34625.js +0 -1
  539. package/.next/static/chunks/app/api/flow/generate/route-3e3cc52436d34625.js +0 -1
  540. package/.next/static/chunks/app/api/flow/improve/route-3e3cc52436d34625.js +0 -1
  541. package/.next/static/chunks/app/api/flow/prompt-renderer/route-3e3cc52436d34625.js +0 -1
  542. package/.next/static/chunks/app/api/flow/quick-chat/route-3e3cc52436d34625.js +0 -1
  543. package/.next/static/chunks/app/api/flow/repair/route-3e3cc52436d34625.js +0 -1
  544. package/.next/static/chunks/app/api/flow/route-3e3cc52436d34625.js +0 -1
  545. package/.next/static/chunks/app/api/git/route-3e3cc52436d34625.js +0 -1
  546. package/.next/static/chunks/app/api/init/route-3e3cc52436d34625.js +0 -1
  547. package/.next/static/chunks/app/api/local-models/capability/route-3e3cc52436d34625.js +0 -1
  548. package/.next/static/chunks/app/api/local-models/pull/route-3e3cc52436d34625.js +0 -1
  549. package/.next/static/chunks/app/api/local-models/suggest/route-3e3cc52436d34625.js +0 -1
  550. package/.next/static/chunks/app/api/mcp/cancel/route-3e3cc52436d34625.js +0 -1
  551. package/.next/static/chunks/app/api/mcp/servers/[name]/prompts/get/route-3e3cc52436d34625.js +0 -1
  552. package/.next/static/chunks/app/api/mcp/servers/[name]/prompts/route-3e3cc52436d34625.js +0 -1
  553. package/.next/static/chunks/app/api/mcp/servers/[name]/resources/read/route-3e3cc52436d34625.js +0 -1
  554. package/.next/static/chunks/app/api/mcp/servers/[name]/resources/route-3e3cc52436d34625.js +0 -1
  555. package/.next/static/chunks/app/api/mcp/servers/[name]/route-3e3cc52436d34625.js +0 -1
  556. package/.next/static/chunks/app/api/mcp/servers/[name]/status/route-3e3cc52436d34625.js +0 -1
  557. package/.next/static/chunks/app/api/mcp/servers/[name]/tools/[toolName]/route-3e3cc52436d34625.js +0 -1
  558. package/.next/static/chunks/app/api/mcp/servers/[name]/tools/route-3e3cc52436d34625.js +0 -1
  559. package/.next/static/chunks/app/api/mcp/servers/route-3e3cc52436d34625.js +0 -1
  560. package/.next/static/chunks/app/api/mcp/test-connection/route-3e3cc52436d34625.js +0 -1
  561. package/.next/static/chunks/app/api/mcp/test-connection/stream/route-3e3cc52436d34625.js +0 -1
  562. package/.next/static/chunks/app/api/mcp-registry/route-3e3cc52436d34625.js +0 -1
  563. package/.next/static/chunks/app/api/mcp-registry/spotlight/route-3e3cc52436d34625.js +0 -1
  564. package/.next/static/chunks/app/api/model/[id]/route-3e3cc52436d34625.js +0 -1
  565. package/.next/static/chunks/app/api/model/provider/route-3e3cc52436d34625.js +0 -1
  566. package/.next/static/chunks/app/api/model/route-3e3cc52436d34625.js +0 -1
  567. package/.next/static/chunks/app/api/model/test/route-3e3cc52436d34625.js +0 -1
  568. package/.next/static/chunks/app/api/oauth/callback/route-3e3cc52436d34625.js +0 -1
  569. package/.next/static/chunks/app/api/oauth/initiate/route-3e3cc52436d34625.js +0 -1
  570. package/.next/static/chunks/app/api/oauth/reset/route-3e3cc52436d34625.js +0 -1
  571. package/.next/static/chunks/app/api/packages/build/route-3e3cc52436d34625.js +0 -1
  572. package/.next/static/chunks/app/api/packages/derive-secrets/route-3e3cc52436d34625.js +0 -1
  573. package/.next/static/chunks/app/api/packages/install/route-3e3cc52436d34625.js +0 -1
  574. package/.next/static/chunks/app/api/packages/install/status/route-3e3cc52436d34625.js +0 -1
  575. package/.next/static/chunks/app/api/packages/resolve/route-3e3cc52436d34625.js +0 -1
  576. package/.next/static/chunks/app/api/planned-executions/[id]/route-3e3cc52436d34625.js +0 -1
  577. package/.next/static/chunks/app/api/planned-executions/[id]/run/route-3e3cc52436d34625.js +0 -1
  578. package/.next/static/chunks/app/api/planned-executions/[id]/runs/route-3e3cc52436d34625.js +0 -1
  579. package/.next/static/chunks/app/api/planned-executions/preview-schedule/route-3e3cc52436d34625.js +0 -1
  580. package/.next/static/chunks/app/api/planned-executions/reconcile/route-3e3cc52436d34625.js +0 -1
  581. package/.next/static/chunks/app/api/planned-executions/route-3e3cc52436d34625.js +0 -1
  582. package/.next/static/chunks/app/api/registry/auth/resend/route-3e3cc52436d34625.js +0 -1
  583. package/.next/static/chunks/app/api/registry/auth/route-3e3cc52436d34625.js +0 -1
  584. package/.next/static/chunks/app/api/registry/publish/route-3e3cc52436d34625.js +0 -1
  585. package/.next/static/chunks/app/api/registry/settings/route-3e3cc52436d34625.js +0 -1
  586. package/.next/static/chunks/app/api/restore/route-3e3cc52436d34625.js +0 -1
  587. package/.next/static/chunks/app/api/runs/active/route-3e3cc52436d34625.js +0 -1
  588. package/.next/static/chunks/app/api/storage/route-3e3cc52436d34625.js +0 -1
  589. package/.next/static/chunks/app/api/update/route-3e3cc52436d34625.js +0 -1
  590. package/.next/static/chunks/app/api/waves/route-3e3cc52436d34625.js +0 -1
  591. package/.next/static/chunks/app/api/webhooks/[id]/route-3e3cc52436d34625.js +0 -1
  592. package/.next/static/chunks/app/chat/page-93403b0e520ba8d3.js +0 -1
  593. package/.next/static/chunks/app/docs/page-2c972a639cd9a41c.js +0 -1
  594. package/.next/static/chunks/app/flows/page-d60c5b47c923564a.js +0 -1
  595. package/.next/static/chunks/app/mcp/page-92c03186d566a4f5.js +0 -1
  596. package/.next/static/chunks/app/mcp-flows/route-3e3cc52436d34625.js +0 -1
  597. package/.next/static/chunks/app/mcp-proxy/[server]/route-3e3cc52436d34625.js +0 -1
  598. package/.next/static/chunks/app/packages/page-e64480d78312edd0.js +0 -1
  599. package/.next/static/chunks/app/settings/page-d067a3a624ec2fa0.js +0 -1
  600. package/.next/static/chunks/app/v1/chat/completions/route-3e3cc52436d34625.js +0 -1
  601. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/breakpoints/route-3e3cc52436d34625.js +0 -1
  602. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/cancel/route-3e3cc52436d34625.js +0 -1
  603. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/debug/continue/route-3e3cc52436d34625.js +0 -1
  604. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/debug/step/route-3e3cc52436d34625.js +0 -1
  605. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/edit-state/route-3e3cc52436d34625.js +0 -1
  606. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/events/route-3e3cc52436d34625.js +0 -1
  607. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/resources/route-3e3cc52436d34625.js +0 -1
  608. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/respond/route-3e3cc52436d34625.js +0 -1
  609. package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/route-3e3cc52436d34625.js +0 -1
  610. package/.next/static/chunks/app/v1/chat/conversations/route-3e3cc52436d34625.js +0 -1
  611. package/.next/static/chunks/app/v1/models/route-3e3cc52436d34625.js +0 -1
  612. package/.next/static/chunks/app/waves/page-ff15db2f75fb5d62.js +0 -1
  613. package/.next/static/chunks/webpack-2b2d7505a2ac6538.js +0 -1
  614. /package/.next/static/{O-elWbT5rs6ci1CrCqez1 → Q6ITx_bZyoEOnKdZu_C7j}/_ssgManifest.js +0 -0
@@ -0,0 +1 @@
1
+ "use strict";exports.id=5200,exports.ids=[5200],exports.modules={40443:(a,b,c)=>{c.d(b,{A:()=>g,Y:()=>f});var d=c(29565),e=c(33105);function f(a){return(0,e.Ay)("MuiListItemButton",a)}let g=(0,d.A)("MuiListItemButton",["root","focusVisible","dense","alignItemsFlexStart","disabled","divider","gutters","selected"])},53222:(a,b,c)=>{c.d(b,{A:()=>f});var d=c(11801),e=c(21124);let f=(0,d.A)((0,e.jsx)("path",{d:"M17.65 6.35C16.2 4.9 14.21 4 12 4c-4.42 0-7.99 3.58-7.99 8s3.57 8 7.99 8c3.73 0 6.84-2.55 7.73-6h-2.08c-.82 2.33-3.04 4-5.65 4-3.31 0-6-2.69-6-6s2.69-6 6-6c1.66 0 3.14.69 4.22 1.78L13 11h7V4z"}),"Refresh")},71439:(a,b,c)=>{c.d(b,{Ay:()=>x});var d=c(38301),e=c(43249),f=c(2783),g=c(7103),h=c(18168),i=c(68333),j=c(6636),k=c(67934),l=c(26636),m=c(55470),n=c(29565),o=c(33105);function p(a){return(0,o.Ay)("MuiListItem",a)}(0,n.A)("MuiListItem",["root","container","dense","alignItemsFlexStart","divider","gutters","padding","secondaryAction"]);var q=c(40443);function r(a){return(0,o.Ay)("MuiListItemSecondaryAction",a)}(0,n.A)("MuiListItemSecondaryAction",["root","disableGutters"]);var s=c(21124);let t=(0,h.Ay)("div",{name:"MuiListItemSecondaryAction",slot:"Root",overridesResolver:(a,b)=>{let{ownerState:c}=a;return[b.root,c.disableGutters&&b.disableGutters]}})({position:"absolute",right:16,top:"50%",transform:"translateY(-50%)",variants:[{props:({ownerState:a})=>a.disableGutters,style:{right:0}}]}),u=d.forwardRef(function(a,b){let c=(0,j.b)({props:a,name:"MuiListItemSecondaryAction"}),{className:g,...h}=c,i=d.useContext(m.A),k={...c,disableGutters:i.disableGutters},l=(a=>{let{disableGutters:b,classes:c}=a;return(0,f.A)({root:["root",b&&"disableGutters"]},r,c)})(k);return(0,s.jsx)(t,{className:(0,e.A)(l.root,g),ownerState:k,ref:b,...h})});u.muiName="ListItemSecondaryAction";let v=(0,h.Ay)("div",{name:"MuiListItem",slot:"Root",overridesResolver:(a,b)=>{let{ownerState:c}=a;return[b.root,c.dense&&b.dense,"flex-start"===c.alignItems&&b.alignItemsFlexStart,c.divider&&b.divider,!c.disableGutters&&b.gutters,!c.disablePadding&&b.padding,c.hasSecondaryAction&&b.secondaryAction]}})((0,i.A)(({theme:a})=>({display:"flex",justifyContent:"flex-start",alignItems:"center",position:"relative",textDecoration:"none",width:"100%",boxSizing:"border-box",textAlign:"left",variants:[{props:({ownerState:a})=>!a.disablePadding,style:{paddingTop:8,paddingBottom:8}},{props:({ownerState:a})=>!a.disablePadding&&a.dense,style:{paddingTop:4,paddingBottom:4}},{props:({ownerState:a})=>!a.disablePadding&&!a.disableGutters,style:{paddingLeft:16,paddingRight:16}},{props:({ownerState:a})=>!a.disablePadding&&!!a.secondaryAction,style:{paddingRight:48}},{props:({ownerState:a})=>!!a.secondaryAction,style:{[`& > .${q.A.root}`]:{paddingRight:48}}},{props:{alignItems:"flex-start"},style:{alignItems:"flex-start"}},{props:({ownerState:a})=>a.divider,style:{borderBottom:`1px solid ${(a.vars||a).palette.divider}`,backgroundClip:"padding-box"}},{props:({ownerState:a})=>a.button,style:{transition:a.transitions.create("background-color",{duration:a.transitions.duration.shortest}),"&:hover":{textDecoration:"none",backgroundColor:(a.vars||a).palette.action.hover,"@media (hover: none)":{backgroundColor:"transparent"}}}},{props:({ownerState:a})=>a.hasSecondaryAction,style:{paddingRight:48}}]}))),w=(0,h.Ay)("li",{name:"MuiListItem",slot:"Container",overridesResolver:(a,b)=>b.container})({position:"relative"}),x=d.forwardRef(function(a,b){let c=(0,j.b)({props:a,name:"MuiListItem"}),{alignItems:h="center",children:i,className:n,component:o,components:q={},componentsProps:r={},ContainerComponent:t="li",ContainerProps:{className:x,...y}={},dense:z=!1,disableGutters:A=!1,disablePadding:B=!1,divider:C=!1,secondaryAction:D,slotProps:E={},slots:F={},...G}=c,H=d.useContext(m.A),I=d.useMemo(()=>({dense:z||H.dense||!1,alignItems:h,disableGutters:A}),[h,H.dense,z,A]),J=d.useRef(null),K=d.Children.toArray(i),L=K.length&&(0,k.A)(K[K.length-1],["ListItemSecondaryAction"]),M={...c,alignItems:h,dense:I.dense,disableGutters:A,disablePadding:B,divider:C,hasSecondaryAction:L},N=(a=>{let{alignItems:b,classes:c,dense:d,disableGutters:e,disablePadding:g,divider:h,hasSecondaryAction:i}=a;return(0,f.A)({root:["root",d&&"dense",!e&&"gutters",!g&&"padding",h&&"divider","flex-start"===b&&"alignItemsFlexStart",i&&"secondaryAction"],container:["container"]},p,c)})(M),O=(0,l.A)(J,b),P=F.root||q.Root||v,Q=E.root||r.root||{},R={className:(0,e.A)(N.root,Q.className,n),...G},S=o||"li";return L?(S=R.component||o?S:"div","li"===t&&("li"===S?S="div":"li"===R.component&&(R.component="div")),(0,s.jsx)(m.A.Provider,{value:I,children:(0,s.jsxs)(w,{as:t,className:(0,e.A)(N.container,x),ref:O,ownerState:M,...y,children:[(0,s.jsx)(P,{...Q,...!(0,g.A)(P)&&{as:S,ownerState:{...M,...Q.ownerState}},...R,children:K}),K.pop()]})})):(0,s.jsx)(m.A.Provider,{value:I,children:(0,s.jsxs)(P,{...Q,as:S,ref:O,...!(0,g.A)(P)&&{ownerState:{...M,...Q.ownerState}},...R,children:[K,D&&(0,s.jsx)(u,{children:D})]})})})},75983:(a,b,c)=>{c.d(b,{A:()=>s});var d=c(38301),e=c(43249),f=c(2783),g=c(37489),h=c(18168),i=c(68333),j=c(6636),k=c(41126),l=c(14328),m=c(14758),n=c(26636),o=c(55470),p=c(40443),q=c(21124);let r=(0,h.Ay)(l.A,{shouldForwardProp:a=>(0,k.A)(a)||"classes"===a,name:"MuiListItemButton",slot:"Root",overridesResolver:(a,b)=>{let{ownerState:c}=a;return[b.root,c.dense&&b.dense,"flex-start"===c.alignItems&&b.alignItemsFlexStart,c.divider&&b.divider,!c.disableGutters&&b.gutters]}})((0,i.A)(({theme:a})=>({display:"flex",flexGrow:1,justifyContent:"flex-start",alignItems:"center",position:"relative",textDecoration:"none",minWidth:0,boxSizing:"border-box",textAlign:"left",paddingTop:8,paddingBottom:8,transition:a.transitions.create("background-color",{duration:a.transitions.duration.shortest}),"&:hover":{textDecoration:"none",backgroundColor:(a.vars||a).palette.action.hover,"@media (hover: none)":{backgroundColor:"transparent"}},[`&.${p.A.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),[`&.${p.A.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)}},[`&.${p.A.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)}},[`&.${p.A.focusVisible}`]:{backgroundColor:(a.vars||a).palette.action.focus},[`&.${p.A.disabled}`]:{opacity:(a.vars||a).palette.action.disabledOpacity},variants:[{props:({ownerState:a})=>a.divider,style:{borderBottom:`1px solid ${(a.vars||a).palette.divider}`,backgroundClip:"padding-box"}},{props:{alignItems:"flex-start"},style:{alignItems:"flex-start"}},{props:({ownerState:a})=>!a.disableGutters,style:{paddingLeft:16,paddingRight:16}},{props:({ownerState:a})=>a.dense,style:{paddingTop:4,paddingBottom:4}}]}))),s=d.forwardRef(function(a,b){let c=(0,j.b)({props:a,name:"MuiListItemButton"}),{alignItems:g="center",autoFocus:h=!1,component:i="div",children:k,dense:l=!1,disableGutters:s=!1,divider:t=!1,focusVisibleClassName:u,selected:v=!1,className:w,...x}=c,y=d.useContext(o.A),z=d.useMemo(()=>({dense:l||y.dense||!1,alignItems:g,disableGutters:s}),[g,y.dense,l,s]),A=d.useRef(null);(0,m.A)(()=>{h&&A.current&&A.current.focus()},[h]);let B={...c,alignItems:g,dense:z.dense,disableGutters:s,divider:t,selected:v},C=(a=>{let{alignItems:b,classes:c,dense:d,disabled:e,disableGutters:g,divider:h,selected:i}=a,j=(0,f.A)({root:["root",d&&"dense",!g&&"gutters",h&&"divider",e&&"disabled","flex-start"===b&&"alignItemsFlexStart",i&&"selected"]},p.Y,c);return{...c,...j}})(B),D=(0,n.A)(A,b);return(0,q.jsx)(o.A.Provider,{value:z,children:(0,q.jsx)(r,{ref:D,href:x.href||x.to,component:(x.href||x.to)&&"div"===i?"button":i,focusVisibleClassName:(0,e.A)(C.focusVisible,u),ownerState:B,className:(0,e.A)(C.root,w),...x,classes:C,children:k})})})}};
@@ -1 +1 @@
1
- "use strict";exports.id=5463,exports.ids=[5463],exports.modules={25463:(a,b,c)=>{c.d(b,{internalCallToolFor:()=>g,internalToolDefinitionsFor:()=>f});var d=c(81495),e=c(7658);async function f(a){switch(a){case d._:{let{internalToolDefinitions:a}=await Promise.all([c.e(1373),c.e(3736),c.e(9794),c.e(7821),c.e(346),c.e(724),c.e(2940),c.e(6826),c.e(4671),c.e(4771),c.e(7214),c.e(1226),c.e(4265),c.e(5708),c.e(227),c.e(2859)]).then(c.bind(c,42859));return a()}case e.K3:{let{filesystemToolDefinitions:a}=await c.e(8387).then(c.bind(c,18387));return a()}case e.PA:{let{bashToolDefinitions:a}=await c.e(5544).then(c.bind(c,35544));return a()}default:return[]}}async function g(a,b,f,g){switch(b){case d._:{let{internalCallTool:b}=await Promise.all([c.e(1373),c.e(3736),c.e(9794),c.e(7821),c.e(346),c.e(724),c.e(2940),c.e(6826),c.e(4671),c.e(4771),c.e(7214),c.e(1226),c.e(4265),c.e(5708),c.e(227),c.e(2859)]).then(c.bind(c,42859));return b(a,f,g)}case e.K3:{let{filesystemCallTool:a}=await c.e(8387).then(c.bind(c,18387));return a(f,g)}case e.PA:{let{bashCallTool:a}=await c.e(5544).then(c.bind(c,35544));return a(f,g)}default:return{content:[{type:"text",text:`Unknown built-in server: ${b}`}],isError:!0}}}}};
1
+ "use strict";exports.id=5463,exports.ids=[5463],exports.modules={25463:(a,b,c)=>{c.d(b,{internalCallToolFor:()=>g,internalToolDefinitionsFor:()=>f});var d=c(81495),e=c(7658);async function f(a){switch(a){case d._:{let{internalToolDefinitions:a}=await Promise.all([c.e(1373),c.e(3736),c.e(9794),c.e(7821),c.e(346),c.e(724),c.e(2940),c.e(6826),c.e(4771),c.e(4671),c.e(4265),c.e(7214),c.e(1226),c.e(5708),c.e(227),c.e(2859)]).then(c.bind(c,42859));return a()}case e.K3:{let{filesystemToolDefinitions:a}=await c.e(8387).then(c.bind(c,18387));return a()}case e.PA:{let{bashToolDefinitions:a}=await c.e(5544).then(c.bind(c,35544));return a()}default:return[]}}async function g(a,b,f,g){switch(b){case d._:{let{internalCallTool:b}=await Promise.all([c.e(1373),c.e(3736),c.e(9794),c.e(7821),c.e(346),c.e(724),c.e(2940),c.e(6826),c.e(4771),c.e(4671),c.e(4265),c.e(7214),c.e(1226),c.e(5708),c.e(227),c.e(2859)]).then(c.bind(c,42859));return b(a,f,g)}case e.K3:{let{filesystemCallTool:a}=await c.e(8387).then(c.bind(c,18387));return a(f,g)}case e.PA:{let{bashCallTool:a}=await c.e(5544).then(c.bind(c,35544));return a(f,g)}default:return{content:[{type:"text",text:`Unknown built-in server: ${b}`}],isError:!0}}}}};
@@ -1 +1 @@
1
- "use strict";exports.id=1089,exports.ids=[1089],exports.modules={354:(a,b,c)=>{c.d(b,{A:()=>f});var d=c(11801),e=c(21124);let f=(0,d.A)((0,e.jsx)("path",{d:"M20 6h-8l-2-2H7.17l4 4H20v9.17l1.76 1.76c.15-.28.24-.59.24-.93V8c0-1.1-.9-2-2-2M2.1 2.1.69 3.51l1.56 1.56c-.15.28-.24.59-.24.93L2 18c0 1.1.9 2 2 2h13.17l3.31 3.31 1.41-1.41zM4 18V6.83L15.17 18z"}),"FolderOffOutlined")},423:(a,b,c)=>{c.d(b,{A:()=>s});var d=c(38301),e=c(43249),f=c(2783),g=c(18168),h=c(68333),i=c(6636),j=c(29565),k=c(33105);function l(a){return(0,k.Ay)("MuiCardActionArea",a)}let m=(0,j.A)("MuiCardActionArea",["root","focusVisible","focusHighlight"]);var n=c(14328),o=c(20385),p=c(21124);let q=(0,g.Ay)(n.A,{name:"MuiCardActionArea",slot:"Root",overridesResolver:(a,b)=>b.root})((0,h.A)(({theme:a})=>({display:"block",textAlign:"inherit",borderRadius:"inherit",width:"100%",[`&:hover .${m.focusHighlight}`]:{opacity:(a.vars||a).palette.action.hoverOpacity,"@media (hover: none)":{opacity:0}},[`&.${m.focusVisible} .${m.focusHighlight}`]:{opacity:(a.vars||a).palette.action.focusOpacity}}))),r=(0,g.Ay)("span",{name:"MuiCardActionArea",slot:"FocusHighlight",overridesResolver:(a,b)=>b.focusHighlight})((0,h.A)(({theme:a})=>({overflow:"hidden",pointerEvents:"none",position:"absolute",top:0,right:0,bottom:0,left:0,borderRadius:"inherit",opacity:0,backgroundColor:"currentcolor",transition:a.transitions.create("opacity",{duration:a.transitions.duration.short})}))),s=d.forwardRef(function(a,b){let c=(0,i.b)({props:a,name:"MuiCardActionArea"}),{children:d,className:g,focusVisibleClassName:h,slots:j={},slotProps:k={},...m}=c,n=(a=>{let{classes:b}=a;return(0,f.A)({root:["root"],focusHighlight:["focusHighlight"]},l,b)})(c),s={slots:j,slotProps:k},[t,u]=(0,o.A)("root",{elementType:q,externalForwardedProps:{...s,...m},shouldForwardComponentProp:!0,ownerState:c,ref:b,className:(0,e.A)(n.root,g),additionalProps:{focusVisibleClassName:(0,e.A)(h,n.focusVisible)}}),[v,w]=(0,o.A)("focusHighlight",{elementType:r,externalForwardedProps:s,ownerState:c,ref:b,className:n.focusHighlight});return(0,p.jsxs)(t,{...u,children:[d,(0,p.jsx)(v,{...w})]})})},1312:(a,b,c)=>{c.d(b,{A:()=>f});var d=c(11801),e=c(21124);let f=(0,d.A)((0,e.jsx)("path",{d:"M20 6h-8l-2-2H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2m0 12H4V6h5.17l1.41 1.41.59.59H20zm-7.84-6H8v2h4.16l-1.59 1.59L11.99 17 16 13.01 11.99 9l-1.41 1.41z"}),"DriveFileMoveOutlined")},5501:(a,b,c)=>{c.d(b,{A:()=>f});var d=c(11801),e=c(21124);let f=(0,d.A)((0,e.jsx)("path",{d:"M12 17.27 18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z"}),"Star")},5748:(a,b,c)=>{c.d(b,{A:()=>f});var d=c(11801),e=c(21124);let f=(0,d.A)((0,e.jsx)("path",{d:"M13 13v8h8v-8zM3 21h8v-8H3zM3 3v8h8V3zm13.66-1.31L11 7.34 16.66 13l5.66-5.66z"}),"Widgets")},8165:(a,b,c)=>{c.d(b,{A:()=>f});var d=c(11801),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(11801),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")},18467:(a,b,c)=>{c.d(b,{A:()=>f});var d=c(11801),e=c(21124);let f=(0,d.A)((0,e.jsx)("path",{d:"m9.17 6 2 2H20v10H4V6zM10 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2h-8z"}),"FolderOutlined")},21358:(a,b,c)=>{c.d(b,{A:()=>f});var d=c(11801),e=c(21124);let f=(0,d.A)([(0,e.jsx)("path",{d:"M12 5.99 19.53 19H4.47zM12 2 1 21h22z"},"0"),(0,e.jsx)("path",{d:"M13 16h-2v2h2zm0-6h-2v5h2z"},"1")],"WarningAmber")},27114:(a,b,c)=>{c.d(b,{A:()=>n});var d=c(38301),e=c(43249),f=c(2783),g=c(18168),h=c(6636),i=c(29565),j=c(33105);function k(a){return(0,j.Ay)("MuiCardContent",a)}(0,i.A)("MuiCardContent",["root"]);var l=c(21124);let m=(0,g.Ay)("div",{name:"MuiCardContent",slot:"Root",overridesResolver:(a,b)=>b.root})({padding:16,"&:last-child":{paddingBottom:24}}),n=d.forwardRef(function(a,b){let c=(0,h.b)({props:a,name:"MuiCardContent"}),{className:d,component:g="div",...i}=c,j={...c,component:g},n=(a=>{let{classes:b}=a;return(0,f.A)({root:["root"]},k,b)})(j);return(0,l.jsx)(m,{as:g,className:(0,e.A)(n.root,d),ownerState:j,ref:b,...i})})},30137:(a,b,c)=>{c.d(b,{A:()=>f});var d=c(11801),e=c(21124);let f=(0,d.A)((0,e.jsx)("path",{d:"M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"}),"Close")},30818:(a,b,c)=>{c.d(b,{A:()=>o});var d=c(38301),e=c(43249),f=c(2783),g=c(18168),h=c(6636),i=c(54573),j=c(29565),k=c(33105);function l(a){return(0,k.Ay)("MuiCard",a)}(0,j.A)("MuiCard",["root"]);var m=c(21124);let n=(0,g.Ay)(i.A,{name:"MuiCard",slot:"Root",overridesResolver:(a,b)=>b.root})({overflow:"hidden"}),o=d.forwardRef(function(a,b){let c=(0,h.b)({props:a,name:"MuiCard"}),{className:d,raised:g=!1,...i}=c,j={...c,raised:g},k=(a=>{let{classes:b}=a;return(0,f.A)({root:["root"]},l,b)})(j);return(0,m.jsx)(n,{className:(0,e.A)(k.root,d),elevation:g?8:void 0,ref:b,ownerState:j,...i})})},31973:(a,b,c)=>{c.d(b,{A:()=>f});var d=c(11801),e=c(21124);let f=(0,d.A)((0,e.jsx)("path",{d:"M20 6h-8l-2-2H4c-1.11 0-1.99.89-1.99 2L2 18c0 1.11.89 2 2 2h16c1.11 0 2-.89 2-2V8c0-1.11-.89-2-2-2m0 12H4V6h5.17l2 2H20zm-8-4h2v2h2v-2h2v-2h-2v-2h-2v2h-2z"}),"CreateNewFolderOutlined")},36698:(a,b,c)=>{c.d(b,{A:()=>f});var d=c(11801),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")},38941:(a,b,c)=>{c.d(b,{A:()=>f});var d=c(11801),e=c(21124);let f=(0,d.A)((0,e.jsx)("path",{d:"M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2m0 16H8V7h11z"}),"ContentCopy")},40973:(a,b,c)=>{c.d(b,{A:()=>f});var d=c(11801),e=c(21124);let f=(0,d.A)((0,e.jsx)("path",{d:"M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14"}),"Search")},53222:(a,b,c)=>{c.d(b,{A:()=>f});var d=c(11801),e=c(21124);let f=(0,d.A)((0,e.jsx)("path",{d:"M17.65 6.35C16.2 4.9 14.21 4 12 4c-4.42 0-7.99 3.58-7.99 8s3.57 8 7.99 8c3.73 0 6.84-2.55 7.73-6h-2.08c-.82 2.33-3.04 4-5.65 4-3.31 0-6-2.69-6-6s2.69-6 6-6c1.66 0 3.14.69 4.22 1.78L13 11h7V4z"}),"Refresh")},56685:(a,b,c)=>{c.d(b,{A:()=>f});var d=c(11801),e=c(21124);let f=(0,d.A)((0,e.jsx)("path",{d:"M20 4H4c-1.11 0-2 .9-2 2v12c0 1.1.89 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.89-2-2-2m0 14H4V8h16zm-2-1h-6v-2h6zM7.5 17l-1.41-1.41L8.67 13l-2.59-2.59L7.5 9l4 4z"}),"Terminal")},72264:(a,b,c)=>{c.d(b,{A:()=>f});var d=c(11801),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 2m0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8"}),"RadioButtonUnchecked")},98463:(a,b,c)=>{c.d(b,{A:()=>n});var d=c(38301),e=c(43249),f=c(2783),g=c(18168),h=c(6636),i=c(29565),j=c(33105);function k(a){return(0,j.Ay)("MuiCardActions",a)}(0,i.A)("MuiCardActions",["root","spacing"]);var l=c(21124);let m=(0,g.Ay)("div",{name:"MuiCardActions",slot:"Root",overridesResolver:(a,b)=>{let{ownerState:c}=a;return[b.root,!c.disableSpacing&&b.spacing]}})({display:"flex",alignItems:"center",padding:8,variants:[{props:{disableSpacing:!1},style:{"& > :not(style) ~ :not(style)":{marginLeft:8}}}]}),n=d.forwardRef(function(a,b){let c=(0,h.b)({props:a,name:"MuiCardActions"}),{disableSpacing:d=!1,className:g,...i}=c,j={...c,disableSpacing:d},n=(a=>{let{classes:b,disableSpacing:c}=a;return(0,f.A)({root:["root",!c&&"spacing"]},k,b)})(j);return(0,l.jsx)(m,{className:(0,e.A)(n.root,g),ownerState:j,ref:b,...i})})},99587:(a,b,c)=>{c.d(b,{A:()=>f});var d=c(11801),e=c(21124);let f=(0,d.A)((0,e.jsx)("path",{d:"m22 9.24-7.19-.62L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21 12 17.27 18.18 21l-1.63-7.03zM12 15.4l-3.76 2.27 1-4.28-3.32-2.88 4.38-.38L12 6.1l1.71 4.04 4.38.38-3.32 2.88 1 4.28z"}),"StarBorder")}};
1
+ "use strict";exports.id=5471,exports.ids=[5471],exports.modules={354:(a,b,c)=>{c.d(b,{A:()=>f});var d=c(11801),e=c(21124);let f=(0,d.A)((0,e.jsx)("path",{d:"M20 6h-8l-2-2H7.17l4 4H20v9.17l1.76 1.76c.15-.28.24-.59.24-.93V8c0-1.1-.9-2-2-2M2.1 2.1.69 3.51l1.56 1.56c-.15.28-.24.59-.24.93L2 18c0 1.1.9 2 2 2h13.17l3.31 3.31 1.41-1.41zM4 18V6.83L15.17 18z"}),"FolderOffOutlined")},423:(a,b,c)=>{c.d(b,{A:()=>s});var d=c(38301),e=c(43249),f=c(2783),g=c(18168),h=c(68333),i=c(6636),j=c(29565),k=c(33105);function l(a){return(0,k.Ay)("MuiCardActionArea",a)}let m=(0,j.A)("MuiCardActionArea",["root","focusVisible","focusHighlight"]);var n=c(14328),o=c(20385),p=c(21124);let q=(0,g.Ay)(n.A,{name:"MuiCardActionArea",slot:"Root",overridesResolver:(a,b)=>b.root})((0,h.A)(({theme:a})=>({display:"block",textAlign:"inherit",borderRadius:"inherit",width:"100%",[`&:hover .${m.focusHighlight}`]:{opacity:(a.vars||a).palette.action.hoverOpacity,"@media (hover: none)":{opacity:0}},[`&.${m.focusVisible} .${m.focusHighlight}`]:{opacity:(a.vars||a).palette.action.focusOpacity}}))),r=(0,g.Ay)("span",{name:"MuiCardActionArea",slot:"FocusHighlight",overridesResolver:(a,b)=>b.focusHighlight})((0,h.A)(({theme:a})=>({overflow:"hidden",pointerEvents:"none",position:"absolute",top:0,right:0,bottom:0,left:0,borderRadius:"inherit",opacity:0,backgroundColor:"currentcolor",transition:a.transitions.create("opacity",{duration:a.transitions.duration.short})}))),s=d.forwardRef(function(a,b){let c=(0,i.b)({props:a,name:"MuiCardActionArea"}),{children:d,className:g,focusVisibleClassName:h,slots:j={},slotProps:k={},...m}=c,n=(a=>{let{classes:b}=a;return(0,f.A)({root:["root"],focusHighlight:["focusHighlight"]},l,b)})(c),s={slots:j,slotProps:k},[t,u]=(0,o.A)("root",{elementType:q,externalForwardedProps:{...s,...m},shouldForwardComponentProp:!0,ownerState:c,ref:b,className:(0,e.A)(n.root,g),additionalProps:{focusVisibleClassName:(0,e.A)(h,n.focusVisible)}}),[v,w]=(0,o.A)("focusHighlight",{elementType:r,externalForwardedProps:s,ownerState:c,ref:b,className:n.focusHighlight});return(0,p.jsxs)(t,{...u,children:[d,(0,p.jsx)(v,{...w})]})})},1312:(a,b,c)=>{c.d(b,{A:()=>f});var d=c(11801),e=c(21124);let f=(0,d.A)((0,e.jsx)("path",{d:"M20 6h-8l-2-2H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2m0 12H4V6h5.17l1.41 1.41.59.59H20zm-7.84-6H8v2h4.16l-1.59 1.59L11.99 17 16 13.01 11.99 9l-1.41 1.41z"}),"DriveFileMoveOutlined")},5501:(a,b,c)=>{c.d(b,{A:()=>f});var d=c(11801),e=c(21124);let f=(0,d.A)((0,e.jsx)("path",{d:"M12 17.27 18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z"}),"Star")},5748:(a,b,c)=>{c.d(b,{A:()=>f});var d=c(11801),e=c(21124);let f=(0,d.A)((0,e.jsx)("path",{d:"M13 13v8h8v-8zM3 21h8v-8H3zM3 3v8h8V3zm13.66-1.31L11 7.34 16.66 13l5.66-5.66z"}),"Widgets")},8165:(a,b,c)=>{c.d(b,{A:()=>f});var d=c(11801),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(11801),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")},18467:(a,b,c)=>{c.d(b,{A:()=>f});var d=c(11801),e=c(21124);let f=(0,d.A)((0,e.jsx)("path",{d:"m9.17 6 2 2H20v10H4V6zM10 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2h-8z"}),"FolderOutlined")},21358:(a,b,c)=>{c.d(b,{A:()=>f});var d=c(11801),e=c(21124);let f=(0,d.A)([(0,e.jsx)("path",{d:"M12 5.99 19.53 19H4.47zM12 2 1 21h22z"},"0"),(0,e.jsx)("path",{d:"M13 16h-2v2h2zm0-6h-2v5h2z"},"1")],"WarningAmber")},27114:(a,b,c)=>{c.d(b,{A:()=>n});var d=c(38301),e=c(43249),f=c(2783),g=c(18168),h=c(6636),i=c(29565),j=c(33105);function k(a){return(0,j.Ay)("MuiCardContent",a)}(0,i.A)("MuiCardContent",["root"]);var l=c(21124);let m=(0,g.Ay)("div",{name:"MuiCardContent",slot:"Root",overridesResolver:(a,b)=>b.root})({padding:16,"&:last-child":{paddingBottom:24}}),n=d.forwardRef(function(a,b){let c=(0,h.b)({props:a,name:"MuiCardContent"}),{className:d,component:g="div",...i}=c,j={...c,component:g},n=(a=>{let{classes:b}=a;return(0,f.A)({root:["root"]},k,b)})(j);return(0,l.jsx)(m,{as:g,className:(0,e.A)(n.root,d),ownerState:j,ref:b,...i})})},30137:(a,b,c)=>{c.d(b,{A:()=>f});var d=c(11801),e=c(21124);let f=(0,d.A)((0,e.jsx)("path",{d:"M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"}),"Close")},30818:(a,b,c)=>{c.d(b,{A:()=>o});var d=c(38301),e=c(43249),f=c(2783),g=c(18168),h=c(6636),i=c(54573),j=c(29565),k=c(33105);function l(a){return(0,k.Ay)("MuiCard",a)}(0,j.A)("MuiCard",["root"]);var m=c(21124);let n=(0,g.Ay)(i.A,{name:"MuiCard",slot:"Root",overridesResolver:(a,b)=>b.root})({overflow:"hidden"}),o=d.forwardRef(function(a,b){let c=(0,h.b)({props:a,name:"MuiCard"}),{className:d,raised:g=!1,...i}=c,j={...c,raised:g},k=(a=>{let{classes:b}=a;return(0,f.A)({root:["root"]},l,b)})(j);return(0,m.jsx)(n,{className:(0,e.A)(k.root,d),elevation:g?8:void 0,ref:b,ownerState:j,...i})})},31973:(a,b,c)=>{c.d(b,{A:()=>f});var d=c(11801),e=c(21124);let f=(0,d.A)((0,e.jsx)("path",{d:"M20 6h-8l-2-2H4c-1.11 0-1.99.89-1.99 2L2 18c0 1.11.89 2 2 2h16c1.11 0 2-.89 2-2V8c0-1.11-.89-2-2-2m0 12H4V6h5.17l2 2H20zm-8-4h2v2h2v-2h2v-2h-2v-2h-2v2h-2z"}),"CreateNewFolderOutlined")},36698:(a,b,c)=>{c.d(b,{A:()=>f});var d=c(11801),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")},38941:(a,b,c)=>{c.d(b,{A:()=>f});var d=c(11801),e=c(21124);let f=(0,d.A)((0,e.jsx)("path",{d:"M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2m0 16H8V7h11z"}),"ContentCopy")},40973:(a,b,c)=>{c.d(b,{A:()=>f});var d=c(11801),e=c(21124);let f=(0,d.A)((0,e.jsx)("path",{d:"M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14"}),"Search")},56685:(a,b,c)=>{c.d(b,{A:()=>f});var d=c(11801),e=c(21124);let f=(0,d.A)((0,e.jsx)("path",{d:"M20 4H4c-1.11 0-2 .9-2 2v12c0 1.1.89 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.89-2-2-2m0 14H4V8h16zm-2-1h-6v-2h6zM7.5 17l-1.41-1.41L8.67 13l-2.59-2.59L7.5 9l4 4z"}),"Terminal")},63908:(a,b,c)=>{c.d(b,{A:()=>f});var d=c(11801),e=c(21124);let f=(0,d.A)((0,e.jsx)("path",{d:"m12 8-6 6 1.41 1.41L12 10.83l4.59 4.58L18 14z"}),"ExpandLess")},72264:(a,b,c)=>{c.d(b,{A:()=>f});var d=c(11801),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 2m0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8"}),"RadioButtonUnchecked")},98463:(a,b,c)=>{c.d(b,{A:()=>n});var d=c(38301),e=c(43249),f=c(2783),g=c(18168),h=c(6636),i=c(29565),j=c(33105);function k(a){return(0,j.Ay)("MuiCardActions",a)}(0,i.A)("MuiCardActions",["root","spacing"]);var l=c(21124);let m=(0,g.Ay)("div",{name:"MuiCardActions",slot:"Root",overridesResolver:(a,b)=>{let{ownerState:c}=a;return[b.root,!c.disableSpacing&&b.spacing]}})({display:"flex",alignItems:"center",padding:8,variants:[{props:{disableSpacing:!1},style:{"& > :not(style) ~ :not(style)":{marginLeft:8}}}]}),n=d.forwardRef(function(a,b){let c=(0,h.b)({props:a,name:"MuiCardActions"}),{disableSpacing:d=!1,className:g,...i}=c,j={...c,disableSpacing:d},n=(a=>{let{classes:b,disableSpacing:c}=a;return(0,f.A)({root:["root",!c&&"spacing"]},k,b)})(j);return(0,l.jsx)(m,{className:(0,e.A)(n.root,g),ownerState:j,ref:b,...i})})},99587:(a,b,c)=>{c.d(b,{A:()=>f});var d=c(11801),e=c(21124);let f=(0,d.A)((0,e.jsx)("path",{d:"m22 9.24-7.19-.62L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21 12 17.27 18.18 21l-1.63-7.03zM12 15.4l-3.76 2.27 1-4.28-3.32-2.88 4.38-.38L12 6.1l1.71 4.04 4.38.38-3.32 2.88 1 4.28z"}),"StarBorder")}};
@@ -1,5 +1,5 @@
1
- "use strict";exports.id=5544,exports.ids=[5544],exports.modules={3233:(a,b,c)=>{c.d(b,{g:()=>f});var d=c(79646);let e=(0,c(50846).h)("utils/process/killProcessTree");function f(a,b=2e3){let c=a.pid;if(void 0===c)return()=>{};if("win32"===process.platform){try{(0,d.spawn)("taskkill",["/pid",String(c),"/T","/F"]).on("error",a=>e.debug(`taskkill failed for pid ${c}: ${a.message}`))}catch(a){e.debug(`taskkill spawn threw for pid ${c}: ${a instanceof Error?a.message:String(a)}`)}return()=>{}}try{process.kill(-c,"SIGTERM")}catch{}let g=setTimeout(()=>{try{process.kill(-c,"SIGKILL")}catch{}},b);return g.unref?.(),()=>clearTimeout(g)}},7969:(a,b,c)=>{c.d(b,{FK:()=>i,FN:()=>j});var d=c(33873),e=c.n(d),f=c(50846),g=c(7658);let h=(0,f.h)("backend/services/mcp/internal/confinement");function i(a,b){let c=e().relative(a,b);return""===c||!c.startsWith("..")&&!e().isAbsolute(c)}async function j(a,b){let c=function(a){for(let b of Array.isArray(a)?a:[a]){let a=process.env[b];if(!a||!a.trim())continue;let c=a.split(e().delimiter).map(a=>a.trim()).filter(Boolean).map(a=>e().resolve(a));if(c.length)return c}return null}(b),d=[];try{d=(await (0,g.AC)(a)).map(a=>e().resolve(a))}catch(a){h.warn("loadEffectiveRoots: could not read persisted roots",a)}if(!c)return d.length?d:null;let f=d.filter(a=>c.some(b=>i(b,a)));return f.length?f:c}},35544:(a,b,c)=>{c.d(b,{bashCallTool:()=>A,bashToolDefinitions:()=>u});var d=c(33873),e=c.n(d),f=c(79646),g=c(3233),h=c(50846),i=c(43326),j=c(7658),k=c(7969);let l=(0,h.h)("backend/services/mcp/internal/bashTools");function m(){return global.__flujo_bash_sessions||(global.__flujo_bash_sessions=new Map),global.__flujo_bash_sessions}function n(a,b=!1){return{content:[{type:"text",text:"string"==typeof a?a:JSON.stringify(a,null,2)}],...b?{isError:!0}:{}}}let o=["FLUJO_BASH_ROOTS","FLUJO_FS_ROOTS"];function p(a,b){let c=(0,i.ok)(),d="string"==typeof a?a.trim():"",f=d?e().isAbsolute(d)?e().resolve(d):e().resolve(c,d):c;if(b&&!b.some(a=>(0,k.FK)(a,f)))throw Error(`cwd "${f}" is outside the configured bash roots.`);return f}let q=new Set(["PATH","Path","HOME","USERPROFILE","TMP","TEMP","TMPDIR","LANG","LC_ALL","SystemRoot","windir","ComSpec","PATHEXT","SystemDrive","NUMBER_OF_PROCESSORS","PROCESSOR_ARCHITECTURE"]);function r(a){return"pwsh"===a||"bash"===a?a:"default"}function s(a,b,c){let{file:d,args:e,useShell:g}="pwsh"===c?{file:"win32"===process.platform?"pwsh.exe":"pwsh",args:["-NoProfile","-NonInteractive","-Command",a],useShell:!1}:"bash"===c?{file:"bash",args:["-c",a],useShell:!1}:{file:a,args:[],useShell:!0},h="win32"!==process.platform;try{return{child:(0,f.spawn)(d,e,{cwd:b,shell:g,env:function(){var a;if("string"==typeof(a=process.env.FLUJO_BASH_INHERIT_ENV)&&/^(1|true|yes|on)$/i.test(a.trim()))return process.env;let b={};for(let a of Object.keys(process.env))(q.has(a)||/^LC_/.test(a))&&(b[a]=process.env[a]);return b}(),detached:h})}}catch(a){return{child:void 0,startError:a instanceof Error?a.message:String(a)}}}function t(a,b){return c=>{let d=a();if(d.length>=1e5)return;let e=!1;(d+=c).length>1e5&&(d=d.slice(0,1e5)+"\n…[output truncated]",e=!0),b(d,e)}}function u(){let a={type:"string",enum:["default","pwsh","bash"],description:'Which shell to use: "default" (the OS shell), "pwsh" (PowerShell 7+), or "bash". Falls back to the default shell if the requested one is unavailable.'},b={type:"string",description:"Working directory. Relative paths resolve against the FLUJO data directory. Defaults to the data directory. When bash roots are configured (via the MCP manager, or the FLUJO_BASH_ROOTS / FLUJO_FS_ROOTS env hard ceiling) a cwd outside them is rejected."};return[{name:"run",description:"Run a shell command to completion and return combined stdout/stderr plus the exit code. Pipes and chained commands work. Killed if it exceeds the timeout; large output is truncated. Returns { exitCode, cwd, shell, output, timedOut }.",inputSchema:{type:"object",properties:{command:{type:"string",description:'The command line to execute, e.g. "grep -r foo ." or "curl -s https://…".'},cwd:b,shell:a,timeout:{type:"number",description:"Timeout in seconds (default 60, max 600)."},normalizeNewlines:{type:"boolean",description:"If true, CRLF/CR in the captured output are normalized to LF."}},required:["command"]}},{name:"start",description:"Start a command in the BACKGROUND and return immediately with a { sessionId }. Use status/wait to observe it, write_stdin to feed it input, and kill to stop it.",inputSchema:{type:"object",properties:{command:{type:"string",description:"The command line to execute in the background."},cwd:b,shell:a},required:["command"]}},{name:"status",description:"Return the current state of a background session: { sessionId, running, exitCode, output, truncated }.",inputSchema:{type:"object",properties:{sessionId:{type:"string",description:"The id returned by start."}},required:["sessionId"]}},{name:"wait",description:"Wait until a background session finishes (or the timeout elapses). Returns { sessionId, running, exitCode, output, truncated, timedOut }.",inputSchema:{type:"object",properties:{sessionId:{type:"string",description:"The id returned by start."},timeout:{type:"number",description:"Max seconds to wait (default 60, max 600)."}},required:["sessionId"]}},{name:"write_stdin",description:'Write a string to a running background session\'s stdin. Pass "newline": false to omit the trailing newline. Returns { sessionId, written }.',inputSchema:{type:"object",properties:{sessionId:{type:"string",description:"The id returned by start."},data:{type:"string",description:"Text to write to stdin."},newline:{type:"boolean",description:"Append a trailing newline (default true)."}},required:["sessionId","data"]}},{name:"kill",description:"Kill a background session (and its whole process tree). Returns { sessionId, killed }.",inputSchema:{type:"object",properties:{sessionId:{type:"string",description:"The id returned by start."}},required:["sessionId"]}},{name:"list_sessions",description:"List all known background sessions with their state. Returns { sessions: [{ sessionId, command, running, exitCode, startedAt, endedAt }] }.",inputSchema:{type:"object",properties:{}}}]}function v(a,b){return b?a.replace(/\r\n?/g,"\n"):a}async function w(a,b){let c=String(a?.command??"").trim();if(!c)return n({error:'Provide "command": a shell command line to run.'},!0);let d=p(a.cwd,b),e=r(a.shell),f=!0===a.normalizeNewlines,h=Math.min(1e3*("number"==typeof a.timeout&&a.timeout>0?a.timeout:60),6e5);return await new Promise(a=>{let b,i="",j=!1,k=!1,l=!1,m=t(()=>i,(a,b)=>{i=a,j=b||j}),{child:o,startError:p}=s(c,d,e);if(p||!o)return void a(n({error:`Failed to start command (${e}): ${p??"unknown error"}`,cwd:d,shell:e},!0));let q=setTimeout(()=>{l=!0,b=(0,g.g)(o)},h),r=c=>{k||(k=!0,clearTimeout(q),b?.(),a(c))};o.stdout?.on("data",a=>m(a.toString())),o.stderr?.on("data",a=>m(a.toString())),o.on("error",a=>{m(`
2
- ${a.message}`),r(n({error:`Command failed to start (${e}): ${a.message}`,cwd:d,shell:e,output:v(i,f)},!0))}),o.on("close",a=>{let b=v(i,f);if(l)return void r(n({timedOut:!0,cwd:d,shell:e,exitCode:a,truncated:j,output:`${b}
3
- [killed after ${h/1e3}s timeout]`},!0));r(n({exitCode:a,cwd:d,shell:e,truncated:j,output:b},0!==a))})})}function x(a){a.reapTimer=setTimeout(()=>{m().delete(a.id)},6e5),a.reapTimer.unref?.()}function y(a,b={}){return{sessionId:a.id,running:a.running,exitCode:a.exitCode,output:a.output,truncated:a.truncated,...b}}async function z(a){let b=String(a?.sessionId??""),c=m().get(b);if(!c)return n({error:`No background session with id "${b}".`},!0);if(!c.running)return n(y(c,{timedOut:!1}));let d=Math.min(1e3*("number"==typeof a.timeout&&a.timeout>0?a.timeout:60),6e5),e=await new Promise(a=>{let b=Date.now(),e=()=>c.running?Date.now()-b>=d?a(!0):void setTimeout(e,100):a(!1);e()});return n(y(c,{timedOut:e}))}async function A(a,b){try{switch(a){case"run":{let a=await (0,k.FN)(j.PA,o);return await w(b,a)}case"start":{let a=await (0,k.FN)(j.PA,o);return function(a,b){let c=String(a?.command??"").trim();if(!c)return n({error:'Provide "command": a shell command line to run.'},!0);let d=m();if(d.size>=25)for(let[a,b]of d)b.running||d.delete(a);if(d.size>=25)return n({error:"Too many active background sessions (max 25). Kill some first."},!0);!function(){if(global.__flujo_bash_cleanup_registered)return;global.__flujo_bash_cleanup_registered=!0;let a=()=>(function(){for(let a of m().values()){if(a.running)try{(0,g.g)(a.child)}catch{}a.reapTimer&&clearTimeout(a.reapTimer)}})();process.on("exit",a),process.on("SIGINT",a),process.on("SIGTERM",a)}();let e=p(a.cwd,b),f=r(a.shell),{child:h,startError:i}=s(c,e,f);if(i||!h)return n({error:`Failed to start command (${f}): ${i??"unknown error"}`,cwd:e,shell:f},!0);let j=`bash-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,k={id:j,command:c,cwd:e,child:h,output:"",truncated:!1,running:!0,exitCode:null,startedAt:Date.now()};d.set(j,k);let l=t(()=>k.output,(a,b)=>{k.output=a,k.truncated=b||k.truncated});return h.stdout?.on("data",a=>l(a.toString())),h.stderr?.on("data",a=>l(a.toString())),h.on("error",a=>{l(`
4
- ${a.message}`),k.running=!1,k.endedAt=Date.now(),x(k)}),h.on("close",a=>{k.running=!1,k.exitCode=a,k.endedAt=Date.now(),x(k)}),n({sessionId:j,cwd:e,shell:f})}(b,a)}case"status":let c=String(b?.sessionId??""),d=m().get(c);return d?n(y(d)):n({error:`No background session with id "${c}".`},!0);case"wait":return await z(b);case"write_stdin":let e=String(b?.sessionId??""),f=m().get(e);if(!f)return n({error:`No background session with id "${e}".`},!0);if(!f.running)return n({error:`Session "${e}" has already exited.`},!0);let h="string"==typeof b.data?b.data:"",i=!1===b.newline?h:`${h}
5
- `;try{f.child.stdin?.write(i)}catch(a){return n({error:`Failed to write to stdin: ${a instanceof Error?a.message:String(a)}`},!0)}return n({sessionId:e,written:Buffer.byteLength(i,"utf8")});case"kill":let l=String(b?.sessionId??""),q=m().get(l);return q?(q.running&&(q.cancelEscalation=(0,g.g)(q.child)),n({sessionId:l,killed:!0})):n({error:`No background session with id "${l}".`},!0);case"list_sessions":return n({sessions:Array.from(m().values()).map(a=>({sessionId:a.id,command:a.command,running:a.running,exitCode:a.exitCode,startedAt:new Date(a.startedAt).toISOString(),endedAt:a.endedAt?new Date(a.endedAt).toISOString():void 0}))});default:return n({error:`Unknown tool on the built-in bash server: ${a}`},!0)}}catch(b){return l.warn("bashCallTool failed",{toolName:a,err:b}),n({error:`Tool failed: ${b instanceof Error?b.message:String(b)}`},!0)}}}};
1
+ "use strict";exports.id=5544,exports.ids=[5544],exports.modules={3233:(a,b,c)=>{c.d(b,{g:()=>f});var d=c(79646);let e=(0,c(50846).h)("utils/process/killProcessTree");function f(a,b=2e3){let c=a.pid;if(void 0===c)return()=>{};if("win32"===process.platform){try{(0,d.spawn)("taskkill",["/pid",String(c),"/T","/F"]).on("error",a=>e.debug(`taskkill failed for pid ${c}: ${a.message}`))}catch(a){e.debug(`taskkill spawn threw for pid ${c}: ${a instanceof Error?a.message:String(a)}`)}return()=>{}}try{process.kill(-c,"SIGTERM")}catch{}let g=setTimeout(()=>{try{process.kill(-c,"SIGKILL")}catch{}},b);return g.unref?.(),()=>clearTimeout(g)}},7969:(a,b,c)=>{c.d(b,{FK:()=>j,FN:()=>l});var d=c(33873),e=c.n(d),f=c(79551),g=c(50846),h=c(7658);let i=(0,g.h)("backend/services/mcp/internal/confinement");function j(a,b){let c=e().relative(a,b);return""===c||!c.startsWith("..")&&!e().isAbsolute(c)}async function k(a,b){let{resolveGlobalVars:d}=await Promise.resolve().then(c.bind(c,73456)),g=(await d(a)).trim();if(!g)return null;if(g.startsWith("file://"))try{return e().resolve((0,f.fileURLToPath)(g))}catch(a){return i.warn(`resolveRootToPath: could not parse file URI "${g}"`,a),null}return e().isAbsolute(g)?e().resolve(g):e().resolve(b,g)}async function l(a,b){let{getDataDir:d}=await Promise.resolve().then(c.bind(c,43326)),f=d(),g=function(a){for(let b of Array.isArray(a)?a:[a]){let a=process.env[b];if(!a||!a.trim())continue;let c=a.split(e().delimiter).map(a=>a.trim()).filter(Boolean).map(a=>e().resolve(a));if(c.length)return c}return null}(b),l=[];try{for(let b of(await (0,h.AC)(a)))l.push(e().isAbsolute(b)?e().resolve(b):e().resolve(f,b))}catch(a){i.warn("loadEffectiveRoots: could not read persisted roots",a)}try{let{getNodeRoots:b}=await Promise.resolve().then(c.bind(c,62850));for(let c of b(a)){let a=await k(c,f);a&&l.push(a)}}catch(a){i.warn("loadEffectiveRoots: could not read node roots",a)}let m=Array.from(new Set(l));if(!g)return m;let n=m.filter(a=>g.some(b=>j(b,a)));return n.length?n:g}},35544:(a,b,c)=>{let d,e;c.d(b,{bashCallTool:()=>F,bashToolDefinitions:()=>z});var f=c(33873),g=c.n(f),h=c(29021),i=c.n(h),j=c(79646),k=c(3233),l=c(50846),m=c(43326),n=c(7658),o=c(7969);let p=(0,l.h)("backend/services/mcp/internal/bashTools");function q(a){let b=(process.env.PATH??process.env.Path??"").split(g().delimiter).filter(Boolean),c="win32"===process.platform?(process.env.PATHEXT??".EXE;.CMD;.BAT;.COM").split(";").filter(Boolean):[""];for(let d of b)for(let b of c){let c=g().join(d,`${a}${b}`);try{if(i().statSync(c).isFile())return c}catch{}}return null}function r(){return global.__flujo_bash_sessions||(global.__flujo_bash_sessions=new Map),global.__flujo_bash_sessions}function s(a,b=!1){return{content:[{type:"text",text:"string"==typeof a?a:JSON.stringify(a,null,2)}],...b?{isError:!0}:{}}}let t=["FLUJO_BASH_ROOTS","FLUJO_FS_ROOTS"];function u(a,b){let c=(0,m.getDataDir)(),d="string"==typeof a?a.trim():"",e=d?g().isAbsolute(d)?g().resolve(d):g().resolve(c,d):c;if(0===b.length||!b.some(a=>(0,o.FK)(a,e)))throw Error(`cwd "${e}" is outside the configured bash roots.`);return e}let v=new Set(["PATH","Path","HOME","USERPROFILE","TMP","TEMP","TMPDIR","LANG","LC_ALL","SystemRoot","windir","ComSpec","PATHEXT","SystemDrive","NUMBER_OF_PROCESSORS","PROCESSOR_ARCHITECTURE"]);function w(a){return"pwsh"===a||"bash"===a?a:"default"}function x(a,b,c){let{file:f,args:h,useShell:k,effectiveShell:l,fallbackFrom:m}=function(a,b){if("pwsh"===b){let b=void 0!==e?e:e=q("pwsh");return b?{file:b,args:["-NoProfile","-NonInteractive","-Command",a],useShell:!1,effectiveShell:"pwsh"}:{file:a,args:[],useShell:!0,effectiveShell:"default",fallbackFrom:"pwsh"}}if("bash"===b){let b=function(){if(void 0!==d)return d;let a=q("bash");return a||"win32"!==process.platform||(a=[process.env.ProgramFiles,process.env["ProgramFiles(x86)"],process.env.LocalAppData].filter(a=>!!a).flatMap(a=>[g().join(a,"Git","bin","bash.exe"),g().join(a,"Git","usr","bin","bash.exe"),g().join(a,"Programs","Git","bin","bash.exe"),g().join(a,"Programs","Git","usr","bin","bash.exe")]).find(a=>{try{return i().statSync(a).isFile()}catch{return!1}})??null),d=a,a}();return b?{file:b,args:["-c",a],useShell:!1,effectiveShell:"bash"}:{file:a,args:[],useShell:!0,effectiveShell:"default",fallbackFrom:"bash"}}return{file:a,args:[],useShell:!0,effectiveShell:"default"}}(a,c),n="win32"!==process.platform;try{return{child:(0,j.spawn)(f,h,{cwd:b,shell:k,env:function(){var a;if("string"==typeof(a=process.env.FLUJO_BASH_INHERIT_ENV)&&/^(1|true|yes|on)$/i.test(a.trim()))return process.env;let b={};for(let a of Object.keys(process.env))(v.has(a)||/^LC_/.test(a))&&(b[a]=process.env[a]);return b}(),detached:n}),effectiveShell:l,fallbackFrom:m}}catch(a){return{child:void 0,startError:a instanceof Error?a.message:String(a),effectiveShell:l,fallbackFrom:m}}}function y(a,b){return c=>{let d=a();if(d.length>=1e5)return;let e=!1;(d+=c).length>1e5&&(d=d.slice(0,1e5)+"\n…[output truncated]",e=!0),b(d,e)}}function z(){let a={type:"string",enum:["default","pwsh","bash"],description:'Which shell to use: "default" (the OS shell), "pwsh" (PowerShell 7+), or "bash". Falls back to the default shell if the requested one is unavailable.'},b={type:"string",description:"Working directory. Relative paths resolve against the FLUJO data directory. Defaults to the data directory. When bash roots are configured (via the MCP manager, or the FLUJO_BASH_ROOTS / FLUJO_FS_ROOTS env hard ceiling) a cwd outside them is rejected."};return[{name:"run",description:"Run a shell command to completion and return combined stdout/stderr plus the exit code. Pipes and chained commands work. Killed if it exceeds the timeout; large output is truncated. Returns { exitCode, cwd, shell, output, timedOut }.",inputSchema:{type:"object",properties:{command:{type:"string",description:'The command line to execute, e.g. "grep -r foo ." or "curl -s https://…".'},cwd:b,shell:a,timeout:{type:"number",description:"Timeout in seconds (default 60, max 600)."},normalizeNewlines:{type:"boolean",description:"If true, CRLF/CR in the captured output are normalized to LF."}},required:["command"]}},{name:"start",description:"Start a command in the BACKGROUND and return immediately with a { sessionId }. Use status/wait to observe it, write_stdin to feed it input, and kill to stop it.",inputSchema:{type:"object",properties:{command:{type:"string",description:"The command line to execute in the background."},cwd:b,shell:a},required:["command"]}},{name:"status",description:"Return the current state of a background session: { sessionId, running, exitCode, output, truncated }.",inputSchema:{type:"object",properties:{sessionId:{type:"string",description:"The id returned by start."}},required:["sessionId"]}},{name:"wait",description:"Wait until a background session finishes (or the timeout elapses). Returns { sessionId, running, exitCode, output, truncated, timedOut }.",inputSchema:{type:"object",properties:{sessionId:{type:"string",description:"The id returned by start."},timeout:{type:"number",description:"Max seconds to wait (default 60, max 600)."}},required:["sessionId"]}},{name:"write_stdin",description:'Write a string to a running background session\'s stdin. Pass "newline": false to omit the trailing newline. Returns { sessionId, written }.',inputSchema:{type:"object",properties:{sessionId:{type:"string",description:"The id returned by start."},data:{type:"string",description:"Text to write to stdin."},newline:{type:"boolean",description:"Append a trailing newline (default true)."}},required:["sessionId","data"]}},{name:"kill",description:"Kill a background session (and its whole process tree). Returns { sessionId, killed }.",inputSchema:{type:"object",properties:{sessionId:{type:"string",description:"The id returned by start."}},required:["sessionId"]}},{name:"list_sessions",description:"List all known background sessions with their state. Returns { sessions: [{ sessionId, command, running, exitCode, startedAt, endedAt }] }.",inputSchema:{type:"object",properties:{}}}]}function A(a,b){return b?a.replace(/\r\n?/g,"\n"):a}async function B(a,b){let c=String(a?.command??"").trim();if(!c)return s({error:'Provide "command": a shell command line to run.'},!0);let d=u(a.cwd,b),e=w(a.shell),f=!0===a.normalizeNewlines,g=Math.min(1e3*("number"==typeof a.timeout&&a.timeout>0?a.timeout:60),6e5);return await new Promise(a=>{let b,h="",i=!1,j=!1,l=!1,m=y(()=>h,(a,b)=>{h=a,i=b||i}),{child:n,startError:o,effectiveShell:p,fallbackFrom:q}=x(c,d,e),r=q?{requestedShell:q,usedShell:p}:void 0;if(o||!n)return void a(s({error:`Failed to start command (${p}): ${o??"unknown error"}`,cwd:d,shell:p,shellFallback:r},!0));let t=setTimeout(()=>{l=!0,b=(0,k.g)(n)},g),u=c=>{j||(j=!0,clearTimeout(t),b?.(),a(c))};n.stdout?.on("data",a=>m(a.toString())),n.stderr?.on("data",a=>m(a.toString())),n.on("error",a=>{m(`
2
+ ${a.message}`),u(s({error:`Command failed to start (${p}): ${a.message}`,cwd:d,shell:p,shellFallback:r,output:A(h,f)},!0))}),n.on("close",a=>{let b=A(h,f);if(l)return void u(s({timedOut:!0,cwd:d,shell:p,shellFallback:r,exitCode:a,truncated:i,output:`${b}
3
+ [killed after ${g/1e3}s timeout]`},!0));u(s({exitCode:a,cwd:d,shell:p,shellFallback:r,truncated:i,output:b},0!==a))})})}function C(a){a.reapTimer=setTimeout(()=>{r().delete(a.id)},6e5),a.reapTimer.unref?.()}function D(a,b={}){return{sessionId:a.id,running:a.running,exitCode:a.exitCode,output:a.output,truncated:a.truncated,...b}}async function E(a){let b=String(a?.sessionId??""),c=r().get(b);if(!c)return s({error:`No background session with id "${b}".`},!0);if(!c.running)return s(D(c,{timedOut:!1}));let d=Math.min(1e3*("number"==typeof a.timeout&&a.timeout>0?a.timeout:60),6e5),e=await new Promise(a=>{let b=Date.now(),e=()=>c.running?Date.now()-b>=d?a(!0):void setTimeout(e,100):a(!1);e()});return s(D(c,{timedOut:e}))}async function F(a,b){try{switch(a){case"run":{let a=await (0,o.FN)(n.PA,t);return await B(b,a)}case"start":{let a=await (0,o.FN)(n.PA,t);return function(a,b){let c=String(a?.command??"").trim();if(!c)return s({error:'Provide "command": a shell command line to run.'},!0);let d=r();if(d.size>=25)for(let[a,b]of d)b.running||d.delete(a);if(d.size>=25)return s({error:"Too many active background sessions (max 25). Kill some first."},!0);!function(){if(global.__flujo_bash_cleanup_registered)return;global.__flujo_bash_cleanup_registered=!0;let a=()=>(function(){for(let a of r().values()){if(a.running)try{(0,k.g)(a.child)}catch{}a.reapTimer&&clearTimeout(a.reapTimer)}})();process.on("exit",a),process.on("SIGINT",a),process.on("SIGTERM",a)}();let e=u(a.cwd,b),{child:f,startError:g,effectiveShell:h,fallbackFrom:i}=x(c,e,w(a.shell)),j=i?{requestedShell:i,usedShell:h}:void 0;if(g||!f)return s({error:`Failed to start command (${h}): ${g??"unknown error"}`,cwd:e,shell:h,shellFallback:j},!0);let l=`bash-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,m={id:l,command:c,cwd:e,child:f,output:"",truncated:!1,running:!0,exitCode:null,startedAt:Date.now()};d.set(l,m);let n=y(()=>m.output,(a,b)=>{m.output=a,m.truncated=b||m.truncated});return f.stdout?.on("data",a=>n(a.toString())),f.stderr?.on("data",a=>n(a.toString())),f.on("error",a=>{n(`
4
+ ${a.message}`),m.running=!1,m.endedAt=Date.now(),C(m)}),f.on("close",a=>{m.running=!1,m.exitCode=a,m.endedAt=Date.now(),C(m)}),s({sessionId:l,cwd:e,shell:h,shellFallback:j})}(b,a)}case"status":let c=String(b?.sessionId??""),d=r().get(c);return d?s(D(d)):s({error:`No background session with id "${c}".`},!0);case"wait":return await E(b);case"write_stdin":let e=String(b?.sessionId??""),f=r().get(e);if(!f)return s({error:`No background session with id "${e}".`},!0);if(!f.running)return s({error:`Session "${e}" has already exited.`},!0);let g="string"==typeof b.data?b.data:"",h=!1===b.newline?g:`${g}
5
+ `;try{f.child.stdin?.write(h)}catch(a){return s({error:`Failed to write to stdin: ${a instanceof Error?a.message:String(a)}`},!0)}return s({sessionId:e,written:Buffer.byteLength(h,"utf8")});case"kill":let i=String(b?.sessionId??""),j=r().get(i);return j?(j.running&&(j.cancelEscalation=(0,k.g)(j.child)),s({sessionId:i,killed:!0})):s({error:`No background session with id "${i}".`},!0);case"list_sessions":return s({sessions:Array.from(r().values()).map(a=>({sessionId:a.id,command:a.command,running:a.running,exitCode:a.exitCode,startedAt:new Date(a.startedAt).toISOString(),endedAt:a.endedAt?new Date(a.endedAt).toISOString():void 0}))});default:return s({error:`Unknown tool on the built-in bash server: ${a}`},!0)}}catch(b){return p.warn("bashCallTool failed",{toolName:a,err:b}),s({error:`Tool failed: ${b instanceof Error?b.message:String(b)}`},!0)}}}};
@@ -1,4 +1,4 @@
1
- "use strict";exports.id=5708,exports.ids=[5708],exports.modules={1905:(a,b,c)=>{c.d(b,{Ej:()=>i,NB:()=>m});var d=c(92372),e=c(46480),f=c(50846),g=c(33233);let h=(0,f.h)("backend/services/mcp/autoInstall");async function i(){try{let a=await (0,d.YM)(e.Z.MCP_AUTO_INSTALL_SETTINGS,g.je);return(0,g.zg)(a)}catch(a){return h.warn("Failed to load mcpAutoInstall settings; using safe defaults",a),{...g.je}}}let j="mcp-install-audit",k=Promise.resolve();async function l(){try{return await (0,d.YM)(j,[])}catch(a){return h.error("Failed to load MCP install audit log",a),[]}}async function m(a){let b=k.catch(()=>{}).then(async()=>{let b=await l();b.push(a);let c=b.slice(-300);await (0,d.VH)(j,c)}).catch(a=>{h.error("Failed to append MCP install audit entry",a)});k=b,await b}},9312:(a,b,c)=>{c.d(b,{RB:()=>k,jY:()=>j});var d=c(50846),e=c(20433),f=c(61397),g=c(87821);let h=(0,d.h)("backend/services/flow/generationContext");function i(a,b){let c=String(a).replace(/\s+/g," ").trim();return c.length<=b?c:`${c.slice(0,b).trimEnd()}…`}async function j(){let a=await e.modelService.loadModels(),b=a.map(a=>({id:a.id,name:a.name,...a.displayName?{displayName:a.displayName}:{},...a.description?{description:i(a.description,100)}:{}})),c=[],d={};try{let a=await f.mcpService.loadServerConfigs();if(Array.isArray(a))for(let b of a){if(b.disabled)continue;let a=!1;try{let c=await f.mcpService.getServerStatus(b.name);a=c?.status==="connected"}catch(a){h.debug(`getServerStatus failed for ${b.name}; listing name only`,a)}if(!a){c.push({name:b.name,connected:!1});continue}let{tools:e}=await f.mcpService.listServerTools(b.name),g=(e??[]).filter(a=>a.name).map(a=>({name:a.name,...a.description?{description:i(a.description,100)}:{}}));d[b.name]=g.map(a=>a.name),c.push({name:b.name,connected:!0,tools:g})}}catch(a){h.warn("Could not load MCP servers for the authoring context",a)}let j=[];try{j=await g.flowService.loadFlows()}catch(a){h.warn("Could not load flows for the authoring context",a)}let k={models:b,servers:c,flows:j.map(a=>({id:a.id,name:a.name,...a.description?{description:i(a.description,300)}:{},nodeCount:a.nodes?.length??0}))};return{blocks:k,compile:{models:a.map(a=>({id:a.id,name:a.name,displayName:a.displayName})),servers:c.map(a=>({name:a.name})),serverTools:d,flows:j.map(a=>({id:a.id,name:a.name}))},catalog:function(a){let b=[];for(let c of(b.push("AVAILABLE MODELS (reference by id or name):"),0===a.models.length&&b.push(" (none configured)"),a.models)){let a=c.displayName&&c.displayName!==c.name?`"${c.displayName}" (${c.name})`:c.name,d=c.description?` — ${c.description}`:"";b.push(` - id: ${c.id} — ${a}${d}`)}for(let c of(b.push("",'AVAILABLE MCP SERVERS (attach to process nodes via "servers"):'),0===a.servers.length&&b.push(" (none configured)"),a.servers)){if(!c.connected){b.push(` - ${c.name} (offline — tools unknown; may still be used)`);continue}b.push(` - ${c.name}:`);let a=(c.tools??[]).slice(0,20);for(let c of a){let a=c.description?` — ${c.description}`:"";b.push(` - ${c.name}${a}`)}let d=(c.tools?.length??0)-a.length;d>0&&b.push(` - …and ${d} more`)}for(let c of(b.push("",'EXISTING FLOWS (usable as subflow targets via "flow"):'),0===a.flows.length&&b.push(" (none)"),a.flows.slice(0,15))){let a=c.description?` — ${c.description}`:` — ${c.nodeCount} nodes`;b.push(` - "${c.name}"${a}`)}return a.flows.length>15&&b.push(` - …and ${a.flows.length-15} more`),b.join("\n")}(k),validatorServers:c.map(a=>({name:a.name,status:a.connected?"connected":"disconnected"}))}}function k(a,b){let c=[...a.map(a=>({severity:a.severity,code:a.code,message:a.message})),...b.issues],d=c.filter(a=>"error"===a.severity).length;return{issues:c,errorCount:d,warningCount:c.length-d,isRunnable:0===d}}},33233:(a,b,c)=>{c.d(b,{UM:()=>g,e5:()=>f,je:()=>d,zg:()=>e});let d={requireConsent:!0,namespaceAllowlist:[],trustBrainStem:!0};function e(a){let b=a??{};return{requireConsent:"boolean"==typeof b.requireConsent?b.requireConsent:d.requireConsent,namespaceAllowlist:Array.isArray(b.namespaceAllowlist)?b.namespaceAllowlist.filter(a=>"string"==typeof a&&a.length>0):[],trustBrainStem:"boolean"==typeof b.trustBrainStem?b.trustBrainStem:d.trustBrainStem}}function f(a){let{caller:b,settings:c,registryName:d,allowInstall:e}=a;if("generator"===b)return!0===e?{allowed:!0,reason:"generator-allowinstall",message:"Approved by the per-generation allowInstall opt-in."}:{allowed:!1,reason:"generator-not-allowed",message:"Installing is not allowed in this generation (allowInstall is off)."};if("authoring-tool"===b&&c.trustBrainStem)return{allowed:!0,reason:"brainstem-trusted",message:"Approved: the /mcp-flows authoring tool is trusted (mcpAutoInstall.trustBrainStem)."};if(!c.requireConsent)return{allowed:!0,reason:"consent-disabled",message:"Approved: consent is not required (mcpAutoInstall.requireConsent is off)."};let f=function(a){if("string"!=typeof a)return"";let b=a.indexOf("/");return b>0?a.slice(0,b):""}(d);return""!==f&&c.namespaceAllowlist.includes(f)?{allowed:!0,reason:"namespace-allowlisted",message:`Approved: namespace "${f}" is allowlisted.`}:{allowed:!1,reason:"consent-required",message:"Consent required: review the exact command and arguments, then approve this install (SEP-1024)."}}function g(a,b,c,d,e){return{at:new Date().toISOString(),caller:b,registryName:a.registryName,resolvedName:a.resolvedName,serverName:a.serverName,transport:a.transport,...a.command?{command:a.command}:{},...a.args?{args:a.args}:{},...a.serverUrl?{serverUrl:a.serverUrl}:{},requiredEnvNames:a.requiredEnvNames,verificationStatus:a.verificationStatus,consent:{allowed:c.allowed,reason:c.reason},installed:d,...e?{error:e}:{}}}},88185:(a,b,c)=>{c.d(b,{R:()=>d});let d=`A FlowSpec is a JSON object describing a FLUJO flow semantically — node keys and edges, no coordinates, no ids, no layout:
1
+ "use strict";exports.id=5708,exports.ids=[5708],exports.modules={1905:(a,b,c)=>{c.d(b,{Ej:()=>i,NB:()=>m});var d=c(92372),e=c(38844),f=c(50846),g=c(33233);let h=(0,f.h)("backend/services/mcp/autoInstall");async function i(){try{let a=await (0,d.YM)(e.Z.MCP_AUTO_INSTALL_SETTINGS,g.je);return(0,g.zg)(a)}catch(a){return h.warn("Failed to load mcpAutoInstall settings; using safe defaults",a),{...g.je}}}let j="mcp-install-audit",k=Promise.resolve();async function l(){try{return await (0,d.YM)(j,[])}catch(a){return h.error("Failed to load MCP install audit log",a),[]}}async function m(a){let b=k.catch(()=>{}).then(async()=>{let b=await l();b.push(a);let c=b.slice(-300);await (0,d.VH)(j,c)}).catch(a=>{h.error("Failed to append MCP install audit entry",a)});k=b,await b}},9312:(a,b,c)=>{c.d(b,{RB:()=>l,bD:()=>i,jY:()=>k,xv:()=>j});var d=c(50846),e=c(20433),f=c(24463),g=c(87821);let h=(0,d.h)("backend/services/flow/generationContext"),i=300;function j(a,b){let c=String(a).replace(/\s+/g," ").trim();return c.length<=b?c:`${c.slice(0,b).trimEnd()}…`}async function k(){let a=await e.modelService.loadModels(),b=a.map(a=>({id:a.id,name:a.name,...a.displayName?{displayName:a.displayName}:{},...a.description?{description:j(a.description,100)}:{}})),c=[],d={};try{let a=await f.mcpService.loadServerConfigs();if(Array.isArray(a))for(let b of a){if(b.disabled)continue;let a=!1;try{let c=await f.mcpService.getServerStatus(b.name);a=c?.status==="connected"}catch(a){h.debug(`getServerStatus failed for ${b.name}; listing name only`,a)}if(!a){c.push({name:b.name,connected:!1});continue}let{tools:e}=await f.mcpService.listServerTools(b.name),g=(e??[]).filter(a=>a.name).map(a=>({name:a.name,...a.description?{description:j(a.description,100)}:{}}));d[b.name]=g.map(a=>a.name),c.push({name:b.name,connected:!0,tools:g})}}catch(a){h.warn("Could not load MCP servers for the authoring context",a)}let k=[];try{k=await g.flowService.loadFlows()}catch(a){h.warn("Could not load flows for the authoring context",a)}let l={models:b,servers:c,flows:k.map(a=>({id:a.id,name:a.name,...a.description?{description:j(a.description,i)}:{},nodeCount:a.nodes?.length??0}))};return{blocks:l,compile:{models:a.map(a=>({id:a.id,name:a.name,displayName:a.displayName})),servers:c.map(a=>({name:a.name})),serverTools:d,flows:k.map(a=>({id:a.id,name:a.name}))},catalog:function(a){let b=[];for(let c of(b.push("AVAILABLE MODELS (reference by id or name):"),0===a.models.length&&b.push(" (none configured)"),a.models)){let a=c.displayName&&c.displayName!==c.name?`"${c.displayName}" (${c.name})`:c.name,d=c.description?` — ${c.description}`:"";b.push(` - id: ${c.id} — ${a}${d}`)}for(let c of(b.push("",'AVAILABLE MCP SERVERS (attach to process nodes via "servers"):'),0===a.servers.length&&b.push(" (none configured)"),a.servers)){if(!c.connected){b.push(` - ${c.name} (offline — tools unknown; may still be used)`);continue}b.push(` - ${c.name}:`);let a=(c.tools??[]).slice(0,20);for(let c of a){let a=c.description?` — ${c.description}`:"";b.push(` - ${c.name}${a}`)}let d=(c.tools?.length??0)-a.length;d>0&&b.push(` - …and ${d} more`)}for(let c of(b.push("",'EXISTING FLOWS (usable as subflow targets via "flow"):'),0===a.flows.length&&b.push(" (none)"),a.flows.slice(0,15))){let a=c.description?` — ${c.description}`:` — ${c.nodeCount} nodes`;b.push(` - "${c.name}"${a}`)}return a.flows.length>15&&b.push(` - …and ${a.flows.length-15} more`),b.join("\n")}(l),validatorServers:c.map(a=>({name:a.name,status:a.connected?"connected":"disconnected"}))}}function l(a,b){let c=[...a.map(a=>({severity:a.severity,code:a.code,message:a.message})),...b.issues],d=c.filter(a=>"error"===a.severity).length;return{issues:c,errorCount:d,warningCount:c.length-d,isRunnable:0===d}}},33233:(a,b,c)=>{c.d(b,{UM:()=>g,e5:()=>f,je:()=>d,zg:()=>e});let d={requireConsent:!0,namespaceAllowlist:[],trustBrainStem:!0};function e(a){let b=a??{};return{requireConsent:"boolean"==typeof b.requireConsent?b.requireConsent:d.requireConsent,namespaceAllowlist:Array.isArray(b.namespaceAllowlist)?b.namespaceAllowlist.filter(a=>"string"==typeof a&&a.length>0):[],trustBrainStem:"boolean"==typeof b.trustBrainStem?b.trustBrainStem:d.trustBrainStem}}function f(a){let{caller:b,settings:c,registryName:d,allowInstall:e}=a;if("generator"===b)return!0===e?{allowed:!0,reason:"generator-allowinstall",message:"Approved by the per-generation allowInstall opt-in."}:{allowed:!1,reason:"generator-not-allowed",message:"Installing is not allowed in this generation (allowInstall is off)."};if("authoring-tool"===b&&c.trustBrainStem)return{allowed:!0,reason:"brainstem-trusted",message:"Approved: the /mcp-flows authoring tool is trusted (mcpAutoInstall.trustBrainStem)."};if(!c.requireConsent)return{allowed:!0,reason:"consent-disabled",message:"Approved: consent is not required (mcpAutoInstall.requireConsent is off)."};let f=function(a){if("string"!=typeof a)return"";let b=a.indexOf("/");return b>0?a.slice(0,b):""}(d);return""!==f&&c.namespaceAllowlist.includes(f)?{allowed:!0,reason:"namespace-allowlisted",message:`Approved: namespace "${f}" is allowlisted.`}:{allowed:!1,reason:"consent-required",message:"Consent required: review the exact command and arguments, then approve this install (SEP-1024)."}}function g(a,b,c,d,e){return{at:new Date().toISOString(),caller:b,registryName:a.registryName,resolvedName:a.resolvedName,serverName:a.serverName,transport:a.transport,...a.command?{command:a.command}:{},...a.args?{args:a.args}:{},...a.serverUrl?{serverUrl:a.serverUrl}:{},requiredEnvNames:a.requiredEnvNames,verificationStatus:a.verificationStatus,consent:{allowed:c.allowed,reason:c.reason},installed:d,...e?{error:e}:{}}}},88185:(a,b,c)=>{c.d(b,{R:()=>d});let d=`A FlowSpec is a JSON object describing a FLUJO flow semantically — node keys and edges, no coordinates, no ids, no layout:
2
2
  {
3
3
  "name": "short_flow_name", // letters/digits/_/- only
4
4
  "description": "what the flow does",
@@ -12,8 +12,9 @@ NODE TYPES:
12
12
  "model": "<model id or name from the catalog>",
13
13
  "prompt": "instructions for this step",
14
14
  "servers": [ { "name": "<server name>", "tools": ["tool_a"] } ], // optional; omit "tools" to enable all
15
- "inputMode": "full-history" | "latest-message" | "isolated", // optional, default full-history. Reshapes ONLY the wire view the model sees (persisted history stays lossless): full-history = the whole assembled context; latest-message = leading system prompt(s) + everything FROM the most recent user message ONWARD (NOT "last user + last assistant"), INCLUDING this turn's in-flight tool calls/results; isolated = system prompt(s) + isolatedPrompt as a synthetic user message, prior conversation dropped. NOTE: for Claude-subscription models the whole wire history (incl. prior tool calls/results under full-history) is flattened into one text prompt rather than sent as native tool turns
15
+ "inputMode": "full-history" | "latest-message" | "isolated", // optional, default full-history. Reshapes ONLY the wire view the model sees (persisted history stays lossless): full-history = the whole assembled context; latest-message = leading system prompt(s) + the most recent EXCHANGE (the last user message + the last assistant response, intermediate turns since the last user message dropped) + this turn's in-flight tool calls/results; isolated = system prompt(s) + isolatedPrompt as a synthetic user message, prior conversation dropped. NOTE: for Claude-subscription models the whole wire history (incl. prior tool calls/results under full-history) is flattened into one text prompt rather than sent as native tool turns
16
16
  "isolatedPrompt": "...", // only with inputMode "isolated"
17
+ "allowCallerPrompt": true | false, // optional, only with inputMode "isolated"; default true — a step that hands off to this isolated step may pass a "prompt" via its handoff tool that overrides "isolatedPrompt". Set false to forbid it
17
18
  "outputMode": "full-conversation" | "latest-message", // optional, default full-conversation; latest-message hides this step's tool calls/results from later steps (they see only its final response)
18
19
  "maxTurns": 20, // optional; per-step cap on agentic tool-loop turns (retry-until-done in ONE node). Unset = model/system default (50)
19
20
  "allowedTools": ["tool_a"], // optional; step-level tool allowlist (independent of servers[].tools)
@@ -36,8 +37,8 @@ NODE TYPES:
36
37
  "concurrencyLimit": 4, // optional (parallel / mapOverList / spawn), default 4
37
38
  "joinSeparator": "\\n\\n---\\n\\n", // optional (parallel / mapOverList / spawn), string between joined lane outputs, default "\\n\\n"
38
39
  "errorStrategy": "collect-all" | "fail-fast", // optional (parallel / mapOverList / spawn), default collect-all
39
- "inputMode": "full-history" | "latest-message" | "isolated", // optional, default full-history. DIFFERS from a process node: history modes ALWAYS sanitize the parent transcript first — system messages, tool-result messages, and ANY assistant turn that made tool calls are dropped (only user + prose-only assistant messages survive). full-history = the full sanitized transcript; latest-message = the sanitized transcript FROM the most recent user message ONWARD (NOT "last user + last assistant"); isolated = ignore the parent conversation and send "prompt" as the child's single user message
40
- "allowCallerPrompt": true | false, // optional, only with inputMode "isolated"; when true a routing step may pass a "prompt" via its handoff tool that overrides the subflow's "prompt" (default)
40
+ "inputMode": "full-history" | "latest-message" | "isolated", // optional, default full-history. DIFFERS from a process node: history modes ALWAYS sanitize the parent transcript first — system messages, tool-result messages, and ANY assistant turn that made tool calls are dropped (only user + prose-only assistant messages survive). full-history = the full sanitized transcript; latest-message = the most recent EXCHANGE of the sanitized transcript (the last user message + the last assistant response after it, intermediate turns dropped); isolated = ignore the parent conversation and send "prompt" as the child's single user message
41
+ "allowCallerPrompt": true | false, // optional, only with inputMode "isolated"; default true — a routing step may pass a "prompt" via its handoff tool that overrides the subflow's "prompt". Set false to forbid it
41
42
  "allowCallerFanout": true | false, // optional (subflow); makes this a SPAWNABLE sub-agent: the routing step may call its handoff tool SEVERAL TIMES in one turn, each call with a "task" brief spawning one parallel instance of the child flow (rule 7c)
42
43
  "captureVariable": "NAME", // optional; save the subflow's output into a run variable other steps inject with \${var:NAME}
43
44
  "captureResource": "NAME", // optional; ALSO save the subflow's output as a tracked run resource (\${res:NAME}, rule 9b)
@@ -0,0 +1,2 @@
1
+ "use strict";exports.id=5958,exports.ids=[5958],exports.modules={13516:(a,b,c)=>{c.d(b,{G:()=>d});let d={LOG_LEVEL:3,INCLUDE_TOOL_CALLS_IN_RESPONSE:!0,ENABLE_EXECUTION_TRACKER:!1}},50846:(a,b,c)=>{c.d(b,{h:()=>i});var d=c(13516);let e={VERBOSE:-1,DEBUG:0,INFO:1,WARN:2,ERROR:3},f="number"==typeof d.G.LOG_LEVEL?d.G.LOG_LEVEL:e.ERROR;function g(a,b=0){if(b>6)return String(a);if(!(a instanceof Error))return a;let c={name:a.name,message:a.message};for(let d of Object.getOwnPropertyNames(a)){if("name"===d||"message"===d)continue;let e=a[d];"function"!=typeof e&&("stack"===d?c.stack=e:"cause"===d?c.cause=g(e,b+1):"errors"===d&&Array.isArray(e)?c.errors=e.map(a=>g(a,b+1)):c[d]=e)}return c}function h(a,b,c,d,h){if(a>=("number"==typeof h?h:f)){if("function"==typeof d)try{d=d()}catch{d="[lazy log data threw]"}let f=new Date().toISOString(),h=`[${f}] [${b}]`,i=`${h} ${c}`;if(void 0!==d)if(d instanceof Error||"object"==typeof d)try{let a=d instanceof Error?g(d):d,b=JSON.stringify(a,(a,b)=>b instanceof Error?g(b):b,2);i+=`:
2
+ ${b}`}catch(a){i+=": [Object cannot be stringified]"}else i+=`: ${d}`;switch(a){case e.VERBOSE:console.debug(`[VERBOSE] ${i}`);break;case e.DEBUG:console.debug(i);break;case e.INFO:console.info(i);break;case e.WARN:console.warn(i);break;case e.ERROR:console.error(i);break;default:console.log(i)}}}function i(a,b){let c,d=((c=a.replace(/^src\//,"")).startsWith("/")&&(c=c.substring(1)),c);return{verbose:(a,c)=>{h(e.VERBOSE,d,a,c,b)},debug:(a,c)=>{h(e.DEBUG,d,a,c,b)},info:(a,c)=>{h(e.INFO,d,a,c,b)},warn:(a,c)=>{h(e.WARN,d,a,c,b)},error:(a,c)=>{h(e.ERROR,d,a,c,b)}}}},55561:(a,b,c)=>{c.d(b,{A:()=>s});var d=c(21124),e=c(38301),f=c(81637),g=c(8521),h=c(79515),i=c(88745),j=c(53773),k=c(41893),l=c(68730),m=c(22042),n=c(34304),o=c(37674),p=c(91059),q=c(75550);let r=(0,c(19815).h)("frontend/components/Settings/RegistryAccountSettings");function s(){let[a,b]=(0,e.useState)(null),[c,s]=(0,e.useState)(!0),[t,u]=(0,e.useState)(!1),[v,w]=(0,e.useState)(null),[x,y]=(0,e.useState)("login"),[z,A]=(0,e.useState)(""),[B,C]=(0,e.useState)(""),[D,E]=(0,e.useState)(""),[F,G]=(0,e.useState)(""),H=(0,e.useCallback)(async()=>{try{let[a,c]=await Promise.all([q.f.getStatus(),q.f.getSettings()]);b(a),G(c.defaultUrl),E(c.usingDefault?"":c.baseUrl)}catch(a){r.warn("Failed to load registry account status",a)}finally{s(!1)}},[]),I=async()=>{u(!0),w(null);try{let a="signup"===x?await q.f.signup(z.trim(),B):await q.f.login(z.trim(),B);"authenticated"===a.status?(w({type:"success",text:"Signed in to the package registry."}),C("")):"confirmation_required"===a.status?(w({type:"info",text:a.message||"Check your inbox to confirm your email."}),C("")):w({type:"error",text:a.message||"Authentication failed."}),a.account?b(a.account):await H()}catch(a){w({type:"error",text:a instanceof Error?a.message:"Authentication failed."})}finally{u(!1)}},J=async()=>{u(!0),w(null);try{await q.f.logout(),await H(),w({type:"success",text:"Logged out."})}catch(a){w({type:"error",text:a instanceof Error?a.message:"Failed to log out."})}finally{u(!1)}},K=async a=>{u(!0),w(null);try{let{authorizationUrl:b}=await q.f.beginOAuth(a);window.location.assign(b)}catch(a){w({type:"error",text:a instanceof Error?a.message:"Failed to start OAuth sign-in."}),u(!1)}},L=async()=>{u(!0),w(null);try{let a=await q.f.resendConfirmation();w(a.success?{type:"success",text:"Confirmation email sent."}:{type:"error",text:a.message||"Failed to resend confirmation."})}finally{u(!1)}},M=async()=>{let a=z.trim();if(!a)return void w({type:"info",text:"Enter your account email above, then tap “Forgot password?”."});u(!0),w(null);try{await q.f.requestPasswordReset(a),w({type:"info",text:"If an account exists for that email, a password-reset link is on its way. Follow the link to set a new password."})}catch(a){w({type:"error",text:a instanceof Error?a.message:"Failed to request a password reset."})}finally{u(!1)}},N=async()=>{u(!0),w(null);try{let a=await q.f.saveSettings(D.trim());w(a.success?{type:"success",text:"Registry URL saved."}:{type:"error",text:a.message||"Invalid registry URL."})}finally{u(!1)}};if(c)return(0,d.jsx)(f.default,{sx:{display:"flex",justifyContent:"center",p:3},children:(0,d.jsx)(g.default,{size:28})});let O=!!a?.signedIn,P=!!(a?.email&&!O&&a&&!a.isConfirmed);return(0,d.jsxs)(f.default,{sx:{width:"100%"},children:[(0,d.jsx)(h.default,{variant:"body2",color:"text.secondary",sx:{mb:2},children:"Sign in to the FLUJO package registry to publish packages. Browsing and installing packages does not require an account — only publishing does, and your email must be confirmed first. Your registry tokens are encrypted at rest and never shown here."}),v&&(0,d.jsx)(i.A,{severity:v.type,sx:{mb:2},onClose:()=>w(null),children:v.text}),O?(0,d.jsxs)(j.A,{spacing:2,children:[(0,d.jsxs)(j.A,{direction:"row",spacing:1,alignItems:"center",flexWrap:"wrap",useFlexGap:!0,children:[(0,d.jsx)(h.default,{variant:"subtitle1",children:a?.email}),a?.publisherHandle&&(0,d.jsx)(k.A,{size:"small",label:`@${a.publisherHandle}`}),a?.isConfirmed?(0,d.jsx)(k.A,{size:"small",color:"success",label:"Confirmed"}):(0,d.jsx)(k.A,{size:"small",color:"warning",label:"Unconfirmed"})]}),(0,d.jsx)(f.default,{children:(0,d.jsx)(l.A,{variant:"outlined",onClick:J,disabled:t,children:"Log out"})})]}):P?(0,d.jsxs)(j.A,{spacing:2,children:[(0,d.jsxs)(i.A,{severity:"info",children:["We sent a confirmation link to ",(0,d.jsx)("strong",{children:a?.email}),". Confirm your email, then log in to start publishing."]}),(0,d.jsxs)(j.A,{direction:"row",spacing:1,children:[(0,d.jsx)(l.A,{variant:"outlined",onClick:L,disabled:t,children:"Resend confirmation email"}),(0,d.jsx)(l.A,{onClick:J,disabled:t,children:"Use a different account"})]})]}):(0,d.jsxs)(j.A,{spacing:2,children:[(0,d.jsxs)(m.A,{value:x,onChange:(a,b)=>y(b),children:[(0,d.jsx)(n.A,{value:"login",label:"Log in"}),(0,d.jsx)(n.A,{value:"signup",label:"Sign up"})]}),(0,d.jsx)(o.A,{label:"Email",type:"email",value:z,onChange:a=>A(a.target.value),fullWidth:!0,autoComplete:"username"}),(0,d.jsx)(o.A,{label:"Password",type:"password",value:B,onChange:a=>C(a.target.value),fullWidth:!0,autoComplete:"signup"===x?"new-password":"current-password"}),(0,d.jsx)(f.default,{children:(0,d.jsx)(l.A,{variant:"contained",onClick:I,disabled:t||!z.trim()||!B,children:"signup"===x?"Sign up":"Log in"})}),"login"===x&&(0,d.jsx)(f.default,{children:(0,d.jsx)(l.A,{variant:"text",size:"small",onClick:M,disabled:t,sx:{textTransform:"none",px:0},children:"Forgot password?"})}),(0,d.jsx)(p.A,{children:"or"}),(0,d.jsxs)(j.A,{direction:"row",spacing:1,flexWrap:"wrap",useFlexGap:!0,children:[(0,d.jsx)(l.A,{variant:"outlined",onClick:()=>K("github"),disabled:t,children:"Continue with GitHub"}),(0,d.jsx)(l.A,{variant:"outlined",onClick:()=>K("google"),disabled:t,children:"Continue with Google"})]})]}),(0,d.jsx)(p.A,{sx:{my:3}}),(0,d.jsx)(h.default,{variant:"subtitle2",gutterBottom:!0,children:"Registry URL"}),(0,d.jsxs)(h.default,{variant:"body2",color:"text.secondary",sx:{mb:1},children:["Leave blank to use the default (",F,")."]}),(0,d.jsxs)(j.A,{direction:"row",spacing:1,alignItems:"center",flexWrap:"wrap",useFlexGap:!0,children:[(0,d.jsx)(o.A,{size:"small",placeholder:F,value:D,onChange:a=>E(a.target.value),sx:{minWidth:320}}),(0,d.jsx)(l.A,{variant:"outlined",onClick:N,disabled:t,children:"Save"})]})]})}},75550:(a,b,c)=>{c.d(b,{f:()=>e,p:()=>d}),(0,c(19815).h)("frontend/services/registry");let d=()=>{throw Error("RegistryService can only be used in browser environment")},e=new Proxy({},{get(a,b){let c=d(),e=c[b];return"function"==typeof e?e.bind(c):e}})}};
@@ -1 +1 @@
1
- exports.id=6005,exports.ids=[1925,4306,6005],exports.modules={1925:(a,b,c)=>{"use strict";c.d(b,{Hm:()=>f,xc:()=>e});let d=["key","secret","token","password"],e=a=>d.some(b=>a.toLowerCase().includes(b)),f=a=>e(a)||"authorization"===a.trim().toLowerCase()},3676:(a,b,c)=>{"use strict";c.d(b,{Wj:()=>h,ln:()=>g});var d=c(10641),e=c(58739);let f="encryption_locked";async function g(){return(0,e.isEncryptionLocked)()}async function h(a){return await g()?a?.openai?d.NextResponse.json({error:{message:"Encryption is locked. Unlock FLUJO to continue.",type:f,code:f,param:null}},{status:423}):d.NextResponse.json({error:f},{status:423}):null}},37426:(a,b,c)=>{"use strict";c.r(b),c.d(b,{"40ec842092ea232b6d4aa599a380d422184da5e1ca":()=>d.c,"602ea7ca289a8eaa1000fb321a71e292e6c766b6bb":()=>d.G});var d=c(73456)},41115:(a,b,c)=>{"use strict";c.d(b,{$:()=>h,v5:()=>g});var d=c(10641);let e=new Set(["localhost","127.0.0.1","::1"]);function f(a){let b=a.toLowerCase();return!!e.has(b)||(function(){let a=process.env.FLUJO_EXTRA_LOCAL_HOSTS;return a?a.split(",").map(a=>a.trim().toLowerCase()).filter(a=>a.length>0&&"."!==a):[]})().some(a=>a.startsWith(".")?b.endsWith(a):b===a)}function g(a,b){let c=function(a){if(!a)return null;let b=a.trim();if(b.startsWith("[")){let a=b.indexOf("]");return a>0?b.slice(1,a):null}return b.split(":")[0]||null}(a);if(!c||!f(c))return!1;if(b)try{if(!f(new URL(b).hostname))return!1}catch{return!1}return!0}function h(a){return g(a.headers.get("host"),a.headers.get("origin"))?null:d.NextResponse.json({error:"Forbidden: this endpoint only accepts local requests."},{status:403})}},42398:(a,b,c)=>{"use strict";c.d(b,{QE:()=>k,_u:()=>m,aZ:()=>j,qf:()=>n,v5:()=>g.v5,xK:()=>l,xV:()=>o});var d=c(50846),e=c(61397),f=c(3676),g=c(41115);let h=(0,d.h)("backend/services/mcp/proxyForward"),i="FLUJO encryption is locked (encryption_locked). Unlock FLUJO to continue.";async function j(a){let b=await e.mcpService.loadServerConfigs();if(!Array.isArray(b))return h.warn("isServerExposed: failed to load server configs",{error:b.error}),!1;let c=b.find(b=>b.name===a);return!!c&&!c.disabled&&!0===c.exposeAsMcpServer}async function k(a){if(await (0,f.ln)())throw Error(i);let b=await e.mcpService.connectServer(a);if(!b.success)throw Error(`Failed to connect to MCP server '${a}': ${b.error}`);let c=await e.mcpService.listServerTools(a);if(c.error)throw Error(`Failed to list tools for '${a}': ${c.error}`);return{tools:c.tools??[]}}async function l(a,b,c){if(await (0,f.ln)())return{content:[{type:"text",text:i}],isError:!0};let d=await e.mcpService.connectServer(a);if(!d.success)return{content:[{type:"text",text:`Error connecting to '${a}': ${d.error}`}],isError:!0};let g=await e.mcpService.callTool(a,b,c);return g.success?g.data:{content:[{type:"text",text:`Error: ${g.error??"Unknown error"}`}],isError:!0}}async function m(a){if(await (0,f.ln)())throw Error(i);let b=await e.mcpService.connectServer(a);if(!b.success)throw Error(`Failed to connect to MCP server '${a}': ${b.error}`);let c=await e.mcpService.listServerResources(a);if(c.error)throw Error(`Failed to list resources for '${a}': ${c.error}`);return{resources:c.resources??[]}}async function n(a){if(await (0,f.ln)())throw Error(i);let b=await e.mcpService.connectServer(a);if(!b.success)throw Error(`Failed to connect to MCP server '${a}': ${b.error}`);let c=await e.mcpService.listServerResourceTemplates(a);if(c.error)throw Error(`Failed to list resource templates for '${a}': ${c.error}`);return{resourceTemplates:c.resourceTemplates??[]}}async function o(a,b){if(await (0,f.ln)())throw Error(i);let c=await e.mcpService.connectServer(a);if(!c.success)throw Error(`Failed to connect to MCP server '${a}': ${c.error}`);let d=await e.mcpService.readResource(a,b);if(!d.success||!d.data)throw Error(`Failed to read resource '${b}' from '${a}': ${d.error??"unknown error"}`);return d.data}},73456:(a,b,c)=>{"use strict";c.d(b,{G:()=>l,c:()=>k});var d=c(75879);c(68633);var e=c(50846),f=c(92372),g=c(46480),h=c(58739),i=c(51669);let j=(0,e.h)("backend/utils/resolveGlobalVars");async function k(a){j.debug("Entering resolveGlobalVars method");let b=await (0,f.YM)(g.Z.GLOBAL_ENV_VARS,{}),c=function(a){if(!a||"object"!=typeof a)return!1;let b=Object.keys(a);if(0===b.length)return!0;let c=a[b[0]];return c&&"object"==typeof c&&"value"in c&&"metadata"in c&&"object"==typeof c.metadata&&"isSecret"in c.metadata}(b);j.debug(`Loaded ${Object.keys(b).length} global environment variables (${c?"new":"old"} format)`);let d={};if(c)for(let[a,c]of Object.entries(b))d[a]=c.value;else d={...b};let e=async a=>{let b=a.match(/\$\{global:([^}]+)\}/g);if(!b)return a;let c=a;for(let a of b){let b=a.substring(9,a.length-1);if(void 0!==d[b]){let e=d[b];if(e.startsWith("encrypted:")){j.debug(`Decrypting encrypted global variable: ${b}`);try{let a=e.substring(10),c=await (0,h.decryptWithPassword)(a);if(c)e=c,j.debug(`Successfully decrypted global variable: ${b}`);else{j.warn(`Failed to decrypt global variable: ${b}`);continue}}catch(a){j.error(`Error decrypting global variable: ${b}`,a);continue}}else if(e.startsWith("encrypted_failed:")){j.warn(`Skipping failed encrypted global variable: ${b}`);continue}j.debug(`Resolved global variable: ${b}`),c=c.replace(a,e)}else j.warn(`Global variable not found: ${b}`)}return c},i=async a=>{if("string"==typeof a)return await e(a);if(Array.isArray(a))return await Promise.all(a.map(a=>i(a)));if(null!==a&&"object"==typeof a){let b={};for(let[c,d]of Object.entries(a))b[c]=await i(d);return b}return a},k=await i(a);return"object"==typeof a&&null!==a&&j.debug("Resolved global variables result:",JSON.stringify(k,null,2)),j.debug("Completed global variable resolution"),k}async function l(a,b=0){if(j.debug(`Entering resolveAndDecryptApiKey method (depth: ${b})`),!a)return j.warn("Empty value provided"),null;if(b>=10)return j.warn(`Maximum resolution depth reached (10) for value: ${a}`),a;let c=a;if(c.startsWith("encrypted:")){j.debug(`Decrypting encrypted value at depth ${b}`);try{let a=c.substring(10),d=await (0,h.decryptWithPassword)(a);if(!d)return j.warn(`Failed to decrypt value at depth ${b}`),null;j.debug(`Successfully decrypted value at depth ${b}`),j.verbose(d),c=d}catch(a){return j.error(`Error decrypting value at depth ${b}:`,a),null}}else c.startsWith("encrypted_failed:")&&(j.warn(`Skipping failed encrypted value at depth ${b}`),c=c.substring(17));if(c.includes("${global:")){j.debug(`Resolving global variables at depth ${b}`);try{let a=await k(c);if(j.verbose(a),a!==c)return j.debug(`Value changed after resolving globals at depth ${b}, processing recursively`),l(a,b+1);c=a}catch(a){return j.error(`Error resolving global variables at depth ${b}:`,a),null}}return j.debug(`Completed resolveAndDecryptApiKey at depth ${b}`),c}(0,i.D)([k,l]),(0,d.A)(k,"40ec842092ea232b6d4aa599a380d422184da5e1ca",null),(0,d.A)(l,"602ea7ca289a8eaa1000fb321a71e292e6c766b6bb",null)},78335:()=>{},96487:()=>{}};
1
+ exports.id=6005,exports.ids=[1925,4306,6005],exports.modules={1925:(a,b,c)=>{"use strict";c.d(b,{Hm:()=>f,xc:()=>e});let d=["key","secret","token","password"],e=a=>d.some(b=>a.toLowerCase().includes(b)),f=a=>e(a)||"authorization"===a.trim().toLowerCase()},3676:(a,b,c)=>{"use strict";c.d(b,{Wj:()=>h,ln:()=>g});var d=c(10641),e=c(58739);let f="encryption_locked";async function g(){return(0,e.isEncryptionLocked)()}async function h(a){return await g()?a?.openai?d.NextResponse.json({error:{message:"Encryption is locked. Unlock FLUJO to continue.",type:f,code:f,param:null}},{status:423}):d.NextResponse.json({error:f},{status:423}):null}},37426:(a,b,c)=>{"use strict";c.r(b),c.d(b,{"40ec842092ea232b6d4aa599a380d422184da5e1ca":()=>d.resolveGlobalVars,"602ea7ca289a8eaa1000fb321a71e292e6c766b6bb":()=>d.G});var d=c(73456)},41115:(a,b,c)=>{"use strict";c.d(b,{$:()=>h,v5:()=>g});var d=c(10641);let e=new Set(["localhost","127.0.0.1","::1"]);function f(a){let b=a.toLowerCase();return!!e.has(b)||(function(){let a=process.env.FLUJO_EXTRA_LOCAL_HOSTS;return a?a.split(",").map(a=>a.trim().toLowerCase()).filter(a=>a.length>0&&"."!==a):[]})().some(a=>a.startsWith(".")?b.endsWith(a):b===a)}function g(a,b){let c=function(a){if(!a)return null;let b=a.trim();if(b.startsWith("[")){let a=b.indexOf("]");return a>0?b.slice(1,a):null}return b.split(":")[0]||null}(a);if(!c||!f(c))return!1;if(b)try{if(!f(new URL(b).hostname))return!1}catch{return!1}return!0}function h(a){return g(a.headers.get("host"),a.headers.get("origin"))?null:d.NextResponse.json({error:"Forbidden: this endpoint only accepts local requests."},{status:403})}},42398:(a,b,c)=>{"use strict";c.d(b,{QE:()=>k,_u:()=>m,aZ:()=>j,qf:()=>n,v5:()=>g.v5,xK:()=>l,xV:()=>o});var d=c(50846),e=c(24463),f=c(3676),g=c(41115);let h=(0,d.h)("backend/services/mcp/proxyForward"),i="FLUJO encryption is locked (encryption_locked). Unlock FLUJO to continue.";async function j(a){let b=await e.mcpService.loadServerConfigs();if(!Array.isArray(b))return h.warn("isServerExposed: failed to load server configs",{error:b.error}),!1;let c=b.find(b=>b.name===a);return!!c&&!c.disabled&&!0===c.exposeAsMcpServer}async function k(a){if(await (0,f.ln)())throw Error(i);let b=await e.mcpService.connectServer(a);if(!b.success)throw Error(`Failed to connect to MCP server '${a}': ${b.error}`);let c=await e.mcpService.listServerTools(a);if(c.error)throw Error(`Failed to list tools for '${a}': ${c.error}`);return{tools:c.tools??[]}}async function l(a,b,c){if(await (0,f.ln)())return{content:[{type:"text",text:i}],isError:!0};let d=await e.mcpService.connectServer(a);if(!d.success)return{content:[{type:"text",text:`Error connecting to '${a}': ${d.error}`}],isError:!0};let g=await e.mcpService.callTool(a,b,c);return g.success?g.data:{content:[{type:"text",text:`Error: ${g.error??"Unknown error"}`}],isError:!0}}async function m(a){if(await (0,f.ln)())throw Error(i);let b=await e.mcpService.connectServer(a);if(!b.success)throw Error(`Failed to connect to MCP server '${a}': ${b.error}`);let c=await e.mcpService.listServerResources(a);if(c.error)throw Error(`Failed to list resources for '${a}': ${c.error}`);return{resources:c.resources??[]}}async function n(a){if(await (0,f.ln)())throw Error(i);let b=await e.mcpService.connectServer(a);if(!b.success)throw Error(`Failed to connect to MCP server '${a}': ${b.error}`);let c=await e.mcpService.listServerResourceTemplates(a);if(c.error)throw Error(`Failed to list resource templates for '${a}': ${c.error}`);return{resourceTemplates:c.resourceTemplates??[]}}async function o(a,b){if(await (0,f.ln)())throw Error(i);let c=await e.mcpService.connectServer(a);if(!c.success)throw Error(`Failed to connect to MCP server '${a}': ${c.error}`);let d=await e.mcpService.readResource(a,b);if(!d.success||!d.data)throw Error(`Failed to read resource '${b}' from '${a}': ${d.error??"unknown error"}`);return d.data}},73456:(a,b,c)=>{"use strict";c.d(b,{G:()=>l,resolveGlobalVars:()=>k});var d=c(75879);c(68633);var e=c(50846),f=c(92372),g=c(38844),h=c(58739),i=c(51669);let j=(0,e.h)("backend/utils/resolveGlobalVars");async function k(a){j.debug("Entering resolveGlobalVars method");let b=await (0,f.YM)(g.Z.GLOBAL_ENV_VARS,{}),c=function(a){if(!a||"object"!=typeof a)return!1;let b=Object.keys(a);if(0===b.length)return!0;let c=a[b[0]];return c&&"object"==typeof c&&"value"in c&&"metadata"in c&&"object"==typeof c.metadata&&"isSecret"in c.metadata}(b);j.debug(`Loaded ${Object.keys(b).length} global environment variables (${c?"new":"old"} format)`);let d={};if(c)for(let[a,c]of Object.entries(b))d[a]=c.value;else d={...b};let e=async a=>{let b=a.match(/\$\{global:([^}]+)\}/g);if(!b)return a;let c=a;for(let a of b){let b=a.substring(9,a.length-1);if(void 0!==d[b]){let e=d[b];if(e.startsWith("encrypted:")){j.debug(`Decrypting encrypted global variable: ${b}`);try{let a=e.substring(10),c=await (0,h.decryptWithPassword)(a);if(c)e=c,j.debug(`Successfully decrypted global variable: ${b}`);else{j.warn(`Failed to decrypt global variable: ${b}`);continue}}catch(a){j.error(`Error decrypting global variable: ${b}`,a);continue}}else if(e.startsWith("encrypted_failed:")){j.warn(`Skipping failed encrypted global variable: ${b}`);continue}j.debug(`Resolved global variable: ${b}`),c=c.replace(a,e)}else j.warn(`Global variable not found: ${b}`)}return c},i=async a=>{if("string"==typeof a)return await e(a);if(Array.isArray(a))return await Promise.all(a.map(a=>i(a)));if(null!==a&&"object"==typeof a){let b={};for(let[c,d]of Object.entries(a))b[c]=await i(d);return b}return a},k=await i(a);return"object"==typeof a&&null!==a&&j.debug("Resolved global variables result:",JSON.stringify(k,null,2)),j.debug("Completed global variable resolution"),k}async function l(a,b=0){if(j.debug(`Entering resolveAndDecryptApiKey method (depth: ${b})`),!a)return j.warn("Empty value provided"),null;if(b>=10)return j.warn(`Maximum resolution depth reached (10) for value: ${a}`),a;let c=a;if(c.startsWith("encrypted:")){j.debug(`Decrypting encrypted value at depth ${b}`);try{let a=c.substring(10),d=await (0,h.decryptWithPassword)(a);if(!d)return j.warn(`Failed to decrypt value at depth ${b}`),null;j.debug(`Successfully decrypted value at depth ${b}`),j.verbose(d),c=d}catch(a){return j.error(`Error decrypting value at depth ${b}:`,a),null}}else c.startsWith("encrypted_failed:")&&(j.warn(`Skipping failed encrypted value at depth ${b}`),c=c.substring(17));if(c.includes("${global:")){j.debug(`Resolving global variables at depth ${b}`);try{let a=await k(c);if(j.verbose(a),a!==c)return j.debug(`Value changed after resolving globals at depth ${b}, processing recursively`),l(a,b+1);c=a}catch(a){return j.error(`Error resolving global variables at depth ${b}:`,a),null}}return j.debug(`Completed resolveAndDecryptApiKey at depth ${b}`),c}(0,i.D)([k,l]),(0,d.A)(k,"40ec842092ea232b6d4aa599a380d422184da5e1ca",null),(0,d.A)(l,"602ea7ca289a8eaa1000fb321a71e292e6c766b6bb",null)},78335:()=>{},96487:()=>{}};
@@ -1,4 +1,4 @@
1
- "use strict";exports.id=7498,exports.ids=[1925,4306,7498],exports.modules={1925:(a,b,c)=>{c.d(b,{Hm:()=>f,xc:()=>e});let d=["key","secret","token","password"],e=a=>d.some(b=>a.toLowerCase().includes(b)),f=a=>e(a)||"authorization"===a.trim().toLowerCase()},5248:(a,b,c)=>{c.d(b,{P:()=>m,p:()=>k});var d=c(32524),e=c(81226);function f(a){return!!a&&a.includes("mcp")}function g(a){return!!a&&a.includes("resource")}let h=a=>({source:`${a}-bottom`,target:`${a}-top`});function i(a,b){let c=a.filter(a=>"mcp"!==a.type&&"resource"!==a.type&&"string"==typeof a.id),d=new Map(c.map(a=>[a.id,a])),e=new Map,i=new Map,j=new Set;for(let a of c)e.set(a.id,0),i.set(a.id,0);let k=(a,b)=>{j.add(`${a}->${b}`),i.set(a,(i.get(a)??0)+1),e.set(b,(e.get(b)??0)+1)};for(let a of b)d.has(a.from)&&d.has(a.to)&&a.from!==a.to&&(k(a.from,a.to),a.bidirectional&&k(a.to,a.from));let l=[];for(let a of[...c].sort((a,b)=>a.y-b.y||a.x-b.x)){let b=l[l.length-1];b&&70>=Math.abs(a.y-b[0].y)?b.push(a):l.push([a])}let m=new Map;l.forEach((a,b)=>a.forEach(a=>m.set(a.id,b)));let n=new Map;for(let a=1;a<l.length;a++){let b=l[a],c=b.filter(a=>"subflow"===a.type);if(c.length>=2&&c.length===b.length){let b=l[a-1];if(1===b.length&&"process"===b[0].type)for(let a of c)n.set(a.id,b[0].id)}}let o=[],p=(a,b)=>{if(a===b||j.has(`${a}->${b}`))return!1;let c=d.get(a),e=d.get(b);return!(!c||!e||null!==function(a,b,c,d){if("start"===c)return"Start nodes cannot have incoming connections";if("finish"===a)return"Finish nodes cannot have outgoing connections";if("mcp"===a||"mcp"===c||f(b)||f(d))return("mcp"!==a||"process"!==c)&&("process"!==a||"mcp"!==c)?"MCP connections must link an MCP node to a Process node via MCP handles":"process"!==a||f(b)?null:"Connect MCP nodes from the Process node's left/right MCP handles";if("resource"===a||"resource"===c||g(b)||g(d)){if(("resource"!==a||"process"!==c)&&("process"!==a||"resource"!==c))return"Resource connections must link a Resource node to a Process node via resource handles";if("process"===a&&!g(b))return"Connect Resource nodes from the Process node's left/right resource handles"}return null}(c.type,h(c.type).source,e.type,h(e.type).target)||"subflow"===c.type&&(i.get(a)??0)>=1)},q=(a,b,c,d)=>{o.push({from:a,to:b,bidirectional:c,reason:d}),k(a,b),c&&k(b,a)},r=a=>{let b=m.get(a.id)??0;for(let c=b-1;c>=0;c--){let b=l[c].filter(b=>b.id!==a.id&&"finish"!==b.type&&!n.has(b.id));if(0!==b.length){if(1===b.length)return b[0];return b.reduce((b,c)=>Math.abs(c.x-a.x)<Math.abs(b.x-a.x)?c:b)}}return null};for(let a of l)for(let b of a){if("start"===b.type||(e.get(b.id)??0)>0)continue;let a=n.get(b.id);if(a){p(a,b.id)&&q(a,b.id,!0,"auto-bidirectional-subflow");continue}let c=r(b);c&&p(c.id,b.id)&&q(c.id,b.id,!1,"auto-connected")}let s=c.filter(a=>"start"===a.type),t=()=>c.filter(a=>"start"!==a.type&&"finish"!==a.type&&!n.has(a.id)&&(e.get(a.id)??0)===0),u=null;if(0===s.length){let a=t();if(a.length>0)u={targets:a.map(a=>a.id)};else{let a=c.filter(a=>"finish"!==a.type).sort((a,b)=>a.y-b.y)[0];a&&(u={targets:[a.id]})}}else{let a=s[0];for(let b of t())p(a.id,b.id)&&q(a.id,b.id,!1,"auto-connected")}let v=c.filter(a=>"finish"===a.type),w=()=>c.filter(a=>"start"!==a.type&&"finish"!==a.type&&!n.has(a.id)&&(i.get(a.id)??0)===0),x=null;if(0===v.length){let a=w();a.length>0&&(x={sources:a.map(a=>a.id)})}else{let a=v[0];for(let b of w())p(b.id,a.id)&&q(b.id,a.id,!1,"auto-connected")}return{addEdges:o,addStart:u,addFinish:x}}function j(a,b){if(!b.has(a))return a;for(let c=2;;c++){let d=`${a}_${c}`;if(!b.has(d))return d}}function k(a){let b=[];return{spec:function a(b,c){let d=Array.isArray(b?.nodes)?b.nodes.map(a=>({...a})):[],e=Array.isArray(b?.edges)?b.edges.map(a=>({...a})):[];for(let b of d)b?.type==="subflow"&&b.subflowSpec&&(b.subflowSpec=a(b.subflowSpec,c));let f=d.filter(a=>a&&"string"==typeof a.key&&!!a.key&&"mcp"!==a.type);if(0===f.length)return{...b,nodes:d,edges:e};let g=i(f.map((a,b)=>({id:a.key,type:a.type,x:0,y:1e3*b})),e.filter(a=>a&&"string"==typeof a.from&&"string"==typeof a.to).map(a=>({from:a.from,to:a.to,bidirectional:!0===a.bidirectional})));for(let a of g.addEdges)e.push({from:a.from,to:a.to,...a.bidirectional?{bidirectional:!0}:{}}),c.push({code:a.reason,message:n(a.reason),nodeId:a.to});let h=new Set(d.map(a=>a.key).filter(Boolean));if(g.addStart){let a=j("start",h);for(let b of(h.add(a),d.unshift({key:a,type:"start"}),g.addStart.targets))e.push({from:a,to:b});c.push({code:"auto-added-start",message:`Added a Start node connected to ${g.addStart.targets.length} entry step(s).`})}if(g.addFinish){let a=j("finish",h);for(let b of(h.add(a),d.push({key:a,type:"finish"}),g.addFinish.sources))e.push({from:b,to:a});c.push({code:"auto-added-finish",message:`Added a Finish node connected from ${g.addFinish.sources.length} final step(s).`})}return{...b,nodes:d,edges:e}}(a,b),changes:b}}function l(a){return a.data?.type??a.type??"unknown"}function m(a){var b,c;let f=(a?.nodes??[]).map(a=>({...a,position:{...a.position??{x:0,y:0}},data:{...a.data}})),g=[...a?.edges??[]],h={...a,nodes:f,edges:g},j=[],k=i(f.filter(a=>"mcp"!==l(a)&&"resource"!==l(a)).map(a=>({id:a.id,type:l(a),x:a.position?.x??0,y:a.position?.y??0})),g.filter(a=>!function(a){let b=a.data?.edgeType;return"mcp"===b||"resource"===b}(a)).map(a=>({from:a.source,to:a.target,bidirectional:a.data?.bidirectional===!0}))),m=new Map(f.map(a=>[a.id,a])),o=(a,b,c)=>{let d=m.get(a),f=m.get(b);d&&f&&g.push((0,e.pX)(d,f,c))};for(let a of k.addEdges)o(a.from,a.to,a.bidirectional),j.push({code:a.reason,message:n(a.reason),nodeId:a.to});if(k.addStart){let a=k.addStart.targets.map(a=>m.get(a)).filter(Boolean).reduce((a,b)=>!a||b.position.y<a.position.y?b:a,null),c=(b={x:a?.position.x??250,y:(a?.position.y??150)-150},{id:(0,d.A)(),type:"start",position:b,data:{label:"Start Node",type:"start",properties:{promptTemplate:""}}});for(let a of(f.unshift(c),m.set(c.id,c),k.addStart.targets))o(c.id,a,!1);j.push({code:"auto-added-start",message:`Added a Start node connected to ${k.addStart.targets.length} entry step(s).`,nodeId:c.id})}if(k.addFinish){let a=k.addFinish.sources.map(a=>m.get(a)).filter(Boolean).reduce((a,b)=>!a||b.position.y>a.position.y?b:a,null),b=(c={x:a?.position.x??250,y:(a?.position.y??0)+150},{id:(0,d.A)(),type:"finish",position:c,data:{label:"Finish Node",type:"finish",properties:{}}});for(let a of(f.push(b),m.set(b.id,b),k.addFinish.sources))o(a,b.id,!1);j.push({code:"auto-added-finish",message:`Added a Finish node connected from ${k.addFinish.sources.length} final step(s).`,nodeId:b.id})}return{flow:h,changes:j}}function n(a){switch(a){case"auto-connected":return"Connected a disconnected step into the flow.";case"auto-bidirectional-subflow":return"Wired a parallel subflow with a two-way handoff to its orchestrator.";case"auto-added-start":return"Added a Start node.";case"auto-added-finish":return"Added a Finish node."}}},23310:(a,b,c)=>{c.d(b,{GN:()=>w,UC:()=>y,Xg:()=>x});var d=c(50846),e=c(20433),f=c(87182),g=c(54042),h=c(81226),i=c(84671),j=c(5248),k=c(88185),l=c(14265),m=c(1905),n=c(33233),o=c(9312);let p=(0,d.h)("backend/services/flow/generateFlow");function q(a,b,c,d){let e=c?`MULTI-LEVEL FLOWS — you MAY design subflows that are themselves brand-new flows:
1
+ "use strict";exports.id=6126,exports.ids=[1925,4306,6126],exports.modules={1925:(a,b,c)=>{c.d(b,{Hm:()=>f,xc:()=>e});let d=["key","secret","token","password"],e=a=>d.some(b=>a.toLowerCase().includes(b)),f=a=>e(a)||"authorization"===a.trim().toLowerCase()},5248:(a,b,c)=>{c.d(b,{P:()=>m,p:()=>k});var d=c(32524),e=c(81226);function f(a){return!!a&&a.includes("mcp")}function g(a){return!!a&&a.includes("resource")}let h=a=>({source:`${a}-bottom`,target:`${a}-top`});function i(a,b){let c=a.filter(a=>"mcp"!==a.type&&"resource"!==a.type&&"string"==typeof a.id),d=new Map(c.map(a=>[a.id,a])),e=new Map,i=new Map,j=new Set;for(let a of c)e.set(a.id,0),i.set(a.id,0);let k=(a,b)=>{j.add(`${a}->${b}`),i.set(a,(i.get(a)??0)+1),e.set(b,(e.get(b)??0)+1)};for(let a of b)d.has(a.from)&&d.has(a.to)&&a.from!==a.to&&(k(a.from,a.to),a.bidirectional&&k(a.to,a.from));let l=[];for(let a of[...c].sort((a,b)=>a.y-b.y||a.x-b.x)){let b=l[l.length-1];b&&70>=Math.abs(a.y-b[0].y)?b.push(a):l.push([a])}let m=new Map;l.forEach((a,b)=>a.forEach(a=>m.set(a.id,b)));let n=new Map;for(let a=1;a<l.length;a++){let b=l[a],c=b.filter(a=>"subflow"===a.type);if(c.length>=2&&c.length===b.length){let b=l[a-1];if(1===b.length&&"process"===b[0].type)for(let a of c)n.set(a.id,b[0].id)}}let o=[],p=(a,b)=>{if(a===b||j.has(`${a}->${b}`))return!1;let c=d.get(a),e=d.get(b);return!(!c||!e||null!==function(a,b,c,d){if("start"===c)return"Start nodes cannot have incoming connections";if("finish"===a)return"Finish nodes cannot have outgoing connections";if("mcp"===a||"mcp"===c||f(b)||f(d))return("mcp"!==a||"process"!==c)&&("process"!==a||"mcp"!==c)?"MCP connections must link an MCP node to a Process node via MCP handles":"process"!==a||f(b)?null:"Connect MCP nodes from the Process node's left/right MCP handles";if("resource"===a||"resource"===c||g(b)||g(d)){if(("resource"!==a||"process"!==c)&&("process"!==a||"resource"!==c))return"Resource connections must link a Resource node to a Process node via resource handles";if("process"===a&&!g(b))return"Connect Resource nodes from the Process node's left/right resource handles"}return null}(c.type,h(c.type).source,e.type,h(e.type).target)||"subflow"===c.type&&(i.get(a)??0)>=1)},q=(a,b,c,d)=>{o.push({from:a,to:b,bidirectional:c,reason:d}),k(a,b),c&&k(b,a)},r=a=>{let b=m.get(a.id)??0;for(let c=b-1;c>=0;c--){let b=l[c].filter(b=>b.id!==a.id&&"finish"!==b.type&&!n.has(b.id));if(0!==b.length){if(1===b.length)return b[0];return b.reduce((b,c)=>Math.abs(c.x-a.x)<Math.abs(b.x-a.x)?c:b)}}return null};for(let a of l)for(let b of a){if("start"===b.type||(e.get(b.id)??0)>0)continue;let a=n.get(b.id);if(a){p(a,b.id)&&q(a,b.id,!0,"auto-bidirectional-subflow");continue}let c=r(b);c&&p(c.id,b.id)&&q(c.id,b.id,!1,"auto-connected")}let s=c.filter(a=>"start"===a.type),t=()=>c.filter(a=>"start"!==a.type&&"finish"!==a.type&&!n.has(a.id)&&(e.get(a.id)??0)===0),u=null;if(0===s.length){let a=t();if(a.length>0)u={targets:a.map(a=>a.id)};else{let a=c.filter(a=>"finish"!==a.type).sort((a,b)=>a.y-b.y)[0];a&&(u={targets:[a.id]})}}else{let a=s[0];for(let b of t())p(a.id,b.id)&&q(a.id,b.id,!1,"auto-connected")}let v=c.filter(a=>"finish"===a.type),w=()=>c.filter(a=>"start"!==a.type&&"finish"!==a.type&&!n.has(a.id)&&(i.get(a.id)??0)===0),x=null;if(0===v.length){let a=w();a.length>0&&(x={sources:a.map(a=>a.id)})}else{let a=v[0];for(let b of w())p(b.id,a.id)&&q(b.id,a.id,!1,"auto-connected")}return{addEdges:o,addStart:u,addFinish:x}}function j(a,b){if(!b.has(a))return a;for(let c=2;;c++){let d=`${a}_${c}`;if(!b.has(d))return d}}function k(a){let b=[];return{spec:function a(b,c){let d=Array.isArray(b?.nodes)?b.nodes.map(a=>({...a})):[],e=Array.isArray(b?.edges)?b.edges.map(a=>({...a})):[];for(let b of d)b?.type==="subflow"&&b.subflowSpec&&(b.subflowSpec=a(b.subflowSpec,c));let f=d.filter(a=>a&&"string"==typeof a.key&&!!a.key&&"mcp"!==a.type);if(0===f.length)return{...b,nodes:d,edges:e};let g=i(f.map((a,b)=>({id:a.key,type:a.type,x:0,y:1e3*b})),e.filter(a=>a&&"string"==typeof a.from&&"string"==typeof a.to).map(a=>({from:a.from,to:a.to,bidirectional:!0===a.bidirectional})));for(let a of g.addEdges)e.push({from:a.from,to:a.to,...a.bidirectional?{bidirectional:!0}:{}}),c.push({code:a.reason,message:n(a.reason),nodeId:a.to});let h=new Set(d.map(a=>a.key).filter(Boolean));if(g.addStart){let a=j("start",h);for(let b of(h.add(a),d.unshift({key:a,type:"start"}),g.addStart.targets))e.push({from:a,to:b});c.push({code:"auto-added-start",message:`Added a Start node connected to ${g.addStart.targets.length} entry step(s).`})}if(g.addFinish){let a=j("finish",h);for(let b of(h.add(a),d.push({key:a,type:"finish"}),g.addFinish.sources))e.push({from:b,to:a});c.push({code:"auto-added-finish",message:`Added a Finish node connected from ${g.addFinish.sources.length} final step(s).`})}return{...b,nodes:d,edges:e}}(a,b),changes:b}}function l(a){return a.data?.type??a.type??"unknown"}function m(a){var b,c;let f=(a?.nodes??[]).map(a=>({...a,position:{...a.position??{x:0,y:0}},data:{...a.data}})),g=[...a?.edges??[]],h={...a,nodes:f,edges:g},j=[],k=i(f.filter(a=>"mcp"!==l(a)&&"resource"!==l(a)).map(a=>({id:a.id,type:l(a),x:a.position?.x??0,y:a.position?.y??0})),g.filter(a=>!function(a){let b=a.data?.edgeType;return"mcp"===b||"resource"===b}(a)).map(a=>({from:a.source,to:a.target,bidirectional:a.data?.bidirectional===!0}))),m=new Map(f.map(a=>[a.id,a])),o=(a,b,c)=>{let d=m.get(a),f=m.get(b);d&&f&&g.push((0,e.pX)(d,f,c))};for(let a of k.addEdges)o(a.from,a.to,a.bidirectional),j.push({code:a.reason,message:n(a.reason),nodeId:a.to});if(k.addStart){let a=k.addStart.targets.map(a=>m.get(a)).filter(Boolean).reduce((a,b)=>!a||b.position.y<a.position.y?b:a,null),c=(b={x:a?.position.x??250,y:(a?.position.y??150)-150},{id:(0,d.A)(),type:"start",position:b,data:{label:"Start Node",type:"start",properties:{promptTemplate:""}}});for(let a of(f.unshift(c),m.set(c.id,c),k.addStart.targets))o(c.id,a,!1);j.push({code:"auto-added-start",message:`Added a Start node connected to ${k.addStart.targets.length} entry step(s).`,nodeId:c.id})}if(k.addFinish){let a=k.addFinish.sources.map(a=>m.get(a)).filter(Boolean).reduce((a,b)=>!a||b.position.y>a.position.y?b:a,null),b=(c={x:a?.position.x??250,y:(a?.position.y??0)+150},{id:(0,d.A)(),type:"finish",position:c,data:{label:"Finish Node",type:"finish",properties:{}}});for(let a of(f.push(b),m.set(b.id,b),k.addFinish.sources))o(a,b.id,!1);j.push({code:"auto-added-finish",message:`Added a Finish node connected from ${k.addFinish.sources.length} final step(s).`,nodeId:b.id})}return{flow:h,changes:j}}function n(a){switch(a){case"auto-connected":return"Connected a disconnected step into the flow.";case"auto-bidirectional-subflow":return"Wired a parallel subflow with a two-way handoff to its orchestrator.";case"auto-added-start":return"Added a Start node.";case"auto-added-finish":return"Added a Finish node."}}},71994:(a,b,c)=>{c.d(b,{GN:()=>B,Xg:()=>C,UC:()=>D});var d=c(50846),e=c(20433),f=c(62101),g=c(54042),h=c(81226),i=c(84671),j=c(5248),k=c(88185),l=c(14265),m=c(1905),n=c(33233),o=c(9312),p=c(41527);let q=["prompt","isolatedPrompt","payloadTemplate"];function r(a){return RegExp("\\$\\{var:\\s*"+a.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")+"\\s*\\}","g")}function s(a,b){for(let c of q){let d=a[c];"string"==typeof d&&(a[c]=b(d))}Array.isArray(a.spawnBriefs)&&(a.spawnBriefs=a.spawnBriefs.map(a=>"string"==typeof a?b(a):a))}function t(a){return a.replace(/[ \t]{2,}/g," ").replace(/[ \t]+([.,;:!?])/g,"$1").replace(/[ \t]+\n/g,"\n")}let u=(0,d.h)("backend/services/flow/generateFlow");function v(a,b,c,d){let e=c?`MULTI-LEVEL FLOWS — you MAY design subflows that are themselves brand-new flows:
2
2
  - A subflow node normally references an EXISTING flow via "flow". To instead create a NEW child flow, use ONE of these on the subflow node (not "flow"):
3
3
  - "subflowSpec": an inline nested FlowSpec (you author the whole child now), or
4
4
  - "generateSubflow": a short natural-language description of the child — FLUJO will generate that child flow for you.
@@ -14,28 +14,39 @@ ${k.R}
14
14
 
15
15
  GENERATED-FLOW DEFAULTS (context saving): process nodes you leave without an explicit inputMode/outputMode are compiled with inputMode "latest-message" and outputMode "latest-message" — each step sees only the current task and later steps see only its final response, not its tool calls/results. When a step genuinely needs the whole conversation or later steps need its intermediate work, set "full-history" / "full-conversation" explicitly.
16
16
 
17
+ GENERATED-FLOW DATA-FLOW POLICY (IMPORTANT — carry data through the conversation, NOT scratchpad variables):
18
+ 1. PREFER CONVERSATION HISTORY. For a later step to use an earlier step's output, keep that output in the thread: give the earlier (producer) step outputMode "full-conversation" (or leave "latest-message" when only its final text matters) and give the later (consumer) step inputMode "full-history" so it actually sees the producer's turn. This is the default, robust way to move data forward.
19
+ 2. DO NOT emit \${var:NAME} in generated prompts. The scratchpad variable feature (captureVariable + \${var:NAME}) is a valid HAND-AUTHORING tool, but for AUTO-GENERATED flows it is a footgun: a missing/late capture silently bakes an EMPTY string into the reading step's prompt and breaks the run. Do not use \${var:NAME} just to shuttle ordinary text one step forward — use history (rule 1).
20
+ 3. WHEN HISTORY IS INSUFFICIENT (the consumer is "isolated"/"latest-message" and still needs an earlier step's data, or the artifact is large/structured/binary), use a RUN RESOURCE instead of a scratchpad variable: the producer step sets "captureResource": "NAME" and the consumer step injects \${res:NAME} in its prompt. A run resource survives isolated/latest-message scoping and is tracked with lineage. Example:
21
+ { "key": "writer", "type": "process", "model": "...", "prompt": "Draft the full report.", "captureResource": "report" }
22
+ { "key": "critic", "type": "process", "model": "...", "inputMode": "isolated", "isolatedPrompt": "Critique this report:
23
+
24
+ \${res:report}" }
25
+ (edge writer -> critic). Use \${res:NAME}, never \${var:NAME}, in generated flows.
26
+ 4. Any \${var:NAME} you emit anyway will be automatically rewritten to history or a run resource (or removed if nothing captures it), so emit history/\${res:...} directly to keep control of the design.
27
+
17
28
  ${f}
18
29
 
19
30
  ${e}
20
31
 
21
- ${a}`}function r(a){return a.map(a=>`- [${a.severity}] ${a.message}`).join("\n")}function s(a){let b=[{type:"function",function:{name:"search_mcp_marketplace",description:'Search the public MCP server registry. The registry matches the query against server NAMES only (substring), so use short single terms ("voice", "tts", "browser") and try several. Returns name, description, whether FLUJO can install it, and which env vars/keys it requires.',parameters:{type:"object",properties:{query:{type:"string",description:"Short search term matched against server names."}},required:["query"]}}}];return a&&b.push({type:"function",function:{name:"install_mcp_server",description:"Install an MCP server from the registry (by the exact name returned by search) and connect it. Returns the server name to reference in the spec and the tools it provides — or needsEnv when required keys are missing (then pick an alternative or note it for the user). Installing can take a while (package download).",parameters:{type:"object",properties:{name:{type:"string",description:'Exact registry name from search results, e.g. "ai.keenable/web-search".'}},required:["name"]}}}),b}async function t(a,b,c,d){if("search_mcp_marketplace"===a){let a="string"==typeof b.query?b.query:"";try{return await (0,l.e3)(a)}catch(a){return{error:`Registry search failed: ${a instanceof Error?a.message:String(a)}`}}}if("install_mcp_server"===a){if(!c)return{error:"Installing is not allowed in this generation (allowInstall is off)."};let a="string"==typeof b.name?b.name:"",e=await (0,l.aM)(a,void 0,{resolveOnly:!0}),f=await (0,m.Ej)(),g=(0,n.e5)({caller:"generator",settings:f,registryName:a,allowInstall:c});e.plan&&await (0,m.NB)((0,n.UM)(e.plan,"generator",g,!1));let h=await (0,l.aM)(a);return h.plan&&await (0,m.NB)((0,n.UM)(h.plan,"generator",g,h.installed,h.error)),h.installed&&h.serverName&&(d.contextDirty=!0,d.installedServers.push({name:h.serverName,tools:(h.tools??[]).map(a=>a.name),...h.alreadyExisted?{alreadyExisted:!0}:{},...h.plan?.command?{command:h.plan.command}:{},...h.plan?.args?{args:h.plan.args}:{},...h.plan?.verificationStatus?{verificationStatus:h.plan.verificationStatus}:{}})),h}return{error:`Unknown tool: ${a}`}}async function u(a,b,c,d,e,f,h){let i={};for(let a of e){if("function"!==a.type)continue;let b=a.function.name;i[b]=a=>t(b,a,f,h)}for(let j=0;j<=8;j++){let k=e.length>0&&j<8,{completion:l}=await a.createCompletion({model:b,apiKey:c,messages:d,temperature:0,maxTokens:(0,g.normalizeMaxTokens)(b.maxTokens),...k?{tools:e,localToolExecutors:i}:{}}),m=l.choices?.[0]?.message,n=m?.tool_calls??[];if(0===n.length)return"string"==typeof m?.content?m.content:"";for(let a of(d.push({role:"assistant",content:m?.content??null,tool_calls:n}),n)){if("function"!==a.type)continue;let b={};try{b=JSON.parse(a.function.arguments||"{}")}catch{}p.info(`Generator tool call: ${a.function.name}(${a.function.arguments})`);let c=await t(a.function.name,b,f,h);d.push({role:"tool",tool_call_id:a.id,content:JSON.stringify(c)})}7===j&&d.push({role:"user",content:"Tool budget exhausted. Emit the COMPLETE flow specification now as a single JSON object using what you have."})}return""}function v(a){let b=a.indexOf("{");if(-1===b)return null;let c=0,d=!1,e=!1;for(let f=b;f<a.length;f++){let g=a[f];if(d){e?e=!1:"\\"===g?e=!0:'"'===g&&(d=!1);continue}if('"'===g)d=!0;else if("{"===g)c++;else if("}"===g&&0==--c)try{return JSON.parse(a.slice(b,f+1))}catch{break}}return null}async function w(a){var b;let c="string"==typeof a?.description?a.description.trim():"";if(!c)return{success:!1,error:"A flow description is required",statusCode:400};if(!a?.modelId||"string"!=typeof a.modelId)return{success:!1,error:"A generator model id is required",statusCode:400};let d=!0===a.allowInstall,g=!0===a.allowSubflows,k=g?"number"!=typeof(b=a.maxDepth)||Number.isNaN(b)?2:Math.max(0,Math.min(h.A_,Math.floor(b))):0,l=await e.modelService.getModel(a.modelId);if(!l)return{success:!1,error:`Generator model not found: ${a.modelId}`,statusCode:404};let m=await e.modelService.resolveAndDecryptApiKey(l.ApiKey);if(!m)return{success:!1,error:"Could not resolve the generator model API key",statusCode:500};let n=await (0,o.jY)(),t=(0,f.getCompletionAdapter)(l),w=s(d),x={installedServers:[],contextDirty:!1},y=Math.min("number"==typeof a.maxRepairs&&a.maxRepairs>=0?a.maxRepairs:1,2),z=1;async function A(a,b){let c,e=[{role:"system",content:q(n.catalog,d,g&&b<k,k)},{role:"user",content:a}];try{c=await u(t,l,m,e,w,d,x)}catch(a){return p.warn("A child subflow generation call failed; leaving the subflow unresolved",a),null}let f=v(c);return f&&"object"==typeof f?f:null}async function B(a,b){if(a&&Array.isArray(a.nodes))for(let c of a.nodes){if(c?.type!=="subflow"||c.flow)continue;if(c.subflowSpec){await B(c.subflowSpec,b+1);continue}let a="string"==typeof c.generateSubflow?c.generateSubflow.trim():"";if(!a)continue;if(b+1>k||z>=h.lk){p.info(`Not expanding generateSubflow (depth ${b+1}, ${z} flows so far): budget/depth reached`);continue}let d=await A(a,b+1);d?(z++,c.subflowSpec=d,delete c.generateSubflow,await B(d,b+1)):delete c.generateSubflow}}let C=[{role:"system",content:q(n.catalog,d,g,k)},{role:"user",content:c}],D=null,E=0;for(let a=0;a<=y;a++){let b;E++,z=1;try{b=await u(t,l,m,C,w,d,x)}catch(a){if(p.error("Generator model call failed",a),D)break;return{success:!1,error:`The generator model call failed: ${a instanceof Error?a.message:String(a)}`,statusCode:502}}let c=v(b);if(!c){if(p.warn(`Attempt ${E}: model output contained no parseable JSON object`),x.contextDirty){try{n=await (0,o.jY)()}catch(a){p.warn("Re-gathering context after install failed; keeping the stale catalog",a)}x.contextDirty=!1}C.push({role:"assistant",content:b},{role:"user",content:"Your reply contained no parseable JSON object. Re-emit the COMPLETE flow specification as a single JSON object and nothing else."});continue}if(g)try{await B(c,0)}catch(a){p.warn("Subflow expansion failed; compiling the root spec as-is",a)}if(x.contextDirty){try{n=await (0,o.jY)()}catch(a){p.warn("Re-gathering context after install failed; validating with the stale catalog",a)}x.contextDirty=!1}let e=c,f=[];try{let a=(0,j.p)(c);a.changes.length>0&&(e=a.spec,f=a.changes,p.info(`Attempt ${E}: auto-repair adjusted the spec (${f.length} change(s))`))}catch(a){p.warn("Auto-repair of the generated spec failed; compiling the spec as-is",a)}let q=f.map(a=>({severity:"warning",code:a.code,message:a.message})),s=(0,h.dM)(e,n.compile,{maxDepth:k,maxFlows:h.lk});if(!s.flow){C.push({role:"assistant",content:b},{role:"user",content:`The specification could not be compiled:
22
- ${r(s.issues)}
23
- Fix these problems and re-emit the COMPLETE corrected JSON (only the JSON).`});continue}for(let a of s.flows)(0,h.Zn)(a);let A=s.flows.map(a=>({flow:a,validation:(0,i.nC)(a,{models:n.compile.models,servers:n.validatorServers,serverTools:n.compile.serverTools})})),F=(0,o.RB)([...q,...s.issues],{issues:A.flatMap(a=>a.validation.issues),errorCount:0,warningCount:0,isRunnable:!0});if(D={flows:A,rootFlow:s.flow,validation:F},0===F.errorCount)break;p.info(`Attempt ${E}: bundle has ${F.errorCount} error(s)`+(a<y?"; asking the model to repair":"; repair budget exhausted")),a<y&&C.push({role:"assistant",content:b},{role:"user",content:`The flow you specified has these problems:
24
- ${r(F.issues)}
25
- Fix the errors (warnings are advisory) and re-emit the COMPLETE corrected JSON (only the JSON).`})}return D?(p.info(`Generated draft bundle rooted at "${D.rootFlow.name}" (${D.flows.length} flow(s)) in ${E} attempt(s): ${D.validation.errorCount} error(s), ${D.validation.warningCount} warning(s), ${x.installedServers.length} server(s) installed`),{success:!0,flow:D.rootFlow,validation:D.validation,flows:D.flows,rootFlowId:D.rootFlow.id,attempts:E,installedServers:x.installedServers}):{success:!1,error:"The model did not produce a usable flow specification. Try rephrasing the description or a different generator model.",statusCode:422}}async function x(a){let b="string"==typeof a?.description?a.description.trim():"";if(!b)return{success:!1,error:"A change description is required",statusCode:400};if(!a?.modelId||"string"!=typeof a.modelId)return{success:!1,error:"A generator model id is required",statusCode:400};let c=a?.flow;if(!c||"object"!=typeof c||!Array.isArray(c.nodes)||!Array.isArray(c.edges))return{success:!1,error:"A valid flow to improve is required",statusCode:400};let d=await e.modelService.getModel(a.modelId);if(!d)return{success:!1,error:`Generator model not found: ${a.modelId}`,statusCode:404};let g=await e.modelService.resolveAndDecryptApiKey(d.ApiKey);if(!g)return{success:!1,error:"Could not resolve the generator model API key",statusCode:500};let j=!0===a.allowInstall,k=await (0,o.jY)(),l=(0,f.getCompletionAdapter)(d),m=s(j),n={installedServers:[],contextDirty:!1},t=Math.min("number"==typeof a.maxRepairs&&a.maxRepairs>=0?a.maxRepairs:1,2),w=(0,h.FH)(c),x={};for(let a of c.nodes)a?.id&&a.position&&"number"==typeof a.position.x&&"number"==typeof a.position.y&&(x[a.id]={x:a.position.x,y:a.position.y});let y=a=>({models:a.compile.models,servers:a.compile.servers,serverTools:a.compile.serverTools,flows:(a.compile.flows??[]).filter(a=>a.id!==c.id)}),z=`EXISTING FLOW (modify this — keep unchanged parts intact, and KEEP each node's "key" for any node you do NOT restructure so its canvas position is preserved):
26
- ${JSON.stringify(w)}
32
+ ${a}`}function w(a){return a.map(a=>`- [${a.severity}] ${a.message}`).join("\n")}function x(a){let b=[{type:"function",function:{name:"search_mcp_marketplace",description:'Search the public MCP server registry. The registry matches the query against server NAMES only (substring), so use short single terms ("voice", "tts", "browser") and try several. Returns name, description, whether FLUJO can install it, and which env vars/keys it requires.',parameters:{type:"object",properties:{query:{type:"string",description:"Short search term matched against server names."}},required:["query"]}}}];return a&&b.push({type:"function",function:{name:"install_mcp_server",description:"Install an MCP server from the registry (by the exact name returned by search) and connect it. Returns the server name to reference in the spec and the tools it provides — or needsEnv when required keys are missing (then pick an alternative or note it for the user). Installing can take a while (package download).",parameters:{type:"object",properties:{name:{type:"string",description:'Exact registry name from search results, e.g. "ai.keenable/web-search".'}},required:["name"]}}}),b}async function y(a,b,c,d){if("search_mcp_marketplace"===a){let a="string"==typeof b.query?b.query:"";try{return await (0,l.e3)(a)}catch(a){return{error:`Registry search failed: ${a instanceof Error?a.message:String(a)}`}}}if("install_mcp_server"===a){if(!c)return{error:"Installing is not allowed in this generation (allowInstall is off)."};let a="string"==typeof b.name?b.name:"",e=await (0,l.aM)(a,void 0,{resolveOnly:!0}),f=await (0,m.Ej)(),g=(0,n.e5)({caller:"generator",settings:f,registryName:a,allowInstall:c});e.plan&&await (0,m.NB)((0,n.UM)(e.plan,"generator",g,!1));let h=await (0,l.aM)(a);return h.plan&&await (0,m.NB)((0,n.UM)(h.plan,"generator",g,h.installed,h.error)),h.installed&&h.serverName&&(d.contextDirty=!0,d.installedServers.push({name:h.serverName,tools:(h.tools??[]).map(a=>a.name),...h.alreadyExisted?{alreadyExisted:!0}:{},...h.plan?.command?{command:h.plan.command}:{},...h.plan?.args?{args:h.plan.args}:{},...h.plan?.verificationStatus?{verificationStatus:h.plan.verificationStatus}:{}})),h}return{error:`Unknown tool: ${a}`}}async function z(a,b,c,d,e,f,h){let i={};for(let a of e){if("function"!==a.type)continue;let b=a.function.name;i[b]=a=>y(b,a,f,h)}for(let j=0;j<=8;j++){let k=e.length>0&&j<8,{completion:l}=await a.createCompletion({model:b,apiKey:c,messages:d,temperature:0,maxTokens:(0,g.normalizeMaxTokens)(b.maxTokens),...k?{tools:e,localToolExecutors:i}:{}}),m=l.choices?.[0]?.message,n=m?.tool_calls??[];if(0===n.length)return"string"==typeof m?.content?m.content:"";for(let a of(d.push({role:"assistant",content:m?.content??null,tool_calls:n}),n)){if("function"!==a.type)continue;let b={};try{b=JSON.parse(a.function.arguments||"{}")}catch{}u.info(`Generator tool call: ${a.function.name}(${a.function.arguments})`);let c=await y(a.function.name,b,f,h);d.push({role:"tool",tool_call_id:a.id,content:JSON.stringify(c)})}7===j&&d.push({role:"user",content:"Tool budget exhausted. Emit the COMPLETE flow specification now as a single JSON object using what you have."})}return""}function A(a){let b=a.indexOf("{");if(-1===b)return null;let c=0,d=!1,e=!1;for(let f=b;f<a.length;f++){let g=a[f];if(d){e?e=!1:"\\"===g?e=!0:'"'===g&&(d=!1);continue}if('"'===g)d=!0;else if("{"===g)c++;else if("}"===g&&0==--c)try{return JSON.parse(a.slice(b,f+1))}catch{break}}return null}async function B(a){var b;let c="string"==typeof a?.description?a.description.trim():"";if(!c)return{success:!1,error:"A flow description is required",statusCode:400};if(!a?.modelId||"string"!=typeof a.modelId)return{success:!1,error:"A generator model id is required",statusCode:400};let d=!0===a.allowInstall,g=!0===a.allowSubflows,k=g?"number"!=typeof(b=a.maxDepth)||Number.isNaN(b)?2:Math.max(0,Math.min(h.A_,Math.floor(b))):0,l=await e.modelService.getModel(a.modelId);if(!l)return{success:!1,error:`Generator model not found: ${a.modelId}`,statusCode:404};let m=await e.modelService.resolveAndDecryptApiKey(l.ApiKey);if(!m)return{success:!1,error:"Could not resolve the generator model API key",statusCode:500};let n=await (0,o.jY)(),y=(0,f.getCompletionAdapter)(l),B=x(d),C={installedServers:[],contextDirty:!1},D=Math.min("number"==typeof a.maxRepairs&&a.maxRepairs>=0?a.maxRepairs:1,2),E=1;async function F(a,b){let c,e=[{role:"system",content:v(n.catalog,d,g&&b<k,k)},{role:"user",content:a}];try{c=await z(y,l,m,e,B,d,C)}catch(a){return u.warn("A child subflow generation call failed; leaving the subflow unresolved",a),null}let f=A(c);return f&&"object"==typeof f?f:null}async function G(a,b){if(a&&Array.isArray(a.nodes))for(let c of a.nodes){if(c?.type!=="subflow"||c.flow)continue;if(c.subflowSpec){await G(c.subflowSpec,b+1);continue}let a="string"==typeof c.generateSubflow?c.generateSubflow.trim():"";if(!a)continue;if(b+1>k||E>=h.lk){u.info(`Not expanding generateSubflow (depth ${b+1}, ${E} flows so far): budget/depth reached`);continue}let d=await F(a,b+1);d?(E++,c.subflowSpec=d,delete c.generateSubflow,await G(d,b+1)):delete c.generateSubflow}}let H=[{role:"system",content:v(n.catalog,d,g,k)},{role:"user",content:c}],I=null,J=0;for(let a=0;a<=D;a++){let b;J++,E=1;try{b=await z(y,l,m,H,B,d,C)}catch(a){if(u.error("Generator model call failed",a),I)break;return{success:!1,error:`The generator model call failed: ${a instanceof Error?a.message:String(a)}`,statusCode:502}}let c=A(b);if(!c){if(u.warn(`Attempt ${J}: model output contained no parseable JSON object`),C.contextDirty){try{n=await (0,o.jY)()}catch(a){u.warn("Re-gathering context after install failed; keeping the stale catalog",a)}C.contextDirty=!1}H.push({role:"assistant",content:b},{role:"user",content:"Your reply contained no parseable JSON object. Re-emit the COMPLETE flow specification as a single JSON object and nothing else."});continue}if(g)try{await G(c,0)}catch(a){u.warn("Subflow expansion failed; compiling the root spec as-is",a)}if(C.contextDirty){try{n=await (0,o.jY)()}catch(a){u.warn("Re-gathering context after install failed; validating with the stale catalog",a)}C.contextDirty=!1}let e=[];try{let a=function(a){let b=[];try{!function a(b,c){if(b&&Array.isArray(b.nodes)){for(let d of(!function(a,b){let c=Array.isArray(a?.nodes)?a.nodes.filter(a=>a&&"string"==typeof a.key):[];if(0===c.length)return;let d=Array.isArray(a?.edges)?a.edges:[],e=new Map;for(let a of c)e.set(a.key,new Set);for(let a of d)a&&"string"==typeof a.from&&"string"==typeof a.to&&(e.has(a.to)&&e.get(a.to).add(a.from),a.bidirectional&&e.has(a.from)&&e.get(a.from).add(a.to));let f=a=>{let b=new Set,c=[...e.get(a)??[]];for(;c.length;){let d=c.pop();if(!b.has(d)&&d!==a)for(let a of(b.add(d),e.get(d)??[]))c.push(a)}return b},g=new Set;for(let a of c)"string"==typeof a.parallelFlowsVariable&&a.parallelFlowsVariable.trim()&&g.add(a.parallelFlowsVariable.trim());let h=new Map;for(let a of c){let b="string"==typeof a.captureVariable?a.captureVariable.trim():"";b&&(h.has(b)||h.set(b,[]),h.get(b).push(a))}let i=new Map;for(let a of c)for(let b of function(a){let b=new Set;for(let c of q){let d=a[c];if("string"==typeof d)for(let a of(0,p.T9)(d))b.add(a)}if(Array.isArray(a.spawnBriefs)){for(let c of a.spawnBriefs)if("string"==typeof c)for(let a of(0,p.T9)(c))b.add(a)}return[...b]}(a))i.has(b)||i.set(b,[]),i.get(b).push(a);for(let[a,d]of i){if(g.has(a))continue;let e=h.get(a)??[],i=d.filter(a=>{let b=f(a.key);return e.some(c=>c.key!==a.key&&b.has(c.key))});if(0===i.length){let d=r(a);for(let a of c)s(a,a=>t(a.replace(d,"")));b.push({code:"var-dangling",message:`Removed \${var:${a}} — no earlier step captures it (it would resolve to an empty string at run time).`});continue}if(i.some(a=>"isolated"===a.inputMode)){if(e.some(b=>"string"==typeof b.captureResource&&b.captureResource.trim()&&b.captureResource.trim()!==a))continue;for(let b of e)b.captureResource=a,delete b.captureVariable;let d=r(a);for(let b of c)s(b,b=>b.replace(d,"${res:"+a+"}"));b.push({code:"var-resource",message:`Converted scratchpad \${var:${a}} to a tracked run resource \${res:${a}} (a consumer is isolated, so conversation history cannot carry it).`});continue}let j=r(a);for(let a of c)s(a,a=>t(a.replace(j,"")));for(let a of i)a.inputMode="full-history";for(let b of e)b.captureVariable===a&&delete b.captureVariable;b.push({code:"var-history",message:`Removed scratchpad \${var:${a}} and set the reading step(s) to full-history so the value flows through the conversation instead.`})}}(b,c),b.nodes))if(d&&(d.subflowSpec&&a(d.subflowSpec,c),Array.isArray(d.parallelSubflowSpecs)))for(let b of d.parallelSubflowSpecs)a(b,c)}}(a,b)}catch{}return{spec:a,changes:b}}(c);a.changes.length>0&&(u.info(`Attempt ${J}: scratchpad-var guard rewrote ${a.changes.length} reference(s)`),e=a.changes.map(a=>({severity:"warning",code:a.code,message:a.message})))}catch(a){u.warn("Scratchpad-var guard failed; compiling the spec as-is",a)}let f=c,v=[];try{let a=(0,j.p)(c);a.changes.length>0&&(f=a.spec,v=a.changes,u.info(`Attempt ${J}: auto-repair adjusted the spec (${v.length} change(s))`))}catch(a){u.warn("Auto-repair of the generated spec failed; compiling the spec as-is",a)}let x=v.map(a=>({severity:"warning",code:a.code,message:a.message})),F=(0,h.dM)(f,n.compile,{maxDepth:k,maxFlows:h.lk});if(!F.flow){H.push({role:"assistant",content:b},{role:"user",content:`The specification could not be compiled:
33
+ ${w(F.issues)}
34
+ Fix these problems and re-emit the COMPLETE corrected JSON (only the JSON).`});continue}for(let a of F.flows)(0,h.Zn)(a);let K=F.flows.map(a=>({flow:a,validation:(0,i.nC)(a,{models:n.compile.models,servers:n.validatorServers,serverTools:n.compile.serverTools})})),L=(0,o.RB)([...e,...x,...F.issues],{issues:K.flatMap(a=>a.validation.issues),errorCount:0,warningCount:0,isRunnable:!0});if(I={flows:K,rootFlow:F.flow,validation:L},0===L.errorCount)break;u.info(`Attempt ${J}: bundle has ${L.errorCount} error(s)`+(a<D?"; asking the model to repair":"; repair budget exhausted")),a<D&&H.push({role:"assistant",content:b},{role:"user",content:`The flow you specified has these problems:
35
+ ${w(L.issues)}
36
+ Fix the errors (warnings are advisory) and re-emit the COMPLETE corrected JSON (only the JSON).`})}return I?(u.info(`Generated draft bundle rooted at "${I.rootFlow.name}" (${I.flows.length} flow(s)) in ${J} attempt(s): ${I.validation.errorCount} error(s), ${I.validation.warningCount} warning(s), ${C.installedServers.length} server(s) installed`),{success:!0,flow:I.rootFlow,validation:I.validation,flows:I.flows,rootFlowId:I.rootFlow.id,attempts:J,installedServers:C.installedServers}):{success:!1,error:"The model did not produce a usable flow specification. Try rephrasing the description or a different generator model.",statusCode:422}}async function C(a){let b="string"==typeof a?.description?a.description.trim():"";if(!b)return{success:!1,error:"A change description is required",statusCode:400};if(!a?.modelId||"string"!=typeof a.modelId)return{success:!1,error:"A generator model id is required",statusCode:400};let c=a?.flow;if(!c||"object"!=typeof c||!Array.isArray(c.nodes)||!Array.isArray(c.edges))return{success:!1,error:"A valid flow to improve is required",statusCode:400};let d=await e.modelService.getModel(a.modelId);if(!d)return{success:!1,error:`Generator model not found: ${a.modelId}`,statusCode:404};let g=await e.modelService.resolveAndDecryptApiKey(d.ApiKey);if(!g)return{success:!1,error:"Could not resolve the generator model API key",statusCode:500};let j=!0===a.allowInstall,k=await (0,o.jY)(),l=(0,f.getCompletionAdapter)(d),m=x(j),n={installedServers:[],contextDirty:!1},p=Math.min("number"==typeof a.maxRepairs&&a.maxRepairs>=0?a.maxRepairs:1,2),q=(0,h.FH)(c),r={};for(let a of c.nodes)a?.id&&a.position&&"number"==typeof a.position.x&&"number"==typeof a.position.y&&(r[a.id]={x:a.position.x,y:a.position.y});let s=a=>({models:a.compile.models,servers:a.compile.servers,serverTools:a.compile.serverTools,flows:(a.compile.flows??[]).filter(a=>a.id!==c.id)}),t=`EXISTING FLOW (modify this — keep unchanged parts intact, and KEEP each node's "key" for any node you do NOT restructure so its canvas position is preserved):
37
+ ${JSON.stringify(q)}
27
38
 
28
39
  CHANGE REQUEST:
29
40
  ${b}
30
41
 
31
- Re-emit the COMPLETE flow specification as a single JSON object (only the JSON), including the nodes you did not change.`,A=[{role:"system",content:q(k.catalog,j,!1,0)},{role:"user",content:z}],B=null,C=0;for(let a=0;a<=t;a++){let b;C++;try{b=await u(l,d,g,A,m,j,n)}catch(a){if(p.error("Improver model call failed",a),B)break;return{success:!1,error:`The generator model call failed: ${a instanceof Error?a.message:String(a)}`,statusCode:502}}if(n.contextDirty){try{k=await (0,o.jY)()}catch(a){p.warn("Re-gathering context after install failed; using the stale catalog",a)}n.contextDirty=!1}let e=v(b);if(!e){p.warn(`Improve attempt ${C}: model output contained no parseable JSON object`),A.push({role:"assistant",content:b},{role:"user",content:"Your reply contained no parseable JSON object. Re-emit the COMPLETE flow specification as a single JSON object and nothing else."});continue}let f=(0,h.dM)(e,y(k),{maxDepth:0,maxFlows:1,positions:x});if(!f.flow){A.push({role:"assistant",content:b},{role:"user",content:`The specification could not be compiled:
32
- ${r(f.issues)}
33
- Fix these problems and re-emit the COMPLETE corrected JSON (only the JSON).`});continue}f.flow.id=c.id,"string"==typeof e.name&&e.name.trim()||(f.flow.name=c.name),(0,h.Zn)(f.flow);let q=(0,i.nC)(f.flow,{models:k.compile.models,servers:k.validatorServers,serverTools:k.compile.serverTools}),s=(0,o.RB)(f.issues,q);if(B={flows:[{flow:f.flow,validation:q}],rootFlow:f.flow,validation:s},0===s.errorCount)break;p.info(`Improve attempt ${C}: flow has ${s.errorCount} error(s)`+(a<t?"; asking the model to repair":"; repair budget exhausted")),a<t&&A.push({role:"assistant",content:b},{role:"user",content:`The flow you specified has these problems:
34
- ${r(s.issues)}
35
- Fix the errors (warnings are advisory) and re-emit the COMPLETE corrected JSON (only the JSON).`})}return B?(p.info(`Improved draft "${B.rootFlow.name}" in ${C} attempt(s): ${B.validation.errorCount} error(s), ${B.validation.warningCount} warning(s), ${n.installedServers.length} server(s) installed`),{success:!0,flow:B.rootFlow,validation:B.validation,flows:B.flows,rootFlowId:B.rootFlow.id,attempts:C,installedServers:n.installedServers}):{success:!1,error:"The model did not produce a usable flow specification. Try rephrasing the change request or a different generator model.",statusCode:422}}async function y(a){let b=a?.flow;if(!b||"object"!=typeof b||!Array.isArray(b.nodes)||!Array.isArray(b.edges))return{success:!1,error:"A valid flow to repair is required",statusCode:400};if(!a?.modelId||"string"!=typeof a.modelId)return{success:!1,error:"A repair model id is required",statusCode:400};let c=(0,i.nC)(b),d=c.issues.length>0?`
42
+ Re-emit the COMPLETE flow specification as a single JSON object (only the JSON), including the nodes you did not change.`,y=[{role:"system",content:v(k.catalog,j,!1,0)},{role:"user",content:t}],B=null,C=0;for(let a=0;a<=p;a++){let b;C++;try{b=await z(l,d,g,y,m,j,n)}catch(a){if(u.error("Improver model call failed",a),B)break;return{success:!1,error:`The generator model call failed: ${a instanceof Error?a.message:String(a)}`,statusCode:502}}if(n.contextDirty){try{k=await (0,o.jY)()}catch(a){u.warn("Re-gathering context after install failed; using the stale catalog",a)}n.contextDirty=!1}let e=A(b);if(!e){u.warn(`Improve attempt ${C}: model output contained no parseable JSON object`),y.push({role:"assistant",content:b},{role:"user",content:"Your reply contained no parseable JSON object. Re-emit the COMPLETE flow specification as a single JSON object and nothing else."});continue}let f=(0,h.dM)(e,s(k),{maxDepth:0,maxFlows:1,positions:r});if(!f.flow){y.push({role:"assistant",content:b},{role:"user",content:`The specification could not be compiled:
43
+ ${w(f.issues)}
44
+ Fix these problems and re-emit the COMPLETE corrected JSON (only the JSON).`});continue}f.flow.id=c.id,"string"==typeof e.name&&e.name.trim()||(f.flow.name=c.name),(0,h.Zn)(f.flow);let q=(0,i.nC)(f.flow,{models:k.compile.models,servers:k.validatorServers,serverTools:k.compile.serverTools}),t=(0,o.RB)(f.issues,q);if(B={flows:[{flow:f.flow,validation:q}],rootFlow:f.flow,validation:t},0===t.errorCount)break;u.info(`Improve attempt ${C}: flow has ${t.errorCount} error(s)`+(a<p?"; asking the model to repair":"; repair budget exhausted")),a<p&&y.push({role:"assistant",content:b},{role:"user",content:`The flow you specified has these problems:
45
+ ${w(t.issues)}
46
+ Fix the errors (warnings are advisory) and re-emit the COMPLETE corrected JSON (only the JSON).`})}return B?(u.info(`Improved draft "${B.rootFlow.name}" in ${C} attempt(s): ${B.validation.errorCount} error(s), ${B.validation.warningCount} warning(s), ${n.installedServers.length} server(s) installed`),{success:!0,flow:B.rootFlow,validation:B.validation,flows:B.flows,rootFlowId:B.rootFlow.id,attempts:C,installedServers:n.installedServers}):{success:!1,error:"The model did not produce a usable flow specification. Try rephrasing the change request or a different generator model.",statusCode:422}}async function D(a){let b=a?.flow;if(!b||"object"!=typeof b||!Array.isArray(b.nodes)||!Array.isArray(b.edges))return{success:!1,error:"A valid flow to repair is required",statusCode:400};if(!a?.modelId||"string"!=typeof a.modelId)return{success:!1,error:"A repair model id is required",statusCode:400};let c=(0,i.nC)(b),d=c.issues.length>0?`
36
47
 
37
48
  Known problems to fix:
38
- ${r(c.issues)}`:"";return x({flow:b,description:`Repair this flow's wiring so it is runnable, WITHOUT changing any node's prompt, model, or servers:
49
+ ${w(c.issues)}`:"";return C({flow:b,description:`Repair this flow's wiring so it is runnable, WITHOUT changing any node's prompt, model, or servers:
39
50
  - add a Start node if one is missing, connected to the first step;
40
51
  - add a Finish node if one is missing, connected from the last step;
41
52
  - connect any disconnected process/subflow nodes.