flujo-ai 3.33.0 → 3.34.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 (298) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-build-manifest.json +240 -240
  3. package/.next/app-path-routes-manifest.json +14 -14
  4. package/.next/build-manifest.json +5 -5
  5. package/.next/prerender-manifest.json +21 -21
  6. package/.next/react-loadable-manifest.json +3 -3
  7. package/.next/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 +2 -2
  10. package/.next/server/app/api/approvals/[id]/route.js.nft.json +1 -1
  11. package/.next/server/app/api/approvals/[id]/route_client-reference-manifest.js +1 -1
  12. package/.next/server/app/api/approvals/route.js.nft.json +1 -1
  13. package/.next/server/app/api/approvals/route_client-reference-manifest.js +1 -1
  14. package/.next/server/app/api/backup/route.js.nft.json +1 -1
  15. package/.next/server/app/api/backup/route_client-reference-manifest.js +1 -1
  16. package/.next/server/app/api/browse/route_client-reference-manifest.js +1 -1
  17. package/.next/server/app/api/bugs/enhance/route.js.nft.json +1 -1
  18. package/.next/server/app/api/bugs/enhance/route_client-reference-manifest.js +1 -1
  19. package/.next/server/app/api/cwd/route_client-reference-manifest.js +1 -1
  20. package/.next/server/app/api/encryption/secure/route.js +1 -1
  21. package/.next/server/app/api/encryption/secure/route.js.nft.json +1 -1
  22. package/.next/server/app/api/encryption/secure/route_client-reference-manifest.js +1 -1
  23. package/.next/server/app/api/env/route_client-reference-manifest.js +1 -1
  24. package/.next/server/app/api/flow/[id]/route.js.nft.json +1 -1
  25. package/.next/server/app/api/flow/[id]/route_client-reference-manifest.js +1 -1
  26. package/.next/server/app/api/flow/[id]/versions/[versionId]/route.js.nft.json +1 -1
  27. package/.next/server/app/api/flow/[id]/versions/[versionId]/route_client-reference-manifest.js +1 -1
  28. package/.next/server/app/api/flow/[id]/versions/route.js.nft.json +1 -1
  29. package/.next/server/app/api/flow/[id]/versions/route_client-reference-manifest.js +1 -1
  30. package/.next/server/app/api/flow/compile/route.js +1 -1
  31. package/.next/server/app/api/flow/compile/route.js.nft.json +1 -1
  32. package/.next/server/app/api/flow/compile/route_client-reference-manifest.js +1 -1
  33. package/.next/server/app/api/flow/generate/route.js +1 -1
  34. package/.next/server/app/api/flow/generate/route.js.nft.json +1 -1
  35. package/.next/server/app/api/flow/generate/route_client-reference-manifest.js +1 -1
  36. package/.next/server/app/api/flow/generator/route.js +25 -4
  37. package/.next/server/app/api/flow/generator/route.js.nft.json +1 -1
  38. package/.next/server/app/api/flow/generator/route_client-reference-manifest.js +1 -1
  39. package/.next/server/app/api/flow/improve/route.js +1 -1
  40. package/.next/server/app/api/flow/improve/route.js.nft.json +1 -1
  41. package/.next/server/app/api/flow/improve/route_client-reference-manifest.js +1 -1
  42. package/.next/server/app/api/flow/prompt-renderer/route.js.nft.json +1 -1
  43. package/.next/server/app/api/flow/prompt-renderer/route_client-reference-manifest.js +1 -1
  44. package/.next/server/app/api/flow/quick-chat/route.js.nft.json +1 -1
  45. package/.next/server/app/api/flow/quick-chat/route_client-reference-manifest.js +1 -1
  46. package/.next/server/app/api/flow/repair/route.js +1 -1
  47. package/.next/server/app/api/flow/repair/route.js.nft.json +1 -1
  48. package/.next/server/app/api/flow/repair/route_client-reference-manifest.js +1 -1
  49. package/.next/server/app/api/flow/route.js.nft.json +1 -1
  50. package/.next/server/app/api/flow/route_client-reference-manifest.js +1 -1
  51. package/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
  52. package/.next/server/app/api/init/route.js +1 -1
  53. package/.next/server/app/api/init/route.js.nft.json +1 -1
  54. package/.next/server/app/api/init/route_client-reference-manifest.js +1 -1
  55. package/.next/server/app/api/local-models/capability/route_client-reference-manifest.js +1 -1
  56. package/.next/server/app/api/local-models/pull/route_client-reference-manifest.js +1 -1
  57. package/.next/server/app/api/local-models/suggest/route_client-reference-manifest.js +1 -1
  58. package/.next/server/app/api/mcp/app-sandbox/route_client-reference-manifest.js +1 -1
  59. package/.next/server/app/api/mcp/cancel/route.js.nft.json +1 -1
  60. package/.next/server/app/api/mcp/cancel/route_client-reference-manifest.js +1 -1
  61. package/.next/server/app/api/mcp/oauth-capability/route.js.nft.json +1 -1
  62. package/.next/server/app/api/mcp/oauth-capability/route_client-reference-manifest.js +1 -1
  63. package/.next/server/app/api/mcp/servers/[name]/prompts/get/route.js.nft.json +1 -1
  64. package/.next/server/app/api/mcp/servers/[name]/prompts/get/route_client-reference-manifest.js +1 -1
  65. package/.next/server/app/api/mcp/servers/[name]/prompts/route.js.nft.json +1 -1
  66. package/.next/server/app/api/mcp/servers/[name]/prompts/route_client-reference-manifest.js +1 -1
  67. package/.next/server/app/api/mcp/servers/[name]/resources/read/route.js.nft.json +1 -1
  68. package/.next/server/app/api/mcp/servers/[name]/resources/read/route_client-reference-manifest.js +1 -1
  69. package/.next/server/app/api/mcp/servers/[name]/resources/route.js.nft.json +1 -1
  70. package/.next/server/app/api/mcp/servers/[name]/resources/route_client-reference-manifest.js +1 -1
  71. package/.next/server/app/api/mcp/servers/[name]/route.js.nft.json +1 -1
  72. package/.next/server/app/api/mcp/servers/[name]/route_client-reference-manifest.js +1 -1
  73. package/.next/server/app/api/mcp/servers/[name]/status/route.js.nft.json +1 -1
  74. package/.next/server/app/api/mcp/servers/[name]/status/route_client-reference-manifest.js +1 -1
  75. package/.next/server/app/api/mcp/servers/[name]/tools/[toolName]/route.js.nft.json +1 -1
  76. package/.next/server/app/api/mcp/servers/[name]/tools/[toolName]/route_client-reference-manifest.js +1 -1
  77. package/.next/server/app/api/mcp/servers/[name]/tools/route.js.nft.json +1 -1
  78. package/.next/server/app/api/mcp/servers/[name]/tools/route_client-reference-manifest.js +1 -1
  79. package/.next/server/app/api/mcp/servers/route.js.nft.json +1 -1
  80. package/.next/server/app/api/mcp/servers/route_client-reference-manifest.js +1 -1
  81. package/.next/server/app/api/mcp/test-connection/route.js.nft.json +1 -1
  82. package/.next/server/app/api/mcp/test-connection/route_client-reference-manifest.js +1 -1
  83. package/.next/server/app/api/mcp/test-connection/stream/route.js.nft.json +1 -1
  84. package/.next/server/app/api/mcp/test-connection/stream/route_client-reference-manifest.js +1 -1
  85. package/.next/server/app/api/mcp-registry/route.js.nft.json +1 -1
  86. package/.next/server/app/api/mcp-registry/route_client-reference-manifest.js +1 -1
  87. package/.next/server/app/api/mcp-registry/spotlight/route_client-reference-manifest.js +1 -1
  88. package/.next/server/app/api/model/[id]/route.js.nft.json +1 -1
  89. package/.next/server/app/api/model/[id]/route_client-reference-manifest.js +1 -1
  90. package/.next/server/app/api/model/provider/route.js.nft.json +1 -1
  91. package/.next/server/app/api/model/provider/route_client-reference-manifest.js +1 -1
  92. package/.next/server/app/api/model/route.js.nft.json +1 -1
  93. package/.next/server/app/api/model/route_client-reference-manifest.js +1 -1
  94. package/.next/server/app/api/model/test/route.js.nft.json +1 -1
  95. package/.next/server/app/api/model/test/route_client-reference-manifest.js +1 -1
  96. package/.next/server/app/api/oauth/callback/route_client-reference-manifest.js +1 -1
  97. package/.next/server/app/api/oauth/initiate/route_client-reference-manifest.js +1 -1
  98. package/.next/server/app/api/oauth/reset/route.js.nft.json +1 -1
  99. package/.next/server/app/api/oauth/reset/route_client-reference-manifest.js +1 -1
  100. package/.next/server/app/api/packages/build/route.js +1 -1
  101. package/.next/server/app/api/packages/build/route.js.nft.json +1 -1
  102. package/.next/server/app/api/packages/build/route_client-reference-manifest.js +1 -1
  103. package/.next/server/app/api/packages/derive-secrets/route.js.nft.json +1 -1
  104. package/.next/server/app/api/packages/derive-secrets/route_client-reference-manifest.js +1 -1
  105. package/.next/server/app/api/packages/install/route.js.nft.json +1 -1
  106. package/.next/server/app/api/packages/install/route_client-reference-manifest.js +1 -1
  107. package/.next/server/app/api/packages/install/status/route.js.nft.json +1 -1
  108. package/.next/server/app/api/packages/install/status/route_client-reference-manifest.js +1 -1
  109. package/.next/server/app/api/packages/installed/route.js.nft.json +1 -1
  110. package/.next/server/app/api/packages/installed/route_client-reference-manifest.js +1 -1
  111. package/.next/server/app/api/packages/resolve/route.js +1 -1
  112. package/.next/server/app/api/packages/resolve/route.js.nft.json +1 -1
  113. package/.next/server/app/api/packages/resolve/route_client-reference-manifest.js +1 -1
  114. package/.next/server/app/api/packages/scan-targets/route.js.nft.json +1 -1
  115. package/.next/server/app/api/packages/scan-targets/route_client-reference-manifest.js +1 -1
  116. package/.next/server/app/api/packages/search/route_client-reference-manifest.js +1 -1
  117. package/.next/server/app/api/packages/uninstall/route.js.nft.json +1 -1
  118. package/.next/server/app/api/packages/uninstall/route_client-reference-manifest.js +1 -1
  119. package/.next/server/app/api/planned-executions/[id]/route.js.nft.json +1 -1
  120. package/.next/server/app/api/planned-executions/[id]/route_client-reference-manifest.js +1 -1
  121. package/.next/server/app/api/planned-executions/[id]/run/route.js.nft.json +1 -1
  122. package/.next/server/app/api/planned-executions/[id]/run/route_client-reference-manifest.js +1 -1
  123. package/.next/server/app/api/planned-executions/[id]/runs/route.js.nft.json +1 -1
  124. package/.next/server/app/api/planned-executions/[id]/runs/route_client-reference-manifest.js +1 -1
  125. package/.next/server/app/api/planned-executions/preview-schedule/route_client-reference-manifest.js +1 -1
  126. package/.next/server/app/api/planned-executions/reconcile/route.js +1 -1
  127. package/.next/server/app/api/planned-executions/reconcile/route.js.nft.json +1 -1
  128. package/.next/server/app/api/planned-executions/reconcile/route_client-reference-manifest.js +1 -1
  129. package/.next/server/app/api/planned-executions/route.js +1 -1
  130. package/.next/server/app/api/planned-executions/route.js.nft.json +1 -1
  131. package/.next/server/app/api/planned-executions/route_client-reference-manifest.js +1 -1
  132. package/.next/server/app/api/registry/auth/resend/route_client-reference-manifest.js +1 -1
  133. package/.next/server/app/api/registry/auth/reset/route_client-reference-manifest.js +1 -1
  134. package/.next/server/app/api/registry/auth/route_client-reference-manifest.js +1 -1
  135. package/.next/server/app/api/registry/feedback/route.js +1 -1
  136. package/.next/server/app/api/registry/feedback/route_client-reference-manifest.js +1 -1
  137. package/.next/server/app/api/registry/oauth/callback/route_client-reference-manifest.js +1 -1
  138. package/.next/server/app/api/registry/oauth/initiate/route_client-reference-manifest.js +1 -1
  139. package/.next/server/app/api/registry/packages/route_client-reference-manifest.js +1 -1
  140. package/.next/server/app/api/registry/publish/route_client-reference-manifest.js +1 -1
  141. package/.next/server/app/api/registry/settings/route_client-reference-manifest.js +1 -1
  142. package/.next/server/app/api/restore/route.js.nft.json +1 -1
  143. package/.next/server/app/api/restore/route_client-reference-manifest.js +1 -1
  144. package/.next/server/app/api/runs/active/route.js.nft.json +1 -1
  145. package/.next/server/app/api/runs/active/route_client-reference-manifest.js +1 -1
  146. package/.next/server/app/api/storage/route_client-reference-manifest.js +1 -1
  147. package/.next/server/app/api/telemetry/daily-active/route.js +1 -1
  148. package/.next/server/app/api/telemetry/daily-active/route_client-reference-manifest.js +1 -1
  149. package/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
  150. package/.next/server/app/api/waves/route.js +1 -1
  151. package/.next/server/app/api/waves/route.js.nft.json +1 -1
  152. package/.next/server/app/api/waves/route_client-reference-manifest.js +1 -1
  153. package/.next/server/app/api/webhooks/[id]/route.js +1 -1
  154. package/.next/server/app/api/webhooks/[id]/route.js.nft.json +1 -1
  155. package/.next/server/app/api/webhooks/[id]/route_client-reference-manifest.js +1 -1
  156. package/.next/server/app/chat/page.js +1 -1
  157. package/.next/server/app/chat/page_client-reference-manifest.js +1 -1
  158. package/.next/server/app/chat.html +1 -1
  159. package/.next/server/app/chat.rsc +3 -3
  160. package/.next/server/app/docs/page_client-reference-manifest.js +1 -1
  161. package/.next/server/app/docs.html +1 -1
  162. package/.next/server/app/docs.rsc +2 -2
  163. package/.next/server/app/executions/page.js +2 -2
  164. package/.next/server/app/executions/page.js.nft.json +1 -1
  165. package/.next/server/app/executions/page_client-reference-manifest.js +1 -1
  166. package/.next/server/app/executions.html +1 -1
  167. package/.next/server/app/executions.rsc +3 -3
  168. package/.next/server/app/flows/page.js +3 -3
  169. package/.next/server/app/flows/page.js.nft.json +1 -1
  170. package/.next/server/app/flows/page_client-reference-manifest.js +1 -1
  171. package/.next/server/app/flows.html +1 -1
  172. package/.next/server/app/flows.rsc +3 -3
  173. package/.next/server/app/index.html +1 -1
  174. package/.next/server/app/index.rsc +3 -3
  175. package/.next/server/app/mcp/page.js +1 -1
  176. package/.next/server/app/mcp/page_client-reference-manifest.js +1 -1
  177. package/.next/server/app/mcp-flows/route.js +1 -1
  178. package/.next/server/app/mcp-flows/route.js.nft.json +1 -1
  179. package/.next/server/app/mcp-flows/route_client-reference-manifest.js +1 -1
  180. package/.next/server/app/mcp-proxy/[server]/route.js +1 -1
  181. package/.next/server/app/mcp-proxy/[server]/route.js.nft.json +1 -1
  182. package/.next/server/app/mcp-proxy/[server]/route_client-reference-manifest.js +1 -1
  183. package/.next/server/app/mcp.html +1 -1
  184. package/.next/server/app/mcp.rsc +3 -3
  185. package/.next/server/app/models/page.js +1 -1
  186. package/.next/server/app/models/page.js.nft.json +1 -1
  187. package/.next/server/app/models/page_client-reference-manifest.js +1 -1
  188. package/.next/server/app/packages/page.js +1 -1
  189. package/.next/server/app/packages/page_client-reference-manifest.js +1 -1
  190. package/.next/server/app/packages.html +1 -1
  191. package/.next/server/app/packages.rsc +3 -3
  192. package/.next/server/app/page.js +4 -2
  193. package/.next/server/app/page_client-reference-manifest.js +1 -1
  194. package/.next/server/app/settings/page.js +1 -1
  195. package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  196. package/.next/server/app/settings.html +1 -1
  197. package/.next/server/app/settings.rsc +3 -3
  198. package/.next/server/app/v1/chat/completions/route.js.nft.json +1 -1
  199. package/.next/server/app/v1/chat/completions/route_client-reference-manifest.js +1 -1
  200. package/.next/server/app/v1/chat/conversations/[conversationId]/breakpoints/route.js.nft.json +1 -1
  201. package/.next/server/app/v1/chat/conversations/[conversationId]/breakpoints/route_client-reference-manifest.js +1 -1
  202. package/.next/server/app/v1/chat/conversations/[conversationId]/cancel/route.js.nft.json +1 -1
  203. package/.next/server/app/v1/chat/conversations/[conversationId]/cancel/route_client-reference-manifest.js +1 -1
  204. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/continue/route.js.nft.json +1 -1
  205. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/continue/route_client-reference-manifest.js +1 -1
  206. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/step/route.js.nft.json +1 -1
  207. package/.next/server/app/v1/chat/conversations/[conversationId]/debug/step/route_client-reference-manifest.js +1 -1
  208. package/.next/server/app/v1/chat/conversations/[conversationId]/edit-state/route.js.nft.json +1 -1
  209. package/.next/server/app/v1/chat/conversations/[conversationId]/edit-state/route_client-reference-manifest.js +1 -1
  210. package/.next/server/app/v1/chat/conversations/[conversationId]/events/route.js.nft.json +1 -1
  211. package/.next/server/app/v1/chat/conversations/[conversationId]/events/route_client-reference-manifest.js +1 -1
  212. package/.next/server/app/v1/chat/conversations/[conversationId]/inject/route.js.nft.json +1 -1
  213. package/.next/server/app/v1/chat/conversations/[conversationId]/inject/route_client-reference-manifest.js +1 -1
  214. package/.next/server/app/v1/chat/conversations/[conversationId]/resources/route_client-reference-manifest.js +1 -1
  215. package/.next/server/app/v1/chat/conversations/[conversationId]/respond/route.js.nft.json +1 -1
  216. package/.next/server/app/v1/chat/conversations/[conversationId]/respond/route_client-reference-manifest.js +1 -1
  217. package/.next/server/app/v1/chat/conversations/[conversationId]/route.js.nft.json +1 -1
  218. package/.next/server/app/v1/chat/conversations/[conversationId]/route_client-reference-manifest.js +1 -1
  219. package/.next/server/app/v1/chat/conversations/route.js.nft.json +1 -1
  220. package/.next/server/app/v1/chat/conversations/route_client-reference-manifest.js +1 -1
  221. package/.next/server/app/v1/chat/events/route.js.nft.json +1 -1
  222. package/.next/server/app/v1/chat/events/route_client-reference-manifest.js +1 -1
  223. package/.next/server/app/v1/models/route.js.nft.json +1 -1
  224. package/.next/server/app/v1/models/route_client-reference-manifest.js +1 -1
  225. package/.next/server/app/waves/page_client-reference-manifest.js +1 -1
  226. package/.next/server/app/waves.html +1 -1
  227. package/.next/server/app/waves.rsc +2 -2
  228. package/.next/server/app-paths-manifest.json +14 -14
  229. package/.next/server/chunks/1114.js +1 -1
  230. package/.next/server/chunks/1226.js +1 -1
  231. package/.next/server/chunks/1227.js +1 -1
  232. package/.next/server/chunks/166.js +5 -5
  233. package/.next/server/chunks/1664.js +1 -1
  234. package/.next/server/chunks/227.js +1 -1
  235. package/.next/server/chunks/2273.js +1 -1
  236. package/.next/server/chunks/3717.js +1 -0
  237. package/.next/server/chunks/4466.js +1 -1
  238. package/.next/server/chunks/4551.js +1 -1
  239. package/.next/server/chunks/4771.js +1 -1
  240. package/.next/server/chunks/519.js +2 -0
  241. package/.next/server/chunks/5285.js +1 -0
  242. package/.next/server/chunks/5309.js +78 -0
  243. package/.next/server/chunks/544.js +4 -4
  244. package/.next/server/chunks/5463.js +1 -1
  245. package/.next/server/chunks/5544.js +4 -4
  246. package/.next/server/chunks/{5708.js → 6041.js} +1 -1
  247. package/.next/server/chunks/6747.js +42 -13
  248. package/.next/server/chunks/7628.js +1 -1
  249. package/.next/server/chunks/7630.js +11 -0
  250. package/.next/server/chunks/8284.js +42 -0
  251. package/.next/server/chunks/8645.js +1 -1
  252. package/.next/server/chunks/9235.js +25 -4
  253. package/.next/server/instrumentation.js.nft.json +1 -1
  254. package/.next/server/middleware-build-manifest.js +1 -1
  255. package/.next/server/middleware-manifest.json +1 -1
  256. package/.next/server/middleware-react-loadable-manifest.js +1 -1
  257. package/.next/server/pages/404.html +1 -1
  258. package/.next/server/pages/500.html +1 -1
  259. package/.next/server/server-reference-manifest.js +1 -1
  260. package/.next/server/server-reference-manifest.json +1 -1
  261. package/.next/static/chunks/2005.4eea65c00d9a29cd.js +1 -0
  262. package/.next/static/chunks/3429-34fb1a84aed96703.js +1 -0
  263. package/.next/static/chunks/{2005-f9d38c39f10c321f.js → 4386-e9621d3c94969a68.js} +1 -1
  264. package/.next/static/chunks/4919-6c8a48e3cc642349.js +1 -0
  265. package/.next/static/chunks/7561-2b366ddcbc3cc0ec.js +1 -0
  266. package/.next/static/chunks/8404-5aa8ea49197b98b8.js +1 -0
  267. package/.next/static/chunks/{8650-41c2afc0eba37fb8.js → 8650-5294c6ed1173b014.js} +1 -1
  268. package/.next/static/chunks/app/chat/{page-1d100e5d974c919e.js → page-bc7807593b8b7394.js} +1 -1
  269. package/.next/static/chunks/app/executions/page-8296fd69c439ccee.js +1 -0
  270. package/.next/static/chunks/app/flows/page-87fb466e491fc068.js +1 -0
  271. package/.next/static/chunks/app/{layout-38b88f3b057f4852.js → layout-abed1f211e03152f.js} +1 -1
  272. package/.next/static/chunks/app/mcp/page-1648e6fde0c41461.js +1 -0
  273. package/.next/static/chunks/app/models/{page-808c0568ebc5e2c7.js → page-a5e2437356b06db8.js} +1 -1
  274. package/.next/static/chunks/app/packages/page-fba5696f33d9cdfb.js +1 -0
  275. package/.next/static/chunks/app/page-2f9da78a4891731a.js +1 -0
  276. package/.next/static/chunks/app/settings/page-2fc3a70bfd25c48b.js +1 -0
  277. package/.next/static/chunks/{webpack-dccb4f149ebdedcc.js → webpack-d5d737ff6a86674f.js} +1 -1
  278. package/.next/trace +10 -10
  279. package/README.md +16 -15
  280. package/package.json +5 -5
  281. package/.next/server/chunks/2985.js +0 -1
  282. package/.next/server/chunks/4366.js +0 -2
  283. package/.next/server/chunks/5040.js +0 -48
  284. package/.next/server/chunks/8187.js +0 -78
  285. package/.next/server/chunks/8851.js +0 -1
  286. package/.next/static/chunks/289-98f50bfcf833d661.js +0 -1
  287. package/.next/static/chunks/3089.df88f3b16898aad7.js +0 -1
  288. package/.next/static/chunks/8041-05830e887c133085.js +0 -1
  289. package/.next/static/chunks/8404-bfa9203e4296f3fb.js +0 -1
  290. package/.next/static/chunks/95-b9691d3cb15556dc.js +0 -1
  291. package/.next/static/chunks/app/executions/page-10ec7d58c7fbdd6f.js +0 -1
  292. package/.next/static/chunks/app/flows/page-9a78a2915268b2f8.js +0 -1
  293. package/.next/static/chunks/app/mcp/page-56b43b2f8752e9a5.js +0 -1
  294. package/.next/static/chunks/app/packages/page-af6ec89522915206.js +0 -1
  295. package/.next/static/chunks/app/page-30bf4293efa47a47.js +0 -1
  296. package/.next/static/chunks/app/settings/page-59ae1b658838f0bc.js +0 -1
  297. /package/.next/static/{jfb1GsjSGMjBmwfa3kM26 → Zz_Vh59XdtLIPcf-PxCpo}/_buildManifest.js +0 -0
  298. /package/.next/static/{jfb1GsjSGMjBmwfa3kM26 → Zz_Vh59XdtLIPcf-PxCpo}/_ssgManifest.js +0 -0
@@ -1 +1 @@
1
- exports.id=7628,exports.ids=[7628],exports.modules={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}},22084:(a,b,c)=>{"use strict";c.d(b,{D:()=>e});var d=c(93868);function e(a){let b=new Set,c=a=>{if("string"==typeof a){for(let c of function(a){let b;if("string"!=typeof a)return[];let c=[],e=RegExp(d.HQ.source,"g");for(;null!==(b=e.exec(a));)c.includes(b[1])||c.push(b[1]);return c}(a))b.add(c);return}if(Array.isArray(a)){for(let b of a)c(b);return}if(a&&"object"==typeof a)for(let b of Object.values(a))c(b)};return c(a),Array.from(b)}},25113:(a,b,c)=>{"use strict";c.d(b,{$j:()=>k,Xw:()=>g,Zp:()=>j});var d=c(93868),e=c(22084),f=c(63564);function g(a){let b=new Set,c=new Set,d=new Set;for(let e of a.nodes??[]){let a=e.data?.properties??{},f=e.data?.type??e.type,g=a.flowId??a.subflowId??a.subFlowId;"subflow"===f&&"string"==typeof g&&g&&b.add(g);let h=a.boundModel??a.modelId??a.model;if("string"==typeof h&&h&&c.add(h),"mcp"===f){let b=a.mcpServer??a.serverName??a.server;"string"==typeof b&&b&&d.add(b)}}let e={};return b.size&&(e.flowIds=Array.from(b)),c.size&&(e.modelIds=Array.from(c)),d.size&&(e.mcpServerNames=Array.from(d)),e}function h({model:a,apiKeyRef:b}){let{ApiKey:c,...d}=a;return{...d,apiKeyRef:b??{kind:"none"}}}function i(a){let b=JSON.parse(JSON.stringify(a));return b.trigger&&"webhook"===b.trigger.type&&delete b.trigger.token,b}function j(a){let b={schemaVersion:1,id:a.id,name:a.name,description:a.description,version:a.version,author:a.author,publisher:a.publisher,tags:a.tags,requiredGlobals:a.requiredGlobals,secrets:a.secrets??[],models:(a.models??[]).map(h),mcpServers:a.mcpServers??[],flows:(a.flows??[]).map(a=>{let b=g(a);return Object.keys(b).length?{flow:a,references:b}:{flow:a}}),plannedExecutions:(a.plannedExecutions??[]).map(i)};if((0,f.AG)(b))throw Error("Refusing to serialize package: an 'encrypted:' value was found (secret material must never be packaged).");let c=f._M.parse(b),e=JSON.stringify(c),j=new TextEncoder().encode(e).length;if(j>d.j6)throw Error(`Package exceeds size cap: ${j} bytes > ${d.j6} bytes.`);return{json:e,package:c}}function k(a){let b=f._M.safeParse(a);if(!b.success)return{success:!1,errors:b.error.issues.map(a=>{let b=a.path.join(".");return b?`${b}: ${a.message}`:a.message})};let c=b.data;return{success:!0,data:c,warnings:function(a){let b=new Set((0,e.D)(a));for(let c of a.models)"secret"===c.apiKeyRef.kind&&b.add(c.apiKeyRef.secret);for(let c of a.mcpServers)for(let a of[...c.envDeclarations,...c.headerDeclarations??[]])a.secretRef&&b.add(a.secretRef);return a.secrets.filter(a=>!b.has(a.name)).map(a=>`secret "${a.name}" is declared but never referenced`)}(c)}}},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})}},63564:(a,b,c)=>{"use strict";c.d(b,{AG:()=>g,_M:()=>p});var d=c(10522),e=c(93868),f=c(22084);function g(a){return"string"==typeof a?a.startsWith(e.Mp):Array.isArray(a)?a.some(g):!!a&&"object"==typeof a&&Object.values(a).some(g)}let h=d.Ik({name:d.Yj().min(1).regex(e.IE,"invalid secret name"),description:d.Yj().optional(),required:d.zM(),default:d.Yj().optional()}).strict(),i=d.gM("kind",[d.Ik({kind:d.eu("secret"),secret:d.Yj().min(1)}).strict(),d.Ik({kind:d.eu("global"),var:d.Yj().min(1)}).strict(),d.Ik({kind:d.eu("none")}).strict()]),j=d.Ik({id:d.Yj().min(1),name:d.Yj().min(1),displayName:d.Yj().optional(),description:d.Yj().optional(),baseUrl:d.Yj().optional(),provider:d.Yj().optional(),adapter:d.Yj().optional(),promptTemplate:d.Yj().optional(),reasoningSchema:d.Yj().optional(),temperature:d.Yj().optional(),reasoningEffort:d.k5(["minimal","low","medium","high","xhigh","max","ultra"]).optional(),thinkingLevel:d.k5(["minimal","low","medium","high"]).optional(),thinkingBudget:d.ai().int().min(-1).optional(),serviceTier:d.k5(["default","priority"]).optional(),functionCallingSchema:d.Yj().optional(),contextWindow:d.ai().optional(),maxTurns:d.ai().optional(),maxTokens:d.ai().optional(),folder:d.Yj().optional(),favorite:d.zM().optional(),apiKeyRef:i}).strict(),k=d.Ik({sourceType:d.k5(["github","registry","marketplace","remote"]),ref:d.Yj().optional(),url:d.Yj().optional(),name:d.Yj().optional()}).strict().superRefine((a,b)=>{"remote"!==a.sourceType||a.url||b.addIssue({code:"custom",message:"installOrigin 'remote' requires a url"}),"github"!==a.sourceType&&"registry"!==a.sourceType||a.ref||b.addIssue({code:"custom",message:`installOrigin '${a.sourceType}' requires a ref`})}),l=d.Ik({name:d.Yj().min(1),isSecret:d.zM(),secretRef:d.Yj().optional(),globalVar:d.Yj().optional()}).strict(),m=d.Ik({name:d.Yj().min(1),transport:d.k5(["stdio","sse","streamable","websocket"]),disabled:d.zM().optional(),autoApprove:d.YO(d.Yj()).optional(),folder:d.Yj().optional(),installOrigin:k,envDeclarations:d.YO(l),headerDeclarations:d.YO(l).optional()}).strict(),n=d.Ik({flow:d.Ik({id:d.Yj().min(1),name:d.Yj().min(1),nodes:d.YO(d.bz()),edges:d.YO(d.bz())}).catchall(d.L5()),references:d.Ik({flowIds:d.YO(d.Yj()).optional(),modelIds:d.YO(d.Yj()).optional(),mcpServerNames:d.YO(d.Yj()).optional()}).optional()}),o=d.Ik({id:d.Yj().min(1),name:d.Yj().min(1),enabled:d.zM(),flowId:d.Yj().min(1),prompt:d.Yj(),trigger:d.bz()}).catchall(d.L5()),p=d.Ik({schemaVersion:d.eu(e.EL),id:d.Yj().min(1),name:d.Yj().min(1),description:d.Yj().optional(),version:d.Yj().regex(e.po,"version must be valid semver"),author:d.Yj().optional(),publisher:d.Yj().optional(),tags:d.YO(d.Yj()).optional(),requiredGlobals:d.YO(d.Yj()).optional(),secrets:d.YO(h),models:d.YO(j),mcpServers:d.YO(m),flows:d.YO(n),plannedExecutions:d.YO(o)}).superRefine((a,b)=>{g(a)&&b.addIssue({code:"custom",message:`package contains an '${e.Mp}' value; secret material must never be serialized`});let c=new Set(a.secrets.map(a=>a.name)),d=new Set((0,f.D)(a));for(let b of a.models)"secret"===b.apiKeyRef.kind&&d.add(b.apiKeyRef.secret);for(let b of a.mcpServers)for(let a of[...b.envDeclarations,...b.headerDeclarations??[]])a.secretRef&&d.add(a.secretRef);for(let a of d)c.has(a)||b.addIssue({code:"custom",message:`secret "${a}" is referenced but not declared in secrets[]`});let h=new Set(a.flows.map(a=>a.flow.id));a.plannedExecutions.forEach((a,c)=>{h.has(a.flowId)||b.addIssue({code:"custom",path:["plannedExecutions",c,"flowId"],message:`plannedExecution "${a.name}" references unknown flow id "${a.flowId}"`})}),a.flows.forEach((a,c)=>{for(let d of a.references?.flowIds??[])h.has(d)||b.addIssue({code:"custom",path:["flows",c,"references","flowIds"],message:`flow "${a.flow.name}" references unknown subflow id "${d}"`})})})},73456:(a,b,c)=>{"use strict";c.d(b,{G:()=>m,V:()=>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,b={}){j.debug("Entering resolveGlobalVars method");let c=!1!==b.resolveSecrets,d=await (0,f.YM)(g.Z.GLOBAL_ENV_VARS,{}),e=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}(d);j.debug(`Loaded ${Object.keys(d).length} global environment variables (${e?"new":"old"} format)`);let i={},l=new Set;if(e)for(let[a,b]of Object.entries(d))i[a]=b.value,b.metadata.isSecret&&l.add(a);else i={...d};let m=async a=>{let b=a.match(/\$\{global:([^}]+)\}/g);if(!b)return a;let d=a;for(let a of b){let b=a.substring(9,a.length-1);if(void 0!==i[b]){let e=i[b];if(!c&&(l.has(b)||e.startsWith("encrypted:")||e.startsWith("encrypted_failed:"))){j.debug(`Keeping secret global variable unresolved: ${b}`);continue}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}`),d=d.replace(a,e)}else j.warn(`Global variable not found: ${b}`)}return d},n=async a=>{if("string"==typeof a)return await m(a);if(Array.isArray(a))return await Promise.all(a.map(a=>n(a)));if(null!==a&&"object"==typeof a){let b={};for(let[c,d]of Object.entries(a))b[c]=await n(d);return b}return a},o=await n(a);return"object"==typeof a&&null!==a&&j.debug("Resolved global variables result:",JSON.stringify(o,null,2)),j.debug("Completed global variable resolution"),o}async function l(a){return k(a,{resolveSecrets:!1})}async function m(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`),m(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,m]),(0,d.A)(k,"605caa1e030009a4bc7e820854ff481d3e0295325d",null),(0,d.A)(l,"4003ce37366709f5add0c98a6e32e47a1006fd7c7d",null),(0,d.A)(m,"6061ed6d99a98b5d9f5d2d15065caab0a27d6a8987",null)},78335:()=>{},91959:(a,b,c)=>{"use strict";c.r(b),c.d(b,{"4003ce37366709f5add0c98a6e32e47a1006fd7c7d":()=>d.V,"605caa1e030009a4bc7e820854ff481d3e0295325d":()=>d.resolveGlobalVars,"6061ed6d99a98b5d9f5d2d15065caab0a27d6a8987":()=>d.G});var d=c(73456)},93868:(a,b,c)=>{"use strict";c.d(b,{EL:()=>d,HQ:()=>f,IE:()=>i,Mp:()=>g,j6:()=>e,mQ:()=>h,po:()=>j});let d=1,e=2097152,f=/\{\{secret\.([A-Za-z0-9_.-]+)\}\}/g,g="encrypted:",h=/^\$\{global:([A-Za-z0-9_.-]+)\}$/,i=/^[A-Za-z0-9_.-]+$/,j=/^\d+\.\d+\.\d+(?:-[0-9A-Za-z-.]+)?(?:\+[0-9A-Za-z-.]+)?$/},96487:()=>{}};
1
+ exports.id=7628,exports.ids=[7628],exports.modules={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}},22084:(a,b,c)=>{"use strict";c.d(b,{D:()=>e});var d=c(93868);function e(a){let b=new Set,c=a=>{if("string"==typeof a){for(let c of function(a){let b;if("string"!=typeof a)return[];let c=[],e=RegExp(d.HQ.source,"g");for(;null!==(b=e.exec(a));)c.includes(b[1])||c.push(b[1]);return c}(a))b.add(c);return}if(Array.isArray(a)){for(let b of a)c(b);return}if(a&&"object"==typeof a)for(let b of Object.values(a))c(b)};return c(a),Array.from(b)}},25113:(a,b,c)=>{"use strict";c.d(b,{$j:()=>k,Xw:()=>g,Zp:()=>j});var d=c(93868),e=c(22084),f=c(63564);function g(a){let b=new Set,c=new Set,d=new Set;for(let e of a.nodes??[]){let a=e.data?.properties??{},f=e.data?.type??e.type,g=a.flowId??a.subflowId??a.subFlowId;"subflow"===f&&"string"==typeof g&&g&&b.add(g);let h=a.boundModel??a.modelId??a.model;if("string"==typeof h&&h&&c.add(h),"mcp"===f){let b=a.boundServer??a.mcpServer??a.serverName??a.server;"string"==typeof b&&b&&d.add(b)}}let e={};return b.size&&(e.flowIds=Array.from(b)),c.size&&(e.modelIds=Array.from(c)),d.size&&(e.mcpServerNames=Array.from(d)),e}function h({model:a,apiKeyRef:b}){let{ApiKey:c,...d}=a;return{...d,apiKeyRef:b??{kind:"none"}}}function i(a){let b=JSON.parse(JSON.stringify(a));return b.trigger&&"webhook"===b.trigger.type&&delete b.trigger.token,b}function j(a){let b={schemaVersion:1,id:a.id,name:a.name,description:a.description,version:a.version,author:a.author,publisher:a.publisher,tags:a.tags,requiredGlobals:a.requiredGlobals,globals:a.globals,secrets:a.secrets??[],models:(a.models??[]).map(h),mcpServers:a.mcpServers??[],flows:(a.flows??[]).map(a=>{let b=g(a);return Object.keys(b).length?{flow:a,references:b}:{flow:a}}),plannedExecutions:(a.plannedExecutions??[]).map(i)};if((0,f.AG)(b))throw Error("Refusing to serialize package: an 'encrypted:' value was found (secret material must never be packaged).");let c=f._M.parse(b),e=JSON.stringify(c),j=new TextEncoder().encode(e).length;if(j>d.j6)throw Error(`Package exceeds size cap: ${j} bytes > ${d.j6} bytes.`);return{json:e,package:c}}function k(a){let b=f._M.safeParse(a);if(!b.success)return{success:!1,errors:b.error.issues.map(a=>{let b=a.path.join(".");return b?`${b}: ${a.message}`:a.message})};let c=b.data;return{success:!0,data:c,warnings:function(a){let b=new Set((0,e.D)(a));for(let c of a.models)"secret"===c.apiKeyRef.kind&&b.add(c.apiKeyRef.secret);for(let c of a.mcpServers)for(let a of[...c.envDeclarations,...c.headerDeclarations??[]])a.secretRef&&b.add(a.secretRef);return a.secrets.filter(a=>!b.has(a.name)).map(a=>`secret "${a.name}" is declared but never referenced`)}(c)}}},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})}},63564:(a,b,c)=>{"use strict";c.d(b,{AG:()=>g,_M:()=>q});var d=c(10522),e=c(93868),f=c(22084);function g(a){return"string"==typeof a?a.startsWith(e.Mp):Array.isArray(a)?a.some(g):!!a&&"object"==typeof a&&Object.values(a).some(g)}let h=d.Ik({name:d.Yj().min(1).regex(e.IE,"invalid secret name"),description:d.Yj().optional(),required:d.zM(),default:d.Yj().optional()}).strict(),i=d.Ik({name:d.Yj().min(1).regex(e.IE,"invalid global variable name"),description:d.Yj().optional(),required:d.zM(),isSecret:d.zM().optional()}).strict(),j=d.gM("kind",[d.Ik({kind:d.eu("secret"),secret:d.Yj().min(1)}).strict(),d.Ik({kind:d.eu("global"),var:d.Yj().min(1)}).strict(),d.Ik({kind:d.eu("none")}).strict()]),k=d.Ik({id:d.Yj().min(1),name:d.Yj().min(1),displayName:d.Yj().optional(),description:d.Yj().optional(),baseUrl:d.Yj().optional(),provider:d.Yj().optional(),adapter:d.Yj().optional(),promptTemplate:d.Yj().optional(),reasoningSchema:d.Yj().optional(),temperature:d.Yj().optional(),reasoningEffort:d.k5(["minimal","low","medium","high","xhigh","max","ultra"]).optional(),thinkingLevel:d.k5(["minimal","low","medium","high"]).optional(),thinkingBudget:d.ai().int().min(-1).optional(),serviceTier:d.k5(["default","priority"]).optional(),functionCallingSchema:d.Yj().optional(),contextWindow:d.ai().optional(),maxTurns:d.ai().optional(),maxTokens:d.ai().optional(),folder:d.Yj().optional(),favorite:d.zM().optional(),apiKeyRef:j}).strict(),l=d.Ik({sourceType:d.k5(["github","registry","marketplace","remote"]),ref:d.Yj().optional(),url:d.Yj().optional(),name:d.Yj().optional()}).strict().superRefine((a,b)=>{"remote"!==a.sourceType||a.url||b.addIssue({code:"custom",message:"installOrigin 'remote' requires a url"}),"github"!==a.sourceType&&"registry"!==a.sourceType||a.ref||b.addIssue({code:"custom",message:`installOrigin '${a.sourceType}' requires a ref`})}),m=d.Ik({name:d.Yj().min(1),isSecret:d.zM(),secretRef:d.Yj().optional(),globalVar:d.Yj().optional()}).strict(),n=d.Ik({name:d.Yj().min(1),transport:d.k5(["stdio","sse","streamable","websocket"]),disabled:d.zM().optional(),autoApprove:d.YO(d.Yj()).optional(),folder:d.Yj().optional(),installOrigin:l,envDeclarations:d.YO(m),headerDeclarations:d.YO(m).optional()}).strict(),o=d.Ik({flow:d.Ik({id:d.Yj().min(1),name:d.Yj().min(1),nodes:d.YO(d.bz()),edges:d.YO(d.bz())}).catchall(d.L5()),references:d.Ik({flowIds:d.YO(d.Yj()).optional(),modelIds:d.YO(d.Yj()).optional(),mcpServerNames:d.YO(d.Yj()).optional()}).optional()}),p=d.Ik({id:d.Yj().min(1),name:d.Yj().min(1),enabled:d.zM(),flowId:d.Yj().min(1),prompt:d.Yj(),trigger:d.bz()}).catchall(d.L5()),q=d.Ik({schemaVersion:d.eu(e.EL),id:d.Yj().min(1),name:d.Yj().min(1),description:d.Yj().optional(),version:d.Yj().regex(e.po,"version must be valid semver"),author:d.Yj().optional(),publisher:d.Yj().optional(),tags:d.YO(d.Yj()).optional(),requiredGlobals:d.YO(d.Yj()).optional(),globals:d.YO(i).optional(),secrets:d.YO(h),models:d.YO(k),mcpServers:d.YO(n),flows:d.YO(o),plannedExecutions:d.YO(p)}).superRefine((a,b)=>{g(a)&&b.addIssue({code:"custom",message:`package contains an '${e.Mp}' value; secret material must never be serialized`});let c=new Set(a.secrets.map(a=>a.name)),d=new Set((0,f.D)(a));for(let b of a.models)"secret"===b.apiKeyRef.kind&&d.add(b.apiKeyRef.secret);for(let b of a.mcpServers)for(let a of[...b.envDeclarations,...b.headerDeclarations??[]])a.secretRef&&d.add(a.secretRef);for(let a of d)c.has(a)||b.addIssue({code:"custom",message:`secret "${a}" is referenced but not declared in secrets[]`});let h=new Set(a.flows.map(a=>a.flow.id));a.plannedExecutions.forEach((a,c)=>{h.has(a.flowId)||b.addIssue({code:"custom",path:["plannedExecutions",c,"flowId"],message:`plannedExecution "${a.name}" references unknown flow id "${a.flowId}"`})}),a.flows.forEach((a,c)=>{for(let d of a.references?.flowIds??[])h.has(d)||b.addIssue({code:"custom",path:["flows",c,"references","flowIds"],message:`flow "${a.flow.name}" references unknown subflow id "${d}"`})})})},73456:(a,b,c)=>{"use strict";c.d(b,{G:()=>m,V:()=>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,b={}){j.debug("Entering resolveGlobalVars method");let c=!1!==b.resolveSecrets,d=await (0,f.YM)(g.Z.GLOBAL_ENV_VARS,{}),e=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}(d);j.debug(`Loaded ${Object.keys(d).length} global environment variables (${e?"new":"old"} format)`);let i={},l=new Set;if(e)for(let[a,b]of Object.entries(d))i[a]=b.value,b.metadata.isSecret&&l.add(a);else i={...d};let m=async a=>{let b=a.match(/\$\{global:([^}]+)\}/g);if(!b)return a;let d=a;for(let a of b){let b=a.substring(9,a.length-1);if(void 0!==i[b]){let e=i[b];if(!c&&(l.has(b)||e.startsWith("encrypted:")||e.startsWith("encrypted_failed:"))){j.debug(`Keeping secret global variable unresolved: ${b}`);continue}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}`),d=d.replace(a,e)}else j.warn(`Global variable not found: ${b}`)}return d},n=async a=>{if("string"==typeof a)return await m(a);if(Array.isArray(a))return await Promise.all(a.map(a=>n(a)));if(null!==a&&"object"==typeof a){let b={};for(let[c,d]of Object.entries(a))b[c]=await n(d);return b}return a},o=await n(a);return"object"==typeof a&&null!==a&&j.debug("Resolved global variables result:",JSON.stringify(o,null,2)),j.debug("Completed global variable resolution"),o}async function l(a){return k(a,{resolveSecrets:!1})}async function m(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`),m(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,m]),(0,d.A)(k,"605caa1e030009a4bc7e820854ff481d3e0295325d",null),(0,d.A)(l,"4003ce37366709f5add0c98a6e32e47a1006fd7c7d",null),(0,d.A)(m,"6061ed6d99a98b5d9f5d2d15065caab0a27d6a8987",null)},78335:()=>{},91959:(a,b,c)=>{"use strict";c.r(b),c.d(b,{"4003ce37366709f5add0c98a6e32e47a1006fd7c7d":()=>d.V,"605caa1e030009a4bc7e820854ff481d3e0295325d":()=>d.resolveGlobalVars,"6061ed6d99a98b5d9f5d2d15065caab0a27d6a8987":()=>d.G});var d=c(73456)},93868:(a,b,c)=>{"use strict";c.d(b,{EL:()=>d,HQ:()=>f,IE:()=>i,Mp:()=>g,j6:()=>e,mQ:()=>h,po:()=>j});let d=1,e=2097152,f=/\{\{secret\.([A-Za-z0-9_.-]+)\}\}/g,g="encrypted:",h=/^\$\{global:([A-Za-z0-9_.-]+)\}$/,i=/^[A-Za-z0-9_.-]+$/,j=/^\d+\.\d+\.\d+(?:-[0-9A-Za-z-.]+)?(?:\+[0-9A-Za-z-.]+)?$/},96487:()=>{}};
@@ -0,0 +1,11 @@
1
+ "use strict";exports.id=7630,exports.ids=[7630],exports.modules={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("trigger"===a&&"start"===c)return b&&"trigger-bottom"!==b?"Trigger nodes must connect via their bottom handle":d&&"start-top"!==d?"Trigger nodes must connect to the top handle of the Start node":null;if("trigger"===c)return"Trigger nodes cannot have incoming connections";if("trigger"===a&&"start"!==c)return"Trigger nodes can only connect to the Start node";if("start"===c)return"Start nodes cannot have incoming connections";if("finish"===a)return"Finish nodes cannot have outgoing connections";if("mcp"===a||"mcp"===c||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."}}},9312:(a,b,c)=>{c.d(b,{RB:()=>l,bD:()=>i,jY:()=>k,xv:()=>j});var d=c(50846),e=c(20433),f=c(60453),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}}},97630:(a,b,c)=>{c.d(b,{Jt:()=>m,Mr:()=>n,oW:()=>o});var d=c(81226),e=c(5248),f=c(84671),g=c(41527);let h=["prompt","isolatedPrompt","payloadTemplate"];function i(a){return RegExp("\\$\\{var:\\s*"+a.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")+"\\s*\\}","g")}function j(a,b){for(let c of h){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 k(a){return a.replace(/[ \t]{2,}/g," ").replace(/[ \t]+([.,;:!?])/g,"$1").replace(/[ \t]+\n/g,"\n")}var l=c(9312);let m=2,n=`GENERATED-FLOW PROCESS INPUT POLICY: every process node receives the full conversation. Use inputMode "full-history" or leave inputMode unset; NEVER emit inputMode "latest-message" on a process node. Generated process nodes that omit inputMode, or incorrectly request "latest-message", are deterministically compiled as "full-history". The advanced "isolated" mode remains available only when the task genuinely requires ignoring conversation history.
2
+
3
+ GENERATED-FLOW OUTPUT DEFAULT (context saving): process nodes you leave without an explicit outputMode are compiled with outputMode "latest-message", so later steps see the node's final response but not its tool calls/results. When later steps need that intermediate work, set outputMode "full-conversation" explicitly.
4
+
5
+ GENERATED-FLOW DATA-FLOW POLICY (IMPORTANT — carry data through the conversation, NOT scratchpad variables):
6
+ 1. PREFER CONVERSATION HISTORY. Every process step receives full history. For a later step to use an earlier step's tool exchange, keep that exchange in the thread by giving the earlier (producer) step outputMode "full-conversation" (or leave "latest-message" when only its final text matters).
7
+ 2. DO NOT emit \${var:NAME} in generated prompts. The scratchpad variable feature is valid for hand authoring, but unsafe for ordinary auto-generated handoff. Use history instead.
8
+ 3. DO NOT emit passive "captureResource" on a process node. Process artifacts require an explicit Resource node and write_resource. Ordinary generated flows should use history.
9
+ 4. Any unsafe \${var:NAME} reference is deterministically rewritten to history or removed before compilation.
10
+
11
+ FORGIVING GENERATION: missing Start/Finish nodes and obvious disconnected linear steps are repaired deterministically in author order before compilation. The complete bundle is compiled with generated-flow defaults and validated, including every inline nested flow.`;function o(a,b,c){let n=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},l=new Set;for(let a of c)"string"==typeof a.parallelFlowsVariable&&a.parallelFlowsVariable.trim()&&l.add(a.parallelFlowsVariable.trim());let m=new Map;for(let a of c){let b="string"==typeof a.captureVariable?a.captureVariable.trim():"";b&&(m.has(b)||m.set(b,[]),m.get(b).push(a))}let n=new Map;for(let a of c)for(let b of function(a){let b=new Set;for(let c of h){let d=a[c];if("string"==typeof d)for(let a of(0,g.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,g.T9)(c))b.add(a)}return[...b]}(a))n.has(b)||n.set(b,[]),n.get(b).push(a);for(let[a,d]of n){if(l.has(a))continue;let e=m.get(a)??[],g=d.filter(a=>{let b=f(a.key);return e.some(c=>c.key!==a.key&&b.has(c.key))});if(0===g.length){let d=i(a);for(let a of c)j(a,a=>k(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}let h=i(a);for(let a of c)j(a,a=>k(a.replace(h,"")));for(let a of g)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}}(JSON.parse(JSON.stringify(a))),o=(0,e.p)(n.spec),p=c?.maxDepth??m,q=c?.maxFlows??d.lk,r=(0,d.dM)(o.spec,b.compile,{maxDepth:p,maxFlows:q});if(!r.flow)return{success:!1,spec:o.spec,issues:r.issues,guardChanges:n.changes,repairChanges:o.changes};for(let a of r.flows)(0,d.Zn)(a);let s=r.flows.map(a=>({flow:a,validation:(0,f.nC)(a,{models:b.compile.models,servers:b.validatorServers,serverTools:b.compile.serverTools})})),t=[...n.changes.map(a=>({severity:"warning",code:a.code,message:a.message})),...o.changes.map(a=>({severity:"warning",code:a.code,message:a.message})),...r.issues],u=(0,l.RB)(t,{issues:s.flatMap(a=>a.validation.issues),errorCount:0,warningCount:0,isRunnable:!0});return{success:!0,spec:o.spec,flow:r.flow,flows:s,validation:u,guardChanges:n.changes,repairChanges:o.changes}}}};
@@ -0,0 +1,42 @@
1
+ "use strict";exports.id=8284,exports.ids=[1925,3629,4306,6793,8284,9174],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()},23310:(a,b,c)=>{c.d(b,{GN:()=>x,UC:()=>z,Xg:()=>y});var d=c(50846),e=c(20433),f=c(58858),g=c(46496),h=c(81226),i=c(84671),j=c(88185),k=c(14265),l=c(1905),m=c(33233),n=c(9312),o=c(97630);let p=(0,d.h)("backend/services/flow/generateFlow"),q=o.Jt;function r(a,b,c,d){let e=c?`MULTI-LEVEL FLOWS — you MAY design subflows that are themselves brand-new flows:
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
+ - "subflowSpec": an inline nested FlowSpec (you author the whole child now), or
4
+ - "generateSubflow": a short natural-language description of the child — FLUJO will generate that child flow for you.
5
+ - Nest only when a self-contained sub-task genuinely deserves its own flow. Nesting is bounded: at most ${d} level(s) deep and ${h.lk} flows total. Keep it minimal.`:`SUBFLOWS: a subflow node's "flow" must reference an EXISTING flow (by name or id). Do NOT use "subflowSpec" or "generateSubflow" — multi-level generation is off for this run.`,f=b?`CAPABILITY ACQUISITION — you are allowed to EXPAND this FLUJO instance:
6
+ - If the task needs a capability none of the configured servers provides (voice, vision, browsing, email, code execution, …), use search_mcp_marketplace to find a server for it, then install_mcp_server to install the best match. Prefer servers that need no API keys (empty requiredEnv); if the best option needs keys, install a keyless alternative or note the requirement in the flow description.
7
+ - After a successful install, reference the returned server name in a process node's "servers" list and enable the tools it reported.
8
+ - Be ambitious: an actual capability (real audio, real browsing, real files) beats a text approximation. Search with several short terms ("voice", "tts", "speech") — the registry matches server NAMES only.`:`CAPABILITY DISCOVERY — you may search but NOT install:
9
+ - If the task needs a capability none of the configured servers provides, you may use search_mcp_marketplace to see what exists. Do NOT reference unconfigured servers in the spec; instead mention the recommended server (its registry name) in the flow "description" so the user can install it.`;return`You design workflows for FLUJO, an MCP-first workflow builder. The user describes what they want; you emit a flow specification as JSON.
10
+
11
+ OUTPUT FORMAT — when you are done (after any tool use), respond with ONLY one JSON object, no prose, no code fences.
12
+
13
+ ${j.R}
14
+
15
+ ${o.Mr}
16
+
17
+ ${f}
18
+
19
+ ${e}
20
+
21
+ ${a}`}function s(a){return a.map(a=>`- [${a.severity}] ${a.message}`).join("\n")}function t(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 u(a,b,c,d){if("search_mcp_marketplace"===a){let a="string"==typeof b.query?b.query:"";try{return await (0,k.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,k.aM)(a,void 0,{resolveOnly:!0}),f=await (0,l.Ej)(),g=(0,m.e5)({caller:"generator",settings:f,registryName:a,allowInstall:c});e.plan&&await (0,l.NB)((0,m.UM)(e.plan,"generator",g,!1));let h=await (0,k.aM)(a);return h.plan&&await (0,l.NB)((0,m.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 v(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=>u(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 u(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 w(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 x(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=!1!==a.allowSubflows,i=g?"number"!=typeof(b=a.maxDepth)||Number.isNaN(b)?q:Math.max(0,Math.min(h.A_,Math.floor(b))):0,j=await e.modelService.getModel(a.modelId);if(!j)return{success:!1,error:`Generator model not found: ${a.modelId}`,statusCode:404};let k=await e.modelService.resolveAndDecryptApiKey(j.ApiKey)||("codex-cli"!==j.adapter||j.ApiKey?.trim()?null:"");if(null===k)return{success:!1,error:"Could not resolve the generator model API key",statusCode:500};let l=await (0,n.jY)(),m=(0,f.getCompletionAdapter)(j),u=t(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:r(l.catalog,d,g&&b<i,i)},{role:"user",content:a}];try{c=await v(m,j,k,e,u,d,x)}catch(a){return p.warn("A child subflow generation call failed; leaving the subflow unresolved",a),null}let f=w(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>i||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:r(l.catalog,d,g,i)},{role:"user",content:c}],D=null,E=0;for(let a=0;a<=y;a++){let b;E++,z=1;try{b=await v(m,j,k,C,u,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=w(b);if(!c){if(p.warn(`Attempt ${E}: model output contained no parseable JSON object`),x.contextDirty){try{l=await (0,n.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{l=await (0,n.jY)()}catch(a){p.warn("Re-gathering context after install failed; validating with the stale catalog",a)}x.contextDirty=!1}let e=(0,o.oW)(c,l,{maxDepth:i,maxFlows:h.lk});if(!e.success){C.push({role:"assistant",content:b},{role:"user",content:`The specification could not be compiled:
22
+ ${s(e.issues)}
23
+ Fix these problems and re-emit the COMPLETE corrected JSON (only the JSON).`});continue}e.guardChanges.length>0&&p.info(`Attempt ${E}: scratchpad-var guard rewrote ${e.guardChanges.length} reference(s)`),e.repairChanges.length>0&&p.info(`Attempt ${E}: auto-repair adjusted the spec (${e.repairChanges.length} change(s))`);let f=e.validation;if(D={flows:e.flows,rootFlow:e.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
+ ${s(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 y(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=(Array.isArray(a.relatedFlows)?a.relatedFlows:[]).filter(a=>!!a&&"object"==typeof a&&"string"==typeof a.id&&a.id!==c.id&&Array.isArray(a.nodes)&&Array.isArray(a.edges)).filter((a,b,c)=>c.findIndex(b=>b.id===a.id)===b),g=await e.modelService.getModel(a.modelId);if(!g)return{success:!1,error:`Generator model not found: ${a.modelId}`,statusCode:404};let j=await e.modelService.resolveAndDecryptApiKey(g.ApiKey)||("codex-cli"!==g.adapter||g.ApiKey?.trim()?null:"");if(null===j)return{success:!1,error:"Could not resolve the generator model API key",statusCode:500};let k=!0===a.allowInstall,l=await (0,n.jY)(),m=(0,f.getCompletionAdapter)(g),o=t(k),q={installedServers:[],contextDirty:!1},u=Math.min("number"==typeof a.maxRepairs&&a.maxRepairs>=0?a.maxRepairs:1,2),x=(0,h.FH)(c),y={};for(let a of c.nodes)a?.id&&a.position&&"number"==typeof a.position.x&&"number"==typeof a.position.y&&(y[a.id]={x:a.position.x,y:a.position.y});let z=a=>{let b=new Map((a.compile.flows??[]).filter(a=>a.id!==c.id).map(a=>[a.id,a]));for(let a of d)b.set(a.id,{id:a.id,name:a.name});return{models:a.compile.models,servers:a.compile.servers,serverTools:a.compile.serverTools,flows:[...b.values()]}},A=`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(x)}
27
+
28
+ CHANGE REQUEST:
29
+ ${b}
30
+
31
+ Re-emit the COMPLETE flow specification as a single JSON object (only the JSON), including the nodes you did not change.`,B=[{role:"system",content:r(l.catalog,k,!1,0)},{role:"user",content:A}],C=null,D=0;for(let a=0;a<=u;a++){let b;D++;try{b=await v(m,g,j,B,o,k,q)}catch(a){if(p.error("Improver model call failed",a),C)break;return{success:!1,error:`The generator model call failed: ${a instanceof Error?a.message:String(a)}`,statusCode:502}}if(q.contextDirty){try{l=await (0,n.jY)()}catch(a){p.warn("Re-gathering context after install failed; using the stale catalog",a)}q.contextDirty=!1}let e=w(b);if(!e){p.warn(`Improve attempt ${D}: model output contained no parseable JSON object`),B.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,z(l),{maxDepth:0,maxFlows:1,positions:y});if(!f.flow){B.push({role:"assistant",content:b},{role:"user",content:`The specification could not be compiled:
32
+ ${s(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 r=(0,i.nC)(f.flow,{models:l.compile.models,servers:l.validatorServers,serverTools:l.compile.serverTools}),t=(0,n.RB)(f.issues,r);if(C={flows:[...d.map(a=>({flow:a,validation:(0,i.nC)(a,{models:l.compile.models,servers:l.validatorServers,serverTools:l.compile.serverTools})})),{flow:f.flow,validation:r}],rootFlow:f.flow,validation:t},0===t.errorCount)break;p.info(`Improve attempt ${D}: flow has ${t.errorCount} error(s)`+(a<u?"; asking the model to repair":"; repair budget exhausted")),a<u&&B.push({role:"assistant",content:b},{role:"user",content:`The flow you specified has these problems:
34
+ ${s(t.issues)}
35
+ Fix the errors (warnings are advisory) and re-emit the COMPLETE corrected JSON (only the JSON).`})}return C?(p.info(`Improved draft "${C.rootFlow.name}" in ${D} attempt(s): ${C.validation.errorCount} error(s), ${C.validation.warningCount} warning(s), ${q.installedServers.length} server(s) installed`),{success:!0,flow:C.rootFlow,validation:C.validation,flows:C.flows,rootFlowId:C.rootFlow.id,attempts:D,installedServers:q.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 z(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
+
37
+ Known problems to fix:
38
+ ${s(c.issues)}`:"";return y({flow:b,description:`Repair this flow's wiring so it is runnable, WITHOUT changing any node's prompt, model, or servers:
39
+ - add a Start node if one is missing, connected to the first step;
40
+ - add a Finish node if one is missing, connected from the last step;
41
+ - connect any disconnected process/subflow nodes.
42
+ Read node placement as intent: nodes stacked top-to-bottom are sequential steps, and nodes on the same horizontal line are parallel branches under a shared parent above them.${d}`,modelId:a.modelId,...void 0!==a.allowInstall?{allowInstall:a.allowInstall}:{},...void 0!==a.maxRepairs?{maxRepairs:a.maxRepairs}:{}})}},56793:(a,b,c)=>{c.d(b,{eh:()=>g,ru:()=>e});let d=(0,c(50846).h)("backend/services/scheduler/flowRunEventBus");function e(a){return"signal"===a.kind}class f{publish(a){if(0===this.listeners.size)return;let b=e(a)?`signal topic=${a.topic} emitter=${a.emitterFlowId}`:`flow=${a.flowId} status=${a.status}`;for(let c of(d.debug(`Publishing flow event: ${b} firedBy=${a.firedBy} depth=${a.chainDepth} listeners=${this.listeners.size}`),[...this.listeners]))try{c(a)}catch(a){d.warn("A flow-run event listener threw:",a)}}subscribe(a){return this.listeners.add(a),()=>{this.listeners.delete(a)}}get listenerCount(){return this.listeners.size}constructor(){this.listeners=new Set}}function g(){return global.__flujo_flow_run_event_bus||(global.__flujo_flow_run_event_bus=new f),global.__flujo_flow_run_event_bus}}};
@@ -1,2 +1,2 @@
1
- "use strict";exports.id=8645,exports.ids=[1925,4306,8645],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()},24991:(a,b,c)=>{c.d(b,{SA:()=>M,MH:()=>O,M2:()=>J,HV:()=>L,$Z:()=>P,Xd:()=>F});var d=c(50846),e=c(93868),f=c(25113);function g(a,b,c){if("string"!=typeof c)return;let d=c.trim();0!==d.length&&a.push({location:b,text:d})}function h(a){let b=[];for(let c of a.flows??[])b.push(...function(a){let b=[];for(let d of(g(b,`flow:${a.id}.description`,a.description),a.nodes??[])){var c=a.id;let e=d.id,f=`flow:${c}.node:${e}`;g(b,`${f}.description`,d.data?.description),d.data?.properties&&"object"==typeof d.data.properties&&function a(b,c,d,e,f=0){if(!(f>12)&&null!=d){if("string"==typeof d)return void g(b,c,d);if("object"==typeof d&&!e.has(d)){if(e.add(d),Array.isArray(d))return void d.forEach((d,g)=>a(b,`${c}[${g}]`,d,e,f+1));for(let[g,h]of Object.entries(d))a(b,`${c}.${g}`,h,e,f+1)}}}(b,`${f}.properties`,d.data.properties,new WeakSet)}return b}(c));for(let c of a.models??[])b.push(...function(a){let b=[],c=`model:${a.id}`;return g(b,`${c}.baseUrl`,a.baseUrl),g(b,`${c}.promptTemplate`,a.promptTemplate),g(b,`${c}.displayName`,a.displayName),g(b,`${c}.description`,a.description),g(b,`${c}.name`,a.name),b}(c));for(let c of a.plannedExecutions??[])b.push(...function(a){let b=[],c=`plannedExecution:${a.id}`;return g(b,`${c}.name`,a.name),g(b,`${c}.prompt`,a.prompt),b}(c));return b}var i=c(1925);let j=["path","repo","token","email","url-cred","name","other"];function k(a,b){return`sp_${function(a){let b=5381;for(let c=0;c<a.length;c++)b=(b<<5)+b^a.charCodeAt(c);return(b>>>0).toString(16).padStart(8,"0")}(`${a}\0${b}`)}`}function l(a,b){let c=`${a}_${b}`.toUpperCase().replace(/[^A-Z0-9_.-]+/g,"_").replace(/^[_.-]+|[_.-]+$/g,"")||`${a}_SECRET`;return e.IE.test(c)?c:`${a}_SECRET`}let m=["/usr/","/bin/","/sbin/","/lib/","/lib64/","/etc/","/var/","/opt/","/proc/","/sys/","/dev/","/tmp/","/run/","/boot/","/mnt/","/srv/","/node_modules/"],n=["c:\\windows","c:\\program files","c:\\programdata"],o=/[.,;:!?)\]}'"/\\]$/;function p(a){if(!a)return 0;let b=new Map;for(let c of a)b.set(c,(b.get(c)??0)+1);let c=0;for(let d of b.values()){let b=d/a.length;c-=b*Math.log2(b)}return c}let q=[{re:/\bhttps?:\/\/[^/\s:@]+:[^/\s:@]+@[^\s"'<>]+/gi,kind:"url-cred",priority:1,rationale:"URL with embedded credentials",confidence:"high"},{re:/\bBearer\s+([A-Za-z0-9._~+/=-]{16,})/gi,kind:"token",priority:2,rationale:"Bearer token",confidence:"high",group:1},{re:/(?:https?:\/\/)?(?:www\.)?(?:github\.com|gitlab\.com|bitbucket\.org)[/:]([A-Za-z0-9](?:[A-Za-z0-9._-]{0,38})\/[A-Za-z0-9](?:[A-Za-z0-9._-]{0,99}?))(?=(?:\.git)?(?![A-Za-z0-9._/-]))/gi,kind:"repo",priority:3,rationale:"owner/repo slug in a VCS URL",confidence:"high",group:1},{re:/\bgit@[A-Za-z0-9.-]+:([A-Za-z0-9](?:[A-Za-z0-9._-]{0,38})\/[A-Za-z0-9](?:[A-Za-z0-9._-]{0,99}?))(?=(?:\.git)?(?![A-Za-z0-9._/-]))/gi,kind:"repo",priority:3,rationale:"owner/repo slug in a git SSH URL",confidence:"high",group:1},{re:/\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}\b/g,kind:"email",priority:4,rationale:"Email address",confidence:"medium"},{re:/\b[A-Za-z]:\\[^\s"'<>|?*]+/g,kind:"path",priority:5,rationale:"Windows absolute file path",confidence:"medium"},{re:/(?<![A-Za-z0-9._~:/])\/[A-Za-z0-9._-]+(?:\/[A-Za-z0-9._-]+)+/g,kind:"path",priority:6,rationale:"POSIX absolute file path",confidence:"medium"}],r={re:/(?<![A-Za-z0-9._/-])[A-Za-z0-9](?:[A-Za-z0-9._-]{0,38})\/[A-Za-z0-9](?:[A-Za-z0-9._-]{0,99})(?![A-Za-z0-9._/-])/g,kind:"repo",priority:8,rationale:"owner/repo-shaped slug (opt-in, low confidence)",confidence:"low"},s=new Set(["and/or","input/output","read/write","client/server","tcp/ip","files/folders","yes/no","true/false","on/off","src/utils","a/b"]),t=/(?<![A-Za-z0-9_-])([A-Za-z][A-Za-z0-9_-]{1,64})\s*[:=]\s*("[^"]{4,}"|'[^']{4,}'|[^\s"']{6,})/g;function u(a){return new RegExp(e.HQ.source).test(a)}let v={path:"PATH",repo:"REPO",token:"TOKEN",email:"EMAIL","url-cred":"URL",name:"NAME",other:"SECRET"};function w(a,b){let c=b;if("path"===a){let a=b.split(/[\\/]/).filter(Boolean);c=a[a.length-1]||b}else"email"===a?c=b.split("@")[0]||b:"repo"===a?c=b.replace(/\//g,"_"):"url-cred"===a?c=b.replace(/^https?:\/\//i,"").split(/[/:@]/)[0]||b:"token"===a&&(c=b.slice(0,8));return l(v[a],c)}function x(a,b={}){let c=b.entropyThreshold??4,d=!0===b.enableEntropy,e=!0===b.enableRepoSlug?[...q,r]:q,f=[],g=new Set;for(let b of a)for(let a of function(a){let b=[...a].sort((a,b)=>a.priority-b.priority||b.end-b.start-(a.end-a.start)||a.start-b.start),c=[];for(let a of b)c.some(b=>a.start<b.end&&b.start<a.end)||c.push(a);return c.sort((a,b)=>a.start-b.start)}([...function(a,b){let c=[];for(let d of b){let b,e=new RegExp(d.re.source,d.re.flags);for(;null!==(b=e.exec(a));){let a=d.group??0,f=b[a];if(!f){e.lastIndex===b.index&&e.lastIndex++;continue}let g=b.index+(a>0?b[0].indexOf(f):0);if("path"===d.kind&&(f=function(a){let b=a;for(;b.length>1&&o.test(b);)b=b.slice(0,-1);return b}(f)),"path"===d.kind&&function(a){let b=a.toLowerCase();return!!(b.includes("node_modules/")||b.includes("node_modules\\"))||(/^[a-z]:\\/.test(b)?n.some(a=>b.startsWith(a)):m.some(a=>b.startsWith(a)))}(f)||"repo"===d.kind&&"low"===d.confidence&&s.has(f.toLowerCase())){e.lastIndex===b.index&&e.lastIndex++;continue}c.push({start:g,end:g+f.length,value:f,kind:d.kind,priority:d.priority,rationale:d.rationale,confidence:d.confidence}),e.lastIndex===b.index&&e.lastIndex++}}return c}(b.text,e),...function(a){let b,c=[],d=new RegExp(t.source,t.flags);for(;null!==(b=d.exec(a));){let a=b[1],d=b[2];if(!(0,i.xc)(a)||((d.startsWith('"')&&d.endsWith('"')||d.startsWith("'")&&d.endsWith("'"))&&(d=d.slice(1,-1)),!d||u(d)))continue;let e=b.index+b[0].indexOf(d,a.length);c.push({start:e,end:e+d.length,value:d,kind:"token",priority:2,rationale:`Value assigned to secret-like key "${a}"`,confidence:"high"})}return c}(b.text),...d?function(a,b){let c,d=[],e=/[A-Za-z0-9._~+/=-]{20,}/g;for(;null!==(c=e.exec(a));){let a=c[0];(function(a,b){if(a.length<24)return!1;let c=/[A-Za-z]/.test(a),d=/[0-9]/.test(a);return!!c&&!!d&&p(a)>=b})(a,b)&&d.push({start:c.index,end:c.index+a.length,value:a,kind:"token",priority:7,rationale:`High-entropy string (${p(a).toFixed(2)} bits/char)`,confidence:"low"})}return d}(b.text,c):[]].filter(a=>!u(a.value)))){let c=`${b.location}\0${a.value}`;g.has(c)||(g.add(c),f.push({id:k(b.location,a.value),location:b.location,excerpt:a.value,kind:a.kind,source:"heuristic",confidence:a.confidence,suggestedSecretName:w(a.kind,a.value),rationale:a.rationale}))}return f}async function y(a,b){let c,d=[];if(0===a.length)return{proposals:[],warnings:d};let e=b.maxTargets??200,f=b.maxCharsPerTarget??2e3,g=a.slice(0,e).map(a=>({location:a.location,text:a.text.length>f?a.text.slice(0,f):a.text})),h=new Map(a.map(a=>[a.location,a]));try{c=await b.completion({modelIdentifier:b.modelIdentifier,temperature:0,messages:[{role:"system",content:'You are a security assistant helping to package a workflow for sharing.\nYou are given a JSON array of content slices, each { "location", "text" }.\nIdentify substrings that are SECRETS or INSTANCE-SPECIFIC values that should\nNOT be shared verbatim: absolute file paths, owner/repo slugs, API tokens or\nkeys, credential-bearing URLs, email addresses, and similar.\n\nReturn ONLY a JSON array (no prose, no markdown fences). Each element:\n{ "location": string (echo the slice location exactly),\n "excerpt": string (the EXACT substring, copied verbatim from that slice text),\n "kind": one of "path"|"repo"|"token"|"email"|"url-cred"|"name"|"other",\n "suggestedSecretName": UPPER_SNAKE identifier,\n "suggestedDescription": short human description,\n "rationale": one short sentence }.\nDo NOT invent excerpts that are not present in the given text. If nothing\nqualifies, return [].'},{role:"user",content:JSON.stringify(g)}]})}catch(a){return d.push(`Model-driven pass failed: ${a instanceof Error?a.message:String(a)}`),{proposals:[],warnings:d}}if(!c?.success)return d.push(`Model-driven pass returned an error: ${c?.error?.message??"unknown error"}`),{proposals:[],warnings:d};let i=c.completion?.choices?.[0]?.message?.content??"",m=function(a){if("string"!=typeof a)return null;let b=a.trim(),c=/^```(?:json)?\s*([\s\S]*?)\s*```$/i.exec(b);c&&(b=c[1].trim());let d=a=>{try{let b=JSON.parse(a);return Array.isArray(b)?b:null}catch{return null}},e=d(b);if(e)return e;let f=b.indexOf("["),g=b.lastIndexOf("]");return f>=0&&g>f?d(b.slice(f,g+1)):null}("string"==typeof i?i:"");if(!m)return d.push("Model-driven pass returned no parseable JSON; ignoring its output."),{proposals:[],warnings:d};let n=[],o=new Set;for(let a of m){let b=function(a,b){var c;if(!a||"object"!=typeof a)return null;let d="string"==typeof a.location?a.location:"",e="string"==typeof a.excerpt?a.excerpt.trim():"";if(!d||!e)return null;let f=b.get(d);if(!f||!f.text.includes(e))return null;let g="string"==typeof(c=a.kind)&&j.includes(c)?c:"other",h="string"==typeof a.suggestedSecretName&&a.suggestedSecretName.trim()?l("SECRET",a.suggestedSecretName):w(g,e);return{id:k(d,e),location:d,excerpt:e,kind:g,source:"model",suggestedSecretName:h,suggestedDescription:"string"==typeof a.suggestedDescription?a.suggestedDescription.slice(0,200):void 0,rationale:"string"==typeof a.rationale?a.rationale.slice(0,200):void 0}}(a,h);if(!b)continue;let c=`${b.location} ${b.excerpt}`;o.has(c)||(o.add(c),n.push(b))}return{proposals:n,warnings:d}}async function z(a,b={}){let c=h(a),d=[],e=x(c,b),f=[];if(b.model){let a=await y(c,{modelIdentifier:b.model.modelIdentifier,completion:b.model.completion});f=a.proposals,d.push(...a.warnings)}return{proposals:function(a,b){let c=new Map,d=a=>`${a.location}\0${a.excerpt}`;for(let b of a)c.set(d(b),b);for(let a of b){let b=d(a);c.has(b)||c.set(b,a)}return Array.from(c.values())}(e,f),warnings:d}}function A(a,b){if("string"==typeof a)return b(a);if(Array.isArray(a))return a.map(a=>A(a,b));if(a&&"object"==typeof a){let c={};for(let[d,e]of Object.entries(a))c[d]=A(e,b);return c}return a}let B=(0,d.h)("backend/services/packages/buildPackage"),C=/\$\{global:([A-Za-z0-9_.-]+)\}/g;function D(a){return"object"==typeof a&&null!==a&&a.metadata?.isSecret===!0}function E(a){return a?Object.entries(a).map(([a,b])=>{let c=D(b)?null:e.mQ.exec(("string"==typeof b?b:b&&"object"==typeof b&&!b.metadata?.isSecret&&"string"==typeof b.value?b.value:void 0)??"");return{name:a,isSecret:D(b),...c?{globalVar:c[1]}:{}}}):[]}function F(a,b){let c=new Map(b.map(a=>[a.name,a])),d=[],e=[];for(let b of a){let a=c.get(b);if(!a){e.push(`MCP server "${b}" was not found.`);continue}let f=function(a){let b=a.source;if(!b||"local"===b.type)return null;switch(b.type){case"github":return{sourceType:"github",ref:b.ref?`${b.repositoryUrl}@${b.ref}`:b.repositoryUrl,name:a.name};case"registry":return{sourceType:"registry",ref:b.registryName,name:a.name};case"marketplace":return{sourceType:"marketplace",ref:b.id,name:a.name};case"remote":return{sourceType:"remote",url:a.serverUrl??a.websocketUrl,name:a.name};default:return null}}(a);if(!f){e.push(`MCP server "${b}" is a local server and cannot be packaged. Re-install it from GitHub, the registry, the marketplace, or as a remote server, then try again.`);continue}let g=E(a.headers);d.push({name:a.name,transport:a.transport,...a.disabled?{disabled:!0}:{},...a.autoApprove&&a.autoApprove.length?{autoApprove:a.autoApprove}:{},...a.folder?{folder:a.folder}:{},installOrigin:f,envDeclarations:E(a.env),...g.length?{headerDeclarations:g}:{}})}return{packaged:d,errors:e}}function G(a,b){let c=`${a}_${b}`.toUpperCase().replace(/[^A-Z0-9_.-]+/g,"_").replace(/^_+|_+$/g,"")||`${a}_SECRET`;return e.IE.test(c)?c:`${a}_SECRET`}function H(a){let b=(a.ApiKey??"").trim();if(!b)return{ref:{kind:"none"}};let c=e.mQ.exec(b);if(c)return{ref:{kind:"global",var:c[1]}};let d=G("MODEL",a.displayName||a.name||a.id);return{ref:{kind:"secret",secret:d},secret:{name:d,description:`API key for model "${a.displayName||a.name}"`,required:!0}}}function I(a){let b=[],c=new Set,d=(a,d)=>{for(let e of d??[]){if(!e.isSecret||e.secretRef)continue;let d=G("MCP",`${a}_${e.name}`);e.secretRef=d,c.has(d)||(c.add(d),b.push({name:d,description:`Secret "${e.name}" for MCP server "${a}"`,required:!0}))}};for(let b of a)d(b.name,b.envDeclarations),d(b.name,b.headerDeclarations);return b}function J(a,b){let c=new Map(b.models.map(a=>[a.id,a])),d=[],e=new Set,f=a=>{a&&!e.has(a.name)&&(e.add(a.name),d.push(a))};for(let b of a.modelIds){let a=c.get(b);a&&f(H(a).secret)}for(let c of I(F(a.mcpServerNames,b.mcpServers).packaged))f(c);return d}async function K(){let{flowService:a}=await c.e(7821).then(c.bind(c,87821)),{modelService:b}=await Promise.all([c.e(4322),c.e(5067),c.e(6034),c.e(7821),c.e(5096),c.e(544),c.e(6793)]).then(c.bind(c,20433)),{loadServerConfigs:d}=await Promise.all([c.e(4322),c.e(1805)]).then(c.bind(c,74186)),{getSchedulerService:e}=await Promise.all([c.e(3736),c.e(9794),c.e(4771),c.e(9174)]).then(c.bind(c,4771)),[f,g,h,i]=await Promise.all([a.loadFlows(),b.loadModels(),d(),e().list()]);return{flows:f,models:g,mcpServers:Array.isArray(h)?h:[],plannedExecutions:i.map(a=>a.execution)}}async function L(a){let b=await K();return{resolved:function(a,b){let c=new Map(b.flows.map(a=>[a.id,a])),d=new Map(b.models.map(a=>[a.id,a])),e=new Map(b.mcpServers.map(a=>[a.name,a])),g=new Map(b.plannedExecutions.map(a=>[a.id,a])),h=new Set,i=new Set(a.modelIds??[]),j=new Set(a.mcpServerNames??[]),k=new Set(a.plannedExecutionIds??[]),l=[],m=[],n=new Set(a.flowIds??[]),o=new Set(a.modelIds??[]),p=new Set(a.mcpServerNames??[]);for(let a of k){let b=g.get(a);if(!b){m.push(`Planned execution "${a}" was not found and will be skipped.`);continue}!b.flowId||n.has(b.flowId)||h.has(b.flowId)||l.push({type:"flow",id:b.flowId,reason:`used by planned execution "${b.name}"`}),b.flowId&&n.add(b.flowId)}let q=new Set,r=Array.from(n);for(;r.length>0;){let a=r.shift();if(q.has(a))continue;q.add(a);let b=c.get(a);if(!b){m.push(`Referenced flow "${a}" was not found and will be skipped.`);continue}h.add(a);let g=(0,f.Xw)(b);for(let d of g.flowIds??[])q.has(d)||r.push(d),!n.has(d)&&d!==a&&(c.has(d)?l.some(a=>"flow"===a.type&&a.id===d)||l.push({type:"flow",id:d,reason:`subflow of "${b.name}"`}):m.push(`Flow "${b.name}" references missing subflow "${d}".`));for(let a of g.modelIds??[]){if(!d.has(a)){m.push(`Flow "${b.name}" references missing model "${a}".`);continue}!i.has(a)&&(i.add(a),o.has(a)||l.push({type:"model",id:a,reason:`used by flow "${b.name}"`}))}for(let a of g.mcpServerNames??[]){if(!e.has(a)){m.push(`Flow "${b.name}" references missing MCP server "${a}".`);continue}!j.has(a)&&(j.add(a),p.has(a)||l.push({type:"mcpServer",id:a,reason:`used by flow "${b.name}"`}))}}return{flowIds:Array.from(h),modelIds:Array.from(i),mcpServerNames:Array.from(j),plannedExecutionIds:Array.from(k),autoAdded:l,warnings:m}}(a,b),entities:b}}async function M(a,b,c=[]){B.info(`Building package "${b.name}" v${b.version}`);let{resolved:d,entities:g}=await L(a);return function(a,b,c,d=[]){let g=[],i=[...a.warnings],j=new Map(b.flows.map(a=>[a.id,a])),k=new Map(b.models.map(a=>[a.id,a])),l=new Map(b.plannedExecutions.map(a=>[a.id,a])),m=F(a.mcpServerNames,b.mcpServers);g.push(...m.errors);let n=[],o=new Set,p=a=>{a&&!o.has(a.name)&&(o.add(a.name),n.push(a))},q=a.modelIds.map(a=>k.get(a)).filter(a=>!!a),r=a.flowIds.map(a=>j.get(a)).filter(a=>!!a),s=a.plannedExecutionIds.map(a=>l.get(a)).filter(a=>!!a),t=q,u=function(a){let b=new Set,c=a=>"string"==typeof a?a.replace(C,(a,c)=>(b.add(c),`{{secret.${c}}}`)):Array.isArray(a)?a.map(c):a&&"object"==typeof a?Object.fromEntries(Object.entries(a).map(([a,b])=>[a,c(b)])):a;return{flows:a.map(a=>c(a)),secrets:Array.from(b,a=>({name:a,description:`Global variable ${a} referenced by a packaged flow`,required:!0}))}}(r),v=u.flows,w=s;for(let a of u.secrets)p(a);if(d.length>0){let a=function(a,b){let c=[],d=b.filter(a=>!!a.excerpt&&(!!e.IE.test(a.secretName)||(c.push(`Skipped substitution with invalid secret name "${a.secretName}".`),!1))).sort((a,b)=>b.excerpt.length-a.excerpt.length),f=a=>{let b=a;for(let a of d)b.includes(a.excerpt)&&(b=b.split(a.excerpt).join(`{{secret.${a.secretName}}}`));return b},g={flows:a.flows.map(a=>A(a,f)),models:a.models.map(a=>A(a,f)),plannedExecutions:a.plannedExecutions.map(a=>A(a,f))},h=[],i=new Set;for(let a of d)i.has(a.secretName)||(i.add(a.secretName),h.push({name:a.secretName,description:a.description?f(a.description):`Derived secret ${a.secretName}`,required:!0}));return{entities:g,secrets:h,warnings:c}}({flows:v,models:q,plannedExecutions:s},d);for(let b of(t=a.entities.models,v=a.entities.flows,w=a.entities.plannedExecutions,i.push(...a.warnings),a.secrets))p(b)}let y=t.map(a=>{let{ref:b,secret:c}=H(a);return p(c),{model:a,apiKeyRef:b}});for(let a of I(m.packaged))p(a);let z=new Set;for(let{apiKeyRef:a}of y)"global"===a.kind&&z.add(a.var);for(let a of m.packaged)for(let b of[...a.envDeclarations,...a.headerDeclarations??[]])b.globalVar&&z.add(b.globalVar);if(g.length>0)return{ok:!1,resolved:a,errors:g,warnings:i};try{let{json:b,package:e}=(0,f.Zp)({id:c.id,name:c.name,version:c.version,description:c.description,author:c.author,publisher:c.publisher,tags:c.tags,...z.size>0?{requiredGlobals:Array.from(z)}:{},secrets:n,models:y,mcpServers:m.packaged,flows:v,plannedExecutions:w}),j=(0,f.$j)(e);return j.warnings?.length&&i.push(...j.warnings),d.length>0&&i.push(...function(a,b={}){return x(h(a),b).map(a=>`Possible secret left in package at ${a.location}: "${a.excerpt}" (${a.kind}).`)}({flows:v,models:t,plannedExecutions:w})),{ok:!0,json:b,package:e,resolved:a,errors:g,warnings:i}}catch(b){return g.push(b instanceof Error?b.message:String(b)),{ok:!1,resolved:a,errors:g,warnings:i}}}(d,g,b,c.filter(a=>a.excerpt&&a.suggestedSecretName).map(a=>({excerpt:a.excerpt,secretName:a.suggestedSecretName,description:a.suggestedDescription})))}function N(a,b){let c=new Set(a.flowIds),d=new Set(a.modelIds),e=new Set(a.plannedExecutionIds);return{flows:b.flows.filter(a=>c.has(a.id)),models:b.models.filter(a=>d.has(a.id)),plannedExecutions:b.plannedExecutions.filter(a=>e.has(a.id))}}async function O(a,b={}){let{resolved:d,entities:e}=await L(a),f=N(d,e),g={entropyThreshold:b.entropyThreshold,enableEntropy:b.enableEntropy,enableRepoSlug:b.enableRepoSlug};if(b.modelIdentifier){let{modelService:a}=await Promise.all([c.e(4322),c.e(5067),c.e(6034),c.e(7821),c.e(5096),c.e(544),c.e(6793)]).then(c.bind(c,20433));g.model={modelIdentifier:b.modelIdentifier,completion:async b=>await a.generateChatCompletion({modelIdentifier:b.modelIdentifier,messages:b.messages,temperature:b.temperature})}}return z(f,g)}async function P(a){let{resolved:b,entities:c}=await L(a),d=h(N(b,c)),e=new Set,f=[];for(let a of d){if(e.has(a.text))continue;e.add(a.text);let b=a.location.split(":")[0]||"other";f.push({source:b,location:a.location,text:a.text})}return f.sort((a,b)=>b.text.length-a.text.length),f}},51669:(a,b)=>{function c(a){for(let b=0;b<a.length;b++){let c=a[b];if("function"!=typeof c)throw Object.defineProperty(Error(`A "use server" file can only export async functions, found ${typeof c}.
1
+ "use strict";exports.id=8645,exports.ids=[1925,4306,8645],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()},24991:(a,b,c)=>{c.d(b,{SA:()=>P,MH:()=>R,lJ:()=>F,M2:()=>M,HV:()=>O,$Z:()=>S,Xd:()=>H});var d=c(50846),e=c(93868),f=c(25113),g=c(22084);function h(a,b,c){if("string"!=typeof c)return;let d=c.trim();0!==d.length&&a.push({location:b,text:d})}function i(a){let b=[];for(let c of a.flows??[])b.push(...function(a){let b=[];for(let d of(h(b,`flow:${a.id}.description`,a.description),a.nodes??[])){var c=a.id;let e=d.id,f=`flow:${c}.node:${e}`;h(b,`${f}.description`,d.data?.description),d.data?.properties&&"object"==typeof d.data.properties&&function a(b,c,d,e,f=0){if(!(f>12)&&null!=d){if("string"==typeof d)return void h(b,c,d);if("object"==typeof d&&!e.has(d)){if(e.add(d),Array.isArray(d))return void d.forEach((d,g)=>a(b,`${c}[${g}]`,d,e,f+1));for(let[g,h]of Object.entries(d))a(b,`${c}.${g}`,h,e,f+1)}}}(b,`${f}.properties`,d.data.properties,new WeakSet)}return b}(c));for(let c of a.models??[])b.push(...function(a){let b=[],c=`model:${a.id}`;return h(b,`${c}.baseUrl`,a.baseUrl),h(b,`${c}.promptTemplate`,a.promptTemplate),h(b,`${c}.displayName`,a.displayName),h(b,`${c}.description`,a.description),h(b,`${c}.name`,a.name),b}(c));for(let c of a.plannedExecutions??[])b.push(...function(a){let b=[],c=`plannedExecution:${a.id}`;return h(b,`${c}.name`,a.name),h(b,`${c}.prompt`,a.prompt),b}(c));return b}var j=c(1925);let k=["path","repo","token","email","url-cred","name","other"];function l(a,b){return`sp_${function(a){let b=5381;for(let c=0;c<a.length;c++)b=(b<<5)+b^a.charCodeAt(c);return(b>>>0).toString(16).padStart(8,"0")}(`${a}\0${b}`)}`}function m(a,b){let c=`${a}_${b}`.toUpperCase().replace(/[^A-Z0-9_.-]+/g,"_").replace(/^[_.-]+|[_.-]+$/g,"")||`${a}_SECRET`;return e.IE.test(c)?c:`${a}_SECRET`}let n=["/usr/","/bin/","/sbin/","/lib/","/lib64/","/etc/","/var/","/opt/","/proc/","/sys/","/dev/","/tmp/","/run/","/boot/","/mnt/","/srv/","/node_modules/"],o=["c:\\windows","c:\\program files","c:\\programdata"],p=/[.,;:!?)\]}'"/\\]$/;function q(a){if(!a)return 0;let b=new Map;for(let c of a)b.set(c,(b.get(c)??0)+1);let c=0;for(let d of b.values()){let b=d/a.length;c-=b*Math.log2(b)}return c}let r=[{re:/\bhttps?:\/\/[^/\s:@]+:[^/\s:@]+@[^\s"'<>]+/gi,kind:"url-cred",priority:1,rationale:"URL with embedded credentials",confidence:"high"},{re:/\bBearer\s+([A-Za-z0-9._~+/=-]{16,})/gi,kind:"token",priority:2,rationale:"Bearer token",confidence:"high",group:1},{re:/(?:https?:\/\/)?(?:www\.)?(?:github\.com|gitlab\.com|bitbucket\.org)[/:]([A-Za-z0-9](?:[A-Za-z0-9._-]{0,38})\/[A-Za-z0-9](?:[A-Za-z0-9._-]{0,99}?))(?=(?:\.git)?(?![A-Za-z0-9._/-]))/gi,kind:"repo",priority:3,rationale:"owner/repo slug in a VCS URL",confidence:"high",group:1},{re:/\bgit@[A-Za-z0-9.-]+:([A-Za-z0-9](?:[A-Za-z0-9._-]{0,38})\/[A-Za-z0-9](?:[A-Za-z0-9._-]{0,99}?))(?=(?:\.git)?(?![A-Za-z0-9._/-]))/gi,kind:"repo",priority:3,rationale:"owner/repo slug in a git SSH URL",confidence:"high",group:1},{re:/\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}\b/g,kind:"email",priority:4,rationale:"Email address",confidence:"medium"},{re:/\b[A-Za-z]:\\[^\s"'<>|?*]+/g,kind:"path",priority:5,rationale:"Windows absolute file path",confidence:"medium"},{re:/(?<![A-Za-z0-9._~:/])\/[A-Za-z0-9._-]+(?:\/[A-Za-z0-9._-]+)+/g,kind:"path",priority:6,rationale:"POSIX absolute file path",confidence:"medium"}],s={re:/(?<![A-Za-z0-9._/-])[A-Za-z0-9](?:[A-Za-z0-9._-]{0,38})\/[A-Za-z0-9](?:[A-Za-z0-9._-]{0,99})(?![A-Za-z0-9._/-])/g,kind:"repo",priority:8,rationale:"owner/repo-shaped slug (opt-in, low confidence)",confidence:"low"},t=new Set(["and/or","input/output","read/write","client/server","tcp/ip","files/folders","yes/no","true/false","on/off","src/utils","a/b"]),u=/(?<![A-Za-z0-9_-])([A-Za-z][A-Za-z0-9_-]{1,64})\s*[:=]\s*("[^"]{4,}"|'[^']{4,}'|[^\s"']{6,})/g;function v(a){return new RegExp(e.HQ.source).test(a)}let w={path:"PATH",repo:"REPO",token:"TOKEN",email:"EMAIL","url-cred":"URL",name:"NAME",other:"SECRET"};function x(a,b){let c=b;if("path"===a){let a=b.split(/[\\/]/).filter(Boolean);c=a[a.length-1]||b}else"email"===a?c=b.split("@")[0]||b:"repo"===a?c=b.replace(/\//g,"_"):"url-cred"===a?c=b.replace(/^https?:\/\//i,"").split(/[/:@]/)[0]||b:"token"===a&&(c=b.slice(0,8));return m(w[a],c)}function y(a,b={}){let c=b.entropyThreshold??4,d=!0===b.enableEntropy,e=!0===b.enableRepoSlug?[...r,s]:r,f=[],g=new Set;for(let b of a)for(let a of function(a){let b=[...a].sort((a,b)=>a.priority-b.priority||b.end-b.start-(a.end-a.start)||a.start-b.start),c=[];for(let a of b)c.some(b=>a.start<b.end&&b.start<a.end)||c.push(a);return c.sort((a,b)=>a.start-b.start)}([...function(a,b){let c=[];for(let d of b){let b,e=new RegExp(d.re.source,d.re.flags);for(;null!==(b=e.exec(a));){let a=d.group??0,f=b[a];if(!f){e.lastIndex===b.index&&e.lastIndex++;continue}let g=b.index+(a>0?b[0].indexOf(f):0);if("path"===d.kind&&(f=function(a){let b=a;for(;b.length>1&&p.test(b);)b=b.slice(0,-1);return b}(f)),"path"===d.kind&&function(a){let b=a.toLowerCase();return!!(b.includes("node_modules/")||b.includes("node_modules\\"))||(/^[a-z]:\\/.test(b)?o.some(a=>b.startsWith(a)):n.some(a=>b.startsWith(a)))}(f)||"repo"===d.kind&&"low"===d.confidence&&t.has(f.toLowerCase())){e.lastIndex===b.index&&e.lastIndex++;continue}c.push({start:g,end:g+f.length,value:f,kind:d.kind,priority:d.priority,rationale:d.rationale,confidence:d.confidence}),e.lastIndex===b.index&&e.lastIndex++}}return c}(b.text,e),...function(a){let b,c=[],d=new RegExp(u.source,u.flags);for(;null!==(b=d.exec(a));){let a=b[1],d=b[2];if(!(0,j.xc)(a)||((d.startsWith('"')&&d.endsWith('"')||d.startsWith("'")&&d.endsWith("'"))&&(d=d.slice(1,-1)),!d||v(d)))continue;let e=b.index+b[0].indexOf(d,a.length);c.push({start:e,end:e+d.length,value:d,kind:"token",priority:2,rationale:`Value assigned to secret-like key "${a}"`,confidence:"high"})}return c}(b.text),...d?function(a,b){let c,d=[],e=/[A-Za-z0-9._~+/=-]{20,}/g;for(;null!==(c=e.exec(a));){let a=c[0];(function(a,b){if(a.length<24)return!1;let c=/[A-Za-z]/.test(a),d=/[0-9]/.test(a);return!!c&&!!d&&q(a)>=b})(a,b)&&d.push({start:c.index,end:c.index+a.length,value:a,kind:"token",priority:7,rationale:`High-entropy string (${q(a).toFixed(2)} bits/char)`,confidence:"low"})}return d}(b.text,c):[]].filter(a=>!v(a.value)))){let c=`${b.location}\0${a.value}`;g.has(c)||(g.add(c),f.push({id:l(b.location,a.value),location:b.location,excerpt:a.value,kind:a.kind,source:"heuristic",confidence:a.confidence,suggestedSecretName:x(a.kind,a.value),rationale:a.rationale}))}return f}async function z(a,b){let c,d=[];if(0===a.length)return{proposals:[],warnings:d};let e=b.maxTargets??200,f=b.maxCharsPerTarget??2e3,g=a.slice(0,e).map(a=>({location:a.location,text:a.text.length>f?a.text.slice(0,f):a.text})),h=new Map(a.map(a=>[a.location,a]));try{c=await b.completion({modelIdentifier:b.modelIdentifier,temperature:0,messages:[{role:"system",content:'You are a security assistant helping to package a workflow for sharing.\nYou are given a JSON array of content slices, each { "location", "text" }.\nIdentify substrings that are SECRETS or INSTANCE-SPECIFIC values that should\nNOT be shared verbatim: absolute file paths, owner/repo slugs, API tokens or\nkeys, credential-bearing URLs, email addresses, and similar.\n\nReturn ONLY a JSON array (no prose, no markdown fences). Each element:\n{ "location": string (echo the slice location exactly),\n "excerpt": string (the EXACT substring, copied verbatim from that slice text),\n "kind": one of "path"|"repo"|"token"|"email"|"url-cred"|"name"|"other",\n "suggestedSecretName": UPPER_SNAKE identifier,\n "suggestedDescription": short human description,\n "rationale": one short sentence }.\nDo NOT invent excerpts that are not present in the given text. If nothing\nqualifies, return [].'},{role:"user",content:JSON.stringify(g)}]})}catch(a){return d.push(`Model-driven pass failed: ${a instanceof Error?a.message:String(a)}`),{proposals:[],warnings:d}}if(!c?.success)return d.push(`Model-driven pass returned an error: ${c?.error?.message??"unknown error"}`),{proposals:[],warnings:d};let i=c.completion?.choices?.[0]?.message?.content??"",j=function(a){if("string"!=typeof a)return null;let b=a.trim(),c=/^```(?:json)?\s*([\s\S]*?)\s*```$/i.exec(b);c&&(b=c[1].trim());let d=a=>{try{let b=JSON.parse(a);return Array.isArray(b)?b:null}catch{return null}},e=d(b);if(e)return e;let f=b.indexOf("["),g=b.lastIndexOf("]");return f>=0&&g>f?d(b.slice(f,g+1)):null}("string"==typeof i?i:"");if(!j)return d.push("Model-driven pass returned no parseable JSON; ignoring its output."),{proposals:[],warnings:d};let n=[],o=new Set;for(let a of j){let b=function(a,b){var c;if(!a||"object"!=typeof a)return null;let d="string"==typeof a.location?a.location:"",e="string"==typeof a.excerpt?a.excerpt.trim():"";if(!d||!e)return null;let f=b.get(d);if(!f||!f.text.includes(e))return null;let g="string"==typeof(c=a.kind)&&k.includes(c)?c:"other",h="string"==typeof a.suggestedSecretName&&a.suggestedSecretName.trim()?m("SECRET",a.suggestedSecretName):x(g,e);return{id:l(d,e),location:d,excerpt:e,kind:g,source:"model",suggestedSecretName:h,suggestedDescription:"string"==typeof a.suggestedDescription?a.suggestedDescription.slice(0,200):void 0,rationale:"string"==typeof a.rationale?a.rationale.slice(0,200):void 0}}(a,h);if(!b)continue;let c=`${b.location} ${b.excerpt}`;o.has(c)||(o.add(c),n.push(b))}return{proposals:n,warnings:d}}async function A(a,b={}){let c=i(a),d=[],e=y(c,b),f=[];if(b.model){let a=await z(c,{modelIdentifier:b.model.modelIdentifier,completion:b.model.completion});f=a.proposals,d.push(...a.warnings)}return{proposals:function(a,b){let c=new Map,d=a=>`${a.location}\0${a.excerpt}`;for(let b of a)c.set(d(b),b);for(let a of b){let b=d(a);c.has(b)||c.set(b,a)}return Array.from(c.values())}(e,f),warnings:d}}function B(a,b){if("string"==typeof a)return b(a);if(Array.isArray(a))return a.map(a=>B(a,b));if(a&&"object"==typeof a){let c={};for(let[d,e]of Object.entries(a))c[d]=B(e,b);return c}return a}let C=(0,d.h)("backend/services/packages/buildPackage"),D=/\$\{global:([A-Za-z0-9_.-]+)\}/g;function E(a,b=new Set){if("string"==typeof a){let c=RegExp(D.source,"g");for(let d of a.matchAll(c))b.add(d[1]);return b}if(Array.isArray(a)){for(let c of a)E(c,b);return b}if(a&&"object"==typeof a)for(let c of Object.values(a))E(c,b);return b}function F(a,b){let c=new Set,d=new Set(a.flowIds),e=new Set(a.modelIds),f=new Set(a.plannedExecutionIds);for(let a of b.flows)d.has(a.id)&&E(a,c);for(let a of b.models)e.has(a.id)&&E(a,c);for(let a of b.plannedExecutions)f.has(a.id)&&E(a,c);for(let d of H(a.mcpServerNames,b.mcpServers).packaged)for(let a of[...d.envDeclarations,...d.headerDeclarations??[]])a.globalVar&&c.add(a.globalVar);return Array.from(c,a=>({name:a,description:`Global variable ${a} required by this package`,required:!0,isSecret:!1}))}function G(a,b){return a?Object.entries(a).map(([a,c])=>{let d="object"==typeof c&&null!==c&&"boolean"==typeof c.metadata?.isSecret,f=e.mQ.exec(("string"==typeof c?c:c&&"object"==typeof c&&"string"==typeof c.value?c.value:void 0)??"");return{name:a,isSecret:d?"object"==typeof c&&null!==c&&c.metadata?.isSecret===!0:b(a),...f?{globalVar:f[1]}:{}}}):[]}function H(a,b){let c=new Map(b.map(a=>[a.name,a])),d=[],e=[];for(let b of a){let a=c.get(b);if(!a){e.push(`MCP server "${b}" was not found.`);continue}let f=function(a){let b=a.source;if(!b||"local"===b.type)return null;switch(b.type){case"github":return{sourceType:"github",ref:b.ref?`${b.repositoryUrl}@${b.ref}`:b.repositoryUrl,name:a.name};case"registry":return{sourceType:"registry",ref:b.registryName,name:a.name};case"marketplace":return{sourceType:"marketplace",ref:b.id,name:a.name};case"remote":return{sourceType:"remote",url:a.serverUrl??a.websocketUrl,name:a.name};default:return null}}(a);if(!f){e.push(`MCP server "${b}" is a local server and cannot be packaged. Re-install it from GitHub, the registry, the marketplace, or as a remote server, then try again.`);continue}let g=G(a.headers,j.Hm);d.push({name:a.name,transport:a.transport,...a.disabled?{disabled:!0}:{},...a.autoApprove&&a.autoApprove.length?{autoApprove:a.autoApprove}:{},...a.folder?{folder:a.folder}:{},installOrigin:f,envDeclarations:G(a.env,j.xc),...g.length?{headerDeclarations:g}:{}})}return{packaged:d,errors:e}}function I(a,b){let c=`${a}_${b}`.toUpperCase().replace(/[^A-Z0-9_.-]+/g,"_").replace(/^_+|_+$/g,"")||`${a}_SECRET`;return e.IE.test(c)?c:`${a}_SECRET`}function J(a){let b=(a.ApiKey??"").trim();if(!b)return{ref:{kind:"none"}};let c=e.mQ.exec(b);if(c)return{ref:{kind:"global",var:c[1]}};let d=I("MODEL",a.displayName||a.name||a.id);return{ref:{kind:"secret",secret:d},secret:{name:d,description:`API key for model "${a.displayName||a.name}"`,required:!0}}}function K(a){let b=[],c=new Set,d=(a,d)=>{for(let e of d??[]){if(!e.isSecret||e.secretRef||e.globalVar)continue;let d=I("MCP",`${a}_${e.name}`);e.secretRef=d,c.has(d)||(c.add(d),b.push({name:d,description:`Secret "${e.name}" for MCP server "${a}"`,required:!0}))}};for(let b of a)d(b.name,b.envDeclarations),d(b.name,b.headerDeclarations);return b}function L(a,b,c){let d=b.map(({ApiKey:a,...b})=>b),e=c.map(a=>{if(a.trigger?.type!=="webhook")return a;let{token:b,...c}=a.trigger;return{...a,trigger:c}});return(0,g.D)({flows:a,models:d,plannedExecutions:e}).map(a=>({name:a,description:`Secret "${a}" referenced by packaged content`,required:!0}))}function M(a,b){let c=new Map(b.flows.map(a=>[a.id,a])),d=new Map(b.models.map(a=>[a.id,a])),e=new Map(b.plannedExecutions.map(a=>[a.id,a])),f=[],g=new Set,h=a=>{a&&!g.has(a.name)&&(g.add(a.name),f.push(a))};for(let b of a.modelIds){let a=d.get(b);a&&h(J(a).secret)}for(let c of K(H(a.mcpServerNames,b.mcpServers).packaged))h(c);let i=a.flowIds.map(a=>c.get(a)).filter(a=>!!a);for(let b of L(i,a.modelIds.map(a=>d.get(a)).filter(a=>!!a),a.plannedExecutionIds.map(a=>e.get(a)).filter(a=>!!a)))h(b);return f}async function N(){let{flowService:a}=await c.e(7821).then(c.bind(c,87821)),{modelService:b}=await Promise.all([c.e(4322),c.e(5067),c.e(6034),c.e(7821),c.e(5096),c.e(544),c.e(6793)]).then(c.bind(c,20433)),{loadServerConfigs:d}=await Promise.all([c.e(4322),c.e(1805)]).then(c.bind(c,74186)),{getSchedulerService:e}=await Promise.all([c.e(3736),c.e(9794),c.e(4771),c.e(9174)]).then(c.bind(c,4771)),[f,g,h,i]=await Promise.all([a.loadFlows(),b.loadModels(),d(),e().list()]);return{flows:f,models:g,mcpServers:Array.isArray(h)?h:[],plannedExecutions:i.map(a=>a.execution)}}async function O(a){let b=await N();return{resolved:function(a,b){let c=new Map(b.flows.map(a=>[a.id,a])),d=new Map(b.models.map(a=>[a.id,a])),e=new Map(b.mcpServers.map(a=>[a.name,a])),g=new Map(b.plannedExecutions.map(a=>[a.id,a])),h=new Set,i=new Set(a.modelIds??[]),j=new Set(a.mcpServerNames??[]),k=new Set(a.plannedExecutionIds??[]),l=[],m=[],n=new Set(a.flowIds??[]),o=new Set(a.modelIds??[]),p=new Set(a.mcpServerNames??[]);for(let a of k){let b=g.get(a);if(!b){m.push(`Planned execution "${a}" was not found and will be skipped.`);continue}!b.flowId||n.has(b.flowId)||h.has(b.flowId)||l.push({type:"flow",id:b.flowId,reason:`used by planned execution "${b.name}"`}),b.flowId&&n.add(b.flowId)}let q=new Set,r=Array.from(n);for(;r.length>0;){let a=r.shift();if(q.has(a))continue;q.add(a);let b=c.get(a);if(!b){m.push(`Referenced flow "${a}" was not found and will be skipped.`);continue}h.add(a);let g=(0,f.Xw)(b);for(let d of g.flowIds??[])q.has(d)||r.push(d),!n.has(d)&&d!==a&&(c.has(d)?l.some(a=>"flow"===a.type&&a.id===d)||l.push({type:"flow",id:d,reason:`subflow of "${b.name}"`}):m.push(`Flow "${b.name}" references missing subflow "${d}".`));for(let a of g.modelIds??[]){if(!d.has(a)){m.push(`Flow "${b.name}" references missing model "${a}".`);continue}!i.has(a)&&(i.add(a),o.has(a)||l.push({type:"model",id:a,reason:`used by flow "${b.name}"`}))}for(let a of g.mcpServerNames??[]){if(!e.has(a)){m.push(`Flow "${b.name}" references missing MCP server "${a}".`);continue}!j.has(a)&&(j.add(a),p.has(a)||l.push({type:"mcpServer",id:a,reason:`used by flow "${b.name}"`}))}}return{flowIds:Array.from(h),modelIds:Array.from(i),mcpServerNames:Array.from(j),plannedExecutionIds:Array.from(k),autoAdded:l,warnings:m}}(a,b),entities:b}}async function P(a,b,c=[],d=[],g=[]){C.info(`Building package "${b.name}" v${b.version}`);let{resolved:h,entities:j}=await O(a);return function(a,b,c,d=[],g=[],h=[]){let j=[],k=[...a.warnings],l=new Map(b.flows.map(a=>[a.id,a])),m=new Map(b.models.map(a=>[a.id,a])),n=new Map(b.plannedExecutions.map(a=>[a.id,a])),o=H(a.mcpServerNames,b.mcpServers);j.push(...o.errors);let p=new Set(h),q=[],r=new Set,s=a=>{a&&!r.has(a.name)&&(r.add(a.name),q.push(a))},t=a.modelIds.map(a=>m.get(a)).filter(a=>!!a),u=a.flowIds.map(a=>l.get(a)).filter(a=>!!a),v=a.plannedExecutionIds.map(a=>n.get(a)).filter(a=>!!a),w=t,x=u,z=v;if(d.length>0){let a=function(a,b){let c=[],d=b.filter(a=>!!a.excerpt&&(!!e.IE.test(a.secretName)||(c.push(`Skipped substitution with invalid secret name "${a.secretName}".`),!1))).sort((a,b)=>b.excerpt.length-a.excerpt.length),f=a=>{let b=a;for(let a of d)b.includes(a.excerpt)&&(b=b.split(a.excerpt).join(`{{secret.${a.secretName}}}`));return b},g={flows:a.flows.map(a=>B(a,f)),models:a.models.map(a=>B(a,f)),plannedExecutions:a.plannedExecutions.map(a=>B(a,f))},h=[],i=new Set;for(let a of d)i.has(a.secretName)||(i.add(a.secretName),h.push({name:a.secretName,description:a.description?f(a.description):`Derived secret ${a.secretName}`,required:!0}));return{entities:g,secrets:h,warnings:c}}({flows:x,models:t,plannedExecutions:v},d);for(let b of(w=a.entities.models,x=a.entities.flows,z=a.entities.plannedExecutions,k.push(...a.warnings),a.secrets))s(b)}let A=w.map(a=>{var b;let{ref:c,secret:d}=(b=J(a),b.secret&&p.has(b.secret.name)?{ref:{kind:"none"}}:b);return s(d),{model:a,apiKeyRef:c}});for(let a of K(o.packaged))s(a);for(let a of o.packaged)for(let b of[...a.envDeclarations,...a.headerDeclarations??[]])b.secretRef&&p.has(b.secretRef)&&delete b.secretRef;let C=L(x,w,z),D=new Set(C.map(a=>a.name));for(let a=q.length-1;a>=0;a-=1)p.has(q[a].name)&&!D.has(q[a].name)&&(r.delete(q[a].name),q.splice(a,1));for(let a of C)s(a);let E=new Set;for(let{apiKeyRef:a}of A)"global"===a.kind&&E.add(a.var);for(let a of o.packaged)for(let b of[...a.envDeclarations,...a.headerDeclarations??[]])b.globalVar&&E.add(b.globalVar);let G=function(a,b){let c=new Map(b.map(a=>[a.name,a]));return a.map(a=>{let b=c.get(a.name);return b?{...a,description:b.description?.trim()||a.description,required:!1!==b.required,isSecret:!0===b.isSecret}:a})}(F(a,b),g);if(j.length>0)return{ok:!1,resolved:a,errors:j,warnings:k};try{let{json:b,package:e}=(0,f.Zp)({id:c.id,name:c.name,version:c.version,description:c.description,author:c.author,publisher:c.publisher,tags:c.tags,...E.size>0?{requiredGlobals:Array.from(E)}:{},...G.length>0?{globals:G}:{},secrets:q,models:A,mcpServers:o.packaged,flows:x,plannedExecutions:z}),g=(0,f.$j)(e);return g.warnings?.length&&k.push(...g.warnings),d.length>0&&k.push(...function(a,b={}){return y(i(a),b).map(a=>`Possible secret left in package at ${a.location}: "${a.excerpt}" (${a.kind}).`)}({flows:x,models:w,plannedExecutions:z})),{ok:!0,json:b,package:e,resolved:a,errors:j,warnings:k}}catch(b){return j.push(b instanceof Error?b.message:String(b)),{ok:!1,resolved:a,errors:j,warnings:k}}}(h,j,b,c.filter(a=>a.excerpt&&a.suggestedSecretName).map(a=>({excerpt:a.excerpt,secretName:a.suggestedSecretName,description:a.suggestedDescription})),d,g)}function Q(a,b){let c=new Set(a.flowIds),d=new Set(a.modelIds),e=new Set(a.plannedExecutionIds);return{flows:b.flows.filter(a=>c.has(a.id)),models:b.models.filter(a=>d.has(a.id)),plannedExecutions:b.plannedExecutions.filter(a=>e.has(a.id))}}async function R(a,b={}){let{resolved:d,entities:e}=await O(a),f=Q(d,e),g={entropyThreshold:b.entropyThreshold,enableEntropy:b.enableEntropy,enableRepoSlug:b.enableRepoSlug};if(b.modelIdentifier){let{modelService:a}=await Promise.all([c.e(4322),c.e(5067),c.e(6034),c.e(7821),c.e(5096),c.e(544),c.e(6793)]).then(c.bind(c,20433));g.model={modelIdentifier:b.modelIdentifier,completion:async b=>await a.generateChatCompletion({modelIdentifier:b.modelIdentifier,messages:b.messages,temperature:b.temperature})}}return A(f,g)}async function S(a){let{resolved:b,entities:c}=await O(a),d=i(Q(b,c)),e=new Set,f=[];for(let a of d){if(e.has(a.text))continue;e.add(a.text);let b=a.location.split(":")[0]||"other";f.push({source:b,location:a.location,text:a.text})}return f.sort((a,b)=>b.text.length-a.text.length),f}},51669:(a,b)=>{function c(a){for(let b=0;b<a.length;b++){let c=a[b];if("function"!=typeof c)throw Object.defineProperty(Error(`A "use server" file can only export async functions, found ${typeof c}.
2
2
  Read more: https://nextjs.org/docs/messages/invalid-use-server-value`),"__NEXT_ERROR_CODE",{value:"E352",enumerable:!1,configurable:!0})}}Object.defineProperty(b,"D",{enumerable:!0,get:function(){return c}})},68633:(a,b,c)=>{Object.defineProperty(b,"__esModule",{value:!0}),!function(a,b){for(var c in b)Object.defineProperty(a,c,{enumerable:!0,get:b[c]})}(b,{decryptActionBoundArgs:function(){return s},encryptActionBoundArgs:function(){return r}}),c(77925);let d=c(97954),e=c(27825),f=c(47686),g=c(77533),h=c(63033),i=c(26906),j=function(a){return a&&a.__esModule?a:{default:a}}(c(74515)),k=new TextEncoder,l=new TextDecoder,m=void 0,n=void 0;async function o(a,b){let c=await (0,g.getActionEncryptionKey)();if(void 0===c)throw Object.defineProperty(Error("Missing encryption key for Server Action. This is a bug in Next.js"),"__NEXT_ERROR_CODE",{value:"E65",enumerable:!1,configurable:!0});let d=atob(b),e=d.slice(0,16),f=d.slice(16),h=l.decode(await (0,g.decrypt)(c,(0,g.stringToUint8Array)(e),(0,g.stringToUint8Array)(f)));if(!h.startsWith(a))throw Object.defineProperty(Error("Invalid Server Action payload: failed to decrypt."),"__NEXT_ERROR_CODE",{value:"E191",enumerable:!1,configurable:!0});return h.slice(a.length)}async function p(a,b){let c=await (0,g.getActionEncryptionKey)();if(void 0===c)throw Object.defineProperty(Error("Missing encryption key for Server Action. This is a bug in Next.js"),"__NEXT_ERROR_CODE",{value:"E65",enumerable:!1,configurable:!0});let d=new Uint8Array(16);h.workUnitAsyncStorage.exit(()=>crypto.getRandomValues(d));let e=(0,g.arrayBufferToString)(d.buffer),f=await (0,g.encrypt)(c,d,k.encode(a+b));return btoa(e+(0,g.arrayBufferToString)(f))}var q=function(a){return a[a.Ready=0]="Ready",a[a.Pending=1]="Pending",a[a.Complete=2]="Complete",a}(q||{});let r=j.default.cache(async function a(b,...c){let e=h.workUnitAsyncStorage.getStore(),j=e?(0,h.getCacheSignal)(e):void 0,{clientModules:k}=(0,g.getClientReferenceManifestForRsc)(),l=Error();Error.captureStackTrace(l,a);let n=!1,o=e?(0,i.createHangingInputAbortSignal)(e):void 0,q=0;function r(){0===q&&(q=1,null==j||j.beginRead())}function s(){1===q&&(null==j||j.endRead()),q=2}o&&j&&o.addEventListener("abort",r,{once:!0});let t=await (0,f.streamToString)((0,d.renderToReadableStream)(c,k,{filterStackFrame:m,signal:o,onError(a){(null==o||!o.aborted)&&(n||(n=!0,l.message=a instanceof Error?a.message:String(a)))}}),o);if(n)throw s(),l;if(!e)return p(b,t);r();let u=(0,h.getPrerenderResumeDataCache)(e),v=(0,h.getRenderResumeDataCache)(e),w=b+t,x=(null==u?void 0:u.encryptedBoundArgs.get(w))??(null==v?void 0:v.encryptedBoundArgs.get(w));if(x)return x;let y=await p(b,t);return s(),null==u||u.encryptedBoundArgs.set(w,y),y});async function s(a,b){let c,d=await b,f=h.workUnitAsyncStorage.getStore();if(f){let b=(0,h.getCacheSignal)(f),e=(0,h.getPrerenderResumeDataCache)(f),g=(0,h.getRenderResumeDataCache)(f);(c=(null==e?void 0:e.decryptedBoundArgs.get(d))??(null==g?void 0:g.decryptedBoundArgs.get(d)))||(null==b||b.beginRead(),c=await o(a,d),null==b||b.endRead(),null==e||e.decryptedBoundArgs.set(d,c))}else c=await o(a,d);let{edgeRscModuleMapping:i,rscModuleMapping:j}=(0,g.getClientReferenceManifestForRsc)();return await (0,e.createFromReadableStream)(new ReadableStream({start(a){switch(a.enqueue(k.encode(c)),null==f?void 0:f.type){case"prerender":case"prerender-runtime":f.renderSignal.aborted?a.close():f.renderSignal.addEventListener("abort",()=>a.close(),{once:!0});break;case"prerender-client":case"prerender-ppr":case"prerender-legacy":case"request":case"cache":case"private-cache":case"unstable-cache":case void 0:return a.close()}}}),{findSourceMapURL:n,serverConsumerManifest:{moduleLoading:null,moduleMap:j,serverModuleMap:(0,g.getServerModuleMap)()}})}},75879:(a,b,c)=>{Object.defineProperty(b,"A",{enumerable:!0,get:function(){return d.registerServerReference}});let d=c(97954)}};
@@ -1,8 +1,29 @@
1
- exports.id=9235,exports.ids=[1925,3629,4306,6793,9174,9235],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()},8491:(a,b,c)=>{"use strict";c.d(b,{Cc:()=>l,HQ:()=>k,V2:()=>j});var d=c(81226),e=c(87821);let f="system-flow-generator",g="flow-generator",h=`You are FLUJO's guided Flow Generator.
1
+ exports.id=9235,exports.ids=[1925,3629,4306,6793,9174,9235],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()},8491:(a,b,c)=>{"use strict";c.d(b,{Cc:()=>r,HQ:()=>q,V2:()=>p});var d=c(81226),e=c(87821),f=c(97630);let g="system-flow-generator",h="flow-generator",i=["list_flow_building_blocks","get_flow_authoring_guide","draft_generated_flow","search_mcp_marketplace"],j=["install_mcp_server","install_best_mcp_server"],k=[...i,...j],l=`You are the experimental, completely Flow-based FLUJO Flow Generator.
2
2
 
3
- Help the user design a workflow through a short conversation. Ask only for missing information that materially changes the design: the goal, required output, or external capability. Ask at most one concise question at a time.
3
+ Every user turn is an instruction to CREATE or REVISE an unsaved Flow draft. You must produce a draft on every turn. Never stop at advice, a design discussion, a promise to build later, or a clarifying question. When details are missing, make sensible reversible assumptions and continue.
4
4
 
5
- Before drafting, call list_flow_building_blocks so every model, tool, and existing-flow reference is real. Use the default simple authoring profile. Do not ask the user about input modes, output modes, resources, variables, KV, fan-out, concurrency, prompt exclusions, or graph wiring; the compiler owns those defaults.
5
+ This Flow is the editable expression of the production generator:
6
+ 1. Flow Architect performs the production generator's model-driven authoring and capability-discovery stage.
7
+ 2. Generation Compiler invokes the SAME deterministic hardening pipeline used by the production generator.
6
8
 
7
- When the request is sufficiently clear, call draft_flow with a SimpleFlowSpec. Never call create_flow: the user must review the unsaved draft in the builder. After draft_flow returns, briefly summarize the proposed steps and invite the user to open the draft or request a revision. For a revision, call draft_flow again with a complete replacement SimpleFlowSpec.`;function i(){let a=(0,d.dM)({name:"Flow_Generator",description:"Editable guided flow used by the Generate Flow chat. FLUJO seeds it once and never overwrites your changes.",nodes:[{key:"start",type:"start",label:"Start",prompt:h},{key:"designer",type:"process",label:"Flow Designer",description:"Clarifies the request and proposes an unsaved guided draft.",maxTurns:16,inputMode:"full-history",outputMode:"latest-message",servers:[{name:"flujo",tools:["list_flow_building_blocks","get_flow_authoring_guide","draft_flow"]}]},{key:"finish",type:"finish",label:"Finish"}],edges:[{from:"start",to:"designer"},{from:"designer",to:"finish"}]},{servers:[{name:"flujo"}],serverTools:{flujo:["list_flow_building_blocks","get_flow_authoring_guide","draft_flow"]}});if(!a.flow)throw Error("Bundled Flow Generator could not be compiled");a.flow.id=f,a.flow.name="Flow Generator",a.flow.folder="System",a.flow.permissionRules=[{action:"list_flow_building_blocks",resource:"*",effect:"allow"},{action:"get_flow_authoring_guide",resource:"*",effect:"allow"},{action:"draft_flow",resource:"*",effect:"allow"}];let b=a.flow.nodes.find(a=>"process"===a.type);if(!b)throw Error("Bundled Flow Generator has no designer process");return b.data.properties={...b.data.properties??{},systemRole:g,systemFlowVersion:1},a.flow}async function j(){let a=await e.flowService.getFlow(f);if(a)return a;let b=i(),c=await e.flowService.saveFlow(b);if(!c.success)throw Error(c.error??"Failed to seed the Flow Generator");return b}async function k(){let a=i(),b=await e.flowService.saveFlow(a);if(!b.success)throw Error(b.error??"Failed to restore the Flow Generator");return a}async function l(a,b){let c=JSON.parse(JSON.stringify(await j()));c.id=`quickchat-flow-generator-${a}`,c.name="Flow Generator Session",delete c.createdAt,delete c.updatedAt;let d=c.nodes.find(a=>"process"===a.type&&a.data?.properties?.systemRole===g);if(!d)throw Error("The editable Flow Generator has no process marked as the flow-generator role. Restore the default generator or add that role back.");return d.data.properties={...d.data.properties??{},boundModel:b},c}},51669:(a,b)=>{"use strict";function c(a){for(let b=0;b<a.length;b++){let c=a[b];if("function"!=typeof c)throw Object.defineProperty(Error(`A "use server" file can only export async functions, found ${typeof c}.
9
+ Prefer a small, clear root Flow, but create inline subflowSpec / parallelSubflowSpecs when a task has self-contained phases. New nested subflows are enabled by default, bounded to ${f.Jt} nesting levels and six generated flows total. Never call create_flow: the result must remain unsaved until the user opens it in the builder.
10
+
11
+ ${f.Mr}`,m=`You are the Flow Architect stage.
12
+
13
+ On EVERY visit:
14
+ 1. Call list_flow_building_blocks before authoring so every model, MCP server/tool, and existing-flow reference is real.
15
+ 2. Call get_flow_authoring_guide with profile "advanced".
16
+ 3. Read the newest user instruction. If the transcript already contains a prior draft_generated_flow call/result, treat this as a revision: start from its returned hardened "spec", preserve everything not requested to change, and emit a complete replacement specification.
17
+ 4. If a required external capability is missing, search the MCP marketplace. Install only when the run's MCP installation policy explicitly permits it and installation tools are actually available.
18
+ 5. Return ONLY one complete advanced FlowSpec JSON object as your final response—no prose or Markdown fences.
19
+
20
+ Use inline subflowSpec / parallelSubflowSpecs for newly-created subflows. Do not emit generateSubflow because the deterministic compiler cannot expand it. Do not merely explain what you would build.`,n=`You are the Generation Compiler and repair stage.
21
+
22
+ Find the newest complete advanced FlowSpec JSON produced by the Flow Architect. Call draft_generated_flow with that complete specification. This tool is not a generic compiler: it executes the exact deterministic post-model pipeline shared with FLUJO's production generator—scratchpad guard, forgiving structural repair, bounded nested compilation, generated input/output defaults, and whole-bundle validation.
23
+
24
+ If the first result contains validation errors, repair the COMPLETE returned spec using its issues and call draft_generated_flow one more time, matching the production generator's default single repair round. Never call create_flow or substitute generic draft_flow. Never finish with only prose, a promise, or JSON that was not submitted to draft_generated_flow.
25
+
26
+ After a usable draft_generated_flow result exists, respond with only a short factual summary. The tool result—not your prose—is the authoritative unsaved draft returned to the UI.`;function o(){let a=(0,d.dM)({name:"Flow_Generator",description:"Experimental editable multi-stage Flow Generator: architecture, capability discovery, validation, repair, and unsaved drafting.",nodes:[{key:"start",type:"start",label:"Start",prompt:l},{key:"architect",type:"process",label:"Flow Architect",description:"Inventories real building blocks and authors a complete advanced FlowSpec.",prompt:m,maxTurns:12,inputMode:"full-history",outputMode:"latest-message",servers:[{name:"flujo",tools:["list_flow_building_blocks","get_flow_authoring_guide","search_mcp_marketplace",...j]}]},{key:"compiler",type:"process",label:"Generation Compiler",description:"Runs the production generator hardening pipeline and one bounded repair round.",prompt:n,maxTurns:16,inputMode:"full-history",outputMode:"latest-message",servers:[{name:"flujo",tools:["draft_generated_flow"]}]},{key:"finish",type:"finish",label:"Finish"}],edges:[{from:"start",to:"architect"},{from:"architect",to:"compiler"},{from:"compiler",to:"finish"}]},{servers:[{name:"flujo"}],serverTools:{flujo:[...k]}});if(!a.flow)throw Error("Bundled Flow Generator could not be compiled");a.flow.id=g,a.flow.name="Experimental Flow Generator",a.flow.folder="System";let b=new Set(j);for(let c of a.flow.nodes.filter(a=>"mcp"===a.type)){let a=c.data?.properties?.enabledTools;Array.isArray(a)&&(c.data.properties={...c.data.properties??{},enabledTools:a.filter(a=>!b.has(String(a)))})}a.flow.permissionRules=i.map(a=>({action:a,resource:"*",effect:"allow"}));let c=a.flow.nodes.filter(a=>"process"===a.type);if(2!==c.length)throw Error("Bundled Flow Generator must contain architect and compiler stages");return c.forEach((a,b)=>{a.data.properties={...a.data.properties??{},systemRole:h,systemStage:0===b?"architect":"compiler",systemFlowVersion:3}}),a.flow}async function p(){let a=await e.flowService.getFlow(g),b=a?.nodes.filter(a=>"process"===a.type).map(a=>Number(a.data?.properties?.systemFlowVersion??0)).find(a=>a>0);if(a&&1!==b&&2!==b)return a;let c=o(),d=await e.flowService.saveFlow(c);if(!d.success)throw Error(d.error??"Failed to seed the Flow Generator");return c}async function q(){let a=o(),b=await e.flowService.saveFlow(a);if(!b.success)throw Error(b.error??"Failed to restore the Flow Generator");return a}async function r(a,b,c){let d=JSON.parse(JSON.stringify(await p()));d.id=`quickchat-flow-generator-${a}`,d.name="Flow Generator Session",delete d.createdAt,delete d.updatedAt;let e=d.nodes.filter(a=>"process"===a.type&&a.data?.properties?.systemRole===h);if(e.length<2)throw Error("The editable Flow Generator is missing its architect/compiler stages. Restore the default generator or add the flow-generator roles back.");for(let a of e)a.data.properties={...a.data.properties??{},boundModel:b};let f=c?.allowInstall===!0,g=new Set(j);if(f){for(let a of d.nodes.filter(a=>"mcp"===a.type)){let b=Array.isArray(a.data?.properties?.enabledTools)?a.data.properties.enabledTools.map(String):[];a.data.properties={...a.data.properties??{},enabledTools:[...new Set([...b,...j])]}}let a=new Set((d.permissionRules??[]).map(a=>a.action));d.permissionRules=[...d.permissionRules??[],...j.filter(b=>!a.has(b)).map(a=>({action:a,resource:"*",effect:"allow"}))]}else{for(let a of d.nodes.filter(a=>"mcp"===a.type)){let b=a.data?.properties?.enabledTools;Array.isArray(b)&&(a.data.properties={...a.data.properties??{},enabledTools:b.filter(a=>!g.has(String(a)))})}d.permissionRules=(d.permissionRules??[]).filter(a=>!g.has(a.action))}let i=d.nodes.find(a=>"start"===a.type);return i&&(i.data.properties={...i.data.properties??{},promptTemplate:`${String(i.data.properties?.promptTemplate??"")}
27
+
28
+ ${f?"MCP INSTALLATION POLICY FOR THIS RUN: explicitly opted in. Marketplace search and install tools may be used; consent/audit enforcement still applies.":"MCP INSTALLATION POLICY FOR THIS RUN: NOT opted in. Marketplace search is allowed for recommendations, but installation tools have been removed. Do not install or reference an unconfigured server in the draft."}`}),d}},51669:(a,b)=>{"use strict";function c(a){for(let b=0;b<a.length;b++){let c=a[b];if("function"!=typeof c)throw Object.defineProperty(Error(`A "use server" file can only export async functions, found ${typeof c}.
8
29
  Read more: https://nextjs.org/docs/messages/invalid-use-server-value`),"__NEXT_ERROR_CODE",{value:"E352",enumerable:!1,configurable:!0})}}Object.defineProperty(b,"D",{enumerable:!0,get:function(){return c}})},53119:(a,b,c)=>{"use strict";c.d(b,{x:()=>k,m:()=>l});let d=["https://registry.modelcontextprotocol.io/?q=ai.keenable%2Fweb-search","https://registry.modelcontextprotocol.io/v0.1/servers/io.github.mario-andreschak%2Fmcp-abap-adt/versions",{url:"https://registry.modelcontextprotocol.io/v0.1/servers/io.github.microsoft%2Fplaywright-mcp/versions",env:{PLAYWRIGHT_MCP_BROWSER:"msedge"}}];function e(a){return"string"==typeof a?{url:a}:a}var f=c(38844),g=c(92372),h=c(25250),i=c(8665);let j=(0,c(50846).h)("backend/services/spotlight");async function k(){return(0,g.YM)(f.Z.SPOTLIGHT_SERVERS,null)}function l(){return global.__flujo_spotlight_refresh||(global.__flujo_spotlight_refresh=m().finally(()=>{global.__flujo_spotlight_refresh=void 0})),global.__flujo_spotlight_refresh}async function m(){let a=d.map(e);j.info(`Refreshing spotlight servers (${a.length} entries)`);let b=[];for(let c of a){let{url:a,env:d}=c,e=(0,h.XQ)(a);if(!e){j.warn(`Unrecognized spotlight URL format: ${a}`),b.push({url:a,env:d,error:"Unrecognized spotlight URL format"});continue}try{let c=await (0,i.Ws)(new URL(i.jD+e),15e3),f=(0,h.zz)(c);f?b.push({url:a,env:d,result:f}):(j.warn(`Spotlight URL resolved to no server: ${a}`),b.push({url:a,env:d,error:"No matching server found in the registry"}))}catch(e){let c=e instanceof Error?e.message:"Unknown error";j.warn(`Failed to resolve spotlight URL ${a}: ${c}`),b.push({url:a,env:d,error:c})}await new Promise(a=>setTimeout(a,250))}let c={updatedAt:new Date().toISOString(),entries:b},l=await k();if(l){for(let a of c.entries)if(!a.result){let b=l.entries.find(b=>b.url===a.url&&b.result);b?.result&&(a.result=b.result)}}await (0,g.VH)(f.Z.SPOTLIGHT_SERVERS,c);let m=c.entries.filter(a=>a.result).length;return j.info(`Spotlight refresh complete: ${m}/${c.entries.length} entries resolved`),c}},56793:(a,b,c)=>{"use strict";c.d(b,{eh:()=>g,ru:()=>e});let d=(0,c(50846).h)("backend/services/scheduler/flowRunEventBus");function e(a){return"signal"===a.kind}class f{publish(a){if(0===this.listeners.size)return;let b=e(a)?`signal topic=${a.topic} emitter=${a.emitterFlowId}`:`flow=${a.flowId} status=${a.status}`;for(let c of(d.debug(`Publishing flow event: ${b} firedBy=${a.firedBy} depth=${a.chainDepth} listeners=${this.listeners.size}`),[...this.listeners]))try{c(a)}catch(a){d.warn("A flow-run event listener threw:",a)}}subscribe(a){return this.listeners.add(a),()=>{this.listeners.delete(a)}}get listenerCount(){return this.listeners.size}constructor(){this.listeners=new Set}}function g(){return global.__flujo_flow_run_event_bus||(global.__flujo_flow_run_event_bus=new f),global.__flujo_flow_run_event_bus}},68633:(a,b,c)=>{"use strict";Object.defineProperty(b,"__esModule",{value:!0}),!function(a,b){for(var c in b)Object.defineProperty(a,c,{enumerable:!0,get:b[c]})}(b,{decryptActionBoundArgs:function(){return s},encryptActionBoundArgs:function(){return r}}),c(77925);let d=c(97954),e=c(27825),f=c(47686),g=c(77533),h=c(63033),i=c(26906),j=function(a){return a&&a.__esModule?a:{default:a}}(c(74515)),k=new TextEncoder,l=new TextDecoder,m=void 0,n=void 0;async function o(a,b){let c=await (0,g.getActionEncryptionKey)();if(void 0===c)throw Object.defineProperty(Error("Missing encryption key for Server Action. This is a bug in Next.js"),"__NEXT_ERROR_CODE",{value:"E65",enumerable:!1,configurable:!0});let d=atob(b),e=d.slice(0,16),f=d.slice(16),h=l.decode(await (0,g.decrypt)(c,(0,g.stringToUint8Array)(e),(0,g.stringToUint8Array)(f)));if(!h.startsWith(a))throw Object.defineProperty(Error("Invalid Server Action payload: failed to decrypt."),"__NEXT_ERROR_CODE",{value:"E191",enumerable:!1,configurable:!0});return h.slice(a.length)}async function p(a,b){let c=await (0,g.getActionEncryptionKey)();if(void 0===c)throw Object.defineProperty(Error("Missing encryption key for Server Action. This is a bug in Next.js"),"__NEXT_ERROR_CODE",{value:"E65",enumerable:!1,configurable:!0});let d=new Uint8Array(16);h.workUnitAsyncStorage.exit(()=>crypto.getRandomValues(d));let e=(0,g.arrayBufferToString)(d.buffer),f=await (0,g.encrypt)(c,d,k.encode(a+b));return btoa(e+(0,g.arrayBufferToString)(f))}var q=function(a){return a[a.Ready=0]="Ready",a[a.Pending=1]="Pending",a[a.Complete=2]="Complete",a}(q||{});let r=j.default.cache(async function a(b,...c){let e=h.workUnitAsyncStorage.getStore(),j=e?(0,h.getCacheSignal)(e):void 0,{clientModules:k}=(0,g.getClientReferenceManifestForRsc)(),l=Error();Error.captureStackTrace(l,a);let n=!1,o=e?(0,i.createHangingInputAbortSignal)(e):void 0,q=0;function r(){0===q&&(q=1,null==j||j.beginRead())}function s(){1===q&&(null==j||j.endRead()),q=2}o&&j&&o.addEventListener("abort",r,{once:!0});let t=await (0,f.streamToString)((0,d.renderToReadableStream)(c,k,{filterStackFrame:m,signal:o,onError(a){(null==o||!o.aborted)&&(n||(n=!0,l.message=a instanceof Error?a.message:String(a)))}}),o);if(n)throw s(),l;if(!e)return p(b,t);r();let u=(0,h.getPrerenderResumeDataCache)(e),v=(0,h.getRenderResumeDataCache)(e),w=b+t,x=(null==u?void 0:u.encryptedBoundArgs.get(w))??(null==v?void 0:v.encryptedBoundArgs.get(w));if(x)return x;let y=await p(b,t);return s(),null==u||u.encryptedBoundArgs.set(w,y),y});async function s(a,b){let c,d=await b,f=h.workUnitAsyncStorage.getStore();if(f){let b=(0,h.getCacheSignal)(f),e=(0,h.getPrerenderResumeDataCache)(f),g=(0,h.getRenderResumeDataCache)(f);(c=(null==e?void 0:e.decryptedBoundArgs.get(d))??(null==g?void 0:g.decryptedBoundArgs.get(d)))||(null==b||b.beginRead(),c=await o(a,d),null==b||b.endRead(),null==e||e.decryptedBoundArgs.set(d,c))}else c=await o(a,d);let{edgeRscModuleMapping:i,rscModuleMapping:j}=(0,g.getClientReferenceManifestForRsc)();return await (0,e.createFromReadableStream)(new ReadableStream({start(a){switch(a.enqueue(k.encode(c)),null==f?void 0:f.type){case"prerender":case"prerender-runtime":f.renderSignal.aborted?a.close():f.renderSignal.addEventListener("abort",()=>a.close(),{once:!0});break;case"prerender-client":case"prerender-ppr":case"prerender-legacy":case"request":case"cache":case"private-cache":case"unstable-cache":case void 0:return a.close()}}}),{findSourceMapURL:n,serverConsumerManifest:{moduleLoading:null,moduleMap:j,serverModuleMap:(0,g.getServerModuleMap)()}})}},72937:(a,b,c)=>{"use strict";c.d(b,{H:()=>n,t:()=>q});var d=c(73736),e=c(92372),f=c(60453),g=c(61539),h=c(53119),i=c(4771),j=c(58739),k=c(50846),l=c(8491);let m=(0,k.h)("backend/init");function n(){return global.__flujo_init_promise||(global.__flujo_init_promise=o().catch(a=>{throw global.__flujo_init_promise=void 0,a})),global.__flujo_init_promise}async function o(){if(await (0,e.Pv)(),await (0,l.V2)(),(0,h.m)().catch(a=>m.warn("Spotlight refresh failed at startup:",a)),await (0,j.isEncryptionLocked)())return void m.info("Encryption locked — deferring MCP/scheduler startup until unlock");await p()}function p(){return global.__flujo_secret_services_promise||(global.__flujo_secret_services_promise=(async()=>{m.info("Initializing MCP servers"),await f.mcpService.startEnabledServers().catch(a=>{m.error("Failed to start enabled servers:",a)}),await (0,i.getSchedulerService)().start().catch(a=>m.error("Failed to start scheduler:",a));try{global.__flujo_retention_cron||(global.__flujo_retention_cron=new d.l4("0 * * * *",{unref:!0},()=>{(0,g.wc)().catch(a=>m.warn("Run-resource retention sweep failed:",a))}),m.info("Armed run-resource retention sweep (hourly)"))}catch(a){m.error("Failed to arm run-resource retention sweep:",a)}})()),global.__flujo_secret_services_promise}async function q(){await (0,j.isUserEncryptionEnabled)()&&(m.info("Encryption unlocked — starting deferred MCP/scheduler startup"),await p())}},73456:(a,b,c)=>{"use strict";c.d(b,{G:()=>m,V:()=>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,b={}){j.debug("Entering resolveGlobalVars method");let c=!1!==b.resolveSecrets,d=await (0,f.YM)(g.Z.GLOBAL_ENV_VARS,{}),e=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}(d);j.debug(`Loaded ${Object.keys(d).length} global environment variables (${e?"new":"old"} format)`);let i={},l=new Set;if(e)for(let[a,b]of Object.entries(d))i[a]=b.value,b.metadata.isSecret&&l.add(a);else i={...d};let m=async a=>{let b=a.match(/\$\{global:([^}]+)\}/g);if(!b)return a;let d=a;for(let a of b){let b=a.substring(9,a.length-1);if(void 0!==i[b]){let e=i[b];if(!c&&(l.has(b)||e.startsWith("encrypted:")||e.startsWith("encrypted_failed:"))){j.debug(`Keeping secret global variable unresolved: ${b}`);continue}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}`),d=d.replace(a,e)}else j.warn(`Global variable not found: ${b}`)}return d},n=async a=>{if("string"==typeof a)return await m(a);if(Array.isArray(a))return await Promise.all(a.map(a=>n(a)));if(null!==a&&"object"==typeof a){let b={};for(let[c,d]of Object.entries(a))b[c]=await n(d);return b}return a},o=await n(a);return"object"==typeof a&&null!==a&&j.debug("Resolved global variables result:",JSON.stringify(o,null,2)),j.debug("Completed global variable resolution"),o}async function l(a){return k(a,{resolveSecrets:!1})}async function m(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`),m(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,m]),(0,d.A)(k,"605caa1e030009a4bc7e820854ff481d3e0295325d",null),(0,d.A)(l,"4003ce37366709f5add0c98a6e32e47a1006fd7c7d",null),(0,d.A)(m,"6061ed6d99a98b5d9f5d2d15065caab0a27d6a8987",null)},75879:(a,b,c)=>{"use strict";Object.defineProperty(b,"A",{enumerable:!0,get:function(){return d.registerServerReference}});let d=c(97954)},78335:()=>{},91959:(a,b,c)=>{"use strict";c.r(b),c.d(b,{"4003ce37366709f5add0c98a6e32e47a1006fd7c7d":()=>d.V,"605caa1e030009a4bc7e820854ff481d3e0295325d":()=>d.resolveGlobalVars,"6061ed6d99a98b5d9f5d2d15065caab0a27d6a8987":()=>d.G});var d=c(73456)},96487:()=>{}};
@@ -1 +1 @@
1
- {"version":1,"files":["../../node_modules/next/dist/client/components/app-router-headers.js","../../node_modules/next/dist/compiled/@opentelemetry/api/index.js","../../node_modules/next/dist/compiled/@opentelemetry/api/package.json","../../node_modules/next/dist/compiled/jsonwebtoken/index.js","../../node_modules/next/dist/compiled/jsonwebtoken/package.json","../../node_modules/next/dist/compiled/next-server/app-page.runtime.prod.js","../../node_modules/next/dist/lib/client-and-server-references.js","../../node_modules/next/dist/lib/constants.js","../../node_modules/next/dist/lib/interop-default.js","../../node_modules/next/dist/lib/is-error.js","../../node_modules/next/dist/lib/semver-noop.js","../../node_modules/next/dist/server/app-render/action-async-storage-instance.js","../../node_modules/next/dist/server/app-render/action-async-storage.external.js","../../node_modules/next/dist/server/app-render/after-task-async-storage-instance.js","../../node_modules/next/dist/server/app-render/after-task-async-storage.external.js","../../node_modules/next/dist/server/app-render/async-local-storage.js","../../node_modules/next/dist/server/app-render/cache-signal.js","../../node_modules/next/dist/server/app-render/module-loading/track-module-loading.external.js","../../node_modules/next/dist/server/app-render/module-loading/track-module-loading.instance.js","../../node_modules/next/dist/server/app-render/work-async-storage-instance.js","../../node_modules/next/dist/server/app-render/work-async-storage.external.js","../../node_modules/next/dist/server/app-render/work-unit-async-storage-instance.js","../../node_modules/next/dist/server/app-render/work-unit-async-storage.external.js","../../node_modules/next/dist/server/lib/cache-handlers/default.external.js","../../node_modules/next/dist/server/lib/incremental-cache/memory-cache.external.js","../../node_modules/next/dist/server/lib/incremental-cache/shared-cache-controls.external.js","../../node_modules/next/dist/server/lib/incremental-cache/tags-manifest.external.js","../../node_modules/next/dist/server/lib/lru-cache.js","../../node_modules/next/dist/server/lib/router-utils/instrumentation-globals.external.js","../../node_modules/next/dist/server/lib/router-utils/instrumentation-node-extensions.js","../../node_modules/next/dist/server/lib/trace/constants.js","../../node_modules/next/dist/server/lib/trace/tracer.js","../../node_modules/next/dist/server/load-manifest.external.js","../../node_modules/next/dist/server/response-cache/types.js","../../node_modules/next/dist/shared/lib/deep-freeze.js","../../node_modules/next/dist/shared/lib/invariant-error.js","../../node_modules/next/dist/shared/lib/is-plain-object.js","../../node_modules/next/dist/shared/lib/is-thenable.js","../../node_modules/next/dist/shared/lib/server-reference-info.js","../../node_modules/next/package.json","../package.json","chunks/1114.js","chunks/166.js","chunks/1870.js","chunks/232.js","chunks/4436.js","chunks/4551.js","chunks/6432.js","chunks/6747.js","chunks/701.js","chunks/7032.js","chunks/7412.js","chunks/8092.js","chunks/8165.js","chunks/8187.js","chunks/8938.js","chunks/9273.js","chunks/94.js","chunks/9406.js","chunks/9724.js","webpack-runtime.js"]}
1
+ {"version":1,"files":["../../node_modules/next/dist/client/components/app-router-headers.js","../../node_modules/next/dist/compiled/@opentelemetry/api/index.js","../../node_modules/next/dist/compiled/@opentelemetry/api/package.json","../../node_modules/next/dist/compiled/jsonwebtoken/index.js","../../node_modules/next/dist/compiled/jsonwebtoken/package.json","../../node_modules/next/dist/compiled/next-server/app-page.runtime.prod.js","../../node_modules/next/dist/lib/client-and-server-references.js","../../node_modules/next/dist/lib/constants.js","../../node_modules/next/dist/lib/interop-default.js","../../node_modules/next/dist/lib/is-error.js","../../node_modules/next/dist/lib/semver-noop.js","../../node_modules/next/dist/server/app-render/action-async-storage-instance.js","../../node_modules/next/dist/server/app-render/action-async-storage.external.js","../../node_modules/next/dist/server/app-render/after-task-async-storage-instance.js","../../node_modules/next/dist/server/app-render/after-task-async-storage.external.js","../../node_modules/next/dist/server/app-render/async-local-storage.js","../../node_modules/next/dist/server/app-render/cache-signal.js","../../node_modules/next/dist/server/app-render/module-loading/track-module-loading.external.js","../../node_modules/next/dist/server/app-render/module-loading/track-module-loading.instance.js","../../node_modules/next/dist/server/app-render/work-async-storage-instance.js","../../node_modules/next/dist/server/app-render/work-async-storage.external.js","../../node_modules/next/dist/server/app-render/work-unit-async-storage-instance.js","../../node_modules/next/dist/server/app-render/work-unit-async-storage.external.js","../../node_modules/next/dist/server/lib/cache-handlers/default.external.js","../../node_modules/next/dist/server/lib/incremental-cache/memory-cache.external.js","../../node_modules/next/dist/server/lib/incremental-cache/shared-cache-controls.external.js","../../node_modules/next/dist/server/lib/incremental-cache/tags-manifest.external.js","../../node_modules/next/dist/server/lib/lru-cache.js","../../node_modules/next/dist/server/lib/router-utils/instrumentation-globals.external.js","../../node_modules/next/dist/server/lib/router-utils/instrumentation-node-extensions.js","../../node_modules/next/dist/server/lib/trace/constants.js","../../node_modules/next/dist/server/lib/trace/tracer.js","../../node_modules/next/dist/server/load-manifest.external.js","../../node_modules/next/dist/server/response-cache/types.js","../../node_modules/next/dist/shared/lib/deep-freeze.js","../../node_modules/next/dist/shared/lib/invariant-error.js","../../node_modules/next/dist/shared/lib/is-plain-object.js","../../node_modules/next/dist/shared/lib/is-thenable.js","../../node_modules/next/dist/shared/lib/server-reference-info.js","../../node_modules/next/package.json","../package.json","chunks/1114.js","chunks/166.js","chunks/1870.js","chunks/232.js","chunks/4436.js","chunks/4551.js","chunks/5309.js","chunks/6432.js","chunks/6747.js","chunks/701.js","chunks/7032.js","chunks/7412.js","chunks/8092.js","chunks/8165.js","chunks/8938.js","chunks/9273.js","chunks/94.js","chunks/9406.js","chunks/9724.js","webpack-runtime.js"]}
@@ -1 +1 @@
1
- globalThis.__BUILD_MANIFEST={polyfillFiles:["static/chunks/polyfills-42372ed130431b0a.js"],devFiles:[],ampDevFiles:[],lowPriorityFiles:[],rootMainFiles:["static/chunks/webpack-dccb4f149ebdedcc.js","static/chunks/4bd1b696-182b6b13bdad92e3.js","static/chunks/1255-13d973e0759ea6d6.js","static/chunks/main-app-2de821d2899bb841.js"],rootMainFilesTree:{},pages:{"/_app":["static/chunks/webpack-dccb4f149ebdedcc.js","static/chunks/framework-1548034a53843b9f.js","static/chunks/main-9bda5041078d2b6a.js","static/chunks/pages/_app-e8b861c87f6f033c.js"],"/_error":["static/chunks/webpack-dccb4f149ebdedcc.js","static/chunks/framework-1548034a53843b9f.js","static/chunks/main-9bda5041078d2b6a.js","static/chunks/pages/_error-c8f84f7bd11d43d4.js"]},ampFirstPages:[]},globalThis.__BUILD_MANIFEST.lowPriorityFiles=["/static/"+process.env.__NEXT_BUILD_ID+"/_buildManifest.js",,"/static/"+process.env.__NEXT_BUILD_ID+"/_ssgManifest.js"];
1
+ globalThis.__BUILD_MANIFEST={polyfillFiles:["static/chunks/polyfills-42372ed130431b0a.js"],devFiles:[],ampDevFiles:[],lowPriorityFiles:[],rootMainFiles:["static/chunks/webpack-d5d737ff6a86674f.js","static/chunks/4bd1b696-182b6b13bdad92e3.js","static/chunks/1255-13d973e0759ea6d6.js","static/chunks/main-app-2de821d2899bb841.js"],rootMainFilesTree:{},pages:{"/_app":["static/chunks/webpack-d5d737ff6a86674f.js","static/chunks/framework-1548034a53843b9f.js","static/chunks/main-9bda5041078d2b6a.js","static/chunks/pages/_app-e8b861c87f6f033c.js"],"/_error":["static/chunks/webpack-d5d737ff6a86674f.js","static/chunks/framework-1548034a53843b9f.js","static/chunks/main-9bda5041078d2b6a.js","static/chunks/pages/_error-c8f84f7bd11d43d4.js"]},ampFirstPages:[]},globalThis.__BUILD_MANIFEST.lowPriorityFiles=["/static/"+process.env.__NEXT_BUILD_ID+"/_buildManifest.js",,"/static/"+process.env.__NEXT_BUILD_ID+"/_ssgManifest.js"];
@@ -22,7 +22,7 @@
22
22
  "wasm": [],
23
23
  "assets": [],
24
24
  "env": {
25
- "__NEXT_BUILD_ID": "jfb1GsjSGMjBmwfa3kM26",
25
+ "__NEXT_BUILD_ID": "Zz_Vh59XdtLIPcf-PxCpo",
26
26
  "NEXT_SERVER_ACTIONS_ENCRYPTION_KEY": "VdE9c1sIalXQuPGJWNUKWkO72EvzBDr46ha1orwzXsI=",
27
27
  "__NEXT_PREVIEW_MODE_ID": "504c0a6b911be0b2ac15baec6309fb29",
28
28
  "__NEXT_PREVIEW_MODE_SIGNING_KEY": "b670417ac233807e27ba2d9a4769bc7d7929b5e35e11a7191bd88b0c3f73e503",
@@ -1 +1 @@
1
- self.__REACT_LOADABLE_MANIFEST='{"..\\\\node_modules\\\\@modelcontextprotocol\\\\ext-apps\\\\dist\\\\src\\\\app-bridge.js -> zod/v4":{"id":63910,"files":["static/chunks/3910.5c6885d7a5bd753e.js"]},"..\\\\node_modules\\\\next\\\\dist\\\\client\\\\index.js -> ../pages/_app":{"id":45139,"files":["static/chunks/5139.e4ff9cc3669129ed.js"]},"..\\\\node_modules\\\\next\\\\dist\\\\client\\\\index.js -> ../pages/_error":{"id":31646,"files":["static/chunks/1646.a93085a0445ba909.js"]},"frontend\\\\components\\\\AppWrapper.tsx -> ../contexts/StorageContext":{"id":9164,"files":["static/chunks/9164-de1d167d87614a6d.js"]},"frontend\\\\components\\\\AppWrapper.tsx -> ../contexts/ThemeContext":{"id":26796,"files":["static/chunks/2678-c88052addfb0478a.js","static/chunks/8598-1b627b3d682b364a.js","static/chunks/8405.a425f94b6b13d2be.js"]},"frontend\\\\components\\\\AppWrapper.tsx -> ../contexts/TourContext":{"id":69195,"files":["static/chunks/9164-de1d167d87614a6d.js","static/chunks/9195.294887f083b1a11b.js"]},"frontend\\\\components\\\\AppWrapper.tsx -> ./EncryptionAuthDialog":{"id":23217,"files":["static/chunks/2678-c88052addfb0478a.js","static/chunks/4754-5c62bb61142f82d1.js","static/chunks/9244-3281f7fd02003a2c.js","static/chunks/3392-6dd9ad3be66a7ce9.js","static/chunks/1871-14c3e63ca865d85e.js","static/chunks/981-dd289e60d81da0d1.js","static/chunks/2003-f826c607d609d1fa.js","static/chunks/9562-f8371be653010627.js","static/chunks/3272-fd8d59523f61da96.js","static/chunks/9164-de1d167d87614a6d.js","static/chunks/3217.260785c2198d1e9d.js"]},"frontend\\\\components\\\\AppWrapper.tsx -> ./Navigation":{"id":93089,"files":["static/chunks/2678-c88052addfb0478a.js","static/chunks/4754-5c62bb61142f82d1.js","static/chunks/9244-3281f7fd02003a2c.js","static/chunks/3392-6dd9ad3be66a7ce9.js","static/chunks/1871-14c3e63ca865d85e.js","static/chunks/981-dd289e60d81da0d1.js","static/chunks/2003-f826c607d609d1fa.js","static/chunks/9562-f8371be653010627.js","static/chunks/3272-fd8d59523f61da96.js","static/chunks/8470-72cf748472d4d501.js","static/chunks/9581-6d2523fd68a5e3c4.js","static/chunks/8598-1b627b3d682b364a.js","static/chunks/4523-a540747aa2ed34e8.js","static/chunks/454.5fc2f8eef98483e3.js","static/chunks/9164-de1d167d87614a6d.js","static/chunks/3089.df88f3b16898aad7.js"]},"frontend\\\\components\\\\AppWrapper.tsx -> ./TelemetryNotice":{"id":361,"files":["static/chunks/2678-c88052addfb0478a.js","static/chunks/4754-5c62bb61142f82d1.js","static/chunks/9244-3281f7fd02003a2c.js","static/chunks/3392-6dd9ad3be66a7ce9.js","static/chunks/1871-14c3e63ca865d85e.js","static/chunks/981-dd289e60d81da0d1.js","static/chunks/2003-f826c607d609d1fa.js","static/chunks/422-61b173ba64cf0c94.js","static/chunks/9164-de1d167d87614a6d.js","static/chunks/361.bb75b03b740930cd.js"]},"frontend\\\\components\\\\AppWrapper.tsx -> ./Tour/TourOverlay":{"id":83545,"files":["static/chunks/2678-c88052addfb0478a.js","static/chunks/4754-5c62bb61142f82d1.js","static/chunks/9244-3281f7fd02003a2c.js","static/chunks/3392-6dd9ad3be66a7ce9.js","static/chunks/1871-14c3e63ca865d85e.js","static/chunks/2005-f9d38c39f10c321f.js","static/chunks/8345.bc5534ec13abc9ee.js","static/chunks/9164-de1d167d87614a6d.js","static/chunks/3545.353a62a68d3b7fd1.js"]},"frontend\\\\components\\\\mcp\\\\MCPServerManager\\\\ServerCard.tsx -> @/frontend/utils/oauth":{"id":68198,"files":["static/chunks/8198.cd0d3f8429c02862.js"]},"frontend\\\\components\\\\mcp\\\\MCPServerManager\\\\index.tsx -> @/frontend/utils/oauth":{"id":68198,"files":["static/chunks/8198.cd0d3f8429c02862.js"]}}';
1
+ self.__REACT_LOADABLE_MANIFEST='{"..\\\\node_modules\\\\@modelcontextprotocol\\\\ext-apps\\\\dist\\\\src\\\\app-bridge.js -> zod/v4":{"id":63910,"files":["static/chunks/3910.5c6885d7a5bd753e.js"]},"..\\\\node_modules\\\\next\\\\dist\\\\client\\\\index.js -> ../pages/_app":{"id":45139,"files":["static/chunks/5139.e4ff9cc3669129ed.js"]},"..\\\\node_modules\\\\next\\\\dist\\\\client\\\\index.js -> ../pages/_error":{"id":31646,"files":["static/chunks/1646.a93085a0445ba909.js"]},"frontend\\\\components\\\\AppWrapper.tsx -> ../contexts/StorageContext":{"id":9164,"files":["static/chunks/9164-de1d167d87614a6d.js"]},"frontend\\\\components\\\\AppWrapper.tsx -> ../contexts/ThemeContext":{"id":26796,"files":["static/chunks/2678-c88052addfb0478a.js","static/chunks/8598-1b627b3d682b364a.js","static/chunks/8405.a425f94b6b13d2be.js"]},"frontend\\\\components\\\\AppWrapper.tsx -> ../contexts/TourContext":{"id":69195,"files":["static/chunks/9164-de1d167d87614a6d.js","static/chunks/9195.294887f083b1a11b.js"]},"frontend\\\\components\\\\AppWrapper.tsx -> ./EncryptionAuthDialog":{"id":23217,"files":["static/chunks/2678-c88052addfb0478a.js","static/chunks/4754-5c62bb61142f82d1.js","static/chunks/9244-3281f7fd02003a2c.js","static/chunks/3392-6dd9ad3be66a7ce9.js","static/chunks/1871-14c3e63ca865d85e.js","static/chunks/981-dd289e60d81da0d1.js","static/chunks/2003-f826c607d609d1fa.js","static/chunks/9562-f8371be653010627.js","static/chunks/3272-fd8d59523f61da96.js","static/chunks/9164-de1d167d87614a6d.js","static/chunks/3217.260785c2198d1e9d.js"]},"frontend\\\\components\\\\AppWrapper.tsx -> ./Navigation":{"id":32005,"files":["static/chunks/2678-c88052addfb0478a.js","static/chunks/4754-5c62bb61142f82d1.js","static/chunks/9244-3281f7fd02003a2c.js","static/chunks/3392-6dd9ad3be66a7ce9.js","static/chunks/1871-14c3e63ca865d85e.js","static/chunks/981-dd289e60d81da0d1.js","static/chunks/2003-f826c607d609d1fa.js","static/chunks/9562-f8371be653010627.js","static/chunks/3272-fd8d59523f61da96.js","static/chunks/8470-72cf748472d4d501.js","static/chunks/9581-6d2523fd68a5e3c4.js","static/chunks/8598-1b627b3d682b364a.js","static/chunks/4523-a540747aa2ed34e8.js","static/chunks/454.5fc2f8eef98483e3.js","static/chunks/9164-de1d167d87614a6d.js","static/chunks/2005.4eea65c00d9a29cd.js"]},"frontend\\\\components\\\\AppWrapper.tsx -> ./TelemetryNotice":{"id":361,"files":["static/chunks/2678-c88052addfb0478a.js","static/chunks/4754-5c62bb61142f82d1.js","static/chunks/9244-3281f7fd02003a2c.js","static/chunks/3392-6dd9ad3be66a7ce9.js","static/chunks/1871-14c3e63ca865d85e.js","static/chunks/981-dd289e60d81da0d1.js","static/chunks/2003-f826c607d609d1fa.js","static/chunks/422-61b173ba64cf0c94.js","static/chunks/9164-de1d167d87614a6d.js","static/chunks/361.bb75b03b740930cd.js"]},"frontend\\\\components\\\\AppWrapper.tsx -> ./Tour/TourOverlay":{"id":83545,"files":["static/chunks/2678-c88052addfb0478a.js","static/chunks/4754-5c62bb61142f82d1.js","static/chunks/9244-3281f7fd02003a2c.js","static/chunks/3392-6dd9ad3be66a7ce9.js","static/chunks/1871-14c3e63ca865d85e.js","static/chunks/4386-e9621d3c94969a68.js","static/chunks/8345.bc5534ec13abc9ee.js","static/chunks/9164-de1d167d87614a6d.js","static/chunks/3545.353a62a68d3b7fd1.js"]},"frontend\\\\components\\\\mcp\\\\MCPServerManager\\\\ServerCard.tsx -> @/frontend/utils/oauth":{"id":68198,"files":["static/chunks/8198.cd0d3f8429c02862.js"]},"frontend\\\\components\\\\mcp\\\\MCPServerManager\\\\index.tsx -> @/frontend/utils/oauth":{"id":68198,"files":["static/chunks/8198.cd0d3f8429c02862.js"]}}';
@@ -1 +1 @@
1
- <!DOCTYPE html><!--jfb1GsjSGMjBmwfa3kM26--><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/css/b496025c9cd768cc.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/599369d853c61df7.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/30253fcfa8035221.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-dccb4f149ebdedcc.js"/><script src="/_next/static/chunks/4bd1b696-182b6b13bdad92e3.js" async=""></script><script src="/_next/static/chunks/1255-13d973e0759ea6d6.js" async=""></script><script src="/_next/static/chunks/main-app-2de821d2899bb841.js" async=""></script><script src="/_next/static/chunks/app/layout-38b88f3b057f4852.js" async=""></script><meta name="robots" content="noindex"/><title>FLUJO</title><meta name="description" content="A browser-based application for managing models, MCP servers, flows and chat interactions"/><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="__variable_246ccd __variable_c29908 antialiased"><div hidden=""><!--$--><!--/$--></div><!--$--><!--$!--><template data-dgst="BAILOUT_TO_CLIENT_SIDE_RENDERING"></template><div>Loading theme...</div><!--/$--><!--/$--><script src="/_next/static/chunks/webpack-dccb4f149ebdedcc.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[72403,[\"7177\",\"static/chunks/app/layout-38b88f3b057f4852.js\"],\"default\"]\n3:I[9766,[],\"\"]\n4:I[98924,[],\"\"]\n5:I[24431,[],\"OutletBoundary\"]\n7:I[15278,[],\"AsyncMetadataOutlet\"]\n9:I[24431,[],\"ViewportBoundary\"]\nb:I[24431,[],\"MetadataBoundary\"]\nc:\"$Sreact.suspense\"\ne:I[57150,[],\"\"]\n:HL[\"/_next/static/css/b496025c9cd768cc.css\",\"style\"]\n:HL[\"/_next/static/css/599369d853c61df7.css\",\"style\"]\n:HL[\"/_next/static/css/30253fcfa8035221.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"jfb1GsjSGMjBmwfa3kM26\",\"p\":\"\",\"c\":[\"\",\"_not-found\"],\"i\":false,\"f\":[[[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],[\"\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/b496025c9cd768cc.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/599369d853c61df7.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"2\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/30253fcfa8035221.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"children\":[\"$\",\"body\",null,{\"className\":\"__variable_246ccd __variable_c29908 antialiased\",\"children\":[\"$\",\"$L2\",null,{\"children\":[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]}]}]]}],{\"children\":[\"/_not-found\",[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[\"__PAGE__\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],null,[\"$\",\"$L5\",null,{\"children\":[\"$L6\",[\"$\",\"$L7\",null,{\"promise\":\"$@8\"}]]}]]}],{},null,false]},null,false]},null,false],[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[[\"$\",\"$L9\",null,{\"children\":\"$La\"}],null],[\"$\",\"$Lb\",null,{\"children\":[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$c\",null,{\"fallback\":null,\"children\":\"$Ld\"}]}]}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$e\",[]],\"s\":false,\"S\":true}\n"])</script><script>self.__next_f.push([1,"a:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n6:null\n"])</script><script>self.__next_f.push([1,"8:{\"metadata\":[[\"$\",\"title\",\"0\",{\"children\":\"FLUJO\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"A browser-based application for managing models, MCP servers, flows and chat interactions\"}]],\"error\":null,\"digest\":\"$undefined\"}\n"])</script><script>self.__next_f.push([1,"d:\"$8:metadata\"\n"])</script></body></html>
1
+ <!DOCTYPE html><!--Zz_Vh59XdtLIPcf_PxCpo--><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/css/b496025c9cd768cc.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/599369d853c61df7.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/30253fcfa8035221.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-d5d737ff6a86674f.js"/><script src="/_next/static/chunks/4bd1b696-182b6b13bdad92e3.js" async=""></script><script src="/_next/static/chunks/1255-13d973e0759ea6d6.js" async=""></script><script src="/_next/static/chunks/main-app-2de821d2899bb841.js" async=""></script><script src="/_next/static/chunks/app/layout-abed1f211e03152f.js" async=""></script><meta name="robots" content="noindex"/><title>FLUJO</title><meta name="description" content="A browser-based application for managing models, MCP servers, flows and chat interactions"/><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="__variable_246ccd __variable_c29908 antialiased"><div hidden=""><!--$--><!--/$--></div><!--$--><!--$!--><template data-dgst="BAILOUT_TO_CLIENT_SIDE_RENDERING"></template><div>Loading theme...</div><!--/$--><!--/$--><script src="/_next/static/chunks/webpack-d5d737ff6a86674f.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[72403,[\"7177\",\"static/chunks/app/layout-abed1f211e03152f.js\"],\"default\"]\n3:I[9766,[],\"\"]\n4:I[98924,[],\"\"]\n5:I[24431,[],\"OutletBoundary\"]\n7:I[15278,[],\"AsyncMetadataOutlet\"]\n9:I[24431,[],\"ViewportBoundary\"]\nb:I[24431,[],\"MetadataBoundary\"]\nc:\"$Sreact.suspense\"\ne:I[57150,[],\"\"]\n:HL[\"/_next/static/css/b496025c9cd768cc.css\",\"style\"]\n:HL[\"/_next/static/css/599369d853c61df7.css\",\"style\"]\n:HL[\"/_next/static/css/30253fcfa8035221.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"Zz_Vh59XdtLIPcf-PxCpo\",\"p\":\"\",\"c\":[\"\",\"_not-found\"],\"i\":false,\"f\":[[[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],[\"\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/b496025c9cd768cc.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/599369d853c61df7.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"2\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/30253fcfa8035221.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"children\":[\"$\",\"body\",null,{\"className\":\"__variable_246ccd __variable_c29908 antialiased\",\"children\":[\"$\",\"$L2\",null,{\"children\":[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]}]}]]}],{\"children\":[\"/_not-found\",[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[\"__PAGE__\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],null,[\"$\",\"$L5\",null,{\"children\":[\"$L6\",[\"$\",\"$L7\",null,{\"promise\":\"$@8\"}]]}]]}],{},null,false]},null,false]},null,false],[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[[\"$\",\"$L9\",null,{\"children\":\"$La\"}],null],[\"$\",\"$Lb\",null,{\"children\":[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$c\",null,{\"fallback\":null,\"children\":\"$Ld\"}]}]}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$e\",[]],\"s\":false,\"S\":true}\n"])</script><script>self.__next_f.push([1,"a:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n6:null\n"])</script><script>self.__next_f.push([1,"8:{\"metadata\":[[\"$\",\"title\",\"0\",{\"children\":\"FLUJO\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"A browser-based application for managing models, MCP servers, flows and chat interactions\"}]],\"error\":null,\"digest\":\"$undefined\"}\n"])</script><script>self.__next_f.push([1,"d:\"$8:metadata\"\n"])</script></body></html>
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charSet="utf-8" data-next-head=""/><meta name="viewport" content="width=device-width" data-next-head=""/><title data-next-head="">500: Internal Server Error</title><noscript data-n-css=""></noscript><script defer="" noModule="" src="/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="/_next/static/chunks/webpack-dccb4f149ebdedcc.js" defer=""></script><script src="/_next/static/chunks/framework-1548034a53843b9f.js" defer=""></script><script src="/_next/static/chunks/main-9bda5041078d2b6a.js" defer=""></script><script src="/_next/static/chunks/pages/_app-e8b861c87f6f033c.js" defer=""></script><script src="/_next/static/chunks/pages/_error-c8f84f7bd11d43d4.js" defer=""></script><script src="/_next/static/jfb1GsjSGMjBmwfa3kM26/_buildManifest.js" defer=""></script><script src="/_next/static/jfb1GsjSGMjBmwfa3kM26/_ssgManifest.js" defer=""></script></head><body><div id="__next"><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div style="line-height:48px"><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding-right:23px;font-size:24px;font-weight:500;vertical-align:top">500</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:28px">Internal Server Error<!-- -->.</h2></div></div></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"statusCode":500}},"page":"/_error","query":{},"buildId":"jfb1GsjSGMjBmwfa3kM26","nextExport":true,"isFallback":false,"gip":true,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8" data-next-head=""/><meta name="viewport" content="width=device-width" data-next-head=""/><title data-next-head="">500: Internal Server Error</title><noscript data-n-css=""></noscript><script defer="" noModule="" src="/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="/_next/static/chunks/webpack-d5d737ff6a86674f.js" defer=""></script><script src="/_next/static/chunks/framework-1548034a53843b9f.js" defer=""></script><script src="/_next/static/chunks/main-9bda5041078d2b6a.js" defer=""></script><script src="/_next/static/chunks/pages/_app-e8b861c87f6f033c.js" defer=""></script><script src="/_next/static/chunks/pages/_error-c8f84f7bd11d43d4.js" defer=""></script><script src="/_next/static/Zz_Vh59XdtLIPcf-PxCpo/_buildManifest.js" defer=""></script><script src="/_next/static/Zz_Vh59XdtLIPcf-PxCpo/_ssgManifest.js" defer=""></script></head><body><div id="__next"><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div style="line-height:48px"><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding-right:23px;font-size:24px;font-weight:500;vertical-align:top">500</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:28px">Internal Server Error<!-- -->.</h2></div></div></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"statusCode":500}},"page":"/_error","query":{},"buildId":"Zz_Vh59XdtLIPcf-PxCpo","nextExport":true,"isFallback":false,"gip":true,"scriptLoader":[]}</script></body></html>